Sadržaj:

Još jedna pametna meteorološka stanica, ali : 6 koraka (sa slikama)
Još jedna pametna meteorološka stanica, ali : 6 koraka (sa slikama)

Video: Još jedna pametna meteorološka stanica, ali : 6 koraka (sa slikama)

Video: Još jedna pametna meteorološka stanica, ali : 6 koraka (sa slikama)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Lipanj
Anonim
Image
Image
Još jedna pametna meteorološka stanica, ali …
Još jedna pametna meteorološka stanica, ali …
Još jedna pametna meteorološka stanica, ali …
Još jedna pametna meteorološka stanica, ali …
Još jedna pametna meteorološka stanica, ali …
Još jedna pametna meteorološka stanica, ali …

U redu, znam da je toliko takvih meteoroloških stanica dostupno posvuda, ali odvojite nekoliko minuta da vidite razliku…

  • Mala snaga
  • 2 ekrana e-papira …
  • ali 10 različitih ekrana!
  • Na bazi ESP32
  • akcelerometar i osjetnici temperature / vlage
  • Wifi ažuriranje
  • 3D tiskana futrola

i puno drugih korisnih trikova …

Glavna ideja je prikazati različite informacije na oba zaslona ovisno o orijentaciji okvira. Kućište je u obliku paralelepipedske kutije, kamena za popločavanje, s svojevrsnim pojasom koji služi kao stopalo.

Pribor

Kao što vidite, sustav se sastoji od 2 ekrana e-papira i 3D tiskane kutije. Ali u tome ima puno stvari:

  • ESP32
  • Jedan MPU6050 akcelerometar
  • Senzor DHT22
  • LiPo baterija
  • PCB za povezivanje cijele stvari
  • Domaći duPont niti

i Wi-Fi vezu. Zapravo su deklarirane 3 mreže, sustav ih testira jednu po jednu dok se ne uspije povezati.

Korak 1: Zašto još jedna meteorološka stanica?

Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?
Zašto još jedna meteorološka stanica?

Ideja je prikazati različite vrste informacija na oba zaslona ovisno o orijentaciji okvira. Kućište je u obliku paralelepipedske kutije, kamena za popločavanje, s svojevrsnim pojasom koji služi kao oslonac da stoji.

Akcelerometar detektira kretanje i orijentaciju te pokreće zaslone.

Kako bih uštedio energiju, odabrao sam zaslone e-papira (pogledajte donje reference) koji zadržavaju zaslon čak i ako se više ne napajaju. Slično za ESP32, odabrao sam modul Lolin32 (poznat po svojoj štedljivosti) i morao sam naučiti upravljati dubokim snom i buđenjem na prekid koji generira mjerač ubrzanja.

Zasloni su spojeni putem SPI -ja, prilično sam pretraživao prije nego što sam pronašao odgovarajuće pinove za njihovo spajanje na ESP32, znajući da mi je potreban i I2C za akcelerometar, pin za očitanje DHT22 i 2 druga za mjerenje napona baterije. ESP32 je gotovo potpuno napunjen! Znajući da su neki pinovi samo za čitanje (ja sam ih koristio za DHT senzor), drugi se ne mogu koristiti zajedno s Wifi-jem, bilo je malo komplicirano pronaći pravu konfiguraciju.

Kutija može biti orijentirana u 4 smjera, plus ravna. Sve u svemu čini 4*2+2 = 10 mogućih vrsta informacija za prikaz sa samo 2 zaslona. Dakle, omogućuje vam prikaz mnogih stvari:

  • Datum i svetac dana
  • Trenutno vrijeme
  • Današnja vremenska prognoza
  • Vremenska prognoza za naredne sate
  • Vremenska prognoza za naredne dane
  • Razina napunjenosti baterije
  • A kako sam još imao mjesta, nasumični citat sa specijalizirane web stranice.

Korak 2: Što vam treba?

Što trebaš ?
Što trebaš ?
Što trebaš ?
Što trebaš ?
Što trebaš ?
Što trebaš ?
  • ESP32: Lolin32 modul (vrlo male snage, opremljen priključkom za bateriju, može puniti bateriju putem USB -a plus)
  • 2 ekrana za papir: 4,2 inča i 2,9 inča. Odabrao sam modele iz Good Display trgovine.
  • Senzor DHT22
  • Akcelerometar MCU6050 - žirometar I2C senzor
  • LiPo baterija
  • Za mjerenje napona baterije: 2 10 k otpornika, 1 100 k otpornika, 1 kondenzator od 100 nF, 1 MOSFET tranzistor
  • Lemilo i lemilica, tiskana ploča
  • Pristup 3D pisaču za kućište

Na priloženoj slici prikazan je položaj svih komponenti na PCB -u: morao sam uštedjeti prostor da stane u kućište, koje ne bi trebalo biti preveliko.

Da biste dobili vremenske podatke, također se morate registrirati na vremenskim API -jima i staviti ključeve na ispravna mjesta u datoteci 'Variables.h' (vidi dolje).

Vremenske web stranice:

  • apixu
  • pribrati

Korak 3: Ovaj me projekt natjerao da puno razmišljam i naučim …

Ovaj projekt me natjerao da puno razmišljam i naučim…
Ovaj projekt me natjerao da puno razmišljam i naučim…
Ovaj projekt me natjerao da puno razmišljam i naučim…
Ovaj projekt me natjerao da puno razmišljam i naučim…
Ovaj me projekt natjerao da puno razmišljam i naučim…
Ovaj me projekt natjerao da puno razmišljam i naučim…

Ovaj je sustav trebao biti niske potrošnje energije, tako da ne morate puniti bateriju svake noći … Radi uštede energije, odabrao sam zaslone e-papira koji zadržavaju zaslon čak i ako se više ne napajaju. Slično za ESP32, odabrao sam modul Lolin32 (poznat po svojoj štedljivosti) i morao sam naučiti upravljati dubokim snom i pozivom za buđenje pri prekidu koji generira mjerač ubrzanja.

Kutija može biti orijentirana u 4 smjera, ravnija. Sve u svemu čini 4*2+2 = 10 mogućih vrsta informacija za prikaz. Dakle, omogućuje vam mnogo toga: datum, svetac dana, vrijeme, današnja vremenska prognoza, vremenska prognoza za naredne sate ili dane, razinu napunjenosti baterije i nasumični citat sa specijalizirane web stranice.

Na internetu je mnogo toga za tražiti, a kao što znate: WiFi je neprijatelj uštede energije …

Stoga moramo upravljati vezom kako bismo prikazali ažurirane informacije, ali bez trošenja previše vremena na povezivanje. Još jedan prilično složen problem: zadržati prilično točno vrijeme. Ne treba mi RTC jer mogu pronaći vrijeme na internetu, ali unutarnji sat ESP32 prilično se pomakne, posebno tijekom perioda spavanja. Morao sam pronaći način da ostanem dovoljno precizan, dok sam čekao da resetiram sat putem interneta. Svaki sat ga ponovno sinkroniziram na internetu.

Dakle, postoji kompromis između autonomije (učestalosti internetskih veza) i točnosti prikazanih informacija.

Drugi problem koji treba riješiti je memorija. Kad je ESP32 u dubokom snu, memorija se gubi, osim onoga što se naziva RTC RAM. Ova memorija je široka 4 MB, od čega se samo 2 mogu koristiti za program. U tu memoriju moram pohraniti različite programske varijable koje se moraju čuvati od jedne izvedbe do sljedeće, nakon faze mirovanja: vremenske prognoze, vrijeme i datum, nazivi datoteka sa ikonama, citati itd. Morao sam se s tim nositi.

Kad smo već kod ikona, one su pohranjene u SPIFFS, datotečnom sustavu ESP32. Nakon zatvaranja besplatnog vremenskog API -ja za Wunderground morao sam potražiti druge besplatne pružatelje vremenskih podataka. Odabrao sam dvije: jednu za vremensku prognozu za današnji dan, s 12-satnom prognozom, a drugu za višednevne prognoze. Ikone nisu iste pa su mi uzrokovale dva nova problema:

  • Odaberite skup ikona
  • Uskladite ove ikone s kodovima predviđanja za 2 web mjesta

Ova je korespondencija također pohranjena u RTC RAM -u tako da se ne mora svaki put ponovno učitavati.

Posljednji problem s ikonama. Nemoguće ih je pohraniti u SPIFFS. Prostor je premali za sve moje datoteke. Bilo je potrebno napraviti kompresiju slike. Napisao sam skriptu u Pythonu koja čita datoteke mojih ikona i komprimira ih u RLE, a zatim komprimirane datoteke pohranjuje u SPIFFS. Tu se održalo.

No, knjižnica za prikaz e-papira prima samo datoteke tipa BMP, a ne komprimirane slike. Stoga sam morao napisati dodatnu funkciju kako bih mogao prikazati svoje ikone iz ovih komprimiranih datoteka.

Podaci koji se čitaju na internetu često su u json formatu: vremenski podaci, Svetac dana. Za to koristim (sjajnu) knjižnicu arduinoJson. No citati nisu takvi. Preuzimam ih s namjenskog web mjesta, pa ih moram pročitati gledajući izravno u sadržaj web stranice. Morao sam napisati poseban kod za to. Svaki dan, oko ponoći, program odlazi na ovu stranicu i čita oko deset nasumičnih citata te ih pohranjuje u RTC RAM. Jedan se prikazuje nasumično među njima kada je kućište okrenuto velikim zaslonom prema gore.

Donosim vam problem prikaza naglašenih znakova (oprostite, ali citati su na francuskom)….

Kad se mali zaslon podigne, prikazuje se napon baterije, s crtežom kako bi se bolje vidio preostali nivo. Bilo je potrebno napraviti elektronički sklop za očitavanje napona baterije. Kako mjerenje ne bi trebalo isprazniti bateriju, upotrijebio sam dijagram pronađen na internetu, koji koristi MOSFET tranzistor kao prekidač kako bi potrošio struju samo kad se izvrši mjerenje.

Da bih mogao napraviti ovo kolo i sve smjestiti u kutiju, što sam želio što je moguće manje, morao sam izraditi PCB za povezivanje svih komponenti sustava. Ovo je moj prvi PCB. Imao sam sreću jer je s ove strane prvi put sve dobro funkcioniralo …

Pogledajte kartu implantacije: "zabranjena zona" područje je rezervirano za spajanje USB kabela. Modul Lolin32 omogućuje vam punjenje baterije putem USB -a: baterija se puni ako je priključen USB kabel, a modul radi istovremeno.

Zadnja točka: fontovi. Različitih veličina, podebljano ili ne, morali su biti stvoreni i pohranjeni. Knjižnica Adafruit GFX o tome se jako dobro brine, nakon što instalirate datoteke fontova u pravi direktorij. Za izradu datoteka koristio sam web mjesto Font Converter, vrlo povoljno!

Provjerite jeste li odabrali:

  • Zaslon za pregled: TFT 2.4"
  • Verzija knjižnice: Adafruit GFX font

Dakle da rezimiram: veliki projekt, koji mi je omogućio da naučim mnogo stvari

Korak 4: Korištenje zaslona za e-papir

Korištenje zaslona za e-papir
Korištenje zaslona za e-papir

Glavni nedostatak ovih zaslona jasno je vidljiv na videu: ažuriranje zaslona traje jednu ili dvije sekunde i vrši se bljeskanjem (alternativni prikaz normalne i obrnute verzije dva zaslona). To je prihvatljivo za vremenske podatke jer ih ne ažuriram često (svakih sat vremena, osim promjene orijentacije okvira). Ali ne za vrijeme. Zato (i da ograničim potrošnju) i dalje koristim zaslon HH: MM (ne sekunde).

Stoga sam morao potražiti drugi način za ažuriranje zaslona. Ovi zasloni (neki od njih) podržavaju djelomično ažuriranje (primijenjeno bilo na dio zaslona, bilo na cijeli zaslon …), ali meni to nije bilo dobro jer moj veliki zaslon (koji prikazuje vrijeme) čuva duhove piksela koji se zamjenjuju. Na primjer, pri prelasku s 10:12 na 10:13, '2' je malo vidljivo unutar '3', a postaje još vidljivije nakon '4', '5' itd. Želio bih da istaknem da je to slučaj s mojim ekranom: razgovarao sam o tome s autorom biblioteke za prikaz e-papira GxEPD2 koji mi je rekao da ovaj fenomen nije promatrao vlastitim ekranima. Pokušali smo promijeniti parametre bez uspjeha u lovu na duhove.

