Arduino & Lego Solar Tracker (Dual Axis)

7 Schritt:Schritt 1: Ersatzteile Schritt 2: Prinzip Schritt 3: Stromkreis Schritt 4: Programm Schritt 5: Kopf Schritt 6: Grund Schritt 7: Diskussion Verbesserungs


Arduino & Lego Solar Tracker (Dual Axis)

Ich machte eine Solar-Tracker mit Lego und Arduino.
Es ist ein sehr schönes und einfaches Projekt, wenn Sie arduino und Elektronik lernen wollen. Kein Löten erforderlich.
Sein Zweck ist nur erzieherisch, weil die Motoren sind nicht stark genug, um das Gewicht von Sonnenkollektoren unterstützen.
Es ist immer noch ein ziemlich cooler Solar-Tracker, erfuhr ich, Arduino und hatten eine Menge Spaß.
(Verzeihen Sie mir für die schlechte Qualität von Fotos und vertikale Video :-)) Schritt 1: Ersatzteile



Arduino Duemilanove AVR 2009 ATmega328 (~ 12 €) 2x SG90 Mini Servo 9g (ca. 4 €) 2-Achsen-FPV Nylon PTZ für SG90 (~ 2 €) Breadboard Kabel 4x Widerstände 10 kOhm (alle 3 in einem Kit ~ 10 €) 4x Photowiderstände (dh lichtabhängige Widerstände) (~ 6 €) Lego 1 Gummiband Heißklebe
Ich fand alles außer der LEGO über eBay. Gesamtpreis ~ 34 €
Schritt 2: Prinzip


Jeder Iterationsschritt geht so:
    Die Sonne auf den Kopf des Roboters (wich ist eine Kreuzung mit einem Fotowiderstand in jeder Ecke). Wegen des grenzüber, sind einige Fotowiderstände mehr ausgesetzt, um die Sonne. wich reduziert ihren Widerstand. Wir messen den Widerstand jedes Fotowiderstand. Wir berechnen, wenn die richtige ist beleuchteten als die linke (oder umgekehrt). Wir Wirkung der horizontale Motor in Richtung der am meisten beleuchteten Seite zu bewegen. Wir berechnen, wenn die Spitze ist mehrere beleuchtete als der Boden (oder umgekehrt). Wir Wirkung der vertikalen Motor in Richtung der am meisten beleuchteten Seite zu bewegen.

Alle Parameter, die Sie hier brauchen, sind:
Wie viel Unterschied von Licht (Widerstand) ist genug, um zu entscheiden, sich zu bewegen? Wie weit wollen Sie Ihre Motoren nach jeder Entscheidung zu bewegen? Wie schnell wollen Sie den Motor bei jedem Schritt zu bewegen? Wie lange wollen Sie zwischen den Schritten warten? Was ist der am weitesten können Sie Ihre Motoren an move.Step 3 ermöglichen: Schalt

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Die Schaltung ist in zwei Teile geteilt.
1. Die Sensoren (4x)
Schließen 1 resitor und 1 photoresitor in Serie. Verbinden den Knoten zwischen der 2 zu einem analogen Eingangsanschluß (in meinem Fall 0-4). Dies wird die Spannung zu messen. Schließen Sie das andere Ende des Widerstands auf den Boden Schließen Sie das andere Ende der Fotowiderstand bis 5 V (Die letzten 2 Schritte umgekehrt werden können, aber halten Sie die gleiche Regel für alle 4 Sensoren)
2. Die Motoren (2x)
Verbinden Sie + 5V Connect - um Connect cotrol zu PWM Stifte Masse (in meinem Fall 9 & 10) Schritt 4: Programm


vgl befestigt .ino Datei

/ * Solar Tracker 1.0
* Von Mathias Leroy * Novembre 2014 * * /
// INITIALISIERUNG // ------------------------------------------------ #include // sprintf #include // Servo-Bibliothek Servo servoH; // Pin09 horizontale Servo Servo servoV; // Pin10 vertikale Servo
// Analogen Lesestiftverbindungen int analogPinTopLeft = 0; // Gelbgrün int analogPinTopRight = 1; // Grau blau int analogPinBottomRight = 2; // Schwarzweiß int analogPinBottomLeft = 3; // Rotbraun
// Parameter // ------------------------------------------------ int initAngleH = 80; int minAngleH = 0; int maxAngleH = 170; int initAngleV = 90; int minAngleV = 50; int maxAngleV = 150;
int slowingDelay = 50;
int sesitivityH = 30; int sesitivityV = 30; Steph int = 10; int stepV = 10;
// Variablen // ------------------------------------------------ int angleH = initAngleH; int angleV = initAngleV;
char Printline [50];
int valueTopLeft = 0; int valueTopRight = 0; int valueBottomRight = 0; int valueBottomLeft = 0;
// EINRICHTEN // ------------------------------------------------ Leere setup () { servoH.attach (9); // ServoH.write (initAngleH);
servoV.attach (10); // ServoV.write (initAngleV); Serial.begin (9600); Serial.println ("Ready :-)!"); }
// LOOP // ------------------------------------------------ Leere Schleife () { Serial.println ("<<< --- Schleife starten"); // Werte lesen valueTopLeft = analogRead (analogPinTopLeft); valueTopRight = analogRead (analogPinTopRight); valueBottomRight = analogRead (analogPinBottomRight); valueBottomLeft = analogRead (analogPinBottomLeft); // Print Werte // Sprintf (Printline, "% d |% d \ n", valueTopLeft, valueTopRight); Serial.print (Printline); // Sprintf (Printline, "% d |% d \ n", valueBottomRight, valueBottomLeft); Serial.print (Printline); // Verzögerung (3000); // Rechendurchschnittswerte int averageTop = (valueTopLeft + valueTopRight) / 2; int averageRight = (valueTopRight + valueBottomRight) / 2; int averageBottom = (valueBottomRight + valueBottomLeft) / 2; int averageLeft = (valueBottomLeft + valueTopLeft) / 2; // Print Durchschnittswerte sprintf (Printline "-% d - \ n", averageTop); Serial.print (Printline); sprintf (Printline, "% d -% d \ n", averageLeft, averageRight); Serial.print (Printline); sprintf (Printline "-% d - \ n", averageBottom); Serial.print (Printline); Verzögerung (slowingDelay);
// Horizontal Entscheidung & action Serial.print (angleH); Serial.print ("\ n"); if ((averageLeft-averageRight)> sesitivityH && (angleH-Steph)> minAngleH) { // Nach links gehen Serial.print ("Möchten Sie links"); Serial.print ("\ n"); Verzögerung (slowingDelay); for (int i = 0; i <Steph; i ++) { servoH.write (angleH--); Verzögerung (50); } } else if ((averageRight-averageLeft)> sesitivityH && (angleH + Steph)
// Vertikalen Entscheidung & action Serial.print (angleV); Serial.print ("\ n"); if ((averageTop-averageBottom)> sesitivityV && (angleV-stepV)> minAngleV) { // Hinauf Serial.print ("going up"); Serial.print ("\ n"); Verzögerung (slowingDelay); for (int i = 0; i <stepV; i ++) { servoV.write (angleV--); Verzögerung (50); } } else if ((averageBottom-averageTop)> sesitivityV && (angleV + stepV)
Serial.println ("--- Ende Schleife >>>"); }
Schritt 5: Kopf

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Ich habe versucht, viele verschiedene Köpfe und ich endlich festgestellt, dass dieses klassische kreuzförmige einer der besten durchgeführt.
Die Photowiderstände kommen ganz einfach in die Löcher der lego Platten. Ich reparierte die Drähte mit einem elastischen Band und Lego, um sie in Position zu halten.
Ich habe nicht einen konkreten Plan, wie diese insbesondere Kopf erstellen. Lego sollen kreativ zu sein. Hier ist, was wichtig ist:
Ein Kreuz; Platzieren Sie die Photowiderstände so nah wie möglich in die Ecken des Kreuzes; Ich fand, dass ein Teller mit lego von 4 breiten kneift nur perfekt in die 2-Achsen-FPV verwendet hier; Ein andjstable Winkel zwischen dem Kreuz und 4-breite Platte ist schön, von Hand (nicht programmatisch) .Schritt 6 Kalibrierung: Grund

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Arduino & Lego Solar Tracker (Dual Axis)

Für die Basis Ich klebte ein lego Schild auf der Unterseite des 2-Achsen-FPV und befestigt sie an andere lego Stücke in Form einer quadratischen dann. Die Form ist hier nicht wirklich importe.
Wichtig ist, zu gewährleisten, die Basis ist schwer genug, um an Ort und Stelle zu bleiben und um einen Ort, um Ihre Steckbrett befestigen zu schaffen und ein auf Ihre Arduino beheben. Die Kabel sollten sich frei, mit der Bewegung des head.Step 7 bewegen zu bleiben: Diskussion Verbesserungs

Um die Empfindlichkeit zu verbessern, sollten die Photowiderstände passen mehr in der Nähe in den Ecken des Kreuzes. Sie anderswo Servos. Dies sind schwach und manchmal bei verschiedenen Geschwindigkeiten unvorhersehbar. Vielleicht könnte ein Sensor Abschirmung der Schaltung zu erleichtern und weniger Kabel. Dieser Roboter ist nicht wirklich schnell im Vergleich zu einigen anderen, die Sie auf instructables finden. Dies kann in dem Programm geändert werden. Ich sollte es noch langsamer für echte Sonnenverfolgung.
Bitte teilen Sie mir Ihre Ideen in die Kommentare :)!