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, Juli
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 kola odjednom.

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

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

Jedino što je nedostajalo bio je ekran. Otuda i odluka o povezivanju ploča na razvojnu ploču ESP32, koja može lako nositi web server za predstavljanje izmjerenih stavki na ekranu računara/mobilnog telefona.

Supplies

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 sa 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 dobro uputstvo 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, koristite dugačke zaglavlje, umjesto isporučenih traka 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.

To se također odnosi na tri INA260 ploče. Uređaj ima dva kontaktna pina, 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: Povežite ploče Ina sa 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, povežite 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 napraviti uputstvo i za ovaj).

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

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 funkcionira s Arduino IDE -om.

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

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

Provjerite vezu Ina -ESP32 pomoću I2C skenera
Provjerite vezu Ina -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 kod koji tako izgleda) // se može pronaći na mnogim mjestima. // Na primjer na forumu Arduino.cc. // Originalni 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 louarnold // Verzija 4, 3. ožujka 2013, Korištenje Arduina 1.0.3 // od korisnika Arduino.cc Krodal. // Louarnoldove promjene uklonjene. // Skeniranje adresa promijenjeno je sa 0… 127 na 1… 119, // prema i2c skeneru Nicka Gammona // https://www.gammon.com.au/forum/?id=10896 // Verzija 5, mart 28., 2013. // Kao verzija 4, ali adresa sada skenira na 127. // Čini se da senzor koristi adresu 120. // Verzija 6, 27. novembar 2015. // Dodano čekanje na Leonardovu serijsku komunikaciju. // // // Ova skica testira standardne 7-bitne adrese // Uređaji s višom bitnom adresom se možda 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 () {greška u bajtu, adresa; int nDevices; Serial.println ("Skeniranje …"); nUređaji = 0; for (adresa = 1; adresa <127; adresa ++) {// i2c_scanner koristi povratnu vrijednost // Write.endTransmisssion da vidi je li // uređaj priznao 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"); Serial.print (adresa, HEX); Serial.println ("!"); nDevices ++; } else if (error == 4) {Serial.print ("Nepoznata greš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: Kreiranje mape HTML web poslužitelja

Kreiranje mape HTML web poslužitelja
Kreiranje mape HTML web poslužitelja

ESP32 pruža mogućnost pokretanja web servera. 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 postavljanje kreiranih web stranica izravno u RAM ESP32.

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

Važno je imenovati mapu točno 'podaci' jer će to biti ime fascikle koju će Arduino tražiti prilikom postavljanja datoteka web stranica na ESP.

Korak 7: Kreirajte web stranicu Power Monitor

HMTL je jezik koji omogućava prikazivanje teksta u web pregledniku. HTML datoteka se sprema pod nastavkom htm (l). Formatiranje web stranice obično se stavlja u zasebnu datoteku (npr. Css datoteku). Funkcionalnost programa koju web stranica treba 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 fasciklu podataka, tj. PicoGraph.js. Biblioteku PicoGraph pruža Vishnu Shankar B iz kompanije RainingComputers i omogućava vrlo jednostavan, ali efikasan i fleksibilan način predstavljanja grafikona na web stranici. Malo sam izmijenio kodeks 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 naponski nivo od 5 I/O pinova. Kôd možete promijeniti kako biste ga isključili ili ga možete ostaviti ako nema utjecaja.

Html kôd je pridružen ovom koraku kao txt datoteka (jer instrukcije ne dopuštaju postavljanje 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

Što se tiče HTML datoteke:

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

Poruke poslane sa ESP -a služe funkcionalnosti 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 sa ploče ESP32, tj. mjerenje napona, mjerenje struje s prve ploče, nakon čega slijede dva mjerenja s druge i tako dalje.

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

.flex-kontejner {display: flex; boja pozadine: cadetblue; flex-wrap: wrap; }.flex-container> div {background-color: #f1f1f1; margina: 10px; padding: 20px; font-veličina: 20px; font-family: "Seven Segment"; 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 za predstavljanje brojeva:

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 vrednosti svake sekunde */ setInterval (updateEverySecond, 1000); funkcija updateEverySecond () { / * Dobijanje novih 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"). value)/2+PG1_yrand0); byID ("PG2_scale"). value = Math.floor (parseInt (byID ("PG2_scale"). value)/2+PG2_yrand0); byID ("PG3_scale"). value = Math.floor (parseInt (byID ("PG3_scale"). value)/2+PG3_yrand0); byID ("PG4_scale"). value = Math.floor (parseInt (byID ("PG4_scale"). value)/2+PG4_yrand0); // byID ("PG5_scale"). value = Math.floor (parseInt (byID ("PG5_scale"). value)/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 komentarišete desne redove, 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, oprostite.

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

Sljedeći korak je učitavanje kreiranih 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 postizanja zadovoljavajućih rezultata, vrijeme je za postavljanje 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.

Sledeći korak je povezivanje ESP32 ploče sa računarom. 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 ćete pronaći Arduino Ino skicu 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 je zasnovana na standardnoj skici web servera koju je razvio Hristo Gočkov.

Neka objašnjenja o kodu.

Sljedeće funkcije se 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đe, prvi kôd u funkciji setup () se odnosi na postavljanje PWM -a i web servera.

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

(trebali biste prepoznati identifikatore iz izrade web stranice)

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

String 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 server:

server.begin ();

Sljedeći blok koda, inicijalizira INA260 ploče:

// 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 ("Nije moguće pronaći čip 0x41 INA260")); // while (1); } Serial.println (F ("Pronađen INA260 0x41 čip")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Nije moguće pronaći INA260 0x44 čip")); // 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 naredba osigurava rukovanje kodom prekida:

server.handleClient ();

Sljedeći kod u naredbi petlje odnosi se na funkcionalnost napajanja.

Sljedeći kod u loop () je opet 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 ();

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

Korak 10: Gotovi ste

Završio si!
Završio si!

Otpremanje skice na ESP32 ploču trebalo bi da dovrši postavljanje, a vaš Power monitor bi 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 ovog uputstva, ali ako bude interesa, moglo bi postati sljedeće uputstvo.

U sljedećem koraku već sam dao elektroničko kolo za napajanje koje bi moglo poslužiti kao inspiracija.

Korak 11: Napajanje ESP32

Napajanje ESP32
Napajanje ESP32

Ovim putem inspirirajte se za izradu samostalnog izvora energije za vaš ESP32, ako ga nemate u blizini.

Strujni krug radi od 19V napajanja za prijenosno računalo. Ovo zahtijeva dvofazno smanjenje napona kako bi se raspršivanje snage LM317 držalo pod kontrolom. (Čak i sa 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 od jednog izvora napajanja odjednom!

Nadalje, uobičajeno odricanje od odgovornosti, ali prije svega

Zabavi se!

Sve datoteke možete pronaći na mom GitHub-u:

Preporučuje se: