Renacujo sigue lineas y seguidor de luz

Siguiendo con los ejemplos de programación de renacuajo he añadido un ejemplo muuuy sencillo. Hasta ahora, si el renacuajo llegaba al final de la linea, buscaba otra con los sensores IR, sin embargo ahora he añadido que, al llegar al final de la linea se le pueda guiar con la luz que va recibiendo con las fotoresistencias.

Aquí añado un vídeo de ejemplo:

Y el código muy sencillo:

#include <Servo.h>

//Creamos los objetos del tipo servo
Servo Servo1;
Servo Servo2;

int ir_derecho;
int ir_izquierdo;
int ldr_derecho;
int ldr_izquierdo;
int NEGRO =0;
int BLANCO= 1;
int umbral = 30;

void setup()
{

Servo1.attach(6);
Servo2.attach(9);

pinMode(2, INPUT);
pinMode(3, INPUT);

}

void loop()
{
//Vemos como están los IR
ir_derecho = digitalRead(2);
ir_izquierdo = digitalRead(3);
// Seguimos la linea
if ( (ir_derecho == NEGRO) && (ir_izquierdo == NEGRO) ) {
Servo1.write(0);
delay(20);
Servo2.write(180);
delay(20);

}
//Giramos a la izquierda
else if ( (ir_derecho == BLANCO) && (ir_izquierdo == NEGRO) ){
Servo1.write(90);
delay(20);
Servo2.write(180);
delay(20);
}
//Giramos a la derecha
else if ( (ir_derecho == NEGRO) && (ir_izquierdo == BLANCO) ) {
Servo1.write(0);
delay(20);
Servo2.write(90);
delay((20));

}
//Seguimos la luz si los dos sensores no detectan negro
else {
//Leemos el estado de los sensores de luz
ldr_derecho = analogRead(A2);
ldr_izquierdo = analogRead(A3);
//Si hay mas luz en el lado derecho giramos a la derecha
if (ldr_derecho >= ldr_izquierdo + umbral){
Serial.println(«Derecha»);
Servo1.write(0);
delay(20);
Servo2.write(90);
delay((20));
}
//Si hay mas luz en el lado izquierdo giramos a la iquierda
else if (ldr_izquierdo >= ldr_derecho + umbral){
Serial.println(«Izquierda»);
Servo1.write(90);
delay(20);
Servo2.write(180);
delay(20);
}
//Vamos hacia adelante.
else{
Serial.println(«Adelante»);
Servo1.write(0);
delay(20);
Servo2.write(180);
delay(20);
}
}

}

 

 

Renacujo sigue lineas y seguidor de luz

Deja un comentario