Created
October 31, 2024 23:42
-
-
Save gubleo/429738f6c5fb279b275a9f1effda3684 to your computer and use it in GitHub Desktop.
Carrinho Arduino Segue linha Branca
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Definições de pinos | |
int infraD = A0; // Sensor de refletância direito | |
int infraE = A1; // Sensor de refletância esquerdo | |
int ib1 = 11; // Pino do motor 1 (direção) | |
int ia1 = 10; // Pino do motor 1 (velocidade) | |
int ib2 = 5; // Pino do motor 2 (direção) | |
int ia2 = 6; // Pino do motor 2 (velocidade) | |
// Valores iniciais dos sensores para linha branca | |
const int thresholdD = 995; // Threshold para o sensor direito | |
const int thresholdE = 995; // Threshold para o sensor esquerdo | |
// Tempo de ativação para simular o movimento em linha reta e correções de curva | |
const int tempoAtivacaoReto = 50; // Pulso curto ao andar em linha reta | |
const int tempoAtivacaoCurva = 100; // Pulso curto ao corrigir curva | |
const int tempoDesativacaoCurva = 150; // Pausa maior ao corrigir curva | |
const int tempoDesativacaoReto = 100; // Pausa para desacelerar o movimento | |
void setup() { | |
pinMode(infraD, INPUT); | |
pinMode(infraE, INPUT); | |
pinMode(ib2, OUTPUT); | |
pinMode(ia2, OUTPUT); | |
pinMode(ib1, OUTPUT); | |
pinMode(ia1, OUTPUT); | |
Serial.begin(9600); // Inicializa a comunicação serial | |
} | |
void loop() { | |
// Leitura dos sensores | |
int leituraD = analogRead(infraD); // Leitura do sensor direito | |
int leituraE = analogRead(infraE); // Leitura do sensor esquerdo | |
// Exibe os valores dos sensores no Serial Monitor | |
Serial.print("Sensor Direito: "); | |
Serial.print(leituraD); | |
Serial.print(" | Sensor Esquerdo: "); | |
Serial.println(leituraE); | |
// Lógica para seguir a linha e corrigir gradualmente em curva | |
if (leituraD > thresholdD && leituraE > thresholdE) { | |
// Ambos os sensores fora da linha - continuar em frente | |
andarFrente(); | |
} else { | |
// Correção gradual baseado no sensor que detecta a linha | |
if (leituraD < thresholdD) { | |
// Sensor direito detecta a linha - corrigir suavemente para a esquerda | |
corrigirEsquerdaSuave(); | |
} | |
if (leituraE < thresholdE) { | |
// Sensor esquerdo detecta a linha - corrigir suavemente para a direita | |
corrigirDireitaSuave(); | |
} | |
} | |
delay(50); // Pequeno delay para estabilidade da leitura | |
} | |
void andarFrente() { | |
digitalWrite(ia1, HIGH); // Motor 1 ligado | |
digitalWrite(ib1, LOW); | |
digitalWrite(ia2, HIGH); // Motor 2 ligado | |
digitalWrite(ib2, LOW); | |
delay(tempoAtivacaoReto); // Pulso curto para simular movimento reto | |
parar(); // Pausa breve | |
delay(tempoDesativacaoReto); | |
} | |
void corrigirDireitaSuave() { | |
parar(); // Pausa breve antes de corrigir | |
digitalWrite(ia1, LOW); // Motor 1 desligado (parado) | |
digitalWrite(ib1, LOW); | |
digitalWrite(ia2, HIGH); // Motor 2 ligado | |
digitalWrite(ib2, LOW); | |
delay(tempoAtivacaoCurva); // Pulso curto para ajustar curva para a direita | |
parar(); // Pausa maior para suavizar a curva | |
delay(tempoDesativacaoCurva); | |
} | |
void corrigirEsquerdaSuave() { | |
parar(); // Pausa breve antes de corrigir | |
digitalWrite(ia2, LOW); // Motor 2 desligado (parado) | |
digitalWrite(ib2, LOW); | |
digitalWrite(ia1, HIGH); // Motor 1 ligado | |
digitalWrite(ib1, LOW); | |
delay(tempoAtivacaoCurva); // Pulso curto para ajustar curva para a esquerda | |
parar(); // Pausa maior para suavizar a curva | |
delay(tempoDesativacaoCurva); | |
} | |
void parar() { | |
digitalWrite(ia1, LOW); | |
digitalWrite(ib1, LOW); | |
digitalWrite(ia2, LOW); | |
digitalWrite(ib2, LOW); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment