Innholdsfortegnelse:

Flerkanals Wifi Spennings- og Strømmåler: 11 trinn (med bilder)
Flerkanals Wifi Spennings- og Strømmåler: 11 trinn (med bilder)

Video: Flerkanals Wifi Spennings- og Strømmåler: 11 trinn (med bilder)

Video: Flerkanals Wifi Spennings- og Strømmåler: 11 trinn (med bilder)
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, Juli
Anonim
Flerkanals Wifi Spennings- og Strømmåler
Flerkanals Wifi Spennings- og Strømmåler

Ved breadboarding må man ofte overvåke forskjellige deler av kretsen samtidig.

For å unngå at smerten måtte stikke multimeterprober fra et sted til et annet, ønsket jeg å designe en flerkanals spennings- og strømmåler.

Ina260 -brettet fra Adafruit gir en veldig effektiv og effektiv måte å gjøre det på. Den inneholder en veldig nøyaktig spennings- og strømmåler med en integrert I2C -bro (sparer mange pinner når du kombinerer 3 av dem!).

Det eneste som manglet var en skjerm. Derav beslutningen om å koble brettene til et ESP32 -utviklingskort, som enkelt kan bære en webserver for å presentere de målte elementene på en PC/mobilskjerm.

Rekvisita

3 x Ina260 adafruit bord

3 x toppnål med lange pinner

Min 6 hoppetråder

1 x ESP32 Wrover-B (eller et annet Wifi-kort med I2C-støtte)

2 x 19 pins pin header (hvis aktuelt)

1 x PCB eller Perfboard

1 x 3,3 V strømforsyning

Trinn 1: Lodd de tre INA -brettene

Lodde de tre INA -brettene
Lodde de tre INA -brettene

Det første trinnet er å montere de tre INA260 -kortene.

En veldig god instruksjon finnes på Adafruit -nettstedet. Følg Adafruit -monteringsinstruksjonene.

For å kunne stable dem oppå hverandre bruker du de lange pinnehodene i stedet for de medfølgende pinnestrimlene!

Trinn 2: Konfigurer tre forskjellige I2C -adresser

Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser
Konfigurer tre forskjellige I2C -adresser

I2C er en seriell protokoll for et to-leder grensesnitt for å koble til enheter med lav hastighet over korte avstander. Man kan koble til opptil 127 slaver. På en buss må hver enhet identifiseres med en unik I2C -adresse. I2C -adressen til en enhet er ofte fast koblet til brikken på en enhet. For å koble de samme enhetene på en buss, lar produsenten ofte muligheten til å endre I2C -adressen ved å lodde en konfigurasjon av pinner sammen.

Dette er også tilfellet for de tre INA260 -kortene. Enheten har to adressepinner, A0 og A1 som kan kobles til GND, VS, SCL eller SDA for å angi ønsket adresse. I databladet til INA260 -brikken fra Texas Instruments kan du finne listen over pin -tilkoblinger for hver av de 16 mulige adressene.

Adafruit -brettet begrenser dette til 4 brett ved å avsløre to pads som kan brukes til å trekke A0 og/eller A1 til VS. Standardadressen til INA260 -kortet er 0x40.

Du fullfører dette trinnet ved å tildele forskjellige adresser til de to andre kortene:

Ved å lodde A0 -puten på det andre brettet, angir du adressen til: 0x41 (eller 1000001 BIN)

Ved å lodde A1 -puten på det tredje brettet tildeler du adressen til: 0x44 (eller 1000100 BIN)

Trinn 3: Koble Ina -kortene til ESP32

Koble Ina -kortene til ESP32
Koble Ina -kortene til ESP32

Nå som vi har tildelt forskjellige I2C -adresser til hvert av INA -kortene, er det på tide å koble dem til ESP32 -kortet!

Koble til på bildet ovenfor

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

2) GND -pinnen til GND -pinnen

3) SDA -pinnen til GPIO -pinnen 21

4) SCL -pinnen til GPIO -pinnen 22

Jeg har brukt en PCB -design for å lage tilkoblingene, da det er en del av et større prosjekt (en WiFi -justerbar spenningsforsyning med justerbar strømbegrensning - håper å gjøre en instruerbar for denne også).

Du kan bruke en annen måte å koble til, dette kan være et perfboard du lodder opp eller bruker et brødbrett. Begge disse vil fungere bra også.

Trinn 4: Installer ESP32 -kortet i Arduino IDE

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

Nå som vi har koblet brettene til hverandre, er det på tide å sjekke forbindelsen.

Vi vil gjøre det ved å samle I2C -adressene til Ina -kortene.

ESP32 -kortet fungerer perfekt med Arduino IDE.

Så la oss installere ESP32 -kortet i Arduino ved hjelp av styrelederen.

Trinn 5: Kontroller Ina til ESP32 -tilkoblingen ved hjelp av I2C -skanner

Kontroller Ina til ESP32 -tilkoblingen ved hjelp av I2C -skanner
Kontroller Ina til ESP32 -tilkoblingen ved hjelp av I2C -skanner

Vi vil bruke en enkel I2C -adresseskanner for å sikre tilkobling mellom ESP32 og Ina260 -kortene.

I2C -adresseskannerkoden kan kopieres limt inn i et tomt Arduino -prosjekt.

Koden er hentet fra Arduino cc -nettstedet:

// -------------------------------------- // i2c_scanner // // Versjon 1/ / Dette programmet (eller koden som ser ut som det) // finnes mange steder. // For eksempel på Arduino.cc -forumet. // Den opprinnelige forfatteren vet ikke. // Versjon 2, juni 2012, Bruke Arduino 1.0.1 // Tilpasset for å være så enkelt som mulig av Arduino.cc -bruker Krodal // Versjon 3, 26. februar 2013 // V3 av louarnold // Versjon 4, 3. mars 2013, Bruker Arduino 1.0.3 // av Arduino.cc -bruker Krodal. // Endringer av louarnold fjernet. // Skanneadresser endret fra 0… 127 til 1… 119, // ifølge i2c -skanneren av Nick Gammon // https://www.gammon.com.au/forum/?id=10896 // Versjon 5, mars 28, 2013 // Som versjon 4, men adressen skanner nå til 127. // En sensor ser ut til å bruke adresse 120. // Versjon 6, 27. november 2015. // Lagt til å vente på seriekommunikasjonen Leonardo. // // // Denne skissen tester standard 7-biters adresser // Enheter med høyere bitadresse blir kanskje ikke sett ordentlig. // #include void setup () {Wire.begin (); Serial.begin (9600); mens (! Seriell); // Leonardo: vent på seriell skjerm Serial.println ("\ nI2C Scanner"); } void loop () {byte error, address; int nDevices; Serial.println ("Skanning …"); nEnheter = 0; for (adresse = 1; adresse <127; adresse ++) {// i2c_scanner bruker returverdien til // Write.endTransmisstion for å se om // en enhet bekreftet adressen. Wire.beginTransmission (adresse); feil = Wire.endTransmission (); hvis (feil == 0) {Serial.print ("I2C -enhet funnet på adressen 0x"); if (adresse <16) Serial.print ("0"); Serial.print (adresse, HEX); Serial.println ("!"); nEnheter ++; } annet hvis (feil == 4) {Serial.print ("Ukjent feil på adresse 0x"); if (adresse <16) Serial.print ("0"); Serial.println (adresse, HEX); }} if (nDevices == 0) Serial.println ("Ingen I2C -enheter funnet / n"); ellers Serial.println ("ferdig / n"); forsinkelse (5000); // vent 5 sekunder på neste skanning}

Trinn 6: Opprette HTML -webservermappen

Opprette HTML -webservermappen
Opprette HTML -webservermappen

ESP32 gir muligheten til å kjøre en webserver. Det gir også et ganske stort RAM -minne for å holde noen nettsider. (Den komprimerer nettsidefilene automatisk).

Arduino IDE gir funksjonalitet for å laste opp de opprettede nettsidene til ESP32s RAM direkte.

For å gjøre dette må du opprette en mappedata under mappen til Arduino -prosjektet. I mitt tilfelle er dette / Arduino / esp32_Power_supply_v1_implemented / data.

Det er viktig å navngi mappen nøyaktig 'data', da det er mappenavnet Arduino vil se etter når du laster opp websidefilene til ESP.

Trinn 7: Opprett nettsiden for Power Monitor

HMTL er et språk som gjør det mulig å presentere en tekst i en nettleser. En HTML -fil lagres under utvidelsen htm (l). Formateringen av en webside plasseres vanligvis i en separat fil (f.eks. Css -fil). Programfunksjonaliteten som en webside må tilby, plasseres normalt i en annen fil (f.eks. Js -fil, for javascript).

I mitt HTML -dokument inkluderte jeg teksten, formateringen og Javascript i en fil. Det er derfor ikke et godt eksempel på hvordan du lager en webside, men det tjener formålene. Jeg kalte HTML -dokumentet 'Index.htm'.

En annen fil er inkludert i min datafolder, dvs. PicoGraph.js. PicoGraph -biblioteket er levert av Vishnu Shankar B fra RainingComputers og gir en veldig enkel, men effektiv og fleksibel måte å presentere grafer på en webside. Jeg endret koden litt for å tjene mitt formål bedre.

Du vil legge merke til at HTML -websiden også inneholder koden for å kontrollere spenningsforsyningene på PCB -kortet. Spenningsforsyningskoden styrer spenningsnivået til 5 I/O -pinner. Du kan endre koden for å utelukke dette, eller du kan la den stå inne hvis det ikke påvirker det.

HTML -koden er vedlagt dette trinnet som en txt -fil (ettersom instruksjonene ikke tillater opplasting av htm -kode).

For å bruke HTML -koden kopierer og limer du den inn i et tekstredigeringsprogram (jeg bruker Notisblokk ++) og lagrer den som 'Index.htm' under 'Data' -mappen. Du gjør det samme for picograph.txt -filen, men omdøper den til picograph.js

Når det gjelder HTML -filen:

En funksjon SndUpdate brukes til å sende meldinger frem og tilbake fra ESP til nettsiden.

Meldingene som sendes fra ESP tjener strømforsyningsfunksjonaliteten og er utenfor rekkevidden for denne instruksen. meldingene til ESP betjener Ina260 -kortmålingene.

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;

Koden ovenfor leser 6 tall fra ESP32 -kortet, dvs. spenningsmåling, strømmålingen fra det første brettet, etterfulgt av de to målingene fra det andre og så videre.

Grafene er innebygd i såkalte flex-beholdere, som muliggjør fleksibel endring av nettsiden.

.flex-container {display: flex; bakgrunnsfarge: cadetblue; flex-wrap: vikle; }.flex-container> div {bakgrunn-farge: #f1f1f1; margin: 10px; polstring: 20px; skriftstørrelse: 20px; font-family: "Seven Segment"; font-weight: fet skrift; }

Innholdet i hver av fleksbeholderne består av følgende, inkludert de innebygde grafene.

(Vær oppmerksom på at den er 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; " /lerret

!-div for legender/etiketter-

div /div div /div /div

Den siste delen av viktigheten i HTML -filen fungerer med PicoGraph -biblioteket for å presentere 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"); / * Oppdater verdier hvert sekund */ setInterval (updateEverySecond, 1000); function updateEverySecond () { / * Få nye verdier * / SndUpdate ();

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

Når du studerer koden, vil du legge merke til at jeg bare bruker 5 grafer av de 6 til mitt formål. Hvis du ikke kommenterer de riktige linjene, aktiveres den sjette grafen.

For de som ikke har erfaring med html, kan dette trinnet bli like vanskelig. Imidlertid kan det tjene som en fin introduksjon til HTML -verdenen. Jeg vet fordi dette var den første siden jeg noensinne har opprettet. Så ikke vær redd. For de som er opplevd under oss, vær tilgivende.

Resultatet av arbeidet ditt på nettsiden kan gjennomgås ved å åpne html -filen, den lastes inn i nettleseren din og viser utseendet. Du kan se etter mulige feil ved å trykke på F12 -tasten i nettleseren din, feilsøkingsvinduet vises. Full forklaring på hvordan feilsøking er utenfor omfanget av denne instruerbare, men websiden kan være nyttig som det første trinnet for feilsøking av nettside / javascript.

Neste trinn er å laste de opprettede nettsidene inn i ESP32.

Trinn 8: Last nettsiden inn i ESP32

Last nettsiden inn i ESP32
Last nettsiden inn i ESP32

Etter å ha oppnådd et tilfredsstillende resultat, er det på tide å laste opp websiden til ESP32.

Du gjør dette ved å lagre 'Index.htm' (websiden din) og 'PicoGraph.js' i 'data' -mappen under Arduino -prosjektet.

Neste trinn er å koble ESP32 -kortet til datamaskinen. Etter å ha valgt riktig kort og COM -port, velger du ESP32 Sketch Data Upload under Verktøy -menyen i Arduino IDE.

Du vil se at IDE vil begynne opplastingsprosessen, noe som bør føre til en vellykket belastning.

Ved siden av dette trinnet er å konfigurere ESP32 -mikrokontrolleren som en webserver.

Trinn 9: Konfigurer ESP32 som webserver

Vedlagt finner du Arduino Ino -skissen som vil konfigurere ESP32 som en webserver.

Du må erstatte SSID og det tilhørende passordet med ruterenes passord.

Som allerede nevnt inneholder denne skissen også koden for å konfigurere websiden som en kontroller for strømforsyningssiden til kretskortet (faktisk konfigurere 5 IO -pinner som PWM -pinner og kontrollere dem gjennom meldingsstrømmen fra nettsiden).

Skissen er basert på standard Webserver -skisse utviklet av Hristo Gochkov.

Litt forklaring på koden.

Følgende funksjoner er knyttet til konfigurering av webserveren.

String formatBytes (size_t bytes) String getContentType (String filnavn) bool finnes (Stringbane) bool handleFileRead (Stringbane) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()

Den første koden i setup () -funksjonen er også relatert til PWM- og webserveroppsett.

Følgende kode angir Avbryt -funksjonen som tjener meldingsstrømmene til og fra nettsiden:

(du bør kjenne igjen identifikatorene fra opprettelsen av nettsiden)

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 neste kodeblokken initialiserer INA260 -kortene:

// INA260 initialisering hvis (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Kunne ikke finne INA260 0x40 chip")); // mens (1); } Serial.println (F ("Fant INA260 chip 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Kunne ikke finne 0x41 INA260 -brikke")); // mens (1); } Serial.println (F ("Funnet INA260 0x41 chip")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Kunne ikke finne INA260 0x44 -brikke")); // mens (1); } Serial.println (F ("Funnet 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 setning håndtering av avbrytingskoden:

server.handleClient ();

Følgende kode i loop -setningen er relatert til funksjonen for strømforsyning.

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

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 utsagnene samler inn og klargjør målingene for overføring til nettsiden via Server. Ved avbruddssamtaler (forekommer hver 1000 ms, angitt i html -java -skriptet til nettsiden).

Trinn 10: Du er ferdig

Du er ferdig!
Du er ferdig!

Hvis du laster opp skissen til ESP32 -kortet, bør oppsettet fullføres, og strømmonitoren din skal være endelig!

Du har kanskje lagt merke til at strømforsyningen til ESP32 nå skjer via USB -porten, dette løfter en stor del av fordelene med den WiFi -baserte tilkoblingen til spennings- / strømmålere. Derfor har jeg laget en enkel LM317 -basert spenningsregulert strømforsyning for ESP32. Jeg holdt det utenfor omfanget av denne instruerbare, men hvis det er interesse kan det bli en neste instruerbar.

I det neste trinnet har jeg allerede levert den elektroniske kretsen for strømforsyningen som kan tjene som inspirasjon.

Trinn 11: Slå på ESP32

Drar ESP32
Drar ESP32

Herved en inspirasjon til å bygge en frittstående kraftkilde for ESP32, hvis du ikke har en liggende.

Strømkretsen fungerer på en 19V bærbar strømforsyning. Dette ber om et tofaset spenningstrinn ned for å holde strømspredningen til LM317 under kontroll. (Selv med varmekum!). Ikke glem å inkludere en 100uF kondensator foran VCC_ESP -linjen, ettersom disse mikrokontrollerne sikkert har store strømsvinger når du starter WiFi -tilkoblingen.

Vær oppmerksom på at ESP32 ikke skal drives med mer enn én strømkilde om gangen!

Videre de vanlige ansvarsfraskrivelsene, men mest av alt

Ha det gøy!

Alle filene finner du på min GitHub:

Anbefalt: