Inseguitore solare di Arduino
Cosa fa:
Cerca la fonte di luce più luminosa come il sole.
Esiste una versione più recente e migliore di questo progetto: //www.instructables.com/id/Dual-Axis-300W-IOT-Solar-Tracker/
Passaggio 1: come funziona




Avevo realizzato un sensore di 4 LDR con fogli tra di loro
I punti bianchi sono i LDR
Quando lo stick in alto viene raddrizzato sul sole o sul punto più luminosoi quattro LDR ricevono la stessa quantità di luce su di essi.
Esempio 1 quando la luce viene lasciata in alto:
in alto a destra, a destra in basso, a sinistra in basso
e in alto a sinistra ottengono più luce
Esempio2 quando la luce è in alto
sinistra e destra in basso sono nell'ombra e in alto è nella luce
Passaggio 2: Elenco delle parti
- 2 x collegamento eBay servo 1, 5 $ / pezzo
- 4 x resistori a seconda della luce (ldr) LDR economici su eBay 0, 78 $ per 20 pezzi
- 4 resistori 10K resistori su Ebay 0, 78 $ per 50 pz spedizione gratuita
- 1 x Arduino Arduino UNO Ebay link 3.5 $ spedizione gratuita
- 2 x potenziometri 10k (il valore non conta) Link ebay
Passaggio 3: il set-up








Basta incollarlo a caldo insieme !!!
Step 4: The Circuitry



Passaggio 5: il codice
puoi scaricare il codice in questa pagina
/ * questo codice è scritto da geobruce
per maggiori informazioni controlla il mio sito //xprobe.net
* /
#include // include la libreria Servo
Servo orizzontale; // servo orizzontale
int servoh = 90; // supporto servo orizzontale
Servo verticale; // servo verticale
int servov = 90; // supporto servo verticale
// Connessioni pin LDR
// name = analogpin;
int ldrlt = 0; // LDR in alto a sinistra
int ldrrt = 1; // LDR top rigt
int ldrld = 2; // LDR in basso a sinistra
int ldrrd = 3; // ldr down rigt
void setup ()
{
Serial.begin (9600);
// collegamenti servo
// name.attacht (pin);
horizontal.attach (9);
vertical.attach (10);
}
void loop ()
{
int lt = analogRead (ldrlt); // in alto a sinistra
int rt = analogRead (ldrrt); // in alto a destra
int ld = analogRead (ldrld); // in basso a sinistra
int rd = analogRead (ldrrd); // down rigt
int dtime = analogRead (4) / 20; // leggi potenziometri
int tol = analogRead (5) / 4;
int avt = (lt + rt) / 2; // valore medio superiore
int avd = (ld + rd) / 2; // valore medio in basso
int avl = (lt + ld) / 2; // valore medio rimasto
int avr = (rt + rd) / 2; // valore medio giusto
int dvert = avt - avd; // controlla la differenza tra su e giù
int dhoriz = avl - avr; // controlla la diffrenza di sinistra e rigt
if (-1 * tol> dvert || dvert> tol) // controlla se la differenza è nella tolleranza altrimenti cambia l'angolo verticale
{
if (avt> avd)
{
servov = ++ servov;
if (servov> 180)
{
servov = 180;
}
}
else if (avt <avd)
{
servov = --servov;
if (servov <0)
{
servov = 0;
}
}
vertical.write (servov);
}
if (-1 * tol> dhoriz || dhoriz> tol) // controlla se la differenza è nella tolleranza, altrimenti cambia l'angolo orizzontale
{
if (avl> avr)
{
servoh = --servoh;
if (servoh <0)
{
servoh = 0;
}
}
else if (avl <avr)
{
servoh = ++ servoh;
if (servoh> 180)
{
servoh = 180;
}
}
else if (avl == avr)
{
// Niente
}
horizontal.write (servoh);
}
ritardo (DTIME);
}
allegati
Scarica solar_tracker__english_.pde