Uso de Sensores LDR
El ejemplo más sencillo pasa por utilizar 2 LDR situados en los laterales del robot para permitirle detectar niveles de iluminacióin y por tanto programarlo para que evite objetos, por ejemplo.
Construiremos, sobre una pequeña placa perforada-estañada, unos conectores para que los valores de variación de la resistencias se envíe a 2 de las entradas analógicas de Arduino y los motores actuen en consecuencia.
Veamos el circuito de las LDR:
Ahora como queda en la placa:

Por fin el robot completo:
El código del programa:
Suponemos que vamos a usar 2 motores DC conectados a M3 y M4 (ver comentarios en código) y uso de motores
<span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;">#include <AFMotor.h>
// La librería AFMotor.h para control de motores
//***************EL MOTOR IZQ(mirando desde encima al robot, va al revés por su colocación)************************
AF_DCMotor motor3(3, MOTOR12_1KHZ); // crea motor #1, 64KHz pwm MAYOR FRECUENCIA MÁS PRECISIÖN -> Más CONSUMO
AF_DCMotor motor4(4, MOTOR12_1KHZ); // crea motor #2, 64KHz pwm
int LDR_D = 0; // LDR derecho (vista superior desde atrás);analog pin 0
int LDR_I = 1; // LDR izquierdo ;analog pin 1
int LDR_D_val = 0; // variables para leer el valor del LDR
int LDR_I_val = 0;
void setup() {
Serial.begin(9600); // Para imprimir mensajes por pantalla (monitor serie)
// PONEMOS LAS VELOCIDADES
motor3.setSpeed(100); // velocidad de 0-255
motor4.setSpeed(100);
}
void loop() {
LDR_D_val = analogRead(LDR_D); // lee el valor de las LDR
LDR_I_val = analogRead(LDR_I);
</span></span>
<span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;"> //Calibramos los LDR para ver los valores que devuelven, en este caso, el izquierdo devuelve un valor un poco menor por eso se suman 8</span></span><span style="color: #808080;" _mce_style="color: #808080;"><span style="font-family: Courier New;" _mce_style="font-family: Courier New;"> Serial.print("LDRDerecha = ");
Serial.println(LDR_D_val);
Serial.print("LDRIzquierda = ");
Serial.println(LDR_I_val+8);
// Compara los valores devueltos por las LDR y produce el cambio de dirección de los motores
if (LDR_D_val > LDR_I_val+8)
{
Serial.println("D>I");
motor3.run(BACKWARD); // tuerce derecha
motor4.run(RELEASE);
delay(100);
}
else if (LDR_D_val < LDR_I_val+8)
{
Serial.println("I>D");
motor3.run(RELEASE);
motor4.run(FORWARD); // tuerce izquierda
delay(100);
}
else if (LDR_D_val == LDR_I_val)
{
Serial.println("D=I");
motor3.run(BACKWARD); // centro
motor4.run(FORWARD);
delay(100);
}
motor3.run(RELEASE);
motor4.run(RELEASE);
}
</span></span>
Comments (0)
You don't have permission to comment on this page.