Indholdsfortegnelse:

ARDUINO ENERGI METER: 10 trin (med billeder)
ARDUINO ENERGI METER: 10 trin (med billeder)

Video: ARDUINO ENERGI METER: 10 trin (med billeder)

Video: ARDUINO ENERGI METER: 10 trin (med billeder)
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Juli
Anonim
Image
Image
ARDUINO ENERGIMÅLER
ARDUINO ENERGIMÅLER
ARDUINO ENERGIMÅLER
ARDUINO ENERGIMÅLER

[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:

Nødvendige dele
Nødvendige 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ændingsmåling
Spændingsmåling
Spændingsmåling
Spændingsmåling
Spændingsmåling
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

Nuværende måling
Nuværende måling
Nuværende måling
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

Visuelt output
Visuelt 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

Data uploadet til Xively.com
Data uploadet til Xively.com
Data uploadet til Xively.com
Data uploadet til Xively.com
Data uploadet til Xively.com
Data uploadet 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.

123D kredsløbskonkurrence
123D kredsløbskonkurrence
123D kredsløbskonkurrence
123D kredsløbskonkurrence

Tredje præmie i 123D -kredsløbskonkurrencen

Anbefalede: