Talaan ng mga Nilalaman:

Ngunit Isa pang Smart Weather Station, Ngunit : 6 Mga Hakbang (na may Mga Larawan)
Ngunit Isa pang Smart Weather Station, Ngunit : 6 Mga Hakbang (na may Mga Larawan)

Video: Ngunit Isa pang Smart Weather Station, Ngunit : 6 Mga Hakbang (na may Mga Larawan)

Video: Ngunit Isa pang Smart Weather Station, Ngunit : 6 Mga Hakbang (na may Mga Larawan)
Video: Russian Encounters with UFOs and Aliens 2024, Hunyo
Anonim
Image
Image
Ngunit Isa pang Smart Weather Station, Ngunit…
Ngunit Isa pang Smart Weather Station, Ngunit…
Ngunit Isa pang Smart Weather Station, Ngunit…
Ngunit Isa pang Smart Weather Station, Ngunit…
Ngunit Isa pang Smart Weather Station, Ngunit…
Ngunit Isa pang Smart Weather Station, Ngunit…

OK, alam ko na maraming mga naturang istasyon ng panahon na magagamit kahit saan, ngunit tumagal ng ilang minuto upang makita ang pagkakaiba …

  • Mababang lakas
  • 2 ipinapakita ang e-papel …
  • ngunit 10 magkakaibang mga screen!
  • Batay sa ESP32
  • mga sensor ng accelerometer at temperatura / kahalumigmigan
  • Pag-update ng Wifi
  • 3D naka-print na kaso

at maraming iba pang mga kapaki-pakinabang na trick …

Ang pangunahing ideya ay upang ipakita ang iba't ibang impormasyon sa parehong pagpapakita depende sa oryentasyon ng kahon. Ang kaso ay nasa hugis ng isang parallelepipedic box, isang paving bato, na may isang uri ng sinturon na nagsisilbing isang paa.

Mga gamit

Tulad ng nakikita mo, ang system ay binubuo ng 2 mga e-paper screen at isang 3D na naka-print na kahon. Ngunit maraming mga bagay dito:

  • Isang ESP32
  • Isang MPU6050 accelerometer
  • Isang sensor ng DHT22
  • Isang baterya ng LiPo
  • Isang PCB upang ikonekta ang buong bagay
  • Mga homemade duPont na thread

at isang koneksyon sa Wi-Fi. Sa katunayan 3 mga network ang idineklara, ang system ay sumusubok sa kanila isa-isa hanggang sa magtagumpay ito sa pagkonekta.

Hakbang 1: Bakit Isa Pang Weather Station?

Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?
Bakit Isa Pang Weather Station?

Ang ideya ay upang ipakita ang iba't ibang mga uri ng impormasyon sa parehong mga screen depende sa oryentasyon ng kahon. Ang kaso ay nasa hugis ng isang parallelepipedic box, isang paving bato, na may isang uri ng sinturon na nagsisilbing isang suporta upang patayoin ito.

Nakita ng accelerometer ang paggalaw at oryentasyon at nagpapalitaw ng mga pagpapakita.

Upang makatipid ng enerhiya, pinili ko ang mga screen ng e-paper (tingnan ang mga sanggunian sa ibaba) na panatilihin ang display kahit na hindi na ito pinapatakbo. Katulad din para sa ESP32, pinili ko ang module na Lolin32 (kilala sa pagiging matipid nito) at kailangan kong malaman kung paano pamahalaan ang malalim na pagtulog, at ang paggising sa nakakagambala na nabuo ng accelerometer.

Ang mga screen ay konektado sa pamamagitan ng SPI, medyo naghanap ako bago hanapin ang tamang mga pin upang ikonekta ang mga ito sa ESP32, alam na kailangan ko rin ng I2C para sa accelerometer, isang pin upang mabasa ang DHT22 at 2 iba pa para sa pagsukat ng boltahe ng baterya. Ang ESP32 ay halos buong singil! Alam na ang ilang mga pin ay read-only (Ginamit ko ang mga para sa sensor ng DHT), ang iba ay hindi maaaring magamit kasama ng Wifi, medyo kumplikado ito upang makahanap ng tamang pagsasaayos.

Maaaring i-orient ang kahon sa 4 na direksyon, kasama ang flat. Lahat sa lahat na gumagawa ng 4 * 2 + 2 = 10 mga posibleng uri ng impormasyon upang maipakita na may 2 mga screen lamang. Pinapayagan ka nitong magpakita ng maraming bagay:

  • Ang petsa, at ang santo ng araw
  • Ang kasalukuyang oras
  • Pagtataya ng panahon ngayon
  • Mga pagtataya ng panahon para sa mga darating na oras
  • Mga pagtataya ng panahon para sa mga darating na araw
  • Ang antas ng singil ng baterya
  • At habang mayroon pa akong silid, isang random na quote mula sa isang dalubhasang website.

Hakbang 2: Ano ang Kailangan Mo?

Ano'ng kailangan mo ?
Ano'ng kailangan mo ?
Ano'ng kailangan mo ?
Ano'ng kailangan mo ?
Ano'ng kailangan mo ?
Ano'ng kailangan mo ?
  • ESP32: Lolin32 module (napakababang lakas, nilagyan ng isang konektor ng baterya, maaaring singilin ang baterya sa pamamagitan ng USB plus)
  • 2 ipinapakita ang epaper: 4.2 pulgada at 2.9 pulgada. Pinili ko ang mga modelo mula sa Good Display store.
  • Sensor ng DHT22
  • MCU6050 accelerometer - sensor ng gyrometer I2C
  • Isang baterya ng LiPo
  • Para sa pagsukat ng boltahe ng baterya: 2 10k resistors, 1 100k resistor, 1 100nF capacitor, 1 MOSFET transistor
  • Panghinang at panghinang, naka-print na circuit board
  • Pag-access sa isang 3D printer para sa kaso

Ipinapakita ng naka-attach na imahe ang posisyon ng lahat ng mga bahagi sa PCB: Kailangan kong makatipid ng puwang upang magkasya sa kaso, na hindi dapat masyadong malaki.

Upang makuha ang data ng panahon, kailangan mo ring magparehistro sa mga API ng panahon at ilagay ang iyong mga susi sa mga tamang lugar sa 'Variables.h' file (tingnan sa ibaba).

Mga website ng panahon:

  • apixu
  • accuweather

Hakbang 3: Ginawa sa Akin ng Proyekto na Magisip Ito at Matuto ng Maraming…

Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…
Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…
Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…
Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…
Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…
Ang Proyekto na Ito ang Pinag-isipan Ko at Natuto ng Maraming…

Ang sistemang ito ay dapat na maging mababang lakas, kaya't hindi mo kailangang singilin ang baterya tuwing gabi … Upang makatipid ng enerhiya, pinili ko ang mga e-papel na screen na panatilihin ang display kahit na hindi na sila pinapatakbo. Katulad din para sa ESP32, pinili ko ang module na Lolin32 (kilala sa pagiging matipid nito) at kailangan kong malaman kung paano pamahalaan ang malalim na pagtulog, at ang paggising na tawag sa pagkagambala na nabuo ng accelerometer.

Ang kahon ay maaaring oriented sa 4 na direksyon, mas flat. Lahat sa lahat na gumagawa ng 4 * 2 + 2 = 10 mga posibleng uri ng impormasyon upang maipakita. Pinapayagan ka nitong gumawa ng maraming bagay: ang petsa, at ang santo ng araw, ang oras, taya ng panahon ngayon, mga pagtataya ng panahon para sa mga darating na oras o araw, ang antas ng singil ng baterya at isang random na quote mula sa isang dalubhasang website.

Marami itong hahanapin sa Internet, at tulad ng alam mo: Ang WiFi ay ang kaaway ng pag-save ng enerhiya …

Kaya kailangan naming pamahalaan ang koneksyon, upang maipakita ang napapanahong impormasyon ngunit hindi gumugol ng sobrang oras sa pagkonekta. Isa pang medyo kumplikadong problema: pagpapanatili ng isang medyo tumpak na oras. Hindi ko kailangan ng RTC dahil mahahanap ko ang oras sa internet, ngunit ang panloob na orasan ng ESP32 ay medyo naaanod, lalo na sa mga panahon ng pagtulog. Kailangan kong maghanap ng isang paraan upang manatiling sapat na tumpak, habang naghihintay na i-reset ang orasan sa pamamagitan ng internet. Isinusulit ko ulit ito sa internet bawat oras.

