Está en la página 1de 5

2.

- Robot Seguidor de Luz


Mini robot que puede funcionar tanto como seguidor de luz y sigue lnea.
Como sensor usa dos LDR para detectar la direccin de la luz y guiarse en
esa direccin, Tiene una etapa de potencia optoacoplada y dos transistores,
uno para activar al transistor de mayor potencia.

Se incluy un diodo 1n4007 a cada motor para evitar la corriente de retorno


del motor.
En la parte de control se utiliza un arduino nano (328P) y los LDR en serie
con una resistencia de 100K ohm. Para generar un divisor de tensin, de
esta manera se logra determinar en qu direccin hay ms luz para activar
el motor respectivo.

El cdigo del arduino es el siguiente:


int
int
int
5.
int

inLDR1=A0;
inLDR2=A1;
outMotor1=6; // para que sea sigue linea se deben invertir los pines 6 y
outMotor2=5;

int LDR1=0;
int LDR2=0;
int LDR1Prom=0;
int Error1=0;
int LDR2Prom=0;
int Error2=0;
void setup() {
Serial.begin(9600);
delay(1000);
pinMode(outMotor1,OUTPUT);
pinMode(outMotor2,OUTPUT);
pinMode(inLDR1,INPUT);
pinMode(inLDR2,INPUT);
//calculando errores y valor promedio en negro
iniciando();
//Serial.println("**************");
//Serial.print(Error1);
//Serial.print(" ");
//Serial.print(Error2);
//Serial.print(" ");
//Serial.print(LDR1Prom);
//Serial.print(" ");
//Serial.println(LDR2Prom);
}
void iniciando()
{
long uno=0,dos=0;
int max1=1,max2=0,min1=0,min2=0;
min1=analogRead(inLDR1);
min2=analogRead(inLDR2);
for(int i=0;i<100;i++){
LDR1=analogRead(inLDR1);
if(LDR1>max1) max1=LDR1;
if(LDR1<min1) min1=LDR1;
LDR2=analogRead(inLDR2);
if(LDR2>max2) max2=LDR2;
if(LDR2<min2) min2=LDR2;
uno+=LDR1;
dos+=LDR2;
delay(10);
}
Error1=(max1-min1)/2;
Error2=(max2-min2)/2;
LDR1Prom=(uno/100);
LDR2Prom=(dos/100);
return;
}

void loop() {
LDR1 = analogRead(inLDR1);
LDR2 = analogRead(inLDR2);
delay(10);
if(LDR1>(LDR1Prom+10)){
digitalWrite(outMotor1,HIGH);
/*if((5*(LDR1-LDR1Prom))>250){
analogWrite(outMotor1,250);
}else{
analogWrite(outMotor1,5*(LDR1-LDR1Prom));
}*/
}else{
//digitalWrite(0,LOW);
digitalWrite(outMotor1,LOW);
}
//////////////////////
if(LDR2>(LDR2Prom+10)){
digitalWrite(outMotor2,HIGH);
/*if((5*(LDR2-LDR2Prom))>250){
analogWrite(outMotor2,250);
}else{
analogWrite(outMotor2,5*(LDR2-LDR2Prom));
}*/
}else{
//digitalWrite(0,LOW);
digitalWrite(outMotor2,LOW);
}
// print that variable over the serial connection
Serial.print(LDR1);
Serial.print(" -> ");
Serial.print(LDR1Prom);
Serial.print(" * ");
Serial.print(LDR2);
Serial.print(" -> ");
Serial.println(LDR2Prom);
}
Imgenes del proyecto.

También podría gustarte