Kazalo:

ARDUINO ENERGETSKI MERILEC: 10 korakov (s slikami)
ARDUINO ENERGETSKI MERILEC: 10 korakov (s slikami)

Video: ARDUINO ENERGETSKI MERILEC: 10 korakov (s slikami)

Video: ARDUINO ENERGETSKI MERILEC: 10 korakov (s slikami)
Video: µCast #20: Начало работы с коммутационной платой Intel Edison Mini 2024, November
Anonim
Image
Image
ENERGETSKI MERILEC ARDUINO
ENERGETSKI MERILEC ARDUINO
ENERGETSKI MERILEC ARDUINO
ENERGETSKI MERILEC ARDUINO

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

Potrebni deli
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

Merjenje napetosti
Merjenje napetosti
Merjenje napetosti
Merjenje napetosti
Merjenje napetosti
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

Trenutne meritve
Trenutne meritve
Trenutne meritve
Trenutne meritve

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

Vizualni izhod
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

Nalaganje podatkov na Xively.com
Nalaganje podatkov na Xively.com
Nalaganje podatkov na Xively.com
Nalaganje podatkov na Xively.com
Nalaganje podatkov na Xively.com
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.

Natečaj 123D Circuits
Natečaj 123D Circuits
Natečaj 123D Circuits
Natečaj 123D Circuits

Tretja nagrada na tekmovanju 123D Circuits

Priporočena: