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

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 brillante
los 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

Artículos Relacionados