Kaya't may isang trade-off sa pagitan ng awtonomiya (ang dalas ng mga koneksyon sa Internet) at ang kawastuhan ng ipinakitang impormasyon.

Ang isa pang problemang malulutas ay ang memorya. Kapag ang ESP32 ay mahimbing na natutulog, nawala ang memorya, maliban sa tinatawag na RTC RAM. Ang memorya na ito ay 4MB ang lapad, kung saan 2 lamang ang maaaring magamit para sa programa. Sa memorya na ito, dapat kong iimbak ang iba't ibang mga variable ng programa na dapat itago mula sa isang pagpapatupad hanggang sa susunod, pagkatapos ng yugto ng pagtulog: mga pagtataya ng panahon, oras at petsa, mga pangalan ng file ng icon, mga quote, atbp. Kailangan kong malaman upang harapin ito.

Nagsasalita ng mga icon, naka-imbak ang mga ito sa SPIFFS, ang system ng file na ESP32. Kasunod ng pagsasara ng libreng Wunderground weather API, kinailangan kong maghanap para sa iba pang mga libreng tagahatag ng data ng panahon. Pinili ko ang dalawa: isa para sa panahon ng kasalukuyang araw, na may 12 oras na pagtataya, at isa pa para sa mga multi-day na pagtataya. Ang mga icon ay hindi pareho, kaya't nagdulot ito sa akin ng dalawang bagong problema:

  • Pumili ng isang hanay ng icon
  • Itugma ang mga icon na ito sa mga code ng pagtataya ng 2 mga site

Ang sulat na ito ay naimbak din sa RTC RAM upang hindi ito mai-reload sa bawat oras.

Huling problema sa mga icon. Imposibleng iimbak ang lahat sa mga ito sa SPIFFS. Ang puwang ay masyadong maliit para sa lahat ng aking mga file. Kinakailangan na gawin ang compression ng imahe. Sumulat ako ng isang iskrip sa Python na binabasa ang aking mga file ng icon at pinipiga ang mga ito sa RLE, at pagkatapos ay iimbak ang mga naka-compress na file sa SPIFFS. Doon ay gaganapin ito.

Ngunit ang e-paper display library ay kumukuha lamang ng mga file na uri ng BMP, hindi nai-compress na mga imahe. Kaya't kailangan kong magsulat ng isang karagdagang pag-andar upang maipakita ang aking mga icon mula sa mga naka-compress na file.

Ang data na nabasa sa internet ay madalas na nasa json format: data ng panahon, Santo ng araw. Ginagamit ko ang (mahusay) arduinoJson library para dito. Ngunit ang mga quote ay hindi ganoon. Kinukuha ko sila mula sa isang nakalaang site, kaya kailangan kong basahin ang mga ito sa pamamagitan ng direktang pagtingin sa nilalaman ng web page. Kailangan kong magsulat ng isang tukoy na code para doon. Araw-araw, bandang hatinggabi, ang programa ay pumupunta sa site na ito at nagbabasa ng sampung mga random na quote, at iniimbak ang mga ito sa RTC RAM. Ang isa ay ipinapakita nang sapalaran sa kanila kapag ang pabahay ay nakatuon sa malaking screen paitaas.

Ipinapasa ko sa iyo ang problema ng pagpapakita ng mga accent na character (paumanhin, ngunit ang mga quote ay nasa Pranses) ….

Kapag ang maliit na screen ay nakabukas, ang boltahe ng baterya ay ipinakita, na may isang guhit upang mas mahusay na makita ang natitirang antas. Kinakailangan na gumawa ng isang elektronikong pagpupulong upang mabasa ang boltahe ng baterya. Tulad ng pagsukat ay hindi dapat maalis ang baterya, gumamit ako ng isang diagram na matatagpuan sa internet, na gumagamit ng isang MOSFET transistor bilang isang switch upang ubusin lamang ang kasalukuyang kapag ang pagsukat ay nagawa.

Upang magawa ang circuit na ito at magkasya ang lahat sa kahon, na nais ko ang pinakamaliit na posible, kailangan kong gumawa ng PCB upang ikonekta ang lahat ng mga bahagi ng system. Ito ang aking unang PCB. Napalad ako sapagkat ang lahat ay gumana nang maayos sa unang pagkakataon sa panig na ito …

Tingnan ang mapa ng pagtatanim: ang "ipinagbabawal na zone" ay isang lugar na nakalaan para sa pagkonekta sa USB cable. Pinapayagan ka ng module ng Lolin32 na muling magkarga ng baterya sa pamamagitan ng USB: ang baterya ay sisingilin kung ang USB cable ay konektado, at gumagana ang module nang sabay.

Huling punto: ang mga font. Sa iba't ibang laki, naka-bold o hindi, kinailangan nilang likhain at maiimbak. Pinangangalagaan iyon ng mabuti ng Adafruit GFX library, sa sandaling na-install mo ang mga file ng font sa tamang direktoryo. Upang likhain ang mga file, ginamit ko ang site ng Font Converter, napaka-maginhawa!

Tiyaking pipiliin mo:

  • Ipakita ang preview: TFT 2.4"
  • Bersyon ng library: Adafruit GFX Font

Kaya upang buod: isang malaking proyekto, na pinapayagan akong malaman ang maraming mga bagay

Hakbang 4: Paggamit ng Mga Ipinapakita na E-papel

Paggamit ng E-paper Ipinapakita
Paggamit ng E-paper Ipinapakita

Ang pangunahing kawalan ng mga screen na ito ay malinaw na nakikita sa video: ang pag-update ng display ay tumatagal ng isa o dalawang segundo at ginagawa sa pamamagitan ng pag-flashing (alternatibong pagpapakita ng normal at baligtad na mga bersyon ng dalawang mga screen). Ito ay katanggap-tanggap para sa impormasyon ng panahon dahil hindi ko ito madalas i-update (bawat oras maliban sa isang pagbabago ng oryentasyon ng kahon). Ngunit hindi para sa oras. Iyon ang dahilan kung bakit (at upang limitahan ang pagkonsumo) Ginagamit ko pa rin ang display ng HH: MM (hindi sa mga segundo).

Kaya't kailangan kong maghanap ng ibang paraan upang ma-update ang display. Ang mga screen na ito (ilan sa mga ito) ay sumusuporta sa isang bahagyang pag-update (inilapat alinman sa isang lugar ng screen, o sa buong screen …) ngunit hindi ito maganda para sa akin dahil ang aking malaking screen (na nagpapakita ng oras) ay nagpapanatili ng mga multo ng mga pixel napalitan yan Halimbawa, kapag dumadaan mula 10:12 hanggang 10:13, ang '2' ay medyo nakikita sa loob ng '3', at lalo itong nakikita pagkatapos ng '4', ang '5', atbp. Nais kong upang ipahiwatig na ito ang kaso para sa aking screen: tinalakay ko ito sa may-akda ng e-paper display library na GxEPD2 na nagsabi sa akin na hindi niya sinusunod ang hindi pangkaraniwang bagay na ito sa kanyang sariling mga screen. Sinubukan naming baguhin ang mga parameter nang hindi nagtagumpay sa mga multo sa pangangaso.

Kaya kailangan naming maghanap ng isa pang solusyon: Nagmungkahi ako na gumawa ng isang bahagyang dobleng pag-refresh, na malulutas ang problema (hindi bababa sa kasiya-siya ito para sa akin). Ang mga oras ay naipasa nang walang pag-flash ng screen at walang mga multo. Gayunpaman, ang agahan ay hindi kaagad: tumatagal ng kaunti pa sa isang segundo upang mabago ang oras.

Hakbang 5: Ginagawa Ito

Ginagawa Ito
Ginagawa Ito
Ginagawa Ito
Ginagawa Ito
Ginagawa Ito
Ginagawa Ito
Ginagawa Ito
Ginagawa Ito

Upang matiyak na walang gumagalaw sa loob kapag nagbago ang oryentasyon, ang iba't ibang mga bahagi (ipinapakita, mga elektronikong modyul, PCB, baterya) ay nakadikit sa isang pandikit na baril. Upang i-ruta ang mga wire sa ilalim ng PCB, na-install ko ito sa mga binti na gawa sa mga spacer, pareho din ito sa baterya.

Sa madaling panahon ay mag-i-install ako ng isang panlabas na konektor ng USB mikropono upang hindi ko buksan ang kaso upang muling magkarga ng baterya.

Siguro magiging interesado din ako sa pag-update ng OTA upang maperpekto ang lahat ….

Hakbang 6: Ang Code at ang Mga File

Image
Image

Mayroong tatlong mga file ng archive:

  • Weather station.zip: ang Arduino code, upang mai-upload gamit ang Arduino IDE
  • Boite ecran.zip: ang mga file ng CAD at 3D printer para sa kaso
  • data.zip: ang mga file na mai-upload sa SPIFFS ng ESP32.

Kung hindi mo alam kung paano mag-upload ng mga file sa SPIFFS ng ESP32, basahin lamang ang tutorial na ito, na nagpapakita ng isang napaka-kapaki-pakinabang na plugin at kung paano ito gamitin sa Arduino IDE.

Ang malalim na programa sa pagtulog ay naiiba mula sa pamantayan ng pagprograma ng isang Arduino. Para sa ESP32, nangangahulugan ito na ang ESP32 ay gumising at isagawa ang pag-set up, pagkatapos ay matulog. Kaya, ang pagpapaandar ng loop ay walang laman, at hindi kailanman naisakatuparan.

Ang ilang yugto ng pagsisimula ay dapat na pagpapatakbo nang isang beses lamang sa unang pagpapatupad (tulad ng pagkuha ng oras, data ng panahon, mga quote, atbp), kaya kailangang malaman ng ESP32 kung ang kasalukuyang paggising ay ang una o hindi: para doon, ang solusyon ay upang mag-imbak ng isang variable sa RTC RAM (na mananatiling aktibo kahit na sa panahon ng malalim na mga yugto ng pagtulog) na kung saan ay nadagdagan sa bawat paggising. Kung ito ay katumbas ng 1 pagkatapos ito ang unang pagpapatupad at ang ESP32 ay nagpapatakbo ng yugto ng pagsisimula, kung hindi man ang yugto na ito ay nalaktawan.

Upang gisingin ang ESP32, maraming mga posibilidad:

  • Paggising ng timer: kinakalkula ng code ang tagal ng mahimbing na pagtulog bago matulog. Ginagamit ito upang mai-update ang oras (bawat 1, 2, 3, o 5 minuto) o ang data ng panahon (bawat 3 o 4 na oras) ng mga quote at santo ng araw (tuwing 24 na oras)
  • Makagambala sa paggising: ang accelerometer ay nagpapadala ng isang senyas na ginagamit upang gisingin ang ESP32 up. Ginagamit ito upang makita ang isang pagbabago sa oryentasyon at i-update ang mga ipinapakita
  • Pagising ng touch sensor: ang ESP32 ay nilagyan ng maraming mga pin na gumaganap bilang mga touch sensor, ngunit hindi ito maaaring gamitin sa timer paggising, kaya hindi ko ito ginamit.

Mayroong iba pang mga trick sa programa sa ibang lugar sa code, upang mapanatili ang tumpak na oras habang nagse-save ng enerhiya (ie hindi ikonekta ang NTP server bawat minuto), upang alisin ang mga accent na hindi suportado ng Adafruit GFX library, upang maiwasan ang pag-update ng isang display kung hindi kinakailangan, upang maitakda ang mga parameter ng accelerometer lalo na para sa nakakagambala na paggising, tumpak na kalkulahin ang oras upang matulog sa oras ng paggising ng timer, iwasang gamitin ang Serial console kung hindi nakakonekta sa IDE (upang makatipid muli ng enerhiya), idiskonekta ang wifi kapag hindi kinakailangan, atbp… at ang code ay puno ng mga komento na makakatulong na maunawaan ang mga pagpapaandar.

Salamat sa pagbabasa ng Instructable na ito (ang aking pinakauna). Umaasa ako na magugustuhan mo ito at mag-enjoy sa paggawa ng istasyong ito ng panahon

Paligsahan sa Mga Sensor
Paligsahan sa Mga Sensor

Runner Up sa Paligsahan sa Mga Sensor

Inirerekumendang: