Innehållsförteckning:
- Tillbehör
- Steg 1: Löd de tre INA -korten
- Steg 2: Konfigurera tre olika I2C -adresser
- Steg 3: Anslut Ina -korten till ESP32
- Steg 4: Installera ESP32 -kortet i Arduino IDE
- Steg 5: Kontrollera anslutningen Ina till ESP32 med hjälp av I2C -skanner
- Steg 6: Skapa HTML -webbservermappen
- Steg 7: Skapa webbsidan för Power Monitor
- Steg 8: Ladda in webbsidan i ESP32
- Steg 9: Konfigurera ESP32 som webbserver
- Steg 10: Du är klar
- Steg 11: Strömförsörjning av ESP32
Video: Flerkanals wifi-spännings- och strömmätare: 11 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:39
Vid breadboarding behöver man ofta övervaka olika delar av kretsen på en gång.
För att undvika att smärtan måste hålla multimeterproberna från en plats till en annan ville jag designa en flerkanals spännings- och strömmätare.
Ina260 -brädan från Adafruit ger ett mycket effektivt och effektivt sätt att göra det. Den innehåller en mycket exakt spännings- och strömmätare med en integrerad I2C -brygga (sparar många stift när du kombinerar tre av dem!).
Det enda som saknades var en display. Därför beslutet att ansluta korten till ett ESP32 -utvecklingskort, som enkelt kan bära en webbserver för att presentera de uppmätta objekten på en PC/mobilskärm.
Tillbehör
3 x Ina260 adafruit board
3 x huvudstift med långa stift
Min 6 bygelkablar
1 x ESP32 Wrover-B (eller något annat Wifi-kort med I2C-stöd)
2 x 19 -stifts stifthuvud (om tillämpligt)
1 x PCB eller Perfboard
1 x 3,3 V strömförsörjning
Steg 1: Löd de tre INA -korten
Det första steget är att montera de tre INA260 -korten.
En mycket bra instruktion finns på Adafruit -webbplatsen. Följ monteringsanvisningarna för Adafruit.
För att kunna stapla dem ovanpå varandra använder du de långa stifthuvudena istället för de medföljande stiftremsorna!
Steg 2: Konfigurera tre olika I2C -adresser
I2C är ett seriellt protokoll för ett tvåtrådigt gränssnitt för anslutning av enheter med låg hastighet över korta avstånd. Man kan ansluta upp till 127 slavar. På en buss måste varje enhet identifieras med en unik I2C -adress. I2C -adressen för en enhet är ofta hårdkopplad i en enhets chip. För att ansluta samma enheter på en buss, lämnar tillverkaren ofta möjligheten att ändra I2C -adressen genom att löda ihop en konfiguration av stift.
Detta är också fallet för de tre INA260 -korten. Enheten har två adressstift, A0 och A1 som kan anslutas till GND, VS, SCL eller SDA för att ställa in önskad adress. I databladet för INA260 -chipet från texas instrument kan man hitta listan över stiftanslutningar för var och en av de 16 möjliga adresserna.
Adafruit -brädan begränsar detta till 4 brädor genom att exponera två dynor som kan användas för att dra A0 och/eller A1 till VS. Standardadressen för INA260 -kortet är 0x40.
Du slutför detta steg genom att tilldela de två andra korten olika adresser:
Genom att löda A0 -plattan på det andra brädet ställer du in hans adress till: 0x41 (eller 1000001 BIN)
Genom att löda A1 -plattan på den tredje tavlan tilldelar du adressen till: 0x44 (eller 1000100 BIN)
Steg 3: Anslut Ina -korten till ESP32
Nu när vi har tilldelat olika I2C -adresser till var och en av INA -korten, är det dags att ansluta dem till ESP32 -kortet!
Anslut enligt ovanstående bild
1) VCC -stiftet till 3.3V -stiftet
2) GND -stiftet till GND -stiftet
3) SDA -stift till GPIO -stift 21
4) SCL -stift till GPIO -stift 22
Jag har använt en PCB -design för att göra anslutningarna eftersom det är en del av ett större projekt (en WiFi -justerbar spänningsförsörjning med justerbar strömbegränsning - hoppas också kunna göra en instruerbar för denna).
Du kan använda något annat sätt för att ansluta, det här kan vara en perfboard du lödder upp eller använder en brödbräda. Båda dessa kommer att fungera bra också.
Steg 4: Installera ESP32 -kortet i Arduino IDE
Nu när vi har anslutit korten till varandra är det dags att kontrollera anslutningen.
Vi kommer att göra det genom att samla I2C -adresserna på Ina -korten.
ESP32 -kortet fungerar perfekt med Arduino IDE.
Så låt oss installera ESP32 -kortet i Arduino med hjälp av styrelsechefen.
Steg 5: Kontrollera anslutningen Ina till ESP32 med hjälp av I2C -skanner
Vi kommer att använda en enkel I2C -adressskanner för att säkerställa anslutning mellan ESP32 och Ina260 -korten.
I2C -adressskannerkoden kan kopieras och klistras in i ett tomt Arduino -projekt.
Koden har hämtats från Arduino cc -webbplatsen:
// -------------------------------------- // i2c_scanner // // Version 1/ / Detta program (eller kod som ser ut som det) // kan hittas på många ställen. // Till exempel på forumet Arduino.cc. // Den ursprungliga författaren vet inte. // Version 2, juni 2012, med Arduino 1.0.1 // Anpassad för att vara så enkel som möjligt av Arduino.cc -användare Krodal // Version 3, 26 feb 2013 // V3 av louarnold // Version 4, 3 mars 2013, Använda Arduino 1.0.3 // av Arduino.cc -användare Krodal. // Ändringar av louarnold har tagits bort. // Skanningsadresser ändrades från 0… 127 till 1… 119, // enligt i2c -skannern av Nick Gammon // https://www.gammon.com.au/forum/?id=10896 // Version 5, mars 28, 2013 // Som version 4, men adressen skannar nu till 127. // En sensor verkar använda adress 120. // Version 6, 27 november 2015. // Lagt till väntar på Leonardos seriekommunikation. // // // Denna skiss testar standard 7-bitars adresser // Enheter med högre bitadress kanske inte visas korrekt. // #include void setup () {Wire.begin (); Serial.begin (9600); medan (! Seriell); // Leonardo: vänta på seriell bildskärm Serial.println ("\ nI2C Scanner"); } void loop () {byte fel, adress; int nDevices; Serial.println ("Skanning …"); nDevices = 0; för (adress = 1; adress <127; adress ++) {// i2c_scannern använder returvärdet för // Write.endTransmisstion för att se om // en enhet bekräftade adressen. Wire.beginTransmission (adress); fel = Wire.endTransmission (); if (error == 0) {Serial.print ("I2C -enhet hittades på adressen 0x"); if (adress <16) Serial.print ("0"); Serial.print (adress, HEX); Serial.println ("!"); nDevices ++; } annars if (error == 4) {Serial.print ("Okänt fel vid adress 0x"); if (adress <16) Serial.print ("0"); Serial.println (adress, HEX); }} if (nDevices == 0) Serial.println ("Inga I2C -enheter hittades / n"); annars Serial.println ("gjort / n"); fördröjning (5000); // vänta 5 sekunder på nästa skanning}
Steg 6: Skapa HTML -webbservermappen
ESP32 ger möjlighet att köra en webbserver. Det ger också ett ganska stort RAM -minne för att hålla vissa webbsidor. (Det komprimerar automatiskt webbsidans filer).
Arduino IDE ger funktionen för att ladda upp de skapade webbsidorna direkt till ESP32: s RAM.
För att göra detta måste du skapa en mappdata under Arduino -projektets mapp. I mitt fall är detta / Arduino / esp32_Power_supply_v1_implemented / data.
Det är viktigt att namnge mappen exakt "data" eftersom det är mappnamnet Arduino kommer att leta efter när du laddar upp webbsidefilerna till ESP.
Steg 7: Skapa webbsidan för Power Monitor
HMTL är ett språk som gör det möjligt att presentera en text i en webbläsare. En HTML -fil sparas under tillägget htm (l). Formateringen av en webbsida placeras vanligtvis i en separat fil (t.ex. css -fil). Programfunktionen som en webbsida behöver erbjuda placeras normalt i en annan fil (t.ex. js -fil, för javascript).
I mitt HTML -dokument inkluderade jag texten, formateringen och Javascript i en fil. Det är därför inte ett bra exempel på hur man skapar en webbsida men det tjänar syftet. Jag namngav HTML -dokumentet 'Index.htm'.
En andra fil ingår i min datafolder, dvs. PicoGraph.js. PicoGraph -biblioteket tillhandahålls av Vishnu Shankar B från RainingComputers och möjliggör ett mycket enkelt, men effektivt och flexibelt sätt att presentera grafer på en webbsida. Jag ändrade koden något för att bättre tjäna mitt syfte.
Du kommer att märka att HTML -webbsidan också innehåller koden för att styra spänningsförsörjningen på mitt kretskort. Spänningskoden styr spänningsnivån för 5 I/O -stift. Du kan ändra koden för att utesluta detta eller så kan du låta den vara kvar om det inte påverkas.
HTML -koden bifogas detta steg som en txt -fil (eftersom instruktionerna inte tillåter uppladdning av htm -kod).
För att använda HTML -koden kopierar du och klistrar in den i en textredigerare (jag använder Anteckningar ++) och sparar den som 'Index.htm' under 'Data' -mappen. Du gör samma sak för filen picograph.txt men byter namn på den till picograph.js
När det gäller HTML -filen:
En funktion SndUpdate används för att skicka meddelanden fram och tillbaka från ESP till webbsidan.
Meddelandena som skickas från ESP tjänar strömförsörjningsfunktionen och ligger utanför räckvidden för detta instruerbara. meddelandena till ESP betjänar Ina260 -kortmätningarna.
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;
Ovanstående kod läser 6 nummer från ESP32 -kortet, dvs. spänningsmätningen, strömmätningen från det första kortet, följt av de två mätningarna från det andra och så vidare.
Graferna är inbäddade i så kallade flexbehållare, vilket möjliggör flexibel ändring av webbsidan.
.flex-container {display: flex; bakgrundsfärg: cadetblue; flex-wrap: wrap; }.flex-container> div {bakgrund-färg: #f1f1f1; marginal: 10px; vaddering: 20px; teckenstorlek: 20px; font-family: "Seven Segment"; font-weight: fet; }
Innehållet i var och en av flexbehållarna består av följande, inklusive de inbäddade graferna.
(observera att det är borttaget)
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; " /duk
!-div för legender/etiketter-
div /div div /div /div
Den sista delen av vikt i HTML -filen fungerar med PicoGraph -biblioteket för att presentera numren:
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"); / * Uppdatera värden varannan */ setInterval (updateEverySecond, 1000); function updateEverySecond () { / * Få nya värden * / SndUpdate ();
/ * Uppdatera graf */PG1_demograph.update ([PG1_yrand0], parseInt (byID ("PG1_scale"). Värde)+ parseInt (byID ("PG1_scale"). Värde)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (byID ("PG2_scale"). Värde)+ parseInt (byID ("PG2_scale"). Värde)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (byID ("PG3_scale"). Värde)+ parseInt (byID ("PG3_scale"). Värde)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (byID ("PG4_scale"). Värde)+ parseInt (byID ("PG4_scale"). Värde)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (byID ("PG5_scale"). Värde)+ // parseInt (byID ("PG5_scale"). Värde)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (byID ("PG6_scale"). Värde)+ parseInt (byID ("PG6_scale"). Värde)/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ärde = Math.floor (parseInt (byID ("PG1_scale"). värde)/2+PG1_yrand0); byID ("PG2_scale"). värde = Math.floor (parseInt (byID ("PG2_scale"). värde)/2+PG2_yrand0); byID ("PG3_scale"). värde = Math.floor (parseInt (byID ("PG3_scale"). värde)/2+PG3_yrand0); byID ("PG4_scale"). värde = Math.floor (parseInt (byID ("PG4_scale"). värde)/2+PG4_yrand0); // byID ("PG5_scale"). värde = Math.floor (parseInt (byID ("PG5_scale"). värde)/2+PG5_yrand0); byID ("PG6_scale"). värde = Math.floor (parseInt (byID ("PG6_scale"). värde)/2+PG6_yrand0);
När du studerar koden kommer du att märka att jag bara använder 5 grafer av de 6 för mitt ändamål. Om du inte kommenterar de högra raderna aktiveras det sjätte diagrammet.
För dem som inte har erfarenhet av html kan detta steg vara lika svårt. Det kan dock fungera som en bra introduktion till HTML -världen. Jag vet eftersom det här var den första sidan jag någonsin skapat. Så var inte rädd. För dem som upplevs under oss, var förlåtande.
Resultatet av ditt arbete på webbsidan kan granskas genom att öppna din html, den laddas i din webbläsare och visar dess utseende. Du kan söka efter eventuella fel genom att trycka på F12 -tangenten i din webbläsare, felsökningsfönstret visas. Fullständig förklaring till hur felsökning är utanför omfattningen av denna instruerbara, men webbsidan kan vara till hjälp som ett första steg till webbsida / javascript -felsökning.
Nästa steg är att ladda de skapade webbsidorna till ESP32.
Steg 8: Ladda in webbsidan i ESP32
Efter att ha fått ett tillfredsställande resultat är det dags att ladda upp webbsidan till ESP32.
Du gör detta genom att spara "Index.htm" (din webbsida) och "PicoGraph.js" i "data" -mappen under ditt Arduino -projekt.
Nästa steg är att ansluta ESP32 -kortet till datorn. Efter att ha valt rätt kort och COM -port väljer du ESP32 Sketch Data Upload under Verktyg -menyn i Arduino IDE.
Du kommer att se att IDE kommer att börja sin uppladdningsprocess, vilket bör leda till en framgångsrik laddning.
Bredvid detta steg är att konfigurera ESP32 mikrokontroller som en webbserver.
Steg 9: Konfigurera ESP32 som webbserver
Bifogad hittar du Arduino Ino -skissen som konfigurerar ESP32 som en webbserver.
Du måste ersätta SSID och relaterat lösenord med routerns lösenord.
Som redan nämnts innehåller denna skiss också koden för att konfigurera webbsidan som en styrenhet för strömförsörjningssidan på kretskortet (faktiskt konfigurera 5 IO -stift som PWM -stift och styra dem genom meddelandeströmmen från webbsidan).
Skissen är baserad på den vanliga webbserversskissen som utvecklats av Hristo Gochkov.
Någon förklaring till koden.
Följande funktioner är alla relaterade till att konfigurera webbservern.
String formatBytes (size_t bytes) String getContentType (String filnamn) bool finns (String sökväg) bool handleFileRead (String sökväg) void handleFileUpload () void handleFileDelete () void handleFileCreate () void handleFileList ()
Den första koden i setup () -funktionen är också relaterad till PWM- och webbserverinställningar.
Följande kod ställer in Interrupt -funktionen som betjänar meddelandeströmmarna till och från webbsidan:
(du bör känna igen identifierarna från skapandet av webbsidan)
server.on ("/SndUpdate", HTTP_GET, () {
String Msg = "{"; Msg+ = "\" PG1_yrand0 / ":"+ (sträng) Vina [1]; Msg+ = ", \" PG2_yrand0 / ":"+ (sträng) Iina [1]; Msg+ = ", \" PG3_yrand0 / ":"+ (sträng) Vina [0]; Msg+ = ", \" PG4_yrand0 / ":"+ (sträng) Iina [0]; Msg+ = ", \" PG5_yrand0 / ":"+ (sträng) Vina [2]; Msg+ = ", \" PG6_yrand0 / ":"+ (sträng) Iina [2]; Msg+= "}";
server.send (200, "text/json", Msg);
Detta startar servern:
server.begin ();
Nästa kodblock, initierar INA260 -korten:
// INA260 initialisering om (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Det gick inte att hitta INA260 0x40 -chip")); // medan (1); } Serial.println (F ("Hittade INA260 -chip 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Kan inte hitta 0x41 INA260 -chip")); // medan (1); } Serial.println (F ("Hittade INA260 0x41 -chip")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Det gick inte att hitta INA260 0x44 -chip")); // medan (1); } Serial.println (F ("Hittade 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 säkerställer följande uttalande hantering av avbrottskoden:
server.handleClient ();
Följande kod i loop -satsen är relaterad till strömförsörjningsfunktionen.
Följande kod i loop () är intressant 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 ();
Dessa uttalanden samlar in och förbereder mätningarna för överföring till webbsidan via Server. Vid avbrottssamtal (förekommer var 1000: e ms, anges i html -java -skriptet för webbsidan).
Steg 10: Du är klar
Om du laddar upp skissen till ESP32 -kortet borde installationen slutföras och din strömmonitor ska vara slutlig!
Du kanske har märkt att ESP32 drivs nu via USB -porten, detta höjer en stor del av fördelarna med den WiFi -baserade anslutningen med dina spännings- / strömmätare. Därför har jag gjort en enkel LM317 -baserad spänningsreglerad strömförsörjning för ESP32. Jag höll det utanför ramen för detta instruerbara men om det finns intresse kan det bli en nästa instruerbar.
I nästa steg har jag redan tillhandahållit den elektroniska kretsen för strömförsörjningen som kan tjäna som inspiration.
Steg 11: Strömförsörjning av ESP32
Härmed en inspiration för att bygga en fristående kraftkälla för din ESP32, om du inte har en liggande.
Strömkretsen fungerar med en 19V laptop strömförsörjning. Detta kräver ett tvåfasigt spänningssteg ner för att hålla strömavledningen hos LM317 under kontroll. (Även med kylflänsar!). Glöm inte heller att inkludera en 100uF kondensator framför VCC_ESP -linjen, eftersom dessa mikrokontroller har stora strömsvängningar säkert när WiFi -anslutningen startas.
Observera att ESP32 inte ska drivas med mer än en strömkälla åt gången!
Vidare de vanliga ansvarsfriskrivningarna, men mest av allt
Ha så kul!
Alla filer finns på min GitHub:
Rekommenderad:
FLEXBALL - en hundra pixlar flexibel PCB -boll med WiFi: 6 steg (med bilder)
FLEXBALL - en hundra pixel flexibel PCB -boll med WiFi: Hej beslutsfattare, det är tillverkaren moekoe! Flexball är baserad på en flexibel kretskort som är utrustad med 100 WS2812 2020 adresserbara lysdioder. Den styrs av en ESP8285-01f - den minsta ESP -baserade modulen från Espressif. Dessutom har den en ADXL345 acceleromete
Universell fjärrkontroll med ESP8266 (Wifi -kontrollerad): 6 steg (med bilder)
Universell fjärrkontroll med ESP8266 (Wifi -kontrollerad): Detta projekt är att ersätta den konventionella fjärrkontrollen för alla hushållsapparater som AC, TV, DVD -spelare, musiksystem, SMART -apparater !!! Att göra ett helt skräp av fjärrskräpning, vilket gör att vi pusslar !!! Detta projekt kommer att rädda oss från
Wifi -kontrollerad 12v LED -remsa med Raspberry Pi med Tasker, Ifttt -integration: 15 steg (med bilder)
Wifi -kontrollerad 12v Led Strip med Raspberry Pi Med Tasker, Ifttt Integration .: I det här projektet kommer jag att visa dig hur du styr en enkel 12v analog led strip över wifi med en hallon pi. För detta projekt behöver du: 1x Raspberry Pi (I använder en Raspberry Pi 1 Model B+) 1x RGB 12v Le
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
WiFi -skanner med lång räckvidd med ESP8266: 6 steg (med bilder)
Långdistans WiFi -skanner med hjälp av ESP8266: I den här instruktionsboken gör jag en batteridriven bärbar 2,5 -bands WiFi -skanningsenhet med lång räckvidd som används för att avgöra vilken kanal som är bäst för mitt hemnätverk. Den kan också användas för att hitta öppna WiFi -åtkomstpunkter när du är på språng. Kostnad att göra: Cirka $ 25 dollar