Skip to content

Instantly share code, notes, and snippets.

@gubleo
Created October 31, 2024 23:42
Show Gist options
  • Save gubleo/429738f6c5fb279b275a9f1effda3684 to your computer and use it in GitHub Desktop.
Save gubleo/429738f6c5fb279b275a9f1effda3684 to your computer and use it in GitHub Desktop.
Carrinho Arduino Segue linha Branca
// 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