Faremos a conexão dos motores, leds, sensor ultrassônico e alimentação externa no módulo Motor Shield L293D, conforme esquema apresentado abaixo.
O sensor ultrassônico HC-SR04 terá a função de identificar a distância dos objetos que estão a frente do JC-Mach I, fazendo com que evite a colisão e desvie desses objetos. O sensor ultrassônico funciona enviando uma onda ultrassônica pelo seu transmissor e, assim que essa onda acerta um objeto, ela retorna e é absorvida pelo receptor do sensor. Com isso, é possível identificar a distância do objeto a partir do intervalo de tempo entre a emissão e recepção dessa onda pelo sensor ultrassônico.
Esse sensor possui quatro pinos para conexão com o módulo Motor Shield L293D: o VCC do sensor conectado ao +5V do módulo, o GND do sensor conectado ao GND do módulo, o Trig (emissão) do sensor conectado à porta A0 do módulo e o Echo (recepção) do sensor conectado à porta A1 do módulo.
Para instalar a biblioteca, siga os mesmos passos apresentados no primeiro tutorial: navegue no menu superior esquerdo em Rascunho > Incluir Biblioteca > Gerenciar Bibliotecas ou pressione o atalho Ctrl+Shift+I para localizar e instalar a biblioteca.
#include <AFMotor.h>
#include <UltrasonicSensor.h>
#define LuzTraseira A4
#define LuzDianteira A5
UltrasonicSensor ultrasonic(A0, A1);
AF_DCMotor MotorFrontalDireito(3);
AF_DCMotor MotorFrontalEsquerdo(4);
AF_DCMotor MotorTraseiroDireito(2);
AF_DCMotor MotorTraseiroEsquerdo(1);
void controlarLuzDianteira(bool on_off) {
if (on_off == true) //Se receber "true", acende a luz dianteira.
{
digitalWrite(LuzDianteira, HIGH);
}
else //Se receber "false", apaga a luz dianteira.
{
digitalWrite(LuzDianteira, LOW);
}
}
void controlarLuzTraseira(bool on_off) {
if (on_off == true) //Se receber "true", acende a luz traseira.
{
digitalWrite(LuzTraseira, HIGH);
}
else //Se receber "false", apaga a luz traseira.
{
digitalWrite(LuzTraseira, LOW);
}
}
void moverParaFrente() {
MotorFrontalDireito.setSpeed(200);
MotorFrontalEsquerdo.setSpeed(200);
MotorTraseiroDireito.setSpeed(200);
MotorTraseiroEsquerdo.setSpeed(200);
MotorFrontalDireito.run(FORWARD);
MotorFrontalEsquerdo.run(FORWARD);
MotorTraseiroDireito.run(FORWARD);
MotorTraseiroEsquerdo.run(FORWARD);
}
void moverParaTras() {
MotorFrontalDireito.setSpeed(200);
MotorFrontalEsquerdo.setSpeed(200);
MotorTraseiroDireito.setSpeed(200);
MotorTraseiroEsquerdo.setSpeed(200);
MotorFrontalDireito.run(BACKWARD);
MotorFrontalEsquerdo.run(BACKWARD);
MotorTraseiroDireito.run(BACKWARD);
MotorTraseiroEsquerdo.run(BACKWARD);
controlarLuzTraseira(true);
}
void frear() {
MotorFrontalDireito.run(RELEASE);
MotorFrontalEsquerdo.run(RELEASE);
MotorTraseiroDireito.run(RELEASE);
MotorTraseiroEsquerdo.run(RELEASE);
controlarLuzTraseira(true);
delay(500);
controlarLuzTraseira(false);
}
void fazerCurvaEsquerda() {
MotorFrontalDireito.setSpeed(200);
MotorFrontalEsquerdo.setSpeed(200);
MotorTraseiroDireito.setSpeed(200);
MotorTraseiroEsquerdo.setSpeed(200);
MotorFrontalDireito.run(FORWARD);
MotorFrontalEsquerdo.run(BACKWARD);
MotorTraseiroDireito.run(FORWARD);
MotorTraseiroEsquerdo.run(BACKWARD);
}
void fazerCurvaDireita() {
MotorFrontalDireito.setSpeed(200);
MotorFrontalEsquerdo.setSpeed(200);
MotorTraseiroDireito.setSpeed(200);
MotorTraseiroEsquerdo.setSpeed(200);
MotorFrontalDireito.run(BACKWARD);
MotorFrontalEsquerdo.run(FORWARD);
MotorTraseiroDireito.run(BACKWARD);
MotorTraseiroEsquerdo.run(FORWARD);
}