Indholdsfortegnelse:
- Trin 1: Påkrævede dele:
- Trin 2: Kraft og energi
- Trin 3: Spændingsmåling
- Trin 4: Nuværende måling
- Trin 5: Tidsmåling
- Trin 6: Sådan beregner ARDUINO effekt og energi
- Trin 7: Visuel output
- Trin 8: Upload af data til Xively.com
- Trin 9: Xively og ARDUINO Code
- Trin 10: Datalogning på et SD -kort
Video: ARDUINO ENERGI METER: 10 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
[Afspil video]
Jeg tilhører en landsby Odisha, Indien, hvor hyppigt strømafbrydelse er meget almindelig. Det hæmmer hver enkelt liv. I mine barndomsdage var det en reel udfordring at fortsætte studier efter skumringen. På grund af dette problem designet jeg et solsystem til mit hjem på eksperimentel basis. Jeg brugte et solpanel på 10 Watt, 6V til belysning af få lyse lysdioder. Efter at have stået over for mange strabadser lykkedes projektet. Derefter besluttede jeg at overvåge spændingen, strømmen, effekten og energien, der er involveret i systemet. Dette bragte ideen om at designe en ENERGY METER. Jeg brugte ARDUINO som hjertet i dette projekt, fordi det er meget let at skrive kode i sin IDE, og der er et stort antal open source -biblioteker tilgængelige på internettet, som kan bruges i henhold til Jeg har eksperimenteret projektet med meget lille solide (10 Watt) solsystem, men dette kan let ændres til brug for et højere rating system.
Du kan finde alle mine projekter på:
Funktion: Energiovervågning ved 1. LCD -display 2. via internet (Xively upload) 3. Datalogning på et SD -kort
Du kan se min nye instruerbare ARDUINO MPPT SOLAR CHARGE CONTROLLER (Version-3.0)
Du kan også se mine andre instruktioner på
ARDUINO SOLAR CHARGE CONTROLLER (Version 2.0)
ARDUINO SOLAR CHARGE CONTROLLER (Version-1)
Trin 1: Påkrævede dele:
1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)
3. 16x2 KARAKTER LCD (Amazon)
4. ACS 712 STRØMSENSOR (Amazon) 4. MODSTANDE (10k, 330ohm) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET -KABEL (Amazon) 8. BREAD BOARD (Amazon)
Trin 2: Kraft og energi
Effekt: Strøm er et produkt af spænding (volt) og strøm (Amp) P = VxI Effektenhed er Watt eller KW Energi: Energi er produkt af effekt (watt) og tid (time) E = Pxt Enhed for energi er watt time eller kilowatt Time (kWh) Af ovenstående formel er det klart, at for at måle energi har vi brug for tre parametre 1. Spænding 2. Strøm 3. Tid
Trin 3: Spændingsmåling
Spænding måles ved hjælp af et spændingsdelerkredsløb Da ARDUINO analoge indgangsspænding er begrænset til 5V, designet jeg spændingsdeleren på en sådan måde, at udgangsspændingen fra den skulle være mindre end 5V. Mit batteri brugt til lagring af strøm fra solpanelet er vurderet til 6v, 5.5Ah. Så jeg er nødt til at trappe denne 6.5v ned til en spænding, der er lavere end 5V. Jeg brugte R1 = 10k og R2 = 10K. Værdien af R1 og R2 kan være lavere, men problemet er, at når modstanden er lav, strømmer der større strøm gennem det som følge heraf, at en stor mængde strøm (P = I^2R) forsvinder i form af varme. Så der kan vælges en anden modstandsværdi, men der skal udvises forsigtighed for at minimere effekttabet på tværs af modstanden. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 ved fuld opladning R1 = 10k og R2 = 10k Vout = 10/(10+10)*6,5 = 3,25v, som er lavere end 5v og egnet til ARDUINO analog pin BEMÆRK I har vist 9 Volt batteri i blottet kort er bare for eksempel at forbinde ledningerne. Men det faktiske batteri, jeg brugte, er et 6 Volt, 5,5 Ah blybatteri. Spændingskalibrering: Når batteriet er fuldt opladet (6,5 v) får vi a Vout = 3,25v og lavere værdi for anden lavere batterispænding. AEDUINO ADC konverterer analogt signal til tilsvarende digital tilnærmelse. Når batterispændingen er 6,5v fik jeg 3,25v fra spændingsdeleren og sample1 = 696 i seriel monitor, hvor sample1 er ADC -værdi svarer til 3,25vFor bedre forståelse har jeg vedhæftet realtidsimuleringen ved 123D.circuit til spændingsmåling Kalibrering: 3,25v svarer til 696 1 svarer til 3,25/696 = 4,669mv Vout = (4,669*sample1)/1000 volt Faktisk batterispænding = (2*Vout) voltARDUINO KODE: // tager 150 prøver fra spændingsdeleren med et interval på 2sek og derefter gennemsnitligt indsamlede prøvedata for (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // læs spændingen fra divider kredsløb forsinkelse (2); } sample1 = sample1/150; spænding = 4,669*2*sample1/1000;
Trin 4: Nuværende måling
Til strømmåling brugte jeg en Hall Effect -strømføler ACS 712 (20 A). Der findes forskellige ACS712 -sensorer i strømområdet på markedet, så vælg i henhold til dine krav. I brødbrætdiagrammet har jeg vist LED som en belastning, men den faktiske belastning er anderledes. ARBEJDSPRINCIP: Hall -effekten er produktionen af en spændingsforskel (Hall -spændingen) på tværs af en elektrisk leder, på tværs af en elektrisk strøm i lederen og et magnetfelt vinkelret på strømmen. For at vide mere om Hall Effect sensor klik her Databladet for ACS 712 sensor findes her Fra datablad 1. ACS 712 måler positive og negative 20Amps, svarende til den analoge udgang 100mV/A 2. Ingen teststrøm gennem udgangsspændingen er VCC/2 = 5v/2 = 2.5VCalibrering: Analog læsning producerer en værdi på 0-1023, svarende til 0v til 5v Så Analog læsning 1 = (5/1024) V = 4.89mv Værdi = (4.89*Analog læsværdi)/ 1000 V Men pr. Datablade er forskydningen 2,5 V (Når strømnul får du 2,5 V fra sensorens udgang) Faktisk værdi = (værdi-2,5) V Strøm i forstærker = faktisk værdi*10ARDUINO KODE: // tager 150 prøver fra sensorer med et interval på 2sek og derefter gennemsnittet af de indsamlede prøvedata for (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // læs strømmen fra sensorforsinkelse (2); } sample2 = sample2/150; val = (5,0*sample2) /1024,0; actualval = val-2,5; // offset spænding er 2,5v ampere = actualval*10;
Trin 5: Tidsmåling
Til tidsmåling er der ikke behov for nogen ekstern hardware, da ARDUINO selv har indbygget timer. Funktionen millis () returnerer antallet af millisekunder siden Arduino -kortet begyndte at køre det aktuelle program. ARDUINO KODE: lang milisek = millis (); // beregne tid i millisekunder lang tid = milisek/1000; // konverter millisekunder til sekunder
Trin 6: Sådan beregner ARDUINO effekt og energi
totamps = totamps+ampere; // beregne samlede forstærkere avgamps = totamps/time; // gennemsnitlige ampere amphr = (avgamps*tid)/3600; // amp-time watt = spænding*ampere; // effekt = spænding*strøm energi = (watt*tid)/3600; Watt-sek konverteres igen til Watt-Hr ved at dividere 1 time (3600 sek) // energi = (watt*tid)/(1000*3600); til aflæsning i kWh
Trin 7: Visuel output
Alle resultaterne kan visualiseres i den serielle skærm eller ved hjælp af en LCD. Jeg brugte en 16x2 tegn LCD til at vise alle de resultater, der blev opnået i de foregående trin. For skemaer se brødbrætskredsløbet vist ovenfor. Tilslut LCD med ARDUINO som vist nedenfor: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor eller Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Ikke tilsluttet 8. D1 -> Arduino -Ikke tilsluttet 9. D2 -> Arduino -Ikke tilsluttet 10. D3 -> Arduino -Ikke tilsluttet 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + modstand (baggrundsbelysningseffekt) 16. K -> Arduino GND (baggrundslys) ARDUINO KODE: Til seriel skærm:
Serial.print ("VOLTAGE:"); Seriel.print (spænding); Serial.println ("Volt"); Serial.print ("CURRENT:"); Seriel.print (forstærkere); Serial.println ("Ampere"); Serial.print ("POWER:"); Seriel.print (watt); Serial.println ("Watt"); Serial.print ("FORBRUGT ENERGI:"); Seriel.print (energi); Serial.println ("Watt-time"); Serial.println (""); // udskriv de næste sæt parametre efter en tom linjeforsinkelse (2000); For LCD: For LCD -display skal du først importere "LiquidCrystal" -biblioteket i koden. For at vide mere om LequidCrystal -biblioteket klik her For LCD -tutorial klik her Følgende kode er et format til at vise al beregning for effekt og energi på LCD #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; ugyldig opsætning () {pinMode (baggrundslys, OUTPUT); // sæt pin 9 som output analogWrite (baggrundslys, 150); // styrer baggrundsbelysningsintensiteten 0-254 lcd.begin (16, 2); // kolonner, rækker. skærmstørrelse lcd.clear (); // ryd skærmen} void loop () {lcd.setCursor (16, 1); // indstil markøren uden for displaytællingen lcd.print (""); // udskriv tom tegnforsinkelse (600); ///////////////////////////////////////////// /////////////////////////////////////// (1, 0); // sæt markøren på 1. kol og 1. række lcd.print (watt); lcd.print ("W"); lcd.print (spænding); lcd.print ("V"); lcd.setCursor (1, 1); // sæt markøren på 1. kol og 2. række lcd.print (energi); lcd.print ("WH"); lcd.print (forstærkere); lcd.print ("A"); }
Trin 8: Upload af data til Xively.com
Se ovenstående skærmbilleder for bedre at stå. For data, der uploades til xively.com, skal følgende bibliotek downloades først HttpClient: klik herXively: klik herSPI: Import fra arduino IDE (skitse -> Import bibliotek …..) Ethernet: Import fra arduino IDE ((skitse -> Importer bibliotek …..) Åbn en konto med https://xively.com (tidligere pachube.com og cosm.com) Tilmeld dig en gratis udviklerkonto på
Vælg et brugernavn, en adgangskode, angiv din adresse og tidszone osv. Du modtager en bekræftelses -e -mail;
klik derefter på aktiveringslinket for at aktivere din konto. Efter at have åbnet kontoen vil du blive omdirigeret til siden Udviklingsenheder
- Klik på boksen +Tilføj enhed
- Giv dit apparat et navn og en beskrivelse (f.eks. Energiovervågning) ·
- Vælg private eller offentlige data (jeg vælger privat) ·
- Klik på Tilføj enhed
Efter tilføjelse af enheden omdirigeres du til en ny side, hvor der er mange vigtige oplysninger
- Produkt -id, produkthemmelighed, serienummer, aktiveringskode ·
- Feed -id, FeedURL, API -slutpunkt (feed -id bruges i ARDUINO -kode)
- Tilføj kanaler (IVælg ENERGI og POWER, men du kan vælge efter dit valg) Giv enhed og symbol for parameteren ·
- Tilføj din placering ·
- API -nøgler (bruges i ARDUINO -kode, undgå at dele dette nummer) ·
- Udløser (ping aweb -side, når en hændelse skete, f.eks. Når energiforbruget overstiger en vis grænse)
Trin 9: Xively og ARDUINO Code
Her vedhæftede jeg den komplette kode (betaversion) til energimåler eksklusive SD -kortdatalogning, som er vedhæftet separat i det næste trin. / ** Energiovervågningsdata uploades til xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Indtast din Xively API -nøgle #define FEED_ID xxxxxxxxx // Indtast dit Xively feed -id // MAC -adresse til din Ethernet shield byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analog pin, som vi overvåger (0 og 1 bruges af Ethernet -skjoldet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // sidste gang vi tilsluttede os Cosm const unsigned long connectionInterval = 15000; // forsinkelse mellem forbindelse til Cosm i millisekunder // Initialiser Cosm -biblioteket // Definer strengen for vores datastream -id char sensorId = "POWER"; char sensorId2 = "ENERGI"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Pak datastrømmen ind i et feed XivelyFeed -feed (FEED_ID, datastreams, 2/ * antal datastreams */); EthernetClient -klient; XivelyClient xivelyclient (klient); ugyldig opsætning () {Serial.begin (9600); Serial.println ("Initialiserer netværk"); mens (Ethernet.begin (mac)! = 1) {Serial.println ("Fejl under hentning af IP -adresse via DHCP, forsøg igen …"); forsinkelse (15000); } Serial.println ("Netværk initialiseret"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // sende data til xively getData (); // læs datastrømmen tilbage fra xively lastConnectionTime = millis (); // opdater tilslutningstidspunktet, så vi venter, før vi opretter forbindelse igen}} void sendData () {int sensor1 = watt; int sensor2 = energi; datastreams [0].setFloat (sensor1); // effektværdi datastreams [1].setFloat (sensor2); // energiværdi Serial.print ("Læsekraft"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Læs energi"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Upload til Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT -returkode:"); Serial.println (ret); Serial.println (); } // hent værdien af datastrømmen fra xively, udskriv den værdi, vi modtog void getData () {Serial.println ("Læsning af data fra Xively"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("FÅ returkode:"); Serial.println (ret); hvis (ret> 0) {Serial.print ("Datastream er:"); Serial.println (feed [0]); Serial.print ("Strømværdi er:"); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream er:"); Serial.println (feed [1]); Serial.print ("Energiværdi er:"); Serial.println (feed [1].getFloat ()); } Serial.println ();
Trin 10: Datalogning på et SD -kort
For datalagring på et SD -kort skal du importere SD -biblioteket For tutorial klik herFor at vide mere om SD -biblioteket klik herKoden til lagring af data på et SD -kort skrives separat, da jeg ikke har tilstrækkelig hukommelse i min ARDUINO UNO efter skrive kode til LCD -display og dataoverførsel xively.com. Men jeg prøver at forbedre betaversionskoden, så en enkelt kode kan indeholde alle funktionerne (LCD -display, overførsel af data og lagring af data på et SD -kort). Koden til datalogning vedhæftes nedenfor. Hvis nogen skriver en bedre kode ved at ændre min kode, del venligst med mig. Dette er min første tekniske vejledning, hvis nogen finder en fejl i den, er du velkommen til at kommentere.. så jeg kan forbedre mig selv. Hvis du finder forbedringsområder i dette projekt bedes du kommentere eller send mig en besked, så projektet bliver mere kraftfuldt. Jeg tror, det vil være nyttigt for andre såvel som for mig.
Tredje præmie i 123D -kredsløbskonkurrencen
Anbefalede:
Solar Soil Moisture Meter med ESP8266: 10 trin (med billeder)
Solar Soil Moisture Meter med ESP8266: I denne Instructable laver vi en soldrevet jordfugtighedsmonitor. Den bruger en ESP8266 wifi -mikrokontroller med lav strømkode, og alt er vandtæt, så det kan efterlades udenfor. Du kan følge denne opskrift nøjagtigt eller tage fra den
Gratis energi? Oplad din mobiltelefon med en håndsving -generator: 3 trin
Gratis energi? Oplad din mobiltelefon med en håndsvinggenerator: Problem: Mobiltelefonen kører altid UD AF JUICEMobiltelefoner er blevet en vigtig del af alles liv. Browsing, spil og beskeder bruger du hvert minut med din telefon. Vi går ind i Nomophobia, No Mobile Phone Phobia. Y
LED VU-meter med Arduino UNO: 7 trin (med billeder)
LED VU-meter med Arduino UNO: En volumenhedsenhed (VU) måler eller standard lydstyrkeindikator (SVI) er en enhed, der viser en repræsentation af signalniveauet i lydudstyr. I dette projekt har jeg brugt lysdioder til at angive, hvor meget intens lydsignalet er. Når lydintensiteten i
Kartoffelbatteri: Forståelse for kemisk og elektrisk energi: 13 trin (med billeder)
Kartoffelbatteri: Forståelse for kemisk og elektrisk energi: Vidste du, at du kan drive en lyspære med bare en eller to kartofler? Den kemiske energi mellem de to metaller omdannes til elektrisk energi og skaber et kredsløb ved hjælp af kartoflen! Dette skaber en lille elektrisk ladning, der kan
Bærbart spild af energi: 8 trin (med billeder)
Bærbart spild af energi: Sy forskellige bløde elektroniske komponenter sammen for at gøre dit yndlingsbeklædningsgenstand til et slidstærkt spild af energi! Disse trin-for-trin-instruktioner viser dig, hvordan du kombinerer stofknapper, stoftrykssensorer og ledende stofspor som