Sisukord:

ARDUINO ENERGY METER: 10 sammu (piltidega)
ARDUINO ENERGY METER: 10 sammu (piltidega)

Video: ARDUINO ENERGY METER: 10 sammu (piltidega)

Video: ARDUINO ENERGY METER: 10 sammu (piltidega)
Video: Котика ударило током, 10 т. Вольт 2024, Juuli
Anonim
Image
Image
ARDUINO ENERGIAMÕÕTJA
ARDUINO ENERGIAMÕÕTJA
ARDUINO ENERGIAMÕÕTJA
ARDUINO ENERGIAMÕÕTJA

[Esita videot]

Kuulun Indias Odisha külla, kus sagedased elektrikatkestused on väga levinud. See takistab igaühe elu. Lapsepõlves oli õhtupoolikul õpingute jätkamine tõeline väljakutse. Selle probleemi tõttu kavandasin oma kodu jaoks katseliselt päikesesüsteemi. Kasutasin mõne ereda LED -i valgustamiseks 10 W, 6 V päikesepaneeli. Pärast mitmeid raskusi oli projekt edukas. Siis otsustasin jälgida süsteemi pinget, voolu, võimsust ja energiat. See tõi kaasa idee kavandada ENERGIAMÕÕTJA. Selle projekti keskmes oli ARDUINO, kuna selle IDE -sse on väga lihtne koodi kirjutada ja Internetis on saadaval tohutul hulgal avatud lähtekoodiga teeke, mida saab vastavalt nõue. Olen katsetanud projekti väga väikese nimivõimsusega (10W) päikesesüsteemi jaoks, kuid seda saab hõlpsasti muuta kõrgema reitingusüsteemi kasutamiseks.

Kõik minu projektid leiate siit:

Funktsioon: Energia jälgimine 1. LCD -ekraani abil 2. Interneti kaudu (Xively upload) 3. Andmete logimine SD -kaardile

Näete minu uut juhendatavat ARDUINO MPPT SOLAR CHARGE CONTROLLER (versioon 3.0)

Näete ka minu teisi juhendeid

ARDUINO SOLAR CHARGE CONTROLLER (Versioon 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (versioon 1)

Samm: vajalikud osad:

Vajalikud osad
Vajalikud osad

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

3. 16x2 CHARACTER LCD (Amazon)

4. ACS 712 HETKELINE ANTUR (Amazon) 4. TAKISTID (10 k, 330 oomi) (Amazon) 5. 10K POTENTIOMETER (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET -KAABEL (Amazon) 8. LEIVAHV (Amazon)

2. samm: võimsus ja energia

Võimsus: võimsus on pinge (volt) ja voolu (Amp) korrutis Tund (kWh) Ülaltoodud valemist on selge, et energia mõõtmiseks vajame kolme parameetrit 1. Pinge 2. Vool 3. Aeg

3. samm: pinge mõõtmine

Pinge mõõtmine
Pinge mõõtmine
Pinge mõõtmine
Pinge mõõtmine
Pinge mõõtmine
Pinge mõõtmine

Pinget mõõdetakse pingejaotusahela abil. Kuna ARDUINO analoogpinge sisendpinge on piiratud 5 V -ga, kujundasin pingejaguri selliselt, et selle väljundpinge peaks olema väiksem kui 5 V. päikesepaneeli toiteallikaks on 6v, 5,5Ah. Nii et pean selle 6,5v maha laskma pingele alla 5V. Ma kasutasin R1 = 10k ja R2 = 10K. R1 ja R2 väärtus võib olla madalam, kuid probleem on selles, et kui takistus on madal, voolab läbi selle suurem vool, mille tagajärjel hajub suur hulk võimsust (P = I^2R) soojuse kujul. Seega saab valida erineva takistuse väärtuse, kuid tuleb hoolitseda selle eest, et takistusel tekkiv energiakadu oleks võimalikult väike. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 täislaetuna on näidanud 9 -voldist akut, mis on kinnitatud plaadiahelasse, näiteks juhtmete ühendamiseks. Kuid tegelik aku, mida ma kasutasin, on 6 -voldine 5,5 Ah pliiaku. Pinge kalibreerimine: kui aku on täielikult laetud (6,5 V), saame a Vout = 3,25v ja madalam väärtus muu madalama aku pinge korral. AEDUINO ADC teisendab analoogsignaali vastavaks digitaalseks lähenduseks. Kui aku pinge on 6,5v, sain pingejagurist 3,25v ja proov1 = 696 jadamonitoris, kus näidis1 on ADC väärtus, vastab 3,25v -le. Paremaks mõistmiseks olen pinge mõõtmiseks lisanud reaalajas simulatsiooni 123D. Ahelaga. 3.25v, mis vastab 696 1 -le, võrdub 3,25/696 = 4,669mv Vout = (4,669*proov1)/1000 volti Akupinge tegelik pinge = (2*Vout) volt VARDUINO -KOOD: // 150 proovi võtmine pingejagurist intervalliga 2 sekundit ja seejärel keskmistage proovide andmed (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // loe pinget jagaja vooluahela viivitusest (2); } proov1 = proov1/150; pinge = 4,669*2*proov1/1000;

4. samm: praegune mõõtmine

Praegune mõõtmine
Praegune mõõtmine
Praegune mõõtmine
Praegune mõõtmine

Voolu mõõtmiseks kasutasin Hall -efekti vooluandurit ACS 712 (20 A). Turul on saadaval erinevaid vooluhulga ACS712 andureid, seega valige vastavalt oma vajadustele. Leivalaua skeemil olen näidanud LED -i koormusena, kuid tegelik koormus on erinev. TÖÖPÕHIMÕTE: Halli efekt on pingeerinevuse (Halli pinge) tekitamine elektrijuhtmes, põiki elektrijuhtme elektrivoolu ja vooluga risti olev magnetväli. Halli efekti anduri kohta lisateabe saamiseks klõpsake siin. ACS 712 anduri andmelehe leiate siit Andmelehelt 1. ACS 712 mõõdab positiivset ja negatiivset 20Amp, mis vastab analoogväljundile 100mV/A 2. Väljundpinge kaudu testvoolu ei ole VCC/2 = 5v/2 = 2,5V 1000 V Kuid andmelehtede nihe on 2,5 V (praeguse nulli korral saate anduri väljundist 2,5 V) Tegelik väärtus = (väärtus-2,5) V Vool amprites = tegelik väärtus*10ARDUINO KOOD: // 150 proovi võtmine andurid intervalliga 2sek ja seejärel keskmistavad proovide andmed (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // voolu lugemine anduri viivitusest (2); } proov2 = proov2/150; val = (5,0*proov2)/1024,0; tegelik väärtus = val-2,5; // nihkepinge on 2,5v amprit = tegelik väärtus*10;

Samm: aja mõõtmine

Aja mõõtmiseks ei ole vaja välist riistvara, kuna ARDUINO -l endal on sisseehitatud taimer. Funktsioon millis () tagastab millisekundite arvu pärast seda, kui Arduino plaat alustas jooksva programmi käivitamist. ARDUINO KOOD: pikk milisec = millis (); // aja arvutamine millisekundites pikk aeg = milisec/1000; // teisenda millisekundid sekunditeks

6. samm: kuidas ARDUINO arvutab võimsust ja energiat

totamps = totamps+amp; // arvutada kokku amprit avgamps = totamps/time; // keskmine amprit amphr = (avgamps*aeg)/3600; // amp-tund watt = pinge*amprit; // võimsus = pinge*praegune energia = (vatt*aeg)/3600; Watt-sec teisendatakse taas vatt-tunniks, jagades 1h (3600sek) // energia = (vatt*aeg)/(1000*3600); lugemiseks kWh

7. samm: visuaalne väljund

Visuaalne väljund
Visuaalne väljund

Kõiki tulemusi saab visualiseerida jadamonitoris või LCD -ekraani abil. Kõigi eelmistes sammudes saadud tulemuste kuvamiseks kasutasin 16x2 sümbolit sisaldavat LCD -d. Skeemide jaoks vaadake ülaltoodud leivaplaadi vooluahelat. Ühendage LCD -ekraan ARDUINO -ga, nagu allpool näidatud: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + takisti või potentsiomeeter 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -pole ühendatud 8. D1 -> Arduino -pole ühendatud 9. D2 -> Arduino -pole ühendatud 10. D3 -> Arduino -pole ühendatud 11. D4 -> Arduino tihvt 5 12. D5 -> Arduino tihvt 4 13. D6 -> Arduino tihvt 3 14. D7 -> Arduino tihvt 2 15. A -> Arduino tihvt 13 + takisti (taustvalgustuse võimsus) 16. K -> Arduino GND (taustvalgustusega maapind) ARDUINO KOOD: jadamonitori jaoks:

Serial.print ("VOLTAGE:"); Jadajälg (pinge); Serial.println ("Volt"); Serial.print ("CURRENT:"); Serial.print (võimendid); Serial.println ("Võimendid"); Serial.print ("POWER:"); Seeriaprint (vatt); Serial.println ("Watt"); Serial.print ("ENERGY CONSUMED:"); Serial.print (energia); Serial.println ("Watt-tund"); Serial.println (""); // printida järgmised parameetrikomplektid pärast tühja rea viivitust (2000); LCD: LCD -ekraani puhul peate esmalt importima koodi "LiquidCrystal" raamatukogu. LequidCrystali raamatukogu kohta lisateabe saamiseks klõpsake siin. LCD -õpetuse jaoks klõpsake siin Järgmine kood on vorming, mis kuvab LCD -s kõik võimsuse ja energia arvutused #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (taustvalgus, OUTPUT); // määrake pin 9 väljundiks analogWrite (taustvalgus, 150); // juhib taustvalgustuse intensiivsust 0-254 lcd.begin (16, 2); // veerud, read. ekraani suurus lcd.clear (); // tühjenda ekraan} void loop () {lcd.setCursor (16, 1); // määrake kursor väljaspool ekraani arvu lcd.print (""); // trüki tühja märgi viivitus (600); ////////////////////////////////////////////////////////////////////////// prindib võimsust ja energiat LCD- ekraanile/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (1, 0); // määrake kursor 1. veergu ja 1. rea lcd.print (vatt); lcd.print ("W"); lcd.print (pinge); lcd.print ("V"); lcd.setCursor (1, 1); // seadke kursor 1. veergu ja 2. rida lcd.print (energia); lcd.print ("WH"); lcd.print (võimendid); lcd.print ("A"); }

Samm: andmete üleslaadimine saidile Xively.com

Andmete üleslaadimine saidile Xively.com
Andmete üleslaadimine saidile Xively.com
Andmete üleslaadimine saidile Xively.com
Andmete üleslaadimine saidile Xively.com
Andmete üleslaadimine saidile Xively.com
Andmete üleslaadimine saidile Xively.com

Vaadake ülaltoodud ekraanipilte, et paremini aru saada. Andmete üleslaadimiseks saidile xively.com tuleb järgmine teek alla laadida kõigepealt HttpClient: klõpsake siin Xively: klõpsake siin SPI: Importimine arduino IDE -st (visand -> Impordi raamatukogu …) IDE ((visand -> Impordi kogu …..) Avage konto saidil https://xively.com (varem pachube.com ja cosm.com) Registreeruge tasuta arendajakonto saamiseks aadressil

Valige kasutajanimi, parool, määrake oma aadress ja ajavöönd jne. Teile saadetakse kinnitusmeil;

seejärel klõpsake oma konto aktiveerimiseks aktiveerimislingil. Pärast konto edukat avamist suunatakse teid arendusseadmete lehele

  • Klõpsake kasti +Lisa seade
  • Andke oma seadmele nimi ja kirjeldus (nt GENERGIA MONITORING) ·
  • Valige privaatsed või avalikud andmed (mina privaatne) ·
  • Klõpsake nuppu Lisa seade

Pärast seadme lisamist suunatakse teid uuele lehele, kus on palju olulist teavet

  • Toote ID, toote saladus, seerianumber, aktiveerimiskood ·
  • Voo ID, FeedURL, API lõpp -punkt (voo ID -d kasutatakse ARDUINO -koodis)
  • Lisage kanaleid (IChoose ENERGY ja POWER, kuid saate valida vastavalt oma valikule) Andke parameetri ühik ja sümbol ·
  • Lisage oma asukoht ·
  • API võtmed (kasutatakse ARDUINO koodis, vältige selle numbri jagamist) ·
  • Päästikud (ping aweb -i leht sündmuse toimumisel, näiteks kui energiatarbimine ületab teatud piiri)

9. samm: Xively ja ARDUINO kood

Siin lisasin energiamõõturi täieliku koodi (beetaversioon), välja arvatud SD -kaardi andmete logimine, mis lisatakse järgmises etapis eraldi. / ** Energiaseire andmete üleslaadimine xively -le **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Sisestage oma Xively API -võti #define FEED_ID xxxxxxxxx // Sisestage oma Xively feed ID // MAC -aadress Etherneti kilbi bait mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analoogpulk, mida jälgime (Etherneti kilp kasutab 0 ja 1) int sensorPin = 2; allkirjastamata pikk lastConnectionTime = 0; // viimati ühendasime Cosm const unsigned long connectionInterval = 15000; // viivitus Cosmiga ühenduse loomise vahel millisekundites // Cosmi teegi initsialiseerimine // Määrake meie andmevoo ID char sensorId = "POWER"; char sensorId2 = "ENERGIA"; XivelyDatastream andmevoog = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT)}; // Paki andmevoog voogu XivelyFeed feed (FEED_ID, andmevoog, 2/ * andmevoogude arv */); EthernetClient klient; XivelyClient xivelyclient (klient); void setup () {Serial.begin (9600); Serial.println ("Võrgu lähtestamine"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Viga IP -aadressi hankimisel DHCP kaudu, proovides uuesti …"); viivitus (15000); } Serial.println ("Võrk lähtestatud"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // andmete saatmine xively getData (); // loe andmevoogu xively lastConnectionTime = millis (); // uuenda ühenduse aega, nii et ootame enne uuesti ühendamist}} void sendData () {int sensor1 = watt; int sensor2 = energia; datastreams [0].setFloat (sensor1); // võimsusväärtuse andmevoog [1].setFloat (sensor2); // energiaväärtus Serial.print ("Lugemisvõimsus"); Serial.println (andmevoog [0].getFloat ()); Serial.print ("Lugemisenergia"); Serial.println (andmevoog [1].getFloat ()); Serial.println ("Üleslaadimine Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("PUT tagastuskood:"); Serial.println (ret); Serial.println (); } // saada andmevoo väärtus xivelyst, printides välja saadud väärtuse void getData () {Serial.println ("Andmete lugemine Xivelyst"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Andmevoog on:"); Serial.println (feed [0]); Serial.print ("Võimsuse väärtus on:"); Serial.println (feed [0].getFloat ()); Serial.print ("Andmevoog on:"); Serial.println (feed [1]); Serial.print ("Energia väärtus on:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

Samm: andmete logimine SD -kaardile

Andmete SD -kaardile salvestamiseks peate importima SD -teeki. Õpetuse saamiseks klõpsake siin. SD -raamatukogu kohta lisateabe saamiseks klõpsake siin. Andmete SD -kaardile salvestamise kood kirjutatakse eraldi, kuna mul pole pärast ARDUINO UNO -d piisavalt mälu koodi kirjutamine LCD -ekraanile ja andmete üleslaadimiseks xively.com. Kuid ma proovin parandada beetaversiooni koodi nii, et üks kood võib sisaldada kõiki funktsioone (LCD -ekraan, Xively andmete üleslaadimine ja andmete salvestamine SD -kaardile). Andmete logimise kood on lisatud allpool. Kui keegi kirjutab parem kood, muutes oma koodi, palun jagage seda minuga. See on minu esimene tehniline juhend, kui keegi leiab selles vigu, kirjutage julgelt kommentaare.. et saaksin ennast parandada. Kui leiate selles projektis parandamisvaldkondi, palun kommenteerige või saatke mulle sõnum, nii et projekt on võimsam. Ma arvan, et see on kasulik nii teistele kui ka mulle.

123D ahelate võistlus
123D ahelate võistlus
123D ahelate võistlus
123D ahelate võistlus

123D -ahelate võistluse kolmas auhind

Soovitan: