Obsah:

ARDUINO ENERGY METER: 10 kroků (s obrázky)
ARDUINO ENERGY METER: 10 kroků (s obrázky)

Video: ARDUINO ENERGY METER: 10 kroků (s obrázky)

Video: ARDUINO ENERGY METER: 10 kroků (s obrázky)
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Červenec
Anonim
Image
Image
ARDUINO ENERGETICKÝ MĚŘIČ
ARDUINO ENERGETICKÝ MĚŘIČ
ARDUINO ENERGETICKÝ MĚŘIČ
ARDUINO ENERGETICKÝ MĚŘIČ

[Přehrát video]

Patřím do vesnice Urísa v Indii, kde je časté výpadky proudu velmi běžné. Každému z toho brání v životě. Během mých dětských dnů bylo pokračující studium po setmění skutečnou výzvou. Kvůli tomuto problému jsem experimentálně navrhl sluneční soustavu pro svůj domov. K osvětlení několika jasných LED jsem použil solární panel o výkonu 10 W, 6 V. Poté, co čelil mnoha těžkostem, byl projekt úspěšný. Poté jsem se rozhodl sledovat napětí, proud, výkon a energii zapojenou do systému. To přineslo myšlenku navrhnout ENERGY METER. Jako jádro tohoto projektu jsem použil ARDUINO, protože do jeho IDE je velmi snadné psát kód a na internetu je k dispozici obrovské množství open source knihoven, které lze použít podle Experimentoval jsem s projektem pro velmi malý (10Watt) solární systém, ale lze jej snadno upravit pro použití v systému s vyšším hodnocením.

Všechny mé projekty najdete na:

Funkce: Monitorování energie pomocí 1. LCD displeje 2. přes internet (Xively upload) 3. Záznam dat na SD kartu

Můžete vidět můj nový instruktovatelný SOLAR CHARGE CONTROLLER ARDUINO MPPT (verze-3.0)

Můžete si také prohlédnout mé další pokyny

ARDUINO SOLAR CHARGE CONTROLLER (Verze 2.0)

ARDUINO SOLAR CHARGE CONTROLLER (verze 1)

Krok 1: Požadované součásti:

Požadované díly
Požadované díly

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

3. 16x2 CHARACTER LCD (Amazon)

4. AKTUÁLNÍ SENZOR ACS 712 (Amazon) 4. Rezistory (10k, 330ohm) (Amazon) 5. 10K POTENTIOMETR (Amazon) 6. JUMPER WIRES (Amazon) 7. KABEL ETHERNET (Amazon) 8. BREAD BOARD (Amazon)

Krok 2: Energie a energie

Výkon: Výkon je součinem napětí (voltů) a proudu (Amp) P = VxI Jednotka výkonu je Watt nebo KW Energie: Energie je součinem výkonu (watt) a času (hodina) E = Pxt Jednotka energie je Watt hodina nebo Kilowatt Hodina (kWh) Z výše uvedeného vzorce je zřejmé, že pro měření energie potřebujeme tři parametry 1. Napětí 2. Proud 3. Čas

Krok 3: Měření napětí

Měření napětí
Měření napětí
Měření napětí
Měření napětí
Měření napětí
Měření napětí

Napětí se měří pomocí obvodu děliče napětí. Jelikož je vstupní napětí analogového pinu ARDUINO omezeno na 5 V, navrhl jsem dělič napětí tak, aby výstupní napětí z něj mělo být menší než 5 V. Moje baterie použitá k ukládání energie ze solárního panelu je ohodnocena 6v, 5,5Ah. Takže musím 6,5v snížit na napětí nižší než 5V. Použil jsem R1 = 10k a R2 = 10K. Hodnota R1 a R2 může být nižší, ale problém je v tom, že když je odpor nízký, protéká jím proud v důsledku toho, že se velké množství energie (P = I^2R) rozptýlí ve formě tepla. Lze tedy zvolit různé hodnoty odporu, ale je třeba dbát na minimalizaci ztráty výkonu napříč odporem. Vout = R2/(R1+R2)*Vbat Vbat = 6,5 při plném nabití R1 = 10k a R2 = 10k Vout = 10/(10+10)*6,5 = 3,25v, což je nižší než 5v a vhodné pro analogový pin ARDUINO Ukázalo se, že 9voltová baterie v obvodu s obnaženou deskou slouží pouze pro připojení vodičů. Skutečná baterie, kterou jsem použil, je olověná baterie 6 V, 5,5 Ah. Kalibrace napětí: Když je baterie plně nabitá (6,5 V), dostaneme a Vout = 3,25 V a nižší hodnota pro jiné nižší napětí baterie. AEDUINO ADC převádí analogový signál na odpovídající digitální aproximaci. Když je napětí baterie 6,5 V, dostal jsem 3,25 V z děliče napětí a sample1 = 696 v sériovém monitoru, kde sample1 je hodnota ADC odpovídá 3,25 v. Pro lepší pochopení jsem připojil simulaci v reálném čase pomocí 123D.obvod pro měření napětí Kalibrace: 3,25 V odpovídá 696 1 je ekvivalentní 3,25/696 = 4,669 mv Vout = (4,669*vzorek1)/1000 voltů Aktuální napětí baterie = (2*Vout) voltARDUINO CODE: // odebírání 150 vzorků z děliče napětí v intervalu 2 s a poté průměrují data vzorků shromážděná pro (int i = 0; i <150; i ++) {sample1 = sample1+analogRead (A2); // odečtěte napětí ze zpoždění dělicího obvodu (2); } sample1 = sample1/150; napětí = 4,669*2*vzorek1/1000;

Krok 4: Měření proudu

Měření proudu
Měření proudu
Měření proudu
Měření proudu

Pro měření proudu jsem použil Hallovo proudové čidlo ACS 712 (20 A). Na trhu je k dispozici čidlo ACS712 s různým proudovým rozsahem, proto vybírejte podle svého požadavku. V diagramu chlebové desky jsem ukázal LED jako zátěž, ale skutečné zatížení je jiné. PRINCIP PRÁCE: Hallův efekt je vytvoření rozdílu napětí (Hallovo napětí) přes elektrický vodič, příčně k elektrickému proudu ve vodiči a magnetické pole kolmé na proud. Chcete -li se dozvědět více o senzoru s Hallovým efektem, klikněte zde Datový list senzoru ACS 712 najdete zde Z datového listu 1. ACS 712 měří kladné a záporné 20 A, což odpovídá analogovému výstupu 100 mV/A 2. Žádný testovací proud přes výstupní napětí není VCC/2 = 5v/2 = 2,5V Kalibrace: Analogové čtení produkuje hodnotu 0-1023, což odpovídá 0v až 5v Takže analogové čtení 1 = (5/1024) V = 4,89mv Hodnota = (4,89*Hodnota analogového čtení)/ 1000 V Ale podle datových listů je offset 2,5 V (při nulovém proudu získáte 2,5 V z výstupu snímače) Skutečná hodnota = (hodnota-2,5) V Proud v amp = skutečná hodnota*10 ARDUINO CODE: // odebírání 150 vzorků z senzory s intervalem 2 s a poté průměrují data vzorků shromážděná pro (int i = 0; i <150; i ++) {sample2+= analogRead (A3); // čtení proudu ze zpoždění senzoru (2); } sample2 = sample2/150; val = (5,0*vzorek2)/1024,0; skutečná hodnota = val-2,5; // ofsetové napětí je 2,5v ampéry = skutečná hodnota*10;

Krok 5: Měření času

Pro měření času není potřeba žádný externí hardware, protože ARDUINO má vestavěný časovač. Funkce millis () vrací počet milisekund od doby, kdy na desce Arduino začal běžet aktuální program. ARDUINO CODE: long milisec = millis (); // vypočítat čas v milisekundách long time = milisec/1000; // převod milisekund na sekundy

Krok 6: Jak ARDUINO vypočítá výkon a energii

totampy = totampy+zesilovače; // vypočítat celkový zesilovač avgamp = totamp/čas; // průměrné zesilovače amphr = (průměr*času)/3600; // amp-hodina watt = napětí*ampéry; // výkon = napětí*aktuální energie = (watt*čas)/3600; Watt-sec se opět převede na Watt-Hr dělením 1 hodiny (3600 s) // energie = (watt*čas)/(1000*3600); pro čtení v kWh

Krok 7: Vizuální výstup

Vizuální výstup
Vizuální výstup

Všechny výsledky lze zobrazit na sériovém monitoru nebo pomocí LCD. Pro zobrazení všech výsledků získaných v předchozích krocích jsem použil 16x2 znakový LCD. Schémata viz výše uvedený obvod desky chleba. Připojte LCD s ARDUINO, jak je uvedeno níže: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + odpor nebo potenciometr 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino -Not Connected 8. D1 -> Arduino -nepřipojeno 9. D2 -> Arduino -není připojeno 10. D3 -> Arduino -není připojeno 11. D4 -> pin Arduino 5 12. D5 -> pin Arduino 4 13. D6 -> pin Arduino 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + odpor (výkon podsvícení) 16. K -> Arduino GND (uzemnění) ARDUINO CODE: Pro sériový monitor:

Serial.print ("NAPĚTÍ:"); Serial.print (napětí); Serial.println ("Volt"); Serial.print ("AKTUÁLNÍ:"); Serial.print (zesilovače); Serial.println ("zesilovače"); Serial.print ("NAPÁJENÍ:"); Serial.print (watt); Serial.println ("Watt"); Serial.print ("SPOTŘEBA ENERGIE:"); Serial.print (energie); Serial.println ("Watt-Hour"); Serial.println (""); // tisk dalších sad parametrů po zpoždění prázdného řádku (2000); Pro LCD: Pro LCD displej musíte nejprve importovat do kódu knihovnu "LiquidCrystal". Chcete -li se dozvědět více o knihovně LequidCrystal, klikněte zde Pro výukový program LCD klikněte zdeNásledující kód je formát, který na LCD zobrazí všechny výpočty výkonu a energie #include lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9; void setup () {pinMode (backLight, OUTPUT); // nastavit pin 9 jako výstup analogWrite (backLight, 150); // ovládá intenzitu podsvícení 0-254 lcd.begin (16, 2); // sloupce, řádky. velikost displeje lcd.clear (); // vymazat obrazovku} void loop () {lcd.setCursor (16, 1); // nastavení kurzoru mimo počet zobrazení lcd.print (""); // tisk zpoždění prázdných znaků (600); ////////////////////////////////////////////// síla tisku a energie na LCD/ ///////////////////////////////////////////////////// lcd.setCursor (1, 0); // nastavte kurzor na 1. sloupec a 1. řádek lcd.print (watt); lcd.print ("W"); lcd.print (napětí); lcd.print ("V"); lcd.setCursor (1, 1); // nastavte kurzor na 1. sloupec a 2. řádek lcd.print (energie); lcd.print ("WH"); lcd.print (zesilovače); lcd.print ("A"); }

Krok 8: Nahrání dat na Xively.com

Nahrávání dat na Xively.com
Nahrávání dat na Xively.com
Nahrávání dat na Xively.com
Nahrávání dat na Xively.com
Nahrávání dat na Xively.com
Nahrávání dat na Xively.com

Pro lepší pochopení viz výše uvedené screenshoty. Pro nahrávání dat na xively.com je třeba nejprve stáhnout následující knihovnu HttpClient: klikněte semXively: klikněte semSPI: Import z Arduino IDE (skica -> Importovat knihovnu …..) Ethernet: Import z Arduina IDE ((skica -> Importovat knihovnu …..) Otevřete si účet na https://xively.com (dříve pachube.com a cosm.com) Zaregistrujte si bezplatný účet vývojáře na

Vyberte uživatelské jméno, heslo, nastavte adresu a časové pásmo atd. Obdržíte potvrzovací e -mail;

poté aktivujte svůj účet kliknutím na aktivační odkaz. Po úspěšném otevření účtu budete přesměrováni na stránku Vývojová zařízení

  • Klikněte na pole +Přidat zařízení
  • Pojmenujte zařízení a popis (např. MONITOROVÁNÍ ENERGIE) ·
  • Vyberte soukromá nebo veřejná data (volím soukromá) ·
  • Klikněte na Přidat zařízení

Po přidání zařízení budete přesměrováni na novou stránku, kde je mnoho důležitých informací

  • ID produktu, tajemství produktu, sériové číslo, aktivační kód ·
  • ID kanálu, FeedURL, koncový bod API (ID kanálu se používá v kódu ARDUINO)
  • Přidat kanály (IChoose ENERGY a POWER, ale můžete si vybrat podle svého výběru) Uveďte jednotku a symbol pro parametr ·
  • Přidejte svou polohu ·
  • Klíče API (používané v kódu ARDUINO, vyvarujte se sdílení tohoto čísla) ·
  • Spouštěče (stránka ping na webu, když došlo k události, například když spotřeba energie překročí určitý limit)

Krok 9: Xively a kód ARDUINO

Zde jsem připojil kompletní kód (beta verze) pro měřič energie kromě protokolování dat na kartě SD, který je připojen samostatně v dalším kroku. / ** Nahrávání dat monitorování energie do xively **/ #include #include #include #include #define API_KEY "xxxxxxxx" // Zadejte svůj klíč Xively API #define FEED_ID xxxxxxxxx // Zadejte své Xively feed ID // MAC adresu pro váš Ethernetový štít byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Analogový pin, který monitorujeme (0 a 1 používá ethernetový štít) int sensorPin = 2; unsigned long lastConnectionTime = 0; // minule jsme se připojili k Cosm const unsigned long connectionInterval = 15000; // zpoždění mezi připojením ke Cosmu v milisekundách // inicializace knihovny Cosm // definování řetězce pro náš datastream ID char sensorId = "POWER"; char sensorId2 = "ENERGIE"; Datové toky XivelyDatastream = {XivelyDatastream (sensorId, strlen (sensorId), DATASTREAM_FLOAT), XivelyDatastream (sensorId2, strlen (sensorId2), DATASTREAM_FLOAT), DATASTREAM_FLOAT),}; // Zabalte datový tok do kanálu XivelyFeed feed (FEED_ID, datastreams, 2/ * počet datových toků */); Klient EthernetClient; XivelyClient xivelyclient (klient); neplatné nastavení () {Serial.begin (9600); Serial.println ("Inicializace sítě"); while (Ethernet.begin (mac)! = 1) {Serial.println ("Chyba při získávání adresy IP přes DHCP, pokus znovu …"); zpoždění (15 000); } Serial.println ("Síť inicializována"); Serial.println (); } void loop () {if (millis () - lastConnectionTime> connectionInterval) {sendData (); // odeslání dat na xively getData (); // přečtěte si datový tok zpět z xively lastConnectionTime = millis (); // aktualizujte čas připojení, takže počkáme, než se znovu připojíme}} void sendData () {int sensor1 = watt; int senzor2 = energie; datové toky [0].setFloat (senzor1); // datové toky hodnoty výkonu [1].setFloat (senzor2); // energetická hodnota Serial.print ("Číst energii"); Serial.println (datové toky [0].getFloat ()); Serial.print ("Číst energii"); Serial.println (datové toky [1].getFloat ()); Serial.println ("Odesílání do Xively"); int ret = xivelyclient.put (feed, API_KEY); Serial.print ("Vložit návratový kód:"); Serial.println (ret); Serial.println (); } // získejte hodnotu datového toku z xively, vytiskneme hodnotu, kterou jsme obdrželi void getData () {Serial.println ("Čtení dat z Xively"); int ret = xivelyclient.get (feed, API_KEY); Serial.print ("ZÍSKEJTE návratový kód:"); Serial.println (ret); if (ret> 0) {Serial.print ("Datastream is:"); Serial.println (feed [0]); Serial.print ("Hodnota výkonu je:"); Serial.println (feed [0].getFloat ()); Serial.print ("Datastream je:"); Serial.println (feed [1]); Serial.print („Energetická hodnota je:“); Serial.println (feed [1].getFloat ()); } Serial.println ();

Krok 10: Záznam dat na SD kartu

Pro ukládání dat na kartu SD musíte importovat knihovnu SD. Pro výuku klikněte sem Chcete -li vědět více o knihovně SD, klikněte zde Kód pro ukládání dat na kartu SD se zapisuje samostatně, protože v ARDUINO UNO nemám po psaní kódu pro LCD displej a odesílání dat xively.com. Ale snažím se vylepšit kód beta verze tak, aby jeden kód mohl obsahovat všechny funkce (LCD displej, Xively nahrávání dat a ukládání dat na SD kartu). Kód pro záznam dat je přiložen níže. Pokud někdo napíše lepší kód úpravou mého kódu, prosím, podělte se se mnou. Toto je můj první technický návod, pokud v něm někdo najde nějakou chybu, neváhejte komentovat.. abych se mohl zlepšit. Pokud najdete v tomto projektu oblasti zlepšení, prosím, vyjádřete se nebo mi napište, takže projekt bude silnější. Myslím, že to bude užitečné pro ostatní i pro mě.

Soutěž o obvody 123D
Soutěž o obvody 123D
Soutěž o obvody 123D
Soutěž o obvody 123D

Třetí cena v soutěži obvodů 123D

Doporučuje: