Boa Noite!
Montei um carro que desvia de obstaculo, parece tudo certo, mas os motores dc não giram, alguém sabe pq. segue código:
// --- Bibliotecas Auxiliares ---
#include <Servo.h> // importando biblioteca de servo motor
#include <Ultrasonic.h> // importando biblioteca do ultrassonico
// --- Mapeamento de Hardware ---
#define IN1 10 //Driver L293D
#define IN2 11 //Driver L293D
#define EN1 5 //Enable driver
#define EN2 6 //Enable driver
#define IN3 9 //Driver L293D
#define IN4 3 //Driver L293D
#define trig 13 //Saída para o pino de trigger do sensor
#define echo 12 //Entrada para o pino de echo do sensor
#define serv 7 //Saída para o servo motor
#define pwm A0 //Entrada analógica para ajuste de velocidade
#define Buzzer 2
#define LedRed 4
#define LedBlue 8
const int velocidade = 255; // velocidade 0-255
const float velang = 16.7; // definindo velocidade angular media 16,7ms por grau
Servo servo; // cria um obejeto Servo
Ultrasonic ultra(trig, echo); // criando um objeto ultrassonico
// --- Configurações Iniciais ---
void setup()
{
pinMode(trig, OUTPUT); //Saída para o pulso de trigger
pinMode(serv, OUTPUT); //Saída para o servo motor
pinMode(echo, INPUT); //Entrada para o pulso de echo
pinMode(Buzzer, OUTPUT);
pinMode(LedRed, OUTPUT);
pinMode(LedBlue, OUTPUT);
digitalWrite(trig, LOW); //Pino de trigger inicia em low
digitalWrite(Buzzer, LOW);
digitalWrite(LedRed, LOW);
digitalWrite(LedBlue, HIGH);
servo.attach(7); // relacionando servo físico com virtual
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(3000); // delay p/ posicionar o robô
}
// --- Loop Infinito ---
void loop()
{
delay(200);
int distancia = ultra.Ranging(CM); // canculando distancia em cm
delayMicroseconds(10); // espera 5 microsegundos
Serial.println(distancia);
if (distancia >= 30 || distancia == 0) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
digitalWrite(Buzzer, LOW);
digitalWrite(LedRed, LOW);
digitalWrite(LedBlue, HIGH);
}
else if (distancia < 30 && distancia > 0) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
digitalWrite(Buzzer, HIGH);
digitalWrite(LedRed, HIGH);
Busca(); //chama funcao Busca
}
}
// função busca (vai procurar por um caminho sem obstáculos)
void Busca() {
servo.write(15); // servo vira para 15 graus
delay(2000);
int distancia = ultra.Ranging(CM);
if (distancia >= 40) {
servo.write(90);
viraresquerda(90); // vira 90 graus pra esquerda
digitalWrite(LedBlue, LOW);
delay(100);
}
else if (distancia < 40) {
servo.write(165); // servo vira para 165 graus
delay(2000);
distancia = ultra.Ranging(CM);
if (distancia >= 40) {
servo.write(90);
virardireita(70); //vira 90 graus pra direita
delay(100);
}
if (distancia < 40) {
servo.write(90);
meiavolta(); //chama função meiavolta
delay(100);
}
}
}
// função para virar a esquerda
void viraresquerda(int angulo) {
delay(100);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
//analogWrite(ENA, 50);
//analogWrite(ENB, 0);
delay(angulo * velang);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
// função para virar a direita
void virardireita(int angulo) {
delay(100);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
//analogWrite(ENA, 0);
//analogWrite(ENB, 50);
delay(angulo * velang);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
// função para dar meia volta
void meiavolta() {
delay(100);
int aux = round(random(0, 10)); // definir pra que lado virar na meia volta
if (aux <= 5) {
viraresquerda(170); // vira pela esquerda em 180 graus
}
else {
virardireita(160); // vira pela esquerda em 180 graus
}
}
imagem das conexões: