- Materiály potřebné pro měřič výkonu ESP32
- Měřič účinnosti založený na Arduinu a ESP32 - obvodové schéma
- Návrh desek plošných spojů pro měřič účinnosti Arduino a ESP32
- Arduino a ESP32 měřič účinnosti - kód
- Testování měřiče účinnosti založeného na Arduinu a ESP32
- Další vylepšení
Všichni víme o základním voltmetru, ampérmetru a wattmetrech, třech základních věcech, které potřebujete k měření hodnot na jakýchkoli elektronických projektech nebo obvodech. Dobrým způsobem, jak začít, může být měření napětí a proudu pomocí multimetru, ale jedním z největších problémů, kterým čelím při testování obvodu, je měření energetické účinnosti. Dnes tedy tento problém vyřešíme vytvořením měřiče účinnosti založeného na Arduinu a ESP32, který dokáže měřit vstupní napětí, vstupní proud, výstupní napětí a výstupní proud. Proto může měřit současně vstupní a výstupní výkon as těmito hodnotami můžeme snadno měřit účinnost. Dříve jsme také udělali něco velmi podobného v našem projektu Arduino Based Wattmeter, ale zde budeme měřit jak vstupní výkon, tak výstupní výkon vypočítat energetickou účinnost.
Spíše než nákup čtyř metrů pro práci, budeme schopni vyřešit tento problém začleněním schopností všech čtyř metrů do jednoho. Budování vašeho digitálního měřiče nejenže snižuje náklady, ale také vám dává kroutící se prostor pro upgrady a vylepšení. Protože k sestavení tohoto projektu používáme ESP32, můžeme tento měřič snadno zpřístupnit IoT a zaznamenávat data přes web, což je téma budoucího projektu. Po vyjmutí všech základů pojďme přímo do toho.
Poznámka: Tento měřič výkonu je určen pro stejnosměrné obvody. Pokud chcete měřit střídavý proud na vypočítanou energetickou účinnost střídavého proudu, můžete se podívat na projekty Měřič elektřiny a předplacené měřiče energie založené na IoT.
Materiály potřebné pro měřič výkonu ESP32
Obrázek níže ukazuje materiály použité k sestavení obvodu. Jelikož je to vyrobeno s velmi obecnými součástmi, měli byste být schopni najít veškerý uvedený materiál ve vašem místním hobby obchodě.
Níže jsem také uvedl komponenty spolu s požadovaným množstvím. Pokud stavíte obvod sami, důrazně doporučujeme získat všechny materiály z níže uvedeného seznamu.
- Deska ESP32 - 1
- 128 x 64 OLED - 1
- ACS712-20 IC - 2
- DC hlaveň Jack - 1
- 100uF kondenzátor - 2
- 104pF - 2
- 102pF - 2
- 10 tis., 1% - 4
- 68 tis., 1% - 2
- 6,8 tis., 1% - 2
Měřič účinnosti založený na Arduinu a ESP32 - obvodové schéma
Schéma měřiče účinnosti založené na Arduinu a ESP32 je uvedeno níže. Vytvoření tohoto obvodu je velmi jednoduché a využívá obecné komponenty.
Obsluha obvodu je velmi jednoduchá. Budeme měřit napětí a proud v tomto projektu, ale jedinečným způsobem. Měříme napětí a proud pro vstup i výstup, a proto vidíme účinnost obvodu. To se pro některé projekty velmi hodí. Příkladem může být měnič stejnosměrného proudu na stejnosměrný, kde se měření účinnosti stává povinným. Způsob fungování těchto obvodů je popsán níže.
Integrovaný obvod snímače proudu ACS712:
Jak vidíte na obrázku výše, k měření proudu používáme integrovaný obvod snímače proudu ACS712. Jedná se o velmi zajímavý integrovaný obvod, protože k měření proudu využívá Hallův efekt. Existují tři varianty tohoto integrovaného obvodu, které lze nalézt na trhu f (nebo 5A, 20A a 30A). Používáme 20A variantu tohoto a je označen jako ACS712-20.
Datový list ACS712 doporučuje pro bezproblémový provoz rozsah napětí 4,5 - 5,5. A protože budeme měřit proud pomocí ESP32, je to jen 3,3 V tolerantní, proto jsem použil dělič napětí se dvěma 10K rezistory ke snížení výstupního napětí ACS712 IC. Když IC neprotéká žádný proud, vydává na výstupu 2,5 V, a když IC prochází určitým množstvím proudu, buď sníží napětí, nebo zvýší napětí v závislosti na směru toku proudu. K měření vstupního a výstupního proudu jsme použili dva z těchto integrovaných obvodů. Podívejte se na naše předchozí projekty (níže), ve kterých jsme použili tento senzor ACS712.
- Elektroměr na bázi IoT využívající Arduino a modul Wi-Fi ESP8266
- Obvod digitálního ampérmetru využívající mikrokontrolér PIC a ACS712
Kde jsme podrobně diskutovali o fungování těchto senzorů. Můžete je zkontrolovat, pokud se chcete o těchto senzorech dozvědět více.
Dělič napětí:
Pro měření vstupního a výstupního napětí máme na vstupní a výstupní straně obvodu dva děliče napětí. Maximální napětí, které obvod může měřit, je 35 V, ale lze jej snadno změnit změnou hodnot rezistoru pro dělič napětí.
Regulátor napětí:
Generický regulátor napětí LM7805 se používá k napájení integrovaných obvodů ESP32, OLED a ACS712. Protože jej napájíme poměrně čistou energií, nepoužívají se žádné oddělovací kondenzátory, ale ke stabilizaci IC jsme použili 100uF kondenzátory na vstupu i výstupu.
ESP32 IC a OLED displej:
Jako hlavní procesor jsme použili ESP32, který je zodpovědný za všechna odečty, výpočty, vstupy a výstupy. Abychom poznali hodnoty, použili jsme také OLED displej 128 x 64.
Návrh desek plošných spojů pro měřič účinnosti Arduino a ESP32
PCB pro náš měřič účinnosti Arduino a ESP32 je navržen na jednostranné desce. Pro návrh desky plošných spojů jsem použil Eagle, ale můžete použít jakýkoli návrhový software podle vašeho výběru. 2D obrázek mého návrhu desky je zobrazen níže.
Pro zajištění správného uzemnění mezi všemi komponenty se používá dostatečné trasování země. Také jsme se ujistili, že používáme správné stopy 5V a 3,3V ke snížení hluku a zlepšení účinnosti.
- Stáhněte si PCB Design a soubory GERBER Arduino a ESP32 Based Efficiency meter
Ruční PCB:
Pro pohodlí a testování jsem vytvořil svou ručně vyrobenou verzi desky plošných spojů a je zobrazena níže. V první verzi jsem udělal několik chyb, které jsem napravil pomocí propojovacích vodičů. Ale ve finální verzi jsem je opravil, stačí si stáhnout soubory a použít je.
Arduino a ESP32 měřič účinnosti - kód
Nyní, když dobře rozumíme hardwarové stránce věci, můžeme otevřít IDE Arduino a spustit naše kódování. Účelem kódu je číst analogové napětí z pinů 35 a 33 desky ESP32. Čteme také napětí z 32 a 34 pinů, což je aktuální hodnota. Jakmile to uděláme, můžeme je znásobit, abychom získali vstupní a výstupní výkon, a když to uvedeme do vzorce účinnosti, můžeme získat účinnost.
Nakonec jej zobrazíme na LCD obrazovce. Kompletní program, který dělá totéž, je uveden na konci, který lze použít jako takový pro hardware popsaný výše. Dále je kód rozdělen na malé úryvky a vysvětleno.
Jak jsme pomocí displeje 128x64 OLED, potřebujeme knihovnu Adafruit_GFX a Adafruit_SSD1306 knihovna pro komunikaci s displejem. Oba si můžete stáhnout z výchozího terminálu správce desky Arduino; pokud máte nějaké problémy s částí správce desky, můžete si také stáhnout a zahrnout knihovny z přidruženého úložiště GitHub, které je uvedeno níže.
- Stáhněte si knihovnu Adafruit_GFX
- Stáhněte si knihovnu Adafruit_SSD1306
Jako vždy začneme náš kód zahrnutím všech požadovaných knihoven. Poté definujeme všechny potřebné piny a proměnné, které jsou uvedeny níže.
#zahrnout
Tyto SCREEN_WIDTH & SCREEN_HEIGHT definice slouží k definování velikosti obrazovky. Dále jsme definovali všechny potřebné piny, kterými budeme měřit napětí a proud. Dále jsme definovali hodnoty rezistorů, které se používají v hardwaru, jak vidíte na schématu. Pokud tyto hodnoty nemáte nebo pokud chcete změnit rozsah měřiče, můžete tyto hodnoty změnit, kód bude fungovat dobře.
Protože používáme k měření proudu ACS712, potřebujeme k výpočtu proudu z napětí hodnotu mVperAmp . Protože používám modul 20A ACS712, hodnota mV / A je 100, jak je uvedeno v datovém listu. Ale protože používáme ESP32 a dělič napětí, budeme mít poloviční hodnotu, což je 50, a proto jsme vložili hodnotu mV / AMP.
ACSoffset je offset, který je potřebný pro výpočet proudu z napětí. Jelikož jsou integrované obvody ACS712 napájeny z 5 V, je offsetové napětí 2,5 V. Ale protože používáme dělič napětí, jde dolů na 1,25V. Možná už znáte mizerný ADC ESP32, takže jsem musel použít hodnotu 1136. Pokud máte problémy s kalibrací, můžete vyladit hodnoty a kompenzovat ADC.
Nakonec dokončíme tuto část vytvořením objektu zobrazení třídy Adafruit_SSD1306 a předáním šířky, výšky, konfigurace I 2 C obrazovky a posledního -1 parametru se používá k definování funkce resetování. Pokud váš displej nemá externí resetovací kolík (což je určitě pro můj displej), musíte pro poslední argument použít -1.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D pro 128x64 Serial.println (F ("alokace SSD1306 selhala")); pro (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); zpoždění (100); }
Dále máme sekci setup () . V této části povolíme sériové ladění, pomocí počáteční metody objektu zobrazení zkontrolujeme, zda je nebo není k dispozici zobrazení I 2 C. Také jsme nastavili adresu I 2 C. Dále vyčistíme displej metodou clearDisplay () . Také otáčíme displejem metodou setRotation , je to proto, že jsem pokazil svůj design PCB. Dále dáme zpoždění 100 ms, aby se funkce projevily. Jakmile to bude hotové, můžeme nyní přejít na funkci smyčky. Ale dříve, než se přistoupí k funkci smyčky, musíme diskutovat o dvě další funkce, které jsou return_voltage_value () , a return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; double ADCVoltage = 0; dvojitý vstupVoltage = 0; dvojitý průměr = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((průměr * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // vzorec pro výpočet napětí tj. GND návrat inputVoltage; }
Funkce return_voltage_value () se používá k měření napětí přicházejícího do ADC a jako argument bere pin_no. V této funkci začneme deklarací některých proměnných, které jsou tmp, ADCVoltage, inputVoltage a avg. Proměnná tmp se používá k uložení dočasné hodnoty ADC, kterou získáme z funkce analogRead (), poté ji průměrujeme 150krát ve smyčce for a uložíme hodnotu do proměnné zvané avg. Poté z uvedeného vzorce vypočítáme ADCVoltage, nakonec vypočítáme vstupní napětí a vrátíme hodnoty. Hodnota +0,138, kterou vidíte, je kalibrační hodnota, kterou jsem použil ke kalibraci úrovně napětí, pohrajte si s touto hodnotou, pokud se vyskytnou nějaké chyby.
double return_current_value (int pin_no) {double tmp = 0; dvojitý průměr = 0; double ADCVoltage = 0; dvojité zesilovače = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((průměr / 4095,0) * 3300); // Získá vám zesilovače mV = ((ADCVoltage - ACSoffset) / mVperAmp); zpětné zesilovače; }
Dále máme funkci return_current_value () . Tato funkce také bere pin_no jako argument. V této funkci máme také čtyři proměnné viz. tmp, avg, ADCVoltage a Amps
Dále si přečteme pin s funkcí analogRead () a průměrujeme jej 150krát , dále použijeme vzorec pro výpočet ADCvoltage, s tím vypočítáme proud a vrátíme hodnotu. S tím se můžeme přesunout do smyčkové sekce.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0,025; Serial.print ("Vstupní napětí:"); Serial.print (input_voltage); Serial.print ("- Vstupní proud:"); Serial.print (input_current); Serial.print ("- výstupní napětí:"); Serial.print (output_voltage); Serial.print ("- výstupní proud:"); Serial.println (output_current); zpoždění (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); Zobrazit.tisk ("V"); }
Sekce smyčky začneme deklarováním a definováním některých proměnných typu float ve všech čtyřech proměnných. Voláme příslušné funkce a předáváme pin_no jako argument, protože modul ACS712 může vrátit aktuální hodnoty záporně. Pomocí funkce abs () matematické knihovny uděláme zápornou hodnotu jako kladnou. Dále sériově vytiskneme všechny hodnoty pro ladění. Dále vymažeme displej, nastavíme kurzor a vytiskneme hodnoty. Děláme to pro všechny znaky zobrazené na displeji. Což znamená konec smyčkové funkce a programu.
Testování měřiče účinnosti založeného na Arduinu a ESP32
Jak vidíte nahoře, moje testovací nastavení. Jako vstup mám svůj 30V transformátor a svůj měřič mám připojený k testovací desce. Já používám LM2596 založené buck převodník desku a pro zátěž a já používám tři 10 ohmů odpory, paralelně.
Jak vidíte na obrázku výše, připojil jsem se k multimetrům, abych zkontroloval vstupní a výstupní napětí. Transformátor produkuje téměř 32 V a výstup měniče buck je 3,95 V.
Obrázek zde ukazuje výstupní proud měřený mým měřičem účinnosti a multimetrem. Jak vidíte, multimetr ukazuje 0,97 zesilovače, a pokud trochu přiblížíte, ukazuje 1,0 A, je mírně vypnutý kvůli nelinearitě přítomné v modulu ACS712, ale to slouží našemu účelu. Podrobné vysvětlení a testování si můžete prohlédnout na videu v naší sekci videa.
Další vylepšení
Pro tuto ukázku je obvod vyroben na ručně vyrobené desce plošných spojů, ale obvod lze snadno zabudovat do kvalitní desky plošných spojů. V mém experimentu je velikost desky plošných spojů opravdu velká kvůli velikosti součásti, ale ve výrobním prostředí ji lze snížit použitím levných součástek SMD. Obvod také nemá žádnou integrovanou ochrannou funkci, takže zahrnutí ochranného obvodu zlepší celkovou bezpečnostní stránku obvodu. Při psaní kódu jsem si také všiml, že ADC ESP32 není tak skvělý. Zahrnutí externího ADC, jako je modul ADS1115, zvýší celkovou stabilitu a přesnost.
Doufám, že se vám tento článek líbil a dozvěděli jste se z něj něco nového. Máte-li jakékoli pochybnosti, můžete se zeptat v komentářích níže nebo můžete použít naši fóra pro podrobnou diskusi.