Pa smo morali pronaći drugo rješenje: predložio sam djelomično dvostruko osvježenje, što je riješilo problem (barem je to za mene zadovoljavajuće). Sati prolaze a da zaslon ne treperi i nema duhova. Međutim, promjena nije trenutna: potrebno je malo više od jedne sekunde za promjenu vremena.

Korak 5: Učinite to

Izrada
Izrada
Izrada
Izrada
Izrada
Izrada
Izrada
Izrada

Kako bi se osiguralo da se ništa ne pomiče unutra kad se promijeni orijentacija, različite komponente (zasloni, elektronički moduli, PCB -i, baterije) zalijepljene su pištoljem za ljepilo. Da bih žice usmjerio ispod PCB -a, instalirao sam ga na noge izrađene odstojnicima, isto vrijedi i za bateriju.

Uskoro ću instalirati vanjski USB priključak za mikrofon tako da neću morati otvarati kućište za ponovno punjenje baterije.

Možda ću i ja biti zainteresiran za ažuriranje od strane OTA -e kako bih sve usavršio….

Korak 6: Kôd i datoteke

Image
Image

Dostupne su tri arhive:

  • Weather station.zip: Arduino kôd za učitavanje pomoću Arduino IDE -a
  • Boite ecran.zip: datoteke CAD i 3D pisača za kućište
  • data.zip: datoteke za učitavanje u SPIFFS ESP32.

Ako ne znate kako učitati datoteke u SPIFFS ESP32, samo pročitajte ovaj vodič koji predstavlja vrlo koristan dodatak i kako ga koristiti u Arduino IDE -u.

Programiranje dubokog sna prilično se razlikuje od standardnog programiranja Arduina. Za ESP32 to znači da se ESP32 budi i izvršava postavljanje, a zatim odlazi u san. Dakle, funkcija petlje je prazna i nikada se ne izvršava.

Neka faza inicijalizacije mora se pokrenuti samo jednom pri prvom izvođenju (kao što je dobivanje vremena, vremenski podaci, citati itd.), Pa ESP32 mora znati je li trenutno buđenje prvo ili ne: za to rješenje je pohraniti varijablu u RTC RAM (koja ostaje aktivna čak i tijekom faza dubokog sna) koja se povećava pri svakom buđenju. Ako je jednako 1, tada je to prvo izvršavanje, a ESP32 pokreće fazu inicijalizacije, inače se ova faza preskače.

Da biste probudili ESP32, postoji nekoliko mogućnosti:

  • Buđenje pomoću mjerača vremena: kod izračunava trajanje dubokog sna prije odlaska na spavanje. Ovo se koristi za ažuriranje vremena (svaka 1, 2, 3 ili 5 minuta) ili vremenskih podataka (svaka 3 ili 4 sata) citata i sveca dana (svaka 24 sata)
  • Prekid buđenja: mjerač ubrzanja šalje signal koji se koristi za buđenje ESP32. Ovo se koristi za otkrivanje promjene orijentacije i ažuriranje prikaza
  • Buđenje osjetnika na dodir: ESP32 je opremljen s nekoliko pinova koji djeluju kao senzori dodira, no oni se ne mogu koristiti s buđenjem pomoću timera, pa ovo nisam koristio.

Postoje i drugi programski trikovi na drugom mjestu u kodu, kako bi vrijeme bilo točno i uštedjelo energiju (tj. Ne povezivali NTP poslužitelj svake minute), uklonili naglaske koje ne podržava Adafruit GFX knjižnica, kako biste izbjegli ažuriranje zaslona ako nije potrebno, postaviti parametre akcelerometra posebno za buđenje s prekidom, točno izračunati vrijeme za spavanje u slučaju buđenja timera, izbjegavati korištenje serijske konzole ako nije spojeno na IDE (radi ponovne uštede energije), odspojite wifi kada nije potreban, itd … i kôd je pun komentara koji pomažu u razumijevanju funkcija.

Hvala vam što ste pročitali ovaj Instructable (moj prvi). Nadam se da će vam se svidjeti i da ćete uživati u izradi ove vremenske postaje

Natječaj senzora
Natječaj senzora

Drugoplasirani na natjecanju senzora

Preporučeni: