Taula de continguts:

Una altra estació meteorològica intel·ligent, però : 6 passos (amb imatges)
Una altra estació meteorològica intel·ligent, però : 6 passos (amb imatges)

Vídeo: Una altra estació meteorològica intel·ligent, però : 6 passos (amb imatges)

Vídeo: Una altra estació meteorològica intel·ligent, però : 6 passos (amb imatges)
Vídeo: Generació Digital - Capítol 183 2024, De novembre
Anonim
Image
Image
Una altra estació meteorològica intel·ligent, però …
Una altra estació meteorològica intel·ligent, però …
Una altra estació meteorològica intel·ligent, però …
Una altra estació meteorològica intel·ligent, però …
Una altra estació meteorològica intel·ligent, però …
Una altra estació meteorològica intel·ligent, però …

D'acord, sé que hi ha tantes estacions meteorològiques disponibles a tot arreu, però trigueu uns minuts a veure la diferència …

  • Baixa potència
  • 2 pantalles de paper electrònic …
  • però 10 pantalles diferents!
  • Basat en ESP32
  • acceleròmetre i sensors de temperatura / humitat
  • Actualització de Wifi
  • Estoig imprès en 3D

i molts altres trucs útils …

La idea principal és mostrar diverses informacions a les dues pantalles en funció de l'orientació del quadre. El cas té la forma d’una caixa paral·lelepipèdica, una llamborda, amb una mena de cinturó que serveix de peu.

Subministraments

Com podeu veure, el sistema consta de 2 pantalles de paper electrònic i una caixa impresa en 3D. Però hi ha moltes coses:

  • Un ESP32
  • Un acceleròmetre MPU6050
  • Un sensor DHT22
  • Una bateria LiPo
  • Un PCB per connectar-ho tot
  • Fils casolans de duPont

i una connexió Wi-Fi. De fet, es declaren 3 xarxes, el sistema les prova una a una fins que aconsegueix connectar-se.

Pas 1: per què una altra estació meteorològica?

Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?
Per què una altra estació meteorològica?

La idea és mostrar diversos tipus d'informació a les dues pantalles en funció de l'orientació del quadre. La caixa té la forma d’una caixa paral·lelepipèdica, una pedra de paviment, amb una mena de cinturó que serveix de suport per fer-lo parar.

L’acceleròmetre detecta el moviment i l’orientació i activa les pantalles.

Per estalviar energia, vaig triar les pantalles de paper electrònic (vegeu les referències següents) que mantenen la pantalla encara que ja no estiguin alimentades. De la mateixa manera, per a l’ESP32, vaig triar el mòdul Lolin32 (conegut per la seva frugalitat) i vaig haver d’aprendre a gestionar el son profund i el despertar de l’interrupció generat per l’acceleròmetre.

Les pantalles estan connectades mitjançant SPI, he buscat força abans de trobar els pins adequats per connectar-los a l’ESP32, sabent que també necessito un I2C per a l’acceleròmetre, un pin per llegir el DHT22 i 2 més per mesurar la tensió de la bateria. L'ESP32 està gairebé completament carregat. Sabent que alguns pins són de només lectura (els he utilitzat per al sensor DHT), d'altres no es poden utilitzar juntament amb Wifi, va ser una mica complicat trobar la configuració adequada.

La caixa es pot orientar en 4 direccions, més planes. Tot plegat fa que 4 * 2 + 2 = 10 possibles tipus d'informació es mostrin amb només 2 pantalles. Per tant, us permet mostrar moltes coses:

  • La data i el sant del dia
  • L’hora actual
  • La previsió meteorològica d'avui
  • Previsions meteorològiques per a les properes hores
  • Previsions meteorològiques per als propers dies
  • El nivell de càrrega de la bateria
  • I com que encara tenia espai, una cita aleatòria d’un lloc web especialitzat.

Pas 2: què necessiteu?

Què necessites ?
Què necessites ?
Què necessites ?
Què necessites ?
Què necessites ?
Què necessites ?
  • ESP32: mòdul Lolin32 (molt baixa potència, equipat amb un connector de bateria, pot carregar la bateria mitjançant USB plus)
  • 2 pantalles epaper: 4,2 polzades i 2,9 polzades. He triat els models de la botiga Good Display.
  • Sensor DHT22
  • MCU6050 acceleròmetre - giròmetre sensor I2C
  • Una bateria LiPo
  • Per mesurar el voltatge de la bateria: 2 resistències de 10 k, 1 resistència de 100 k, 1 condensador de 100 nF, 1 transistor MOSFET
  • Soldador i soldador, placa de circuit imprès
  • Accés a una impressora 3D per a la funda

La imatge adjunta mostra la posició de tots els components del PCB: he hagut d’estalviar espai per encabir-la a la caixa, que no hauria de ser massa gran.

Per obtenir les dades meteorològiques, també heu de registrar-vos a les API meteorològiques i posar les vostres claus als llocs correctes del fitxer "Variables.h" (vegeu més avall).

Llocs web de temps:

  • apixu
  • accuweather

Pas 3: aquest projecte em va fer pensar i aprendre molt …

Aquest projecte em va fer pensar i aprendre molt …
Aquest projecte em va fer pensar i aprendre molt …
Aquest projecte em va fer pensar i aprendre molt …
Aquest projecte em va fer pensar i aprendre molt …
Aquest projecte em va fer pensar i aprendre molt …
Aquest projecte em va fer pensar i aprendre molt …

Aquest sistema se suposava que era de poca energia, de manera que no cal que carregueu la bateria cada nit … Per estalviar energia, vaig escollir les pantalles de paper electrònic que mantenen la pantalla encara que ja no estiguin alimentades. De la mateixa manera, per a l’ESP32, vaig triar el mòdul Lolin32 (conegut per la seva frugalitat) i vaig haver d’aprendre a gestionar el son profund i la trucada de despertar a la interrupció generada per l’acceleròmetre.

La caixa es pot orientar en 4 direccions, més plana. Tot plegat fa que 4 * 2 + 2 = 10 possibles tipus d'informació es mostrin. Per tant, us permet fer moltes coses: la data i el sant del dia, l’hora, la previsió meteorològica d’avui, les previsions meteorològiques per a les properes hores o dies, el nivell de càrrega de la bateria i un pressupost aleatori d’un lloc web especialitzat.

És molt a buscar a Internet i, com ja sabeu, el WiFi és l’enemic de l’estalvi energètic …

Per tant, hem de gestionar la connexió per mostrar informació actualitzada però sense passar massa temps connectant-nos. Un altre problema força complex: mantenir un temps bastant precís. No necessito un RTC, ja que puc trobar l’hora a Internet, però el rellotge intern de l’ESP32 deriva força, sobretot durant els períodes de son. Vaig haver de trobar la manera de mantenir la precisió suficient mentre esperava restablir el rellotge per internet. Ho sincronitzo a Internet cada hora.

Així doncs, hi ha un compromís entre l’autonomia (la freqüència de les connexions a Internet) i la precisió de la informació mostrada.

Un altre problema a resoldre és la memòria. Quan l’ESP32 està en son profund, la memòria es perd, excepte el que s’anomena RAM RTC. Aquesta memòria té una amplada de 4 MB, dels quals només 2 es poden utilitzar per al programa. En aquesta memòria, he d’emmagatzemar les diverses variables del programa que s’han de conservar d’una execució a la següent, després d’una fase de repòs: previsions meteorològiques, hora i data, noms de fitxers d’icones, cometes, etc. Vaig haver d’aprendre a tractar-ho.

Parlant d’icones, s’emmagatzemen a SPIFFS, el sistema de fitxers ESP32. Després del tancament de l’API meteorològica gratuïta de Wunderground, vaig haver de buscar altres proveïdors gratuïts de dades meteorològiques. N’he seleccionat dos: un per al temps actual del dia, amb previsions de 12 hores i un altre per a les prediccions de diversos dies. Les icones no són les mateixes, de manera que em van causar dos nous problemes:

  • Trieu un conjunt d’icones
  • Feu coincidir aquestes icones amb els codis de previsió dels dos llocs

Aquesta correspondència també s'ha emmagatzemat a la memòria RAM RTC de manera que no hagi de tornar a carregar-se cada vegada.

Últim problema amb les icones. Impossible emmagatzemar-los tots a SPIFFS. L'espai és massa petit per a tots els meus fitxers. Calia fer compressió d'imatges. Vaig escriure un script a Python que llegeix els meus fitxers d’icones i els comprimeix a RLE i després emmagatzemo els fitxers comprimits a SPIFFS. Allà es va celebrar.

Però la biblioteca de visualització de paper electrònic només pren fitxers de tipus BMP, no imatges comprimides. Així que vaig haver d’escriure una funció addicional per poder mostrar les meves icones d’aquests fitxers comprimits.

Les dades llegides a Internet solen estar en format json: dades meteorològiques, Sant del dia. Utilitzo la (fantàstica) biblioteca arduinoJson per a això. Però les cometes no són així. Els prenc d’un lloc dedicat, de manera que els he de llegir consultant directament el contingut de la pàgina web. Vaig haver d’escriure un codi específic per a això. Cada dia, cap a mitjanit, el programa va a aquest lloc i llegeix unes deu cotitzacions aleatòries i les emmagatzema a la memòria RAM RTC. Un es mostra a l'atzar entre ells quan la carcassa està orientada cap amunt a una pantalla gran.

Us passo el problema de la visualització de caràcters accentuats (ho sento, però les cometes estan en francès) …

Quan la pantalla petita s’aixeca, es mostra el voltatge de la bateria, amb un dibuix per veure millor el nivell restant. Calia fer un muntatge electrònic per llegir la tensió de la bateria. Com que la mesura no ha de descarregar la bateria, he utilitzat un diagrama que es troba a Internet, que utilitza un transistor MOSFET com a interruptor per tal de consumir corrent només quan es fa la mesura.

Per poder fer aquest circuit i encabir-ho tot a la caixa, que volia el més petit possible, vaig haver de fer un PCB per connectar tots els components del sistema. Aquest és el meu primer PCB. Vaig tenir sort perquè tot va funcionar bé la primera vegada en aquest costat …

Veure mapa d'implantació: la "zona prohibida" és una àrea reservada per connectar el cable USB. El mòdul Lolin32 us permet recarregar la bateria mitjançant USB: la bateria es carrega si el cable USB està connectat i el mòdul funciona al mateix temps.

Últim punt: els tipus de lletra. De diferents mides, en negreta o no, s’havien de crear i emmagatzemar. La biblioteca Adafruit GFX s’encarrega molt bé d’això, un cop instal·lats els fitxers de tipus de lletra al directori adequat. Per crear els fitxers, he utilitzat el lloc del convertidor de fonts, molt convenient.

Assegureu-vos de seleccionar:

  • Visualització prèvia: TFT 2.4"
  • Versió de la biblioteca: tipus de lletra Adafruit GFX

Així doncs, per resumir: un gran projecte, que em va permetre aprendre moltes coses

Pas 4: utilitzar pantalles de paper electrònic

Ús de pantalles de paper electrònic
Ús de pantalles de paper electrònic

El principal desavantatge d’aquestes pantalles és clarament visible al vídeo: l’actualització de la pantalla triga un o dos segons i es fa intermitentment (visualització alternativa de les versions normals i invertides de les dues pantalles). Això és acceptable per a la informació meteorològica perquè no l’actualitzo amb molta freqüència (cada hora, tret d’un canvi d’orientació del quadre). Però no per l’època. Per això (i per limitar el consum) encara faig servir la pantalla HH: MM (no els segons).

Així que vaig haver de buscar una altra manera d’actualitzar la pantalla. Aquestes pantalles (algunes d'elles) admeten una actualització parcial (aplicada a una àrea de la pantalla o a tota la pantalla …), però no va ser bo per a mi perquè la meva pantalla gran (que mostra l'hora) manté els fantasmes dels píxels que se substitueixen. Per exemple, quan es passa de 10:12 a 10:13, el "2" és una mica visible a l'interior del "3" i es fa encara més visible després del "4", el "5", etc. per assenyalar que aquest és el cas de la meva pantalla: ho vaig parlar amb l'autor de la biblioteca de visualització de paper electrònic GxEPD2, que em va dir que no observava aquest fenomen amb les seves pròpies pantalles. Vam intentar canviar els paràmetres sense aconseguir caçar fantasmes.

Per tant, vam haver de trobar una altra solució: vaig proposar fer un refresc parcial doble, que resolgués el problema (almenys per a mi és satisfactori). Les hores passen sense que la pantalla parpellegi i no hi ha fantasmes. Tot i això, el canvi no és immediat: triga una mica més d’un segon a canviar l’hora.

Pas 5: aconseguir-ho

Fent-ho
Fent-ho
Fent-ho
Fent-ho
Fent-ho
Fent-ho
Fent-ho
Fent-ho

Per garantir que res no es mogui a l'interior quan canviï l'orientació, els diferents components (pantalles, mòduls electrònics, PCB, bateries) s'enganxen amb una pistola de cola. Per encaminar els cables sota el PCB, el vaig instal·lar en potes fetes amb separadors, el mateix passa amb la bateria.

Aviat instal·laré un connector de micròfon USB extern, de manera que no hauré d’obrir la funda per recarregar la bateria.

Potser també m'interessarà actualitzar per OTA per perfeccionar-ho tot …

Pas 6: el codi i els fitxers

Image
Image

Es proporcionen tres fitxers d'arxiu:

  • Weather station.zip: el codi Arduino, per penjar-lo mitjançant l'IDE Arduino
  • Boite ecran.zip: els fitxers de la impressora CAD i 3D per a la funda
  • data.zip: els fitxers que es carregaran a l’SPIFFS de l’ESP32.

Si no sabeu com penjar fitxers a SPIFFS de l’ESP32, llegiu aquest tutorial, que presenta un complement molt útil i com utilitzar-lo a l’IDE Arduino.

La programació del son profund és força diferent de la programació estàndard d’un Arduino. Per a l’ESP32, vol dir que l’ESP32 es desperta i executa la configuració i després es posa a dormir. Per tant, la funció de bucle està buida i no s’executa mai.

Alguna fase d'inicialització s'ha d'executar només una vegada a la primera execució (com ara obtenir l'hora, les dades meteorològiques, les cotitzacions, etc.), de manera que l'ESP32 ha de saber si el despertar actual és el primer o no: per a això, el La solució és emmagatzemar una variable a la memòria RAM RTC (que roman activa fins i tot durant les fases de son profund) que s’incrementa a cada despertador. Si és igual a 1, és la primera execució i l'ESP32 executa la fase d'inicialització, en cas contrari aquesta fase s'omet.

Per despertar l’ESP32, hi ha diverses possibilitats:

  • Despertador del temporitzador: el codi calcula la durada del son profund abans d’anar a dormir. S'utilitza per actualitzar l'hora (cada 1, 2, 3 o 5 minuts) o les dades meteorològiques (cada 3 o 4 hores) de les cotitzacions i del sant del dia (cada 24 hores)
  • Interrupció del despertar: l’acceleròmetre envia un senyal que s’utilitza per activar l’ESP32. S'utilitza per detectar un canvi d'orientació i actualitzar les pantalles
  • Activació del sensor tàctil: l'ESP32 està equipat amb diversos pins que actuen com a sensors tàctils, però no es poden utilitzar amb el despertador del temporitzador, de manera que no l'he utilitzat.

Hi ha altres trucs de programació en altres llocs del codi, per mantenir el temps precís mentre estalvieu energia (és a dir, no connecteu el servidor NTP cada minut), per eliminar els accents que no són compatibles amb la biblioteca Adafruit GFX, per evitar actualitzar una pantalla si no és necessari, establir els paràmetres de l’acceleròmetre especialment per a l’activació de la interrupció, calcular amb precisió el temps per dormir en cas de despertador del temporitzador, eviteu utilitzar la consola sèrie si no està connectat a l’IDE (per estalviar energia de nou), desconnecteu el wifi quan no cal, etc … i el codi està ple de comentaris que ajuden a entendre les funcions.

Gràcies per llegir aquest Instructable (el meu primer). Espero que us agradi i us agradi fer aquesta estació meteorològica

Concurs de Sensors
Concurs de Sensors

Accèssit al concurs de sensors

Recomanat: