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); }