Turinys:

ARDUINO ENERGY METER: 10 žingsnių (su nuotraukomis)
ARDUINO ENERGY METER: 10 žingsnių (su nuotraukomis)

Video: ARDUINO ENERGY METER: 10 žingsnių (su nuotraukomis)

Video: ARDUINO ENERGY METER: 10 žingsnių (su nuotraukomis)
Video: Arduino project how to make a laser electronic alarm, an amazing invention DIY 2024, Liepa
Anonim
Image
Image
ARDUINO ENERGIJOS MATURAS
ARDUINO ENERGIJOS MATURAS
ARDUINO ENERGIJOS MATURAS
ARDUINO ENERGIJOS MATURAS

[Paleisti vaizdo įrašą]

Aš priklausau Odišos kaimui Indijoje, kur dažnas elektros energijos tiekimo nutraukimas yra labai dažnas reiškinys. Tai apsunkina kiekvieno gyvenimą. Vaikystėje tęsti mokslus po sutemų buvo tikras iššūkis. Dėl šios problemos eksperimentiniu būdu suprojektavau saulės sistemą savo namams. Keletą ryškių šviesos diodų apšvietimui naudojau 10 W, 6 V saulės kolektorių. Po daugybės sunkumų projektas buvo sėkmingas. Tada nusprendžiau stebėti sistemoje esančią įtampą, srovę, galią ir energiją. Tai sukėlė idėją sukurti ENERGETIKOS MATERIUS. Šio projekto pagrindu aš naudoju ARDUINO, nes jo IDE labai lengva įrašyti kodą, o internete yra daugybė atviro kodo bibliotekų, kurias galima naudoti pagal reikalavimą. Aš eksperimentavau su labai mažos (10 vatų) saulės sistemos projektu, tačiau tai galima lengvai pakeisti, kad būtų galima naudoti aukštesnio įvertinimo sistemą.

Visus mano projektus galite rasti:

Funkcija: energijos stebėjimas naudojant 1. LCD ekraną 2. internetu (Xively upload) 3. Duomenų registravimas SD kortelėje

Galite pamatyti mano naują nurodomą ARDUINO MPPT SOLAR CHARGE CONTROLLER (3.0 versija)

Taip pat galite pamatyti kitus mano nurodymus

ARDUINO SOLAR CHARGE CONTROLLER (2.0 versija)

ARDUINO SOLAR CHARGE CONTROLLER (1 versija)

1 veiksmas: reikalingos dalys:

Reikalingos dalys
Reikalingos dalys

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

3. 16x2 CHARACTER LCD („Amazon“)

4. ACS 712 DABARTINIS JUTIKLIS („Amazon“) 4. REZISTORIAI (10 k, 330 omų) („Amazon“) 5. 10K POTENCIOMETRAS („Amazon“) 6. „JUMPER WIRES“(„Amazon“) 7. ETHERNET KABELIS („Amazon“) 8. BREAD BOARD („Amazon“)

2 žingsnis: galia ir energija

Galia: galia yra įtampos (voltų) ir srovės (Amp) sandauga Valanda (kWh) Iš aukščiau pateiktos formulės aišku, kad energijai matuoti mums reikia trijų parametrų: 1. Įtampa 2. Srovė 3. Laikas

3 žingsnis: įtampos matavimas

Įtampos matavimas
Įtampos matavimas
Įtampos matavimas
Įtampos matavimas
Įtampos matavimas
Įtampos matavimas

Įtampa matuojama naudojant įtampos skirstytuvo grandinę. Kadangi ARDUINO analoginio kaiščio įėjimo įtampa yra apribota iki 5 V, įtampos skirstytuvą suprojektavau taip, kad išėjimo įtampa būtų mažesnė nei 5 V. Mano baterija naudojama saulės kolektoriaus galia yra 6v, 5,5Ah. Taigi turiu sumažinti šį 6,5v įtampą iki žemesnės nei 5V įtampos. Aš naudoju R1 = 10k ir R2 = 10K. R1 ir R2 vertė gali būti mažesnė, tačiau problema yra ta, kad esant mažam pasipriešinimui, per ją teka didesnė srovė, todėl didelis energijos kiekis (P = I^2R) išsisklaido šilumos pavidalu. Taigi galima pasirinkti skirtingą pasipriešinimo vertę, tačiau reikia stengtis kuo labiau sumažinti energijos pasipriešinimą pasipriešinimui. Vout = R2/(R1+R2)*Vbat Vbat = 6,5, kai visiškai įkrautas parodė 9 voltų akumuliatorių, esantį atjungtos plokštės grandinėje, kaip tik, pavyzdžiui, prijungti laidus. Tačiau faktinė baterija, kurią naudojau, yra 6 voltų, 5,5 Ah švino rūgšties baterija. Įtampos kalibravimas: kai akumuliatorius bus visiškai įkrautas (6,5 V), a Vout = 3,25 V ir mažesnė kitos žemesnės baterijos įtampos vertė. AEDUINO ADC konvertuoja analoginį signalą į atitinkamą skaitmeninį aproksimaciją. Kai akumuliatoriaus įtampa yra 6,5 V, aš gavau 3,25 V iš įtampos daliklio, o mėginys 1 = 696 nuosekliajame monitoriuje, kur 1 pavyzdys yra ADC reikšmė atitinka 3,25 v. Kad geriau suprastumėte, aš pridėjau realaus laiko modeliavimą 123D. Grandinė įtampos matavimui Kalibravimas: 3.25v, lygiavertis 696 1, atitinka 3.25/696 = 4.669mv Vout = (4.669*mėginys1)/1000 voltų Faktinė akumuliatoriaus įtampa = (2*Vout) voltasARDUINO KODAS: // imant 150 mėginių iš įtampos skirstytuvo su 2 sek. Intervalu ir tada apskaičiuokite mėginių duomenis, surinktus (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // skaityti įtampą iš daliklio grandinės uždelsimo (2); } mėginys1 = mėginys1/150; įtampa = 4,669*2*mėginys1/1000;

4 žingsnis: srovės matavimas

Dabartinis matavimas
Dabartinis matavimas
Dabartinis matavimas
Dabartinis matavimas

Srovės matavimui naudojau „Hall Effect“srovės jutiklį ACS 712 (20 A). Rinkoje yra įvairių ACS712 srovės jutiklių, todėl pasirinkite pagal savo poreikius. Duonos lentos schemoje aš parodžiau šviesos diodą kaip apkrovą, tačiau faktinė apkrova yra kitokia. DARBO PRINCIPAS: „Hall“efektas yra įtampos skirtumo („Hall“įtampos) sukūrimas per elektros laidininką, skersai laidininko elektros srovės ir magnetinis laukas statmenas srovei. Norėdami sužinoti daugiau apie „Hall Effect“jutiklį, spustelėkite čia. ACS 712 jutiklio duomenų lapą rasite čia. Iš 1 duomenų lapo. ACS 712 matuoja teigiamus ir neigiamus 20 amperų, atitinkančius analoginį 100 mV/A išėjimą. 2. Išėjimo įtampa nėra bandomosios srovės VCC/2 = 5v/2 = 2,5V 1 000 V jutikliai, kurių intervalas yra 2 sek., ir tada apskaičiuoja vidutiniškai surinktus mėginių duomenis (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // skaityti srovę iš jutiklio uždelsimo (2); } sample2 = sample2/150; val = (5,0*pavyzdys2)/1024,0; faktinė vertė = val-2,5; // poslinkio įtampa yra 2,5v amperų = faktinė vertė*10;

5 žingsnis: laiko matavimas

Laiko matavimui nereikia jokios išorinės aparatūros, nes pats ARDUINO turi įmontuotą laikmatį. Funkcija millis () grąžina milisekundžių skaičių nuo tada, kai „Arduino“plokštė pradėjo vykdyti dabartinę programą. AARDUINO KODAS: ilgas milisec = millis (); // apskaičiuoti laiką milisekundėmis ilgas laikas = milisec/1000; // konvertuoti milisekundes į sekundes

6 žingsnis: Kaip ARDUINO apskaičiuoja galią ir energiją

totamps = totamps+amps; // apskaičiuoti bendrą stiprumą avgamps = totamps/time; // vidutinis amperis amphr = (avgamps*laikas)/3600; // ampervalandas vatai = įtampa*amperai; // galia = įtampa*srovės energija = (vatai*laikas)/3600; Watt-sec vėl konvertuojamas į Watt-Hr, padalijant 1 val (3600 sek.) // energija = (vatas*laikas)/(1000*3600); skaitymui kWh

7 žingsnis: vizualinis išėjimas

Vizualinis išėjimas
Vizualinis išėjimas

Visus rezultatus galima pamatyti nuosekliajame monitoriuje arba naudojant LCD. Visiems ankstesnių veiksmų rezultatams parodyti naudoju 16x2 simbolių skystųjų kristalų ekraną. Schemas žr. Duonos lentos schemą, pateiktą aukščiau. Prijunkite skystųjų kristalų ekraną prie ARDUINO, kaip nurodyta toliau: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND kaištis + rezistorius arba potenciometras 4. RS -> Arduino kaištis 8 5. RW -> Arduino kaištis 7 6. E -> Arduino kaištis 6 7. D0 -> Arduino -neprijungtas 8. D1 -> Arduino -neprijungtas 9. D2 -> Arduino -neprijungtas 10. D3 -> Arduino -neprijungtas 11. D4 -> Arduino kaištis 5 12. D5 -> Arduino kaištis 4 13. D6 -> Arduino kaištis 3 14. D7 -> „Arduino“kaištis 2 15. A -> „Arduino“kaištis 13 + rezistorius (apšvietimo galia) 16. K -> „Arduino GND“(foninio apšvietimo įžeminimas) ARDUINO KODAS: Serijiniam monitoriui:

Serial.print („ĮTAMPA:“); Serijinis atspaudas (įtampa); Serial.println („Volt“); Serial.print („CURRENT:“); Serijinis atspaudas (stiprintuvai); Serial.println („Stiprintuvai“); Serial.print ("POWER:"); Serijinis atspaudas (vatas); Serial.println („vatai“); Serial.print („SUNAUDOTA ENERGIJA:“); Serijinis atspaudas (energija); Serial.println („vatų valanda“); Serial.println (""); // spausdinti kitus parametrų rinkinius po tuščios eilutės delsos (2000 m.); LCD: LCD ekranui pirmiausia reikia importuoti „LiquidCrystal“biblioteką į kodą. Norėdami sužinoti daugiau apie „LequidCrystal“biblioteką, spustelėkite čia. LCD pamoka - čia int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // nustatyti kaištį 9 kaip išvestį analogWrite („BackLight“, 150); // valdo foninio apšvietimo intensyvumą 0-254 lcd.begin (16, 2); // stulpeliai, eilutės. ekrano dydis lcd.clear (); // išvalyti ekraną} void loop () {lcd.setCursor (16, 1); // nustatykite žymeklį už ekrano skaičiaus lcd.print (""); // spausdinti tuščių simbolių uždelsimą (600); ////////////////////////////////////////////////////////////////////////// Spauda ir energija skystųjų kristalų ekrane/ ///////////////////////////////////////////////////////////////////, (1, 0); // nustatykite žymeklį ties 1 colio ir 1 eilutės lcd.print (vatas); lcd.print ("W"); lcd.print (įtampa); lcd.print ("V"); lcd.setCursor (1, 1); // nustatykite žymeklį į 1 colį ir 2 eilutę lcd.print (energija); lcd.print ("WH"); lcd.print (stiprintuvai); lcd.print ("A"); }

8 veiksmas: duomenų įkėlimas į Xively.com

Duomenų įkėlimas į Xively.com
Duomenų įkėlimas į Xively.com
Duomenų įkėlimas į Xively.com
Duomenų įkėlimas į Xively.com
Duomenų įkėlimas į Xively.com
Duomenų įkėlimas į Xively.com

Norėdami geriau suprasti, žiūrėkite aukščiau pateiktas ekrano kopijas. Norėdami įkelti duomenis į xively.com, pirmiausia turite atsisiųsti šią biblioteką „HttpClient“: spustelėkite čia Xively: spustelėkite čia SPI: Importuoti iš arduino IDE (eskizas -> Importuoti biblioteką …) Ethernet: Importuoti iš arduino IDE ((eskizas -> Importuoti biblioteką …..) Atidarykite paskyrą naudodami https://xively.com (anksčiau pachube.com ir cosm.com) Prisiregistruokite nemokamai gauti kūrėjo paskyrą adresu

Pasirinkite vartotojo vardą, slaptažodį, nustatykite savo adresą ir laiko juostą ir tt Jūs gausite patvirtinimo el. Laišką;

tada spustelėkite aktyvinimo nuorodą, kad suaktyvintumėte savo sąskaitą. Sėkmingai atidarę paskyrą būsite nukreipti į kūrimo įrenginių puslapį

  • Spustelėkite laukelį +Pridėti įrenginį
  • Suteikite savo įrenginiui pavadinimą ir aprašymą (pvz., ENERGIJOS MONITORINGAS) ·
  • Pasirinkite privačius ar viešus duomenis (aš renkuosi privačius) ·
  • Spustelėkite Pridėti įrenginį

Pridėję įrenginį būsite nukreipti į naują puslapį, kuriame yra daug svarbios informacijos

  • Produkto ID, produkto paslaptis, serijos numeris, aktyvinimo kodas ·
  • Sklaidos kanalo ID, „FeedURL“, API pabaigos taškas (sklaidos kanalo ID naudojamas ARDUINO kode)
  • Pridėkite kanalų (pasirinkite „ENERGY“ir „POWER“, bet galite pasirinkti pagal savo pasirinkimą) Nurodykite parametro vienetą ir simbolį ·
  • Pridėkite savo vietą ·
  • API raktai (naudojami ARDUINO kode, venkite bendrinti šį numerį) ·
  • Aktyvikliai („ping aweb“puslapis, kai įvyko įvykis, pvz., Kai energijos suvartojimas viršija tam tikrą ribą)

9 veiksmas: „Xively“ir „ARDUINO“kodas

Čia pridėjau visą energijos skaitiklio kodą (beta versija), išskyrus SD kortelės duomenų registravimą, kuris yra pridėtas atskirai kitame žingsnyje. / ** Energijos stebėjimo duomenų įkėlimas į xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Įveskite savo Xively API raktą #define FEED_ID xxxxxxxxx // Įveskite savo Xively feed ID // savo MAC adresą „Ethernet“skydo baitas „Mac“ = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analoginis kaištis, kurį stebime (0 ir 1 naudoja Ethernet skydas) int sensorPin = 2; unsigned long lastConnectionTime = 0; // paskutinį kartą prisijungėme prie „Cosm const unsigned long connectionInterval“= 15000; // vėlavimas tarp prisijungimo prie „Cosm“milisekundėmis // „Cosm“bibliotekos inicijavimas // Apibrėžkite mūsų duomenų srauto ID eilutę char sensorId = "POWER"; char sensorId2 = "ENERGIJA"; XivelyDatastream duomenų srautai = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Įvyniokite duomenų srautą į sklaidos kanalą XivelyFeed feed (FEED_ID, duomenų srautai, 2/ * duomenų srautų skaičius */); „EthernetClient“klientas; XivelyClient xivelyclient (klientas); void setup () {Serial.begin (9600); Serial.println („Tinklo inicijavimas“); while (Ethernet.begin (mac)! = 1) {Serial.println ("Klaida gaunant IP adresą per DHCP, bandant dar kartą …"); vėlavimas (15000); } Serial.println ("Tinklas inicijuotas"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // siųsti duomenis į xively getData (); // skaityti duomenų srautą iš xively lastConnectionTime = millis (); // atnaujinti ryšio laiką, kad palauktume, kol vėl prisijungsime}} void sendData () {int sensor1 = watt; int sensor2 = energija; duomenų srautai [0].setFloat (sensor1); // galios vertės duomenų srautai [1].setFloat (sensor2); // energetinė vertė Serial.print ("Skaitymo galia"); Serial.println (duomenų srautai [0].getFloat ()); Serial.print („Skaitymo energija“); Serial.println (duomenų srautai [1].getFloat ()); Serial.println („Įkėlimas į Xively“); int ret = xivelyclient.put (sklaidos kanalas, API_KEY); Serial.print ("PUT grąžinimo kodas:"); Serial.println (ret); Serial.println (); } // gauti duomenų srauto vertę iš xively, atspausdindami gautą vertę void getData () {Serial.println ("Skaitydami duomenis iš Xively"); int ret = xivelyclient.get (sklaidos kanalas, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Duomenų srautas yra:"); Serial.println (kanalas [0]); Serial.print ("Galios vertė yra:"); Serial.println (feed [0].getFloat ()); Serial.print ("Duomenų srautas yra:"); Serial.println (kanalas [1]); Serial.print ("Energetinė vertė yra:"); Serial.println (feed [1].getFloat ()); } Serial.println ();

10 veiksmas: duomenų registravimas SD kortelėje

Norėdami išsaugoti duomenis SD kortelėje, turite importuoti SD biblioteką Norėdami gauti daugiau informacijos apie SD biblioteką, spustelėkite čia Jei norite sužinoti daugiau apie SD biblioteką, spustelėkite čia. rašymo kodas LCD ekranui ir duomenims įkelti xively.com. Bet aš bandau patobulinti beta versijos kodą, kad viename kode būtų visos funkcijos (LCD ekranas, Xively duomenų įkėlimas ir duomenų saugojimas SD kortelėje). Duomenų registravimo kodas pridedamas žemiau. Jei kas nors parašo geresnį kodą, pakeisdami savo kodą, pasidalykite su manimi. Tai mano pirmasis techninis nurodymas, jei kas nors randa kokių nors klaidų, nedvejodami rašykite komentarus.. kad galėčiau tobulėti. Jei rasite šio projekto tobulinimo sričių, komentuokite arba praneškite man, taigi projektas bus galingesnis. Manau, kad tai bus naudinga ir kitiems, ir man.

123D grandinių konkursas
123D grandinių konkursas
123D grandinių konkursas
123D grandinių konkursas

Trečiasis prizas 123D grandinių konkurse

Rekomenduojamas: