Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Solar Tracker

Componenten en benodigdheden

Arduino UNO
× 1
SG90 Micro-servomotor
× 2
LDR, 5 Mohm
× 4
Weerstand 330 ohm
× 4
Draaipotentiometer (generiek)
× 1
Drukknopschakelaar, drukknop
× 2
Mini zonnepaneel
× 1

Benodigde gereedschappen en machines

Arduino IDE
Parallax PLX-DAQ

Over dit project

Dit project presenteert een open hardware/software testbank voor solar tracker. Het voorgestelde prototype is gebaseerd op een tweeassige zonnetracker die wordt bestuurd met Arduino Uno, een open-source prototypeplatform op basis van gebruiksvriendelijke hardware en software. De solar tracker kan automatisch worden aangestuurd met behulp van LightDependent Resistor (LDR) sensoren of handmatig met een potentiometer. Bovendien biedt deze testbank virtuele instrumentatie op basis van Excel waarin de zonne-trackergegevens kunnen worden vastgelegd en gepresenteerd. De gebruikte hardware is goedkoop, compact en veelzijdig gekozen. De voorgestelde testbank is ontworpen om studenten te helpen hun begrip van regeltheorie en hun toepassing te ontwikkelen.

De voorgestelde testbank wordt gepresenteerd in Fig. 1. Het is gebaseerd op een zonnetracker die automatisch kan draaien om de zon te volgen met behulp van vier LDR-sensoren en twee servomotoren (SM1 en SM2), of handmatig met behulp van een potentiometer. Om tussen de twee modi (automatisch en handmatig) te schakelen, wordt een drukknop gebruikt. Een andere drukknop wordt gebruikt om ofwel de SM1 (up-down servomotor) of SM2 (links-rechts servomotor) te koppelen aan de potentiometer om hun beweging te regelen. Bovendien wordt een computer gebruikt als een virtueel instrument om de modus en stroom, spanning en vermogen van het PV-paneel volgens de tijd in MS Excel te visualiseren. Het Arduino Uno-bord wordt gebruikt om alle softwarevereisten van het systeem te implementeren.

Mechanisch ontwerp

Zoals getoond in Fig. 2, is het computer-aided design (CAD) 3D-model van de solar tracker ontworpen in CATIA. Het is samengesteld uit het PV-paneel, de links-rechts en omhoog-omlaag servomotoren en vier LDR-sensoren. Voor de horizontale as is een lager parallel met de servomotor omhoog en omlaag bevestigd voor een betere flexibiliteit. De solar tracker is ontworpen om twee vrijheidsgraden te hebben, van oost naar west door de links-rechts servomotor en van zuid naar noord door de up-down servomotor. De LDR-sensoren worden in de vier hoeken van het PV-paneel geplaatst en in donkere buizen met een klein gaatje aan de bovenkant geplaatst om de verlichting van de zon te detecteren. Deze donkere buizen worden ook beschouwd als een concentrator van straling en worden gebruikt om de robuustheid van de zonnevolger te vergroten.

Hardwaresysteem

Fig. 3 toont het elektronische circuit van de voorgestelde testbank. Voor de automatische modus zet de microcontroller de analoge waarden van LDR-sensoren (pinnen A0 tot A3) om in digitale waarden. Vervolgens bestuurt het twee servomotoren (omhoog-omlaag en links-rechts) met behulp van twee Pulse-Width Modulation (PWM)-signalen (pinnen 5 en 6) om de zon te volgen. De rotatiebewegingen vinden plaats in twee assen, in azimut van oost naar west volgens het pad van de dagelijkse zon en in hoogte van zuid naar noord volgens het pad van de seizoenszon. Voor handmatige modus wordt een potentiometer (pin A4) gebruikt om de beweging van de twee servomotoren te regelen, een drukknop (pin 11) wordt gebruikt om de potentiometer aan te sluiten op de omhoog-omlaag-servomotor of de links-rechts servomotor. Daarnaast wordt er nog een drukknop (pin 12) gebruikt om tussen de twee modi te wisselen. Verder wordt de PV-spanning gemeten via de analoge pin A5 van de Arduino, daarna wordt de PV-stroom berekend aangezien de weerstand van de belasting al bekend is. Vervolgens worden de PV-stroom, spanning en vermogen versus tijd en de werkelijke modus naar de computer gestuurd om ze in realtime op MS Excel te presenteren.

Het LDR-sensorcircuit is ontworpen als een spanningsdelercircuit. De variatie in de lichtintensiteit is evenredig met de variatie van de uitgangsspanning van de deler. De bovenkant van de potentiaaldeler is 5 V, de aarde is 0 V en de uitgang van de spanningsdeler is aangesloten op een analoge ingang (A 0 bijvoorbeeld) van de microcontroller. Vervolgens converteert de analoog naar digitaal converter (ADC) van de microcontroller de analoge waarde die wordt gelezen door A 0 in een digitale waarde tussen 0 en 1023 omdat de ADC is gecodeerd in 10 bits, en volgens deze waarde is het mogelijk om het lichtniveau te kennen. De waarde van weerstanden die worden gebruikt in spanningsdelers is 330 Ω.

Er worden twee 180 graden servomotoren gebruikt. Een servomotor (MG996R) om de solar tracker aan te sturen volgens de verticale as, dit is de links-rechts servomotor. En een micro-servomotor (SG90) om de zonnevolger te besturen volgens de horizontale as, de up-down servomotor. Het voordeel van de servomotor is dat we zijn stop, run, de draairichting en snelheid kunnen regelen met behulp van een enkele laagstroomdraad die rechtstreeks is aangesloten op een uitgang van de microcontroller zonder dat er drivers nodig zijn. De gebruikte servomotoren worden bestuurd door het Arduino UNO-bord via een 3-draads elektrische kabel zoals weergegeven in Fig. 3, twee draden voor voeding en één draad voor PWM om zijn posities te regelen.

Het ontwerp van embedded software

De embedded software is het onderdeel dat wordt ingebed in de hardware (Arduino Uno) om de testbank voor zonne-trackers te besturen en te bewaken. De embedded software is ontworpen om aan de volgende vereisten te voldoen:

1. De testbank heeft twee standen:handmatig en automatisch. Er is een drukknop aangesloten op pin 12 om tussen de twee modi te schakelen.

2. Als de handmatige modus actief is, kan de potentiometer servomotoren aansturen van oost naar west voor de links-rechts motor of van zuid naar noord voor de up-down motor. Op pin 11 is een drukknop aangesloten om de potentiometer tussen de twee motoren te schakelen, ofwel de links-rechts servomotor ofwel de servomotor omhoog/omlaag.

3. Als de automatische modus actief is, wordt het algoritme weergegeven in Fig. 4 uitgevoerd. De laatste gebruikt de analoge waarden die worden geretourneerd door LDR-sensoren. Bijvoorbeeld, rekening houdend met azimut of verticale as, worden de gemiddelde waarden van twee rechter LDR's en twee linker LDR's vergeleken en als de linker set LDR's meer licht ontvangt, zal de zonnevolger in die richting bewegen door de links-rechts servomotor. Deze laatste zal blijven draaien totdat het verschilresultaat in het bereik [−10, 10] ligt. Dit bereik wordt gebruikt om de controller te stabiliseren en zodra de solartracker loodrecht op de zon staat, wordt er geen verdere controle uitgevoerd. Aan de andere kant, als de rechter set LDR's meer licht ontvangt, beweegt de zonnevolger in die richting door de links-rechts servomotor en zal blijven draaien totdat het verschilresultaat in het bereik [-10, 10] ligt. Dezelfde manier wordt gebruikt voor de hoogte-as. Bovendien hebben we ook de gemiddelde straling tussen de vier LDR-sensoren bepaald en of deze waarde minder is dan een kleine waarde (8:een waarde die is aangepast en praktisch getest en wordt geretourneerd wanneer de instraling nul is). Dat wil zeggen, de nacht is aangebroken. In dit geval moet de zonnetracker terugkeren naar de opgaande positie van de zon. Bijvoorbeeld als de opgaande positie van de zon bereikt kan worden door 0 graden in te stellen in de links-rechts servomotor, en 30 graden in de op-neer servomotor. Dit kan eenvoudig via de C-functie “servox. write(angle)” geleverd door Arduino IDE.

4. De PV-spanning die wordt verkregen via de analoge pin A5 moet worden behandeld en gebruikt om de PV-stroom en het PV-vermogen te berekenen. Vervolgens moeten al deze gegevens en de eigenlijke modus via een USB-kabel naar de computer worden gestuurd en vervolgens in MS Excel worden gepresenteerd.

De PLX-DAQ Excel Macro wordt gebruikt voor data-acquisitie van de Arduino-microcontroller naar een Excel-spreadsheet. We hoeven het alleen maar te downloaden. Na installatie wordt er automatisch een map met de naam "PLX-DAQ" gemaakt op de pc waarin zich een snelkoppeling met de naam "PLX-DAQ Spreadsheet" bevindt. Om vervolgens de communicatie tussen het bord en Excel tot stand te brengen, hoeven we alleen maar de spreadsheet te openen en de verbindingsinstellingen (baudrate en poort) in het PLX-DAQ-venster te definiëren (Fig. 5). Na het klikken op "verbinden" worden de uitvoergegevens verzameld en in realtime weergegeven op de Excel-spreadsheet

Het prototype

Figuur 6 toont de zonnetracker in vrijstaande en gemonteerde toestand. Zoals gepresenteerd, is de hele structuur vervaardigd met behulp van houten platen, en het is duidelijk dat alle genoemde componenten zijn gebruikt om de zonne-tracker te bouwen met handmatige en automatische modi (LDR-sensoren, Arduino Uno, servomotoren, potentiometer, drukknoppen en het kleine PV-paneel).

Figuur 7 toont de volledige testbank, zonne-tracker met virtuele instrumentatie en een kunstlamp die licht kan belichten om de zonne-tracker te testen. De solar tracker en de computer zijn via een USB-kabel met elkaar verbonden. Zodra de PV-spanning is verkregen, behandelt de controller deze informatie en gebruikt deze om de PV-stroom en het PV-vermogen te berekenen. Vervolgens worden al deze gegevens naar de computer gestuurd om ze in MSExcel te presenteren. Van Fig. 5 en 6 is het duidelijk dat de voorgestelde testbank klein, flexibel en gebruiksvriendelijk is. Het kan studenten, onderzoekers en ingenieurs in staat stellen om hun algoritmen op een eenvoudige manier toe te passen voordat ze verder gaan met de implementatie van een groot zonnevolgapparaat.


Code

  • Geïntegreerde software voor testbank voor zonne-tracker
Geïntegreerde software voor testbank voor zonne-trackerArduino
//Servomotorbibliotheek#include //Initialiseer variabelenint mode =0;int ax =0; int knopState1 =0; int knopState2 =0; int prevButtonState1 =0;int prevButtonState2 =0; int ldrtopr=0; // rechtsboven LDR int ldrtopl =1; // linksboven LDR int ldrbotr =2; // rechtsonder LDR int ldrbotl =3; // linksonder LDR int topl =0;int topr =0; int botl =0;int botr =0;//Declareer twee servo'sServo servo_updown;Servo servo_rightleft;int threshold_value=10; // meetgevoeligheid ongeldig setup () {Serial.begin (9600); //seriële verbinding instellen //opent seriële poort, stelt datasnelheid in op 9600 bps Serial.println ("CLEARDATA"); //wis alle gegevens die al in Serial.println zijn geplaatst ("LABEL,t,voltage,current,power,Mode"); //definieer de kolomkoppen (PLX-DAQ-opdracht) pinMode (12, INPUT); // Modusschakelaar Knop pinMode (11, INPUT); // Asschakelaar pinMode (A4, INPUT); // Potentiometer voor rechts-links beweging en voor beweging omhoog en omlaag servo_updown.attach(5); // Servomotor omhoog-omlaag beweging servo_rightleft.attach (6); // Servomotor rechts-links beweging}void loop(){// pv_power();char Mode; vlottervolt =analoog lezen (A5)*5.0/1023; vlotterspanning =2*volt; // Volt=(R1/R1+R2)*Spanning / R1=R2=10Ohms => spanning=2*volt) floatstroom =spanning/20; // I=spanning/(R1+R2) vlottervermogen =spanning*stroom; Serial.print("GEGEVENS,TIJD,"); // PLX-DAQ-opdracht Serial.print (voltage); // stuur de spanning naar seriële poort Serial.print(","); Serial.print (huidig); // stuur de stroom naar seriële poort Serial.print (","); Seriële.afdruk (stroom); // stuur de stroom naar de seriële poort Serial.print(","); // Serieel.println (Modus); buttonState1 =digitalRead (12); if (buttonState1 !=prevButtonState1) { if (buttonState1 ==HIGH) {//Wijzig modus en verlicht de juiste indicator if (mode ==1) { mode =0; } anders { modus =1; } } } prevButtonState1 =buttonState1; vertraging (50); // Wacht 50 milliseconde (s) if (mode ==0) { Mode='M'; Seriële.println (Modus); //Stuur Mode "Manual" naar seriële poort manualsolartracker(); } else { // modus automatische modus ='A'; Seriële.println (Modus); automatische zonnetracker(); //Send Mode "Automatic" naar seriële poort}}void automaticsolartracker(){ //vastleggen van analoge waarden van elke LDR topr=analogRead(ldrtopr); // vastleggen van analoge waarde van LDR rechtsboven topl =analogRead (ldrtopl); // vastleggen van analoge waarde van LDR linksboven botr =analogRead (ldrbotr); // vastleggen van analoge waarde van bot rechts LDR botl =analogRead (ldrbotl); // analoge waarde vastleggen van bot linker LDR // gemiddelde berekenen int avgtop =(topr + topl) / 2; //gemiddelde van top LDR's int avgbot =(botr + botl) / 2; //gemiddelde van onderste LDR's int avgleft =(topl + botl) / 2; //gemiddelde van linker LDR's int avgright =(topr + botr) / 2; //gemiddelde van de juiste LDR's // Haal de verschillende int diffelev =avgtop - avgbot; //Verkrijg het verschillende gemiddelde tussen LDR's top en LDR's bot int diffazi =avgright - avgleft; //Verkrijg het verschillende gemiddelde tussen LDR's rechts en LDR's links // links-rechts beweging van zonnevolger if (abs(diffazi)>=threshold_value){ //Wijzig positie alleen als het lichtverschil groter is dan de threshold_value 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)); } } } //opwaartse beweging van zonnevolger if (abs(diffelev)>=threshold_value){ //Wijzig positie alleen als het lichtverschil groter is dan dethreshold_value 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) {//Wijzig modus en verlicht de juiste indicator if (axe ==1) { ax =0; } anders { bijl =1; } } } prevButtonState2 =buttonState2; vertraging (50); // Wacht 50 milliseconde (s) if (axe ==0) { // control rechts-links beweging servo_rightleft.write (map (analogRead (A4), 0, 1023, 0, 180)); } else { // // control up-down beweging servo_updown.write (map (analogRead (A4), 0, 1023, 0, 180)); } }

Schema's


Productieproces

  1. Arduino digitale dobbelstenen
  2. Arduino-gamecontroller
  3. Solar Tracker V2.0
  4. Pixel Chaser-game
  5. Internet of things (IoT)-gebaseerde zonne-tracker
  6. Arduino afstotende elektromagnetische levitatie
  7. Arduino Home Controller geactiveerd door Alexa
  8. NeoMatrix Arduino Pong
  9. Zonnestraling meten met Arduino
  10. LED-roulettespel
  11. Zonnestelsel dat de zon volgt