Meteorino: Palawakin ang Buhay ng Baterya sa NodeMCU? Lamang Lumipat Ito Off: 11 Hakbang

Meteorino: Palawakin ang Buhay ng Baterya sa NodeMCU? Lamang Lumipat Ito Off: 11 Hakbang

Talaan ng mga Nilalaman:

Anonim

Meteorino ay isang simpleng stand-alone, unmanned, temperatura / halumigmig na sistema ng pag-uulat. Ngunit nais kong ibahagi sa iyo ang lahat ng aking pagdidisenyo / pag-unlad / pagbuo ng karanasan habang natitiyak ko na mayroon akong mga problema sa lahat ng tao kapag sinusubukang i-set up ang isang pangkaraniwang sensor ng metro ng WiFi na dapat magtrabaho ng walang tigil 24/7.

Ang mga resulta ay madaling minana ng anumang katulad na proyekto (na may NodeMCU o katumbas) kapag ang isang microcontroller ay kinakailangan upang magpadala ng data sa paglipas ng WiFi sa panahon ng discrete at maikling agwat bawat oras.

Mga Kagamitan:

Hakbang 1: Mga Bahagi at Mga Bahagi

  • Microcontroller NodeMCU
  • DHT22 sensor
  • TPL-5110 timer
  • Lumipat
  • Capacitors at resistors tulad ng iniulat sa schematics
  • 3xAA alkalina baterya
  • Kaso ng enclosure

Hakbang 2: Ang Problema

Ako ay nangangailangan ng patuloy na sinusubaybayan ang panlabas o panloob na temperatura / halumigmig at iba pang kaugnay na mga pisikal na dami (index ng init, temperatura ng hamog, antas ng baterya) sa anumang lugar, hindi binibilang sa isang electric socket ng AC. Sa sitwasyong ito, ang buhay ng baterya ay isang mataas na isyu ng priority at siyempre ang unang diskarte ko ay pakikitungo sa ay DeepSleep kakayahan o ESP8266 (na naka-embed sa NodeMCU).

Malubhang nabigo ako noong una kong sinukat ang pagkonsumo ng kapangyarihan ng NodeMCU sa DeepSleep: ilang tenths o milliAmperes! Ang pangunahing bahagi ng kapangyarihan na iyon ay ginamit upang panatilihing buhay ang UART, ang boltahe regulator at ang RTC. Hindi ko mapupuksa ang boltahe regulator, habang ako ay nag-iisip tungkol sa kapangyarihan ang microcontroller sa pamamagitan ng pin pin; sa kabilang banda, ang pag-alis sa UART mula sa circuit ay maaaring isang mapanganib na isyu (dahil sa maliit na sukat ng mga sangkap) at mas gusto ko na iwanan ang pag-andar ng UART sa circuit, upang ma-update ang sketch na walang problema.

Sa huli, isinasaalang-alang ko na kailangan ko ang NodeMCU na nagtatrabaho lamang para sa ilang mga segundo (ang oras upang magpadala ng data sa WiFi, 8 segundo) bawat 30 minuto: bakit pinananatili ang lahat ng bagay magpakailanman kung kailangan ko lang buhay para sa 0.4% ng oras (tingnan ang aking Pagguhit ng Power Cycle)? Narito ito ang solusyon.

Hakbang 3: Ang Solusyon

Sa ganitong uri ng cycle ng kuryente (ilang segundo kada oras) nagpasiya akong huwag ituloy ang DeepSleep paraan na ngayon, ngunit sa SWITCH OFF ang circuit. Kaya, ako ay nangangailangan ng isang circuit ng timer, sobrang mababa ang kapangyarihan, nakapag-switch sa NodeMCU, maghintay ng isang DONE signal at pagkatapos ay i-off ito para sa 30 minuto. Habang sinusubukan kong muling baguhin ang gulong, tumalon ako sa Texas Instrumentong TPL5110: isang mababang power timer na may isang integrated driver ng MOSFET perpekto para sa kapangyarihan gating sa duty cycled o baterya pinagagana ng mga application, pag-ubos lamang 35nA (oo, ang mga ito ay nanoAmperes!).

Ang TPL5110 ay nagbibigay ng maaaring piliin ng mga agwat ng tiyempo mula sa 100ms hanggang 7200s at idinisenyo para sa mga application ng kapangyarihan gating. Ang breakout board ng Adafruit para sa mga sangkap na ito ay may isang humantong at isang trimmer dito, na kung saan ako ay may kapansanan sa pamamagitan ng pagputol ng dalawang linya ng PCB sa likod. Ang pagitan ng oras ay nakatakda sa pamamagitan ng isang risistor (tingnan ang mga talahanayan sa datasheet ng pagtutukoy): Pinili ko ang isang parallel o 2 resistors (100kΩand 1MΩ), na nagbigay sa akin sa paligid ng 29.5 minuto ng pagka-antala. Sa sandaling natapos na ng NodeMCU ang cycle nito, nagpapadala ito ng HIGH signal sa DONE pin o TPL-5110, upang ipaalam ito upang isara ang lakas at simulan ang pagbibilang ng 30 minuto.

Ang isang isyu ay nagpabaliw sa akin sa isang linggo bago maghanap ng isang solusyon: tila ang TPL-5110 ay hindi tulad ng mataas na kasalukuyang spike na ESP8266 injects sa linya ng kapangyarihan sa paglipat sa, at ito ay bumagsak sa isang hindi pa natukoy na estado. Ang mga unang pagsubok ay hindi gumagana at ako ay malapit na abandunahin ang solusyon na ito bilang ang timer ay hindi supplying ang tamang boltahe sa circuit. Pagkatapos, isang araw, nakakonekta ako ng 2 capacitors: isang 2,220μf direkta sa baterya at isang 47μf sa TPL-5110 DRV pin. Gotcha! Ang mga bagay ay nagsimulang magtrabaho ayon sa nararapat nila, at ang Meteorino ay buong kapusukan na gumagawa ng kanyang trabaho mula nang maraming buwan.

Hakbang 4: Baterya at Pagbabago ng Boltahe

Sa solusyon ng TPL-5110, ang sistema ay gumagamit ng 80mA para sa 8 segundo bawat 30 minuto, at 35nA sa panahon ng natitirang oras. Ang mga kalkulasyon ay nagdadala ng isang average na kasalukuyang ng 350μA, at sa mga numerong ito nagpasya akong gumamit ng 3xAA alkalina baterya (4.5 o higit pa sa buong singil) konektado sa VIN pin o NodeMCU. Isinasaalang-alang na sa mga kasalukuyang rate ang microcontroller ay maaaring gumana pababa sa 3.3-3.4 volts, buhay baterya ay maaaring maabot ng higit sa 2 buwan ng patuloy na operasyon.Sinubukan ko ang ilang alkalina baterya, at ang pinakamagandang pagpipilian para sa akin ay Duracell Plus Power o Energizer Max. Inirerekomenda ko na huwag gumamit ng mga murang alkalina na baterya, kung hindi man ay mababago ang tagal ng buhay.

Nagtayo rin ako ng isa pang Meteorino na may LiFePo4 3.2 cell, na konektado sa 3V3 pin: ang baterya ay nagtatrabaho pa rin sa 3.1 volts matapos ang 4 na buwan!

Pagkatapos ay napunta ako sa isyu ng pagbabasa ng baterya. Bilang NodeMCU ay may panloob na ADC na magagamit sa pamamagitan ng A0 pin, sinundan ko ang mga suhestiyon na matatagpuan sa artikulong ito; Kinalkula ko ang pagkakalibrate ng LSB number at hard coded ito sa sketch. Ang solusyon na ito ay nagbibigay sa akin ng isang katanggap-tanggap na katumpakan sa pagbabasa (+/- 3mV), kaya ko masusuri ang mga baterya mula sa ulap, kasama ang data sa kapaligiran.

lumutang LSB = 0.0066666667;

Hakbang 5: Ang Sensor

Ang sensor ay isang DHT22 (mas maaasahan kaysa sa kanyang kapatid na DHT11). Paggamit ng NodeMCU, HUWAG isama ang karaniwang library ng DHT sensor, ngunit gamitin ang DHTesp ni Mark Ruys. Wala sa mga library ng DHT na nakita kong isinulat upang magtrabaho nang walang mga error sa ESP32. Para sa ESP32 (isang multi core / multi processing SOC) ang paglipat ng gawain ay dapat na hindi paganahin habang binabasa ang data mula sa sensor.

Hakbang 6: Ulat ng Data: ThingSpeak

Upang magkaroon ng isang pare-pareho at makasaysayang ulat ng data, ginamit ko ThingSpeak. Ito ay isang libreng serbisyo sa web na nagpapahintulot sa iyo na mangolekta at mag-imbak ng data ng sensor sa cloud at bumuo ng mga aplikasyon ng IoT. Ang ThingSpeak web service ay nagbibigay ng mga app na nagbibigay-daan sa iyo upang pag-aralan at maisalarawan ang iyong data sa browser o sa anumang smartphone.

Hindi ako magbibigay ng mga tagubilin kung paano magpatala at magsimula ng isang channel sa ThingSpeak, dahil ito ay talagang walang halaga. Ituro lamang ang iyong browser dito:

Hakbang 7: Mga Abiso: IFTTT

Tulad ng Meteorino ay nagtatrabaho 24/7 mula sa lugar nito (na maaaring panloob o panlabas), naisip ko na ito ay maganda na magkaroon ng isang abiso kung may nagkamali. Para sa layuning ito, ginamit ko ang 3 mga serbisyo ng IFTTT webhook upang padalhan ako ng isang email kapag:

  • ang data na nabasa mula sa DHT22 ay hindi wasto;
  • pagpapadala ng data sa ThingSpeak nabigo;
  • mababang antas ng baterya

Isulat ang iyong key IFTTT API sa file na user_config.h at i-customize ang applet na ito sa iyong mga pangangailangan.

Hakbang 8: Schematics

Hakbang 9: Code

Kailangan naming patakbuhin ang aparato, kumonekta sa WiFi AP, basahin ang sensor, ipadala ang data sa ThingSpeak at isara ang NodeMCU. Kaya, ang sketch ay tumatakbo sa bawat oras na pag-setup at hindi kailanman umabot sa loop function.

Upang mabawasan ang oras ng koneksyon sa WiFi, nag-assign ako ng isang static na IP sa Meteorino (iminumungkahi kong huwag gamitin ang DHCP, dahil gagamit ito ng mas maraming lakas ng baterya). Ang flowchart ay lubos na maliwanag: ang koneksyon sa WiFi ay may isang pare-pareho na MAX_RETRY at kung nabigo ito, ang aparato ay nakabukas para sa isang ikot. Sa katapusan ng operasyon, ang NodeMCU ay nagtatakda ng D1 hanggang HIGH upang ma-trigger ang off-cycle ng TPL-5110.

May mga variable na kailangan mong itakda sa user_config.h, upang magkasya sa iyong mga pangangailangan:

  • IP address at mga setting ng LAN;
  • WiFi SSID at password
  • ThingSpeak isulat ang API key at numero ng channel
  • IFTTT API key

Upang matiyak ang pag-trigger ng TPL-5110, inilagay ko ito sa isang habang (1) loop: hindi ito nasaktan, tulad ng kung dalawa o higit pang mga DONE signal ay natanggap sa loob ng agwat ng oras, tanging ang unang DONE signal ay naproseso.

// toggle DONE kaya alam ng TPL na gupitin ang kapangyarihan!

habang (1) {digitalWrite (DONEPIN, HIGH); pagkaantala (1); digitalWrite (DONEPIN, LOW); pagkaantala (1); }

Hakbang 10: Kaso ng Enclosure

Para sa kaso na ginamit ko ang isang bilog na electrical junction box. Madaling buksan at ang lahat ng bagay ay angkop mismo. Ang Meteorino ay maaari ring ilagay sa labas, ngunit huwag ilantad ito upang direktang ulan: ang kahon ay hindi tinatagusan ng tubig ngunit ang DHT22 sensor ay hindi.

Hakbang 11: Gallery ng Imahe