Obsah:

Vícekanálový měřič napětí a proudu Wifi: 11 kroků (s obrázky)
Vícekanálový měřič napětí a proudu Wifi: 11 kroků (s obrázky)

Video: Vícekanálový měřič napětí a proudu Wifi: 11 kroků (s obrázky)

Video: Vícekanálový měřič napětí a proudu Wifi: 11 kroků (s obrázky)
Video: #1 Jak naprogramovat Outseal Arduino PLC (Začínáme) 2024, Červenec
Anonim
Vícekanálový měřič napětí a proudu Wifi
Vícekanálový měřič napětí a proudu Wifi

Při breadboardingu člověk často potřebuje sledovat různé části okruhu najednou.

Abych se vyhnul bolesti při přilepení multimetrových sond z jednoho místa na druhé, chtěl jsem navrhnout vícekanálový měřič napětí a proudu.

Deska Ina260 od společnosti Adafruit poskytuje velmi účinný a efektivní způsob, jak toho dosáhnout. Obsahuje velmi přesný měřič napětí a proudu s integrovaným můstkem I2C (úspora spousty pinů při kombinaci 3 z nich!).

Jediné, co chybělo, byl displej. Proto se rozhodlo připojit desky na vývojovou desku ESP32, která může snadno přenášet webový server a prezentovat měřené položky na obrazovce PC/mobilního telefonu.

Zásoby

3 x adafruitová deska Ina260

3 x kolíky záhlaví s dlouhými kolíky

Min. 6 propojovacích vodičů

1 x ESP32 Wrover-B (nebo jakákoli jiná WiFi deska s podporou I2C)

2 x 19kolíkový konektor (pokud je k dispozici)

1 x PCB nebo Perfboard

Napájení 1 x 3,3 V.

Krok 1: Pájejte tři desky INA

Pájejte tři desky INA
Pájejte tři desky INA

Prvním krokem je sestavení tří desek INA260.

Velmi dobrou instrukci najdete na webu Adafruit. Postupujte podle pokynů pro montáž Adafruit.

Abyste je mohli skládat na sebe, použijte raději dlouhé kolíkové hlavičky než dodané kolíkové lišty!

Krok 2: Konfigurujte tři různé adresy I2C

Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C
Konfigurujte tři různé adresy I2C

I2C je sériový protokol pro dvouvodičové rozhraní pro připojení zařízení s nízkou rychlostí na krátké vzdálenosti. Lze připojit až 127 otroků. Na jedné sběrnici musí být každé zařízení identifikováno jedinečnou adresou I2C. Adresa I2C zařízení je často pevně připojena k čipu zařízení. Pro připojení stejných zařízení na jednu sběrnici výrobce často nechává možnost změny adresy I2C pájením konfigurace pinů dohromady.

To je také případ tří desek INA260. Zařízení má dva kolíky adres, A0 a A1, které lze připojit k GND, VS, SCL nebo SDA pro nastavení požadované adresy. V datovém listu čipu INA260 od texas instrumentů je uveden seznam pinových připojení pro každou ze 16 možných adres.

Deska adafruit to omezuje na 4 desky vystavením dvou padů, které lze použít k vytažení A0 a/nebo A1 do VS. Výchozí adresa desky INA260 je 0x40.

Tento krok dokončíte přiřazením různých adres dvěma dalším tabulím:

Pájením padu A0 druhé desky nastavíte jeho adresu: 0x41 (nebo 1000001 BIN)

Pájením bloku A1 třetí desky přiřadíte adresu: 0x44 (nebo 1000100 BIN)

Krok 3: Připojte desky Ina k ESP32

Připojte desky Ina k ESP32
Připojte desky Ina k ESP32

Nyní, když jsme každé z desek INA přiřadili různé adresy I2C, je na čase je připojit k desce ESP32!

Podle výše uvedeného obrázku připojte

1) kolík VCC na kolík 3,3 V

2) pin GND na pin GND

3) kolík SDA na kolík GPIO 21

4) pin SCL na kolík GPIO 22

Použil jsem návrh PCB k připojení, protože je součástí většího projektu (nastavitelné napájení WiFi s nastavitelným omezením proudu - doufám, že i pro toto bude instruovatelný).

Pro připojení můžete použít jakýkoli jiný způsob, může to být perfboard, který zapájíte nebo použijte prkénko. Oba budou také fungovat dobře.

Krok 4: Nainstalujte desku ESP32 do Arduino IDE

Nainstalujte desku ESP32 do Arduino IDE
Nainstalujte desku ESP32 do Arduino IDE

Nyní, když jsme spojili desky k sobě, je čas zkontrolovat spojení.

Uděláme to tak, že shromáždíme adresy I2C desek Ina.

Deska ESP32 funguje perfektně s Arduino IDE.

Pojďme tedy nainstalovat desku ESP32 do Arduina pomocí Správce desek.

Krok 5: Zkontrolujte připojení Ina k ESP32 pomocí skeneru I2C

Zkontrolujte připojení Ina k ESP32 pomocí skeneru I2C
Zkontrolujte připojení Ina k ESP32 pomocí skeneru I2C

Pro zajištění konektivity mezi deskami ESP32 a Ina260 použijeme jednoduchý skener adres I2C.

Kód skeneru adresy I2C lze zkopírovat a vložit do prázdného projektu Arduino.

Kód byl převzat z webové stránky Arduino cc:

// -------------------------------------- // i2c_scanner // // Verze 1/ / Tento program (nebo kód, který vypadá) // lze nalézt na mnoha místech. // Například na fóru Arduino.cc. // Původní autor není znám. // Verze 2, červen 2012, používání Arduina 1.0.1 // Přizpůsobeno tak, aby bylo co nejjednodušší uživatelem Arduino.cc Krodal // Verze 3, 26. února 2013 // V3 od louarnold // Verze 4, 3. března 2013 „Používání Arduino 1.0.3 // od uživatele Arduino.cc Krodal. // Změny provedené louarnoldem odstraněny. // Skenovací adresy změněny z 0… 127 na 1… 119, // podle skeneru i2c od Nicka Gammona // https://www.gammon.com.au/forum/?id=10896 // Verze 5, březen 28, 2013 // Jako verze 4, ale adresa skenuje nyní na 127. // Zdá se, že senzor používá adresu 120. // Verze 6, 27. listopadu 2015. // Přidáno čekání na sériovou komunikaci Leonardo. // // // Tento náčrtek testuje standardní 7bitové adresy // Zařízení s vyšší bitovou adresou nemusí být správně vidět. // #include void setup () {Wire.begin (); Serial.begin (9600); while (! Serial); // Leonardo: počkejte na sériový monitor Serial.println ("\ nI2C Scanner"); } void loop () {chyba bajtu, adresa; int nZařízení; Serial.println ("Skenování …"); nZařízení = 0; for (address = 1; address <127; address ++) {// i2c_scanner používá návratovou hodnotu // the Write.endTransmisstion, aby zjistil, zda // zařízení potvrdilo adresu. Wire.beginTransmission (adresa); chyba = Wire.endTransmission (); if (chyba == 0) {Serial.print ("Zařízení I2C nalezeno na adrese 0x"); if (adresa <16) Serial.print ("0"); Serial.print (adresa, HEX); Serial.println ("!"); nZařízení ++; } else if (chyba == 4) {Serial.print ("Neznámá chyba na adrese 0x"); if (adresa <16) Serial.print ("0"); Serial.println (adresa, HEX); }} if (nDevices == 0) Serial.println ("Nebyla nalezena žádná zařízení I2C / n"); else Serial.println ("hotovo / n"); zpoždění (5000); // počkejte 5 sekund na další skenování}

Krok 6: Vytvoření složky webového serveru HTML

Vytvoření složky webového serveru HTML
Vytvoření složky webového serveru HTML

ESP32 poskytuje možnost spuštění webového serveru. Poskytuje také poměrně velkou paměť RAM pro uložení některých webových stránek. (Automaticky komprimuje soubory webových stránek).

Arduino IDE poskytuje funkce pro přímé odesílání vytvořených webových stránek do RAM ESP32.

Chcete -li to provést, musíte vytvořit složku „data“pod složkou projektu Arduino. V mém případě se jedná o / Arduino / esp32_Power_supply_v1_implemented / data.

Je důležité pojmenovat složku přesně 'data', protože je to název složky, kterou bude Arduino hledat při odesílání souborů webové stránky do ESP.

Krok 7: Vytvořte webovou stránku Power Monitor

HMTL je jazyk, který umožňuje prezentovat text ve webovém prohlížeči. Soubor HTML je uložen pod příponou htm (l). Formátování webové stránky je obvykle umístěno do samostatného souboru (např. Soubor css). Funkčnost programu, kterou webová stránka potřebuje nabídnout, je obvykle umístěna do jiného souboru (např. Soubor js, pro javascript).

Do svého dokumentu HTML jsem vložil text, formátování a Javascript do jednoho souboru. Není to tedy dobrý příklad, jak vytvořit webovou stránku, ale slouží účelům. Dokument HTML jsem pojmenoval 'Index.htm'.

Druhý soubor je součástí mé datové složky, tzn. PicoGraph.js. Knihovnu PicoGraph poskytuje Vishnu Shankar B od RainingComputers a umožňuje velmi jednoduchý, ale účinný a flexibilní způsob prezentace grafů na webové stránce. Mírně jsem upravil kód, aby lépe sloužil mému účelu.

Všimněte si, že webová stránka HTML také obsahuje kód pro ovládání napájecích zdrojů na mé desce plošných spojů. Kód napájecího napětí řídí úroveň napětí 5 I/O pinů. Kód můžete změnit tak, aby byl vyloučen, nebo jej můžete ponechat, pokud nemá žádný dopad.

Html kód je k tomuto kroku připojen jako soubor txt (protože instructables neumožňuje nahrání htm kódu).

Chcete -li použít kód HTML, zkopírujte jej a vložte do textového editoru (používám Poznámkový blok ++) a uložte jej jako „Index.htm“do složky „Data“. Totéž uděláte pro soubor picograph.txt, ale přejmenujte jej na picograph.js

Pokud jde o soubor HTML:

Funkce SndUpdate se používá k odesílání zpráv zpět a vpřed z ESP na webovou stránku.

Zprávy odesílané z ESP slouží funkci napájení a jsou mimo rozsah tohoto pokynu. zprávy do ESP slouží měření desky Ina260.

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;

Výše uvedený kód čte 6 čísel z desky ESP32, tzn. měření napětí, měření proudu z první desky, následovaná dvěma měřeními z druhé a tak dále.

Grafy jsou vloženy do takzvaných flexibilních kontejnerů, které umožňují flexibilní změnu velikosti webové stránky.

.flex-container {display: flex; barva pozadí: cadetblue; flex-wrap: wrap; }.flex-kontejner> div {barva-pozadí: #f1f1f1; okraj: 10px; čalounění: 20px; velikost písma: 20px; font-family: "Seven Segment"; font-weight: bold; }

Obsah každého z flex kontejnerů je sestaven následovně, včetně vložených grafů.

(všimněte si, kde jsou odstraněny)

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; " /plátno

!-div pro legendy/štítky-

div /div div /div /div

Poslední důležitá část v souboru HTML pracuje s knihovnou PicoGraph k prezentaci čísel:

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"); / * Aktualizujte hodnoty každou sekundu */ setInterval (updateEverySecond, 1000); funkce updateEverySecond () { / * Získat nové hodnoty * / SndUpdate ();

/ * Aktualizovat graf */PG1_demograph.update ([PG1_yrand0], parseInt (podle ID ("PG1_scale"). Hodnota)+ parseInt (podle ID ("PG1_scale"). Hodnota)/10, "#e52b50"); PG2_demograph.update ([PG2_yrand0], parseInt (podle ID ("PG2_scale"). Hodnota)+ parseInt (podle ID ("PG2_scale"). Hodnota)/10, "#e52b50"); PG3_demograph.update ([PG3_yrand0], parseInt (podle ID ("PG3_scale"). Hodnota)+ parseInt (podle ID ("PG3_scale"). Hodnota)/10, "#008000"); PG4_demograph.update ([PG4_yrand0], parseInt (podle ID ("PG4_scale"). Hodnota)+ parseInt (podle ID ("PG4_scale"). Hodnota)/10, "#008000"); // PG5_demograph.update ([PG5_yrand0], parseInt (podle ID ("PG5_scale"). Hodnota)+ // parseInt (podle ID ("PG5_scale"). Hodnota)/10, "#0000ff"); PG6_demograph.update ([PG6_yrand0], parseInt (podle ID ("PG6_scale"). Hodnota)+ parseInt (podle ID ("PG6_scale"). Hodnota)/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; // podle ID ("PG5_wattLabel"). innerHTML = `WATT: $ {Watts} mW`; byID ("PG1_scale"). value = Math.floor (parseInt (byID ("PG1_scale"). hodnota)/2+PG1_yrand0); byID ("PG2_scale"). value = Math.floor (parseInt (byID ("PG2_scale"). hodnota)/2+PG2_yrand0); byID ("PG3_scale"). value = Math.floor (parseInt (byID ("PG3_scale"). hodnota)/2+PG3_yrand0); byID ("PG4_scale"). value = Math.floor (parseInt (byID ("PG4_scale"). hodnota)/2+PG4_yrand0); // byID ("PG5_scale"). value = Math.floor (parseInt (byID ("PG5_scale"). hodnota)/2+PG5_yrand0); byID ("PG6_scale"). value = Math.floor (parseInt (byID ("PG6_scale"). hodnota)/2+PG6_yrand0);

Při studiu kódu si všimnete, že pro svůj účel používám pouze 5 grafů ze 6. Zrušení komentování správných řádků umožní 6. graf.

Pro ty, kteří nemají zkušenosti s html, může tento krok přijít jako těžký. Může však sloužit jako pěkný úvod do světa HTML. Vím to, protože to byla první stránka, kterou jsem kdy vytvořil. Takže se neboj. K těm zkušeným pod námi buďte shovívaví.

Výsledek vaší práce na webové stránce lze zkontrolovat otevřením html, načte se do vašeho prohlížeče a ukáže jeho vzhled. Možné chyby můžete zkontrolovat stisknutím klávesy F12 v prohlížeči, zobrazí se okno ladění. Úplné vysvětlení, jak ladit, je mimo rozsah tohoto pokynu, ale webová stránka může být užitečná jako první krok k ladění webové stránky / javascriptu.

Dalším krokem je načtení vytvořených webových stránek do ESP32.

Krok 8: Načtěte webovou stránku do ESP32

Načíst webovou stránku do ESP32
Načíst webovou stránku do ESP32

Po získání uspokojivého výsledku je čas nahrát webovou stránku do ESP32.

To provedete uložením 'Index.htm' (vaše webová stránka) a 'PicoGraph.js' do složky 'data' pod vaším projektem Arduino.

Dalším krokem je připojení desky ESP32 k počítači. Poté, co jste vybrali správnou desku a port COM, vyberte ESP32 Sketch Data Upload v nabídce Nástroje v Arduino IDE.

Uvidíte, že IDE zahájí proces nahrávání, což by mělo vést k úspěšnému načtení.

Vedle tohoto kroku je konfigurace mikrokontroléru ESP32 jako webového serveru.

Krok 9: Konfigurujte ESP32 jako webový server

V příloze najdete skicu Arduino Ino, která nakonfiguruje ESP32 jako webový server.

SSID a související heslo budete muset nahradit heslem routeru.

Jak již bylo zmíněno, tato skica také obsahuje kód pro konfiguraci webové stránky jako řadiče pro napájecí stranu PCB (ve skutečnosti konfigurace 5 IO pinů jako PWM pinů a jejich ovládání prostřednictvím proudu zpráv z webové stránky).

Skica vychází ze standardní skici webového serveru, kterou vytvořil Hristo Gochkov.

Nějaké vysvětlení ke kódu.

Následující funkce se týkají nastavení webového serveru.

Formát řetězce

Také první kód ve funkci setup () souvisí s nastavením PWM a webového serveru.

Následující kód nastavuje funkci Přerušení, která slouží streamům zpráv na az webové stránky:

(identifikátory byste měli rozpoznat při vytváření webové stránky)

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

Řetězec Msg = "{"; Msg+ = "\" PG1_yrand0 / ":"+ (String) Vina [1]; Msg+ = ", \" PG2_yrand0 / ":"+ (řetězec) Iina [1]; Msg+ = ", \" PG3_yrand0 / ":"+ (String) Vina [0]; Msg+ = ", \" PG4_yrand0 / ":"+ (řetězec) Iina [0]; Msg+ = ", \" PG5_yrand0 / ":"+ (String) Vina [2]; Msg+ = ", \" PG6_yrand0 / ":"+ (řetězec) Iina [2]; Zpráva+= "}";

server.send (200, "text/json", zpráva);

Tím se spustí server:

server.begin ();

Další blok kódu inicializuje desky INA260:

// INA260 inicializace if (! Ina260_0x40.begin (0x40)) {Serial.println (F ("Nelze najít INA260 0x40 čip")); // while (1); } Serial.println (F ("Nalezen čip INA260 0x40")); if (! ina260_0x41.begin (0x41)) {Serial.println (F ("Nelze najít čip 0x41 INA260")); // while (1); } Serial.println (F ("Nalezen čip INA260 0x41")); if (! ina260_0x44.begin (0x44)) {Serial.println (F ("Nelze najít čip INA260 0x44")); // while (1); } Serial.println (F ("Nalezen čip INA260 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);

V kódu smyčky následující příkaz zajišťuje zpracování kódu přerušení:

server.handleClient ();

Následující kód v příkazu smyčky souvisí s funkcí napájení.

Následující kód ve smyčce () je opět zajímavý:

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

Tyto příkazy shromažďují a připravují měření pro přenos na webovou stránku prostřednictvím volání přerušení Server.on (vyskytující se každých 1000 ms, nastaveno ve skriptu Java Java html).

Krok 10: Jste hotovi

Jsi hotov!
Jsi hotov!

Odeslání skici na desku ESP32 by mělo dokončit nastavení a váš monitor napájení by měl být konečný!

Možná jste si všimli, že napájení ESP32 se nyní provádí přes port USB, což zvyšuje velkou část výhod připojení založeného na WiFi s vašimi měřiči napětí / proudu. Proto jsem pro ESP32 vytvořil jednoduchý napěťově regulovaný napájecí zdroj na bázi LM317. Držel jsem to mimo rozsah tohoto pokynu, ale pokud bude zájem, může se stát dalším instruktážním.

V dalším kroku jsem již poskytl elektronický obvod pro napájení, který by mohl sloužit jako inspirace.

Krok 11: Napájení ESP32

Napájení ESP32
Napájení ESP32

Zde inspirace pro vybudování samostatného zdroje napájení pro váš ESP32, pokud ho nemáte.

Napájecí obvod funguje jako napájecí zdroj notebooku 19 V. To vyžaduje dvojfázové snížení napětí, aby byl ztrátový výkon LM317 pod kontrolou. (I s chladiči!). Nezapomeňte také vložit kondenzátor 100uF před linku VCC_ESP, protože tyto mikrokontroléry mají při spuštění připojení WiFi určitě velké výkyvy proudu.

Nezapomeňte napájet ESP32 více než jedním zdrojem napájení najednou!

Dále obvyklá prohlášení o odpovědnosti, ale především

Bavte se!

Všechny soubory najdete na mém GitHubu:

Doporučuje: