Cuprins:

CONTOR DE ENERGIE ARDUINO: 10 pași (cu imagini)
CONTOR DE ENERGIE ARDUINO: 10 pași (cu imagini)

Video: CONTOR DE ENERGIE ARDUINO: 10 pași (cu imagini)

Video: CONTOR DE ENERGIE ARDUINO: 10 pași (cu imagini)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, Iulie
Anonim
Image
Image
CONTOR DE ENERGIE ARDUINO
CONTOR DE ENERGIE ARDUINO
CONTOR DE ENERGIE ARDUINO
CONTOR DE ENERGIE ARDUINO

[Rulează video]

Aparțin unui sat din Odisha, India, unde întreruperile frecvente ale curentului electric sunt foarte frecvente. Împiedică viața fiecăruia. În zilele copilăriei, continuarea studiilor după amurg a fost o adevărată provocare. Datorită acestei probleme, am proiectat un sistem solar pentru casa mea, pe bază experimentală. Am folosit un panou solar de 10 W, 6V pentru iluminarea câtorva LED-uri luminoase. După ce s-au confruntat cu multe greutăți, proiectul a avut succes. Apoi am decis să monitorizez tensiunea, curentul, puterea și energia implicate în sistem. Acest lucru a adus ideea proiectării unui ENERGY METER. Am folosit ARDUINO ca esență a acestui proiect, deoarece este foarte ușor să scrii cod în IDE-ul său și există un număr mare de biblioteci open source disponibile pe internet, care pot fi utilizate în conformitate cu Cerință. Am experimentat proiectul pentru un sistem solar foarte mic (10 Watt), dar acest lucru poate fi ușor modificat pentru a fi utilizat pentru un sistem de rating mai mare.

Puteți găsi toate proiectele mele pe:

Caracteristică: Monitorizarea energiei prin 1. Afișaj LCD 2. prin internet (încărcare Xively) 3. Înregistrarea datelor într-un card SD

Puteți vedea noul meu instructor ARDUINO MPPT SOLAR CHARGE CONTROLLER (Versiunea-3.0)

Puteți vedea și celelalte instructabile ale mele

ARDUINO SOLAR CHARGE CONTROLLER (Versiunea 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Versiunea-1)

Pasul 1: Piese necesare:

Piese necesare
Piese necesare

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

3. LCD CARACTER 16x2 (Amazon)

4. ACS 712 SENSOR CURENT (Amazon) 4. REZISTENTE (10k, 330ohm) (Amazon) 5. POTENȚIOMETRU 10K (Amazon) JUMPER WIRES (Amazon) 7. CABLU ETHERNET (Amazon) 8. PÂNĂ (Amazon)

Pasul 2: Putere și energie

Puterea: Puterea este produs de tensiune (volt) și curent (Amp) P = VxI Unitatea de putere este Watt sau KW Energie: Energia este produsul de putere (watt) și timp (oră) E = Pxt Unitatea de energie este Watt oră sau kilowatt Ora (kWh) Din formula de mai sus este clar că pentru a măsura energia avem nevoie de trei parametri 1. Tensiune 2. Curent 3. Timp

Pasul 3: Măsurarea tensiunii

Măsurarea tensiunii
Măsurarea tensiunii
Măsurarea tensiunii
Măsurarea tensiunii
Măsurarea tensiunii
Măsurarea tensiunii

Tensiunea este măsurată cu ajutorul unui circuit divizor de tensiune. Deoarece tensiunea de intrare a pinului analogic ARDUINO este limitată la 5V, am proiectat divizorul de tensiune în așa fel încât tensiunea de ieșire din acesta să fie mai mică de 5 V. Bateria mea utilizată pentru stocarea puterea de la panoul solar este evaluată la 6v, 5,5 Ah. Deci trebuie să renunț la acest 6,5v la o tensiune mai mică de 5V. Am folosit R1 = 10k și R2 = 10K. Valoarea lui R1 și R2 poate fi mai mică, dar problema este că, atunci când rezistența este redusă, curentul de curent este mai mare prin ea, ca urmare o cantitate mare de putere (P = I ^ 2R) disipată sub formă de căldură. Deci, se poate alege o valoare a rezistenței diferite, dar trebuie să se acorde atenție minimizării pierderii de putere pe rezistență. Vout = R2 / (R1 + R2) * Vbat Vbat = 6,5 la încărcare completă R1 = 10k și R2 = 10k Vout = 10 / (10 + 10) * 6,5 = 3,25v care este mai mic decât 5v și potrivit pentru pinul analog ARDUINO NOTĂ I Am arătat bateria de 9 volți în circuitul plăcilor cu bare este doar de exemplu pentru a conecta firele. Dar bateria reală pe care am folosit-o este o baterie de 6 volți, 5,5 Ah plumb acid. a Vout = 3,25v și valoare mai mică pentru alte tensiuni mai mici ale bateriei. AEDUINO ADC convertește semnalul analogic în aproximarea digitală corespunzătoare. Când tensiunea bateriei este de 6,5v am obținut 3,25v de la divizorul de tensiune și sample1 = 696 în monitorul serial, unde sample1 este valoarea ADC corespunde la 3,25v Pentru o mai bună înțelegere am atașat simularea în timp real prin 123D.circuit pentru măsurarea tensiunii Calibrare: 3.25v echivalent cu 696 1 este echivalent cu 3.25 / 696 = 4.669mv Vout = (4.669 * eșantion1) / 1000 volți Tensiunea reală a bateriei = (2 * Vout) volt COD CARDUINO: // preluarea a 150 de eșantioane de la divizorul de tensiune cu un interval de 2 sec. și apoi mediați datele probelor colectate pentru (int i = 0; i <150; i ++) {sample1 = sample1 + analogRead (A2); // citiți tensiunea din întârzierea circuitului divizor (2); } sample1 = sample1 / 150; tensiune = 4.669 * 2 * eșantion 1/1000;

Pasul 4: Măsurarea curentului

Măsurarea curentului
Măsurarea curentului
Măsurarea curentului
Măsurarea curentului

Pentru măsurarea curentului am folosit un senzor de curent Hall Effect ACS 712 (20 A). Există senzori ACS712 de curent diferiți disponibili pe piață, deci alegeți în funcție de cerințele dvs. În diagrama plăcii de pâine, am arătat LED-ul ca o sarcină, dar sarcina reală este diferită. un câmp magnetic perpendicular pe curent. Pentru a afla mai multe despre senzorul de efect Hall, faceți clic aici Fișa tehnică a senzorului ACS 712 se găsește aici Din Fișa tehnică 1. ACS 712 măsoară 20A pozitive și negative, corespunzătoare ieșirii analogice 100mV / A 2. Nu există curent de testare prin tensiunea de ieșire. VCC / 2 = 5v / 2 = 2,5V Calibrare: Citirea analogică produce o valoare de 0-1023, echivalentă cu 0v la 5v Deci Citirea analogică 1 = (5/1024) V = 4.89mv Valoarea = (4.89 * Valoarea citirii analogice) / 1000 V Dar, conform fișelor de date, compensarea este de 2,5 V (Când curentul zero veți obține 2,5 V din ieșirea senzorului) Valoare reală = (valoare-2,5) V Curent în amplificator = valoare reală * 10 CODUL ARDINO: // luând 150 de probe din senzori cu un interval de 2sec și apoi media eșantioanelor colectate pentru (int i = 0; i <150; i ++) {sample2 + = analogRead (A3); // citiți curentul din întârzierea senzorului (2); } sample2 = sample2 / 150; val = (5.0 * sample2) /1024.0; actualval = val-2.5; // tensiunea de offset este 2,5 v amperi = actualval * 10;

Pasul 5: Măsurarea timpului

Pentru măsurarea timpului nu este nevoie de hardware extern, deoarece ARDUINO în sine are un timer încorporat. Funcția millis () returnează numărul de milisecunde de când placa Arduino a început să ruleze programul curent. COD CARDUINO: long milisec = millis (); // calculați timpul în milisecunde timp lung = milisec / 1000; // convertiți milisecunde în secunde

Pasul 6: Cum calculează ARDUINO puterea și energia

totamps = totamps + amperi; // calculați amperi total avgamps = totamps / time; // amperi medii amphr = (avgamps * time) / 3600; // amp-oră watt = tensiune * amperi; // putere = tensiune * energie curentă = (watt * timp) / 3600; Watt-sec este din nou convertit în Watt-Hr împărțind 1 oră (3600sec) // energie = (watt * timp) / (1000 * 3600); pentru citire în kWh

Pasul 7: ieșire vizuală

Ieșire vizuală
Ieșire vizuală

Toate rezultatele pot fi vizualizate pe monitorul serial sau utilizând un ecran LCD. Am folosit un ecran LCD de 16x2 caractere pentru a afișa toate rezultatele obținute în pașii anteriori. Pentru schemele de lucru, consultați circuitul plăcii de pâine prezentat mai sus. > Arduino + 5v 3. VO -> Arduino GND pin + Rezistor sau potențiometru 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino - Nu este conectat 8. D1 -> Arduino - Nu este conectat 9. D2 -> Arduino - Nu este conectat 10. D3 -> Arduino - Nu este conectat 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Pinul Arduino 2 15. A -> Pinul Arduino 13 + Rezistor (putere iluminare) 16. K -> Arduino GND (sol iluminare) COD ARDUINO: Pentru monitorul serial:

Serial.print ("VOLTAGE:"); Serial.print (tensiune); Serial.println ("Volt"); Serial.print ("CURENT:"); Serial.print (amperi); Serial.println ("Amperi"); Serial.print ("PUTERE:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("ENERGIE CONSUMATĂ":); Serial.print (energie); Serial.println („Watt-oră”); Serial.println (""); // tipăriți următoarele seturi de parametri după o întârziere a liniei goale (2000); Pentru LCD: Pentru afișajul LCD trebuie să importați mai întâi biblioteca "LiquidCrystal" în cod. Pentru a afla mai multe despre biblioteca LequidCrystal, faceți clic aici Pentru tutorialul LCD faceți clic aici Următorul cod este un format pentru a afișa în LCD toate calculele pentru putere și energie #include lcd (8, 7, 6, 5, 4, 3, 2); int BackLight = 9; void setup () {pinMode (backLight, OUTPUT); // setați pinul 9 ca ieșire analogWrite (backLight, 150); // controlează intensitatea luminii de fundal 0-254 lcd.begin (16, 2); // coloane, rânduri. dimensiunea afișajului lcd.clear (); // ștergeți ecranul} void loop () {lcd.setCursor (16, 1); // setați cursorul în afara numărului de afișare lcd.print (""); // tipăriți întârzierea caracterului gol (600); //////////////////////////////////////////// tipăriți puterea și energia pe un LCD / ///////////////////////////////////////////////// lcd.setCursor (1, 0); // setați cursorul la prima col și primul rând lcd.print (watt); lcd.print ("W"); lcd.print (tensiune); lcd.print ("V"); lcd.setCursor (1, 1); // setați cursorul la 1 col și 2 rând lcd.print (energie); lcd.print ("WH"); lcd.print (amperi); lcd.print ("A"); }

Pasul 8: Încărcarea datelor pe Xively.com

Încărcarea datelor pe Xively.com
Încărcarea datelor pe Xively.com
Încărcarea datelor pe Xively.com
Încărcarea datelor pe Xively.com
Încărcarea datelor pe Xively.com
Încărcarea datelor pe Xively.com

Consultați capturile de ecran de mai sus pentru o mai bună înțelegere. Pentru încărcarea datelor pe xively.com următoarea bibliotecă care trebuie descărcată mai întâi HttpClient: faceți clic aici Xively: faceți clic aici SPI: Import din arduino IDE (schiță -> Import bibliotecă …..) Ethernet: Import din arduino IDE ((schiță -> Import bibliotecă …)

Alegeți un nume de utilizator, o parolă, setați adresa și fusul orar etc. Veți primi un e-mail de confirmare;

apoi faceți clic pe linkul de activare pentru a vă activa contul. După deschiderea cu succes a contului, veți fi redirecționat către pagina Dispozitive de dezvoltare

  • Faceți clic pe caseta + Adăugare dispozitiv
  • Dați un nume dispozitivului și descrierea (de exemplu MONITORIZAREA ENERGIEI) ·
  • Alegeți date private sau publice (aleg privat) ·
  • Faceți clic pe Adăugare dispozitiv

După adăugarea dispozitivului, sunteți redirecționat către o pagină nouă, unde există multe informații importante

  • ID produs, secret produs, număr de serie, cod de activare ·
  • Feed ID, FeedURL, API End Point (Feed ID este utilizat în codul ARDUINO)
  • Adăugați canale (alegeți ENERGIE și PUTERE, dar puteți alege în funcție de alegerea dvs.) Dați unitatea și simbolul pentru parametru ·
  • Adaugă locația ta ·
  • Chei API (utilizate în codul ARDUINO, evitați să partajați acest număr) ·
  • Declanșatoare (pagină ping aweb când s-a întâmplat un eveniment, cum ar fi atunci când consumul de energie depășește o anumită limită)

Pasul 9: Xively și codul ARDUINO

Aici am atașat codul complet (versiunea beta) pentru contorul de energie, cu excepția înregistrării datelor cardului SD, care este atașat separat la pasul următor. / ** Încărcare date de monitorizare a energiei în xively ** / #include #include #include #include #define API_KEY "xxxxxxxx" // Introduceți cheia Xively API #define FEED_ID xxxxxxxxx // Introduceți ID-ul dvs. Xively feed // adresa MAC pentru Ethernet shield byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Pin analogic pe care îl monitorizăm (0 și 1 sunt folosiți de ecranul Ethernet) int sensorPin = 2; unsigned long lastConnectionTime = 0; // ultima dată când ne-am conectat la Cosm const unsigned long connectionInterval = 15000; // întârziere între conectarea la Cosm în milisecunde // Inițializați biblioteca Cosm // Definiți șirul pentru ID-ul nostru de transmisie de date char sensorId = "POWER"; char sensorId2 = "ENERGIE"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Înfășurați fluxul de date într-un flux XivelyFeed (FEED_ID, datastreams, 2 / * numărul de fluxuri de date * /); Client EthernetClient; XivelyClient xivelyclient (client); void setup () {Serial.begin (9600); Serial.println ("Inițializarea rețelei"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Eroare la obținerea adresei IP prin DHCP, încercarea din nou …"); întârziere (15000); } Serial.println („Rețea inițializată”); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // trimite date către xively getData (); // citiți datastream înapoi de la xively lastConnectionTime = millis (); // actualizați timpul de conectare, așa că așteptăm înainte de a ne conecta din nou}} void sendData () {int senzor1 = watt; int senzor2 = energie; datastreams [0].setFloat (senzor1); // power value datastreams [1].setFloat (senzor2); // valoarea energetică Serial.print („Putere de citire”); Serial.println (datastreams [0].getFloat ()); Serial.print („Citiți energia”); Serial.println (datastreams [1].getFloat ()); Serial.println („Încărcare în Xively”); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("cod de returnare PUT:"); Serial.println (ret); Serial.println (); } // obțineți valoarea datastream de la xively, imprimând valoarea pe care am primit-o void getData () {Serial.println ("Citirea datelor de la Xively"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream este:"); Serial.println (feed [0]); Serial.print ("Valoarea puterii este:"); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream este:"); Serial.println (feed [1]); Serial.print („Valoarea energetică este:”); Serial.println (feed [1].getFloat ()); } Serial.println ();

Pasul 10: Logarea datelor într-un card SD

Pentru stocarea datelor pe un card SD trebuie să importați biblioteca SD Pentru tutorial faceți clic aici Pentru a afla mai multe despre biblioteca SD, faceți clic aici Codul pentru stocarea datelor într-un card SD este scris separat deoarece nu am suficientă memorie în ARDUINO UNO după scrierea codului pentru afișajul LCD și încărcarea datelor xively.com. Dar încerc să îmbunătățesc codul versiunii beta, astfel încât un singur cod să conțină toate caracteristicile (afișaj LCD, încărcare Xively de date și stocare de date pe un card SD). Codul pentru înregistrarea datelor este atașat mai jos. Dacă cineva scrie un un cod mai bun modificându-mi codul, vă rog să-mi împărtășiți. Acesta este primul meu instructiv tehnic. Dacă cineva găsește vreo greșeală în acesta, nu ezitați să comentați … pentru a mă putea îmbunătăți. Dacă găsiți domenii de îmbunătățire în acest proiect, vă rugăm să comentați sau trimiteți-mi un mesaj, deci proiectul va fi mai puternic. Cred că va fi util atât pentru alții, cât și pentru mine.

Concursul de circuite 123D
Concursul de circuite 123D
Concursul de circuite 123D
Concursul de circuite 123D

Premiul III la concursul de circuite 123D

Recomandat: