Obsah:

Bateriově napájený snímač hladiny sběrače vody: 7 kroků (s obrázky)
Bateriově napájený snímač hladiny sběrače vody: 7 kroků (s obrázky)

Video: Bateriově napájený snímač hladiny sběrače vody: 7 kroků (s obrázky)

Video: Bateriově napájený snímač hladiny sběrače vody: 7 kroků (s obrázky)
Video: NORIA INSTALACE SH3 senzor 2024, Listopad
Anonim
Bateriově napájený snímač hladiny sběrače vody
Bateriově napájený snímač hladiny sběrače vody
Bateriově napájený snímač hladiny sběrače vody
Bateriově napájený snímač hladiny sběrače vody

Náš dům má nádrž na vodu napájenou z deště padajícího na střechu a používanou na toaletu, pračku a zalévání rostlin v zahradě. Poslední tři roky byla léta velmi suchá, takže jsme sledovali hladinu vody v nádrži. Zatím jsme používali dřevěnou hůl, kterou jsme vložili do nádrže a označili hladinu. Ale určitě to musí být možné zlepšit!

Zde přichází na řadu tento projekt. Myšlenkou je připevnit ultrazvukový senzor vzdálenosti na horní část nádrže. Tento senzor funguje jako sonar vyzařující zvukové vlny, které se pak odrážejí od vodní hladiny. Od doby, kdy se vlny vrátí a rychlosti zvuku, můžete vypočítat vzdálenost k vodní hladině a určit, jak je nádrž plná.

Protože nemám blízko nádrže síťové připojení, je nezbytné, aby celé zařízení fungovalo na baterie. To znamená, že jsem si musel být vědom spotřeby energie všech částí. K odeslání dat jsem se rozhodl použít vestavěný Wifi mikročipu ESP8266. I když je Wifi poměrně energeticky náročná, má výhodu oproti jinému typu rádiového připojení: můžete se přímo připojit k bezdrátovému routeru vašeho domova, aniž byste museli budovat další zařízení, které funguje jako relé.

Abych šetřil energii, nechám ESP8266 většinu času v hlubokém spánku a každou hodinu provedu měření. Pro můj účel sledování hladiny vody to více než stačí. Data budou odeslána do ThingSpeak a poté je lze odečíst na smartphonu prostřednictvím aplikace.

Ještě jeden detail! Rychlost zvuku, nezbytná pro měření vzdálenosti, závisí na teplotě a v menší míře na vlhkosti. Pro přesné venkovní měření v průběhu ročních období vložíme senzor BME280, který měří teplotu, vlhkost a tlak. Jako bonus to dělá z našeho snímače hladiny vody také mini meteorologickou stanici.

Díly:

  • 1x ESP8266 ESP-12F.
  • 1x adaptérová deska ESP-12F.
  • 1x FT232RL FTDI: USB na sériový adaptér.
  • 1x HC-SR04-P: ultrazvukový modul pro měření vzdálenosti. Všimněte si, že P je důležitý, protože toto je verze, která má nízké minimální provozní napětí 3V.
  • 1x verze BME280 3,3 V: snímač teploty, tlaku a vlhkosti.
  • 1x IRL2203N: n-kanálový tranzistor MOSFET.
  • 1x verze MCP1700-3302E 3,3 V: regulátor napětí.
  • 3x dobíjecí baterie AA, např. 2 600 mAh.
  • 1x držák baterie na 3 baterie.
  • 1x prkénko.
  • Rezistory: 1x 470K, 1x 100K, 4x 10K.
  • Kondenzátory: 2x keramický 1uF.
  • 3x přepínač.
  • Drátěné prkénko ve tvaru U.
  • Propojovací vodiče.
  • Plastová nádoba na polévku 1l.
  • Upevňovací kroužek pro kontejner.

Kód jsem zpřístupnil na GitHubu.

Krok 1: Seznámení s ultrazvukovým snímačem vzdálenosti

Seznámení s ultrazvukovým snímačem vzdálenosti
Seznámení s ultrazvukovým snímačem vzdálenosti
Seznámení s ultrazvukovým snímačem vzdálenosti
Seznámení s ultrazvukovým snímačem vzdálenosti

Vzdálenost k vodní hladině změříme pomocí ultrazvukového senzoru HC-SR04-P. Stejně jako netopýr, tento senzor používá sonar: vysílá zvukový puls s frekvencí příliš vysokou pro lidské ucho, tedy ultrazvukovou, a čeká, až zasáhne předmět, odrazí se a vrátí se. Vzdálenost lze pak vypočítat z času potřebného k přijetí ozvěny a rychlosti zvuku.

Konkrétně, pokud je aktivační kolík vytažen vysoko po dobu alespoň 10 μs, senzor vyšle sérii 8 impulsů s frekvencí 40 Hz. Odpověď je poté získána na kolíku Echo ve formě pulsu s dobou trvání rovnající se době mezi odesláním a přijetím ultrazvukového impulsu. Poté musíme vydělit 2, protože ultrazvukový puls se pohybuje tam a zpět a potřebujeme jednosměrný cestovní čas a vynásobíme rychlostí zvuku, která je asi 340 m/s.

Ale počkejte chvíli! Ve skutečnosti rychlost zvuku závisí na teplotě a v menší míře na vlhkosti. Vybírám nitě nebo je to relevantní? Pomocí výpočetního nástroje zjistíme, že v zimě (při -5 ° C) bychom mohli mít 328,5 m/s, a v létě (při 25 ° C) 347,1 m/s. Předpokládejme tedy, že najdeme jednosměrný čas cesty 3 ms. V zimě by to znamenalo 98,55 cm a v létě 104,13 cm. To je docela rozdíl! Abychom získali dostatečnou přesnost v průběhu ročních období a dokonce i ve dne v noci, musíme do svého nastavení přidat teploměr. Rozhodl jsem se zařadit BME280, který měří teplotu, vlhkost a tlak. V kódu, který jsem použil ve funkci speedOfSound, je vzorec, který vypočítává rychlost zvuku z hlediska všech tří parametrů, ačkoli teplota je skutečně nejdůležitějším faktorem. Vlhkost má stále menší vliv, ale vliv tlaku je zanedbatelný. Mohli bychom použít jednodušší vzorec s přihlédnutím pouze k teplotě, kterou jsem implementoval v speedOfSoundSimple.

Na HC-SR04 je ještě jeden důležitý bod. K dispozici jsou dvě verze: standardní verze pracuje na 5V, zatímco HC-SR04-P může pracovat na rozsahu napětí od 3V do 5V. Vzhledem k tomu, že 3 dobíjecí baterie AA poskytují přibližně 3 x 1,25 V = 3,75 V, je důležité získat verzi P. Někteří prodejci mohou poslat špatný. Podívejte se tedy na obrázky, pokud si je koupíte. Obě verze vypadají odlišně jak vzadu, tak vpředu, jak je vysvětleno na této stránce. Vzadu u verze P jsou všechny tři čipy horizontální, zatímco u standardní verze je jeden vertikální. Vpředu má standardní verze extra stříbrnou komponentu.

V elektronickém obvodu použijeme tranzistor jako přepínač k vypnutí napájení ultrazvukového senzoru, když naše nastavení přejde do hlubokého spánku, aby se šetřila životnost baterie. Jinak by stále spotřebovával asi 2mA. BME280 na druhou stranu spotřebuje pouze asi 5 μ, když je neaktivní, takže není nutné jej vypínat tranzistorem.

Krok 2: Volba desky ESP8266

Volba desky ESP8266
Volba desky ESP8266

Aby senzor fungoval co nejdéle na baterii, musíme šetřit energií. Zatímco Wifi na ESP8266 poskytuje velmi pohodlný způsob připojení našeho senzoru ke cloudu, je také docela energeticky náročný. V provozu spotřebovává ESP8266 přibližně 80 mA. S bateriemi s kapacitou 2 600 mAh bychom tedy mohli zařízení provozovat maximálně 32 hodin, než budou vybité. V praxi to bude méně, protože nebudeme moci využít plnou kapacitu 2 600 mAh, než napětí klesne na příliš nízkou úroveň.

Naštěstí má ESP8266 také režim hlubokého spánku, ve kterém je téměř vše vypnuté. V plánu je tedy ESP8266 většinu času uspat a tak často ho probouzet, abyste provedli měření a odeslali data přes Wifi do ThingSpeak. Podle této stránky bývala maximální doba hlubokého spánku asi 71 minut, ale od jádra 2.4.1 ESP8266 Arduino se zvýšila na zhruba 3,5 hodiny. V mém kódu jsem se usadil na jednu hodinu.

Nejprve jsem vyzkoušel praktickou vývojovou desku NodeMCU, ale bummer, v hlubokém spánku stále spotřebovával asi 9 mA, což nám dává maximálně 12 dní čistého hlubokého spánku, aniž bychom brali v úvahu intervaly probuzení. Důležitým viníkem je regulátor napětí AMS1117, který využívá energii, i když se ji pokoušíte obejít připojením baterie přímo na 3,3V pin. Tato stránka vysvětluje, jak odstranit regulátor napětí a USB UART. To se mi však nikdy nepodařilo, aniž bych zničil svou desku. Navíc po odpojení USB UART se již nemůžete připojit k ESP8266, abyste zjistili, co se stalo.

Zdá se, že většina vývojových desek ESP8266 používá nehospodárný regulátor napětí AMS1117. Výjimkou je WEMOS D1 mini (obrázek vlevo), který je dodáván s úspornějším ME6211. Skutečně jsem zjistil, že WEMOS D1 mini využívá v hlubokém spánku asi 150 μA, což se mu více podobá. Většina z toho je pravděpodobně kvůli USB UART. S touto deskou však musíte pájet záhlaví kolíků sami.

Můžeme to však udělat mnohem lépe pomocí desky s holými kostmi, jako je ESP-12F (obrázek vpravo), který nemá USB UART ani regulátor napětí. Při napájení kolíku 3,3 V jsem zjistil spotřebu hlubokého spánku pouze 22 μA!

Ale aby ESP-12F fungoval, připravte se na nějaké pájení a trochu více potíží s jeho programováním! Kromě toho, pokud baterie přímo nedodávají správné napětí, které je mezi 3 V a 3,6 V, musíme zajistit vlastní regulátor napětí. V praxi se ukazuje jako obtížné najít bateriový systém, který poskytuje napětí v tomto rozsahu během celého cyklu vybíjení. Pamatujte také, že potřebujeme napájet snímač HC-SR04-P, který teoreticky může fungovat s napětím až 3 V, ale funguje přesněji, pokud je napětí vyšší. Navíc v mém diagramu je HC-SR04-P zapnut tranzistorem, který indukuje malý pokles napětí navíc. Použijeme regulátor napětí MCP1700-3302E. Maximální vstupní napětí je 6V, takže ho napájíme až 4 AA bateriemi. Rozhodl jsem se použít 3 baterie AA.

Krok 3: Vytvořte kanál ThingSpeak

K ukládání našich dat použijeme ThingSpeak, cloudovou službu IoT. Přejděte na https://thingspeak.com/ a vytvořte si účet. Jakmile jste přihlášeni, vytvořte kanál kliknutím na tlačítko Nový kanál. V Nastavení kanálu vyplňte jméno a popis, jak chcete. Dále pojmenujeme pole kanálu a aktivujeme je kliknutím na zaškrtávací políčka vpravo. Pokud použijete můj kód beze změny, pole jsou následující:

  • Pole 1: hladina vody (cm)
  • Pole 2: úroveň baterie (V)
  • Pole 3: teplota (° C)
  • Pole 4: vlhkost (%)
  • Pole 5: tlak (Pa)

Pro budoucí použití si poznamenejte ID kanálu, klíč rozhraní API pro čtení a klíč rozhraní API pro zápis, které najdete v klíčích API nabídky.

Data aplikace ThingSpeak můžete načíst na svém smartphonu pomocí aplikace. Na svém telefonu Android používám widget Monitor IoT ThingSpeak. Musíte jej nakonfigurovat pomocí ID kanálu a klíče API pro čtení.

Krok 4: Jak naprogramovat ESP-12F

Jak programovat ESP-12F
Jak programovat ESP-12F
Jak programovat ESP-12F
Jak programovat ESP-12F

Potřebujeme desku s holými kostmi, abychom ušetřili výdrž baterie, ale nevýhodou je, že je programování o něco obtížnější než vývojová deska s vestavěným USB UART.

Použijeme Arduino IDE. Existují i další instruktážní vysvětlení, jak jej používat, takže zde budu stručný. Kroky k jeho přípravě na ESP8266 jsou:

  • Stáhněte si Arduino IDE.
  • Nainstalujte podporu pro desku ESP8266. V nabídce Soubor - Předvolby - Nastavení přidejte URL https://arduino.esp8266.com/stable/package_esp8266com_index.json na URL dalších Board Manager. Dále v nabídce Nástroje - Deska - Správce desek nainstalujte esp8266 od komunity esp8266.
  • Vybrat jako desku: Obecný modul ESP8266.

K ovládání ESP-12F jsem použil adaptér, běžně dostupný v internetových obchodech. Čip jsem připájel k desce a poté jsem připájel hlavičky k desce. Teprve pak jsem zjistil, že deska adaptéru je na standardní prkénko příliš široká! Nezanechává žádné volné kolíky na boku, aby vytvořily vaše připojení.

Řešení, pro které jsem šel, je použít dráty ve tvaru písmene U a spojit je jako na obrázku vpravo před vložením ESP8266 s deskou adaptéru na prkénko. GND a VCC jsou tedy připojeny k kolejnicím prkénka a zbývající kolíky jsou k dispozici dále na prkénku. Nevýhodou je, že po dokončení celého obvodu bude vaše prkénko dost přeplněné dráty. Dalším řešením je spojit dvě prkénka dohromady, jak ukazuje toto video.

Dále k programování ESP-12F přes USB port vašeho počítače potřebujeme adaptér USB na sériový port. Použil jsem programátor FT232RL FTDI. Programátor má propojku pro výběr mezi 3,3 V nebo 5 V. U ESP8266 by mělo být nastaveno na 3,3 V. Nezapomeňte, protože 5V může smažit váš čip! Instalace ovladačů by měla být automatická, ale pokud programování nefunguje, můžete je zkusit nainstalovat ručně z této stránky.

ESP8266 má režim programování pro nahrání nového firmwaru do blesku a režim blesku pro spuštění aktuálního firmwaru z paměti flash. Abyste si mohli vybrat mezi těmito režimy, některé piny musí mít při spuštění určitou hodnotu:

  • Programování: GPIO0: nízké, CH-PD: vysoké, GPIO2: vysoké, GPIO15: nízké
  • Flash: GPIO0: high, CH-PD: high, GPIO2: high, GPIO15: low

Adaptérová deska se již stará o vytažení CH-PD a stažení GPIO15 s 10K odpory.

V našem elektronickém obvodu tedy stále potřebujeme vytáhnout GPIO2. Poskytujeme také přepínač pro přepnutí ESP8266 do programování nebo do režimu blesku a přepínač pro jeho resetování, což se provádí připojením RST k zemi. Dále se ujistěte, že jste připojili pin TX na FT232RL ke kolíku RXD na ESP8266 a naopak.

Programovací sekvence je následující:

  • Nastavte GPIO2 na nízkou hodnotu zavřením programovacího přepínače.
  • Resetujte ESP8266 zavřením a opětovným otevřením resetovacího spínače. ESP8266 se nyní spustí v režimu programování.
  • Nastavte GPIO2 zpět na vysokou hodnotu otevřením programovacího přepínače.
  • Nahrajte nový firmware z Arduino IDE.
  • Resetujte ESP8266 znovu zavřením a opětovným otevřením resetovacího spínače. ESP8266 se nyní spustí v režimu flash a spustí nový firmware.

Nyní můžete vyzkoušet, zda programování funguje, nahráním slavné skici Blink.

Pokud to všechno funguje, jsou správně pájeny a připojeny piny GND, VCC, GPIO2, RST, TXD a RXD. Jaká to úleva! Ale než budete pokračovat, doporučil bych také vyzkoušet ostatní piny pomocí vašeho multimetru. Sám jsem měl problém s jedním z pinů. Můžete použít tento náčrt, který nastaví všechny piny jeden po druhém na 5 sekund vysoko a poté ESP8266 na 20 sekund usne. Aby se ESP8266 mohl probudit po hlubokém spánku, musíte připojit RST k GPIO16, který vydává signál probuzení.

Krok 5: Nahrání náčrtu

Zpřístupnil jsem kód na GitHub, je to jen jeden soubor: Level-Sensor-Deepsleep.ino. Stačí si jej stáhnout a otevřít v Arduino IDE. Nebo můžete vybrat Soubor - Nový a zkopírovat/vložit kód.

Na začátku souboru musíte vyplnit několik údajů: název a heslo WLAN, kterou chcete použít, statické IP adresy a klíč ID kanálu a klíč API rozhraní ThingSpeak Channel.

Podle tipu na tomto blogu místo DHCP, kde router dynamicky přiřazuje IP, používáme statickou IP, kde si IP adresu ESP8266 nastavujeme sami. To se ukazuje být mnohem rychlejší, takže šetříme na aktivním čase a tím i na energii baterie. Musíme tedy poskytnout dostupnou statickou IP adresu, stejně jako IP routeru (brány), masky podsítě a serveru DNS. Pokud si nejste jisti, co vyplnit, přečtěte si o nastavení statické IP v příručce vašeho routeru. Na počítači se systémem Windows připojeném přes Wifi k routeru spusťte shell (tlačítko Windows-r, cmd) a zadejte ipconfig /all. Většinu potřebných informací najdete v sekci Wi-Fi.

Při zkoumání kódu vidíte, že na rozdíl od jiných kódů Arduino se většina akcí odehrává ve funkci nastavení místo ve funkci smyčky. Důvodem je, že ESP8266 přejde do hlubokého spánku poté, co dokončí funkci nastavení (pokud jsme nezačali v režimu OTA). Poté, co se probudí, je to jako nový restart a znovu spustí nastavení.

Zde jsou hlavní rysy kódu:

  • Po probuzení nastaví kód switchPin (výchozí GPIO15) na vysoký. Tím se zapne tranzistor, který zase zapne senzor HC-SR04-P. Před hlubokým spánkem nastaví kolík zpět na nízkou úroveň, vypne tranzistor a HC-SR04-P a ujistí se, že nespotřebovává žádnou vzácnější energii baterie.
  • Pokud je modePIN (výchozí GPIO14) nízký, kód přejde do režimu OTA místo režimu měření. S OTA (over-the-air update) můžeme aktualizovat firmware přes Wifi místo sériového portu. V našem případě je to docela výhodné, protože pro další aktualizace již nemusíme připojovat sériový adaptér k USB. Stačí nastavit GPIO14 na nízkou úroveň (s přepínačem OTA v elektronickém obvodu), resetovat ESP8266 (pomocí resetovacího přepínače) a měl by být dostupný v Arduino IDE k nahrání.
  • Na analogovém PIN (A0) měříme napětí baterie. To nám umožňuje vypnout naše zařízení, neboli trvalý hluboký spánek, pokud je napětí příliš nízké, pod min. Napětí, abychom chránili baterie před nadměrným vybitím. Analogové měření není příliš přesné, provádíme opatření numMeasuresBattery (výchozí 10) a pro zlepšení přesnosti bereme průměr.
  • Měření vzdálenosti senzoru HC-SR04-P se provádí ve funkci měření vzdálenosti. Pro zlepšení přesnosti je měření opakováno numMeasuresDistance (výchozí 3) krát.
  • Existuje funkce pro výpočet speedOfSound z teploty, vlhkosti a tlaku pomocí senzoru BME280. Výchozí I2C adresa BME280 je 0x76, ale pokud to nefunguje, budete ji muset změnit na 0x77: bool bme280Started = bme280.begin (0x77);
  • BME280 použijeme v nuceném režimu, což znamená, že zabere jedno měření a vrátí se do úsporného režimu.
  • Pokud nastavíte kapacitu (l), plnou vzdálenost (cm) a plochu (m2), kód vypočítá zbývající objem nádrže na vodu z měření vzdálenosti: dvojnásobný zbývající objem = kapacita+10,0*(plná vzdálenost-vzdálenost)*plocha; a nahrajte to na ThingSpeak. Pokud zachováte výchozí hodnoty, odešle vzdálenost k vodní hladině v cm.

Krok 6: Budování elektronického obvodu

Budování elektronického obvodu
Budování elektronického obvodu

Nahoře je schéma elektronického obvodu. Je to docela velké na jedno prkénko, zejména s příliš velkou adaptační deskou a trikem s dráty ve tvaru U. V určitém okamžiku jsem si určitě přál, abych použil alternativu propojení dvou prkének, ale nakonec jsem to zvládl.

Zde jsou důležité vlastnosti obvodu:

  • Roli hrají dvě napětí: vstupní napětí z baterie (kolem 3,75 V) a 3,3 V, které napájí ESP8266 a BME280. 3,3 V jsem dal na levou kolejnici desky a 3,75 V na pravou lištu. Regulátor napětí převádí 3,75 V na 3,3 V. Podle pokynů v datovém listu jsem ke zvýšení stability přidal kondenzátory 1 μF na vstup a výstup regulátoru napětí.
  • GPIO15 ESP8266 je připojen k bráně tranzistoru. To umožňuje ESP8266 zapnout tranzistor a tím i ultrazvukový senzor, když je aktivní, a vypnout jej, když jde do hlubokého spánku.
  • GPIO14 je připojen k přepínači, přepínači OTA. Zavřením přepínače získáte signál pro ESP8266, který chceme spustit v režimu OTA dále, tj. Poté, co stiskneme (zavřeme a otevřeme) přepínač RESET a nahrajeme novou skicu bezdrátově.
  • Piny RST a GPIO2 jsou zapojeny jako v programovacím schématu. Pin RST je nyní také připojen k GPIO16, aby se ESP8266 mohl probudit z hlubokého spánku.
  • Piny TRIG a ECHO ultrazvukového senzoru jsou připojeny k GPIO12 a GPIO13, zatímco kolíky SCL a SDA BME280 jsou připojeny k GPIO5 a GPIO4.
  • Konečně, analogový pin ADC je přes dělič napětí připojen ke vstupnímu napětí. To umožňuje měřit vstupní napětí a kontrolovat nabití baterií. Pin ADC může měřit napětí mezi 0V a 1V. Pro dělič napětí jsme vybrali odpory 100K a 470K. To znamená, že napětí na pinu ADC je dáno vztahem: V_ADC = 100K/(100K+470K) V_in. Vezmeme -li V_ADC = 1V, znamená to, že můžeme měřit vstupní napětí až do V_in = 570/100 V_ADC = 5,7V. Pokud jde o spotřebu energie, přes dělič napětí také uniká proud. Při V_in = 3,75V z baterií zjistíme I_leak = 3,75V/570K = 6,6 μA.

I když je obvod napájen z baterií, je možné připojit USB k sériovému adaptéru. Jen nezapomeňte odpojit VCC adaptéru a připojit GND, RX a TX podle schématu programování. To umožňuje otevřít sériový monitor v Arduino IDE, aby si přečetl zprávy o ladění a ujistil se, že vše funguje podle očekávání.

Pro celý obvod jsem změřil odběr proudu 50 μA v hlubokém spánku při běhu z baterií. Patří sem ESP8266, BME280, ultrazvukový senzor (vypnutý tranzistorem) a únik přes dělič napětí a možná další úniky. Takže to není tak špatné!

Zjistil jsem, že celkový aktivní čas je asi 7 sekund, z toho 4,25 sekundy pro připojení k Wifi a 1,25 sekundy pro odeslání dat do ThingSpeak. Takže s aktivním proudem 80 mA jsem našel aktivní čas 160 μAh za hodinu. Když přidáme 50 μAh za hodinu pro stav hlubokého spánku, máme celkem 210 μAh za hodinu. To znamená, že baterie 2 600 mAh teoreticky vydrží 12 400 hodin = 515 dní. Toto je absolutní maximum, pokud bychom mohli využít plnou kapacitu baterií (což není tento případ) a nedochází k žádným únikům, které jsem při svých současných měřeních nenašel. Takže ještě musím zjistit, zda to opravdu vychází.

Krok 7: Dokončení senzoru

Dokončení snímače
Dokončení snímače
Dokončení snímače
Dokončení snímače
Dokončení snímače
Dokončení snímače

Senzor jsem vložil do plastové 1litrové nádoby, která dříve obsahovala polévku. Ve spodní části jsem vytvořil dva otvory, aby se vešly do „očí“senzoru HC-SR04-P. Kromě otvorů by měl být kontejner vodotěsný. Poté je připevněn ke stěně vodní nádrže kruhovým prstencem, který se běžně používá pro odtokové potrubí dešťové vody.

Bavte se s projektem!

Doporučuje: