Sadržaj:

Višekanalni Wifi mjerač napona i struje: 11 koraka (sa slikama)
Višekanalni Wifi mjerač napona i struje: 11 koraka (sa slikama)

Video: Višekanalni Wifi mjerač napona i struje: 11 koraka (sa slikama)

Video: Višekanalni Wifi mjerač napona i struje: 11 koraka (sa slikama)
Video: Использование Juntek VAT 4300 Wireless 300A Многофункциональный измеритель тока Current Power 2024, Srpanj
Anonim
Višekanalni Wifi mjerač napona i struje
Višekanalni Wifi mjerač napona i struje

Prilikom izrade matične ploče često je potrebno pratiti različite dijelove kruga odjednom.

Kako bih izbjegao bol pri lijepljenju sondi multimetra s jednog mjesta na drugo, htio sam dizajnirati višekanalni mjerač napona i struje.

Ploča Ina260 iz Adafruta pruža vrlo učinkovit i učinkovit način za to. Sadrži vrlo precizan mjerač napona i struje s integriranim I2C mostom (štedi mnogo pinova pri kombiniranju 3 od njih!).

Jedino što je nedostajalo bio je zaslon. Stoga je došlo do povezivanja ploča na razvojnu ploču ESP32, koja može lako nositi web poslužitelj za predstavljanje izmjerenih stavki na zaslonu računala/mobilnog uređaja.

Pribor

3 x Ina260 adafruit ploča

3 x igle zaglavlja s dugim iglama

Najmanje 6 kratkospojnih žica

1 x ESP32 Wrover-B (ili bilo koja druga Wifi ploča s podrškom za I2C)

2 x 19 -pinsko zaglavlje (ako postoji)

1 x PCB ili Perfboard

1 x 3,3 V napajanje

Korak 1: Lemite tri INA ploče

Lemite tri INA ploče
Lemite tri INA ploče

Prvi korak je sastavljanje tri INA260 ploče.

Vrlo dobra uputa može se pronaći na web stranici Adafruit. Slijedite upute za montažu Adafruit -a.

Da biste ih mogli složiti jedno na drugo, upotrijebite dugačka zaglavlja iglica, a ne isporučene trake za iglice!

Korak 2: Konfigurirajte tri različite I2C adrese

Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese
Konfigurirajte tri različite I2C adrese

I2C je serijski protokol za dvožično sučelje za povezivanje uređaja male brzine na kratke udaljenosti. Može se povezati do 127 robova. Na jednoj sabirnici svaki uređaj mora biti identificiran jedinstvenom I2C adresom. I2C adresa uređaja često je čvrsto spojena u čip uređaja. Za povezivanje istih uređaja na jednu sabirnicu proizvođač često ostavlja mogućnost promjene I2C adrese spajanjem konfiguracije pinova zajedno.

To vrijedi i za tri ploče INA260. Uređaj ima dva priključka za adresu, A0 i A1 koji se mogu spojiti na GND, VS, SCL ili SDA za postavljanje željene adrese. U podatkovnom listu INA260 čipa iz teksaških instrumenata može se pronaći popis pin veza za svaku od 16 mogućih adresa.

Adafruit ploča ograničava ovo na 4 ploče izlažući dva jastučića koji se mogu koristiti za povlačenje A0 i/ili A1 na VS. Zadana adresa ploče INA260 je 0x40.

Ovaj korak dovršavate dodjeljivanjem različitih adresa dvjema drugim pločama:

Lemljenjem A0 jastučića druge ploče postavljate njegovu adresu na: 0x41 (ili 1000001 BIN)

Lemljenjem A1 podloge treće ploče dodjeljujete adresu: 0x44 (ili 1000100 BIN)

Korak 3: Spojite Ina ploče na ESP32

Spojite Ina ploče na ESP32
Spojite Ina ploče na ESP32

Sada kada smo svakoj od INA ploča dodijelili različite I2C adrese, vrijeme je da ih spojimo na ESP32 ploču!

Prema gornjoj slici, spojite se

1) VCC pin na pin 3.3V

2) GND pin na GND pin

3) SDA pin na GPIO pin 21

4) SCL pin na GPIO pin 22

Koristio sam dizajn PCB -a za povezivanje jer je to dio većeg projekta (WiFi podesivo napajanje naponom s podesivim ograničenjem struje - nadam se da ću i ovo uputiti).

Za povezivanje možete upotrijebiti bilo koji drugi način, to može biti lemljena ploča koju ste lemili ili upotrijebili matičnu ploču. I jedno i drugo će raditi dobro.

Korak 4: Instalirajte ESP32 ploču u Arduino IDE

Instalirajte ESP32 ploču u Arduino IDE
Instalirajte ESP32 ploču u Arduino IDE

Sada kada smo spojili ploče jedna s drugom, vrijeme je da provjerimo vezu.

To ćemo učiniti prikupljanjem I2C adresa Ina ploča.

ESP32 ploča savršeno radi s Arduino IDE -om.

Pa instalirajmo ESP32 ploču u Arduino pomoću upravitelja ploče.

Korak 5: Provjerite vezu Ina s ESP32 pomoću skenera I2C

Provjerite vezu Ina s ESP32 pomoću I2C skenera
Provjerite vezu Ina s ESP32 pomoću I2C skenera

Koristit ćemo jednostavan skener adresa I2C kako bismo osigurali povezanost između ESP32 i Ina260 ploča.

Kôd skenera I2C adrese može se kopirati zalijepiti u prazan Arduino projekt.

Kôd je preuzet sa web stranice Arduino cc:

// -------------------------------------- // i2c_scanner // // Verzija 1/ / Ovaj program (ili kôd koji tako izgleda) // može se pronaći na mnogim mjestima. // Na primjer na forumu Arduino.cc. // Izvorni autor nije poznat. // Verzija 2, lipanj 2012, upotreba Arduina 1.0.1 // Prilagođeno da bude što jednostavnije od korisnika Arduino.cc Krodal // Verzija 3, 26. veljače 2013. // V3 od louarnolda // Verzija 4, 3. ožujka 2013., Korištenje Arduina 1.0.3 // od korisnika Arduino.cc Krodal. // Louarnoldove promjene uklonjene. // Skeniranje adresa promijenjeno je s 0… 127 na 1… 119, // prema i2c skeneru Nicka Gammona // https://www.gammon.com.au/forum/?id=10896 // Verzija 5, ožujak 28., 2013. // Kao verzija 4, ali adresa sada skenira na 127. // Čini se da senzor koristi adresu 120. // Verzija 6, 27. studenog 2015. // Dodano je čekanje na Leonardovu serijsku komunikaciju. // // // Ova skica testira standardne 7-bitne adrese // Uređaji s višom bitnom adresom možda se neće ispravno vidjeti. // #include void setup () {Wire.begin (); Serial.begin (9600); while (! Serijski); // Leonardo: pričekajte serijski monitor Serial.println ("\ nI2C skener"); } void loop () {byte error, address; int nUređaji; Serial.println ("Skeniranje …"); nUređaji = 0; for (adresa = 1; adresa <127; adresa ++) {// i2c_scanner koristi povratnu vrijednost // Write.endTransmisssion kako bi provjerio je li // uređaj doista potvrdio adresu. Wire.beginTransmission (adresa); error = Wire.endTransmission (); if (error == 0) {Serial.print ("I2C uređaj pronađen na adresi 0x"); if (adresa <16) Serial.print ("0"); Serijski.ispis (adresa, HEX); Serial.println ("!"); nUređaji ++; } else if (error == 4) {Serial.print ("Nepoznata pogreška na adresi 0x"); if (adresa <16) Serial.print ("0"); Serial.println (adresa, HEX); }} if (nDevices == 0) Serial.println ("Nema pronađenih I2C uređaja / n"); else Serial.println ("gotovo / n"); kašnjenje (5000); // pričekajte 5 sekundi za sljedeće skeniranje}

Korak 6: Stvaranje mape HTML web poslužitelja

Stvaranje mape HTML web poslužitelja
Stvaranje mape HTML web poslužitelja

ESP32 pruža mogućnost pokretanja web poslužitelja. Također pruža prilično veliku RAM memoriju za držanje nekih web stranica. (Automatski komprimira datoteke web stranica).

Arduino IDE pruža funkcionalnost za prijenos izrađenih web stranica izravno u RAM ESP32.

Da biste to učinili, morate stvoriti mapu "podaci" ispod mape projekta Arduino. U mom slučaju ovo su / Arduino / esp32_Power_supply_v1_implemented / data.

Mapu je važno točno imenovati 'podaci' jer će to biti naziv mape koju će Arduino tražiti prilikom postavljanja datoteka web stranica na ESP.

Korak 7: Izradite web stranicu Power Monitor

HMTL je jezik koji omogućuje prezentiranje teksta u web pregledniku. HTML datoteka sprema se pod nastavkom htm (l). Oblikovanje web stranice obično se stavlja u zasebnu datoteku (npr. Css datoteku). Funkcionalnost programa koju web stranica mora ponuditi obično se stavlja u drugu datoteku (npr. Js datoteka, za javascript).

U svoj HTML dokument uključio sam tekst, oblikovanje i Javascript u jednu datoteku. Stoga nije dobar primjer kako napraviti web stranicu, ali služi svrsi. HTML dokument sam nazvao 'Index.htm'.

Druga datoteka je uključena u moju mapu podataka, tj. PicoGraph.js. Knjižnicu PicoGraph pruža Vishnu Shankar B iz tvrtke RainingComputers i omogućuje vrlo jednostavan, ali učinkovit i fleksibilan način prikazivanja grafikona na web stranici. Malo sam izmijenio kôd kako bi bolje služio mojoj svrsi.

Primijetit ćete da HTML web stranica također sadrži kôd za kontrolu napona na mojoj PCB ploči. Kod napajanja kontrolira razinu napona od 5 I/O pinova. Kôd možete promijeniti kako biste to isključili ili ga možete ostaviti ako nema utjecaja.

HTML kod pridružen je ovom koraku kao txt datoteka (jer upute ne dopuštaju učitavanje htm koda).

Da biste koristili HTML kôd, kopirajte ga i zalijepite u uređivač teksta (ja koristim Notepad ++) i spremite ga kao 'Index.htm' u mapu 'Podaci'. Učinite isto za datoteku picograph.txt, ali je preimenujete u picograph.js

Vezano za HTML datoteku:

Funkcija SndUpdate koristi se za slanje poruka natrag i naprijed s ESP -a na web stranicu.

Poruke poslane s ESP -a služe funkciji napajanja i nisu dostupne za ovo uputstvo. poruke ESP -u služe mjerenjima ploče Ina260.

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

Gornji kod čita 6 brojeva s ploče ESP32, tj. mjerenje napona, mjerenje struje s prve ploče, nakon čega slijede dva mjerenja s druge i tako dalje.

Grafovi su ugrađeni u takozvane flex-spremnike koji omogućuju fleksibilnu promjenu veličine web stranice.

.flex-spremnik {display: flex; boja pozadine: cadetblue; flex-wrap: omot; }.flex-container> div {background-color: #f1f1f1; margina: 10px; punjenje: 20px; font-size: 20px; font-family: "Sedam segmenata"; font-weight: bold; }

Sadržaj svakog fleksibilnog spremnika sastavljen je kako slijedi, uključujući ugrađene grafikone.

(imajte na umu da je mjesto gdje je uklonjeno)

div label for = "PG1_scale" Scale:/label input name = "PG1_scale" value = "10" brbr!-Platno za thr grafikon-canvas style = "height: 100px; border: 2px solid #000000; background-color: #fafafa; " /platno

!-div za legende/oznake-

div /div div /div /div

Zadnji odjeljak važnosti u HTML datoteci radi s bibliotekom PicoGraph kako bi prikazao brojeve:

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"); / * Ažuriranje vrijednosti svake sekunde */ setInterval (updateEverySecond, 1000); funkcija updateEverySecond () { / * Dohvati nove vrijednosti * / SndUpdate ();

/ * Ažuriraj grafikon */PG1_demograph.update ([PG1_yrand0], parseInt (byID ("PG1_scale"). Vrijednost)+ parseInt (byID ("PG1_scale"). Vrijednost)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (byID ("PG2_scale"). Vrijednost)+ parseInt (byID ("PG2_scale"). Vrijednost)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (byID ("PG3_scale"). Vrijednost)+ parseInt (byID ("PG3_scale"). Vrijednost)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (byID ("PG4_scale"). Vrijednost)+ parseInt (byID ("PG4_scale"). Vrijednost)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (byID ("PG5_scale"). Vrijednost)+ // parseInt (byID ("PG5_scale"). Vrijednost)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (byID ("PG6_scale"). Vrijednost)+ parseInt (byID ("PG6_scale"). Vrijednost)/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"). vrijednost)/2+PG1_yrand0); byID ("PG2_scale"). value = Math.floor (parseInt (byID ("PG2_scale"). vrijednost)/2+PG2_yrand0); byID ("PG3_scale"). value = Math.floor (parseInt (byID ("PG3_scale"). vrijednost)/2+PG3_yrand0); byID ("PG4_scale"). value = Math.floor (parseInt (byID ("PG4_scale"). vrijednost)/2+PG4_yrand0); // byID ("PG5_scale"). value = Math.floor (parseInt (byID ("PG5_scale"). vrijednost)/2+PG5_yrand0); byID ("PG6_scale"). value = Math.floor (parseInt (byID ("PG6_scale"). vrijednost)/2+PG6_yrand0);

Proučavajući kôd primijetit ćete da za svoju svrhu koristim samo 5 grafikona od 6. Ako ne komentirate desne retke, omogućit ćete 6. grafikon.

Za one koji nemaju iskustva s html -om, ovaj korak može biti težak. Međutim, može poslužiti kao lijep uvod u svijet HTML -a. Znam jer je ovo bila prva stranica koju sam ikada stvorio. Zato se nemojte bojati. Za one iskusne pod nama, oprosti.

Rezultat vašeg rada na web stranici možete pregledati otvaranjem vašeg html -a, učitati će se u vaš preglednik i pokazati svoj izgled. Moguće pogreške možete provjeriti pritiskom na tipku F12 u pregledniku, pojavit će se prozor za otklanjanje pogrešaka. Potpuno objašnjenje načina uklanjanja pogrešaka nije u opsegu ovog uputstva, ali web stranica može biti korisna kao prvi korak do ispravljanja pogrešaka na web stranici / javascriptu.

Sljedeći korak je učitavanje stvorenih web stranica u ESP32.

Korak 8: Učitajte web stranicu u ESP32

Učitajte web stranicu u ESP32
Učitajte web stranicu u ESP32

Nakon što ste postigli zadovoljavajući rezultat, vrijeme je za učitavanje web stranice u ESP32.

To možete učiniti spremanjem 'Index.htm' (vaše web stranice) i 'PicoGraph.js' u mapu 'data' u okviru vašeg Arduino projekta.

Sljedeći korak je povezivanje ESP32 ploče s računalom. Nakon što ste odabrali ispravnu ploču i COM port, odaberite ESP32 Sketch Data Upload u izborniku Tools u Arduino IDE -u.

Vidjet ćete da će IDE započeti proces učitavanja, što bi trebalo dovesti do uspješnog učitavanja.

Sljedeći korak je konfiguriranje mikrokontrolera ESP32 kao web poslužitelja.

Korak 9: Konfigurirajte ESP32 kao web poslužitelj

U privitku se nalazi skica Arduino Ino koja će konfigurirati ESP32 kao web poslužitelj.

Morat ćete zamijeniti SSID i povezanu lozinku s lozinkom usmjerivača.

Kao što je već spomenuto, ova skica također sadrži kôd za konfiguriranje web stranice kao kontrolera za stranu napajanja PCB -a (zapravo, konfiguriranje 5 IO pinova kao PWM pinova i upravljanje njima kroz tok poruka s web stranice).

Skica se temelji na standardnoj skici web poslužitelja koju je razvio Hristo Gočkov.

Neka objašnjenja o kodu.

Sljedeće se funkcije odnose na postavljanje web poslužitelja.

Format nizaBytes (size_t bajtova) String getContentType (Naziv datoteke niza) bool postoji (Staza niza) bool handleFileRead (Staza niza) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()

Također prvi kod u funkciji setup () povezan je s postavljanjem PWM -a i web -poslužitelja.

Sljedeći kôd postavlja funkciju Prekini koja služi za protok poruka na i s web stranice:

(trebali biste prepoznati identifikatore iz izrade web stranice)

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

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

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

Ovo pokreće poslužitelj:

server.begin ();

Sljedeći blok koda inicijalizira ploče INA260:

// INA260 inicijalizacija if (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Nije moguće pronaći INA260 0x40 čip")); // while (1); } Serial.println (F ("Pronađen INA260 čip 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Ne mogu pronaći čip 0x41 INA260")); // while (1); } Serial.println (F ("Pronađen čip INA260 0x41")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Nije moguće pronaći čip INA260 0x44")); // while (1); } Serial.println (F ("Pronađen INA260 čip 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);

U petlji koda sljedeća izjava osigurava rukovanje kodom prekida:

server.handleClient ();

Sljedeći kôd u izjavi petlje povezan je s funkcionalnošću napajanja.

Sljedeći kod u loop () opet je zanimljiv:

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

Ovi izrazi prikupljaju i spremaju mjerenja za prijenos na web stranicu putem poslužitelja na prekidnim pozivima (događa se svakih 1000 ms, postavljeno u Java skripti web stranice).

Korak 10: Gotovi ste

Ti si gotov!
Ti si gotov!

Prijenos skice na ploču ESP32 trebao bi dovršiti postavljanje, a vaš monitor napajanja trebao biti konačan!

Možda ste primijetili da se napajanje ESP32 sada vrši putem USB priključka, što podiže veliki dio prednosti WiFi veze s vašim mjeračima napona / struje. Stoga sam za ESP32 napravio jednostavno napajanje regulirano naponom na bazi LM317. Držao sam ga izvan dosega ove upute, ali ako postoji interes mogao bi postati sljedeći instruktor.

U sljedećem koraku već sam dao elektronički krug za napajanje koji bi mogao poslužiti kao inspiracija.

Korak 11: Napajanje ESP32

Napajanje ESP32
Napajanje ESP32

Ovime vas inspiriram za izgradnju samostalnog izvora energije za vaš ESP32, ako ga nemate u blizini.

Strujni krug radi od 19V napajanja prijenosnog računala. To zahtijeva dvofazno smanjenje napona kako bi se raspršivanje snage LM317 držalo pod kontrolom. (Čak i s hladnjacima!). Također ne zaboravite uključiti kondenzator od 100uF ispred linije VCC_ESP jer ti mikrokontroleri imaju velike zamahe struje svakako pri pokretanju WiFi veze.

Napomena: Nemojte napajati ESP32 s više izvora napajanja odjednom!

Nadalje, uobičajeno odricanje od odgovornosti, ali ponajviše

Zabavi se!

Sve datoteke mogu se pronaći na mom GitHubu:

Preporučeni: