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, Jun
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 senzori temperature / vlažnosti
  • Wifi ažuriranje
  • 3D štampano kućište

i mnogo drugih korisnih trikova …

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

Supplies

Kao što vidite, sistem se sastoji od 2 ekrana za e-papir i 3D štampane kutije. Ali u tome ima mnogo 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, sistem 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 ekrana ovisno o orijentaciji okvira. Kućište je u obliku paralelepipedske kutije, kamena za popločavanje, sa 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 za e-papir (pogledajte reference ispod) koji zadržavaju zaslon čak i ako se više ne napajaju. Slično za ESP32, izabrao sam Lolin32 modul (poznat po svojoj štedljivosti) i morao sam naučiti kako upravljati dubokim snom i buđenjem na prekid koji generiše 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čitavanje DHT22 i još 2 za mjerenje napona baterije. ESP32 je skoro 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 ekrana. Dakle, omogućava vam da prikažete mnogo stvari:

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

Korak 2: Šta vam treba?

Šta ti treba ?
Šta ti treba ?
Šta ti treba ?
Šta ti treba ?
Šta ti treba ?
Šta ti 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.
  • DHT22 senzor
  • MCU6050 akcelerometar - žirometar I2C senzor
  • LiPo baterija
  • Za mjerenje napona baterije: 2 otpornika od 10 k, 1 otpornik od 100 k, 1 kondenzator od 100 nF, 1 MOSFET tranzistor
  • Lemljenje i lemilica, štampana ploča
  • Pristup 3D štampač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 postaviti ključeve na ispravna mjesta u datoteci 'Variables.h' (vidi dolje).

Vremenske web stranice:

  • apixu
  • accuweather

Korak 3: Ovaj projekat me natjerao da razmišljam i naučim mnogo…

Ovaj projekat me natjerao da razmišljam i naučim mnogo…
Ovaj projekat me natjerao da razmišljam i naučim mnogo…
Ovaj projekat me natjerao da razmišljam i naučim mnogo…
Ovaj projekat me natjerao da razmišljam i naučim mnogo…
Ovaj projekat me natjerao da razmišljam i naučim mnogo…
Ovaj projekat me natjerao da razmišljam i naučim mnogo…

Ovaj sistem je 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 ekran čak i ako se više ne napajaju. Slično za ESP32, izabrao sam modul Lolin32 (poznat po svojoj štedljivosti) i morao sam naučiti kako 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 da radite mnogo stvari: datum i svetitelja dana, vrijeme, današnju vremensku prognozu, vremensku prognozu 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: održavanje prilično tačnog vremena. Ne treba mi RTC jer mogu pronaći vrijeme na internetu, ali unutrašnji sat ESP32 prilično se pomakne, posebno tokom perioda spavanja. Morao sam pronaći način da ostanem dovoljno precizan, dok sam čekao da resetiram sat putem interneta. Ponovo ga sinkroniziram na internetu svaki sat.

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

Još jedan problem koji treba riješiti je memorija. Kada 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 ovu 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 naučiti nositi se s tim.

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

  • Odaberite skup ikona
  • Uskladite ove ikone sa kodovima prognoze za 2 lokacije

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

Zadnji problem sa 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 moje datoteke ikona i komprimira ih u RLE, a zatim komprimirane datoteke pohranjuje u SPIFFS. Tamo se održalo.

Ali biblioteka za prikaz e-papira prima samo datoteke tipa BMP, a ne komprimirane slike. Zato sam morao napisati dodatnu funkciju da 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) biblioteku arduinoJson. Ali citati nisu takvi. Preuzimam ih s namjenske web stranice, pa ih moram pročitati gledajući direktno 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 orijentirano velikim ekranom prema gore.

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

Kada je mali ekran podignut, prikazuje se napon baterije, sa crtežom kako biste bolje vidjeli preostali nivo. Bilo je potrebno napraviti elektronski 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 kada se izvrši mjerenje.

Da bih mogao napraviti ovo kolo i uklopiti sve u kutiju, što sam htio što je moguće manje, morao sam napraviti PCB za povezivanje svih komponenti sistema. Ovo je moj prvi PCB. Imao sam sreću jer je prvi put na ovoj strani sve dobro funkcioniralo …

Pogledajte kartu implantacije: "zabranjena zona" je područje rezervirano za povezivanje USB kabela. Lolin32 modul vam omogućava da napunite bateriju putem USB -a: baterija se puni ako je USB kabel priključen, a modul radi istovremeno.

Zadnja tačka: fontovi. Različitih veličina, podebljanih ili ne, morali su biti stvoreni i pohranjeni. Biblioteka Adafruit GFX o tome se vrlo dobro brine, nakon što instalirate datoteke fontova u pravi direktorij. Za kreiranje datoteka koristio sam web mjesto Font Converter, vrlo zgodno!

Obavezno odaberite:

  • Ekran za pregled: TFT 2.4"
  • Biblioteka: Adafruit GFX font

Da rezimiram: veliki projekat koji mi je omogućio da naučim mnogo stvari

Korak 4: Upotreba ekrana za e-papir

Korišćenje ekrana za e-papir
Korišćenje ekrana za e-papir

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

Zato sam morao potražiti drugi način za ažuriranje ekrana. Ovi ekrani (neki od njih) podržavaju djelomično ažuriranje (primijenjeno ili na dio ekrana ili na cijeli ekran …), ali to nije bilo dobro za mene jer moj veliki ekran (koji prikazuje vrijeme) čuva duhove piksela koji se zamenjuju. Na primjer, pri prelasku s 10:12 na 10:13, '2' je malo vidljivo unutar '3', a postaje još vidljivije nakon '4', '5' itd. 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 ekran ne treperi i nema duhova. Međutim, promjena nije trenutna: potrebno je malo više od jedne sekunde da se promijeni vrijeme.

Korak 5: Učinite to

Making It
Making It
Making It
Making It
Making It
Making It
Making It
Making It

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

Uskoro ću instalirati konektor za vanjski USB mikrofon tako da neću morati otvarati kućište da bih napunio bateriju.

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 štampač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 podešavanje, a zatim ide 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 dobijanje vremena, vremenski podaci, citati itd.), Tako da ESP32 mora znati je li trenutno buđenje prvo ili ne: za to je potrebno rješenje je spremanje varijable u RTC RAM (koja ostaje aktivna čak i tokom dubokog sna) koja se povećava pri svakom buđenju. Ako je jednako 1, onda 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 (svakih 1, 2, 3 ili 5 minuta) ili vremenskih podataka (svaka 3 ili 4 sata) citata i sveca dana (svaka 24 sata)
  • Prekid buđenja: akcelerometar šalje signal koji se koristi za buđenje ESP32. Ovo se koristi za otkrivanje promjene orijentacije i ažuriranje prikaza
  • Buđenje senzora na dodir: ESP32 je opremljen s nekoliko pinova koji djeluju kao senzori dodira, ali oni se ne mogu koristiti s buđenjem pomoću timera, pa ovo nisam koristio.

Postoje i drugi programski trikovi na drugim mjestima u kodu, kako bi vrijeme bilo točno uz uštedu energije (tj. Ne povezivali NTP server svake minute), uklonili naglaske koje ne podržava Adafruit GFX biblioteka, kako biste izbjegli ažuriranje prikaza ako nije potrebno, postaviti parametre akcelerometra posebno za buđenje sa prekidom, precizno izračunati vrijeme za spavanje u slučaju buđenja pomoću mjerača vremena, izbjegavati korištenje serijske konzole ako nije spojeno na IDE (radi uštede energije), isključite 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 stvaranju ove vremenske stanice

Takmičenje senzora
Takmičenje senzora

Drugoplasirani na takmičenju senzora

Preporučuje se: