Está en la página 1de 4

Girasol Seguidor de luz

Es un dispositivo que sigue a


la posicin del sol. Esto es
solamente una maqueta en
escala para experimentar el
programa.
Est montado sobre un
mecanismo Pan & Tilt,
comprado en Mercado Libre.
Tiene un eje vertical de giro y
un eje horizontal. Est
accionado por dos
servomotores miniatura, 90 G
de 9 gramos de peso.
El sistema de deteccin est
montado sobre el dispositivo.
Es una cruz, plstica, que en
sus extremos tiene 4 clulas
fotoelctricas tipo LDR.
Van conectadas a los PINES
A1, A2, A3 y A4, Analgicos. El programa lee estas 4 entradas y procede a
seguir al sol, que en las pruebas es una luz de bajo consumo.
De la cruz salen 6 cables que van al Arduino, a saber: 4 de las LDR, uno a +5V
y otro a Ground.
El Arduino se alimenta con una fuente externa de 6 Vcc.

Programa
#include <Servo.h>

Servo ServoEjeVert; // Cada uno de los dos servos


Servo ServoEjeHori; // Cada uno de los dos servos
int anguloEjeVert = 0; // Angulo que gira el servo
int anguloEjeHori = 0; // Angulo que gira el servo

int pinSensorARR = A0; // Cable Blanco Variables de los 4 sensores


int pinSensorABA = A1; // Cable Amarillo
int pinSensorDER = A2; // Cable Rosa
int pinSensorIZQ = A3; // Cable Verde

double ValorARR; // Valor ledo en el PIN


double ValorABA;
double ValorDER;
double ValorIZQ;

void setup()
{
ServoEjeVert.attach(5); // Conectado al pin 5 PWM
ServoEjeHori.attach(6); // Conectado al pin 6 PWM

Serial.begin(9600);
ServoEjeVert.write(0); // Posicion que toma al arrancar
ServoEjeHori.write(0); // Posicion que toma al arrancar
} // FIN del void setup

void loop()
{
// Se toman 100 valores de cada sensor, para promediar.
for (int i=0; i<100; i++){ValorARR = ValorARR + analogRead(pinSensorARR); }
ValorARR = ValorARR / 100;
for (int i=0; i<100; i++){ValorABA = ValorABA + analogRead(pinSensorABA); }
ValorABA = ValorABA / 100;
for (int i=0; i<100; i++){ValorDER = ValorDER + analogRead(pinSensorDER); }
ValorDER = ValorDER / 100;
for (int i=0; i<100; i++){ValorIZQ = ValorIZQ + analogRead(pinSensorIZQ); }
ValorIZQ = ValorIZQ / 100;

Serial.print("Arriba "); Serial.println(ValorARR);


Serial.print("Abajo "); Serial.println(ValorABA);
Serial.print("Derecha "); Serial.println(ValorDER);
Serial.print("Izquierda "); Serial.println(ValorIZQ);
Serial.println("**************************");

// Movimientos izquierda derecha


if ((ValorDER - ValorIZQ)>5) { ServoEjeVert.write(anguloEjeVert =
anguloEjeVert + 1); }
if (ValorDER < ValorIZQ) { ServoEjeVert.write(anguloEjeVert = anguloEjeVert
- 1); }
if (anguloEjeVert < 1) { ServoEjeVert.write(0); anguloEjeVert = 0;}
if (anguloEjeVert > 180) { ServoEjeVert.write(180); anguloEjeVert = 180;}
Serial.print("Angulo Eje Vertical "); Serial.println(anguloEjeVert);

// Movimientos arriba abajo


if ((ValorARR - ValorABA)>5) { ServoEjeHori.write(anguloEjeHori =
anguloEjeHori - 1); }
if (ValorARR < ValorABA) { ServoEjeHori.write(anguloEjeHori = anguloEjeHori
+ 1); }
if (anguloEjeHori < 1) { ServoEjeHori.write(0); anguloEjeHori = 0 ;}
if (anguloEjeHori > 60) { ServoEjeHori.write(60); anguloEjeHori = 60;}
Serial.print("Angulo Eje Horizontal "); Serial.println(anguloEjeHori);

delay(300); // Variar a voluntad


} // FIN del void loop

También podría gustarte