Sadržaj:

ARDUINO ENERGETSKI MERAČ: 10 koraka (sa slikama)
ARDUINO ENERGETSKI MERAČ: 10 koraka (sa slikama)

Video: ARDUINO ENERGETSKI MERAČ: 10 koraka (sa slikama)

Video: ARDUINO ENERGETSKI MERAČ: 10 koraka (sa slikama)
Video: Ultimate Battery Protection 90V 20A SIN9020S OVP OCP OPV protection with Relay andCurrent Sensor 2024, Juli
Anonim
Image
Image
ARDUINO ENERGETSKI MERAČ
ARDUINO ENERGETSKI MERAČ
ARDUINO ENERGETSKI MERAČ
ARDUINO ENERGETSKI MERAČ

[Reproduciraj video]

Pripadam selu Odisha u Indiji gdje je često isključenje struje vrlo često. Ometa život svakome. Za vrijeme mog djetinjstva nastavak studija nakon sumraka bio je pravi izazov. Zbog ovog problema, eksperimentalno sam dizajnirao solarni sistem za svoj dom. Koristio sam solarni panel od 10 W, 6V za paljenje nekoliko svijetlih LED dioda. Nakon suočavanja s velikim teškoćama, projekt je bio uspješan. Tada sam odlučio pratiti napon, struju, snagu i energiju uključenu u sistem. To je donijelo ideju o dizajniranju ENERGETSKOG MJERNIKA. Koristio sam ARDUINO kao srce ovog projekta jer je vrlo lako pisati kôd u njegovom IDE -u, a na internetu je dostupan veliki broj biblioteka otvorenog koda koje se mogu koristiti prema zahtjev. Eksperimentirao sam sa projektom za solarni sistem vrlo male snage (10 W), ali to se može lako izmijeniti za upotrebu u sistemima s većom ocjenom.

Sve moje projekte možete pronaći na:

Značajka: Nadzor energije pomoću 1. LCD ekrana 2. putem interneta (Xively upload) 3. Zapis podataka na SD kartici

Možete vidjeti moj novi instruktor ARDUINO MPPT SOLARNI KONTROLER PUNJENJA (Verzija-3.0)

Moje ostale instrukcije možete vidjeti i na

ARDUINO SOLARNI KONTROLER PUNJENJA (Verzija 2.0)

ARDUINO SOLARNI KONTROLER PUNJENJA (Verzija-1)

Korak 1: Potrebni dijelovi:

Potrebni delovi
Potrebni delovi

1. ARDUINO UNO (Amazon) 2. ARDUINO ETHERNET ŠTIT (Amazon)

3. LCD sa 16 x 2 LIKOVA (Amazon)

4. ACS 712 TRENUTNI SENZOR (Amazon) 4. OTPORNICI (10 k, 330 ohma) (Amazon) 5. 10K POTENTIOMETAR (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET KABL (Amazon) 8. PLOČA ZA KRUH (Amazon)

Korak 2: Snaga i energija

Snaga: Snaga je proizvod napona (volti) i struje (Amp) P = VxI Jedinica snage je Watt ili KWEnergija: Energija je proizvod snage (watt) i vremena (Sat) E = Pxt Jedinica energije je Watt Sat ili kilovat Sat (kWh) Iz gornje formule jasno je da su za mjerenje energije potrebna tri parametra 1. Napon 2. Struja 3. Vrijeme

Korak 3: Mjerenje napona

Mjerenje napona
Mjerenje napona
Mjerenje napona
Mjerenje napona
Mjerenje napona
Mjerenje napona

Napon se mjeri pomoću strujnog kruga razdjelnika napona. Budući da je ulazni napon analognog pina ARDUINO ograničen na 5 V, razdjelnik napona sam projektirao na takav način da izlazni napon s njega treba biti manji od 5 V. Moja baterija se koristi za spremanje napona. napajanje iz solarnog panela je ocijenjeno na 6v, 5.5Ah. Zato moram smanjiti 6,5v na napon manji od 5V. Koristio sam R1 = 10k i R2 = 10K. Vrijednost R1 i R2 može biti niža, ali problem je u tome što kada je otpor nizak, kroz nju prolazi veća struja, što rezultira velikom količinom energije (P = I^2R) koja se rasipa u obliku topline. Tako se mogu izabrati različite vrijednosti otpora, ali treba voditi računa da se smanji gubitak snage kroz otpor. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 kada je potpuno napunjen R1 = 10k i R2 = 10k Vout = 10/(10+10)*6,5 = 3,25 V koji je niži od 5 V i pogodan za ARDUINO analogni pinNAPOMENA I prikazali su 9 -voltnu bateriju u ogoljenoj ploči samo za primjer povezivanja žica. Ali stvarna baterija koju sam koristio je olovna baterija od 6 V, 5,5 Ah Ah. Kalibracija napona: Kad je baterija potpuno napunjena (6,5 V) dobit ćemo a Vout = 3,25 V i niža vrijednost za drugi niži napon baterije. AEDUINO ADC pretvara analogni signal u odgovarajuću digitalnu aproksimaciju. Kada je napon baterije 6,5 V, dobio sam 3,25 V iz razdjelnika napona i uzorak 1 = 696 u serijskom monitoru, gdje je uzorak 1 ADC vrijednost odgovara 3,25 VZa bolje razumijevanje, priložio sam simulaciju u stvarnom vremenu pomoću 123D. Kruga za mjerenje napona Kalibracija: 3,25 V ekvivalentno 696 1 ekvivalentno je 3,25/696 = 4,669mv Vout = (4,669*uzorak1)/1000 volti Stvarni napon baterije = (2*Vout) voltARDUINO KOD: // uzimanje 150 uzoraka iz razdjelnika napona s intervalom od 2 sek i zatim prosječno uzorak prikupljenih podataka za (int i = 0; i <150; i ++) {uzorak1 = uzorak1+analogno čitanje (A2); // očitavanje napona iz kašnjenja razdjelnika (2); } uzorak1 = uzorak1/150; napon = 4,669*2*uzorak 1/1000;

Korak 4: Mjerenje struje

Current Measurement
Current Measurement
Current Measurement
Current Measurement

Za mjerenje struje koristio sam Hall Effect osjetnik struje ACS 712 (20 A). Na tržištu su dostupni različiti ACS712 osjetnici raspona struje, pa odaberite prema svojim zahtjevima. Na dijagramu ploče za kruh prikazao sam LED kao opterećenje, ali je stvarno opterećenje različito. PRINCIP RADA: Hall -ov efekt je proizvodnja razlike napona (Hallov napon) na električnom vodiču, poprečno na električnu struju u vodiču i magnetno polje okomito na struju. Da biste saznali više o Hall Effect senzoru kliknite ovdje. Tehnički list senzora ACS 712 nalazi se ovdje. Iz tehničkog lista 1. ACS 712 mjeri pozitivna i negativna 20 ampera, što odgovara analognom izlazu 100mV/A 2. Nema izlazne struje kroz izlazni napon. VCC/2 = 5v/2 = 2.5V Kalibracija: Analogno očitavanje daje vrijednost 0-1023, jednako 0v do 5v. Dakle, analogno očitavanje 1 = (5/1024) V = 4.89mv Vrijednost = (4.89*Analogna vrijednost čitanja)/ 1000 V No prema tablicama podataka pomak je 2,5 V (Kada je trenutna nula dobit ćete 2,5 V iz izlaza senzora) Stvarna vrijednost = (vrijednost-2,5) V Struja u ampu = stvarna vrijednost*10ARDUINO KOD: // uzima 150 uzoraka iz senzori s intervalom od 2 sekunde, a zatim prosječni podaci uzorka prikupljeni za (int i = 0; i <150; i ++) {uzorak2+= analogno čitanje (A3); // očitavanje struje iz kašnjenja senzora (2); } uzorak2 = uzorak2/150; val = (5.0*uzorak2) /1024.0; stvarni val = val-2,5; // offset napon je 2,5v ampera = stvarni val*10;

Korak 5: Mjerenje vremena

Za mjerenje vremena nije potreban nikakav vanjski hardver, jer sam ARDUINO ima ugrađen mjerač vremena. Funkcija millis () vraća broj milisekundi otkad je Arduino ploča započela izvođenje trenutnog programa. ARDUINO KOD: long milisec = millis (); // računamo vrijeme u milisekundama long time = milisek/1000; // pretvara milisekunde u sekunde

Korak 6: Kako ARDUINO izračunava snagu i energiju

totamps = totamps+ampers; // izračunati ukupna pojačanja avgamps = totamps/vrijeme; // prosječna ampera amphr = (avgamps*vrijeme)/3600; // amp-satni vat = napon*ampera; // snaga = napon*trenutna energija = (vati*vrijeme)/3600; Watt-sec se ponovo pretvara u Watt-Hr dijeljenjem 1hr (3600sec) // energija = (watt*vrijeme)/(1000*3600); za očitavanje u kWh

Korak 7: Vizuelni izlaz

Vizuelni izlaz
Vizuelni izlaz

Svi rezultati mogu se vizualizirati na serijskom monitoru ili pomoću LCD -a. Koristio sam LCD s 16x2 znakova za prikaz svih rezultata dobivenih u prethodnim koracima. Za sheme pogledajte gornju shemu ploče za kruh. Povežite LCD s ARDUINO -om kako je dolje prikazano: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + otpornik ili potenciometar 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -nije povezan 8. D1 -> Arduino -Nije povezan 9. D2 -> Arduino -Nije povezan 10. D3 -> Arduino -Nije 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 + Otpornik (snaga pozadinskog osvjetljenja) 16. K -> Arduino GND (pozadinsko osvjetljenje) ARDUINO KOD: Za serijski monitor:

Serial.print ("VOLTAGE:"); Serial.print (napon); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serijski ispis (pojačala); Serial.println ("pojačala"); Serial.print ("POWER:"); Serijski.tisak (vati); Serial.println ("Watt"); Serial.print ("POTROŠNA ENERGIJA:"); Serijski.tisak (energija); Serial.println ("Watt-Hour"); Serial.println (""); // ispisuje sljedeće setove parametara nakon kašnjenja praznog retka (2000); Za LCD: Za LCD ekran morate prvo uvesti biblioteku "LiquidCrystal" u kôd. Da biste saznali više o biblioteci LequidCrystal kliknite ovdje Za LCD vodič kliknite ovdje Sljedeći kôd je format za prikaz na LCD -u sve proračune snage i energije #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // postavite pin 9 kao izlaz analogWrite (backLight, 150); // kontrolira intenzitet pozadinskog osvjetljenja 0-254 lcd.begin (16, 2); // stupci, redovi. veličina ekrana lcd.clear (); // brisanje ekrana} void loop () {lcd.setCursor (16, 1); // postavlja kursor izvan broja prikaza lcd.print (""); // ispis kašnjenja praznog karaktera (600); ////////////////////////////////////////////// snaga i energija ispisa na LCD/ //////////////////////////////////////////////////// lcd.setCursor (1, 0); // postavite kursor na 1. kolonu i 1. red lcd.print (watt); lcd.print ("W"); lcd.print (napon); lcd.print ("V"); lcd.setCursor (1, 1); // postavite kursor na 1. kolonu i 2. red lcd.print (energija); lcd.print ("WH"); lcd.print (pojačala); lcd.print ("A"); }

Korak 8: Prijenos podataka na Xively.com

Učitavanje podataka na Xively.com
Učitavanje podataka na Xively.com
Učitavanje podataka na Xively.com
Učitavanje podataka na Xively.com
Učitavanje podataka na Xively.com
Učitavanje podataka na Xively.com

Za bolje razumijevanje pogledajte gornje snimke zaslona. Za učitavanje podataka na xively.com sljedeću biblioteku prvo preuzmite HttpClient: kliknite ovdjeDugo: kliknite ovdje SPI: Uvoz iz arduino IDE -a (skica -> Uvoz biblioteke …..) Ethernet: Uvoz iz arduina IDE ((skica -> Uvezi biblioteku …..) Otvorite račun na https://xively.com (ranije pachube.com i cosm.com) Prijavite se za besplatni račun programera na

Odaberite korisničko ime, lozinku, postavite svoju adresu i vremensku zonu itd. Primit ćete e -poruku s potvrdom;

zatim kliknite vezu za aktivaciju da biste aktivirali svoj račun. Nakon uspješnog otvaranja računa bit ćete preusmjereni na stranicu Razvojni uređaji

  • Kliknite na polje +Dodaj uređaj
  • Dajte naziv svom uređaju i opis (npr. NADZOR ENERGIJE) ·
  • Odaberite privatne ili javne podatke (ja biram privatne) ·
  • Kliknite na Dodaj uređaj

Nakon dodavanja uređaja bit ćete preusmjereni na novu stranicu na kojoj se nalaze mnoge važne informacije

  • ID proizvoda, tajna proizvoda, serijski broj, kôd za aktivaciju ·
  • ID sažetka sadržaja, FeedURL, krajnja tačka API -ja (ID sažetka se koristi u ARDUINO kodu)
  • Dodajte kanale (IChoose ENERGY i POWER, ali možete birati prema vlastitom izboru) Dajte jedinicu i simbol za parametar ·
  • Dodajte svoju lokaciju ·
  • API ključevi (koriste se u ARDUINO kodu, izbjegavajte dijeljenje ovog broja) ·
  • Okidači (ping web stranica kada se događaj dogodio, na primjer kada potrošnja energije pređe određeno ograničenje)

Korak 9: Xively i ARDUINO kôd

Ovdje sam priložio kompletan kod (beta verzija) za mjerač energije isključujući bilježenje podataka sa SD kartice koji se zasebno prilaže u sljedećem koraku. / ** Podaci o nadzoru energije prenose se na xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Unesite svoj Xively API ključ #define FEED_ID xxxxxxxxx // Unesite svoj Xively feed ID // MAC adresu za vašu Bajt Ethernet štita mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analogni pin koji nadgledamo (0 i 1 koristi Ethernet štit) int sensorPin = 2; unsigned long lastConnectionTime = 0; // zadnji put kada smo se povezali na Cosm const unsigned long connectionInterval = 15000; // kašnjenje između povezivanja na Cosm u milisekundama // Inicijalizacija Cosm biblioteke // Definiranje niza za naš ID toka podataka char sensorId = "POWER"; char sensorId2 = "ENERGIJA"; XivelyDatastream stream -ovi podataka = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Omotajte tok podataka u feed XivelyFeed feed (FEED_ID, tokovi podataka, 2/ * broj tokova podataka */); EthernetClient klijent; XivelyClient xivelyclient (klijent); void setup () {Serial.begin (9600); Serial.println ("Inicijalizacija mreže"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Greška pri preuzimanju IP adrese putem DHCP -a, pokušaj ponovo …"); kašnjenje (15000); } Serial.println ("Mreža inicijalizirana"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // šalje podatke xively getData (); // čita podatke iz xively lastConnectionTime = millis (); // ažuriramo vrijeme povezivanja pa čekamo prije ponovnog povezivanja}} void sendData () {int sensor1 = watt; int senzor2 = energija; tokovi podataka [0].setFloat (senzor1); // tokovi podataka o vrijednosti snage [1].setFloat (sensor2); // energetska vrijednost Serial.print ("Očitavanje snage"); Serial.println (tokovi podataka [0].getFloat ()); Serial.print ("Čitanje energije"); Serial.println (tokovi podataka [1].getFloat ()); Serial.println ("Uploading to Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT povratni kod:"); Serial.println (ret); Serial.println (); } // dobivamo vrijednost toka podataka iz xively -a, ispisujući vrijednost koju smo primili void getData () {Serial.println ("Čitanje podataka iz Xively -a"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET povratni kod:"); Serial.println (ret); if (ret> 0) {Serial.print ("Tok podataka je:"); Serial.println (feed [0]); Serial.print ("Vrijednost napajanja je:"); Serial.println (feed [0].getFloat ()); Serial.print ("Tok podataka je:"); Serial.println (feed [1]); Serial.print ("Energetska vrijednost je:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

Korak 10: Prijava podataka na SD karticu

Za pohranjivanje podataka na SD karticu morate uvesti SD bibliotekuZa vodič kliknite ovdje Da biste saznali više o SD biblioteci kliknite ovdjeKôd za spremanje podataka na SD karticu piše se zasebno jer nemam dovoljno memorije u svom ARDUINO UNO nakon pisanje koda za LCD ekran i učitavanje podataka xively.com. Ali pokušavam poboljšati kôd beta verzije tako da jedan kôd može sadržavati sve funkcije (LCD ekran, Xively prijenos podataka i pohranjivanje podataka na SD karticu). Kôd za evidentiranje podataka nalazi se ispod. Ako neko napiše bolji kôd izmjenom koda, podijelite sa mnom. Ovo je moje prvo tehničko uputstvo. Ako neko nađe bilo kakvu grešku u tome, slobodno komentirajte.. kako bih se mogao poboljšati. Ako nađete područja poboljšanja u ovom projektu, komentirajte ili mi pošaljite poruku, pa će projekt biti snažniji. Mislim da će biti od koristi i drugima, ali i meni.

123D takmičenje
123D takmičenje
123D takmičenje
123D takmičenje

Treća nagrada na takmičenju 123D Circuits

Preporučuje se: