Obsah:

Multikanálový merač napätia a prúdu Wi-Fi: 11 krokov (s obrázkami)
Multikanálový merač napätia a prúdu Wi-Fi: 11 krokov (s obrázkami)

Video: Multikanálový merač napätia a prúdu Wi-Fi: 11 krokov (s obrázkami)

Video: Multikanálový merač napätia a prúdu Wi-Fi: 11 krokov (s obrázkami)
Video: 5 УДИВИТЕЛЬНЫХ ЖИЗНЕННЫХ ХАКОВ # 2 2024, Júl
Anonim
Viackanálový merač napätia a prúdu Wifi
Viackanálový merač napätia a prúdu Wifi

Pri breadboardingu potrebuje človek často sledovať rôzne časti okruhu naraz.

Aby som predišiel bolestiam pri lepení multimetrových sond z jedného miesta na druhé, chcel som navrhnúť viackanálový merač napätia a prúdu.

Doska Ina260 od spoločnosti Adafruit poskytuje veľmi efektívny a efektívny spôsob, ako to dosiahnuť. Obsahuje veľmi presný merač napätia a prúdu s integrovaným mostíkom I2C (úspora veľa pinov pri kombinácii troch z nich!).

Jediné, čo chýbalo, bol displej. Preto sa rozhodlo pripojiť dosky na vývojovú dosku ESP32, ktorá môže ľahko prenášať webový server a zobrazovať merané položky na obrazovke počítača/mobilného telefónu.

Zásoby

3 x adafruitová doska Ina260

3 x kolíky záhlavia s dlhými kolíkmi

Min. 6 prepojovacích káblov

1 x ESP32 Wrover-B (alebo akákoľvek iná doska Wifi s podporou I2C)

2 x 19 kolíkový konektor (ak je k dispozícii)

1 x PCB alebo Perfboard

Napájanie 1 x 3,3 V.

Krok 1: Spájkujte tri dosky INA

Spájkujte tri dosky INA
Spájkujte tri dosky INA

Prvým krokom je zostavenie troch dosiek INA260.

Veľmi dobrý návod nájdete na webovej stránke Adafruit. Pri montáži postupujte podľa pokynov.

Aby ste ich mohli poukladať na seba, použite radšej dlhé kolíkové hlavičky než dodávané kolíkové lišty!

Krok 2: Konfigurujte tri rôzne adresy I2C

Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C
Nakonfigurujte tri rôzne adresy I2C

I2C je sériový protokol pre dvojvodičové rozhranie na pripojenie zariadení s nízkou rýchlosťou na krátke vzdialenosti. Je možné pripojiť až 127 otrokov. Na jednej zbernici musí byť každé zariadenie identifikované jedinečnou adresou I2C. Adresa I2C zariadenia je často pevne zapojená do čipu zariadenia. Na pripojenie rovnakých zariadení na jednu zbernicu výrobca často necháva možnosť zmeny adresy I2C spájkovaním konfigurácie pinov dohromady.

To je aj prípad troch dosiek INA260. Zariadenie má dva kolíky adries, A0 a A1, ktoré je možné pripojiť k GND, VS, SCL alebo SDA a nastaviť požadovanú adresu. V technickom liste čipu INA260 od texaských prístrojov nájdete zoznam pinových spojení pre každú zo 16 možných adries.

Doska adafruit to obmedzuje na 4 dosky vystavením dvoch podložiek, ktoré je možné použiť na ťahanie A0 a/alebo A1 do VS. Predvolená adresa dosky INA260 je 0x40.

Tento krok dokončíte priradením rôznych adries dvom ďalším doskám:

Spájkovaním bloku A0 druhej dosky nastavíte jeho adresu: 0x41 (alebo 1000001 BIN)

Spájkovaním bloku A1 tretej dosky priradíte adresu: 0x44 (alebo 1000100 BIN)

Krok 3: Pripojte dosky Ina k ESP32

Pripojte dosky Ina k ESP32
Pripojte dosky Ina k ESP32

Teraz, keď sme každej z dosiek INA priradili rôzne adresy I2C, je načase ich pripojiť k doske ESP32!

Podľa vyššie uvedeného obrázku pripojte

1) kolík VCC na 3,3 V pin

2) kolík GND na kolík GND

3) kolík SDA na kolík GPIO 21

4) pin SCL na kolík GPIO 22

Na zapojenie som použil návrh DPS, pretože je súčasťou väčšieho projektu (nastaviteľné napätie WiFi s nastaviteľným obmedzením prúdu - dúfam, že aj pre toto bude návod).

Na pripojenie môžete použiť akýkoľvek iný spôsob, môže to byť perfboard, ktorý spájkujete alebo použite nepájivú dosku. Oba budú fungovať dobre.

Krok 4: Nainštalujte dosku ESP32 do Arduino IDE

Nainštalujte dosku ESP32 do Arduino IDE
Nainštalujte dosku ESP32 do Arduino IDE

Teraz, keď sme dosky navzájom spojili, je načase skontrolovať spojenie.

Urobíme to zhromaždením adries I2C dosiek Ina.

Doska ESP32 funguje perfektne s Arduino IDE.

Nainštalujme teda dosku ESP32 do Arduina pomocou správcu dosiek.

Krok 5: Skontrolujte pripojenie Ina k ESP32 pomocou skenera I2C

Skontrolujte pripojenie Ina k ESP32 pomocou skenera I2C
Skontrolujte pripojenie Ina k ESP32 pomocou skenera I2C

Na zaistenie konektivity medzi doskami ESP32 a Ina260 použijeme jednoduchý skener adries I2C.

Kód skenera adries I2C je možné skopírovať a vložiť do prázdneho projektu Arduino.

Kód bol prevzatý z webovej stránky Arduino cc:

// -------------------------------------- // i2c_scanner // // Verzia 1/ / Tento program (alebo kód, ktorý naň vyzerá) // nájdete na mnohých miestach. // Napríklad na fóre Arduino.cc. // Pôvodný autor nie je známy. // Verzia 2, jún 2012, používanie Arduina 1.0.1 // Prispôsobené tak, aby bolo čo najjednoduchšie používateľom Arduino.cc Krodal // Verzia 3, 26. februára 2013 // V3 od louarnold // Verzia 4, 3. marca 2013 „Používanie Arduino 1.0.3 // od používateľa Arduino.cc Krodal. // Zmeny od louarnolda odstránené. // Adresy skenovania sa zmenili z 0… 127 na 1… 119, // podľa skenera i2c od Nicka Gammona // https://www.gammon.com.au/forum/?id=10896 // Verzia 5, marec 28, 2013 // Ako verzia 4, ale adresa skenuje teraz na 127. // Zdá sa, že senzor používa adresu 120. // Verzia 6, 27. novembra 2015. // Pridané čakanie na sériovú komunikáciu Leonardo. // // // Tento náčrt testuje štandardné 7-bitové adresy // Zariadenia s vyššou bitovou adresou nemusia byť správne viditeľné. // #include void setup () {Wire.begin (); Serial.begin (9600); while (! Serial); // Leonardo: počkajte na sériový monitor Serial.println ("\ nI2C Scanner"); } void loop () {chyba bajtu, adresa; int nZariadenia; Serial.println („Skenovanie …“); nZariadenie = 0; for (address = 1; address <127; address ++) {// i2c_scanner používa návratovú hodnotu // Write.endTransmisstion na zistenie, či // zariadenie potvrdilo adresu. Wire.beginTransmission (adresa); chyba = Wire.endTransmission (); if (chyba == 0) {Serial.print ("Zariadenie I2C nájdené na adrese 0x"); if (adresa <16) Serial.print ("0"); Serial.print (adresa, HEX); Serial.println ("!"); nZariadenie ++; } else if (chyba == 4) {Serial.print ("Neznáma chyba na adrese 0x"); if (adresa <16) Serial.print ("0"); Serial.println (adresa, HEX); }} if (nDevices == 0) Serial.println ("Neboli nájdené žiadne zariadenia I2C / n"); else Serial.println ("hotovo / n"); oneskorenie (5 000); // počkajte 5 sekúnd na ďalšie skenovanie}

Krok 6: Vytvorenie priečinka webového servera HTML

Vytvorenie priečinka webového servera HTML
Vytvorenie priečinka webového servera HTML

ESP32 poskytuje možnosť spustenia webového servera. Poskytuje tiež pomerne veľkú pamäť RAM na uloženie niektorých webových stránok. (Automaticky komprimuje súbory webových stránok).

Arduino IDE poskytuje funkcie pre priame odosielanie vytvorených webových stránok do pamäte RAM ESP32.

Aby ste to urobili, musíte vytvoriť priečinok „údaje“pod priečinkom projektu Arduino. V mojom prípade ide o / Arduino / esp32_Power_supply_v1_implemented / data.

Je dôležité pomenovať priečinok presne „údajmi“, pretože je to názov priečinka, ktorý bude Arduino hľadať pri odosielaní súborov webových stránok do ESP.

Krok 7: Vytvorte webovú stránku Power Monitor

HMTL je jazyk, ktorý umožňuje prezentovať text vo webovom prehliadači. Súbor HTML je uložený pod príponou htm (l). Formátovanie webovej stránky je zvyčajne umiestnené do samostatného súboru (napr. Súbor css). Funkcie programu, ktoré webová stránka musí ponúkať, sa bežne vkladajú do iného súboru (napr. Súbor js, pre javascript).

V mojom dokumente HTML som vložil text, formátovanie a Javascript do jedného súboru. Nie je to preto dobrý príklad, ako vytvoriť webovú stránku, ale slúži účelom. Dokument HTML som pomenoval „Index.htm“.

Druhý súbor je súčasťou môjho priečinka s údajmi, tj. PicoGraph.js. Knižnicu PicoGraph poskytuje Vishnu Shankar B z RainingComputers a umožňuje veľmi jednoduchý, ale efektívny a flexibilný spôsob prezentácie grafov na webovej stránke. Mierne som zmenil kód, aby lepšie slúžil môjmu účelu.

Všimnite si, že webová stránka HTML obsahuje aj kód na ovládanie napájania napätím na mojej doske s plošnými spojmi. Kód zdroja napätia riadi úroveň napätia 5 I/O pinov. Kód môžete zmeniť, aby sa vylúčil, alebo ho môžete ponechať, ak to nemá žiadny vplyv.

Html kód je k tomuto kroku pripojený ako súbor txt (pretože pokyny neumožňujú nahranie kódu htm).

Ak chcete použiť kód HTML, skopírujte ho a prilepte do textového editora (používam program Poznámkový blok ++) a uložte ho ako „Index.htm“do priečinka „Údaje“. To isté urobíte so súborom picograph.txt, ale premenujete ho na picograph.js

Pokiaľ ide o súbor HTML:

Funkcia SndUpdate sa používa na odosielanie správ späť a dopredu z ESP na webovú stránku.

Správy odoslané z ESP slúžia funkcii napájania a sú mimo rozsahu tohto pokynu. správy do ESP slúžia na meranie na doske Ina260.

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

Vyššie uvedený kód číta 6 čísel z dosky ESP32, tj. meranie napätia, meranie prúdu z prvej dosky, nasledované dvoma meraniami z druhej a tak ďalej.

Grafy sú vložené do takzvaných flexibilných kontajnerov, ktoré umožňujú flexibilnú zmenu veľkosti webovej stránky.

.flex-container {display: flex; farba pozadia: cadetblue; flex-wrap: zábal; }.flex-kontajner> div {farba-pozadia: #f1f1f1; okraj: 10 pixelov; polstrovanie: 20 pixlov; veľkosť písma: 20px; rodina fontov: "Seven Segment"; font-weight: bold; }

Obsah každého z flexibilných kontajnerov je zostavený nasledovne, vrátane vložených grafov.

(všimnite si, kde sú odstránené)

div label for = "PG1_scale" Mierka:/label input name = "PG1_scale" value = "10" brbr!-Canvas for thr graph-canvas style = "height: 100px; border: 2px solid #000000; background-color: #fafafa; " /plátno

!-div pre legendy/štítky-

div /div div /div /div

Posledná dôležitá časť v súbore HTML pracuje s knižnicou PicoGraph na prezentácii čísel:

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"); / * Aktualizácia hodnôt každú sekundu */ setInterval (updateEverySecond, 1000); funkcia updateEverySecond () { / * Získať nové hodnoty * / SndUpdate ();

/ * Aktualizovať graf */PG1_demograph.update ([PG1_yrand0], parseInt (byID ("PG1_scale"). Hodnota)+ parseInt (podľa ID ("PG1_scale"). Hodnota)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (byID ("PG2_scale"). Hodnota)+ parseInt (podľa ID ("PG2_scale"). Hodnota)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (byID ("PG3_scale"). Hodnota)+ parseInt (podľa ID ("PG3_scale"). Hodnota)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (byID ("PG4_scale"). Hodnota)+ parseInt (podľa ID ("PG4_scale"). Hodnota)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (byID ("PG5_scale"). Hodnota)+ // parseInt (podľa ID ("PG5_scale"). Hodnota)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (byID ("PG6_scale"). Hodnota)+ parseInt (podľa ID ("PG6_scale"). Hodnota)/10, "#0000ff"); var Watts = Math.round (PG1_yrand0 * PG2_yrand0 * 100)/100; byID ("PG1_wattLabel"). innerHTML = `WATT: $ {Watts} mW`; var Watts = Math.round (PG3_yrand0 * PG4_yrand0 * 100)/100; byID ("PG3_wattLabel"). innerHTML = `WATT: $ {Watts} mW`; // var Watts = Math.round (PG5_yrand0 * PG6_yrand0 * 100)/100; // byID ("PG5_wattLabel"). innerHTML = `WATT: $ {Watts} mW`; byID ("PG1_scale"). value = Math.floor (parseInt (byID ("PG1_scale"). hodnota)/2+PG1_yrand0); byID ("PG2_scale"). value = Math.floor (parseInt (byID ("PG2_scale"). hodnota)/2+PG2_yrand0); byID ("PG3_scale"). value = Math.floor (parseInt (byID ("PG3_scale"). hodnota)/2+PG3_yrand0); byID ("PG4_scale"). value = Math.floor (parseInt (byID ("PG4_scale"). hodnota)/2+PG4_yrand0); // byID ("PG5_scale"). value = Math.floor (parseInt (byID ("PG5_scale"). hodnota)/2+PG5_yrand0); byID ("PG6_scale"). value = Math.floor (parseInt (byID ("PG6_scale"). hodnota)/2+PG6_yrand0);

Keď si preštudujete kód, všimnete si, že na svoj účel používam iba 5 grafov zo 6. Zrušenie komentovania správnych riadkov umožní 6. graf.

Pre tých, ktorí nemajú skúsenosti s html, môže byť tento krok náročný. Môže však slúžiť ako príjemný úvod do sveta HTML. Viem to, pretože to bola prvá stránka, ktorú som kedy vytvoril. Tak sa neboj. K tým, ktorí sú skúsení pod nami, buďte zhovievaví.

Výsledok svojej práce na webovej stránke si môžete prezrieť otvorením html, ktorý sa načíta do vášho prehliadača a ukáže jeho vzhľad. Možné chyby môžete skontrolovať stlačením klávesu F12 v prehliadači, zobrazí sa okno ladenia. Úplné vysvetlenie spôsobu ladenia nepatrí do rozsahu tohto návodu, ale webová stránka môže byť užitočná ako prvý krok k ladeniu webovej stránky / javascriptu.

Ďalším krokom je načítanie vytvorených webových stránok do ESP32.

Krok 8: Načítajte webovú stránku do ESP32

Načítajte webovú stránku do ESP32
Načítajte webovú stránku do ESP32

Po získaní uspokojivého výsledku je čas nahrať webovú stránku do ESP32.

Vykonáte to tak, že uložíte „Index.htm“(vaša webová stránka) a „PicoGraph.js“do priečinka „data“vo vašom projekte Arduino.

Ďalším krokom je pripojenie dosky ESP32 k počítaču. Potom, čo ste vybrali správnu dosku a COM port, zvoľte ESP32 Sketch Data Upload v ponuke Nástroje v Arduino IDE.

Uvidíte, že IDE začne s procesom nahrávania, ktorý by mal viesť k úspešnému načítaniu.

Ďalším krokom v tomto kroku je konfigurácia mikrokontroléra ESP32 ako webového servera.

Krok 9: Konfigurujte ESP32 ako webový server

V prílohe nájdete skicu Arduino Ino, ktorá nakonfiguruje ESP32 ako webový server.

SSID a súvisiace heslo budete musieť nahradiť heslom smerovača.

Ako už bolo spomenuté, tento náčrt obsahuje aj kód na konfiguráciu webovej stránky ako radiča pre napájaciu stranu dosky plošných spojov (v skutočnosti konfigurácia 5 IO pinov ako pinov PWM a ich ovládanie prostredníctvom toku správ z webovej stránky).

Náčrt je založený na štandardnom náčrte webového servera, ktorý vyvinul Hristo Gochkov.

Nejaké vysvetlenie ku kódu.

Nasledujúce funkcie súvisia s nastavením webového servera.

Reťazec formatBytes (size_t bytes) Reťazec getContentType (názov súboru reťazca) bool existuje (cesta reťazca) bool handleFileRead (cesta reťazca) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()

Tiež prvý kód vo funkcii setup () súvisí s nastavením PWM a webového servera.

Nasledujúci kód nastavuje funkciu prerušenia, ktorá slúži na streamovanie správ z a na webovú stránku:

(identifikátory by ste mali rozpoznať pri vytváraní webovej stránky)

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

Reťazec Msg = "{"; Msg+ = "\" PG1_yrand0 / ":"+ (Reťazec) Vina [1]; Msg+ = ", \" PG2_yrand0 / ":"+ (Reťazec) Iina [1]; Msg+ = ", \" PG3_yrand0 / ":"+ (Reťazec) Vina [0]; Msg+ = ", \" PG4_yrand0 / ":"+ (Reťazec) Iina [0]; Msg+ = ", \" PG5_yrand0 / ":"+ (Reťazec) Vina [2]; Msg+ = ", \" PG6_yrand0 / ":"+ (Reťazec) Iina [2]; Msg+= "}";

server.send (200, "text/json", správa);

Tým sa spustí server:

server.begin ();

Ďalší blok kódu inicializuje dosky INA260:

// Inicializácia INA260 if (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Nepodarilo sa nájsť čip INA260 0x40")); // while (1); } Serial.println (F ("Nájdený čip INA260 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Nepodarilo sa nájsť čip 0x41 INA260")); // while (1); } Serial.println (F ("Našiel sa čip INA260 0x41")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Nepodarilo sa nájsť čip INA260 0x44")); // while (1); } Serial.println (F ("Nájdený čip INA260 0x44"));

ina260_0x40.setAveragingCount (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.setAveragingCount (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.setAveragingCount (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);

V kóde slučky zaisťuje spracovanie kódu prerušenia nasledujúci príkaz:

server.handleClient ();

Nasledujúci kód v príkaze loop sa týka funkcie napájania.

Nasledujúci kód v slučke () je opäť zaujímavý:

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 ();

Tieto príkazy zhromažďujú a pripravujú merania na prenos na webovú stránku prostredníctvom servera Server.on prerušovacích hovorov (vyskytujúcich sa každých 1000 ms, nastavených v skripte html java webovej stránky).

Krok 10: Hotovo

Skončil si!
Skončil si!

Odovzdaním náčrtu na dosku ESP32 by sa malo dokončiť nastavenie a monitor napájania by mal byť konečný!

Možno ste si všimli, že napájanie ESP32 sa teraz vykonáva prostredníctvom portu USB, čo zvyšuje veľkú časť výhod pripojenia založeného na WiFi s vašimi meračmi napätia / prúdu. Preto som pre ESP32 vyrobil jednoduchý napäťovo regulovaný napájací zdroj na báze LM317. Uchovával som to mimo rozsah tohto pokynu, ale ak bude záujem, môže sa stať ďalším pokynom.

V ďalšom kroku som už poskytol elektronický obvod pre napájanie, ktorý by mohol slúžiť ako inšpirácia.

Krok 11: Napájanie ESP32

Napájanie ESP32
Napájanie ESP32

Tu je inšpirácia na vybudovanie samostatného zdroja napájania pre váš ESP32, ak ho nemáte k dispozícii.

Napájací obvod funguje na 19V prenosnom počítači. To si vyžaduje zníženie dvojfázového napätia, aby bol únik energie LM317 pod kontrolou. (Aj s chladičmi!). Nezabudnite tiež pred kondenzátor VCC_ESP vložiť 100uF kondenzátor, pretože tieto mikrokontroléry majú pri spustení pripojenia WiFi určite veľké výkyvy prúdu.

Nezabudnite, že ESP32 nebudete napájať viac ako jedným zdrojom napájania súčasne!

Ďalej obvyklé zrieknutie sa zodpovednosti, ale predovšetkým

Bavte sa!

Všetky súbory nájdete na mojom GitHub:

Odporúča: