Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Solar Tracker

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
SG90 Micro-Servomotor
× 2
LDR, 5 MOhm
× 4
Widerstand 330 Ohm
× 4
Drehpotentiometer (allgemein)
× 1
Druckschalter, Druckknopf
× 2
Mini-Solarmodul
× 1

Notwendige Werkzeuge und Maschinen

Arduino-IDE
Parallax PLX-DAQ

Über dieses Projekt

Dieses Projekt präsentiert einen offenen Hardware-/Software-Prüfstand für Solartracker. Der vorgeschlagene Prototyp basiert auf einem zweiachsigen Solartracker, der mit Arduino Uno gesteuert wird, einer Open-Source-Prototyping-Plattform, die auf einfach zu bedienender Hardware und Software basiert. Der Solartracker kann automatisch mit Hilfe von Lichtabhängigen Widerstandssensoren (LDR) oder manuell über ein Potentiometer gesteuert werden. Darüber hinaus bietet dieser Prüfstand eine virtuelle Instrumentierung auf Excel-Basis, in der seine Solartracker-Daten erfasst und dargestellt werden können. Die verwendete Hardware wurde kostengünstig, kompakt und vielseitig gewählt. Der vorgeschlagene Prüfstand soll den Schülern helfen, ihr Verständnis der Regelungstheorie und ihrer Anwendung zu entwickeln.

Der vorgeschlagene Prüfstand ist in Abb. 1 dargestellt. Er basiert auf einem Solartracker, der mit Hilfe von vier LDR-Sensoren und zwei Servomotoren (SM1 und SM2) automatisch rotieren kann, um der Sonne nachzuführen, oder manuell über ein Potentiometer. Um zwischen den beiden Modi (automatisch und manuell) umzuschalten, wird ein Taster verwendet. Ein weiterer Taster wird verwendet, um entweder SM1 (Auf-Ab-Servomotor) oder SM2 (Links-Rechts-Servomotor) mit dem Potentiometer zu verbinden, um deren Bewegung zu steuern. Darüber hinaus wird ein Computer als virtuelles Instrument verwendet, um Modus und Strom, Spannung und Leistung des PV-Moduls nach Zeit in MS Excel zu visualisieren. Das Arduino Uno-Board wird verwendet, um alle Softwareanforderungen des Systems zu implementieren.

Mechanisches Design

Wie in Abb. 2 dargestellt, wird das Computer-Aided-Design (CAD) 3D-Modell des Solartrackers in CATIA entworfen. Es besteht aus dem PV-Panel, den Links-Rechts- und Auf-Ab-Servomotoren und vier LDR-Sensoren. Für die horizontale Achse ist für eine bessere Flexibilität ein Lager parallel zum Auf-Ab-Servomotor befestigt. Der Solartracker hat zwei Freiheitsgrade, von Ost nach West durch den Links-Rechts-Servomotor und von Süd nach Nord durch den Up-Down-Servomotor. Die LDR-Sensoren befinden sich in den vier Ecken des PV-Panels und werden in dunkle Röhren mit einem kleinen Loch auf der Oberseite gesteckt, um die Sonneneinstrahlung zu erkennen. Diese dunklen Röhren gelten auch als Strahlungskonzentrator und werden verwendet, um die Robustheit des Solartrackers zu erhöhen.

Hardwaresystem

Abb. 3 zeigt die elektronische Schaltung des vorgeschlagenen Prüfstands. Für den Automatikmodus wandelt der Mikrocontroller die Analogwerte der LDR-Sensoren (Pins A0 bis A3) in Digitalwerte um. Dann steuert es zwei Servomotoren (oben-unten und links-rechts) unter Verwendung von zwei Pulsweitenmodulations-(PWM-)Signalen (Pins 5 und 6), um der Sonne zu folgen. Die Rotationsbewegungen erfolgen in zwei Achsen, im Azimut von Ost nach West entsprechend dem Tagessonnenverlauf und in Elevation von Süd nach Nord entsprechend dem saisonalen Sonnenverlauf. Im manuellen Modus wird ein Potentiometer (Pin A4) zur Steuerung der Bewegung der beiden Servomotoren verwendet, ein Taster (Pin 11) wird verwendet, um das Potentiometer entweder mit dem Up-Down-Servomotor oder dem Links-Rechts-Servomotor zu verbinden. Außerdem dient ein weiterer Taster (Pin 12) zum Umschalten zwischen den beiden Modi. Weiterhin wird die PV-Spannung über den analogen Pin A5 des Arduino gemessen, dann der PV-Strom berechnet, da der Widerstand der Last bereits bekannt ist. Als nächstes werden der PV-Strom, die Spannung und die Leistung über der Zeit sowie der aktuelle Modus an den Computer gesendet, um sie in Echtzeit in MS Excel anzuzeigen.

Die LDR-Sensorschaltung ist als Spannungsteilerschaltung ausgeführt. Die Änderung der Lichtintensität ist proportional zur Änderung der Teilerausgangsspannung. Die Oberseite des Spannungsteilers beträgt 5 V, die Masse liegt bei 0 V und der Ausgang des Spannungsteilers ist mit einem analogen Eingang (A 0 zum Beispiel) des Mikrocontrollers. Anschließend wandelt der Analog-Digital-Wandler (ADC) des Mikrocontrollers den gelesenen Analogwert um A 0 in einen digitalen Wert zwischen 0 und 1023 umwandeln, da der ADC in 10 Bit kodiert ist und anhand dieses Wertes die Lichtstärke ermittelt werden kann. Der Wert der in Spannungsteilern verwendeten Widerstände beträgt 330 Ω.

Es werden zwei 180-Grad-Servomotoren verwendet. Ein Servomotor (MG996R) zur Steuerung des Solartrackers gemäß der vertikalen Achse, die der Links-Rechts-Servomotor ist. Und ein Mikro-Servomotor (SG90) zur Steuerung des Solartrackers gemäß der horizontalen Achse, die der Auf-Ab-Servomotor ist. Der Vorteil des Servomotors besteht darin, dass wir sein Stoppen, Laufen, die Drehrichtung und Geschwindigkeit über ein einziges Niederstromkabel steuern können, das direkt an einen Ausgang des Mikrocontrollers angeschlossen ist, ohne dass Treiber erforderlich sind. Die verwendeten Servomotoren werden von der Arduino UNO-Platine über ein 3-adriges Elektrokabel gesteuert, wie in Abb. 3 gezeigt, zwei Drähte für die Versorgung und ein Draht für PWM zur Steuerung der Positionen.

Das eingebettete Softwaredesign

Die eingebettete Software ist das Teil, das in die Hardware (Arduino Uno) eingebettet wird, um den Solartracker-Prüfstand zu steuern und zu überwachen. Die eingebettete Software wurde entwickelt, um die folgenden Anforderungen abzudecken:

1. Der Prüfstand verfügt über zwei Modi:manuell und automatisch. An Pin 12 ist ein Taster angeschlossen, um zwischen den beiden Modi umzuschalten.

2. Wenn der manuelle Modus aktiv ist, kann das Potentiometer Servomotoren entweder von Ost nach West für den Links-Rechts-Motor oder von Süd nach Nord für den Up-Down-Motor steuern. An Pin 11 ist ein Taster angeschlossen, um das Potentiometer zwischen den beiden Motoren umzuschalten, entweder steuert er den Links-Rechts-Servomotor oder den Up-Down-Servomotor.

3. Wenn der Automatikmodus aktiv ist, wird der in Fig. 4 dargestellte Algorithmus ausgeführt. Letztere verwendet die von LDR-Sensoren zurückgegebenen Analogwerte. Unter Berücksichtigung des Azimuts oder der vertikalen Achse werden beispielsweise die Durchschnittswerte von zwei rechten LDRs und zwei linken LDRs verglichen und wenn der linke Satz von LDRs mehr Licht empfängt, bewegt sich der Solartracker in diese Richtung durch den Links-Rechts-Servomotor. Letzterer dreht sich weiter, bis das Differenzergebnis im Bereich [−10, 10] liegt. Dieser Bereich dient zur Stabilisierung des Reglers und sobald der Solartracker senkrecht zur Sonne steht, erfolgt keine weitere Regelung. Auf der anderen Seite, wenn die rechte Gruppe von LDRs mehr Licht empfängt, bewegt sich der Solartracker in diese Richtung durch den Links-Rechts-Servomotor und dreht sich weiter, bis das Differenzergebnis im Bereich [−10, 10] liegt. Der gleiche Weg wird für die Höhenachse verwendet. Darüber hinaus haben wir auch die durchschnittliche Strahlung zwischen den vier LDR-Sensoren bestimmt und wenn dieser Wert kleiner als ein kleiner Wert ist (8:ein Wert, der in der Praxis eingestellt und getestet wurde und zurückgegeben wird, wenn die Einstrahlung Null ist). Das heißt, die Nacht ist gekommen. In diesem Fall muss der Solartracker in den Sonnenaufgang zurückkehren. Zum Beispiel, wenn der Sonnenaufgang erreicht werden kann, indem man 0 Grad beim Links-Rechts-Stellmotor und 30 Grad beim Auf-Ab-Stellmotor einstellt. Dies kann ganz einfach über die C-Funktion „servox. write(angle)“ bereitgestellt von Arduino IDE.

4. Die über den analogen Pin A5 erfasste PV-Spannung muss verarbeitet und verwendet werden, um den PV-Strom und die PV-Leistung zu berechnen. Dann müssen alle diese Daten und der aktuelle Modus über ein USB-Kabel an den Computer gesendet und dann in MS Excel dargestellt werden.

Der PLX-DAQ Excel Macro wird für die Datenerfassung vom Arduino-Mikrocontroller zu einer Excel-Tabelle verwendet. Wir müssen es nur herunterladen. Nach der Installation wird auf dem PC automatisch ein Ordner namens "PLX-DAQ" erstellt, in dem sich eine Verknüpfung namens "PLX-DAQ Spreadsheet" befindet. Um die Kommunikation zwischen dem Board und Excel herzustellen, müssen wir dann nur noch das Spreadsheet öffnen und die Verbindungseinstellungen (Baudrate und Port) im PLX-DAQ-Fenster definieren (Abb. 5). Danach werden nach Klick auf "Verbinden" die Ausgabedaten gesammelt und in Echtzeit in der Excel-Tabelle angezeigt

Der Prototyp

Abbildung 6 zeigt den Solartracker im abmontierten und montierten Zustand. Wie dargestellt, wurde die gesamte Struktur aus Holzplatten hergestellt, und es ist klar, dass alle genannten Komponenten verwendet wurden, um den Solartracker mit manuellem und automatischem Modus zu bauen (LDR-Sensoren, Arduino Uno, Servomotoren, Potentiometer, Taster und das kleine PV-Panel).

Abbildung 7 zeigt den gesamten Prüfstand, den Solartracker mit virtueller Instrumentierung und eine künstliche Lampe, die Licht aussetzen kann, um den Solartracker zu testen. Der Solartracker und der Computer sind über ein USB-Kabel verbunden. Sobald die PV-Spannung erfasst wurde, verarbeitet der Controller diese Informationen und verwendet sie, um den PV-Strom und die PV-Leistung zu berechnen. Anschließend werden alle diese Daten an den Computer gesendet, um sie in MSExcel darzustellen. Von Feigen. 5 und 6 wird deutlich, dass der vorgeschlagene Prüfstand klein, flexibel und einfach zu handhaben ist. Es kann Studenten, Forschern und Ingenieuren ermöglichen, ihre Algorithmen auf einfache Weise anzuwenden, bevor sie mit der Implementierung eines großen Solar-Tracking-Geräts fortfahren.


Code

  • Eingebettete Software für Solartracker-Prüfstand
Eingebettete Software für Solartracker-PrüfstandArduino
//Servomotorbibliothek#include //Variablen initialisierenint mode =0;int ax =0; int buttonState1 =0; int buttonState2 =0; int prevButtonState1 =0;int prevButtonState2 =0; int ldrtopr=0; // LDR oben rechts int ldrtopl =1; // LDR oben links int ldrbotr =2; // LDR unten rechts int ldrbotl =3; // LDR unten links int topl =0;int topr =0; int botl =0;int botr =0; // Zwei Servos deklarierenServo servo_updown;Servo servo_rightleft;intthreshold_value=10; // Messempfindlichkeitvoid setup () { Serial.begin (9600); // Einrichtung der seriellen Verbindung // öffnet den seriellen Port, setzt die Datenrate auf 9600 bps Serial.println ("CLEARDATA"); // alle Daten löschen, die bereits in Serial.println ("LABEL,t,voltage,current,power,Mode"); // Definieren Sie die Spaltenüberschriften (PLX-DAQ-Befehl) PinMode (12, INPUT); // Modusschalter Taste PinMode (11, INPUT); // Achsenschalter PinMode (A4, INPUT); // Potentiometer für Rechts-Links-Bewegung und für Auf-Ab-Bewegung servo_updown.attach (5); // Auf-Ab-Bewegung des Servomotors servo_rightleft.attach (6); // Servomotor Rechts-Links-Bewegung}void loop () {// pv_power (); char-Modus; Float Volt =analogRead (A5) * 5,0/1023; Erhaltungsspannung =2*Volt; // Volt =(R1 / R1 + R2) * Spannung / R1 =R2 =10 Ohm => Spannung =2 * Volt) Erhaltungsstrom =Spannung / 20; // I=Spannung/(R1+R2) Schwimmerleistung =Spannung*Strom; Serial.print ( "DATEN, ZEIT"); // PLX-DAQ-Befehl Serial.print (Spannung); // die Spannung an den seriellen Port senden Serial.print (","); Serial.print (aktuell); // den Strom an den seriellen Port senden Serial.print (","); Serial.print (Leistung); // senden Sie die Stromversorgung an den seriellen Port Serial.print (","); // Serial.println (Modus); buttonState1 =digitalRead (12); if (buttonState1 !=prevButtonState1) { if (buttonState1 ==HIGH) {// Modus ändern und die richtige Anzeige aufleuchten if (mode ==1) { mode =0; aufrechtzuerhalten. Sonst { Modus =1; } } } prevButtonState1 =buttonState1; Verzögerung (50); // Warte 50 Millisekunden (s) if (mode ==0) { Mode='M'; Serial.println (Modus); // Modus "Manual" an den seriellen Port senden manualsolartracker(); aufrechtzuerhalten. Sonst {// Modus automatischer Modus ='A'; Serial.println (Modus); automatischer Solartracker(); // Modus "Automatisch" an den seriellen Port senden}} Void automaticsolartracker () { // Erfassen analoger Werte jedes LDR topr =analogRead (ldrtopr); // Analogwert des oberen rechten LDR erfassen topl =analogRead (ldrtopl); // Erfassen des analogen Wertes des oberen linken LDR botr =analogRead (ldrbotr); // Erfassen des Analogwerts von Bot Right LDR botl =analogRead (ldrbotl); // Analogwert von Bot Left LDR erfassen // Durchschnitt berechnen Int avgtop =(topr + topl) / 2; // Durchschnitt der Top-LDRs int avgbot =(botr + botl) / 2; //Durchschnitt der unteren LDRs int avgleft =(topl + botl) / 2; // Durchschnitt der linken LDRs Int avgright =(topr + botr) / 2; //Durchschnitt der rechten LDRs //Erhalte die verschiedenen int diffelev =avgtop - avgbot; //Ermittle den unterschiedlichen Durchschnitt zwischen LDRs top und LDRs bot int diffazi =avgright - avgleft; //Erhalte den unterschiedlichen Durchschnitt zwischen LDRs rechts und LDRs links //Links-Rechts-Bewegung des Solartrackers if (abs(diffazi)>=threshold_value){//Position nur ändern, wenn die Lichtdifferenz größer als der Schwellenwert ist if (diffazi> 0 .) ) { if (servo_rightleft.read () <180) { servo_rightleft.write ((servo_updown.read ( + 2)); } } if (diffazi <0) { if (servo_rightleft.read ()> 0) {servo_rightleft.write ((servo_updown.read ( - 2)); } } } //Auf-Ab-Bewegung des Solartrackers if (abs(diffelev)>=threshold_value){ //Position nur ändern, wenn die Lichtdifferenz größer als thethreshold_value ist if (diffelev> 0) { if (servo_updown.read() <180) {servo_updown.write ((servo_rightleft.read ( - 2)); } } if (diffelev <0) { if (servo_updown.read ()> 0) { servo_updown.write ((servo_rightleft.read ( + 2)); } } } } Void Manualsolartracker () {buttonState2 =digitalRead (13); if (buttonState2 !=prevButtonState2) { if (buttonState2 ==HIGH) {// Modus ändern und die richtige Anzeige aufleuchten if (axe ==1) { ax =0; } sonst { ax =1; } } } prevButtonState2 =buttonState2; Verzögerung (50); // 50 Millisekunden (s) warten if (axe ==0) {//Rechts-Links-Bewegung steuern servo_rightleft.write (map (analogRead (A4), 0, 1023, 0, 180)); aufrechtzuerhalten. aufrechtzuerhalten. Sonst {///Aufwärts-Abwärtsbewegung steuern servo_updown.write (map (analogRead (A4), 0, 1023, 0, 180)); } }

Schaltpläne


Herstellungsprozess

  1. Arduino Digital Dice
  2. Arduino-Gamecontroller
  3. Solar Tracker V2.0
  4. Pixel-Chaser-Spiel
  5. Internet der Dinge (IoT)-basierter Solartracker
  6. Arduino Repulsive Electromagnetic Levitation
  7. Arduino Home Controller aktiviert von Alexa
  8. NeoMatrix Arduino Pong
  9. Messung der Sonneneinstrahlung mit Arduino
  10. LED-Roulette-Spiel