Arduino Solar Tracker

Was es tut:

Es sucht nach der hellsten Lichtquelle wie der Sonne.

Es gibt eine neuere und bessere Version dieses Projekts: //www.instructables.com/id/Dual-Axis-300W-IOT-Solar-Tracker/

Schritt 1: Wie es funktioniert

Wie es funktioniert:
Ich hatte einen Sensor aus 4 LDRs mit Blättern dazwischen gemacht

Die weißen Punkte sind die LDRs

Wenn der Stick oben auf die Sonne oder den hellsten Punkt gerichtet ist
Die vier LDRs erhalten die gleiche Lichtmenge.


Beispiel 1, wenn das Licht oben bleibt:
rechts oben, rechts unten, links unten sind im Schatten
und links oben bekommen das meiste Licht

Beispiel 2, wenn das Licht oben ist
links und rechts unten sind im Schatten und oben ist im Licht

Schritt 2: Teileliste

  • 2 x Servo Ebay Link 1, 5 $ / Stück
  • 4 x lichtabhängige Widerstände (ldr) Günstige LDRs bei Ebay 0, 78 $ für 20 Stk
  • 4 x Widerstände 10K Widerstände bei Ebay 0, 78 $ für 50 Stück versandkostenfrei
  • 1 x Arduino Arduino UNO Ebay Link 3.5 $ versandkostenfrei
  • 2 x Potentiometer 10k (Wert spielt keine Rolle) Ebay Link

Schritt 3: Die Einrichtung

Einfach heiß zusammenkleben !!!

Schritt 4: Die Schaltung

Schritt 5: Der Code

Sie können den Code auf dieser Seite herunterladen

/ * Dieser Code wurde von Geobruce geschrieben
Weitere Informationen finden Sie auf meiner Website //xprobe.net
* /
#include // Servobibliothek einschließen

Servo horizontal; // horizontales Servo
int servoh = 90; // horizontales Servo stehen

Servo vertikal; // vertikales Servo
int servov = 90; // vertikales Servo stehen

// LDR-Pin-Verbindungen
// name = analogpin;
int ldrlt = 0; // LDR oben links
int ldrrt = 1; // LDR oben rigt
int ldrld = 2; // LDR unten links
int ldrrd = 3; // ldr runter rigt

void setup ()
{
Serial.begin (9600);
// Servoverbindungen
// name.attacht (pin);
horizontal.attach (9);
vertikaler Anhang (10);
}}

void loop ()
{
int lt = analogRead (ldrlt); // oben links
int rt = analogRead (ldrrt); // oben rechts
int ld = analogRead (ldrld); // links unten
int rd = analogRead (ldrrd); // runter rigt

int dtime = analogRead (4) / 20; // Potentiometer lesen
int tol = analogRead (5) / 4;

int avt = (lt + rt) / 2; // Durchschnittswert oben
int avd = (ld + rd) / 2; // Durchschnittswert nach unten
int avl = (lt + ld) / 2; // Durchschnittswert übrig
int avr = (rt + rd) / 2; // Durchschnittswert richtig

int dvert = avt - avd; // Überprüfen Sie die Differenz von Auf und Ab
int dhoriz = avl - avr; // überprüfe den Unterschied zwischen links und rechts

if (-1 * tol> dvert || dvert> tol) // prüfe, ob die Differenz in der Toleranz liegt, sonst ändere den vertikalen Winkel
{
if (avt> avd)
{
servov = ++ servov;
if (servov> 180)
{
Servov = 180;
}}
}}
sonst wenn (avt <avd)
{
servov = --servov;
if (servov <0)
{
servov = 0;
}}
}}
Vertical.write (Servov);
}}

if (-1 * tol> dhoriz || dhoriz> tol) // prüfe, ob die Differenz in der Toleranz liegt, sonst ändere den horizontalen Winkel
{
if (avl> avr)
{
servoh = --servoh;
if (servoh <0)
{
Servoh = 0;
}}
}}
sonst wenn (avl <avr)
{
servoh = ++ servoh;
if (servoh> 180)
{
Servoh = 180;
}}
}}
sonst wenn (avl == avr)
{
// nichts
}}
horizontal.write (servoh);
}}
Verzögerung (dtime);
}}

Anhänge

  • solar_tracker__english_.pde Herunterladen

Ähnlicher Artikel