Kazalo:
- 1. korak: potrebni deli:
- 2. korak: Moč in energija
- 3. korak: Merjenje napetosti
- 4. korak: Merjenje toka
- 5. korak: Merjenje časa
- 6. korak: Kako ARDUINO izračuna moč in energijo
- 7. korak: Vizualni izhod
- 8. korak: Nalaganje podatkov na Xively.com
- 9. korak: Xively in koda ARDUINO
- 10. korak: Zapisovanje podatkov na kartico SD
Video: ARDUINO ENERGETSKI MERILEC: 10 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
[Predvajaj video]
Pripadam vasi Odisha v Indiji, kjer je pogost izpad električne energije zelo pogost. Vsakemu ovira življenje. V otroštvu je bilo nadaljevanje študija po mraku pravi izziv. Zaradi tega problema sem eksperimentalno zasnoval sončni sistem za svoj dom. Za osvetlitev nekaj svetlih LED sem uporabil sončno ploščo 10 W, 6V. Po velikih težavah je bil projekt uspešen. Nato sem se odločil spremljati napetost, tok, moč in energijo v sistemu. To je prineslo idejo o oblikovanju ENERGETSKEGA MERILA. Uporabil sem ARDUINO kot srce tega projekta, ker je zelo enostavno zapisati kodo v njen IDE in na internetu je na voljo ogromno odprtokodne knjižnice, ki jo je mogoče uporabiti v skladu z Zahteva. Preizkusil sem projekt za zelo majhen (10 Watt) sončni sistem, vendar ga je mogoče zlahka spremeniti za uporabo v sistemu z višjo oceno.
Vse moje projekte najdete na:
Funkcija: Nadzor energije z 1. LCD zaslonom 2. prek interneta (Xively upload) 3. Zapisovanje podatkov na kartico SD
Ogledate si lahko moj novi inštruktor ARDUINO MPPT SOLAR CHARGE CONTROLLER (Različica-3.0)
Ogledate si lahko tudi moja druga navodila
ARDUINO SOLAR CHARGE CONTROLLER (Različica 2.0)
ARDUINO SOLAR CHARGE CONTROLLER (Različica-1)
1. korak: potrebni deli:
1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET SHIELD (Amazon)
3. LCD z 16 x 2 ZNAKI (Amazon)
4. TOKOVNI SENZOR ACS 712 (Amazon) 4. Upori (10 k, 330 ohmov) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET CABLE (Amazon) 8. BREAD BOARD (Amazon)
2. korak: Moč in energija
Moč: Moč je produkt napetosti (volt) in toka (Amp) P = VxI Enota moči je Watt ali KWEnergija: Energija je produkt moči (watt) in časa (Hour) Ura (kWh) Iz zgornje formule je jasno, da za merjenje energije potrebujemo tri parametre 1. Napetost 2. Tok 3. Čas
3. korak: Merjenje napetosti
Napetost se meri s pomočjo vezja delilnika napetosti. Ker je vhodna napetost analognega vtiča ARDUINO omejena na 5 V, sem razdelilnik napetosti oblikoval tako, da mora biti izhodna napetost iz njega manjša od 5 V. Moja baterija se uporablja za shranjevanje moč iz sončne celice je ocenjena na 6v, 5.5Ah, zato moram to 6.5v znižati na napetost nižjo od 5V. Uporabil sem R1 = 10k in R2 = 10K. Vrednosti R1 in R2 sta lahko nižji, vendar je težava v tem, da ko je upor nizek, skozi to teče večji tok, zaradi česar se velika količina energije (P = I^2R) razprši v obliki toplote. Tako je mogoče izbrati različne vrednosti upora, vendar je treba paziti, da se izguba moči med uporom čim bolj zmanjša. Vout = R2/(R1+R2)*Vbat Vbat = 6,5, ko je popolnoma napolnjen R1 = 10k in R2 = 10k Vout = 10/(10+10)*6,5 = 3,25 V, kar je nižje od 5 V in primerno za analogni pin ARDUINO OPOMBA I so pokazali, da je 9 -voltna baterija v vezju gole plošče samo na primer za povezovanje žic. Toda dejanska baterija, ki sem jo uporabil, je 6 -voltna, 5,5 Ah Ah svinčena kislinska baterija. Umerjanje napetosti: Ko je baterija popolnoma napolnjena (6,5 V), bomo a Vout = 3,25 V in nižja vrednost za drugo nižjo napetost akumulatorja. AEDUINO ADC pretvori analogni signal v ustrezen digitalni približek. Ko je napetost akumulatorja 6,5 V, sem dobil 3,25 V od delilnika napetosti in vzorec 1 = 696 v serijskem monitorju, kjer je vzorec 1 vrednost ADC, ki ustreza 3,25 V Za boljše razumevanje sem priložil simulacijo v realnem času z vezjem 123D za merjenje napetosti Umerjanje: 3,25 V ekvivalentno 696 1 je enakovredno 3,25/696 = 4,669mv Vout = (4,669*vzorec1)/1000 voltov Dejanska napetost akumulatorja = (2*Vout) volt KARDAUINO: // odvzem 150 vzorcev iz delilnika napetosti z intervalom 2 sekund in nato povpreči podatke vzorcev, zbrane za (int i = 0; i <150; i ++) {vzorec1 = vzorec1+analogRead (A2); // odčitamo napetost iz zakasnitve razdelilnega tokokroga (2); } vzorec1 = vzorec1/150; napetost = 4,669*2*vzorec 1/1000;
4. korak: Merjenje toka
Za merjenje toka sem uporabil senzor toka Hall Hall Effect ACS 712 (20 A). Na trgu so na voljo različni senzorji ACS712 za trenutno območje, zato izberite glede na vaše potrebe. V diagramu plošče za kruh sem prikazal LED kot obremenitev, dejanska obremenitev pa je drugačna. DELOVNO NAČELO: Hall -ov učinek je nastanek razlike napetosti (Hallova napetost) na električnem prevodniku, prečni na električni tok v prevodniku in magnetno polje pravokotno na tok. Če želite izvedeti več o senzorju Hall Effect, kliknite tukaj. Podatkovni list senzorja ACS 712 najdete tukaj iz podatkovnega lista 1. ACS 712 meri pozitivne in negativne 20Amps, kar ustreza analognemu izhodu 100mV/A 2. Preizkusni tok skozi izhodno napetost ni VCC/2 = 5v/2 = 2,5V Kalibracija: Analogno branje proizvede vrednost 0-1023, kar je enako 0v do 5v Torej analogno branje 1 = (5/1024) V = 4,89 mv Vrednost = (4,89*Analogna vrednost branja) 1000 V Toda glede na podatkovne liste je odmik 2,5 V (pri ničelnem toku boste dobili 2,5 V iz izhoda senzorja) Dejanska vrednost = (vrednost-2,5) V Tok v amp = dejanska vrednost*10ARDUINO KODA: // odvzem 150 vzorcev iz senzorji z intervalom 2 sekund in nato povprečje podatkov vzorcev, zbranih za (int i = 0; i <150; i ++) {vzorec2+= analogRead (A3); // odčitamo tok iz zakasnitve senzorja (2); } vzorec2 = vzorec2/150; val = (5,0*vzorec 2)/1024,0; dejanski val = val-2,5; // offset napetost je 2,5v ampers = dejanski val*10;
5. korak: Merjenje časa
Za merjenje časa ni potrebe po zunanji strojni opremi, saj ima sam ARDUINO vgrajen časovnik. Funkcija millis () vrne številko milisekund, odkar je plošča Arduino začela izvajati trenutni program. ARDUINO KODA: dolgi milisek = millis (); // izračunaj čas v milisekundah dolg čas = milisek/1000; // pretvorimo milisekunde v sekunde
6. korak: Kako ARDUINO izračuna moč in energijo
totamps = žigi+ojačevalniki; // izračunamo skupne ampere avgamps = totamps/time; // povprečni amperi amphr = (avgamps*čas)/3600; // amp-ura vat = napetost*amperi; // moč = napetost*trenutna energija = (vati*čas)/3600; Watt-sec se spet pretvori v Watt-Hr z deljenjem 1h (3600sec) // energija = (watt*čas)/(1000*3600); za branje v kWh
7. korak: Vizualni izhod
Vse rezultate si lahko ogledate na serijskem monitorju ali z uporabo LCD -ja. Za prikaz vseh rezultatov, pridobljenih v prejšnjih korakih, sem uporabil 16 -mestni LCD. Za sheme glejte zgoraj prikazano vezje na plošči za kruh. Povežite LCD z ARDUINO, kot je prikazano spodaj: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + upor ali potenciometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -ni povezan 8. D1 -> Arduino -Ni povezan 9. D2 -> Arduino -Ni povezan 10. D3 -> Arduino -Ni povezan 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 + Upor (moč osvetlitve ozadja) 16. K -> Arduino GND (osvetlitev ozadja) ARDUINO KODA: Za serijski monitor:
Serial.print ("NAPETOST:"); Serial.print (napetost); Serial.println ("Volt"); Serial.print ("TRENUTNO:"); Serijski.tisk (ojačevalniki); Serial.println ("ojačevalniki"); Serial.print ("POWER:"); Serijski.tisk (vati); Serial.println ("Watt"); Serial.print ("PORABA ENERGIJE:"); Serijski.tisk (energija); Serial.println ("Watt-Hour"); Serial.println (""); // po zakasnitvi prazne vrstice (2000) natisnemo naslednje sklope parametrov; Za LCD: Za LCD zaslon morate najprej v kodo uvoziti knjižnico "LiquidCrystal". Če želite izvedeti več o knjižnici LequidCrystal, kliknite tukaj Za vadnico LCD kliknite tukaj Naslednja koda je oblika za prikaz v LCD -ju vseh izračunov moči in energije #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // nastavimo pin 9 kot izhod analogWrite (backLight, 150); // nadzoruje jakost osvetlitve ozadja 0-254 lcd.begin (16, 2); // stolpci, vrstice. velikost zaslona lcd.clear (); // počisti zaslon} void loop () {lcd.setCursor (16, 1); // nastavimo kazalec zunaj prikaza lcd.print (""); // natisni zamik praznega znaka (600); ////////////////////////////////////////////// tiskanje moči in energije na LCD/ ////////////////////////////////////////////////// lcd.setCursor (1, 0); // nastavimo kazalec na 1. stolpec in 1. vrstico lcd.print (vati); lcd.print ("W"); lcd.print (napetost); lcd.print ("V"); lcd.setCursor (1, 1); // nastavimo kazalec na 1. stolpec in 2. vrstico lcd.print (energija); lcd.print ("WH"); lcd.tisk (ojačevalniki); lcd.print ("A"); }
8. korak: Nalaganje podatkov na Xively.com
Za boljše razumevanje si oglejte zgornje posnetke zaslona. Za nalaganje podatkov na xively.com najprej naložite naslednjo knjižnico HttpClient: kliknite tukaj Peto: kliknite tukaj SPI: Uvoz iz arduino IDE (skica -> Uvozi knjižnico …..) Ethernet: Uvoz iz arduina IDE ((skica -> Uvozi knjižnico …..) Odprite račun pri https://xively.com (prej pachube.com in cosm.com) Prijavite se za brezplačen račun razvijalca na
Izberite uporabniško ime, geslo, nastavite naslov in časovni pas itd. Prejeli boste potrditveno e -poštno sporočilo;
nato kliknite povezavo za aktiviranje, da aktivirate svoj račun. Ko uspešno odprete račun, boste preusmerjeni na stran Razvojne naprave
- Kliknite polje +Dodaj napravo
- Poimenujte svojo napravo in jo opišite (npr. SPREMLJANJE ENERGIJE) ·
- Izberite zasebne ali javne podatke (jaz izberem zasebne) ·
- Kliknite Dodaj napravo
Po dodajanju naprave boste preusmerjeni na novo stran, kjer je veliko pomembnih informacij
- ID izdelka, skrivnost izdelka, serijska številka, aktivacijska koda ·
- ID vira, FeedURL, končna točka API (ID vira se uporablja v kodi ARDUINO)
- Dodajte kanale (IChoose ENERGY in POWER, vendar lahko izbirate po svoji izbiri) Podajte enoto in simbol za parameter ·
- Dodajte svojo lokacijo ·
- Ključi API (uporabljajo se v kodi ARDUINO, ne delite te številke) ·
- Sprožilci (ping spletna stran ob dogodku, na primer, ko poraba energije preseže določeno mejo)
9. korak: Xively in koda ARDUINO
Tukaj sem priložil celotno kodo (beta različica) za števec energije, razen beleženja podatkov SD kartice, ki je v naslednjem koraku priložena ločeno. / ** Nalaganje podatkov o nadzoru energije na xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Vnesite ključ Xively API #define FEED_ID xxxxxxxxx // Vnesite svoj ID Xively feed // naslov MAC za vaš Bajt za zaščito Ethernet mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analogni pin, ki ga nadziramo (0 in 1 uporabljata ščit Ethernet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // zadnjič, ko smo se povezali z Cosm const unsigned long connectionInterval = 15000; // zamik med povezovanjem na Cosm v milisekundah // Inicializiraj knjižnico Cosm // Določimo niz za naš ID podatkovnega toka char sensorId = "POWER"; char sensorId2 = "ENERGIJA"; XivelyDatastream podatkovni tokovi = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // tok podatkov zavijemo v vir XivelyFeed (FEED_ID, podatkovni tokovi, 2/ * število podatkovnih tokov */); Odjemalec EthernetClient; XivelyClient xivelyclient (odjemalec); void setup () {Serial.begin (9600); Serial.println ("Inicializacija omrežja"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Napaka pri pridobivanju naslova IP prek DHCP, poskusite znova …"); zamuda (15000); } Serial.println ("Omrežje inicializirano"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // pošiljanje podatkov v xively getData (); // preberemo podatkovni tok nazaj iz xively lastConnectionTime = millis (); // posodobimo čas povezave, zato počakamo, preden se znova povežemo}} void sendData () {int sensor1 = watt; int senzor2 = energija; podatkovni tokovi [0].setFloat (tipalo1); // tokovi podatkov o vrednosti moči [1].setFloat (sensor2); // energijska vrednost Serial.print ("Read power"); Serial.println (podatkovni tokovi [0].getFloat ()); Serial.print ("Branje energije"); Serial.println (podatkovni tokovi [1].getFloat ()); Serial.println ("Nalaganje v Xively"); int ret = xivelyclient.put (vir, API_KEY); Serial.print ("PUT povratna koda:"); Serial.println (ret); Serial.println (); } // dobimo vrednost podatkovnega toka iz xively, natisnemo vrednost, ki smo jo prejeli void getData () {Serial.println ("Branje podatkov iz Xivelyja"); int ret = xivelyclient.get (vir, API_KEY); Serial.print ("GET povratna koda:"); Serial.println (ret); if (ret> 0) {Serial.print ("Podatkovni tok je:"); Serial.println (vir [0]); Serial.print ("Vrednost moči je:"); Serial.println (vir [0].getFloat ()); Serial.print ("Pretok podatkov je:"); Serial.println (vir [1]); Serial.print ("Energetska vrednost je:"); Serial.println (vir [1].getFloat ()); } Serial.println ();
10. korak: Zapisovanje podatkov na kartico SD
Za shranjevanje podatkov na kartico SD morate uvoziti knjižnico SD Za vadnico kliknite tukaj Če želite izvedeti več o knjižnici SD, kliknite tukaj Koda za shranjevanje podatkov na kartico SD je napisana ločeno, ker v svojem ARDUINO UNO po tem nimam dovolj pomnilnika pisna koda za LCD zaslon in nalaganje podatkov xively.com. Poskušam pa izboljšati kodo različice beta, tako da lahko ena koda vsebuje vse funkcije (LCD zaslon, nalaganje podatkov Xively in shranjevanje podatkov na kartico SD). Koda za beleženje podatkov je priložena spodaj. Če kdo napiše boljšo kodo s spreminjanjem kode prosim delite z mano. To je moje prvo tehnično navodilo. Če kdo najde kakšno napako v tem, naj komentira.. da se lahko izboljšam. Če najdete področja izboljšav v tem projektu, prosim komentirajte ali mi pošljite sporočilo, torej bo projekt močnejši. Mislim, da bo v pomoč tako drugim kot meni.
Tretja nagrada na tekmovanju 123D Circuits
Priporočena:
Kako: Namestitev Raspberry PI 4 Headless (VNC) z Rpi-sliko in slikami: 7 korakov (s slikami)
Kako: Namestitev Raspberry PI 4 Headless (VNC) z Rpi-imagerjem in slikami: Ta Rapberry PI nameravam uporabiti v kopici zabavnih projektov v svojem blogu. Vabljeni, da to preverite. Želel sem se vrniti v uporabo Raspberry PI, vendar na novi lokaciji nisem imel tipkovnice ali miške. Nekaj časa je minilo, odkar sem nastavil malino
Ščit za Arduino iz starih ruskih cevi VFD: ura, termometer, merilec voltov : 21 korakov (s slikami)
Ščit za Arduino iz starih ruskih cevi VFD: ura, termometer, merilnik voltov …: Ta projekt je trajal skoraj pol leta. Ne morem opisati, koliko dela je bilo vloženega v ta projekt. Izvajanje tega projekta bi mi vzelo večno, zato sem imel pomoč od prijateljev. Tukaj si lahko ogledate naše delo, zbrano v enem zelo dolgem navodilu
Kako razstaviti računalnik z enostavnimi koraki in slikami: 13 korakov (s slikami)
Kako z enostavnimi koraki in slikami razstaviti računalnik: To navodilo za razstavljanje računalnika. Večina osnovnih komponent je modularnih in jih je enostavno odstraniti. Vendar je pomembno, da ste glede tega organizirani. To vam bo pomagalo preprečiti izgubo delov in tudi pri ponovni montaži
Energetski monitor žarnice: 9 korakov (s slikami)
Monitor žarnice z energijo žarnice: Za vsakodnevno delo opravljam energetske raziskave. Zato ne bi smelo biti presenečenje, da me zelo zanima, kako uporabljamo energijo v svojem stanovanju. V preteklih letih sem uporabljal en sam monitor izhodne energije (merilnik Kill-A-Watt) in celo
Najcenejši Arduino -- Najmanjši Arduino -- Arduino Pro Mini -- Programiranje -- Arduino Neno: 6 korakov (s slikami)
Najcenejši Arduino || Najmanjši Arduino || Arduino Pro Mini || Programiranje || Arduino Neno: …………………………. PRIJAVITE SE na moj YouTube kanal za več videov ……. .Ta projekt govori o tem, kako povezati najmanjši in najcenejši arduino doslej. Najmanjši in najcenejši arduino je arduino pro mini. Podobno je arduinu