INHOUDSOPGAWE:

ARDUINO ENERGIEMETER: 10 stappe (met foto's)
ARDUINO ENERGIEMETER: 10 stappe (met foto's)

Video: ARDUINO ENERGIEMETER: 10 stappe (met foto's)

Video: ARDUINO ENERGIEMETER: 10 stappe (met foto's)
Video: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, November
Anonim
Image
Image
ARDUINO ENERGIEMETER
ARDUINO ENERGIEMETER
ARDUINO ENERGIEMETER
ARDUINO ENERGIEMETER

[Speel video]

Ek behoort aan 'n dorpie Odisha, Indië, waar gereelde kragonderbrekings gereeld voorkom. Dit belemmer elkeen se lewe. Gedurende my kinderdae was dit 'n ware uitdaging om voort te gaan studeer na skemer. As gevolg van hierdie probleem het ek 'n sonnestelsel vir my huis op 'n eksperimentele basis ontwerp. Ek het 'n sonpaneel van 10 Watt, 6V gebruik om 'n paar helder LED's aan te steek. Na baie ontberings was die projek suksesvol. Toe besluit ek om die spanning, stroom, krag en energie wat by die stelsel betrokke is, te monitor. Dit het die idee gebring om 'n ENERGIE METER te ontwerp. Ek het ARDUINO as die kern van hierdie projek gebruik, want dit is baie maklik om kode in sy IDE te skryf en daar is groot getalle open source biblioteke op die internet beskikbaar wat volgens die Ek het die projek vir 'n baie klein (10Watt) sonnestelsel geëksperimenteer, maar dit kan maklik aangepas word vir 'n hoër graderingstelsel.

U kan al my projekte vind op:

Kenmerk: Energie -monitering deur 1. LCD -skerm 2. via internet (oplaai) 3. Data -aanmelding op 'n SD -kaart

U kan my nuwe opdragbare ARDUINO MPPT SOLAR CHARGE CONTROLLER (weergawe-3.0) sien

U kan ook my ander instruksies sien

ARDUINO SOLAR CHARGE CONTROLLER (Weergawe 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Weergawe-1)

Stap 1: Onderdele benodig:

Onderdele benodig
Onderdele benodig

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)

3. 16x2 KARAKTER LCD (Amazon)

4. ACS 712 HUIDIGE SENSOR (Amazon) 4. WEERSTANDE (10k, 330ohm) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER DRAADE (Amazon) 7. ETHERNETKABEL (Amazon) 8. BROODBORD (Amazon)

Stap 2: Krag en energie

Krag: Krag is die produk van spanning (volt) en stroom (Amp) P = VxI Krageenheid is Watt of KW Energie: Energie is produk van krag (watt) en tyd (uur) E = Pxt Eenheid energie is wattuur of kilowatt Uur (kWh) Uit die formule hierbo is dit duidelik dat ons drie parameters benodig om energie te meet 1. Spanning 2. Stroom 3. Tyd

Stap 3: Spanningsmeting

Spanningsmeting
Spanningsmeting
Spanningsmeting
Spanningsmeting
Spanningsmeting
Spanningsmeting

Spanning word gemeet met behulp van 'n spanningsverdelerkring, aangesien die ingangsspanning van die ARDUINO -analoog tot 5V beperk is, het ek die spanningsverdeler so ontwerp dat die uitsetspanning daarvan minder as 5V moet wees. Die krag van die sonpaneel is 6v, 5.5Ah, dus moet ek hierdie 6.5v verlaag tot 'n spanning laer as 5V. Ek het R1 = 10k en R2 = 10K gebruik. Die waarde van R1 en R2 kan een laer wees, maar die probleem is dat wanneer die weerstand laag is, 'n groter stroom daardeur vloei, waardeur 'n groot hoeveelheid krag (P = I^2R) in die vorm van hitte verdwyn. U kan dus 'n ander weerstandswaarde kies, maar u moet sorg dra dat die kragverlies oor die weerstand verminder word. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 as dit volledig gelaai is R1 = 10k en R2 = 10k Vout = 10/(10+10)*6,5 = 3,25v wat laer is as 5v en geskik is vir ARDUINO analoog pin OPMERKING I Ek het 'n 9 Volt -battery in 'n blokkeerde kring getoon om die drade aan te sluit, maar die werklike battery wat ek gebruik het, is 'n 6 Volt, 5.5Ah loodsuurbattery. a Vout = 3.25v en laer waarde vir ander laer batteryspanning. AEDUINO ADC skakel analoog sein om na ooreenstemmende digitale benadering. As die batteryspanning 6.5v is, het ek 3.25v van die spanningsverdeler gekry en monster1 = 696 in die seriële monitor, waar monster1 die ADC -waarde is, ooreenstem met 3.25v Vir 'n beter begrip het ek die intydse simulasie aangeheg deur 123D -stroombaan vir spanningmeting Kalibrasie: 3.25v ekwivalent aan 696 1 is gelykstaande aan 3.25/696 = 4.669mv Vout = (4.669*monster1)/1000 volt Werklike batteryspanning = (2*Vout) voltARDUINO KODE: // neem 150 monsters van spanningsverdeler met 'n interval van 2sek en dan gemiddeld die steekproefdata wat ingesamel is vir (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // lees die spanning van die verdelingskringloopvertraging (2); } monster1 = monster1/150; spanning = 4.669*2*monster1/1000;

Stap 4: Huidige meting

Huidige meting
Huidige meting
Huidige meting
Huidige meting

Vir huidige meting het ek 'n Hall Effect -stroomsensor ACS 712 (20 A) gebruik. Daar is verskillende ACS712 -sensor in die huidige reeks, dus kies volgens u vereiste. In broodborddiagram het ek LED as 'n las getoon, maar die werklike las is anders. WERKBEGINSEL: Die Hall -effek is die produksie van 'n spanningsverskil (die Hall -spanning) oor 'n elektriese geleier, dwars van 'n elektriese stroom in die geleier en 'n magnetiese veld loodreg op die stroom. Klik hier om meer te wete te kom oor Hall Effect -sensor VCC/2 = 5v/2 = 2.5V Kalibrasie: Analoog lees lewer 'n waarde van 0-1023, wat gelyk is aan 0v tot 5v So Analoog lees 1 = (5/1024) V = 4.89mv Waarde = (4.89*Analoog leeswaarde)/ 1000 V Maar volgens die gegewensblaaie is die offset 2.5V (as die huidige nul is, kry u 2.5V van die sensor se uitset) Werklike waarde = (waarde-2.5) V Stroom in amp = werklike waarde*10ARDUINO CODE: // neem 150 monsters van sensors met 'n interval van 2sek en dan gemiddeld die monstersdata wat ingesamel is vir (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // lees die stroom vanaf sensorvertraging (2); } monster2 = monster2/150; val = (5.0*monster2) /1024.0; actualval = val-2.5; // offset spanning is 2.5v ampère = actualval*10;

Stap 5: Tydmeting

Vir tydmeting is geen eksterne hardeware nodig nie, aangesien ARDUINO self 'n ingeboude timer het. Die funksie millis () gee die aantal millisekondes terug sedert die Arduino -bord met die huidige program begin het. ARDUINO CODE: long milisec = millis (); // bereken tyd in millisekondes lang tyd = milisek/1000; // skakel millisekondes om na sekondes

Stap 6: Hoe ARDUINO krag en energie bereken

totamps = totamps+ampère; // bereken totale ampère avgamps = totamps/tyd; // gemiddelde amps amphr = (avgamps*tyd)/3600; // amp-uur watt = spanning*ampère; // krag = spanning*huidige energie = (watt*tyd)/3600; Watt-sek word weer omgeskakel na Watt-Hr deur 1 uur (3600 sek) // energie = (watt*tyd)/(1000*3600) te verdeel; vir die lees in kWh

Stap 7: Visuele uitvoer

Visuele uitset
Visuele uitset

Al die resultate kan op die seriële monitor of deur 'n LCD vertoon word. Ek het 'n 16x2 karakter LCD gebruik om al die resultate wat in die vorige stappe behaal is, te vertoon. Vir skemas sien die broodbordkring hierbo. Koppel LCD met ARDUINO soos hieronder: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor of Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Not Connected 8 D1 -> Arduino -Nie gekoppel nie 9. D2 -> Arduino -Nie gekoppel nie 10. D3 -> Arduino -Nie gekoppel nie 11. D4 -> Arduino pen 5 12. D5 -> Arduino pen 4 13. D6 -> Arduino pen 3 14. D7 -> Arduino -pen 2 15. A -> Arduino -pen 13 + Weerstand (krag teen agtergrond) 16. K -> Arduino GND (agtergrondgrond) ARDUINO -KODE: Vir seriële monitor:

Serial.print ("VOLTAGE:"); Reeks.afdruk (spanning); Serial.println ("Volt"); Serial.print ("HUIDIG:"); Reeks.afdruk (versterkers); Serial.println ("Amps"); Serial.print ("POWER:"); Reeks.afdruk (watt); Serial.println ("Watt"); Serial.print ("ENERGIE VERBRUIK:"); Reeks.afdruk (energie); Serial.println ("Watt-uur"); Serial.println (""); // druk die volgende stelle parameter na 'n leë reëlvertraging (2000); Vir LCD: Vir LCD -skerm moet u eers die "LiquidCrystal" -biblioteek in die kode invoer. Vir meer inligting oor die LequidCrystal -biblioteek, klik hier Vir LCD -tutoriaal klik hier Die volgende kode is 'n formaat om al die berekeninge vir krag en energie in LCD #include lcd (8, 7, 6, 5, 4, 3, 2) te vertoon; int backLight = 9; ongeldige opstelling () {pinMode (agterlig, OUTPUT); // stel pen 9 in as analoog uitgang (backLight, 150); // beheer die agtergrondintensiteit 0-254 lcd.begin (16, 2); // kolomme, rye. vertoning grootte lcd.clear (); // maak die skerm} leeg lus () {lcd.setCursor (16, 1) skoon; // stel die wyser buite die vertoningsgetal lcd.print (""); // druk leë karaktervertraging (600); ////////////////////////// //////////////////////////////////////////// (1, 0); // stel die wyser op 1ste kol en 1e ry lcd.print (watt); lcd.print ("W"); lcd.print (spanning); lcd.print ("V"); lcd.setCursor (1, 1); // stel die wyser op 1ste kol en 2de ry lcd.print (energie); lcd.print ("WH"); lcd.print (versterkers); lcd.print ("A"); }

Stap 8: Laai data op na Xively.com

Data oplaai na Xively.com
Data oplaai na Xively.com
Data oplaai na Xively.com
Data oplaai na Xively.com
Data oplaai na Xively.com
Data oplaai na Xively.com

Verwys na bogenoemde skermkiekies om beter te verstaan. Vir die oplaai van data na xively.com, moet die volgende biblioteek eers afgelaai word HttpClient: klik hierXively: klik hier SPI: Invoer van arduino IDE (skets -> Import biblioteek …..) Ethernet: Invoer van arduino IDE ((skets -> Invoerbiblioteek…..) Maak 'n rekening oop met https://xively.com (voorheen pachube.com en cosm.com) Teken in vir 'n gratis ontwikkelaarrekening by

Kies 'n gebruikersnaam, wagwoord, stel u adres en tydsone in, ens. U ontvang 'n bevestigings -e -pos;

klik dan op die aktiveringskakel om u rekening te aktiveer. Nadat u die rekening suksesvol oopgemaak het, word u na die ontwikkelingsbladsye oorgedra

  • Klik op die boks +Voeg toestel by
  • Gee 'n naam aan u toestel en 'n beskrywing (byvoorbeeld energie -monitering) ·
  • Kies privaat of openbare data (ek kies privaat) ·
  • Klik op Voeg toestel by

Nadat u die toestel bygevoeg het, word u na 'n nuwe bladsy gestuur waar baie belangrike inligting daar is

  • Produk -ID, produkgeheim, reeksnommer, aktiveringskode ·
  • Voer -ID, FeedURL, API -eindpunt (voer -ID word gebruik in ARDUINO -kode)
  • Voeg kanale by (IKies ENERGIE en KRAG, maar u kan volgens u keuse kies) Gee eenheid en simbool vir die parameter ·
  • Voeg jou ligging by ·
  • API -sleutels (gebruik in ARDUINO -kode, vermy om hierdie nommer te deel) ·
  • Snellers (ping aweb -bladsy wanneer 'n gebeurtenis plaasgevind het, soos wanneer energieverbruik 'n sekere limiet oorskry)

Stap 9: Xively en ARDUINO -kode

Hier het ek die volledige kode (beta -weergawe) vir die energiemeter aangeheg, uitgesluit die aanmelding van SD -kaartdata wat afsonderlik in die volgende stap aangeheg is. / ** Energie -moniteringsdata opgelaai na xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Voer u Xively API -sleutel in #definieer FEED_ID xxxxxxxxx // Voer u Xively -voer -ID // MAC -adres in vir u Ethernet -skermbyte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analoog pen wat ons monitor (0 en 1 word deur die Ethernet -skild gebruik) int sensorPin = 2; ongetekende lang lastConnectionTime = 0; // laas keer dat ons gekoppel het aan Cosm const unsigned long connectionInterval = 15000; // vertraging tussen die verbinding met Cosm in millisekondes // Initialiseer die Cosm -biblioteek // Definieer die string vir ons datastroom -ID char sensorId = "POWER"; char sensorId2 = "ENERGIE"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Draai die datastroom om in 'n voer XivelyFeed -voer (FEED_ID, datastrome, 2/ * aantal datastrome */); EthernetClient -kliënt; XivelyClient xivelyclient (kliënt); ongeldige opstelling () {Serial.begin (9600); Serial.println ("Initialiseer netwerk"); terwyl (Ethernet.begin (mac)! = 1) {Serial.println ("Kon nie IP -adres kry deur DHCP, probeer weer …"); vertraging (15000); } Serial.println ("netwerk geïnisialiseer"); Serial.println (); } void lus () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // stuur data na xively getData (); // lees die datastroom terug van xively lastConnectionTime = millis (); // dateer die verbindingstyd op, sodat ons wag voordat ons weer 'n verbinding maak}} void sendData () {int sensor1 = watt; int sensor2 = energie; datastrome [0].setFloat (sensor1); // kragwaarde datastrome [1].setFloat (sensor2); // energiewaarde Serial.print ("Leesvermoë"); Serial.println (datastrome [0].getFloat ()); Serial.print ("Lees energie"); Serial.println (datastrome [1].getFloat ()); Serial.println ("Laai op na Xively"); int ret = xivelyclient.put (voer, API_KEY); Serial.print ("PUT -retourkode:"); Serial.println (ret); Serial.println (); } // haal die waarde van die datastroom van xively af, druk die waarde wat ons ontvang het, uit op, afdruk getData () {Serial.println ("Lees data van Xively"); int ret = xivelyclient.get (voer, API_KEY); Serial.print ("GET retourkode:"); Serial.println (ret); as (ret> 0) {Serial.print ("Datastroom is:"); Serial.println (voer [0]); Serial.print ("Kragwaarde is:"); Serial.println (voer [0].getFloat ()); Serial.print ("Datastream is:"); Serial.println (voer [1]); Serial.print ("Energiewaarde is:"); Serial.println (voer [1].getFloat ()); } Serial.println ();

Stap 10: Data -aanmelding op 'n SD -kaart

Om data op 'n SD -kaart te stoor, moet u die SD -biblioteek invoer. Vir tutoriaal, klik hier Meer inligting oor die SD -biblioteek, klik hier kode vir die LCD -skerm en die oplaai van data xively.com. Maar ek probeer die beta -weergawekode verbeter sodat 'n enkele kode al die funksies kan bevat (LCD -skerm, oplaai van data en data wat op 'n SD -kaart gestoor word). Die kode vir data -aanmelding word hieronder aangeheg. beter kode deur my kode te verander, deel dit asseblief met my. Dit is my eerste tegniese instruksie, as iemand 'n fout daarin vind, kan u gerus kommentaar lewer, sodat ek myself kan verbeter. As u verbeterings in hierdie projek vind of stuur 'n boodskap aan my, sodat die projek meer kragtig sal wees. Ek dink dit sal nuttig wees vir ander sowel as vir my.

123D -stroombaanwedstryd
123D -stroombaanwedstryd
123D -stroombaanwedstryd
123D -stroombaanwedstryd

Derde prys in die 123D -kringwedstryd

Aanbeveel: