Código atualizado utilizado no projeto. Copie e cole na IDE do Arduino (.ino):
// Motor A
const int ENA = 11; // Pino PWM que controla a velocidade do Motor A
const int IN1 = 10; // Pino de direção 1 do Motor A (define sentido)
const int IN2 = 9; // Pino de direção 2 do Motor A (define sentido)
#define s 100 // Velocidade base (speed) usada para andar em linha reta
#define t 130 // Velocidade aumentada para curvas (turning speed)
// Motor B
const int ENB = 6; // Pino PWM que controla a velocidade do Motor B
const int IN3 = 8; // Pino de direção 1 do Motor B
const int IN4 = 7; // Pino de direção 2 do Motor B
// IR Sensors
const int IRSensorLeft = 2; // Sensor infravermelho esquerdo
const int IRSensorRight = 3; // Sensor infravermelho direito
void setup() {
// Configura os pinos ligados aos motores como saída
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Configura os sensores como entrada
pinMode(IRSensorLeft, INPUT);
pinMode(IRSensorRight, INPUT);
// Inicia comunicação serial (útil para testes)
Serial.begin(9600);
}
void loop() {
// Leitura dos sensores (LOW = preto, HIGH = branco)
bool leftSensor = digitalRead(IRSensorLeft);
bool rightSensor = digitalRead(IRSensorRight);
// Mostra as leituras no monitor serial
Serial.print("Left Sensor: ");
Serial.print(leftSensor);
Serial.print(" | Right Sensor: ");
Serial.println(rightSensor);
// Ambos sensores encontram a linha → seguir em frente
if (leftSensor == LOW && rightSensor == LOW) {
moveForward();
}
// Sensor esquerdo encontra linha → virar direita
else if (leftSensor == LOW && rightSensor == HIGH) {
turnRight();
}
// Sensor direito encontra linha → virar esquerda
else if (leftSensor == HIGH && rightSensor == LOW) {
turnLeft();
}
// Nenhum sensor encontra a linha → parar (linha perdida)
else {
stopMotors();
}
delay(100); // Delay pequeno para estabilizar as leituras
}
void moveForward() {
// Motor A para frente
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, s);
// Motor B para frente
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, s);
}
void turnRight() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, t);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, t);
}
void turnLeft() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, t);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, t);
}
void stopMotors() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENB, 0);
}