Indholdsfortegnelse:

Multikanal Wifi-spændings- og strømmåler: 11 trin (med billeder)
Multikanal Wifi-spændings- og strømmåler: 11 trin (med billeder)

Video: Multikanal Wifi-spændings- og strømmåler: 11 trin (med billeder)

Video: Multikanal Wifi-spændings- og strømmåler: 11 trin (med billeder)
Video: Умное реле TOMZN 63А идеальный энергомониторинг с защитой 2024, Juli
Anonim
Multikanal Wifi spændings- og strømmåler
Multikanal Wifi spændings- og strømmåler

Ved breadboarding skal man ofte overvåge forskellige dele af kredsløbet på én gang.

For at undgå at smerten skulle holde multimeterproberne fra et sted til et andet, ville jeg designe en multikanals spændings- og strømmåler.

Ina260 -tavlen fra Adafruit giver en meget effektiv og effektiv måde at gøre det på. Den indeholder en meget nøjagtig spændings- og strømmåler med en integreret I2C -bro (sparer mange stifter, når du kombinerer 3 af dem!).

Det eneste der manglede var et display. Derfor beslutningen om at tilslutte kortene til et ESP32 -udviklingsbord, som let kan bære en webserver til at præsentere de målte emner på en pc/mobilskærm.

Forbrugsvarer

3 x Ina260 adafruit board

3 x hovedstifter med lange stifter

Min 6 springtråde

1 x ESP32 Wrover-B (eller et andet Wifi-kort med I2C-understøttelse)

2 x 19 pin pin header (hvis relevant)

1 x PCB eller Perfboard

1 x 3,3 V strømforsyning

Trin 1: Lod de tre INA -plader

Lod de tre INA -plader
Lod de tre INA -plader

Det første trin er at samle de tre INA260 -plader.

En meget god instruktion kan findes på Adafruit -webstedet. Følg Adafruit -monteringsvejledningen.

For at kunne stable dem oven på hinanden skal du bruge de lange stifthoveder frem for de medfølgende stiftlister!

Trin 2: Konfigurer tre forskellige I2C -adresser

Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser
Konfigurer tre forskellige I2C -adresser

I2C er en seriel protokol for et to-leder interface til at forbinde lavhastighedsenheder over korte afstande. Man kan forbinde op til 127 slaver. På en bus skal hver enhed identificeres ved en unik I2C -adresse. I2C -adressen på en enhed er ofte hårdt forbundet til en enheds chip. For at forbinde de samme enheder på en bus forlader producenten ofte muligheden for at ændre I2C -adressen ved at lodde en konfiguration af stifter sammen.

Dette er også tilfældet for de tre INA260 -plader. Enheden har to adressestifter, A0 og A1, der kan tilsluttes GND, VS, SCL eller SDA for at indstille den ønskede adresse. I databladet til INA260 -chippen fra texas -instrumenter kan man finde listen over stiftforbindelser for hver af de 16 mulige adresser.

Adafruit boardet begrænser dette til 4 boards ved at udsætte to puder, der kan bruges til at trække A0 og/eller A1 til VS. Standardadressen for INA260 -kortet er 0x40.

Du gennemfører dette trin ved at tildele forskellige adresser til de to andre tavler:

Ved at lodde A0 -puden på det andet bord indstiller du hans adresse til: 0x41 (eller 1000001 BIN)

Ved at lodde A1 -puden på det tredje bræt tildeler du adressen til: 0x44 (eller 1000100 BIN)

Trin 3: Tilslut Ina Boards til ESP32

Tilslut Ina Boards til ESP32
Tilslut Ina Boards til ESP32

Nu hvor vi har tildelt forskellige I2C -adresser til hvert af INA -kortene, er det tid til at slutte dem til ESP32 -kortet!

Tilslut i henhold til ovenstående billede

1) VCC -stiften til 3,3V -stiften

2) GND -stiften til GND -stiften

3) SDA -pin til GPIO pin 21

4) SCL -pin til GPIO pin 22

Jeg har brugt et PCB -design til at oprette forbindelserne, da det er en del af et større projekt (en WiFi -justerbar spændingsforsyning med justerbar strømbegrænsning - håber også at gøre en instruerbar til denne).

Du kan bruge enhver anden måde til at forbinde, dette kan være et perfboard du lodder op eller bruger et brødbræt. Begge vil også fungere fint.

Trin 4: Installer ESP32 -kortet i Arduino IDE

Installer ESP32 -kortet i Arduino IDE
Installer ESP32 -kortet i Arduino IDE

Nu hvor vi har forbundet tavlerne til hinanden, er det tid til at kontrollere forbindelsen.

Det gør vi ved at indsamle I2C -adresserne på Ina -kortene.

ESP32 -kortet fungerer perfekt med Arduino IDE.

Så lad os installere ESP32 -kortet i Arduino ved hjælp af bestyrelseslederen.

Trin 5: Kontroller Ina til ESP32 -forbindelsen ved hjælp af I2C -scanner

Kontroller Ina til ESP32 -forbindelsen ved hjælp af I2C -scanner
Kontroller Ina til ESP32 -forbindelsen ved hjælp af I2C -scanner

Vi vil bruge en simpel I2C -adressescanner til at sikre forbindelse mellem ESP32 og Ina260 -kortene.

I2C -adressescannerkoden kan kopieres indsat i et tomt Arduino -projekt.

Koden er hentet fra Arduino cc -webstedet:

// -------------------------------------- // i2c_scanner // // Version 1/ / Dette program (eller kode der ligner det) // kan findes mange steder. // For eksempel på forummet Arduino.cc. // Den originale forfatter ved ikke. // Version 2, juni 2012, Brug af Arduino 1.0.1 // Tilpasset til at være så enkel som muligt af Arduino.cc -bruger Krodal // Version 3, 26. februar 2013 // V3 af louarnold // Version 4, 3. marts 2013, Brug af Arduino 1.0.3 // af Arduino.cc bruger Krodal. // Ændringer af louarnold fjernet. // Scanningsadresser ændret fra 0… 127 til 1… 119, // ifølge i2c -scanneren af Nick Gammon // https://www.gammon.com.au/forum/?id=10896 // Version 5, marts 28, 2013 // Som version 4, men adressen scannes nu til 127. // En sensor ser ud til at bruge adresse 120. // Version 6, 27. november 2015. // Tilføjet venter på Leonardo seriel kommunikation. // // // Denne skitse tester standard 7-bit adresser // Enheder med højere bit adresse ses muligvis ikke korrekt. // #include void setup () {Wire.begin (); Serial.begin (9600); mens (! Seriel); // Leonardo: vent på seriel skærm Serial.println ("\ nI2C Scanner"); } void loop () {byte fejl, adresse; int nDevices; Serial.println ("Scanning …"); nDevices = 0; for (adresse = 1; adresse <127; adresse ++) {// i2c_scanneren bruger returværdien for // Write.endTransmisstion for at se, om // en enhed bekræftede adressen. Wire.beginTransmission (adresse); fejl = Wire.endTransmission (); hvis (fejl == 0) {Serial.print ("I2C -enhed fundet på adressen 0x"); hvis (adresse <16) Serial.print ("0"); Serial.print (adresse, HEX); Serial.println ("!"); nEnheder ++; } ellers hvis (fejl == 4) {Serial.print ("Ukendt fejl på adressen 0x"); hvis (adresse <16) Serial.print ("0"); Serial.println (adresse, HEX); }} if (nDevices == 0) Serial.println ("Ingen I2C -enheder fundet / n"); ellers Serial.println ("udført / n"); forsinkelse (5000); // vent 5 sekunder til næste scanning}

Trin 6: Oprettelse af HTML -webservermappen

Oprettelse af HTML -webservermappen
Oprettelse af HTML -webservermappen

ESP32 giver mulighed for at køre en webserver. Det giver også en ganske stor RAM -hukommelse til at indeholde nogle websider. (Det komprimerer automatisk websidefilerne).

Arduino IDE giver funktionaliteten til at uploade de oprettede websider direkte til ESP32's RAM.

For at gøre dette skal du oprette en mappedata under Arduino -projektets mappe. I mit tilfælde er dette / Arduino / esp32_Power_supply_v1_implemented / data.

Det er vigtigt at navngive mappen nøjagtigt 'data', da det er mappenavnet, Arduino vil kigge efter, når du uploader websidefilerne til ESP.

Trin 7: Opret Power Monitor -websiden

HMTL er et sprog, der gør det muligt at præsentere en tekst i en webbrowser. En HTML -fil gemmes under udvidelsen htm (l). Formateringen af en webside placeres normalt i en separat fil (f.eks. Css -fil). Programfunktionaliteten, som en webside skal tilbyde, placeres normalt i en anden fil (f.eks. Js -fil, til javascript).

I mit HTML -dokument inkluderede jeg teksten, formateringen og Javascript i en fil. Det er derfor ikke et godt eksempel på, hvordan man laver en webside, men det tjener formålene. Jeg kaldte HTML -dokumentet 'Index.htm'.

En anden fil er inkluderet i min datafolder, dvs. PicoGraph.js. PicoGraph -biblioteket leveres af Vishnu Shankar B fra RainingComputers og giver mulighed for en meget enkel, men effektiv og fleksibel måde at præsentere grafer på en webside. Jeg ændrede koden lidt for at tjene bedre mit formål.

Du vil bemærke, at HTML -websiden også indeholder koden til styring af spændingsforsyningerne på mit printkort. Spændingsforsyningskoden styrer spændingsniveauet på 5 I/O -ben. Du kan ændre koden for at udelukke dette, eller du kan efterlade den, hvis der ikke er nogen effekt.

HTML -koden er knyttet til dette trin som en txt -fil (da instruktionerne ikke tillader upload af htm -kode).

For at bruge HTML -koden kopierer og indsætter du den i en teksteditor (jeg bruger Notesblok ++) og gemmer den som 'Index.htm' i mappen 'Data'. Du gør det samme for picograph.txt -filen, men omdøber den til picograph.js

Med hensyn til HTML -filen:

En funktion SndUpdate bruges til at sende meddelelser frem og tilbage fra ESP til websiden.

Meddelelserne, der sendes fra ESP, betjener strømforsyningsfunktionen og er uden for anvendelsesområdet for dette instruerbare. meddelelserne til ESP betjener Ina260 -kortmålingerne.

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;

Ovenstående kode læser 6 numre fra ESP32 -kortet, dvs. spændingsmålingen, den aktuelle måling fra det første bord, efterfulgt af de to målinger fra det andet og så videre.

Graferne er indlejret i såkaldte flexbeholdere, som muliggør fleksibel ændring af websiden.

.flex-container {display: flex; baggrundsfarve: cadetblue; flex-wrap: wrap; }.flex-container> div {baggrundsfarve: #f1f1f1; margen: 10px; polstring: 20px; skrifttype: 20px; font-family: "Seven Segment"; skrifttype-vægt: fed; }

Indholdet i hver af flexbeholderne udgøres som følger, herunder de integrerede grafer.

(Bemærk, at hvor fjernet)

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

!-div til legender/etiketter-

div /div div /div /div

Det sidste afsnit af betydning i HTML -filen fungerer sammen med PicoGraph -biblioteket for at præsentere tallene:

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"); / * Opdater værdier hvert andet */ setInterval (updateEverySecond, 1000); function updateEverySecond () { / * Få nye værdier * / SndUpdate ();

/ * Opdater graf */PG1_demograph.update ([PG1_yrand0], parseInt (byID ("PG1_scale"). Værdi)+ parseInt (byID ("PG1_scale"). Værdi)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (byID ("PG2_scale"). Værdi)+ parseInt (byID ("PG2_scale"). Værdi)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (byID ("PG3_scale"). Værdi)+ parseInt (byID ("PG3_scale"). Værdi)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (byID ("PG4_scale"). Værdi)+ parseInt (byID ("PG4_scale"). Værdi)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (byID ("PG5_scale"). Værdi)+ // parseInt (byID ("PG5_scale"). Værdi)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (byID ("PG6_scale"). Værdi)+ parseInt (byID ("PG6_scale"). Værdi)/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"). værdi = Math.floor (parseInt (byID ("PG1_scale"). værdi)/2+PG1_yrand0); byID ("PG2_scale"). værdi = Math.floor (parseInt (byID ("PG2_scale"). værdi)/2+PG2_yrand0); byID ("PG3_scale"). værdi = Math.floor (parseInt (byID ("PG3_scale"). værdi)/2+PG3_yrand0); byID ("PG4_scale"). værdi = Math.floor (parseInt (byID ("PG4_scale"). værdi)/2+PG4_yrand0); // byID ("PG5_scale"). værdi = Math.floor (parseInt (byID ("PG5_scale"). værdi)/2+PG5_yrand0); byID ("PG6_scale"). værdi = Math.floor (parseInt (byID ("PG6_scale"). værdi)/2+PG6_yrand0);

Når du studerer koden, vil du bemærke, at jeg kun bruger 5 grafer af de 6 til mit formål. Hvis du ikke kommenterer de rigtige linjer, aktiveres den 6. graf.

For dem, der ikke har erfaring med html, kan dette trin komme lige så hårdt. Det kan dog tjene som en god introduktion til HTML -verdenen. Jeg ved det, fordi det var den første side, jeg nogensinde har oprettet. Så vær ikke bange. For dem, der er oplevet under os, vær tilgivende.

Resultatet af dit arbejde på websiden kan gennemgås ved at åbne din html, den indlæses i din browser og viser dens udseende. Du kan kontrollere for mulige fejl ved at trykke på F12 -tasten i din browser, vinduet til fejlretning vises. Fuld forklaring på, hvordan fejlsøgning er uden for omfanget af denne instruerbare, men websiden kan være nyttig som første skridt til fejlsøgning på webside / javascript.

Næste trin er at indlæse de oprettede websider i ESP32.

Trin 8: Indlæs webside i ESP32

Indlæs webside i ESP32
Indlæs webside i ESP32

Efter at have opnået et tilfredsstillende resultat, er det tid til at uploade websiden til ESP32.

Det gør du ved at gemme 'Index.htm' (din webside) og 'PicoGraph.js' i mappen 'data' under dit Arduino -projekt.

Næste trin er at tilslutte ESP32 -kortet til computeren. Efter at have valgt det korrekte kort og COM -porten, skal du vælge ESP32 Sketch Data Upload under menuen Værktøjer i Arduino IDE.

Du vil se, at IDE vil begynde sin uploadproces, hvilket skulle føre til en vellykket indlæsning.

Ved siden af dette trin er at konfigurere ESP32 -mikrokontrolleren som en webserver.

Trin 9: Konfigurer ESP32 som webserver

Vedhæftet finder du Arduino Ino -skitsen, der konfigurerer ESP32 som en webserver.

Du bliver nødt til at erstatte SSID og tilhørende adgangskode med din routers adgangskode.

Som allerede nævnt indeholder denne skitse også koden til konfiguration af websiden som en controller til strømforsyningssiden på printkortet (faktisk konfiguration af 5 IO -ben som PWM -ben og styring af dem via meddelelsesstrømmen fra websiden).

Skitsen er baseret på den standard Webserver -skitse, der er udviklet af Hristo Gochkov.

Noget forklaring på koden.

Følgende funktioner er alle relateret til opsætning af webserveren.

String formatBytes (size_t bytes) String getContentType (String filnavn) bool findes (String sti) bool handleFileRead (String sti) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()

Den første kode i opsætningsfunktionen () er også relateret til PWM- og webserveropsætning.

Følgende kode indstiller afbrydelsesfunktionen, der betjener meddelelsesstrømmene til og fra websiden:

(du skal genkende identifikatorerne fra oprettelsen af websiden)

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

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

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

Dette starter serveren:

server.begin ();

Den næste kodeblok initialiserer INA260 -kortene:

// INA260 initialisering hvis (! Ina260_0x40.begin (0x40)) {Serial.println (F ("INA260 0x40 chip kunne ikke findes")); // mens (1); } Serial.println (F ("Fundet INA260 chip 0x40")); hvis (! ina260_0x41.begin (0x41)) {Serial.println (F ("kunne ikke finde 0x41 INA260 -chip")); // mens (1); } Serial.println (F ("Fundet INA260 0x41 chip")); hvis (! ina260_0x44.begin (0x44)) {Serial.println (F ("INA260 0x44 -chip kunne ikke findes")); // mens (1); } Serial.println (F ("Fundet INA260 chip 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);

I Loop -koden sikrer følgende erklæring håndtering af afbrydelseskoden:

server.handleClient ();

Følgende kode i loop -sætningen er relateret til strømforsyningsfunktionen.

Følgende kode i loop () er interessant igen:

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

Disse udsagn indsamler og gør klar målingerne til overførsel til websiden via serveren. Ved afbrydelse af opkald (forekommer hver 1000 ms, angivet i websides html java script).

Trin 10: Du er færdig

Du er færdig!
Du er færdig!

Upload af skitsen til ESP32 -kortet skulle afslutte opsætningen, og din Power -skærm skulle være endelig!

Du har måske bemærket, at strømforsyningen til ESP32 nu sker via USB -porten, dette løfter en stor del af fordelene ved den WiFi -baserede forbindelse med dine spændings- / strømmålere. Derfor har jeg lavet en simpel LM317 baseret spændingsreguleret strømforsyning til ESP32. Jeg holdt det uden for omfanget af denne instruerbare, men hvis der er interesse, kan det blive en næste instruerbar.

I det næste trin har jeg allerede leveret det elektroniske kredsløb til strømforsyningen, som kunne tjene som inspiration.

Trin 11: Tænd for ESP32

Forsyner ESP32
Forsyner ESP32

Herved en inspiration til at bygge en stand alone powerource til din ESP32, hvis du ikke har en liggende.

Strømkredsløbet fungerer på en 19V bærbar strømforsyning. Dette beder om et tofaset spændingstrin ned for at holde strømafbrydelsen fra LM317'erne under kontrol. (Selv med kølelegemer!). Glem heller ikke at inkludere en 100uF kondensator foran VCC_ESP -linjen, da disse mikrokontrollere helt sikkert har store strømudsving ved opstart af WiFi -forbindelsen.

Bemærk, at ESP32 ikke skal forsynes med mere end én strømkilde ad gangen!

Yderligere de sædvanlige ansvarsfraskrivelser, men mest af alt

Hav det sjovt!

Alle filerne kan findes på min GitHub:

Anbefalede: