Többcsatornás Wifi feszültség- és árammérő: 11 lépés (képekkel)
Többcsatornás Wifi feszültség- és árammérő: 11 lépés (képekkel)
Anonim
Többcsatornás Wifi feszültség- és árammérő
Többcsatornás Wifi feszültség- és árammérő

A deszkázás során gyakran figyelni kell az áramkör különböző részeit egyszerre.

Annak elkerülése érdekében, hogy a multiméter szondákat egyik helyről a másikra kelljen ragasztani, többcsatornás feszültség- és árammérőt akartam tervezni.

Az Adafruit Ina260 táblája nagyon hatékony és hatékony módszert kínál erre. Nagyon pontos feszültség- és árammérőt tartalmaz, integrált I2C híddal (sok csap megtakarítása, ha 3 -at kombinál!).

Már csak a kijelző hiányzott. Ezért döntött úgy, hogy a táblákat egy ESP32 fejlesztőlapra csatlakoztatja, amely könnyedén hordozhat egy webszervert a mért elemek PC/mobil képernyőn történő megjelenítéséhez.

Kellékek

3 x Ina260 adafruit tábla

3 x fejléc hosszú tüskékkel

Min. 6 áthidaló vezeték

1 x ESP32 Wrover-B (vagy bármely más Wifi kártya I2C támogatással)

2 x 19 tűs csatlakozófej (ha van)

1 x PCB vagy Perfboard

1 x 3,3 V -os tápegység

1. lépés: Forrasztja be a három INA táblát

Forrasztja a három INA táblát
Forrasztja a három INA táblát

Az első lépés a három INA260 tábla összeszerelése.

Nagyon jó utasítás található az Adafruit weboldalán. Kövesse az Adafruit összeszerelési utasításait.

Annak érdekében, hogy egymásra rakhassa őket, használja a hosszú csapszegeket, és ne a szállított csapszalagokat!

2. lépés: Három különböző I2C -cím konfigurálása

Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása
Három különböző I2C -cím konfigurálása

Az I2C egy soros protokoll kétvezetékes interfészhez kis sebességű eszközök rövid távú csatlakoztatásához. Akár 127 szolga is csatlakoztatható. Egy buszon minden eszközt egyedi I2C -címmel kell azonosítani. Egy eszköz I2C címe gyakran keményen van bekötve egy eszköz chipjébe. Ugyanazon eszközök egy buszon történő csatlakoztatásához a gyártó gyakran hagyja a lehetőséget az I2C -cím megváltoztatására a csapok konfigurációjának összeforrasztásával.

Ez a helyzet az INA260 három táblájánál is. A készülék két címetűvel rendelkezik, A0 és A1, amelyek a kívánt cím beállításához GND, VS, SCL vagy SDA -hoz csatlakoztathatók. A texas műszerekből származó INA260 chip adatlapjában megtalálható a 16 lehetséges cím mindegyikéhez tartozó pin csatlakozások listája.

Az adafruit tábla 4 táblára korlátozza ezt azáltal, hogy két párnát tesz ki, amelyekkel az A0 és/vagy A1 -t VS -re lehet húzni. Az INA260 kártya alapértelmezett címe 0x40.

Ezt a lépést úgy hajthatja végre, hogy különböző címeket rendel a másik két táblához:

A második tábla A0 párnájának forrasztásával beállítja a címét: 0x41 (vagy 1000001 BIN)

A harmadik tábla A1 betétjének forrasztásával hozzárendeli a címet: 0x44 (vagy 1000100 BIN)

3. lépés: Csatlakoztassa az Ina paneleket az ESP32 -hez

Csatlakoztassa az Ina paneleket az ESP32 -hez
Csatlakoztassa az Ina paneleket az ESP32 -hez

Most, hogy mindegyik INA táblához különböző I2C címeket rendeltünk, ideje csatlakoztatni őket az ESP32 kártyához!

A fenti kép szerint csatlakoztassa

1) a VCC csap a 3,3 V -os tüskéhez

2) a GND csap a GND csaphoz

3) az SDA érintkezőt a GPIO 21 tűvel

4) az SCL -tűt a GPIO 22 -es csaphoz

NYÁK -konstrukciót használtam a csatlakoztatásokhoz, mivel ez egy nagyobb projekt része (WiFi állítható feszültségű tápegység állítható áramkorlátozással - remélem, hogy erre is oktatható lesz).

A csatlakozáshoz bármilyen más módszert is használhat, ez lehet egy felforrasztott parketta vagy egy kenyérlap. Mindkettő jól fog működni.

Lépés: Telepítse az ESP32 kártyát az Arduino IDE -be

Telepítse az ESP32 kártyát az Arduino IDE -be
Telepítse az ESP32 kártyát az Arduino IDE -be

Most, hogy összekapcsoltuk a táblákat egymással, ideje ellenőrizni a csatlakozást.

Ezt úgy tesszük meg, hogy összegyűjtjük az Ina táblák I2C címét.

Az ESP32 kártya tökéletesen működik az Arduino IDE -vel.

Tehát telepítsük az ESP32 táblát Arduino -ba a fórumkezelő segítségével.

5. lépés: Ellenőrizze az Ina -ESP32 kapcsolatot az I2C szkenner használatával

Ellenőrizze az Ina -ESP32 kapcsolatot az I2C szkenner használatával
Ellenőrizze az Ina -ESP32 kapcsolatot az I2C szkenner használatával

Egy egyszerű I2C címszkennerrel biztosítjuk az ESP32 és az Ina260 kártyák közötti kapcsolatot.

Az I2C címszkenner kódja átmásolható egy üres Arduino projektbe.

A kódot az Arduino cc webhelyéről vettük át:

// -------------------------------------- // i2c_scanner // verzió 1/ / Ez a program (vagy kód, ami úgy néz ki) // sok helyen megtalálható. // Például az Arduino.cc fórumon. // Az eredeti szerző nem ismert. // 2. verzió, 2012. június, Arduino 1.0.1 használata, Az Arduino 1.0.3 // használatával az Arduino.cc felhasználó Krodal. // louarnold által végzett változtatások eltávolítva. // A szkennelési címek megváltoztak 0… 127 -ről 1… 119 -re, // Nick Gammon i2c szkennere szerint // https://www.gammon.com.au/forum/?id=10896 // 5. verzió, március 2013. március 28. // 4. verzióként, de a cím most 127 -re szkennel. // Úgy tűnik, hogy egy érzékelő a 120. címet használja. // 6. verzió, 2015. november 27. // Hozzáadva a Leonardo soros kommunikációra várva. // Ez a vázlat teszteli a standard 7 bites címeket // Előfordulhat, hogy a magasabb bites címmel rendelkező eszközök nem láthatók megfelelően. // #include void setup () {Wire.begin (); Sorozat.kezdet (9600); while (! Sorozat); // Leonardo: várjon a soros monitorra Serial.println ("\ nI2C Scanner"); } void loop () {bájt hiba, cím; int nEszközök; Serial.println ("Szkennelés …"); n Eszközök = 0; for (address = 1; address <127; address ++) {// Az i2c_scanner a // Write.endTransmisstion visszatérési értékét használja annak megállapítására, hogy // egy eszköz nyugtázta -e a címet. Wire.beginTransmission (cím); hiba = Wire.endTransmission (); if (hiba == 0) {Serial.print ("I2C eszköz található a 0x címen"); if (cím <16) Serial.print ("0"); Serial.print (cím, HEX); Serial.println ("!"); nEszközök ++; } else if (hiba == 4) {Serial.print ("Ismeretlen hiba a 0x címen"); if (cím <16) Serial.print ("0"); Serial.println (cím, HEX); }} if (nDevices == 0) Serial.println ("Nem található I2C -eszköz / n"); else Serial.println ("kész / n"); késleltetés (5000); // várjon 5 másodpercet a következő vizsgálatra}

6. lépés: A HTML webszerver mappa létrehozása

HTML webszerver mappa létrehozása
HTML webszerver mappa létrehozása

Az ESP32 lehetővé teszi egy webszerver futtatását. Ezenkívül meglehetősen nagy RAM memóriát biztosít néhány weboldal tárolására. (Automatikusan tömöríti a weboldal fájljait).

Az Arduino IDE lehetővé teszi a létrehozott weboldalak közvetlen feltöltését az ESP32 memóriájába.

Ehhez létre kell hoznia egy "data" mappát az Arduino projekt mappája alatt. Esetemben ez / Arduino / esp32_Power_supply_v1_implemented / data.

Fontos, hogy a mappát pontosan „adatoknak” nevezze el, mivel ez a mappa neve, amelyet Arduino keres majd, amikor a weboldalfájlokat ESP -re tölti fel.

7. lépés: Hozza létre a Power Monitor webhelyet

A HMTL egy olyan nyelv, amely lehetővé teszi a szöveg webböngészőben történő megjelenítését. A HTML fájl a htm (l) kiterjesztés alatt kerül mentésre. A weblap formázása általában külön fájlba (pl. Css fájlba) kerül. A weboldal által kínált programfunkciókat általában egy másik fájlba helyezik (pl. Js fájl, javascript esetén).

A HTML dokumentumban a szöveget, a formázást és a Javascript -et egyetlen fájlba foglaltam. Ezért nem jó példa a weboldal készítésére, de a célokat szolgálja. A HTML dokumentumot „Index.htm” -nek neveztem el.

Egy másik fájl is szerepel az adatmappámban, pl. PicoGraph.js. A PicoGraph könyvtárat a RaishComputers Vishnu Shankar B szolgáltatja, és nagyon egyszerű, ugyanakkor hatékony és rugalmas módot kínál a grafikonok weboldalra történő megjelenítésére. Kicsit módosítottam a kódexet, hogy jobban szolgáljam a célomat.

Észre fogja venni, hogy a HTML weboldal tartalmazza a PCB -n lévő tápfeszültség vezérlésére szolgáló kódot is. A feszültségellátó kód vezérli az 5 I/O érintkező feszültségszintjét. Módosíthatja a kódot, hogy ezt kizárja, vagy hagyhatja be, ha nincs hatása.

A html kód ehhez a lépéshez txt fájlként van csatolva (mivel az utasítások nem teszik lehetővé a htm kód feltöltését).

A HTML kód használatához másolja be és illessze be egy szövegszerkesztőbe (Notepad ++ -t használok), és mentse el az "Index.htm" néven az "Adatok" mappába. Ugyanezt kell tennie a picograph.txt fájlhoz is, de nevezze át a picograph.js fájlra

Ami a HTML fájlt illeti:

Az SndUpdate funkció segítségével üzeneteket küldhet az ESP -ről a weboldalra.

Az ESP -ből küldött üzenetek a tápegység funkcióját szolgálják, és ezen utasításon kívül esnek. az ESP -nek küldött üzenetek az Ina260 kártya mérését szolgálják.

var Msg = JSON.parse (xh.responseText); PG1_yrand0 = Üzenet. PG1_yrand0; PG2_yrand0 = Üzenet. PG2_yrand0; PG3_yrand0 = Üzenet. PG3_yrand0; PG4_yrand0 = Üzenet. PG4_yrand0; PG5_yrand0 = Üzenet. PG5_yrand0; PG6_yrand0 = Üzenet. PG6_yrand0;

A fenti kód 6 számot olvas ki az ESP32 tábláról, azaz. a feszültségmérés, az árammérés az első tábláról, majd a két mérés a másodikról és így tovább.

A grafikonok úgynevezett flex-konténerekbe vannak ágyazva, amelyek lehetővé teszik a weboldal rugalmas átméretezését.

.flex-konténer {kijelző: flex; háttérszín: cadetblue; flex-wrap: csomagolás; }.flex-container> div {background-color: #f1f1f1; margó: 10 képpont; párnázás: 20 képpont; betűméret: 20 képpont; font-family: "Hét szegmens"; betűtípus súlya: félkövér; }

A flexibilis tárolók tartalmát az alábbiak szerint állítjuk össze, beleértve a beágyazott grafikonokat.

(vegye figyelembe, hogy az eltávolítás helye)

div label for = "PG1_scale" Scale:/label input name = "PG1_scale" value = "10" brbr!-Canvas for thrraph-canvas style = "height: 100px; border: 2px solid #000000; background-color: #fafafa; " /vászon

!-div a legendákhoz/címkékhez-

div /div div /div /div

A HTML fájl utolsó fontos része együttműködik a PicoGraph könyvtárral a számok bemutatásához:

var PG1_demograph = createGraph ("PG1_graphDemo", ["Ch1"], "V", "PG1_graphLabels", 20, 11, false, false, 11, "#e52b50"); var PG2_demograph = createGraph ("PG2_graphDemo", ["Ch1"], "mA", "PG2_graphLabels", 20, 11, false, false, 11, "#e52b50"); var PG3_demograph = createGraph ("PG3_graphDemo", ["Ch2"], "V", "PG3_graphLabels", 20, 11, false, false, 11, "#008000"); var PG4_demograph = createGraph ("PG4_graphDemo", ["Ch2"], "mA", "PG4_graphLabels", 20, 11, false, false, 11, "#008000"); // var PG5_demograph = createGraph ("PG5_graphDemo", ["Ch3"], "V", "PG5_graphLabels", 20, 11, false, false, 11, "#0000ff"); var PG6_demograph = createGraph ("PG6_graphDemo", ["Ch3"], "mA", "PG6_graphLabels", 20, 11, false, false, 11, "#0000ff"); / * Értékek frissítése másodpercenként */ setInterval (updateEverySecond, 1000); function updateEverySecond () { / * Új értékek beszerzése * / SndUpdate ();

/ * Grafikon frissítése */PG1_demograph.update ([PG1_yrand0], parseInt (byID ("PG1_scale"). Value)+ parseInt (byID ("PG1_scale"). Value)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (byID ("PG2_scale"). Value)+ parseInt (byID ("PG2_scale"). Value)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (byID ("PG3_scale"). Value)+ parseInt (byID ("PG3_scale"). Value)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (byID ("PG4_scale"). Value)+ parseInt (byID ("PG4_scale"). Value)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (byID ("PG5_scale"). Value)+ // parseInt (byID ("PG5_scale"). Value)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (byID ("PG6_scale"). Value)+ parseInt (byID ("PG6_scale"). Value)/10, "#0000ff"); var Watts = Math.round (PG1_yrand0 * PG2_yrand0 * 100)/100; byID ("PG1_wattLabel"). internalHTML = `WATT: $ {Watts} mW`; var Watts = Math.round (PG3_yrand0 * PG4_yrand0 * 100)/100; byID ("PG3_wattLabel"). internalHTML = `WATT: $ {Watts} mW`; // var Watts = Math.round (PG5_yrand0 * PG6_yrand0 * 100)/100; // byID ("PG5_wattLabel"). internalHTML = `WATT: $ {Watts} mW`; byID ("PG1_skála"). value = Math.floor (parseInt (byID ("PG1_scale"). value)/2+PG1_yrand0); byID ("PG2_skála"). value = Math.floor (parseInt (byID ("PG2_scale"). value)/2+PG2_yrand0); byID ("PG3_skála"). value = Math.floor (parseInt (byID ("PG3_scale"). value)/2+PG3_yrand0); byID ("PG4_skála"). value = Math.floor (parseInt (byID ("PG4_scale"). value)/2+PG4_yrand0); // byID ("PG5_skála"). value = Math.floor (parseInt (byID ("PG5_scale"). value)/2+PG5_yrand0); byID ("PG6_skála"). value = Math.floor (parseInt (byID ("PG6_scale"). value)/2+PG6_yrand0);

A kód tanulmányozása során észre fogod venni, hogy csak 5 grafikont használok a 6 -ból. A megfelelő sorok megjegyzésének megszüntetése lehetővé teszi a 6. grafikon használatát.

Azok számára, akik még nem tapasztalták a html -t, ez a lépés olyan nehéz lehet. Ez azonban remek bevezetésként szolgálhat a HTML világába. Tudom, mert ez volt az első oldal, amit valaha készítettem. Tehát ne ijedjen meg. Az alattunk tapasztaltaknak legyünk elnézőek.

A weboldalon végzett munka eredménye megtekinthető a html megnyitásával, betöltődik a böngészőbe, és megjeleníti a megjelenését. A lehetséges hibákat az F12 billentyű lenyomásával ellenőrizheti a böngészőben, megjelenik a hibakeresési ablak. A hibakeresés teljes magyarázata kívül esik ezen útmutató keretein, de a weboldal hasznos lehet a weboldal / javascript hibakeresés első lépéseként.

A következő lépés a létrehozott weboldalak betöltése az ESP32 -be.

8. lépés: Töltse be a weboldalt az ESP32 -be

Töltse be a weboldalt az ESP32 -be
Töltse be a weboldalt az ESP32 -be

A kielégítő eredmény elérése után ideje feltölteni a weboldalt az ESP32 -be.

Ezt úgy teheti meg, hogy az „Index.htm” (weboldal) és a „PicoGraph.js” fájlokat az Arduino projekt „data” mappájába menti.

A következő lépés az ESP32 kártya csatlakoztatása a számítógéphez. A megfelelő kártya és a COM -port kiválasztása után válassza ki az ESP32 vázlatadatok feltöltését az Arduino IDE Eszközök menüjében.

Látni fogja, hogy az IDE megkezdi a feltöltési folyamatot, amelynek sikeres betöltéshez kell vezetnie.

E lépés mellett állítsa be az ESP32 mikrokontrollert webszerverként.

9. lépés: Az ESP32 beállítása webszerverként

Mellékelten megtalálja az Arduino Ino vázlatot, amely az ESP32 -t webszerverként konfigurálja.

Az SSID -t és a kapcsolódó jelszót le kell cserélnie az útválasztó jelszavára.

Amint már említettük, ez a vázlat tartalmazza azt a kódot is, amellyel a weboldalt a NYÁK tápellátási oldalának vezérlőjeként konfigurálhatja (valójában 5 IO -tűt konfigurál PWM -csapként, és vezérli őket a weboldalról érkező üzenetfolyamon keresztül).

A vázlat a Hristo Gochkov által kifejlesztett szabványos Webserver vázlaton alapul.

Némi magyarázat a kódra.

Az alábbi funkciók mind a webszerver beállításához kapcsolódnak.

String formatBytes (size_t bytes) String getContentType (String filename) bool létezik (String path) bool handleFileRead (String path) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()

A setup () függvény első kódja szintén a PWM és a Webszerver beállításához kapcsolódik.

A következő kód állítja be a megszakítás funkciót, amely kiszolgálja az üzenetfolyamokat a weboldalra és onnan:

(fel kell ismernie az azonosítókat a weboldal létrehozásakor)

szerver.on ("/SndUpdate", HTTP_GET, () {

Karakterlánc Msg = "{"; Msg+ = "\" PG1_yrand0 / ":"+ (Karakterlánc) Vina [1]; Msg+ = ", \" PG2_yrand0 / ":"+ (Karakterlánc) Iina [1]; Msg+ = ", \" PG3_yrand0 / ":"+ (Karakterlánc) Vina [0]; Msg+ = ", \" PG4_yrand0 / ":"+ (Karakterlánc) Iina [0]; Msg+ = ", \" PG5_yrand0 / ":"+ (Karakterlánc) Vina [2]; Msg+ = ", \" PG6_yrand0 / ":"+ (Karakterlánc) Iina [2]; Üzenet+= "}";

server.send (200, "text/json", Msg);

Ezzel elindul a szerver:

szerver.begin ();

A következő kódblokk inicializálja az INA260 táblákat:

// INA260 inicializálás if (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Nem sikerült megtalálni az INA260 0x40 chipet")); // while (1); } Serial.println (F ("Talált INA260 chip 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Nem sikerült megtalálni a 0x41 INA260 chipet")); // while (1); } Serial.println (F ("Talált INA260 0x41 chip")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Nem sikerült megtalálni az INA260 0x44 chipet")); // while (1); } Serial.println (F ("Talált INA260 chip 0x44"));

ina260_0x40.setAveverageCount (INA260_COUNT_256);

ina260_0x40.setVoltageConversionTime (INA260_TIME_1_1_ms); ina260_0x40.setCurrentConversionTime (INA260_TIME_1_1_ms); ina260_0x40.setMode (INA260_MODE_CONTINUOUS); ina260_0x41.setAveverageCount (INA260_COUNT_256); ina260_0x41.setVoltageConversionTime (INA260_TIME_1_1_ms); ina260_0x41.setCurrentConversionTime (INA260_TIME_1_1_ms); ina260_0x41.setMode (INA260_MODE_CONTINUOUS); ina260_0x44.setAveverageCount (INA260_COUNT_256); ina260_0x44.setVoltageConversionTime (INA260_TIME_1_1_ms); ina260_0x44.setCurrentConversionTime (INA260_TIME_1_1_ms); ina260_0x44.setMode (INA260_MODE_CONTINUOUS);

A Loop kódban a következő utasítás biztosítja a megszakítási kód kezelését:

server.handleClient ();

A ciklus utasítás következő kódja a tápegység funkciójával kapcsolatos.

A következő kód a ciklusban () ismét érdekes:

Vina [0] = ina260_0x40.readBusVoltage ()/1000.0f; Iina [0] = ina260_0x40.readCurrent (); Vina [1] = ina260_0x41.readBusVoltage ()/1000.0f; Iina [1] = ina260_0x41.readCurrent (); Vina [2] = ina260_0x44.readBusVoltage ()/1000.0f; Iina [2] = ina260_0x44.readCurrent ();

Ezek az állítások összegyűjtik és elkészítik a méréseket a weboldalra való továbbításhoz a kiszolgálón keresztül. Megszakított hívások esetén (1000 ms -onként, a weboldal html java szkriptjében beállítva).

10. lépés: Kész

Kész vagy!
Kész vagy!

A vázlat feltöltése az ESP32 kártyára befejezi a beállítást, és a Power monitornak véglegesnek kell lennie!

Lehet, hogy észrevette, hogy az ESP32 áramellátása most az USB -porton keresztül történik, ez növeli a WiFi -alapú kapcsolat előnyeit a feszültség / árammérőkkel. Ezért készítettem egy egyszerű LM317 alapú feszültségszabályozott tápegységet az ESP32 -hez. Kizártam ennek az utasításnak a hatálya alól, de ha van érdeklődés, a következő oktathatóvá válhat.

A következő lépésben már megadtam a tápegység elektronikus áramkörét, amely inspirációként szolgálhat.

11. lépés: Az ESP32 bekapcsolása

Az ESP32 tápellátása
Az ESP32 tápellátása

Ez inspirációt ad egy önálló erőforrás létrehozásához az ESP32 készülékhez, ha nincs ilyen.

A főáramkör egy 19 V -os laptop tápegységén működik. Ez kétlépcsős feszültségcsökkentést kér, hogy az LM317 -esek teljesítményveszteségét kordában tartsák. (Még hűtőbordákkal is!). Ne felejtse el behelyezni a 100uF kondenzátort a VCC_ESP vonal elé, mivel ezeknek a mikrovezérlőknek nagy áramingadozásai vannak, természetesen a WiFi kapcsolat indításakor.

Ne feledje, hogy az ESP32 -t nem egyszerre több áramforrásból táplálhatja!

Továbbá a szokásos felelősségkizárások, de legfőképpen

Érezd jól magad!

Az összes fájl megtalálható a GitHub-on:

Ajánlott: