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

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ù luminoso
i 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

Articoli Correlati