Es un desarrollo propio, con la idea de montar sobre el dispositivo un panel fotovoltaico para generar electricidad solar. Este dispositivo es solo para probar el programa básico que opere al sistema. Pueden bajar un DOC, con el artículo y programa.
Es un dispositivo que sigue a la posición 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 detección está montado sobre el dispositivo. Es una cruz, plástica, que en sus extremos tiene 4 células fotoeléctricas tipo LDR. Van conectadas a los PINES A1, A2, A3 y A4, Analógicos. 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 leído 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