- Materijali potrebni za mjerač snage ESP32
- Mjerač učinkovitosti zasnovan na Arduinu i ESP32 - dijagram kruga
- Dizajn PCB-a za mjerač učinkovitosti zasnovan na Arduinu i ESP32
- Mjerač učinkovitosti zasnovan na Arduinu i ESP32 - kôd
- Testiranje mjerača učinkovitosti temeljenog na Arduinu i ESP32
- Daljnja poboljšanja
Svi smo svjesni osnovnog voltmetra, ampermetra i vatmetra, tri osnovne stvari koje su vam potrebne za mjerenje vrijednosti na bilo kojem elektroničkom projektu ili krugu. Mjerenje napona i struje uz pomoć multimetra može biti dobar način za početak, ali jedan od najvećih problema s kojima se susrećem tijekom testiranja sklopa je mjerenje energetske učinkovitosti. Dakle, danas ćemo taj problem riješiti izradom mjerača učinkovitosti temeljenog na Arduinu i ESP32 koji mogu mjeriti ulazni napon, ulaznu struju, izlazni napon i izlaznu struju. Stoga može istodobno mjeriti ulaznu i izlaznu snagu, a pomoću ovih vrijednosti možemo lako izmjeriti učinkovitost. Prije smo također učinili nešto vrlo slično u našem projektu Wattmeter temeljenog na Arduinu, ali ovdje ćemo mjeriti i ulaznu i izlaznu snagu na izračunati energetsku učinkovitost.
Umjesto da za posao kupimo četiri metra, taj ćemo problem moći riješiti ugrađivanjem mogućnosti sva četiri metra u jedan. Izgradnja vašeg digitalnog brojila ne samo da smanjuje troškove, već vam pruža i prostor za pomeranje za nadogradnje i poboljšanja. Kako za izradu ovog projekta koristimo ESP32, lako možemo omogućiti IoT mjerač i bilježiti podatke putem weba, što je tema budućeg projekta. Nakon što smo razjasnili sve osnove, krenimo odmah u to.
Napomena: Ovaj mjerač snage dizajniran je za istosmjerne krugove. Ako želite izmjeriti izmjeničnu struju na izračunatu energetsku učinkovitost izmjenične struje, možete provjeriti IoT-ove projekte mjerača električne energije i pretplaćenih mjerača energije.
Materijali potrebni za mjerač snage ESP32
Na slici ispod prikazani su materijali korišteni za izgradnju sklopa. Budući da je ovo napravljeno s vrlo generičkim komponentama, sav navedeni materijal trebali biste moći pronaći u lokalnoj hobi trgovini.

Također sam dolje naveo komponente zajedno sa potrebnom količinom. Ako sami gradite strujni krug, toplo se preporučuje da sve materijale potražite na donjem popisu.
- ESP32 ploča - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC bačva Jack - 1
- Kondenzator 100uF - 2
- 104 pF - 2
- 102 pF - 2
- 10K, 1% - 4
- 68.000, 1% - 2
- 6,8 K, 1% - 2
Mjerač učinkovitosti zasnovan na Arduinu i ESP32 - dijagram kruga
Shema mjerača učinkovitosti temeljena na Arduinu i ESP32 prikazana je u nastavku. Stvaranje ovog sklopa vrlo je jednostavno i koristi generičke komponente.

Rad kruga je vrlo jednostavan. U ovom ćemo projektu mjeriti napon i struju, ali na jedinstven način. Mjerimo napon i struju i za ulaz i za izlaz, pa možemo vidjeti učinkovitost kruga. Ovo je vrlo korisno za neke projekte. Primjer može biti pretvarač u istosmjerni u istosmjerni sustav gdje mjerenje učinkovitosti postaje obvezno. Način rada ovog sklopa opisan je u nastavku.
IC senzora struje ACS712:
Kao što vidite na gornjoj slici, za mjerenje struje koristimo IC IC osjetnika struje. Ovo je vrlo zanimljiva IC jer koristi Hallov efekt za mjerenje struje, postoje tri varijante ove IC koje se mogu naći na tržištu f (ili 5A, 20A i 30A). Koristimo varijantu 20A i ona je označena kao ACS712-20.
Tehnički list ACS712 preporučuje raspon napona od 4,5 - 5,5 za nesmetan rad. I dok ćemo mjeriti struju s ESP32, tolerancija je samo 3,3 V, zbog čega sam upotrijebio djelitelj napona s dva otpornika od 10 K kako bih srušio izlazni napon ICS ACS712. Kad kroz IC ne prolazi struja, ona daje 2,5 V, a kada kroz IC prolazi neka količina struje, on ili smanjuje napon ili povećava napon ovisno o smjeru strujanja. Dvije smo od ovih IC koristili za mjerenje ulazne i izlazne struje. Pogledajte naše prethodne projekte (dolje) u kojima smo koristili ovaj ACS712 senzor.
- IoT zasnovan na mjeraču električne energije koji koristi Arduino i ESP8266 Wi-Fi modul
- Krug digitalnog ampermetra koji koristi PIC mikrokontroler i ACS712
Gdje smo detaljno razgovarali o radu ovih senzora. Možete ih provjeriti ako želite znati više o tim senzorima.
Razdjelnik napona:
Za mjerenje ulaznog i izlaznog napona imamo dva razdjelnika napona na ulaznoj i izlaznoj strani kruga. Maksimalni napon koji krug može izmjeriti je 35V, ali ga je lako promijeniti promjenom vrijednosti otpora za djelitelj napona.
Regulator napona:
Za napajanje ESP32, OLED i ACS712 IC-a koristi se generički regulator napona LM7805. Kako ga napajamo prilično čistom snagom, ne koriste se odvojeni kondenzatori, ali za stabilizaciju IC koristili smo kondenzatore od 100 uF na ulazu i na izlazu.
ESP32 IC i OLED zaslon:
Kao glavni procesor koristili smo ESP32, koji je odgovoran za sva očitanja, izračune, ulaze i izlaze. Također, koristili smo OLED zaslon 128X64 da bismo znali vrijednosti.
Dizajn PCB-a za mjerač učinkovitosti zasnovan na Arduinu i ESP32
PCB za naš mjerač učinkovitosti zasnovan na Arduinu i ESP32 dizajniran je na jednostranoj ploči. Koristio sam Eagle za dizajn svoje PCB-a, ali možete koristiti bilo koji softver za dizajn po vašem izboru. 2D slika mog dizajna ploče prikazana je u nastavku.

Dovoljno traga uzemljenja koristi se za uspostavljanje pravilnih zemaljskih veza između svih komponenata. Također, pobrinuli smo se da koristimo odgovarajuće tragove od 5 V i 3,3 V kako bismo smanjili buku i poboljšali učinkovitost.
- Preuzmite PCB Design i GERBER datoteke Arduino i ESP32 mjerač učinkovitosti
Ručno izrađena PCB:
Radi praktičnosti i testiranja izradio sam svoju ručno izrađenu verziju PCB-a koja je prikazana u nastavku. U prvoj verziji napravio sam neke pogreške, koje sam ispravio pomoću nekih žica kratkospojnika. Ali u konačnoj verziji sam ih popravio, možete samo preuzeti datoteke i koristiti ih.
Mjerač učinkovitosti zasnovan na Arduinu i ESP32 - kôd
Sad, kad dobro razumijemo hardversku stranu stvari, možemo otvoriti Arduino IDE i započeti s kodiranjem. Svrha koda je očitavanje analognog napona s pina 35 i 33 ploče ESP32. Također, očitavamo napon sa 32 i 34 pina što je trenutna vrijednost. Jednom kad to učinimo, možemo ih pomnožiti da bismo dobili ulaznu i izlaznu snagu, a stavljajući ih u formulu učinkovitosti, možemo dobiti učinkovitost.
Napokon, prikazujemo ga na LCD zaslonu. Na kraju je dan cjelovit program koji će učiniti isto, a koji se kao takav može koristiti za gore raspravljeni hardver. Nadalje, kôd je podijeljen u male isječke i objašnjen.
Kao što smo pomoću 128X64 OLED zaslon, potrebna nam je Adafruit_GFX knjižnicu i Adafruit_SSD1306 knjižnica za komunikaciju sa zaslonom. Možete ih preuzeti s Arduino-ovog zadanog terminala upravitelja ploče; ako imate bilo kakvih problema s dijelom upravitelja ploče, također možete preuzeti i uključiti knjižnice iz pripadajućeg GitHub spremišta, što je navedeno u nastavku.
- Preuzmite knjižnicu Adafruit_GFX
- Preuzmite biblioteku Adafruit_SSD1306
Kao i uvijek, kod započinjemo uključivanjem svih potrebnih knjižnica. Zatim definiramo sve potrebne pribadače i varijable koje su sve prikazane u nastavku.
#include
U SCREEN_WIDTH i SCREEN_HEIGHT definicije koriste se za određivanje veličine zaslona. Dalje smo definirali sve potrebne pinove pomoću kojih ćemo mjeriti napon i struju. Dalje, definirali smo vrijednosti otpora koje se koriste u hardveru kao što možete vidjeti iz sheme. Ako nemate ove vrijednosti ili ako želite promijeniti domet mjerača, možete ih promijeniti, kôd će raditi sasvim u redu.
Kako za mjerenje struje koristimo ACS712, treba nam vrijednost mVperAmp za izračunavanje struje iz napona. Kako koristim 20A ACS712 modul, vrijednost mV / A je 100 kako je navedeno u tablici. No, jer koristimo ESP32 i djelitelj napona, imat ćemo polovicu vrijednosti koja je 50, i zato smo unijeli vrijednost mV / AMP.
ACSoffset je pomak potreban za izračunavanje struje iz napona. Kako se ICS ACS712 napajaju od 5V, pomak napona je 2,5V. No kako koristimo djelitelj napona, on se spušta na 1,25V. Možda već znate usrani ADC ESP32, pa sam morao upotrijebiti vrijednost 1136. Ako imate problema s kalibracijom, možete podesiti vrijednosti i nadoknaditi ADC.
Napokon, završavamo ovaj odjeljak izradom objekta prikaza klase Adafruit_SSD1306 i prosljeđivanjem širine zaslona, visine, konfiguracije I 2 C, a zadnji -1 parametar koristi se za definiranje funkcije resetiranja. Ako vaš zaslon nema vanjski pin za resetiranje (što je zasigurno za moj zaslon), tada morate upotrijebiti -1 za zadnji argument.
void setup () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Adresa 0x3D za 128x64 Serial.println (F ("SSD1306 dodjela nije uspjela")); za (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); kašnjenje (100); }
Dalje, imamo naš odjeljak setup () . U ovom odjeljku omogućavamo serijsko uklanjanje pogrešaka, provjeravamo je li dostupan zaslon I 2 C uz pomoć metode početka objekta prikaza. Također, postavili smo I 2 C adresu. Dalje, očistimo zaslon metodom clearDisplay () . Također, rotiramo zaslon metodom setRotation , jer sam pobrkao svoj PCB dizajn. Dalje, stavljamo kašnjenje od 100 ms da bi funkcije stupile na snagu. Kad je to gotovo, sada možemo prijeći na funkciju petlje. No, prije prelaska na funkciju petlje, moramo razgovarati o dvije druge funkcije koje su return_voltage_value () , a return_current_value () .
dvostruka vrijednost_nazad_napona (int pin_no) {dvostruka tmp = 0; dvostruki ADCVoltage = 0; dvostruki ulazni napon = 0; dvostruko prosječno = 0; za (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } prosj = tmp / 150; ADCVoltage = ((prosječno * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // formula za izračunavanje napona u tj. povratnom naponu GND; }
Funkcija return_voltage_value () koristi se za mjerenje napona koji dolazi u ADC, a za argument uzima pin_no. U ovoj funkciji započinjemo deklariranjem nekih varijabli, a to su tmp, ADCVoltage, inputVoltage i avg. Varijabla tmp koristi se za pohranu privremene ADC vrijednosti koju dobivamo iz funkcije analogRead (), zatim je prosječimo 150 puta u for petlji i vrijednost pohranjujemo u varijablu zvanu avg. Zatim izračunavamo ADCVoltage iz zadane formule, konačno izračunavamo ulazni napon i vraćamo vrijednosti. Vrijednost +0,138 koju vidite je vrijednost kalibracije koju sam koristio za kalibraciju razine napona, poigrajte se s ovom vrijednošću ako imate pogrešaka.
dvostruko return_current_value (int pin_no) {double tmp = 0; dvostruko prosječno = 0; dvostruki ADCVoltage = 0; dvostruka pojačala = 0; za (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } prosj = tmp / 150; ADCVoltage = ((prosjek / 4095,0) * 3300); // Dobija vam mV ampere = ((ADCVoltage - ACSoffset) / mVperAmp); povratna pojačala; }
Dalje, imamo funkciju return_current_value () . Ova funkcija također uzima pin_no kao argument. U ovoj funkciji također imamo četiri varijable, naime. tmp, prosjek, ADCVoltage i pojačala
Dalje, čitamo pin s funkcijom analogRead () i prosječimo ga 150 puta, zatim koristimo formulu za izračunavanje ADCvoltage, s tim izračunavamo struju i vraćamo vrijednost. Uz to možemo prijeći na odjeljak petlje.
void loop () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); plutajuće input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); plutajući output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); plutajući output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))); input_current = input_current - 0,025; Serial.print ("Ulazni napon:"); Serial.print (input_voltage); Serial.print ("- Ulazna struja:"); Serial.print (input_current); Serial.print ("- Izlazni napon:"); Serial.print (izlazni_napon); Serial.print ("- Izlazna struja:"); Serial.println (output_current); kašnjenje (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); prikaz.ispis ("V"); }
Odjeljak petlje započinjemo deklariranjem i definiranjem nekih plutajućih varijabli, u sve četiri varijable. Pozivamo odgovarajuće funkcije, prosljeđujući pin_no kao argument, jer modul ACS712 može trenutne vrijednosti vratiti negativne. Koristimo funkciju abs () matematičke biblioteke da negativnu vrijednost učinimo pozitivnom. Dalje, serijski ispisujemo sve vrijednosti za otklanjanje pogrešaka. Dalje, očistimo zaslon, postavimo kursor i ispišemo vrijednosti. To radimo za sve likove prikazane na zaslonu. Što označava kraj funkcije petlje i programa.
Testiranje mjerača učinkovitosti temeljenog na Arduinu i ESP32
Kao što vidite moju postavku testa na gornjoj slici. Imam ulazni transformator od 30 V i priključio sam svoj mjerač za ispitnu ploču. Koristim ploču pretvarača na bazi LM2596 i za opterećenje, a paralelno koristim tri otpora od 10 oma.

Kao što vidite na gornjoj slici, spojio sam se na multimetre radi provjere ulaznog i izlaznog napona. Transformator proizvodi gotovo 32V, a izlazni pretvarač je 3,95V.

Ovdje je prikazana izlazna struja izmjerena mojim mjeračem učinkovitosti i multimetrom. Kao što vidite, multimetar pokazuje 0,97 ampera, a ako malo zumirate, prikazuje 1,0A, malo je isključen zbog nelinearnosti prisutne u modulu ACS712, ali to nam služi. Za detaljno objašnjenje i testiranje, video možete pogledati u našem video odjeljku.
Daljnja poboljšanja
Za ovu demonstraciju sklop je napravljen na ručno izrađenoj PCB-u, ali sklop se lako može ugraditi u dobro kvalitetnu PCB-u. U mom eksperimentu veličina PCB-a je doista velika zbog veličine komponente, ali u proizvodnom okruženju može se smanjiti upotrebom jeftinih SMD komponenata. Strujni krug također nema ugrađenu zaštitnu značajku, pa će uključivanje zaštitnog kruga poboljšati cjelokupni sigurnosni aspekt kruga. Također, dok sam pisao kod, primijetio sam da ADC ESP32 nije tako sjajan. Uključivanje vanjskog ADC-a poput modula ADS1115 povećat će ukupnu stabilnost i točnost.
Nadam se da vam se svidio ovaj članak i da ste iz njega naučili nešto novo. Ako sumnjate, možete pitati u komentarima ispod ili možete koristiti naše forume za detaljnu raspravu.
