Sisällysluettelo:

ARDUINO -ENERGIAMITTARI: 10 vaihetta (kuvilla)
ARDUINO -ENERGIAMITTARI: 10 vaihetta (kuvilla)

Video: ARDUINO -ENERGIAMITTARI: 10 vaihetta (kuvilla)

Video: ARDUINO -ENERGIAMITTARI: 10 vaihetta (kuvilla)
Video: Хватит Покупать в МАГАЗИНЕ! Сделайте САМИ! 3 Ингредиента + 10 Минут! Сыр в Домашних Условиях 2024, Marraskuu
Anonim
Image
Image
ARDUINO ENERGIAMITTARI
ARDUINO ENERGIAMITTARI
ARDUINO ENERGIAMITTARI
ARDUINO ENERGIAMITTARI

[Toista video]

Kuulun Odishan kylään Intiassa, jossa usein sähkökatko on hyvin yleistä. Se haittaa jokaisen elämää. Lapsuudessani opintojen jatkaminen hämärän jälkeen oli todellinen haaste. Tämän ongelman vuoksi suunnittelin kokeellisesti aurinkokunnan kotiini. Käytin 10 W, 6 V aurinkopaneelia muutaman kirkkaan LED -valon valaisemiseen. Monien vaikeuksien jälkeen projekti onnistui. Sitten päätin seurata järjestelmän jännitettä, virtaa, tehoa ja energiaa. Tästä syntyi idea suunnitella ENERGIAMITTARI. Käytin ARDUINOa tämän projektin ytimessä, koska sen IDE -koodiin on helppo kirjoittaa ja Internetissä on valtava määrä avoimen lähdekoodin kirjastoa, jota voidaan käyttää Olen kokeillut projektia hyvin pienelle (10 W) aurinkokunnalle, mutta sitä voidaan helposti muuttaa käytettäväksi korkeamman luokitusjärjestelmän kanssa.

Löydät kaikki projektini osoitteesta:

Ominaisuus: Energian valvonta 1. LCD -näytön avulla 2. Internetin kautta (Xively upload) 3. Tietojen kirjaaminen SD -kortille

Näet uuden ohjattavan ARDUINO MPPT SOLAR CHARGE CONTROLLER (versio-3.0)

Näet myös muut ohjeeni

ARDUINO SOLAR CHARGE CONTROLLER (Versio 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (Versio-1)

Vaihe 1: Tarvittavat osat:

Tarvittavat osat
Tarvittavat osat

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

3. 16x2 CHARACTER LCD (Amazon)

4. ACS 712 CURRENT SENSOR (Amazon) 4. RESISTORS (10k, 330ohm) (Amazon) 5. 10K POTENTIOMETRI (Amazon) 6. JUMPER WIRES (Amazon) 7. ETHERNET -KAAPELI (Amazon) 8. BREAD BOARD (Amazon)

Vaihe 2: Virta ja energia

Teho: Teho on jännitteen (voltti) ja virran (A) tulo P = VxI Tehoyksikkö on Wattia tai KW Energia: Energia on tehon (W) ja ajan (Tunti) tulo Tunti (kWh) Yllä olevasta kaavasta käy ilmi, että energian mittaamiseen tarvitaan kolme parametria 1. Jännite 2. Virta 3. Aika

Vaihe 3: Jännitteen mittaus

Jännitteen mittaus
Jännitteen mittaus
Jännitteen mittaus
Jännitteen mittaus
Jännitteen mittaus
Jännitteen mittaus

Jännite mitataan jännitteenjakajapiirin avulla, koska analoginen ARDUINO -nastainen tulojännite on rajoitettu 5 V: iin, suunnittelin jännitteenjakajan siten, että sen lähtöjännitteen tulisi olla alle 5 V. aurinkopaneelin teho on 6v, 5,5Ah, joten minun on poistettava tämä 6,5v alas 5V jännitteeseen. Käytin R1 = 10k ja R2 = 10K. R1: n ja R2: n arvo voi olla pienempi, mutta ongelma on se, että kun vastus on pieni, suurempi virta kulkee sen läpi, minkä seurauksena suuri määrä tehoa (P = I^2R) haihtuu lämmön muodossa. Joten voidaan valita eri vastusarvo, mutta on huolehdittava siitä, että tehohäviö minimoidaan vastuksen yli. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 täysin ladattuna ovat osoittaneet 9 voltin akun paljaassa piirilevyssä vain esim. johtojen liittämiseksi, mutta varsinainen akku, jota käytin, on 6 voltin, 5,5 Ah: n lyijyakku. jännitteen kalibrointi: a Vout = 3,25 V ja pienempi arvo muille alhaisemmille akkujännitteille. AEDUINO ADC muuntaa analogisen signaalin vastaavaksi digitaaliseksi likimääräiseksi. Kun akun jännite on 6,5 V, sain 3,25 V: n jännitteenjakajasta ja näyte1 = 696 sarjamonitorissa, jossa näyte 1 on ADC -arvo vastaa 3,25 V: n ymmärtämiseksi olen liittänyt reaaliaikaisen simulaation 123D. 3.25v vastaa arvoa 696 1 vastaa 3.25/696 = 4.669mv Vout = (4.669*näyte1)/1000 volttia Akun todellinen jännite = (2*Vout) volttia ja keskiarvo sitten kerätyt näytetiedot (int i = 0; i <150; i ++) {näyte1 = näyte1+analoginen lukema (A2); // lukea jännite jakajapiirin viiveestä (2); } näyte1 = näyte1/150; jännite = 4,669*2*näyte1/1000;

Vaihe 4: Virran mittaus

Nykyinen mittaus
Nykyinen mittaus
Nykyinen mittaus
Nykyinen mittaus

Virranmittauksessa käytin Hall Effect -virtavirtasensoria ACS 712 (20 A). Markkinoilla on erilaisia ACS712 -anturia, joten valitse tarpeidesi mukaan. Leipälevykaaviossa olen osoittanut LEDin kuormana, mutta todellinen kuormitus on erilainen. magneettikenttä kohtisuorassa virtaan nähden. Saat lisätietoja Hall Effect -anturista napsauttamalla tätä. ACS 712 -anturin tietolomake löytyy täältä Tietolomakkeesta 1. ACS 712 mittaa positiivisia ja negatiivisia 20 ampeereja, jotka vastaavat analogista lähtöä 100 mV/A 2. Lähtöjännitteestä ei tule testivirtaa VCC/2 = 5v/2 = 2,5V Kalibrointi: Analoginen lukema tuottaa arvon 0-1023, joka vastaa arvoa 0v-5v. 1000 V Mutta tietolomakkeiden mukaan siirtymä on 2,5 V (kun virran nolla saa 2,5 V anturin lähdöstä) Todellinen arvo = (arvo-2,5) V Virta ampeereissa = todellinen arvo*10ARDUINO CODE: // 150 näytteen ottaminen anturit, joiden aikaväli on 2 sekuntia, ja keskiarvoa sitten kerätyt näytetiedot (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // lukea virta anturin viiveestä (2); } näyte2 = näyte2/150; val = (5,0*näyte2)/1024,0; todellinen arvo = val-2,5; // offset -jännite on 2,5 V ampeeria = todellinen arvo*10;

Vaihe 5: Ajan mittaus

Ajan mittaamiseen ei tarvita ulkoisia laitteita, koska ARDUINO itse sisältää ajastimen. Funktio millis () palauttaa millisekuntien lukumäärän sen jälkeen, kun Arduino -kortti aloitti käynnissä olevan ohjelman. // laske aika millisekunteina pitkä aika = milisec/1000; // muuntaa millisekunteja sekunteiksi

Vaihe 6: Kuinka ARDUINO laskee tehon ja energian

totamps = totamps+vahvistimet; // laskea vahvistimien kokonaismäärä avgamps = totamps/time; // keskimääräinen vahvistin amphr = (avgamps*aika)/3600; // ampeerituntia watt = jännite*ampeeria; // teho = jännite*nykyinen energia = (wattiaika)/3600; Watt-sec muunnetaan jälleen Watt-Hr: ksi jakamalla 1 h (3600 s) // energia = (wattiaika)/(1000*3600); lukemiseen kWh

Vaihe 7: Visuaalinen lähtö

Visuaalinen lähtö
Visuaalinen lähtö

Kaikki tulokset voidaan visualisoida sarjamonitorissa tai käyttämällä nestekidenäyttöä. Käytin 16x2 merkin nestekidenäytössä kaikkien edellisissä vaiheissa saatujen tulosten näyttämistä. Katso kaaviot yllä olevasta leipälevyn piiristä. Kytke nestekidenäyttö ARDUINOon alla olevan mukaisesti: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND -tappi + vastus tai potentiometri 4. RS -> Arduino -nasta 8 5. RW -> Arduino -nasta 7 6. E -> Arduino -nasta 6 7. D0 -> Arduino -Ei kytketty 8 D1 -> Arduino -Ei kytketty 9. D2 -> Arduino -Ei kytketty 10. D3 -> Arduino -Ei kytketty 11. D4 -> Arduino -nasta 5 12. D5 -> Arduino -nasta 4 13. D6 -> Arduino -nasta 3 14. D7 -> Arduino -nasta 2 15. A -> Arduino -nasta 13 + vastus (taustavalon teho) 16. K -> Arduino GND (taustavalon maa) ARDUINO -KOODI: Sarjamonitorille:

Serial.print ("JÄNNITE:"); Sarjajälki (jännite); Serial.println ("Volt"); Serial.print ("CURRENT:"); Sarjajälki (vahvistimet); Serial.println ("Vahvistimet"); Serial.print ("POWER:"); Sarjajälki (wattia); Serial.println ("Watt"); Serial.print ("ENERGIA KULUTETTU:"); Sarjajälki (energia); Serial.println ("Watt-tunti"); Serial.println (""); // tulosta seuraavat parametrisarjat tyhjän riviviiveen jälkeen (2000); LCD: LCD -näyttö: sinun on ensin tuotava koodiin "LiquidCrystal" -kirjasto. Saat lisätietoja LequidCrystal -kirjastosta napsauttamalla tätä. LCD -opetusohjelma napsauttamalla tätä Seuraava koodi on muoto, joka näyttää LCD -näytössä kaikki tehon ja energian laskelmat #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (taustavalo, OUTPUT); // aseta nasta 9 lähdöksi analogWrite (taustavalo, 150); // ohjaa taustavalon voimakkuutta 0-254 lcd. alku (16, 2); // sarakkeet, rivit. näytön koko lcd.clear (); // tyhjennä näyttö} void loop () {lcd.setCursor (16, 1); // aseta kohdistin näytön lukumäärän ulkopuolelle lcd.print (""); // tulosta tyhjän merkin viive (600); ////////////////////////////////////////////////////////////////////////// Tulostusteho ja energia nestekidenäytölle/ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// (1, 0); // aseta kohdistin kohtaan 1. col ja 1. rivi lcd.print (watt); lcd.print ("W"); lcd.print (jännite); lcd.print ("V"); lcd.setCursor (1, 1); // aseta kohdistin kohtaan 1. kol. ja 2. rivi lcd.print (energia); lcd.print ("WH"); lcd.print (vahvistimet); lcd.print ("A"); }

Vaihe 8: Tietojen lataaminen Xively.com -sivustoon

Tietojen lataaminen Xively.com -sivustoon
Tietojen lataaminen Xively.com -sivustoon
Tietojen lataaminen Xively.com -sivustoon
Tietojen lataaminen Xively.com -sivustoon
Tietojen lataaminen Xively.com -sivustoon
Tietojen lataaminen Xively.com -sivustoon

Katso yllä olevat kuvakaappaukset saadaksesi paremman käsityksen. Jos haluat ladata tietoja osoitteeseen xively.com, seuraava kirjasto ladataan ensin HttpClient: napsauta tätä Xively: napsauta tätä SPI: Tuo arduino IDE: stä (luonnos -> Tuo kirjasto…..) Ethernet: Tuo arduinosta IDE ((luonnos -> Tuo kirjasto…..) Avaa tili osoitteessa https://xively.com (aiemmin pachube.com ja cosm.com) Hanki ilmainen kehittäjätili osoitteessa

Valitse käyttäjätunnus, salasana, aseta osoite ja aikavyöhyke jne. Saat vahvistussähköpostin;

napsauta sitten aktivointilinkkiä aktivoidaksesi tilisi. Kun olet onnistuneesti avannut tilin, sinut ohjataan Kehityslaitteet -sivulle

  • Napsauta +Lisää laite -ruutua
  • Anna laitteelle nimi ja kuvaus (esim. GENERGY MONITORING) ·
  • Valitse yksityiset tai julkiset tiedot (minä valitsen yksityiset) ·
  • Napsauta Lisää laite

Laitteen lisäämisen jälkeen sinut ohjataan uudelle sivulle, jossa on monia tärkeitä tietoja

  • Tuotetunnus, tuotesalaisuus, sarjanumero, aktivointikoodi ·
  • Syötetunnus, FeedURL, API -päätepiste (syötteen tunnusta käytetään ARDUINO -koodissa)
  • Lisää kanavia (IChoose ENERGY ja POWER, mutta voit valita valintasi mukaan) Anna parametrin yksikkö ja symboli ·
  • Lisää sijainti ·
  • API -avaimet (käytetään ARDUINO -koodissa, vältä tämän numeron jakamista) ·
  • Laukaisimet (ping aweb -sivu tapahtuman sattuessa, kuten kun energiankulutus ylittää tietyn rajan)

Vaihe 9: Xively ja ARDUINO -koodi

Liitin tähän täydellisen koodin (beta -versio) energiamittarille lukuun ottamatta SD -kortin tietojen kirjaamista, joka on liitetty erikseen seuraavassa vaiheessa. / ** Energianseurannan tietojen lataaminen xively -palveluun **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Anna Xively -sovellusliittymäavaimesi #define FEED_ID xxxxxxxxx // Anna Xively -syötetunnuksesi // MAC -osoitteesi Ethernet -suojatavu tavu mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analoginen nasta, jota seuraamme (Ethernet -suoja käyttää 0 ja 1) int sensorPin = 2; unsigned long lastConnectionTime = 0; // kun viimeksi yhdistimme Cosm const unsigned long connectionInterval = 15000; // viive Cosm -yhteyden muodostamisen välillä millisekunteina // Alusta Cosm -kirjasto // Määritä tietovirran tunnuksen merkkijono char sensorId = "POWER"; char sensorId2 = "ENERGIA"; XivelyDatastream datastreams = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT)}; // Kääri datavirta syötteeksi XivelyFeed -syöte (FEED_ID, datavirrat, 2/ * datavirtojen määrä */); EthernetClient -asiakas; XivelyClient xivelyclient (asiakas); void setup () {Serial.begin (9600); Serial.println ("Alustava verkko"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Virhe haettaessa IP -osoitetta DHCP: n kautta, yritetään uudelleen …"); viive (15000); } Serial.println ("Verkko alustettu"); Sarja.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // lähetä tiedot xively getData (); // lukea datavirta takaisin xively lastConnectionTime = millis (); // päivitä yhteysaika, joten odotamme ennen yhdistämistä uudelleen}} void sendData () {int sensor1 = watt; int anturi2 = energia; datastreams [0].setFloat (anturi1); // tehoarvon datastreams [1].setFloat (sensor2); // energia -arvo Serial.print ("Lukuteho"); Serial.println (datastreams [0].getFloat ()); Serial.print ("Lue energia"); Serial.println (datastreams [1].getFloat ()); Serial.println ("Lataaminen Xivelyyn"); int ret = xivelyclient.put (syöte, API_KEY); Serial.print ("PUT -palautuskoodi:"); Serial.println (ret); Sarja.println (); } // hae datavirran arvon xivelystä ja tulostaa saamamme arvon void getData () {Serial.println ("Tietojen lukeminen Xivelystä"); int ret = xivelyclient.get (syöte, API_KEY); Serial.print ("GET return code:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream on:"); Serial.println (syöte [0]); Serial.print ("Tehoarvo on:"); Serial.println (syöte [0].getFloat ()); Serial.print ("Datastream on:"); Serial.println (syöte [1]); Serial.print ("Energia -arvo on:"); Serial.println (syöte [1].getFloat ()); } Sarja.println ();

Vaihe 10: Tietojen kirjaaminen SD -kortille

Jos haluat tallentaa tietoja SD -kortille, sinun on tuotava SD -kirjasto Opetusohjelma napsauttamalla tätä Saat lisätietoja SD -kirjastosta napsauttamalla tätä Koodit tietojen tallentamiseksi SD -kortille kirjoitetaan erikseen, koska minulla ei ole tarpeeksi muistia ARDUINO UNO -laitteessani. kirjoittaa koodia nestekidenäyttöön ja tietojen lataamiseen xively.com. Mutta yritän parantaa betaversiokoodia niin, että yksi koodi voi sisältää kaikki ominaisuudet (LCD -näyttö, Xively -tietojen lataaminen ja tietojen tallentaminen SD -kortille). parempi koodi muokkaamalla koodiani, jaa tämä kanssani. Tämä on ensimmäinen tekninen ohjeeni, jos joku löytää siinä virheen, voit kommentoida.. jotta voin parantaa itseäni. Jos löydät parannettavaa tässä projektissa, kommentoi tai lähetä minulle viesti, joten projekti on tehokkaampi, ja mielestäni siitä on apua muille ja minulle.

123D -piirien kilpailu
123D -piirien kilpailu
123D -piirien kilpailu
123D -piirien kilpailu

Kolmas palkinto 123D -piirikilpailussa

Suositeltava: