- Materiály potrebné pre merač výkonu ESP32
- Merač účinnosti na základe Arduina a ESP32 - obvodový diagram
- Dizajn dosiek plošných spojov pre merač účinnosti Arduino a ESP32
- Arduino a ESP32 - merač účinnosti - kód
- Testovanie merača účinnosti na báze Arduino a ESP32
- Ďalšie vylepšenia
Všetci vieme o základnom voltmetri, ampérmetri a wattmetroch, troch základných veciach, ktoré potrebujete na meranie hodnôt na akýchkoľvek elektronických projektoch alebo obvodoch. Meranie napätia a prúdu pomocou multimetra môže byť dobrý spôsob, ako začať, ale jedným z najväčších problémov, ktorým čelím pri testovaní obvodu, je meranie energetickej účinnosti. Takže dnes tento problém vyriešime zostrojením merača účinnosti na báze Arduino a ESP32, ktorý dokáže merať vstupné napätie, vstupný prúd, výstupné napätie a výstupný prúd. Môže teda merať vstupný a výstupný výkon súčasne a pomocou týchto hodnôt môžeme ľahko merať účinnosť. Predtým sme tiež niečo veľmi podobné urobili v našom projekte založenom na wattmetroch založených na Arduine, ale tu budeme merať vstupný aj výstupný výkon vypočítať energetickú účinnosť.
Namiesto nákupu štyroch metrov pre túto prácu budeme schopní vyriešiť tento problém spojením schopností všetkých štyroch metrov do jedného. Budovanie vášho digitálneho meracieho prístroja nielenže znižuje náklady, ale dáva vám aj priestor na vylepšení a vylepšenia. Pretože na zostavenie tohto projektu používame protokol ESP32, môžeme tento merač ľahko povoliť pre IoT a zaznamenávať údaje cez web, čo je téma budúceho projektu. Po objasnení všetkých základných vecí poďme priamo do toho.
Poznámka: Tento merač výkonu je navrhnutý pre jednosmerné obvody. Ak hľadáte meranie striedavého prúdu na vypočítanú energetickú účinnosť striedavého prúdu, môžete si pozrieť projekty v oblasti elektromeru a predplateného merača energie založené na IoT.
Materiály potrebné pre merač výkonu ESP32
Obrázok nižšie zobrazuje materiály použité na zostavenie obvodu. Pretože je to vyrobené s veľmi všeobecnými komponentmi, mali by ste byť schopní nájsť všetok uvedený materiál v miestnom hobby obchode.
Ďalej som uviedol nižšie uvedené komponenty spolu s požadovaným množstvom. Ak si okruh zostavujete svojpomocne, dôrazne sa odporúča získať všetky materiály z nižšie uvedeného zoznamu.
- Doska ESP32 - 1
- 128 x 64 OLED - 1
- ACS712-20 IC - 2
- DC hlaveň Jack - 1
- 100uF kondenzátor - 2
- 104 pF - 2
- 102 pF - 2
- 10 tis., 1% - 4
- 68 tis., 1% - 2
- 6,8 tis., 1% - 2
Merač účinnosti na základe Arduina a ESP32 - obvodový diagram
Schéma merača účinnosti na báze Arduino a ESP32 je uvedená nižšie. Vytvorenie tohto okruhu je veľmi jednoduché a využíva všeobecné komponenty.
Obsluha obvodu je veľmi jednoduchá. Budeme merať napätie a prúd v tomto projekte, ale jedinečným spôsobom. Meriame napätie a prúd na vstupe aj na výstupe, a preto vidíme účinnosť obvodu. To sa pri niektorých projektoch veľmi hodí. Príkladom môže byť prevodník DC na DC, kde sa meranie účinnosti stáva povinným. Fungovanie týchto obvodov je popísané nižšie.
Integrovaný obvod snímača prúdu ACS712:
Ako môžete vidieť na obrázku vyššie, na meranie prúdu používame integrovaný obvod snímača prúdu ACS712. Toto je veľmi zaujímavý integrovaný obvod, pretože na meranie prúdu využíva Hallov jav. Existujú tri varianty tohto integrovaného obvodu, ktoré možno nájsť na trhu f (alebo 5A, 20A a 30A). Používame tento variant 20A a je označený ako ACS712-20.
Datasheet ACS712 odporúča pre hladký chod rozsah napätia 4,5 - 5,5. A keďže ideme merať prúd pomocou ESP32, je to len 3,3 V tolerantné, a preto som na zníženie výstupného napätia ACS712 IC použil delič napätia s dvoma 10K rezistormi. Ak cez IC neprúdi žiadny prúd, má na výstupe 2,5 V a keď cez IC preteká určité množstvo prúdu, buď zníži napätie, alebo zvýši napätie v závislosti od smeru prúdenia. Dva z týchto integrovaných obvodov sme použili na meranie vstupného a výstupného prúdu. Prezrite si naše predchádzajúce projekty (nižšie), v ktorých sme použili tento senzor ACS712.
- Merač elektrickej energie založený na IoT využívajúci Arduino a modul Wi-Fi ESP8266
- Obvod digitálneho ampérmetra využívajúci mikrokontrolér PIC a ACS712
Kde sme podrobne diskutovali o práci týchto senzorov. Môžete sa na ne pozrieť, ak sa chcete dozvedieť viac informácií o týchto senzoroch.
Rozdeľovač napätia:
Na meranie vstupného a výstupného napätia máme na vstupnej a výstupnej strane obvodu dva rozdeľovače napätia. Maximálne napätie, ktoré môže obvod merať, je 35 V, dá sa však ľahko zmeniť zmenou hodnôt odporu pre delič napätia.
Regulátor napätia:
Všeobecný regulátor napätia LM7805 sa používa na napájanie integrovaných obvodov ESP32, OLED a ACS712. Pretože napájame celkom čistú energiu, nepoužívajú sa žiadne oddeľovacie kondenzátory, ale na stabilizáciu integrovaného obvodu sme použili 100uF kondenzátory na vstupe aj na výstupe.
ESP32 IC a OLED displej:
Ako hlavný procesor sme použili ESP32, ktorý je zodpovedný za všetky údaje, výpočty, vstupy a výstupy. Na poznanie hodnôt sme tiež použili OLED displej s rozlíšením 128 x 64 pixlov.
Dizajn dosiek plošných spojov pre merač účinnosti Arduino a ESP32
DPS pre náš merač účinnosti Arduino a ESP32 je navrhnutý na jednostrannej doske. Na návrh svojej DPS som použil program Eagle, ale môžete použiť akýkoľvek návrhový softvér podľa vášho výberu. 2D obrázok môjho návrhu dosky je zobrazený nižšie.
Na zaistenie správneho zemného spojenia medzi všetkými komponentmi sa používa dostatočná zemná stopa. Tiež sme sa ubezpečili, že na zníženie hluku a zlepšenie účinnosti použijeme správne stopy 5V a 3,3V.
- Stiahnite si PCB Design a GERBER súbory Arduino a ESP32 Based Efficiency meter
Ručne vyrobená doska plošných spojov:
Pre pohodlie a testovanie som vyrobil svoju ručne vyrobenú verziu DPS a je uvedená nižšie. V prvej verzii som urobil niekoľko chýb, ktoré som napravil pomocou niekoľkých štartovacích drôtov. Ale vo finálnej verzii som ich opravil, stačí si stiahnuť súbory a použiť ich.
Arduino a ESP32 - merač účinnosti - kód
Teraz, keď dobre rozumieme hardvérovej stránke veci, môžeme otvoriť Arduino IDE a začať kódovať. Účelom kódu je prečítať analógové napätie z pinov 35 a 33 dosky ESP32. Čítame tiež napätie z 32 a 34 pinov, čo je aktuálna hodnota. Keď to urobíme, môžeme ich vynásobiť, aby sme dostali vstupný a výstupný výkon, a keď ho uvedieme do vzorca účinnosti, môžeme získať účinnosť.
Nakoniec to zobrazíme na LCD obrazovke. Kompletný program, ktorý robí to isté, je uvedený na konci, ktorý je možné použiť ako taký pre hardvér diskutovaný vyššie. Ďalej je kód rozdelený na malé úryvky a vysvetlený.
Pretože používame OLED displej 128 x 64, na komunikáciu s displejom potrebujeme knižnicu Adafruit_GFX a knižnicu Adafruit_SSD1306 . Môžete si ich stiahnuť z predvoleného terminálu správcu dosiek Arduino; ak máte problémy s časťou správcu dosiek, môžete si tiež stiahnuť a zahrnúť knižnice z pridruženého úložiska GitHub, ktoré je uvedené nižšie.
- Stiahnite si knižnicu Adafruit_GFX
- Stiahnite si knižnicu Adafruit_SSD1306
Ako vždy začíname náš kód zahrnutím všetkých požadovaných knižníc. Potom definujeme všetky potrebné piny a premenné, ktoré sú zobrazené nižšie.
#include
Definície SCREEN_WIDTH a SCREEN_HEIGHT sa používajú na definovanie veľkosti obrazovky. Ďalej sme si zadefinovali všetky potrebné piny, cez ktoré ideme merať napätie a prúd. Ďalej sme definovali hodnoty rezistorov, ktoré sa používajú v hardvéri, ako je zrejmé zo schémy. Ak tieto hodnoty nemáte alebo ak chcete zmeniť rozsah merača, môžete tieto hodnoty zmeniť, kód bude fungovať dobre.
Pretože na meranie prúdu používame ACS712, potrebujeme na výpočet prúdu z napätia hodnotu mVperAmp . Pretože používam modul 20A ACS712, hodnota mV / A je 100, ako je uvedené v údajovom liste. Ale pretože používame ESP32 a delič napätia, budeme mať polovicu hodnoty, ktorá je 50, a preto sme vložili hodnotu mV / AMP.
ACSoffset je offset, ktorý je potrebný na výpočet prúdu z napätia. Pretože sú integrované obvody ACS712 napájané z 5 V, je ofsetové napätie 2,5 V. Ale keďže používame delič napätia, ide dole na 1,25V. Mizerný ADC ESP32 už možno poznáte, takže som musel použiť hodnotu 1136. Ak máte problémy s kalibráciou, môžete tieto hodnoty vylepšiť a kompenzovať ADC.
Nakoniec túto časť dokončíme tak, že urobíme objekt zobrazenia triedy Adafruit_SSD1306 a odovzdáme šírku, výšku, konfiguráciu I 2 C a na definovanie funkčnosti resetovania sa použije posledný parameter -1. Pokiaľ váš displej nemá externý resetovací kolík (čo je určite pre môj displej), musíte pre posledný argument použiť -1.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D pre 128x64 Serial.println (F ("alokácia SSD1306 zlyhala")); pre (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); oneskorenie (100); }
Ďalej tu máme sekciu setup () . V tejto časti povoľujeme sériové ladenie, začiatočnou metódou objektu zobrazenia skontrolujeme, či je alebo nie je k dispozícii displej I 2 C. Tiež sme nastavili adresu I 2 C. Ďalej vyčistíme displej metódou clearDisplay () . Displej tiež otáčame metódou setRotation , je to preto, lebo som pokazil môj dizajn PCB. Ďalej dáme oneskorenie 100 ms, aby sa funkcie prejavili. Keď je to hotové, môžeme teraz prejsť na funkciu slučky. Ale skôr, než sa pristúpi k funkcii slučky, musíme diskutovať o dve ďalšie funkcie, ktoré sú return_voltage_value () , a return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; dvojité napätie ADC = 0; dvojitý vstupVoltage = 0; dvojité priem. = 0; pre (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } priem = tmp / 150; ADCVoltage = ((priemer * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // vzorec na výpočet napätia tj GND návrat inputVoltage; }
Funkcia return_voltage_value () sa používa na meranie napätia prichádzajúceho do ADC a ako argument berie hodnotu pin_no. V tejto funkcii začneme deklarovaním niektorých premenných, ktoré sú tmp, ADCVoltage, inputVoltage a avg. Premenná tmp sa používa na uloženie dočasnej hodnoty ADC, ktorú dostaneme z funkcie analogRead (), potom ju spriemerujeme 150-krát v cykle for a hodnotu uložíme do premennej s názvom avg. Z daného vzorca potom vypočítame ADCVoltage, nakoniec vypočítame vstupné napätie a vrátime hodnoty. Hodnota +0,138, ktorú vidíte, je kalibračná hodnota, ktorú som použil na kalibráciu úrovne napätia. Ak sa vyskytnú nejaké chyby, pohrajte sa s touto hodnotou.
double return_current_value (int pin_no) {double tmp = 0; dvojité priem. = 0; dvojité napätie ADC = 0; zdvojené zosilňovače = 0; pre (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } priem = tmp / 150; ADCVoltage = ((priemer / 4095,0) * 3300); // Získa vám zosilňovače mV = ((ADCVoltage - ACSoffset) / mVperAmp); spätné zosilňovače; }
Ďalej máme funkciu return_current_value () . Táto funkcia tiež berie ako argument pin_no. V tejto funkcii máme tiež štyri premenné, viz. tmp, priem., ADCVoltage a Amps
Ďalej prečítame pin s funkciou analogRead () a spriemerujeme ho 150-krát, ďalej pomocou vzorca vypočítame ADCvoltage, pomocou ktorého vypočítame prúd a vrátime hodnotu. S tým môžeme prejsť na časť slučky.
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ätie:"); Serial.print (input_voltage); Serial.print ("- Vstupný prúd:"); Serial.print (input_current); Serial.print ("- výstupné napätie:"); Serial.print (output_voltage); Serial.print ("- výstupný prúd:"); Serial.println (output_current); oneskorenie (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); displej.tlač ("V"); }
Sekciu slučky začíname deklarovaním a definovaním niektorých premenných typu float, vo všetkých štyroch premenných. Príslušné funkcie voláme, pričom argument pin_no odovzdáme, pretože modul ACS712 môže vrátiť aktuálne hodnoty záporne. Pomocou funkcie abs () matematickej knižnice urobíme zápornú hodnotu pozitívnou. Ďalej sériovo vytlačíme všetky hodnoty pre ladenie. Ďalej vyčistíme displej, nastavíme kurzor a vytlačíme hodnoty. Robíme to pre všetky znaky zobrazené na displeji. Čo označuje koniec slučky a programu.
Testovanie merača účinnosti na báze Arduino a ESP32
Ako vidíte na obrázku vyššie, moje testovacie nastavenie. Ako vstup mám svoj 30V transformátor a môj meter je pripojený k testovacej doske. Používam dosku prevodníka na báze LM2596 a pre záťaž a paralelne používam tri 10 ohmové odpory.
Ako vidíte na obrázku vyššie, pripojil som sa k multimetrom, aby som skontroloval vstupné a výstupné napätie. Transformátor produkuje takmer 32 V a výstup prevodníka Buck je 3,95 V.
Obrázok tu zobrazuje výstupný prúd meraný mojim meračom účinnosti a multimetrom. Ako vidíte, multimetr ukazuje 0,97 A, a ak sa trochu priblížite, ukazuje 1,0 A, je mierne vypnutý kvôli nelinearite prítomnej v module ACS712, ale slúži to nášmu účelu. Podrobné vysvetlenie a testovanie nájdete v videu v našej sekcii s videom.
Ďalšie vylepšenia
Pre túto ukážku je obvod vyrobený na ručne vyrobenej doske plošných spojov, ale obvod je možné ľahko zabudovať do kvalitnej dosky plošných spojov. V mojom experimente je veľkosť DPS skutočne veľká kvôli veľkosti komponentov, ale v produkčnom prostredí sa dá zmenšiť použitím lacných SMD komponentov. Obvod tiež nemá vstavanú ochrannú funkciu, takže zahrnutie ochranného obvodu zlepší celkovú bezpečnostnú stránku obvodu. Pri písaní kódu som si tiež všimol, že ADC ESP32 nie je také skvelé. Zahrnutie externého ADC, ako je modul ADS1115, zvýši celkovú stabilitu a presnosť.
Dúfam, že sa vám tento článok páčil a dozvedeli ste sa z neho niečo nové. Ak máte pochybnosti, môžete sa opýtať v komentároch nižšie alebo môžete využiť naše fóra na podrobnú diskusiu.