Arduino Solar Tracker
Qué es lo que hace:
Busca la fuente de luz más brillante como el sol.
Hay una versión más nueva y mejor de este proyecto: //www.instructables.com/id/Dual-Axis-300W-IOT-Solar-Tracker/
Paso 1: cómo funciona




Hice un sensor de 4 LDR con hojas entre ellos
Los puntos blancos son los LDR
Cuando el palo en la parte superior está enderezado al sol o al punto más brillantelos cuatro LDR reciben la misma cantidad de luz sobre ellos.
Ejemplo1 cuando la luz se deja arriba:
derecha arriba, derecha abajo, izquierda abajo están en la sombra
y la parte superior izquierda obtienen la mayor luz
Ejemplo2 cuando la luz está arriba
izquierda y derecha abajo están en la sombra y la parte superior está en la luz
Paso 2: Lista de piezas
- 2 x servo enlace Ebay 1.5 $ / pieza
- 4 x resistencias dependientes de la luz (ldr) LDR baratas en Ebay 0.78 $ por 20 piezas
- 4 x resistencias Resistencias de 10K en Ebay 0.78 $ por 50 piezas de envío gratis
- 1 x Arduino Arduino UNO Ebay link 3.5 $ envío gratis
- 2 x potenciómetros 10k (el valor no importa) Enlace de Ebay
Paso 3: la configuración








¡Solo pégalo en caliente!
Paso 4: el circuito



Paso 5: El Código
puedes descargar el código en esta página
/ * este código está escrito por geobruce
para más información visite mi sitio //xprobe.net
* /
#include // incluye Servo library
Servo horizontal; // servo horizontal
int servoh = 90; // soporte servo horizontal
Servo vertical; // servo vertical
int servov = 90; // soporte servo vertical
// conexiones de pin LDR
// nombre = analogpin;
int ldrlt = 0; // LDR arriba a la izquierda
int ldrrt = 1; // LDR top rigt
int ldrld = 2; // LDR abajo a la izquierda
int ldrrd = 3; // ldr down rigt
configuración nula ()
{
Serial.begin (9600);
// servo conexiones
// nombre.attacht (pin);
horizontal.attach (9);
vertical.attach (10);
}
bucle vacío ()
{
int lt = analogRead (ldrlt); // arriba a la izquierda
int rt = analogRead (ldrrt); // parte superior derecha
int ld = analogRead (ldrld); // abajo a la izquierda
int rd = analogRead (ldrrd); // abajo rigt
int dtime = analogRead (4) / 20; // leer potenciómetros
int tol = analogRead (5) / 4;
int avt = (lt + rt) / 2; // valor medio superior
int avd = (ld + rd) / 2; // valor promedio abajo
int avl = (lt + ld) / 2; // valor promedio restante
int avr = (rt + rd) / 2; // valor medio correcto
int dvert = avt - avd; // verifica la diferencia entre arriba y abajo
int dhoriz = avl - avr; // verifique la diferencia og izquierda y rigt
if (-1 * tol> dvert || dvert> tol) // comprueba si la diferencia está en la tolerancia o cambia el ángulo vertical
{
if (avt> avd)
{
servov = ++ servov;
si (servov> 180)
{
servov = 180;
}
}
más si (avt <avd)
{
servov = --servov;
si (servov <0)
{
servov = 0;
}
}
vertical.write (servov);
}
if (-1 * tol> dhoriz || dhoriz> tol) // comprueba si la diferencia está en la tolerancia o cambia el ángulo horizontal
{
if (avl> avr)
{
servoh = --servoh;
si (servoh <0)
{
servoh = 0;
}
}
más si (avl <avr)
{
servoh = ++ servoh;
si (servoh> 180)
{
servoh = 180;
}
}
más si (avl == avr)
{
// nada
}
horizontal.write (servoh);
}
retraso (dtime);
}
Archivos adjuntos
solar_tracker__english_.pde Descargar