Satura rādītājs:

ARDUINO ENERGY METER: 10 soļi (ar attēliem)
ARDUINO ENERGY METER: 10 soļi (ar attēliem)

Video: ARDUINO ENERGY METER: 10 soļi (ar attēliem)

Video: ARDUINO ENERGY METER: 10 soļi (ar attēliem)
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, Jūlijs
Anonim
Image
Image
ARDUINO ENERGIJAS MĒRĪTĀJS
ARDUINO ENERGIJAS MĒRĪTĀJS
ARDUINO ENERGIJAS MĒRĪTĀJS
ARDUINO ENERGIJAS MĒRĪTĀJS

[Atskaņot video]

Es piederu Indijas ciematam Odišā, kur bieža elektroapgādes pārtraukšana ir ļoti izplatīta. Tas apgrūtina katra cilvēka dzīvi. Bērnības laikā studiju turpināšana pēc krēslas bija īsts izaicinājums. Šīs problēmas dēļ es eksperimentāli izveidoju saules sistēmu savām mājām. Es izmantoju 10 W, 6 V saules paneli, lai apgaismotu dažas spilgtas gaismas diodes. Pēc daudzām grūtībām projekts bija veiksmīgs. Tad es nolēmu uzraudzīt sistēmā esošo spriegumu, strāvu, jaudu un enerģiju. Tas radīja ideju izveidot ENERGIJAS METERU. Es izmantoju ARDUINO kā šī projekta sirdi, jo IDE ir ļoti viegli ierakstīt kodu, un internetā ir pieejams milzīgs skaits atvērtā pirmkoda bibliotēkas, ko var izmantot saskaņā ar prasība. Esmu eksperimentējis ar projektu ar ļoti mazu nominālo (10 vatu) saules sistēmu, taču to var viegli mainīt, lai to izmantotu augstāka reitinga sistēmai.

Visus manus projektus varat atrast:

Motīvs: Enerģijas monitorings ar 1. LCD displeju 2. caur internetu (Xively upload) 3. Datu reģistrēšana SD kartē

Jūs varat redzēt manu jauno pamācāmo ARDUINO MPPT SOLAR CHARGE CONTROLLER (versija 3.0)

Varat arī apskatīt citus manus norādījumus

ARDUINO SOLAR CHARGE CONTROLLER (Versija 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Versija-1)

1. darbība. Nepieciešamās detaļas:

Nepieciešamās detaļas
Nepieciešamās detaļas

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

3. 16x2 RAKSTURU LCD (Amazon)

4. ACS 712 AKTUĀLAIS SENSORS (Amazon) 4. REZISTORI (10 k, 330 omi) (Amazon) 5. 10K POTENCIOMETRS (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET KABELIS (Amazon) 8. BREAD BOARD (Amazon)

2. solis: Jauda un enerģija

Jauda: Jauda ir sprieguma (voltu) un strāvas (Amp) produkts Stunda (kWh) No iepriekš minētās formulas ir skaidrs, ka enerģijas mērīšanai nepieciešami trīs parametri: 1. Spriegums 2. Pašreizējais 3. Laiks

3. solis: sprieguma mērīšana

Sprieguma mērīšana
Sprieguma mērīšana
Sprieguma mērīšana
Sprieguma mērīšana
Sprieguma mērīšana
Sprieguma mērīšana

Spriegumu mēra, izmantojot sprieguma dalītāja ķēdi. Tā kā ARDUINO analogās tapas ieejas spriegums ir ierobežots līdz 5 V, es projektēju sprieguma dalītāju tā, lai izejas spriegums no tā būtu mazāks par 5 V. Mans akumulators, ko izmanto jauda no saules paneļa ir nominālā 6v, 5,5Ah. Tāpēc man ir jāsamazina šī 6,5v līdz spriegumam, kas ir zemāks par 5V. Es izmantoju R1 = 10k un R2 = 10K. R1 un R2 vērtība var būt zemāka, bet problēma ir tā, ka tad, ja pretestība ir zema, caur to plūst lielāka strāva, kā rezultātā liels enerģijas daudzums (P = I^2R) izkliedējas siltuma veidā. Tātad var izvēlēties atšķirīgu pretestības vērtību, taču jārūpējas, lai samazinātu jaudas zudumus pretestībā. Vout = R2/(R1+R2)*Vbat Vbat = 6,5, kad ir pilnībā uzlādēts ir parādījuši 9 voltu akumulatoru slēgtās plates shēmā, piemēram, lai savienotu vadus. Bet patiesībā izmantotais akumulators ir 6 voltu, 5,5 Ah svina skābes akumulators. Sprieguma kalibrēšana: Kad akumulators ir pilnībā uzlādēts (6,5 V), mēs saņemsim a Vout = 3,25 V un zemāka vērtība citam zemākam akumulatora spriegumam. AEDUINO ADC pārveido analogo signālu par atbilstošu digitālo tuvinājumu. Kad akumulatora spriegums ir 6,5 V, es saņēmu 3,25 V no sprieguma dalītāja un paraugs1 = 696 sērijas monitorā, kur paraugs1 ir ADC vērtība atbilst 3,25 v 3.25v ekvivalents 696 1 ir ekvivalents 3.25/696 = 4.669mv Vout = (4.669*paraugs1)/1000 volti Faktiskais akumulatora spriegums = (2*Vout) voltsARDUINO KODS: // 150 paraugu ņemšana no sprieguma dalītāja ar 2 sek. Intervālu un pēc tam aprēķiniet vidējos paraugu datus (int i = 0; i <150; i ++) {paraugs1 = paraugs1+analogRead (A2); // nolasīt spriegumu no dalītāja ķēdes aizkaves (2); } paraugs1 = paraugs1/150; spriegums = 4,669*2*paraugs1/1000;

4. solis: pašreizējā mērīšana

Pašreizējais mērījums
Pašreizējais mērījums
Pašreizējais mērījums
Pašreizējais mērījums

Strāvas mērīšanai es izmantoju Hall Effect strāvas sensoru ACS 712 (20 A). Tirgū ir pieejami dažādi ACS712 strāvas diapazona sensori, tāpēc izvēlieties atbilstoši savām prasībām. Maizes dēļa diagrammā esmu parādījis LED kā slodzi, bet faktiskā slodze ir atšķirīga. DARBA PRINCIPS: Halles efekts ir sprieguma starpības (Halles sprieguma) radīšana pāri elektriskajam vadītājam, šķērsvirzienā pret elektrisko strāvu vadītājā un magnētiskais lauks, kas ir perpendikulārs strāvai. Lai uzzinātu vairāk par Hall Effect sensoru, noklikšķiniet šeit. ACS 712 sensora datu lapa ir atrodama šeit. No 1. datu lapas. ACS 712 mēra pozitīvos un negatīvos 20 ampērus, kas atbilst 100mV/A analogajai izejai. 2. Izvades spriegumā netiek pārbaudīta strāva. VCC/2 = 5v/2 = 2.5V Kalibrēšana: Analogā nolasīšana rada vērtību 0-1023, kas ir vienāda ar 0v līdz 5v Tātad Analogā nolasīšana 1 = (5/1024) V = 4.89mv Vērtība = (4.89*Analogās lasīšanas vērtība)/ 100 V sensori ar 2 sekunžu intervālu un pēc tam aprēķina vidējos paraugu datus (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // nolasīt strāvu no sensora aizkaves (2); } paraugs2 = paraugs2/150; val = (5,0*paraugs2)/1024,0; faktiskais = val-2,5; // nobīdes spriegums ir 2,5v ampēri = faktiskais*10;

5. solis: laika mērīšana

Laika mērīšanai nav nepieciešama ārēja aparatūra, jo ARDUINO ir iebūvēts taimeris. Funkcija millis () atgriež no milisekundēm, kopš Arduino dēlis sāka darboties pašreizējā programmā. ARDUINO KODS: garš milisec = millis (); // aprēķināt laiku milisekundēs ilgs laiks = milisec/1000; // pārvērst milisekundes sekundēs

6. solis: Kā ARDUINO aprēķina jaudu un enerģiju

totamps = totamps+ampēri; // aprēķināt kopējo ampēru avgamps = totamps/time; // vidējais ampēri amfrs = (avgamps*laiks)/3600; // ampēstundas vati = spriegums*ampēri; // jauda = spriegums*strāvas enerģija = (vati*laiks)/3600; Watt-sec atkal tiek pārvērsts par W-Hr, dalot 1 h (3600 sekundes) // enerģija = (vats*laiks)/(1000*3600); lasīšanai kWh

7. darbība: vizuālā izvade

Vizuālā izeja
Vizuālā izeja

Visus rezultātus var vizualizēt sērijveida monitorā vai izmantojot LCD. Es izmantoju 16x2 rakstzīmju LCD, lai parādītu visus iepriekšējos soļos iegūtos rezultātus. Lai iegūtu shēmas, skatiet iepriekš redzamo maizes dēļa shēmu. Savienojiet LCD ar ARDUINO, kā norādīts zemāk: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND tapa + rezistors vai potenciometrs 4. RS -> Arduino tapa 8 5. RW -> Arduino tapa 7 6. E -> Arduino tapa 6 7. D0 -> Arduino -nav savienots 8 D1 -> Arduino -nav savienots 14. D7 -> Arduino tapa 2 15. A -> Arduino tapa 13 + pretestība (pretgaismas jauda) 16. K -> Arduino GND (pretgaismas zeme) ARDUINO KODS: Seriālajam monitoram:

Serial.print ("VOLTAGE:"); Sērijas nospiedums (spriegums); Serial.println ("Volt"); Serial.print ("CURRENT:"); Sērijas nospiedums (ampēri); Serial.println ("Pastiprinātāji"); Serial.print ("POWER:"); Sērijas nospiedums (vati); Serial.println ("Vats"); Serial.print ("ENERGY CONSUMED:"); Sērijas nospiedums (enerģija); Serial.println ("vatstunda"); Serial.println (""); // izdrukāt nākamās parametru kopas pēc tukšas rindas aizkaves (2000); LCD: LCD displejam vispirms kodā jāimportē "LiquidCrystal" bibliotēka. Lai uzzinātu vairāk par LequidCrystal bibliotēku, noklikšķiniet šeit. Lai iegūtu LCD apmācību, noklikšķiniet šeit. Šis kods ir formāts, lai parādītu LCD visus jaudas un enerģijas aprēķinus #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // iestatiet tapu 9 kā izejas analogWrite (backLight, 150); // kontrolē fona apgaismojuma intensitāti 0-254 lcd.begin (16, 2); // kolonnas, rindas. displeja izmērs lcd.clear (); // notīrīt ekrānu} void loop () {lcd.setCursor (16, 1); // iestatiet kursoru ārpus displeja skaita lcd.print (""); // drukāt tukšu rakstzīmju aizkavi (600); ///////////////////////////////////////////////////////////////////////////////////////// Izdrukājiet jaudu un enerģiju LCD/ //////////////////////////////////////////////////////////////////////////////////////////// (1, 0); // iestatiet kursoru uz 1. collu un 1. rindas lcd.print (vats); lcd.print ("W"); lcd.print (spriegums); lcd.print ("V"); lcd.setCursor (1, 1); // iestatiet kursoru 1. kolā un 2. rindā lcd.print (enerģija); lcd.print ("WH"); lcd.print (ampēri); lcd.print ("A"); }

8. darbība: datu augšupielāde vietnē Xively.com

Datu augšupielāde vietnē Xively.com
Datu augšupielāde vietnē Xively.com
Datu augšupielāde vietnē Xively.com
Datu augšupielāde vietnē Xively.com
Datu augšupielāde vietnē Xively.com
Datu augšupielāde vietnē Xively.com

Skatiet iepriekš redzamos ekrānuzņēmumus, lai labāk saprastu. Lai augšupielādētu datus vietnē xively.com, vispirms lejupielādējiet šo bibliotēku HttpClient: noklikšķiniet šeit Xively: noklikšķiniet šeit SPI: Importēt no arduino IDE (skice -> Importēt bibliotēku …) Ethernet: Importēt no arduino IDE ((skice -> Importēt bibliotēku …..) Atveriet kontu vietnē https://xively.com (agrāk pachube.com un cosm.com). Reģistrējieties bezmaksas izstrādātāja kontam vietnē

Izvēlieties lietotājvārdu, paroli, iestatiet adresi un laika joslu utt. Jūs saņemsiet apstiprinājuma e -pastu;

pēc tam noklikšķiniet uz aktivizācijas saites, lai aktivizētu savu kontu. Pēc veiksmīgas konta atvēršanas jūs tiksit novirzīts uz lapu Attīstības ierīces

  • Noklikšķiniet uz lodziņa +Pievienot ierīci
  • Piešķiriet savai ierīcei nosaukumu un aprakstu (piemēram, ĢENERĢIJAS UZRAUDZĪBA) ·
  • Izvēlieties privātus vai publiskus datus (es izvēlos privātus) ·
  • Noklikšķiniet uz Pievienot ierīci

Pēc ierīces pievienošanas jūs tiekat novirzīts uz jaunu lapu, kurā ir daudz svarīgas informācijas

  • Produkta ID, produkta noslēpums, sērijas numurs, aktivizācijas kods ·
  • Plūsmas ID, FeedURL, API beigu punkts (plūsmas ID tiek izmantots ARDUINO kodā)
  • Pievienojiet kanālus (IChoose ENERGY un POWER, bet jūs varat izvēlēties pēc savas izvēles) Norādiet parametra vienību un simbolu ·
  • Pievienojiet savu atrašanās vietu ·
  • API atslēgas (tiek izmantotas ARDUINO kodā, izvairieties no šī numura kopīgošanas) ·
  • Aktivizētāji (ping aweb lapa notikuma gadījumā, piemēram, ja enerģijas patēriņš pārsniedz noteiktu robežu)

9. darbība: Xively un ARDUINO kods

Šeit es pievienoju pilnu enerģijas skaitītāja kodu (beta versija), izņemot SD kartes datu reģistrēšanu, kas nākamajā solī ir pievienots atsevišķi. / ** Enerģijas monitoringa datu augšupielāde xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Ievadiet savu Xively API atslēgu #define FEED_ID xxxxxxxxx // Ievadiet savu Xively plūsmas ID // MAC adresi Ethernet vairoga baits mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analogā tapa, kuru mēs novērojam (0 un 1 izmanto Ethernet vairogs) int sensorPin = 2; neparakstīts ilgi lastConnectionTime = 0; // pēdējo reizi, kad izveidojām savienojumu ar Cosm const unsigned long connectionInterval = 15000; // aizkave starp savienojumu ar Cosm milisekundēs // Initialize Cosm library // Definējiet virkni mūsu datu plūsmas ID char sensorId = "POWER"; char sensorId2 = "ENERĢIJA"; XivelyDatastream datu plūsmas = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT)}; // Ietiniet datu plūsmu plūsmā XivelyFeed plūsma (FEED_ID, datu plūsmas, 2/ * datu plūsmu skaits */); EthernetClient klients; XivelyClient xivelyclient (klients); void setup () {Serial.begin (9600); Serial.println ("Tīkla inicializēšana"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Kļūda, iegūstot IP adresi, izmantojot DHCP, mēģinot vēlreiz …"); kavēšanās (15000); } Serial.println ("Tīkls inicializēts"); Sērijas.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // nosūtīt datus uz xively getData (); // lasīt datu plūsmu no xively lastConnectionTime = millis (); // atjaunināt savienojuma laiku, lai mēs gaidītu, pirms atkal pievienosimies}} void sendData () {int sensor1 = watt; int sensors2 = enerģija; datu straumes [0].setFloat (sensors1); // jaudas vērtības datu plūsmas [1].setFloat (sensors2); // enerģētiskā vērtība Serial.print ("Lasīšanas jauda"); Serial.println (datu plūsmas [0].getFloat ()); Serial.print ("Lasīšanas enerģija"); Serial.println (datu plūsmas [1].getFloat ()); Serial.println ("Augšupielāde uz Xively"); int ret = xivelyclient.put (plūsma, API_KEY); Serial.print ("PUT atgriešanās kods:"); Serial.println (ret); Sērijas.println (); } // iegūt datu plūsmas vērtību no xively, izdrukājot saņemto vērtību void getData () {Serial.println ("Datu lasīšana no Xively"); int ret = xivelyclient.get (plūsma, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datu plūsma ir:"); Serial.println (plūsma [0]); Serial.print ("Jaudas vērtība ir:"); Serial.println (plūsma [0].getFloat ()); Serial.print ("Datu plūsma ir:"); Serial.println (plūsma [1]); Serial.print ("Enerģijas vērtība ir:"); Serial.println (plūsma [1].getFloat ()); } Sērijas.println ();

10. darbība: datu reģistrēšana SD kartē

Lai saglabātu datus SD kartē, jums ir jāimportē SD bibliotēka. Lai uzzinātu vairāk par SD bibliotēku, noklikšķiniet šeit. Lai uzzinātu vairāk par SD bibliotēku, noklikšķiniet šeit. Kods datu glabāšanai SD kartē tiek rakstīts atsevišķi, jo manā ARDUINO UNO nav pietiekami daudz atmiņas. koda rakstīšana LCD displejam un datu augšupielādei xively.com. Bet es cenšos uzlabot beta versijas kodu, lai vienā kodā varētu būt visas funkcijas (LCD displejs, Xively datu augšupielāde un datu saglabāšana SD kartē). Datu reģistrēšanas kods ir pievienots zemāk. Ja kāds raksta labāks kods, mainot manu kodu, lūdzu, dalieties ar mani. Šī ir mana pirmā tehniskā pamācība. Ja kāds tajā atklāj kādu kļūdu, nekautrējieties komentēt.. lai es varētu sevi uzlabot. Ja šajā projektā atrodat uzlabošanas jomas, lūdzu, komentējiet vai ziņojiet man, tāpēc projekts būs spēcīgāks. Es domāju, ka tas būs noderīgs citiem, kā arī man.

123D shēmu konkurss
123D shēmu konkurss
123D shēmu konkurss
123D shēmu konkurss

Trešā balva 123D shēmu konkursā

Ieteicams: