Innholdsfortegnelse:

Nok en smart værstasjon, men : 6 trinn (med bilder)
Nok en smart værstasjon, men : 6 trinn (med bilder)

Video: Nok en smart værstasjon, men : 6 trinn (med bilder)

Video: Nok en smart værstasjon, men : 6 trinn (med bilder)
Video: Ускорение испытаний космических кораблей SpaceX, огромные изменения на Международной космической станции и многое другое 2024, Juni
Anonim
Image
Image
Nok en smart værstasjon, men …
Nok en smart værstasjon, men …
Nok en smart værstasjon, men …
Nok en smart værstasjon, men …
Nok en smart værstasjon, men …
Nok en smart værstasjon, men …

OK, jeg vet at det er så mange slike værstasjoner tilgjengelig overalt, men ta noen minutter å se forskjellen …

  • Lite strøm
  • 2 e-papirskjermer …
  • men 10 forskjellige skjermer!
  • ESP32 basert
  • akselerometer og temperatur / fuktighetssensorer
  • Wifi oppdatering
  • 3D -trykt etui

og mange andre nyttige triks …

Hovedideen er å vise forskjellig informasjon på begge skjermene, avhengig av retningen på esken. Saken er i form av en parallellepipedisk boks, en belegningsstein, med et slags belte som fungerer som fot.

Rekvisita

Som du kan se, består systemet av 2 e-papirskjermer og en 3D-trykt eske. Men det er mange ting i det:

  • En ESP32
  • Ett MPU6050 akselerometer
  • En DHT22 sensor
  • Et LiPo -batteri
  • En PCB for å koble hele greia
  • Hjemmelagde duPont -tråder

og en Wi-Fi-tilkobling. Faktisk er 3 nettverk deklarert, systemet tester dem en etter en til det lykkes å koble til.

Trinn 1: Hvorfor en annen værstasjon?

Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?
Hvorfor en annen værstasjon?

Tanken er å vise ulike typer informasjon på begge skjermene avhengig av retningen på boksen. Saken er i form av en parallellpipedisk boks, en belegningsstein, med et slags belte som fungerer som en støtte for å få den til å stå.

Akselerometeret registrerer bevegelse og orientering og utløser skjermer.

For å spare energi valgte jeg e-papirskjermene (se referanser nedenfor) som beholder skjermen selv om de ikke lenger er drevet. På samme måte for ESP32 valgte jeg Lolin32-modulen (kjent for sin nøysomhet), og jeg måtte lære å håndtere dyp søvn og våkne ved avbrudd generert av akselerometeret.

Skjermene er koblet til via SPI, jeg søkte ganske mye før jeg fant de riktige pinnene for å koble dem til ESP32, vel vitende om at jeg også trenger en I2C for akselerometeret, en pinne for å lese DHT22 og 2 andre for batterispenningsmåling. ESP32 er nesten fulladet! Å vite at noen pinner er skrivebeskyttet (jeg brukte dem for DHT-sensoren), andre kan ikke brukes sammen med Wifi, det var litt komplisert å finne den riktige konfigurasjonen.

Boksen kan orienteres i 4 retninger, pluss flat. Alt i alt gjør det 4*2+2 = 10 mulige typer informasjon å vise med bare 2 skjermer. Så det lar deg vise mange ting:

  • Datoen og dagens helgen
  • Den nåværende tiden
  • Dagens værmelding
  • Værmeldinger for de kommende timene
  • Værmeldinger for de kommende dagene
  • Batteriets ladningsnivå
  • Og ettersom jeg fortsatt hadde plass, et tilfeldig sitat fra et spesialisert nettsted.

Trinn 2: Hva trenger du?

Hva trenger du ?
Hva trenger du ?
Hva trenger du ?
Hva trenger du ?
Hva trenger du ?
Hva trenger du ?
  • ESP32: Lolin32 -modul (svært lav effekt, utstyrt med batterikontakt, kan lade batteriet via USB pluss)
  • 2 skjermbilder: 4,2 tommer og 2,9 tommer. Jeg valgte modellene fra Good Display -butikken.
  • DHT22 sensor
  • MCU6050 akselerometer - gyrometer I2C sensor
  • Et LiPo -batteri
  • For måling av batterispenning: 2 10k motstander, 1 100k motstand, 1 100nF kondensator, 1 MOSFET transistor
  • Loddetinn og loddejern, kretskort
  • Tilgang til en 3D -skriver for saken

Det vedlagte bildet viser plasseringen til alle komponentene på kretskortet: Jeg måtte spare plass for å passe i etuiet, som ikke burde være for stort.

For å få værdataene må du også registrere deg på vær -API -ene og plassere nøklene dine på de riktige stedene i filen "Variables.h" (se nedenfor).

Værnettsteder:

  • apixu
  • accuweather

Trinn 3: Dette prosjektet fikk meg til å tenke og lære mye …

Dette prosjektet fikk meg til å tenke og lære mye …
Dette prosjektet fikk meg til å tenke og lære mye …
Dette prosjektet fikk meg til å tenke og lære mye …
Dette prosjektet fikk meg til å tenke og lære mye …
Dette prosjektet fikk meg til å tenke og lære mye …
Dette prosjektet fikk meg til å tenke og lære mye …

Dette systemet skulle være lite strøm, slik at du ikke trenger å lade batteriet hver kveld … For å spare energi valgte jeg e-papir-skjermene som beholder skjermen selv om de ikke lenger er drevet. På samme måte for ESP32, valgte jeg Lolin32-modulen (kjent for sin nøysomhet), og jeg måtte lære å håndtere dyp søvn, og vekking ved avbrudd generert av akselerometeret.

Boksen kan orienteres i 4 retninger, mer flat. Alt i alt gjør 4*2+2 = 10 mulige typer informasjon å vise. Så det lar deg gjøre mange ting: datoen og dagens helgen, klokkeslett, dagens værmelding, værmeldinger for de kommende timene eller dagene, batterinivået og et tilfeldig tilbud fra et spesialisert nettsted.

Det er mye å se etter på Internett, og som du vet: WiFi er fienden til energisparing …

Så vi må administrere tilkoblingen for å vise oppdatert informasjon, men uten å bruke for mye tid på å koble til. Et annet ganske komplekst problem: å holde et ganske nøyaktig tidspunkt. Jeg trenger ikke en RTC siden jeg kan finne tiden på internett, men ESP32s interne klokke driver ganske mye, spesielt i søvnperioder. Jeg måtte finne en måte å holde meg nøyaktig nok, mens jeg ventet på å tilbakestille klokken via internett. Jeg synkroniserer den på internett hver time.

Så det er en avveining mellom autonomi (frekvensen av Internett-tilkoblinger) og nøyaktigheten av informasjonen som vises.

Et annet problem som skal løses er minnet. Når ESP32 er i dyp søvn, går hukommelsen tapt, bortsett fra det som kalles RTC RAM. Dette minnet er 4 MB bredt, hvorav bare 2 kan brukes til programmet. I dette minnet må jeg lagre de forskjellige programvariablene som må beholdes fra en kjøring til den neste, etter en hvilefase: værmeldinger, klokkeslett og dato, ikonfilnavn, anførselstegn osv. Jeg måtte lære å håndtere det.

Når vi snakker om ikoner, lagres de i SPIFFS, ESP32 -filsystemet. Etter nedleggelsen av gratis Wunderground -vær -API, måtte jeg lete etter andre gratis værdatatilbydere. Jeg valgte to: en for dagens vær, med 12 timers varsel og en annen for flerdagsprognosene. Ikonene er ikke de samme, så det forårsaket meg to nye problemer:

  • Velg et ikon
  • Match disse ikonene med prognosekodene for de to nettstedene

Denne korrespondansen har også blitt lagret i RTC RAM slik at den ikke trenger å lastes inn hver gang.

Siste problem med ikoner. Umulig å lagre dem alle i SPIFFS. Plassen er for liten til alle filene mine. Det var nødvendig å gjøre bildekomprimering. Jeg skrev et skript i Python som leser ikonfilene mine og komprimerer dem til RLE, og deretter lagrer de komprimerte filene i SPIFFS. Der holdt det.

Men e-paper-visningsbiblioteket tar bare filer av BMP-type, ikke komprimerte bilder. Så jeg måtte skrive en ekstra funksjon for å kunne vise ikonene mine fra disse komprimerte filene.

Dataene som leses på internett er ofte i json -format: værdata, Saint of the day. Jeg bruker det (flotte) arduinoJson -biblioteket til dette. Men sitater er ikke slik. Jeg tar dem fra et dedikert nettsted, så jeg må lese dem ved å se direkte på innholdet på nettsiden. Jeg måtte skrive en spesifikk kode for det. Hver dag, rundt midnatt, går programmet til dette nettstedet og leser omtrent ti tilfeldige sitater, og lagrer dem i RTC RAM. En vises tilfeldig blant dem når huset er orientert stor skjerm oppover.

Jeg sender deg problemet med visning av tegn med aksent (beklager, men sitater er på fransk)….

Når den lille skjermen er oppe, vises batterispenningen, med en tegning for bedre å se det gjenværende nivået. Det var nødvendig å lage en elektronisk samling for å lese batterispenningen. Siden målingen ikke skulle lade ut batteriet, brukte jeg et diagram funnet på internett, som bruker en MOSFET -transistor som en bryter for å forbruke strøm bare når målingen er utført.

For å kunne lage denne kretsen og passe alt inn i esken, som jeg ville ha minst mulig, måtte jeg lage en PCB for å koble til alle komponentene i systemet. Dette er min første PCB. Jeg var heldig fordi alt fungerte bra første gangen på denne siden …

Se implantasjonskart: "forbudt sone" er et område reservert for tilkobling av USB -kabelen. Lolin32 -modulen lar deg lade batteriet via USB: batteriet lades hvis USB -kabelen er tilkoblet, og modulen fungerer samtidig.

Siste punkt: skriftene. Av forskjellige størrelser, fet eller ikke, måtte de opprettes og lagres. Adafruit GFX -biblioteket tar seg godt av det, når du har installert skriftfilene i den riktige katalogen. For å lage filene brukte jeg Font Converter -stedet, veldig praktisk!

Sørg for at du velger:

  • Forhåndsvisningsskjerm: TFT 2,4"
  • Bibliotekversjon: Adafruit GFX Font

Så for å oppsummere: et stort prosjekt, som tillot meg å lære mange ting

Trinn 4: Bruke elektroniske papirskjermer

Bruke elektroniske papirskjermer
Bruke elektroniske papirskjermer

Den største ulempen med disse skjermene er tydelig synlig på videoen: oppdateringen av skjermen tar ett eller to sekunder og gjøres ved å blinke (alternativ visning av de normale og inverterte versjonene av de to skjermene). Dette er akseptabelt for værinformasjon fordi jeg ikke oppdaterer det veldig ofte (hver time bortsett fra endring av retningen på boksen). Men ikke for tiden. Derfor (og for å begrense forbruket) bruker jeg fremdeles HH: MM -skjermen (ikke sekundene).

Så jeg måtte lete etter en annen måte å oppdatere skjermen på. Disse skjermene (noen av dem) støtter en delvis oppdatering (brukes enten på et område på skjermen eller på hele skjermen …), men det var ikke bra for meg fordi min store skjerm (som viser tiden) holder spøkelser av pikslene som erstattes. For eksempel, når du går fra 10:12 til 10:13, er '2' litt synlig inne i '3', og den blir enda mer synlig etter '4', '5', etc. Jeg vil gjerne for å påpeke at dette er tilfellet for skjermen min: Jeg diskuterte det med forfatteren av e-paper display biblioteket GxEPD2 som fortalte meg at han ikke observerte dette fenomenet med sine egne skjermer. Vi prøvde å endre parametrene uten å lykkes med å jakte spøkelser.

Så vi måtte finne en annen løsning: Jeg foreslo å gjøre en delvis dobbel forfriskning, som løste problemet (i det minste er det tilfredsstillende for meg). Timene går uten at skjermen blinker og det er ingen spøkelser. Overgangen er imidlertid ikke umiddelbar: det tar litt mer enn ett sekund å endre tiden.

Trinn 5: Gjør det

Gjør det
Gjør det
Gjør det
Gjør det
Gjør det
Gjør det
Gjør det
Gjør det

For å sikre at ingenting beveger seg innvendig når retningen endres, limes de forskjellige komponentene (skjermer, elektroniske moduler, PCB, batterier) med en limpistol. For å føre ledningene under kretskortet, installerte jeg det på ben laget med avstandsstykker, det samme gjelder batteriet.

Snart skal jeg installere en ekstern USB -mikrofonkontakt, så jeg slipper å åpne etuiet for å lade batteriet.

Kanskje jeg også vil være interessert i å oppdatere av OTA for å perfeksjonere alt….

Trinn 6: Koden og filene

Image
Image

Det finnes tre arkivfiler:

  • Weather station.zip: Arduino -koden, for å laste opp ved hjelp av Arduino IDE
  • Boite ecran.zip: CAD- og 3D -skriverfilene for saken
  • data.zip: filene som skal lastes opp i SPIFFS til ESP32.

Hvis du ikke vet hvordan du laster opp filer til ESP32s SPIFFS, kan du bare lese denne opplæringen, som presenterer en veldig nyttig plugin og hvordan du bruker den i Arduino IDE.

Dyp søvn -programmeringen er ganske forskjellig fra standard programmering av en Arduino. For ESP32 betyr det at ESP32 våkner og utfører oppsettet og deretter går i dvale. Så sløyfefunksjonen er tom og blir aldri utført.

Noen initialiseringsfaser må bare kjøres en gang ved den første kjøringen (for eksempel å få tiden, værdataene, sitatene osv.), Så ESP32 trenger å vite om den nåværende oppvåkningen er den første eller ikke: for det må løsningen er å lagre en variabel i RTC RAM (som forblir aktiv selv under dype søvnfaser) som økes ved hver oppvåkning. Hvis det er lik 1, er det den første kjøringen og ESP32 kjører initialiseringsfasen, ellers hoppes denne fasen over.

For å vekke ESP32, er det flere muligheter:

  • Timer wake-up: koden beregner varigheten av dyp søvn før du går i dvale. Dette brukes til å oppdatere tiden (hver 1, 2, 3 eller 5 minutter) eller værdataene (hver 3. eller 4. time) for sitatene og helgenen for dagen (hver 24. time)
  • Avbryt vekking: akselerometeret sender et signal som brukes til å vekke ESP32. Dette brukes til å oppdage en retningsendring og oppdatere skjermene
  • Berøringssensor vekker: ESP32 er utstyrt med flere pinner som fungerer som berøringssensorer, men de kan ikke brukes med timer-vekking, så jeg brukte ikke dette.

Det er andre programmeringstriks andre steder i koden, for å holde tiden nøyaktig mens du sparer energi (dvs. ikke koble til NTP -serveren hvert minutt), for å fjerne aksenter som ikke støttes av Adafruit GFX -biblioteket, for å unngå å oppdatere en visning hvis det er ikke nødvendig, for å stille inn akselerometerparametrene spesielt for avbruddsvekking, nøyaktig beregne tid til å sove i tilfelle timer-vekking, unngå å bruke seriekonsollen hvis den ikke er koblet til IDE (for å spare energi igjen), koble fra wifi når det ikke trengs osv … og koden er full av kommentarer som hjelper til med å forstå funksjonene.

Takk for at du leser denne Instructable (min aller første). Jeg håper du liker det og liker å lage denne værstasjonen

Sensorkonkurranse
Sensorkonkurranse

Andreplass i sensorkonkurransen

Anbefalt: