Sisukord:
- Samm: vajalikud osad:
- 2. samm: võimsus ja energia
- 3. samm: pinge mõõtmine
- 4. samm: praegune mõõtmine
- Samm: aja mõõtmine
- 6. samm: kuidas ARDUINO arvutab võimsust ja energiat
- 7. samm: visuaalne väljund
- Samm: andmete üleslaadimine saidile Xively.com
- 9. samm: Xively ja ARDUINO kood
- Samm: andmete logimine SD -kaardile
Video: ARDUINO ENERGY METER: 10 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
[Esita videot]
Kuulun Indias Odisha külla, kus sagedased elektrikatkestused on väga levinud. See takistab igaühe elu. Lapsepõlves oli õhtupoolikul õpingute jätkamine tõeline väljakutse. Selle probleemi tõttu kavandasin oma kodu jaoks katseliselt päikesesüsteemi. Kasutasin mõne ereda LED -i valgustamiseks 10 W, 6 V päikesepaneeli. Pärast mitmeid raskusi oli projekt edukas. Siis otsustasin jälgida süsteemi pinget, voolu, võimsust ja energiat. See tõi kaasa idee kavandada ENERGIAMÕÕTJA. Selle projekti keskmes oli ARDUINO, kuna selle IDE -sse on väga lihtne koodi kirjutada ja Internetis on saadaval tohutul hulgal avatud lähtekoodiga teeke, mida saab vastavalt nõue. Olen katsetanud projekti väga väikese nimivõimsusega (10W) päikesesüsteemi jaoks, kuid seda saab hõlpsasti muuta kõrgema reitingusüsteemi kasutamiseks.
Kõik minu projektid leiate siit:
Funktsioon: Energia jälgimine 1. LCD -ekraani abil 2. Interneti kaudu (Xively upload) 3. Andmete logimine SD -kaardile
Näete minu uut juhendatavat ARDUINO MPPT SOLAR CHARGE CONTROLLER (versioon 3.0)
Näete ka minu teisi juhendeid
ARDUINO SOLAR CHARGE CONTROLLER (Versioon 2.0)
ARDUINO SOLAR CHARGE CONTROLLER (versioon 1)
Samm: vajalikud osad:
1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)
3. 16x2 CHARACTER LCD (Amazon)
4. ACS 712 HETKELINE ANTUR (Amazon) 4. TAKISTID (10 k, 330 oomi) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET -KAABEL (Amazon) 8. LEIVAHV (Amazon)
2. samm: võimsus ja energia
Võimsus: võimsus on pinge (volt) ja voolu (Amp) korrutis Tund (kWh) Ülaltoodud valemist on selge, et energia mõõtmiseks vajame kolme parameetrit 1. Pinge 2. Vool 3. Aeg
3. samm: pinge mõõtmine
Pinget mõõdetakse pingejaotusahela abil. Kuna ARDUINO analoogpinge sisendpinge on piiratud 5 V -ga, kujundasin pingejaguri selliselt, et selle väljundpinge peaks olema väiksem kui 5 V. päikesepaneeli toiteallikaks on 6v, 5,5Ah. Nii et pean selle 6,5v maha laskma pingele alla 5V. Ma kasutasin R1 = 10k ja R2 = 10K. R1 ja R2 väärtus võib olla madalam, kuid probleem on selles, et kui takistus on madal, voolab läbi selle suurem vool, mille tagajärjel hajub suur hulk võimsust (P = I^2R) soojuse kujul. Seega saab valida erineva takistuse väärtuse, kuid tuleb hoolitseda selle eest, et takistusel tekkiv energiakadu oleks võimalikult väike. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 täislaetuna on näidanud 9 -voldist akut, mis on kinnitatud plaadiahelasse, näiteks juhtmete ühendamiseks. Kuid tegelik aku, mida ma kasutasin, on 6 -voldine 5,5 Ah pliiaku. Pinge kalibreerimine: kui aku on täielikult laetud (6,5 V), saame a Vout = 3,25v ja madalam väärtus muu madalama aku pinge korral. AEDUINO ADC teisendab analoogsignaali vastavaks digitaalseks lähenduseks. Kui aku pinge on 6,5v, sain pingejagurist 3,25v ja proov1 = 696 jadamonitoris, kus näidis1 on ADC väärtus, vastab 3,25v -le. Paremaks mõistmiseks olen pinge mõõtmiseks lisanud reaalajas simulatsiooni 123D. Ahelaga. 3.25v, mis vastab 696 1 -le, võrdub 3,25/696 = 4,669mv Vout = (4,669*proov1)/1000 volti Akupinge tegelik pinge = (2*Vout) volt VARDUINO -KOOD: // 150 proovi võtmine pingejagurist intervalliga 2 sekundit ja seejärel keskmistage proovide andmed (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // loe pinget jagaja vooluahela viivitusest (2); } proov1 = proov1/150; pinge = 4,669*2*proov1/1000;
4. samm: praegune mõõtmine
Voolu mõõtmiseks kasutasin Hall -efekti vooluandurit ACS 712 (20 A). Turul on saadaval erinevaid vooluhulga ACS712 andureid, seega valige vastavalt oma vajadustele. Leivalaua skeemil olen näidanud LED -i koormusena, kuid tegelik koormus on erinev. TÖÖPÕHIMÕTE: Halli efekt on pingeerinevuse (Halli pinge) tekitamine elektrijuhtmes, põiki elektrijuhtme elektrivoolu ja vooluga risti olev magnetväli. Halli efekti anduri kohta lisateabe saamiseks klõpsake siin. ACS 712 anduri andmelehe leiate siit Andmelehelt 1. ACS 712 mõõdab positiivset ja negatiivset 20Amp, mis vastab analoogväljundile 100mV/A 2. Väljundpinge kaudu testvoolu ei ole VCC/2 = 5v/2 = 2,5V 1000 V Kuid andmelehtede nihe on 2,5 V (praeguse nulli korral saate anduri väljundist 2,5 V) Tegelik väärtus = (väärtus-2,5) V Vool amprites = tegelik väärtus*10ARDUINO KOOD: // 150 proovi võtmine andurid intervalliga 2sek ja seejärel keskmistavad proovide andmed (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // voolu lugemine anduri viivitusest (2); } proov2 = proov2/150; val = (5,0*proov2)/1024,0; tegelik väärtus = val-2,5; // nihkepinge on 2,5v amprit = tegelik väärtus*10;
Samm: aja mõõtmine
Aja mõõtmiseks ei ole vaja välist riistvara, kuna ARDUINO -l endal on sisseehitatud taimer. Funktsioon millis () tagastab millisekundite arvu pärast seda, kui Arduino plaat alustas jooksva programmi käivitamist. ARDUINO KOOD: pikk milisec = millis (); // aja arvutamine millisekundites pikk aeg = milisec/1000; // teisenda millisekundid sekunditeks
6. samm: kuidas ARDUINO arvutab võimsust ja energiat
totamps = totamps+amp; // arvutada kokku amprit avgamps = totamps/time; // keskmine amprit amphr = (avgamps*aeg)/3600; // amp-tund watt = pinge*amprit; // võimsus = pinge*praegune energia = (vatt*aeg)/3600; Watt-sec teisendatakse taas vatt-tunniks, jagades 1h (3600sek) // energia = (vatt*aeg)/(1000*3600); lugemiseks kWh
7. samm: visuaalne väljund
Kõiki tulemusi saab visualiseerida jadamonitoris või LCD -ekraani abil. Kõigi eelmistes sammudes saadud tulemuste kuvamiseks kasutasin 16x2 sümbolit sisaldavat LCD -d. Skeemide jaoks vaadake ülaltoodud leivaplaadi vooluahelat. Ühendage LCD -ekraan ARDUINO -ga, nagu allpool näidatud: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + takisti või potentsiomeeter 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -pole ühendatud 8. D1 -> Arduino -pole ühendatud 9. D2 -> Arduino -pole ühendatud 10. D3 -> Arduino -pole ühendatud 11. D4 -> Arduino tihvt 5 12. D5 -> Arduino tihvt 4 13. D6 -> Arduino tihvt 3 14. D7 -> Arduino tihvt 2 15. A -> Arduino tihvt 13 + takisti (taustvalgustuse võimsus) 16. K -> Arduino GND (taustvalgustusega maapind) ARDUINO KOOD: jadamonitori jaoks:
Serial.print ("VOLTAGE:"); Jadajälg (pinge); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serial.print (võimendid); Serial.println ("Võimendid"); Serial.print ("POWER:"); Seeriaprint (vatt); Serial.println ("Watt"); Serial.print ("ENERGY CONSUMED:"); Serial.print (energia); Serial.println ("Watt-tund"); Serial.println (""); // printida järgmised parameetrikomplektid pärast tühja rea viivitust (2000); LCD: LCD -ekraani puhul peate esmalt importima koodi "LiquidCrystal" raamatukogu. LequidCrystali raamatukogu kohta lisateabe saamiseks klõpsake siin. LCD -õpetuse jaoks klõpsake siin Järgmine kood on vorming, mis kuvab LCD -s kõik võimsuse ja energia arvutused #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (taustvalgus, OUTPUT); // määrake pin 9 väljundiks analogWrite (taustvalgus, 150); // juhib taustvalgustuse intensiivsust 0-254 lcd.begin (16, 2); // veerud, read. ekraani suurus lcd.clear (); // tühjenda ekraan} void loop () {lcd.setCursor (16, 1); // määrake kursor väljaspool ekraani arvu lcd.print (""); // trüki tühja märgi viivitus (600); ////////////////////////////////////////////////////////////////////////// prindib võimsust ja energiat LCD- ekraanile/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (1, 0); // määrake kursor 1. veergu ja 1. rea lcd.print (vatt); lcd.print ("W"); lcd.print (pinge); lcd.print ("V"); lcd.setCursor (1, 1); // seadke kursor 1. veergu ja 2. rida lcd.print (energia); lcd.print ("WH"); lcd.print (võimendid); lcd.print ("A"); }
Samm: andmete üleslaadimine saidile Xively.com
Vaadake ülaltoodud ekraanipilte, et paremini aru saada. Andmete üleslaadimiseks saidile xively.com tuleb järgmine teek alla laadida kõigepealt HttpClient: klõpsake siin Xively: klõpsake siin SPI: Importimine arduino IDE -st (visand -> Impordi raamatukogu …) IDE ((visand -> Impordi kogu …..) Avage konto saidil https://xively.com (varem pachube.com ja cosm.com) Registreeruge tasuta arendajakonto saamiseks aadressil
Valige kasutajanimi, parool, määrake oma aadress ja ajavöönd jne. Teile saadetakse kinnitusmeil;
seejärel klõpsake oma konto aktiveerimiseks aktiveerimislingil. Pärast konto edukat avamist suunatakse teid arendusseadmete lehele
- Klõpsake kasti +Lisa seade
- Andke oma seadmele nimi ja kirjeldus (nt GENERGIA MONITORING) ·
- Valige privaatsed või avalikud andmed (mina privaatne) ·
- Klõpsake nuppu Lisa seade
Pärast seadme lisamist suunatakse teid uuele lehele, kus on palju olulist teavet
- Toote ID, toote saladus, seerianumber, aktiveerimiskood ·
- Voo ID, FeedURL, API lõpp -punkt (voo ID -d kasutatakse ARDUINO -koodis)
- Lisage kanaleid (IChoose ENERGY ja POWER, kuid saate valida vastavalt oma valikule) Andke parameetri ühik ja sümbol ·
- Lisage oma asukoht ·
- API võtmed (kasutatakse ARDUINO koodis, vältige selle numbri jagamist) ·
- Päästikud (ping aweb -i leht sündmuse toimumisel, näiteks kui energiatarbimine ületab teatud piiri)
9. samm: Xively ja ARDUINO kood
Siin lisasin energiamõõturi täieliku koodi (beetaversioon), välja arvatud SD -kaardi andmete logimine, mis lisatakse järgmises etapis eraldi. / ** Energiaseire andmete üleslaadimine xively -le **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Sisestage oma Xively API -võti #define FEED_ID xxxxxxxxx // Sisestage oma Xively feed ID // MAC -aadress Etherneti kilbi bait mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analoogpulk, mida jälgime (Etherneti kilp kasutab 0 ja 1) int sensorPin = 2; allkirjastamata pikk lastConnectionTime = 0; // viimati ühendasime Cosm const unsigned long connectionInterval = 15000; // viivitus Cosmiga ühenduse loomise vahel millisekundites // Cosmi teegi initsialiseerimine // Määrake meie andmevoo ID char sensorId = "POWER"; char sensorId2 = "ENERGIA"; XivelyDatastream andmevoog = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT)}; // Paki andmevoog voogu XivelyFeed feed (FEED_ID, andmevoog, 2/ * andmevoogude arv */); EthernetClient klient; XivelyClient xivelyclient (klient); void setup () {Serial.begin (9600); Serial.println ("Võrgu lähtestamine"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Viga IP -aadressi hankimisel DHCP kaudu, proovides uuesti …"); viivitus (15000); } Serial.println ("Võrk lähtestatud"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // andmete saatmine xively getData (); // loe andmevoogu xively lastConnectionTime = millis (); // uuenda ühenduse aega, nii et ootame enne uuesti ühendamist}} void sendData () {int sensor1 = watt; int sensor2 = energia; datastreams [0].setFloat (sensor1); // võimsusväärtuse andmevoog [1].setFloat (sensor2); // energiaväärtus Serial.print ("Lugemisvõimsus"); Serial.println (andmevoog [0].getFloat ()); Serial.print ("Lugemisenergia"); Serial.println (andmevoog [1].getFloat ()); Serial.println ("Üleslaadimine Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT tagastuskood:"); Serial.println (ret); Serial.println (); } // saada andmevoo väärtus xivelyst, printides välja saadud väärtuse void getData () {Serial.println ("Andmete lugemine Xivelyst"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Andmevoog on:"); Serial.println (feed [0]); Serial.print ("Võimsuse väärtus on:"); Serial.println (feed [0].getFloat ()); Serial.print ("Andmevoog on:"); Serial.println (feed [1]); Serial.print ("Energia väärtus on:"); Serial.println (feed [1].getFloat ()); } Serial.println ();
Samm: andmete logimine SD -kaardile
Andmete SD -kaardile salvestamiseks peate importima SD -teeki. Õpetuse saamiseks klõpsake siin. SD -raamatukogu kohta lisateabe saamiseks klõpsake siin. Andmete SD -kaardile salvestamise kood kirjutatakse eraldi, kuna mul pole pärast ARDUINO UNO -d piisavalt mälu koodi kirjutamine LCD -ekraanile ja andmete üleslaadimiseks xively.com. Kuid ma proovin parandada beetaversiooni koodi nii, et üks kood võib sisaldada kõiki funktsioone (LCD -ekraan, Xively andmete üleslaadimine ja andmete salvestamine SD -kaardile). Andmete logimise kood on lisatud allpool. Kui keegi kirjutab parem kood, muutes oma koodi, palun jagage seda minuga. See on minu esimene tehniline juhend, kui keegi leiab selles vigu, kirjutage julgelt kommentaare.. et saaksin ennast parandada. Kui leiate selles projektis parandamisvaldkondi, palun kommenteerige või saatke mulle sõnum, nii et projekt on võimsam. Ma arvan, et see on kasulik nii teistele kui ka mulle.
123D -ahelate võistluse kolmas auhind
Soovitan:
ARDUINO PH METER: 6 sammu (piltidega)
ARDUINO PH METER: Selles projektis valmistame töölaua pH -meetri, kasutades Atlas Scientific ja Arduino Uno gravitatsiooni analoog -pH -ahelat ja sondi. Näidud kuvatakse vedelkristallkuvaril (LCD). Märkus:- See arvesti töötati välja Windowsis
Ghostbusters PKE Meter: 8 sammu (piltidega)
Ghostbusters PKE Meter: Minu lapsepõlvemälestustes näis domineerivat eriti üks koomiks ja see oli The Real Ghostbusters. Ray, Winston, Peter ja Egon olid hambuni relvastatud tõeliselt lahedate vidinatega, nende hulgas ka PKE -meeter. See oli mu lemmik
DIY "PC Usage Meter ROG Base", kasutades Arduino ja Pythoni: 5 sammu (koos piltidega)
DIY "PC Usage Meter ROG Base", kasutades Arduino ja Pythoni: ************************************ +Esiteks, selle juhendi oli kirjutanud inglise keelt emakeelena kõneleja …… pole inglise keele professor, seega palun teavitage enne minust nalja tegemist grammatilistest vigadest.: P +Ja ärge jäljendage
Arduino CUBIC METER: 3 sammu (piltidega)
Arduino CUBIC METER: Üleslaaditud projekti kujundas ja programmeeris Rodrigo Mejías (Santiago-CHILE). Toode koosneb mõõtmisest lihtsast lineaarsest kaugusest, ruutmeetritest kuni kuupmeetriteni. Kuna kasutame ultraheli andureid HC-SR04, ei tohiks vahemaad
Lihtne WiFi to BLE (Bluetooth Low Energy) sild: 9 sammu (piltidega)
Lihtne WiFi BLE (Bluetooth Low Energy) sillale: värskendus 4. detsember 2017 - muudetud Feather nRF52 visandid ja silumisnõuanded. Lisatud karbile paigaldatud silla pildid. See lihtne projekt pakub WiFi -ühendust mis tahes Bluetooth Low Energy (BLE) moodulile, mis rakendab Nordic UART -i koos TX Notify -ga. Th