Përmbajtje:

ARDUINO ENERGY METER: 10 hapa (me fotografi)
ARDUINO ENERGY METER: 10 hapa (me fotografi)

Video: ARDUINO ENERGY METER: 10 hapa (me fotografi)

Video: ARDUINO ENERGY METER: 10 hapa (me fotografi)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, Korrik
Anonim
Image
Image
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER
ARDUINO ENERGY METER

[Luaj videon]

Unë i përkas një fshati Odisha, Indi ku ndërprerja e shpeshtë e energjisë është shumë e zakonshme. Ajo pengon jetën e secilit. Gjatë ditëve të mia të fëmijërisë vazhdimi i studimeve pas muzg ishte një sfidë e vërtetë. Për shkak të këtij problemi, unë projektova një sistem diellor për shtëpinë time në mënyrë eksperimentale. Kam përdorur një panel diellor prej 10 Watt, 6V për ndriçimin e disa LED -ve të ndritshme. Pasi u përball me shumë vështirësi, projekti ishte i suksesshëm. Pastaj vendosa të monitoroj tensionin, rrymën, fuqinë dhe energjinë e përfshirë në sistem. Kjo solli idenë e krijimit të një METER ENERGJI. Unë e përdorja ARDUINO -n si zemrën e këtij projekti sepse është shumë e lehtë të shkruash kod në IDE -në e tij dhe ka një numër të madh bibliotekash me burim të hapur në dispozicion në internet të cilat mund të përdoren sipas kërkesë. Unë kam eksperimentuar projektin për sistemin diellor të vlerësuar shumë të vogël (10 Watt), por ky mund të modifikohet lehtësisht për t'u përdorur për sistemin e vlerësimit më të lartë.

Mund t’i gjeni të gjitha projektet e mia në:

Karakteristikë: Monitorimi i energjisë nga ekrani 1. LCD 2. përmes internetit (ngarkimi Xively) 3. Regjistrimi i të dhënave në një kartë SD

Ju mund të shihni kontrolluesin tim të ri ARDUINO MPPT SOLAR CHARGE (Version-3.0)

Ju gjithashtu mund të shihni udhëzimet e mia të tjera në

ARDUINO SOLAR CHARGE CONTROLLER (Versioni 2.0)

KONTROLLUES ARDUINO SOLAR CHARGE (Versioni-1)

Hapi 1: Pjesët e kërkuara:

Pjesët e kërkuara
Pjesët e kërkuara

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

3. LCD KARAKTER 16x2 (Amazon)

4. Sensori aktual ACS 712 (Amazon) 4. Rezistentët (10k, 330ohm) (Amazon) 5. POTENTIOMETRI 10K (Amazon) 6. JUMPER WIRES (Amazon) 7. Kabllo ETHERNET (Amazon) 8. BORDI I BUKES (Amazon)

Hapi 2: Fuqia dhe Energjia

Fuqia: Fuqia është produkt i tensionit (volt) dhe rrymës (Amp) P = VxI Njësia e fuqisë është Watt ose KW Energjia: Energjia është produkt i fuqisë (vat) dhe kohës (orë) E = Pxt Njësia e energjisë është Watt Orë ose Kilovat Ora (kWh) Nga formula e mësipërme është e qartë se për të matur Energjinë na duhen tre parametra 1. Tensioni 2. Rryma 3. Koha

Hapi 3: Matja e Tensionit

Matja e Tensionit
Matja e Tensionit
Matja e Tensionit
Matja e Tensionit
Matja e Tensionit
Matja e Tensionit

Tensioni matet me ndihmën e një qarku të ndarjes së tensionit. Meqenëse tensioni i hyrjes së pin pin ARDUINO është i kufizuar në 5V, unë projektova ndarësin e tensionit në atë mënyrë që tensioni i daljes prej tij të jetë më pak se 5V. Bateria ime e përdorur për ruajtjen e fuqia nga paneli diellor vlerësohet 6v, 5.5Ah. Kështu që unë duhet ta heq këtë 6.5v në një tension më të ulët se 5V. Kam përdorur R1 = 10k dhe R2 = 10K. Vlera e R1 dhe R2 mund të jetë më e ulët, por problemi është se kur rezistenca është e ulët rrjedhja më e lartë e rrymës përmes saj si rezultat i një sasie të madhe të energjisë (P = I^2R) të shpërndarë në formën e nxehtësisë. Pra, vlera të ndryshme të rezistencës mund të zgjidhen, por duhet pasur kujdes për të minimizuar humbjen e energjisë në të gjithë rezistencën. Vout = R2/(R1+R2)*Vbat Vbat = 6.5 kur ngarkohet plotësisht R1 = 10k dhe R2 = 10k Vout = 10/(10+10)*6.5 = 3.25v e cila është më e ulët se 5v dhe është e përshtatshme për pinin analog ARDUINO SHOTNIM I kanë treguar bateri 9 Volt në qarkun e bordit të zhveshur është vetëm për shembull për të lidhur telat. Por bateria aktuale që kam përdorur është një bateri acidi plumb 6 Volt, 5.5Ah. Kalibrimi i Tensionit: Kur bateria të jetë plotësisht e ngarkuar (6.5v) do të marrim a Vout = 3.25v dhe vlerë më e ulët për tensionin tjetër më të ulët të baterisë. AEDUINO ADC shndërron sinjalin analog në përafrimin përkatës dixhital. Kur tensioni i baterisë është 6.5v kam marrë 3.25v nga ndarësi i tensionit dhe mostra1 = 696 në monitorin serik, ku mostra 1 është vlera ADC korrespondon me 3.25v Për të kuptuar më mirë, unë kam bashkuar simulimin në kohë reale me 123D. Qark për matjen e tensionit Kalibrimi: 3.25v ekuivalent me 696 1 është ekuivalent me 3.25/696 = 4.669mv Vout = (4.669*mostra1)/1000 volt Tensioni aktual i baterisë = (2*Vout) volt KODI ARDUINO: // marrja e 150 mostrave nga ndarësi i tensionit me një interval prej 2 sekondash dhe pastaj mesatarizoni të dhënat e mostrave të mbledhura për (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // lexoni tensionin nga vonesa e qarkut ndarës (2); } mostra1 = mostra1/150; tension = 4.669*2*mostër1/1000;

Hapi 4: Matja aktuale

Matja aktuale
Matja aktuale
Matja aktuale
Matja aktuale

Për matjen aktuale kam përdorur një sensor aktual Hall Effect ACS 712 (20 A). Ekzistojnë në treg tregues të ndryshëm sensorë ACS712, prandaj zgjidhni sipas kërkesës tuaj. Në diagramin e tabelës së bukës unë kam treguar LED si një ngarkesë, por ngarkesa aktuale është e ndryshme. PARIMI I PUNS: Efekti Hall është prodhimi i një ndryshimi tensioni (tensioni i Sallës) përgjatë një përcjellësi elektrik, tërthor në një rrymë elektrike në përcjellës dhe një fushë magnetike pingul me rrymën. Për të ditur më shumë rreth sensorit Hall Effect klikoni këtu Fleta e të dhënave e sensorit ACS 712 gjendet këtu Nga Fleta e të Dhënave 1. ACS 712 masë pozitive dhe negative 20Amps, që korrespondon me daljen analoge 100mV/A 2. Asnjë rrymë prove përmes tensionit dalës nuk është VCC/2 = 5v/2 = 2.5VKalibrim: Leximi analog prodhon një vlerë prej 0-1023, e barabartë me 0v deri në 5v Pra leximi analog 1 = (5/1024) V = 4.89mv Vlera = (4.89*Vlera e leximit analog)/ 1000 V Por sipas fletëve të të dhënave kompensimi është 2.5V (Kur zero aktuale do të merrni 2.5V nga dalja e sensorit) Vlera aktuale = (vlera-2.5) V Rryma në amp = vlera aktuale*10ARDUINO KODI: // marrja e 150 mostrave nga sensorë me një interval prej 2 sekondash dhe më pas mesatarisht të dhënat e mostrave të mbledhura për (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // lexoni rrymën nga vonesa e sensorit (2); } mostra2 = mostra2/150; val = (5.0*mostra2) /1024.0; aktualval = val-2.5; // tensioni i kompensuar është 2.5v amper = aktualval*10;

Hapi 5: Matja e kohës

Për matjen e kohës nuk ka nevojë për ndonjë pajisje të jashtme, pasi vetë ARDUINO ka një kohëmatës të integruar. Funksioni millis () kthen numrin e milisekondave që kur bordi Arduino filloi drejtimin e programit aktual. KODI ARDUINO: milisec i gjatë = millis (); // llogarit kohën në milisekonda kohë të gjatë = milisec/1000; // shndërroni milisekonda në sekonda

Hapi 6: Si Llogarit ARDUINO Fuqinë dhe Energjinë

totamps = totamps+amps; // llogarisni amps gjithsej avgamps = totamps/kohë; // amps mesatar amphr = (avgamps*koha)/3600; // amp-orë vat = tension*amper; // fuqia = tensioni*energjia aktuale = (vat*koha)/3600; Watt-sek kthehet përsëri në Watt-Hr duke pjesëtuar 1hr (3600sek) // energji = (vat*kohë)/(1000*3600); për lexim në kWh

Hapi 7: Dalja vizuale

Dalja vizuale
Dalja vizuale

Të gjitha rezultatet mund të vizualizohen në monitorin serik ose duke përdorur një LCD. Kam përdorur një LCD me karakter 16x2 për të shfaqur të gjitha rezultatet e marra në hapat e mëparshëm. Për skemat, shihni qarkun e tabelës së bukës të treguar më sipër. Lidhni LCD me ARDUINO siç jepet më poshtë: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Rezistor ose Potenciometër 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Nuk lidhet 8. D1 -> Arduino -Nuk është lidhur 9. D2 -> Arduino -Nuk është lidhur 10. D3 -> Arduino -Nuk është lidhur 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Pin Arduino 2 15. A -> Arduino Pin 13 + Rezistencë (Fuqia e dritës së prapme) 16. K -> Arduino GND (Territori i dritës së prapme) ARDUINO KODI: Për Serial Monitor:

Serial.print ("VOLTAGE:"); Serial.print (tension); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serial.print (amps); Serial.println ("Amper"); Serial.print ("POWER:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("ENERGJIA E KONSUMUAR:"); Serial.print (energji); Serial.println ("Watt-Hour"); Serial.println (""); // printoni grupet e ardhshme të parametrave pas një vonese të linjës bosh (2000); Për LCD: Për ekranin LCD ju duhet së pari të importoni bibliotekën "LiquidCrystal" në kod. Për të ditur më shumë rreth bibliotekës LequidCrystal klikoni këtu Për tutorial LCD clickhere Kodi i mëposhtëm është një format për të shfaqur në LCD të gjithë llogaritjen për fuqinë dhe energjinë #përfshi LCD (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // vendos pinin 9 si analogWrite dalës (backLight, 150); // kontrollon intensitetin e dritës së prapme 0-254 lcd. fillo (16, 2); // kolona, rreshta. madhësia e ekranit LCD. e qartë (); // pastroni ekranin} void loop () {lcd.setCursor (16, 1); // vendosni kursorin jashtë numërimit të ekranit lcd.print (""); // printoni vonesën e karaktereve bosh (600); ////////////////////////////////////////// Shtypni fuqinë dhe energjinë në një LCD/ //////////////////////////////////////////////// lcd.setCursor (1, 0); // vendosni kursorin në kolonën e parë dhe rreshtin e parë lcd.print (watt); lcd.print ("W"); lcd.print (tension); lcd.print ("V"); lcd.setCursor (1, 1); // vendosni kursorin në kolonën e parë dhe rreshtin e dytë lcd.print (energji); lcd.print ("WH"); lcd.print (amps); lcd.print ("A"); }

Hapi 8: Ngarkimi i të dhënave në Xively.com

Ngarkimi i të dhënave në Xively.com
Ngarkimi i të dhënave në Xively.com
Ngarkimi i të dhënave në Xively.com
Ngarkimi i të dhënave në Xively.com
Ngarkimi i të dhënave në Xively.com
Ngarkimi i të dhënave në Xively.com

Referojuni pamjeve të mësipërme të ekranit për një qëndrim më të mirë. Për të dhënat që ngarkohen në xively.com biblioteka e mëposhtme do të shkarkohet së pari HttpClient: klikoni këtuXively: klikoni këtu SPI: Importoni nga arduino IDE (skica -> Importoni bibliotekën…..) Ethernet: Importoni nga arduino IDE ((skica -> Importo bibliotekën …..) Hapni një llogari me https://xively.com (më parë pachube.com dhe cosm.com) Regjistrohuni për një llogari zhvilluesi falas në

Zgjidhni një emër përdoruesi, fjalëkalim, vendosni adresën tuaj dhe zonën kohore etj. Ju do të merrni një email konfirmimi;

pastaj klikoni lidhjen e aktivizimit për të aktivizuar llogarinë tuaj. Pas hapjes me sukses të llogarisë do të devijoni në faqen e pajisjeve të Zhvillimit

  • Klikoni në +Shto kutinë e pajisjes
  • Jepini një emër pajisjes tuaj dhe përshkrimit (p.sh. MONITORIMI I ENERGJIS) ·
  • Zgjidhni të dhëna private ose publike (unë zgjedh ato private) ·
  • Klikoni në Shto pajisje

Pas shtimit të pajisjes ju devijoni në një faqe të re ku ka shumë informacione të rëndësishme

  • ID e produktit, Sekreti i produktit, Numri Serial, Kodi i Aktivizimit ·
  • ID e burimit, FeedURL, Pika përfundimtare e API (ID e burimit përdoret në kodin ARDUINO)
  • Shtoni kanale (Zgjedhni ENERGY dhe POWER, por ju mund të zgjidhni sipas zgjedhjes tuaj) Jepni njësi dhe simbol për parametrin ·
  • Shtoni vendndodhjen tuaj ·
  • Çelësat API (të përdorur në kodin ARDUINO, shmangni ndarjen e këtij numri) ·
  • Shkakton (faqe aweb ping kur ka ndodhur një ngjarje, si kur konsumi i energjisë tejkalon një kufi të caktuar)

Hapi 9: Kodi Xively dhe ARDUINO

Këtu bashkëngjita kodin e plotë (versioni beta) për matësin e energjisë duke përjashtuar regjistrimin e të dhënave të kartës SD i cili është bashkangjitur veçmas në hapin tjetër. / ** Të dhënat e monitorimit të energjisë ngarkohen në xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Futni çelësin tuaj Xively API #përcaktoni FEED_ID xxxxxxxxx // Futni ID tuaj të ushqimit Xively // Adresa MAC për tuajin Mburoja Ethernet byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Pin analoge që ne po monitorojmë (0 dhe 1 përdoren nga mburoja Ethernet) int sensorPin = 2; e panënshkruar gjatë lastConnectionTime = 0; // herën e fundit që u lidhëm me Cosm const lidhje të panënshkruar të gjatëInterval = 15000; // vonesa midis lidhjes me Cosm në milisekonda // Inicimi i bibliotekës Cosm // Përcaktoni vargun për datastream ID -në tonë sensor sensorId = "POWER"; char sensorId2 = "ENERGJIA"; Datastreams XivelyDatastream = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Përfundoni rrjedhën e të dhënave në një burim të ushqimit XivelyFeed (FEED_ID, datastreams, 2/ * numri i transmetimeve të të dhënave */); Klienti EthernetClient; XivelyClient xivelyclient (klient); void setup () {Serial.begin (9600); Serial.println ("Fillimi i rrjetit"); ndërsa (Ethernet.begin (mac)! = 1) {Serial.println ("Gabim në marrjen e adresës IP përmes DHCP, duke u përpjekur përsëri …"); vonesë (15000); } Serial.println ("Rrjeti i inicializuar"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // dërgoni të dhëna në xively getData (); // lexoni datastream përsëri nga xively lastConnectionTime = millis (); // përditësoni kohën e lidhjes kështu që ne presim para se të lidhemi përsëri}} void sendData () {int sensor1 = watt; int sensor2 = energji; datastreams [0].setFloat (sensor1); // vlera e fuqisë së të dhënave datastreams [1].setFloat (sensor2); // vlera e energjisë Serial.print ("Lexo fuqinë"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Lexo energjinë"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Ngarkimi në Xively"); int ret = xivelyclient.put (burim, API_KEY); Serial.print ("Kodi i kthimit PUT:"); Serial.println (ret); Serial.println (); } // merrni vlerën e rrjedhës së të dhënave nga xively, duke shtypur vlerën që kemi marrë void getData () {Serial.println ("Leximi i të dhënave nga Xively"); int ret = xivelyclient.get (burim, API_KEY); Serial.print ("GET kodi i kthimit:"); Serial.println (ret); if (ret> 0) {Serial.print ("Rrjedha e të dhënave është:"); Serial.println (burim [0]); Serial.print ("Vlera e fuqisë është:"); Serial.println (burim [0].getFloat ()); Serial.print ("Datastream është:"); Serial.println (burim [1]); Serial.print ("Vlera e energjisë është:"); Serial.println (burim [1].getFloat ()); } Serial.println ();

Hapi 10: Regjistrimi i të dhënave në një kartë SD

Për ruajtjen e të dhënave në një kartë SD ju duhet të importoni bibliotekën SD Për tutorial klikoni këtu Për të ditur më shumë rreth bibliotekës SD klikoni këtu Kodi për ruajtjen e të dhënave në një kartë SD është shkruar veçmas pasi nuk kam memorie të mjaftueshme në ARDUINO UNO tim pas shkrimi i kodit për ekranin LCD dhe ngarkimin e të dhënave xively.com. Por unë jam duke u përpjekur të përmirësoj kodin e versionit beta në mënyrë që një kod i vetëm të përmbajë të gjitha tiparet (ekran LCD, ngarkimi i të dhënave Xively dhe ruajtja e të dhënave në një kartë SD). Kodi për regjistrimin e të dhënave është bashkangjitur më poshtë. Nëse dikush shkruan një kod më të mirë duke modifikuar kodin tim ju lutem ndani me mua. Ky është udhëzimi im i parë teknik, Nëse dikush gjen ndonjë gabim në të, mos ngurroni të komentoni.. në mënyrë që të përmirësohem. Nëse gjeni fusha përmirësimi në këtë projekt, ju lutemi komentoni ose më dërgoni mesazh, kështu që projekti do të jetë më i fuqishëm. Unë mendoj se do të jetë i dobishëm për të tjerët, si dhe për mua.

Konkursi i Qarqeve 123D
Konkursi i Qarqeve 123D
Konkursi i Qarqeve 123D
Konkursi i Qarqeve 123D

Çmimi i Tretë në Konkursin e Qarqeve 123D

Recommended: