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
#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);
LDR_I_val = analogRead(LDR_I); //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ç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); }
