- Az ESP32 teljesítménymérőhöz szükséges anyagok
- Arduino és ESP32 alapú hatékonyságmérő - áramkör diagram
- NYÁK-tervezés Arduino és ESP32 alapú hatékonyságmérőhöz
- Arduino és ESP32 alapú hatékonyságmérő - kód
- Az Arduino és az ESP32 alapú hatékonyságmérő tesztelése
- További fejlesztések
Mindannyian ismerjük az alapfeszültségmérőt, az ampermérőt és a wattmérőket, a három alapvető dolgot, amelyre szükséged van az elektronikus projektek vagy áramkörök értékeinek méréséhez. A feszültség és az áram multiméter segítségével történő mérése jó indítás lehet, de az egyik legnagyobb probléma, amellyel egy áramkör tesztelése során szembesülök, az az energiahatékonyság mérése. Tehát ma megoldjuk ezt a problémát egy Arduino és ESP32 alapú hatékonyságmérő felépítésével, amely képes mérni a bemeneti feszültséget, a bemeneti áramot, a kimeneti feszültséget és a kimeneti áramot. Így egyszerre mérheti a bemeneti és a kimeneti teljesítményt, és ezekkel az értékekkel könnyen mérhetjük a hatékonyságot. Korábban valami nagyon hasonlót tettünk az Arduino Based Wattmeter projektünkben, de itt mind a bemeneti, mind a kiszámítja az energiahatékonyságot.
Ahelyett, hogy négy métert vásároltunk volna a munkához, képesek leszünk megoldani ezt a problémát úgy, hogy mind a négy méter képességeit egybe építjük. A digitális mérőeszköz megépítése nemcsak a költségeket csökkenti, hanem lehetőséget kínál a frissítésekre és fejlesztésekre is. Mivel ESP32-t használunk ennek a projektnek a felépítéséhez, könnyedén engedélyezhetjük ezt a mérő IoT-t, és naplózhatjuk az adatokat az interneten, ami a jövőbeli projekt témája. Miután minden alapja tisztázott, menjünk bele rögtön.
Megjegyzés: Ezt a teljesítménymérőt egyenáramú áramkörökhöz tervezték. Ha a váltakozó áramot a számított váltakozó áram-hatékonyságra kívánja mérni, akkor megnézheti az IoT-alapú villamosenergia-fogyasztásmérőt és az előre fizetett energia-mérő projekteket.
Az ESP32 teljesítménymérőhöz szükséges anyagok
Az alábbi képen láthatók az áramkör felépítéséhez felhasznált anyagok. Mivel ez nagyon általános összetevőkből készül, képesnek kell lennie arra, hogy az összes felsorolt anyagot megtalálja a helyi hobbiboltban.
Az alábbiakban felsoroltam az összetevőket a szükséges mennyiség mellett. Ha maga építi az áramkört, akkor nagyon ajánlott az összes anyagot beszerezni az alábbi listából.
- ESP32 alaplap - 1
- 128X64 OLED - 1
- ACS712-20 IC - 2
- DC hordó Jack - 1
- 100uF kondenzátor - 2
- 104pF - 2
- 102pF - 2
- 10K, 1% - 4
- 68K, 1% - 2
- 6,8K, 1% - 2
Arduino és ESP32 alapú hatékonyságmérő - áramkör diagram
Az Arduino és az ESP32 alapú hatékonyságmérő vázlata az alábbiakban látható. Ennek az áramkörnek a létrehozása nagyon egyszerű és általános összetevőket használ.
Az áramkör működése nagyon egyszerű. Mérni fogjuk a feszültséget és az áramot ebben a projektben, de egyedülálló módon. A bemenetre és a kimenetre egyaránt mérjük a feszültséget és az áramot, így láthatjuk az áramkör hatékonyságát. Ez nagyon hasznos néhány projektnél. Ilyen lehet például a DC-DC átalakító, ahol a hatékonyság mérése kötelezővé válik. Az áramkör működését az alábbiakban ismertetjük.
Az ACS712 áramérzékelő IC:
Amint a fenti képen látható, ACS712 áramérzékelő IC- t használunk az áram mérésére. Ez egy nagyon érdekes IC, mivel a Hall-effektust használja az áram mérésére. Ennek az IC-nek három változata található meg az f piacon (vagy 5A, 20A és 30A). Ennek a 20A változatát használjuk, és az ACS712-20 címkével rendelkezik.
Az ACS712 adatlap a zökkenőmentes működéshez 4,5 - 5,5 feszültségtartományt javasol. És mivel az áramot ESP32-vel fogjuk mérni, ez csak 3,3 V toleráns, ezért két 10K-os ellenállású feszültségosztót használtam az ACS712 IC kimeneti feszültségének csökkentésére. Ha az áramkörön nem folyik áram, akkor 2,5 V-ot ad ki, és amikor az áramkörön valamilyen mennyiségű áram folyik, vagy csökkenti a feszültséget, vagy növeli a feszültséget az áram áramlási irányától függően. Ezen IC-k közül kettőt használtunk a bemeneti és kimeneti áram mérésére. Nézze meg korábbi projektjeinket (lent), amelyekben ezt az ACS712 érzékelőt használtuk.
- IoT alapú villamosenergia-fogyasztásmérő Arduino és ESP8266 Wi-Fi modult használva
- Digitális ampermérő áramkör PIC mikrokontroller és ACS712 segítségével
Ahol részletesen megvitattuk ezen érzékelők működését. Ezeket megnézheti, ha többet szeretne tudni ezekről az érzékelőkről.
A feszültségosztó:
A bemeneti és kimeneti feszültség méréséhez két feszültségosztó van az áramkör bemeneti és kimeneti oldalán. A maximális feszültség, amelyet az áramkör meg tud mérni, 35 V, de könnyen megváltoztatható a feszültségosztó ellenállásának értékeinek megváltoztatásával.
A feszültségszabályozó:
Az ESP32, OLED és ACS712 IC-k táplálásához általános LM7805 feszültségszabályozót használnak. Mivel meglehetősen tiszta energiával tápláljuk, nem használunk leválasztó kondenzátorokat, de a bemeneten és a kimeneten egyaránt 100uF kondenzátorokat használtunk az IC stabilizálásához.
Az ESP32 IC és az OLED kijelző:
Az ESP32-et használtuk fő processzorként, amely felelős az összes leolvasásért, számításért, bemenetért és kimenetért. Ezenkívül 128x64 OLED kijelzőt használtunk az értékek megismeréséhez.
NYÁK-tervezés Arduino és ESP32 alapú hatékonyságmérőhöz
Az Arduino és az ESP32 alapú hatékonyságmérő nyomtatott áramköri lapját egyoldalas táblára tervezték. Az Eagle-t használtam a NYÁK tervezéséhez, de bármilyen tetszőleges tervező szoftvert használhat. Az alaplapom 2D képe az alábbiakban látható.
Elegendő talajnyomot használnak a megfelelő földelő csatlakozások kialakításához az összes alkatrész között. Ezenkívül gondoskodtunk arról, hogy megfelelő 5 V és 3,3 V nyomokat használjunk a zaj csökkentése és a hatékonyság javítása érdekében.
- Töltse le a PCB Design és a GERBER fájlokat az Arduino és az ESP32 alapú hatékonyságmérővel
Kézzel készített NYÁK:
Kényelem és tesztelés céljából elkészítettem a PCB kézzel készített változatát, amely az alábbiakban látható. Az első változatban hibákat követtem el, amelyeket néhány áthidaló vezeték segítségével kijavítottam. De a végleges verzióban ezeket kijavítottam, egyszerűen letöltheti a fájlokat és felhasználhatja őket.
Arduino és ESP32 alapú hatékonyságmérő - kód
Most, hogy jól megértettük a dolgok hardveres oldalát, megnyithatjuk az Arduino IDE-t és elkezdhetjük a kódolást. A kód célja az analóg feszültség leolvasása az ESP32 kártya 35 és 33 érintkezőjéből. Ezenkívül leolvassuk a feszültséget 32 és 34 tűről, amely az aktuális érték. Miután ezt megtettük, megsokszorozhatjuk ezeket a bemeneti és a kimenő teljesítmény megszerzéséhez, és ha a hatékonysági képletre tesszük, megkapjuk a hatékonyságot.
Végül megjelenítjük az LCD képernyőn. A végére megadjuk a teljes programot, amely ugyanezt megteheti, amelyet a fentiekben tárgyalt hardverre fel lehet használni. Ezenkívül a kódot apró részletekre osztják és elmagyarázzák.
Mivel 128X64-es OLED-kijelzőt használunk, szükségünk van az Adafruit_GFX könyvtárra és az Adafruit_SSD1306 könyvtárra, hogy kommunikálhassunk a kijelzővel. Mindkettőt letöltheti az Arduino alapértelmezett fórumkezelő termináljáról; ha bármilyen problémája van a fórumkezelő részével, letöltheti és felveheti a könyvtárakat a hozzá tartozó GitHub-tárból, amely az alábbiakban található.
- Töltse le az Adafruit_GFX könyvtárat
- Töltse le az Adafruit_SSD1306 könyvtárat
Mint mindig, az összes szükséges könyvtár beillesztésével kezdjük kódunkat. Ezután meghatározzuk az összes szükséges csapot és változót, amelyek mindegyike alább látható.
#include
A SCREEN_WIDTH és SCREEN_HEIGHT definíciók használják a képernyő méretének meghatározására. Ezután meghatároztuk az összes szükséges csapot, amelyeken keresztül megmérjük a feszültséget és az áramot. Ezután meghatároztuk a hardverben használt ellenállási értékeket, amint az a sematikus ábrán látható. Ha nem rendelkezik ezekkel az értékekkel, vagy ha meg akarja változtatni a mérőtartományt, megváltoztathatja ezeket az értékeket, a kód rendben működik.
Mivel az áram méréséhez ACS712-et használunk, az mVperAmp értékre van szükségünk az áram feszültségből történő kiszámításához. Mivel egy 20A ACS712 modult használok, az mV / A értéke 100, amint az az adatlapon szerepel. De mivel ESP32-et és feszültségosztót használunk, az érték fele lesz, ami 50, és ezért adtuk meg az mV / AMP értéket.
Az ACSoffset az az eltolás, amely az áram feszültségből történő kiszámításához szükséges. Mivel az ACS712 IC-k 5 V-os tápellátást kapnak, az eltolás feszültsége 2,5 V. De mivel feszültségosztót használunk, ez 1,25 V-ra csökken. Lehet, hogy már ismeri az ESP32 gagyi ADC-jét, ezért nekem 1136-os értéket kellett használnom. Ha kalibrálási problémái vannak, módosíthatja az értékeket és kompenzálhatja az ADC-t.
Végül fejezzük be a műveletet, hogy egy kijelző tárgya Adafruit_SSD1306 osztály és halad a képernyő szélesség, magasság, I 2 C konfiguráció, és az utolsó -1 paraméter meghatározására használják a reset funkciót. Ha a kijelzőjén nincs külső visszaállító pin (ami minden bizonnyal az én kijelzőmre vonatkozik), akkor az utolsó argumentumként -1-et kell használnia.
void setup () {Soros.kezdés (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// 0x3D cím 128x64-es Serial.println számára (F ("Az SSD1306 kiosztása sikertelen")); for (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); késés (100); }
Ezután megkapjuk a setup () részt. Ebben a szakaszban engedélyezzük a soros hibakeresést, a megjelenítő objektum kezdő metódusának segítségével ellenőrizzük, hogy van-e I 2 C kijelző vagy sem. Beállítottuk az I 2 C címet is. Ezután töröljük a kijelzőt a clearDisplay () módszerrel. Ezenkívül a setRotation metódussal forgatjuk a kijelzőt, ez azért van, mert elrontottam a NYÁK tervezésemet. Ezután 100 ms késleltetést teszünk a funkciók életbe lépéséhez. Miután ez megtörtént, most továbbléphetünk a hurok funkcióra. De mielőtt a loop funkció, amit meg kell beszélnünk a másik két funkcióval rendelkezik, amelyek return_voltage_value () , és return_current_value () .
double return_voltage_value (int pin_no) {kettős tmp = 0; kettős ADCfeszültség = 0; kettős bemenetFeszültség = 0; dupla átlag = 0; for (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } átlag = tmp / 150; ADCfeszültség = ((átlag * 3,3) / (4095)) + 0,138; inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // képlet a feszültség kiszámításához, azaz GND visszatérő bemenetVoltage; }
A return_voltage_value () függvény az ADC-be érkező feszültség mérésére szolgál, és argumentumként a pin_no-t veszi. Ebben a függvényben néhány változó deklarálásával kezdjük, amelyek a tmp, ADCVoltage, inputVoltage és avg. A tmp változó az ideiglenes ADC érték tárolására szolgál, amelyet az analogRead () függvényből kapunk, majd 150-szer átlagoljuk ki egy for ciklusban, és az értéket egy avg nevű változóba tároljuk. Ezután kiszámoljuk az ADCVoltage-ot a megadott képletből, végül kiszámoljuk a bemeneti feszültséget és visszaadjuk az értékeket. A látott +0,138 érték az a kalibrációs érték, amelyet a feszültségszint kalibrálásához használtam. Játsszon ezzel az értékkel, ha hibát észlel.
double return_current_value (int pin_no) {kettős tmp = 0; dupla átlag = 0; kettős ADCfeszültség = 0; dupla amper = 0; for (int z = 0; z <150; z ++) {tmp = tmp + analógRead (pin_no); } átlag = tmp / 150; ADCFeszültség = ((átl. / 4095,0) * 3300); // Megkapja mV erősítők = ((ADCVoltage - ACSoffset) / mVperAmp); visszatérő erősítők; }
Ezután megkapjuk a return_current_value () függvényt. Ez a függvény a pin_no argumentumot is veszi. Ebben a függvényben négy változónk is van: tmp, avg, ADCVoltage és erősítők
Ezután elolvassuk a csapot az analogRead () függvénnyel, és átlagoljuk 150-szer, ezután a képletet használjuk az ADCvoltage kiszámításához, ezzel kiszámoljuk az áramot, és visszaadjuk az értéket. Ezzel áttérhetünk a hurokszakaszra.
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 ("Bemeneti feszültség:"); Soros.nyomtatás (bemenet_feszültség); Serial.print ("- Bemeneti áram:"); Soros.nyomtatás (input_current); Serial.print ("- Kimeneti feszültség:"); Soros.nyomtatás (kimeneti_feszültség); Serial.print ("- Kimeneti áram:"); Soros.println (kimeneti_áram); késés (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (bemenet_feszültség); display.setCursor (70, 0); kijelző.nyomtatás ("V"); }
A hurokszakaszt néhány úszóváltozó deklarálásával és meghatározásával kezdjük, mind a négy változóban. Meghívjuk a megfelelő függvényeket, argumentumként a pin_no átadását, mivel az ACS712 modul az aktuális értékeket negatívban tudja visszaadni. A matematikai könyvtár abs () függvényét használjuk arra, hogy a negatív érték pozitív legyen. Ezután sorosan kinyomtatjuk a hibakeresés összes értékét. Ezután töröljük a kijelzőt, beállítjuk a kurzort és kinyomtatjuk az értékeket. Tesszük ezt a kijelzőn látható összes karakter esetében. Ami a ciklusfunkció és a program végét jelöli.
Az Arduino és az ESP32 alapú hatékonyságmérő tesztelése
Amint láthatja a tesztbeállítást a fenti képen. A 30 V-os transzformátorom van bemenetként, és a mérőm csatlakoztatva van a tesztlaphoz. LM2596 alapú bak átalakító lapot használok és a terheléshez, és három 10 Ohmos ellenállást használok, párhuzamosan.
Amint a fenti képen látható, többméteres készülékekhez csatlakoztam a bemeneti és kimeneti feszültség ellenőrzéséhez. A transzformátor majdnem 32V-ot termel, a buck konverter kimenete 3,95V.
Az itt látható kép a hatékonyságmérőm és a multiméterem által mért kimeneti áramot mutatja. Amint láthatja, a multiméter.97 ampert mutat, és ha egy kicsit nagyít, akkor 1.0A-t mutat, ez kissé kikapcsol az ACS712 modulban meglévő nem-linearitás miatt, de ez célunkat szolgálja. Részletes magyarázat és tesztelés céljából megnézheti a videót a videó részben.
További fejlesztések
Ehhez a bemutatóhoz az áramkört egy kézzel készített nyomtatott áramköri lapon készítik, de az áramkör könnyen beépíthető egy jó minőségű NYÁK-ba. Kísérletem során a PCB mérete az alkatrészméret miatt valóban nagy, de gyártási környezetben olcsó SMD-alkatrészek használatával csökkenthető. Az áramkörnek nincs beépített védelmi funkciója, így a védelmi áramkör beépítése javítja az áramkör általános biztonsági szempontját. A kód írása közben észrevettem, hogy az ESP32 ADC-je nem olyan nagyszerű. Egy külső ADC, például az ADS1115 modul beépítése növeli az általános stabilitást és pontosságot.
Remélem tetszett ez a cikk, és valami újat tanultál belőle. Ha kétségei vannak, kérje az alábbi megjegyzéseket, vagy használhatja fórumunkat a részletes megbeszéléshez.