Satura rādītājs:

Vēl viena gudra laika stacija, bet : 6 soļi (ar attēliem)
Vēl viena gudra laika stacija, bet : 6 soļi (ar attēliem)

Video: Vēl viena gudra laika stacija, bet : 6 soļi (ar attēliem)

Video: Vēl viena gudra laika stacija, bet : 6 soļi (ar attēliem)
Video: Joka pēc alfabēts / Funny Alphabet 2024, Novembris
Anonim
Image
Image
Vēl viena gudra laika stacija, bet…
Vēl viena gudra laika stacija, bet…
Vēl viena gudra laika stacija, bet…
Vēl viena gudra laika stacija, bet…
Vēl viena gudra laika stacija, bet…
Vēl viena gudra laika stacija, bet…

Labi, es zinu, ka visur ir tik daudz šādu laika staciju, taču veltiet dažas minūtes, lai redzētu atšķirību …

  • Zema jauda
  • 2 e-papīra displeji…
  • bet 10 dažādi ekrāni!
  • Pamatojoties uz ESP32
  • akselerometrs un temperatūras / mitruma sensori
  • Wifi atjauninājums
  • 3D drukāts korpuss

un daudz citu noderīgu triku …

Galvenā ideja ir parādīt dažādu informāciju abos displejos atkarībā no lodziņa orientācijas. Korpuss ir paralēlskaldņu kastes formā, bruģakmens, ar sava veida jostu, kas kalpo kā pēda.

Piegādes

Kā redzat, sistēma sastāv no 2 e-papīra ekrāniem un 3D drukātas kastes. Bet tajā ir daudz lietu:

  • ESP32
  • Viens akselerometrs MPU6050
  • DHT22 sensors
  • LiPo akumulators
  • PCB, lai savienotu visu
  • Pašdarināti duPont pavedieni

un Wi-Fi savienojums. Faktiski tiek deklarēti 3 tīkli, sistēma tos pārbauda pa vienam, līdz izdodas izveidot savienojumu.

1. solis: Kāpēc vēl viena meteostacija?

Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?
Kāpēc vēl viena meteostacija?

Ideja ir parādīt dažāda veida informāciju abos ekrānos atkarībā no lodziņa orientācijas. Korpuss ir paralēlskaldņu kastes formā, bruģakmens, ar sava veida jostu, kas kalpo kā balsts, lai tas stāvētu.

Akselerometrs nosaka kustību un orientāciju un aktivizē displejus.

Lai taupītu enerģiju, es izvēlējos e-papīra ekrānus (skatīt atsauces zemāk), kas saglabā displeju pat tad, ja tie vairs netiek darbināti. Līdzīgi kā ESP32, es izvēlējos Lolin32 moduli (slavens ar savu taupību), un man bija jāiemācās pārvaldīt dziļo miegu un paātrinājuma pamodināšanu, ko rada akselerometrs.

Ekrāni ir savienoti, izmantojot SPI, es diezgan daudz meklēju, pirms atradu pareizos tapas, lai tos savienotu ar ESP32, zinot, ka man ir nepieciešams arī I2C akselerometram, tapa, lai lasītu DHT22 un 2 citi akumulatora sprieguma mērīšanai. ESP32 ir gandrīz pilnībā uzlādēts! Zinot, ka dažas tapas ir tikai lasāmas (es tās izmantoju DHT sensoram), citas nevar izmantot kopā ar Wifi, bija nedaudz sarežģīti atrast pareizo konfigurāciju.

Kastīti var orientēt 4 virzienos, kā arī plakanu. Kopumā 4*2+2 = 10 iespējamie informācijas veidi, ko parādīt tikai ar 2 ekrāniem. Tātad tas ļauj parādīt daudzas lietas:

  • Datums un dienas svētais
  • Pašreizējais laiks
  • Šodienas laika prognoze
  • Laika prognozes tuvākajām stundām
  • Laika prognozes tuvākajām dienām
  • Akumulatora uzlādes līmenis
  • Un tā kā man vēl bija vieta, nejaušs citāts no specializētas vietnes.

2. darbība. Kas jums nepieciešams?

Ko tev vajag ?
Ko tev vajag ?
Ko tev vajag ?
Ko tev vajag ?
Ko tev vajag ?
Ko tev vajag ?
  • ESP32: Lolin32 modulis (ļoti zems enerģijas patēriņš, aprīkots ar akumulatora savienotāju, var uzlādēt akumulatoru, izmantojot USB plus)
  • 2 e -papīra displeji: 4,2 collas un 2,9 collas. Es izvēlējos modeļus no Good Display veikala.
  • DHT22 sensors
  • Akselerometrs MCU6050 - žirometra I2C sensors
  • LiPo akumulators
  • Akumulatora sprieguma mērīšanai: 2 10k rezistori, 1 100k rezistors, 1 100nF kondensators, 1 MOSFET tranzistors
  • Lodāmurs un lodāmurs, iespiedshēmas plate
  • Piekļuve korpusa 3D printerim

Pievienotajā attēlā parādīta visu PCB sastāvdaļu atrašanās vieta: man bija jātaupa vieta, lai ietilptu korpusā, kuram nevajadzētu būt pārāk lielam.

Lai iegūtu datus par laikapstākļiem, jums jāreģistrējas arī laika apstākļu API un jāievieto atslēgas pareizajās vietās failā “Variables.h” (skatīt zemāk).

Laikapstākļu vietnes:

  • apiksu
  • laika apstākļi

3. solis: Šis projekts lika man daudz domāt un mācīties…

Šis projekts lika man daudz domāt un uzzināt…
Šis projekts lika man daudz domāt un uzzināt…
Šis projekts lika man daudz domāt un uzzināt…
Šis projekts lika man daudz domāt un uzzināt…
Šis projekts lika man daudz domāt un uzzināt…
Šis projekts lika man daudz domāt un uzzināt…

Šai sistēmai vajadzēja būt mazjaudīgai, tāpēc jums katru nakti nav jāuzlādē akumulators … Lai taupītu enerģiju, es izvēlējos e-papīra ekrānus, kas saglabā displeju pat tad, ja tiem vairs nav enerģijas. Līdzīgi kā ESP32, es izvēlējos Lolin32 moduli (slavens ar savu taupību), un man bija jāiemācās pārvaldīt dziļo miegu un modinātājzvanu par paātrinājuma radīto pārtraukumu.

Kastīti var orientēt 4 virzienos, līdzenāk. Kopumā tas padara 4*2+2 = 10 iespējamos parādāmās informācijas veidus. Tātad tas ļauj veikt daudzas lietas: datumu un dienas svēto, laiku, šodienas laika prognozi, laika prognozes nākamajām stundām vai dienām, akumulatora uzlādes līmeni un nejaušu citātu no specializētas vietnes.

Tas ir daudz jāmeklē internetā, un, kā jūs zināt: WiFi ir enerģijas taupīšanas ienaidnieks …

Tāpēc mums ir jāpārvalda savienojums, lai parādītu jaunāko informāciju, bet netērētu pārāk daudz laika savienojumam. Vēl viena diezgan sarežģīta problēma: diezgan precīza laika saglabāšana. Man nav nepieciešams RTC, jo es varu atrast laiku internetā, bet ESP32 iekšējais pulkstenis diezgan daudz mainās, it īpaši miega laikā. Man bija jāatrod veids, kā palikt pietiekami precīzam, gaidot pulksteņa atiestatīšanu, izmantojot internetu. Es to katru stundu atkārtoti sinhronizēju internetā.

Tātad pastāv kompromiss starp autonomiju (interneta pieslēgumu biežumu) un parādītās informācijas precizitāti.

Vēl viena problēma, kas jāatrisina, ir atmiņa. Kad ESP32 ir dziļā miegā, atmiņa tiek zaudēta, izņemot to, ko sauc par RTC RAM. Šī atmiņa ir 4 MB plata, no kuras tikai 2 var izmantot programmai. Šajā atmiņā man jāsaglabā dažādi programmas mainīgie, kas pēc miega fāzes jāglabā no vienas izpildes reizes uz otru: laika prognozes, laiks un datums, ikonu failu nosaukumi, pēdiņas utt. Man bija jāiemācās ar to rīkoties..

Runājot par ikonām, tās tiek saglabātas SPIFFS, failu sistēmā ESP32. Pēc bezmaksas Wunderground laika apstākļu API slēgšanas man bija jāmeklē citi bezmaksas laika datu sniedzēji. Es izvēlējos divus: vienu pašreizējās dienas laika apstākļiem ar 12 stundu prognozēm un otru vairāku dienu prognozēm. Ikonas nav vienādas, tāpēc tas man radīja divas jaunas problēmas:

  • Izvēlieties ikonu kopu
  • Saskaņojiet šīs ikonas ar divu vietņu prognozes kodiem

Šī sarakste ir saglabāta arī RTC RAM, lai tā nebūtu katru reizi jāielādē atkārtoti.

Pēdējā problēma ar ikonām. Nav iespējams tos visus saglabāt SPIFFS. Vieta ir pārāk maza visiem maniem failiem. Bija nepieciešams veikt attēlu saspiešanu. Es uzrakstīju skriptu programmā Python, kas nolasa manus ikonu failus un saspiež tos RLE, un pēc tam saglabā saspiestos failus SPIFFS. Tur tas notika.

Bet e-papīra displeja bibliotēka uzņem tikai BMP tipa failus, nevis saspiestus attēlus. Tāpēc man bija jāraksta papildu funkcija, lai varētu parādīt savas ikonas no šiem saspiestajiem failiem.

Internetā nolasītie dati bieži ir json formātā: laika apstākļu dati, dienas svētais. Šim nolūkam es izmantoju (lielisko) arduinoJson bibliotēku. Bet citāti nav tādi. Es tos ņemu no īpašas vietnes, tāpēc man tie ir jāizlasa, tieši ieskatoties tīmekļa lapas saturā. Tam man bija jāraksta īpašs kods. Katru dienu, ap pusnakti, programma dodas uz šo vietni un nolasa apmēram desmit izlases citātus un saglabā tos RTC RAM. Viens no tiem tiek parādīts nejauši, kad korpuss ir vērsts uz lielu ekrānu uz augšu.

Es nododu jums akcentētu rakstzīmju parādīšanas problēmu (atvainojiet, bet pēdiņas ir franču valodā)….

Kad mazais ekrāns ir uz augšu, tiek parādīts akumulatora spriegums ar zīmējumu, lai labāk redzētu atlikušo līmeni. Lai nolasītu akumulatora spriegumu, bija jāizveido elektroniska montāža. Tā kā mērījumam nevajadzētu izlādēt akumulatoru, es izmantoju internetā atrodamu diagrammu, kurā kā slēdzis tiek izmantots MOSFET tranzistors, lai patērētu strāvu tikai tad, kad tiek veikts mērījums.

Lai varētu izveidot šo shēmu un ievietot visu kastē, ko es gribēju pēc iespējas mazāku, man bija jāizgatavo PCB, lai savienotu visas sistēmas sastāvdaļas. Šī ir mana pirmā PCB. Man paveicās, jo pirmo reizi šajā pusē viss darbojās labi …

Skatiet implantācijas karti: "aizliegtā zona" ir vieta, kas paredzēta USB kabeļa pievienošanai. Lolin32 modulis ļauj uzlādēt akumulatoru, izmantojot USB: ja USB kabelis ir pievienots, akumulators tiek uzlādēts, un modulis darbojas vienlaicīgi.

Pēdējais punkts: fonti. Dažādu izmēru, treknrakstā vai nē, tie bija jāizveido un jāuzglabā. Kad esat instalējis fontu failus pareizajā direktorijā, Adafruit GFX bibliotēka par to ļoti labi rūpējas. Lai izveidotu failus, es izmantoju Font Converter vietni, ļoti ērti!

Noteikti atlasiet:

  • Priekšskatījuma displejs: 2,4 collu TFT
  • Bibliotēkas versija: Adafruit GFX fonts

Tātad rezumējot: liels projekts, kas ļāva man uzzināt daudz ko

4. darbība. E-papīra displeju izmantošana

E-papīra displeju izmantošana
E-papīra displeju izmantošana

Galvenais šo ekrānu trūkums ir skaidri redzams videoklipā: displeja atjaunināšana ilgst vienu vai divas sekundes, un to veic, mirgot (alternatīvs divu ekrānu parasto un apgriezto versiju attēlojums). Tas ir pieņemami attiecībā uz laika apstākļu informāciju, jo es to ne pārāk bieži atjauninu (katru stundu, izņemot lodziņa orientācijas maiņu). Bet ne uz laiku. Tāpēc (un patēriņa ierobežošanai) es joprojām izmantoju HH: MM displeju (nevis sekundes).

Tāpēc man bija jāmeklē cits veids, kā atjaunināt displeju. Šie ekrāni (daži no tiem) atbalsta daļēju atjaunināšanu (attiecas vai nu uz ekrāna apgabalu, vai uz visu ekrānu …), bet man tas nebija labi, jo mans lielais ekrāns (kas parāda laiku) saglabā pikseļu spokus kas tiek aizstāti. Piemēram, pārejot no 10:12 līdz 10:13, “2” ir nedaudz redzams “3” iekšpusē, un tas kļūst vēl redzamāks pēc “4”, “5” utt. Es gribētu lai norādītu, ka tas attiecas uz manu ekrānu: es to apspriedu ar e-papīra displeja bibliotēkas GxEPD2 autoru, kurš man teica, ka viņš neievēro šo parādību ar saviem ekrāniem. Mēs mēģinājām mainīt parametrus, neveicot spoku medības.

Tāpēc mums bija jāatrod cits risinājums: es ierosināju veikt daļēju dubultu atspirdzinājumu, kas atrisināja problēmu (vismaz tas mani apmierina). Stundas rit bez ekrāna mirgošanas un nav spoku. Tomēr pāreja nav tūlītēja: laika maiņa aizņem nedaudz vairāk par vienu sekundi.

5. solis: tā izgatavošana

Izgatavošana
Izgatavošana
Izgatavošana
Izgatavošana
Izgatavošana
Izgatavošana
Izgatavošana
Izgatavošana

Lai nodrošinātu, ka, mainoties orientācijai, nekas nepārvietojas iekšpusē, dažādas sastāvdaļas (displeji, elektroniskie moduļi, PCB, baterijas) tiek pielīmētas ar līmes pistoli. Lai novietotu vadus zem PCB, es to uzstādīju uz kājām, kas izgatavotas ar starplikām, tas pats attiecas uz akumulatoru.

Drīz es instalēšu ārēju USB mikrofona savienotāju, lai man nebūtu jāatver korpuss, lai uzlādētu akumulatoru.

Varbūt mani arī interesēs atjaunināt OTA, lai to visu pilnveidotu….

6. darbība: kods un faili

Image
Image

Tiek piedāvāti trīs arhīva faili:

  • Weather station.zip: Arduino kods, lai augšupielādētu, izmantojot Arduino IDE
  • Boite ecran.zip: lietas CAD un 3D printera faili
  • data.zip: faili, kas tiks augšupielādēti ESP32 SPIFFS.

Ja jūs nezināt, kā augšupielādēt failus ESP32 SPIFFS, vienkārši izlasiet šo pamācību, kurā ir ļoti noderīgs spraudnis un kā to izmantot Arduino IDE.

Dziļā miega programmēšana ievērojami atšķiras no Arduino standarta programmēšanas. ESP32 tas nozīmē, ka ESP32 pamostas un izpilda iestatīšanu, pēc tam iet gulēt. Tātad cilpas funkcija ir tukša un nekad netiek izpildīta.

Kāds inicializācijas posms ir jāizpilda tikai vienu reizi pirmajā izpildē (piemēram, laika, laika apstākļu datu, citātu u.c. iegūšana), tāpēc ESP32 ir jāzina, vai pašreizējais pamošanās ir pirmais vai nē. risinājums ir saglabāt mainīgo RTC RAM (kas paliek aktīvs pat dziļā miega fāzēs), kas tiek palielināts katrā pamošanās reizē. Ja tas ir vienāds ar 1, tā ir pirmā izpilde, un ESP32 palaiž inicializācijas fāzi, pretējā gadījumā šī fāze tiek izlaista.

Lai aktivizētu ESP32, ir vairākas iespējas:

  • Taimera modināšana: kods pirms gulētiešanas aprēķina dziļā miega ilgumu. To izmanto, lai atjauninātu dienas citātu (ik pēc 24 stundām) laiku (ik pēc 1, 2, 3 vai 5 minūtēm) vai laika apstākļu datus (ik pēc 3 vai 4 stundām).
  • Pārtraukt pamodināšanu: akselerometrs nosūta signālu, kas tiek izmantots ESP32 modināšanai. To izmanto, lai noteiktu orientācijas izmaiņas un atjauninātu displejus
  • Pieskāriena sensora modināšana: ESP32 ir aprīkots ar vairākām tapām, kas darbojas kā pieskāriena sensori, taču tās nevar izmantot ar taimera modināšanu, tāpēc es to neizmantoju.

Ir arī citi programmēšanas triki citur kodā, lai saglabātu precīzu laiku, vienlaikus taupot enerģiju (ti, katru minūti nepievienotu NTP serveri), lai noņemtu akcentus, kurus neatbalsta Adafruit GFX bibliotēka, lai neatjauninātu displeju, ja nav nepieciešams iestatīt akselerometra parametrus, jo īpaši, lai pārtrauktu pamošanos, precīzi aprēķināt gulēšanas laiku taimera modināšanas gadījumā, izvairīties no seriālās konsoles izmantošanas, ja tā nav pievienota IDE (lai atkal taupītu enerģiju), atvienojiet wifi, kad tas nav vajadzīgs utt., un kods ir pilns ar komentāriem, kas palīdz izprast funkcijas.

Paldies, ka izlasījāt šo pamācību (mana pirmā). Es ceru, ka jums patiks un patiks izveidot šo laika staciju

Sensoru konkurss
Sensoru konkurss

Otrā vieta sensoru konkursā

Ieteicams: