Innholdsfortegnelse:
- Trinn 1: Drift av værstasjonen
- Trinn 2: Første versjoner
- Trinn 3: Bygg en vellykket værstasjon
- Trinn 4: Maskinvareliste
- Trinn 5: Montering
- Trinn 6: Case Design
- Trinn 7: Programvare
- Trinn 8: Versjon 2 (ESP32 -basert)
Video: NaTaLia værstasjon: Arduino solcelledrevet værstasjon gjort den riktige måten: 8 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Etter 1 års vellykket drift på 2 forskjellige steder deler jeg mine prosjekteringsplaner for solcelledrevne værstasjoner og forklarer hvordan det utviklet seg til et system som virkelig kan overleve over lange tidsperioder fra solenergi. Hvis du følger instruksjonene mine og bruker nøyaktig de samme materialene som nevnt, kan du bygge en solcelledrevet værstasjon som vil fungere i mange år. Faktisk er den eneste faktoren som begrenser hvor lenge det vil gå, batteriets levetid det du bruker.
Trinn 1: Drift av værstasjonen
1, sender: Utendørs montert boks med solcellepanel som sender værtelemetri (temperatur, fuktighet, varmeindeks, solstyrke) med jevne mellomrom til innendørs mottakerenhet.
2, mottaker: Innendørs enhet laget av en Raspberry PI 2 + Arduino Mega med en 433 Mhz RF -mottaker tilkoblet for datamottak. I mitt oppsett har denne enheten ingen lokal LCD -skjermfunksjonalitet. Det går hensynsløst. Et hoved C -program tar seg av å motta innkommende data fra Arduino gjennom serien, deretter logger dataene inn i en tekstfil og gjør de sist mottatte dataene tilgjengelige via telnet for andre enheter for å spørre dem.
Stasjonen kontrollerer lys i hjemmet mitt ved lesing av fotoresistor (som avgjør om det er dag eller natt ute). Mottakeren er hodeløs i mitt tilfelle, men du kan enkelt endre prosjektet for å legge til en LCD -skjerm. En av enheten som bruker, analyserer og viser værdataene fra stasjonen, er mitt andre prosjekt: Ironforge NetBSD Toaster.
Trinn 2: Første versjoner
Det er mange solprosjekter på nettet, men mange av dem begår den vanlige feilen at systemet tar ut mer energi fra batteriet over tid hva solcellepanelet kan fylle opp, spesielt i de grumsete, mørke vintermånedene.
Når du designer et solcelledrevet system er det eneste som betyr noe STRØMFORBRUK, på alle komponenter: mcu, radiosender, spenningsregulator etc.
Å bruke en stor datamaskin som en bringebær pi eller strømhungrig wifi -enhet som ESP bare for å samle og transportere noen biter værdata ville være en overkill, men som jeg vil vise det i denne opplæringen er selv et lite Arduino -bord.
Det beste er alltid å måle strøm under byggeprosessen din med en meter eller med et omfang (nyttig når du prøver å måle små pigger i bruken under operasjonen i svært korte tidsperioder (millisekunder)).
På det første bildet kan du se min første (Arduino Nano Based) stasjon og det andre Arduino Barebone Atmega 328P -kortet.
Den første versjonen, selv om den fungerte perfekt (overvåking av miljø og sending av data via radio) hadde for høyt strømforbruk ~ 46mA og tømte batteriet på noen få uker.
Alle versjonene brukte følgende batteri:
18650 6000mAh beskyttet Li-ion oppladbart batteri Innebygd beskyttelseskort
OPPDATER på disse ScamFire -batteriene. Selv om dette er en ganske gammel instruks, følte jeg meg fortsatt tvunget til å korrigere det på grunn av dette falske batteriet. Ikke kjøp det nevnte batteriet, gjør din egen forskning om andre LION/LIPO -batterier, alle 3,7V batterier vil fungere med dette prosjektet.
Til slutt hadde jeg tid til å avlaste ScamFire -batteriet for å se hva det er ekte kapasitet på. Derfor vil vi kjøre 2 beregninger side om side med den virkelige og den "annonserte" kapasiteten.
Først av alt er det en ting at dette batteriet er falskt og ingenting det de påstår om det er sant, de nye versjonene er enda verre, de kopierte falsen med å forlate 2 cent beskyttelseskretsen, så ingenting vil stoppe dem å tømme ned til null.
En liten artikkel om LION/LIPO-batterier:
TLDR:
Hva dette betyr er at cellens maksimal spenning er 4,2v og at den "nominelle" (gjennomsnittlige) spenningen er 3,7V.
Her er for eksempel en profil av spenningen for et 'klassisk' 3,7V/4,2V batteri. Spenningen starter på maksimalt 4,2 og faller raskt ned til omtrent 3,7V i størstedelen av batterilevetiden. Når du treffer 3.4V er batteriet dødt, og ved 3.0V kobler strømkretsen fra batteriet.
Mine målinger ved hjelp av en dummy -last:
Batteri ladet: 4,1V
Cutoff satt til: 3.4V
Lastsimulering: 0.15A (enheten min hadde litt problemer med å gå lavere enn dette.)
Målt kapasitet: 0,77 Ah gi den en gratis 0,8 Ah som er 800mAh i stedet for den annonserte 6000mAh!
Siden dette batteriet ikke engang hadde beskyttelseskretsen, kunne jeg fritt gå lavere, men ved 3,4V etter 10 minutter krasjer det allerede ned til 3,0V.
Derfor gir batteriet med enkle beregninger:
Teoretisk
Batterispenning = 3,7V
Effekt = 3,7x6000 = 22000 mWh
Ekte
Batterispenning = 3.7V Strøm = 3.7x800 = 2960 mWh
Versjon: 0.1 ARDUINO NANO BASED
Selv med LowPower -biblioteket bruker en Arduino nano ~ 16 mA (i hvilemodus) -> FAIL.
Teoretisk
Pavg = VxIavg = 5Vx16mA = 80 mW
Batterilevetid = 22000/80 = 275 timer = 11 dager ca.
RealPavg = VxIavg = 5Vx16mA = 80 mW
Batterilevetid = 800/80 = 10 timer
Versjon: 0.2 Atmega 328P Barebone
Strømmen som forbrukes av en ATmega328 avhenger mye av hva du gjør med den. Bare sitter der i en standardtilstand, kan den bruke 16mA @ 5V mens den kjører på 16MHz.
Når ATmega328P er i aktiv modus, vil den kontinuerlig utføre flere millioner instruksjoner per sekund. Videre innebygd kringutstyr Analog til digital omformer (ADC), Serielt perifert grensesnitt (SPI), Timer 0, 1, 2, Two Wire Interface (I2C), USART, Watchdog Timer (WDT) og Brown-out Detection (BOD) bruker strøm.
For å spare strøm støtter ATmega328P MCU en rekke hvilemoduser og ubrukte eksterne enheter kan slås av. Søvnmodusene er forskjellige i hvilke deler som forblir aktive, etter søvnvarigheten og tiden som trengs for å våkne (våkneperiode). Dvalemodus og aktive eksterne enheter kan styres med AVR-søvn- og strømbibliotekene, eller mer presist, med det utmerkede Low-Power-biblioteket.
Low-Power-biblioteket er enkelt å bruke, men veldig kraftig. Erklæringen LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); setter MCU i SLEEP_MODE_PWR_DOWN i 16 ms til 8 s, avhengig av det første argumentet. Det deaktiverer ADC og BOD. Slåttilstand betyr at alle chipfunksjoner er deaktivert til neste avbrudd. Videre stoppes den eksterne oscillatoren. Bare nivåavbrudd på INT1 og INT2, pin -endringsavbrudd, TWI/I2C -adressematch, eller WDT, hvis aktivert, kan vekke MCU -en. Så med den ene uttalelsen vil du minimere energiforbruket. For en 3,3 V Pro Mini uten strøm -LED og uten regulator (se nedenfor) som kjører uttalelsen, er energiforbruket 4,5 μA. Det er veldig nær det som er nevnt i ATmega328P-databladet for nedkoblet søvn med WDT aktivert på 4,2 μA (datablad koblet til kilder). Derfor er jeg ganske sikker på at powerDown -funksjonen slår av alt som er rimelig mulig. Med utsagnet LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);, vil WDT bli deaktivert, og du vil ikke våkne før et avbrudd er utløst.
Så med barebone -oppsettet kan vi sette brikken i hvilemodus i 5 minutter, mens den bruker svært lite energi (0,04 mA uten periferiutstyr). Dette er imidlertid bare Atmega 328P -brikken med krystalloscillatoren og ingenting annet, spenningsforsterkeren som brukes i denne konfigurasjonen for å øke batterispenningen fra 3,7V -> 5,0 V bruker også 0,01 mA.
Et konstant spenningsavløp var den ekstra fotomotstanden som økte forbruket i hvilemodus til totalt 1 mA (dette inkluderer alle komponentene).
Formelen for å beregne det presise forbruket for enheten i både dvalemodus og vekking er:
Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)
Ion = 13mA
Dette kommer stort sett fra RF433 Mhz -senderen:
Sender:
Arbeidsspenning: 3V - 12V for maks. strømbruk 12V Arbeidsstrøm: maks Mindre enn 40mA maks, og min 9mA Resonansmodus: (SAW) Modulasjonsmodus: ASK Arbeidsfrekvens: Eve 315MHz Eller 433MHz Overføringseffekt: 25mW (315MHz ved 12V) Frekvensfeil: +150kHz (maks) Hastighet: mindre enn 10Kbps
Sover = 1mA
Ville vært betydelig mindre uten fotoresistor.
Trunontid Ton = 250 mS = 0,25s
Sovetid Tsleep = 5 min = 300s
Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)
Iavg = (0,25s*13mA + 300s*1mA) / (0,25s + 300s)
Iavg = 1,26mA
Pavg = VxIavg = 5Vx1,26mA = 6 mW
Teoretisk
Batterilevetid = 22000mWh/6mW = 3666 timer = 152 dager ca.
Ekte
Batterilevetid = 800mWh/6mW = 133 timer = 5,5 dager ca.
Selv om disse fremdeles var en bedre UltraFire -serie, så kunne jeg se at uten prosjektet eller det lave forbruket på 1 mA ville dette prosjektet ikke overleve lenge.
Bygg gjerne stasjonen og skriv ned funnene og beregningene dine til kommentarene, så oppdaterer jeg artikkelen. Jeg vil også sette pris på resultater med forskjellige MCUer og boost -omformere.
Trinn 3: Bygg en vellykket værstasjon
Selv om det er den første vellykkede versjonen, inneholder den en liten feil på bildene, og jeg kan ikke lage dem på nytt fordi stasjonene allerede er distribuert. De to spenningsforsterkere som vises på bildet er tilgjengelige i skrivende stund for flymodellering og andre applikasjoner. Da jeg redesignet stasjonen min, tenkte jeg på å få et mindre og mer effektivt spenningskort, men mindre i størrelse betyr definitivt ikke at det er mer effektivt.
Den nye lille modulen på bildet som ikke engang har en indikator -ledning, drenerte faktisk 3mA (*FAIL*) av seg selv, så jeg ble med det gamle brettet mitt:
PFM-kontroll DC-DC USB 0,9V-5V til 5V dc Boost Step-up strømforsyningsmodul
I skrivende stund er denne modulen fortsatt tilgjengelig på Ebay for 99 cent, men hvis du bestemmer deg for å bruke en annen booster, må du alltid kontrollere strømforbruket i standby. Med en forsterker av god kvalitet bør den ikke være mer enn min (0,01 mA), selv om den lille LED-en om bord måtte avloddes.
Trinn 4: Maskinvareliste
- 18650 6000mAh beskyttet Li-ion oppladbart batteri Innebygd beskyttelseskort
- Atmega 328P16M 5V med bootloader
- Adafruit DC Boarduino (Arduino -kompatibelt) sett (m/ATmega328) <dette kommer til å bli en god investering hvis du gjør fremtidige barebone -prosjekter
- Foto Lys Sensitiv Motstand Fotoresistor Optoresistor 5mm GL5539
- 1A 1000V Diode 1N4007 IN4007 DO-41 likeretterdioder
- PFM-kontroll DC-DC USB 0,9V-5V til 5V dc Boost Step-up strømforsyningsmodul
- 1.6W 5.5V 266mA Mini Solar Panel Module System Epoxy Cell Charger DIY
- TP405 5V Mini USB 1A litiumbatteriladerkortmodul
- 433Mhz RF sender og mottaker lenksett for Arduino/ARM/MC fjernkontroll <Kit, inneholder både sender og reveiver
- IP65 bryterbeskyttelse koblingsboks utendørs vanntett kabinett 150x110x70mm
- Ny DHT22 temperatur- og relativ fuktighetssensormodul for Arduino
- 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini -bryter, 1x1N4007diode
- Adafruit 16 MHz keramisk resonator / oscillator [ADA1873]
- Arduino UNO/Mega etc for mottakerstasjon + Raspberry PI 1/2/3
- Klar akryl plastboks (valgfritt)
Du finner alle disse på Ebay, jeg vil ikke markedsføre noen selgere ved å koble til sidene deres, og koblingene vil uansett bli døde i fremtiden.
Merknader for maskinvarelisten:
Bare hvis du murer Atmega på en eller annen måte med programmering, kjøper du flere av dem, det samme gjelder spenningsforsterkeren og solcellekontrollen.
Solladeren inneholder 2 små fargeglass som bare slås på ved solladning og indikerer (rød-> lading, blå-> fulladet tilstand). Disse kan også være ulodde. Det gir heller litt mer ekstra juice til batteriet under lading.
Som du ser er det ingen batteriholdere på listen min. Hvorfor? Fordi de er upålitelige. Jeg hadde utallige anledninger da batteriet flyttet ut fra holderen og mistet tilkoblingen. Spesielt hvis oppsettet ditt er montert på en høy tallerkenstang som min, åpen for tøffe værforhold. Jeg zippet til og med batteriet inn i holderen med 2 glidelåser, og det klarte fortsatt å bevege seg ut. Ikke gjør det, bare fjern det ytre belegget fra batteriet og lodd ledningene direkte i bunnen av batteriet, som inneholder overladningsbeskyttelseskretsen (ikke omgå beskyttelsen). En batteriholder kan bare brukes til å holde batteriet på plass i enheten.
TP405 5V Mini USB 1A litiumbatteriladningskort: dessverre inkluderer dette kortet ikke motstrømsbeskyttelse til solcellepanelet, for dette trenger du 1 diode til for å plasseres mellom det ene benet på solcellepanelet og ladekretsen for å stoppe strømforsøket å strømme tilbake til solcellepanelet om nettene.
Trinn 5: Montering
Dette brettet inneholder relativt få komponenter, og markørene på brettet er ganske enkle.
Sørg for at du IKKE setter inn Atmega328P på feil måte (som kan varme opp og mure brikken, kan også ødelegge spenningsforsterkeren).
I dette oppsettet vender brikken ned (liten U1 -hullmarkering PIN1). Alle de andre komponentene skal være åpenbare.
Bruk skjermet kabel (f.eks.: Lydkabel fra CDrom vil gjøre det bra) for LDR. I noen tilfeller (over mange ukers test) viste det seg at det forstyrrer radiosignaloverføringen. Dette var en av disse feilene som er vanskelig å feilsøke, så hvis du ikke vil ha problemer, bare bruk en skjermet kabel, slutten av historien.
LED: LED -en på bunnen av esken ble opprinnelig lagt til for å blinke når det er utgående radiooverføring, men senere har jeg betraktet det som sløsing med strøm, og det blinker bare 3 ganger ved oppstartsprosessen.
TP: er testpunkt for måling av strømmen for den totale kretsen.
DHT22: Ikke kjøp den billige DHT11, bruk 50 cent mer for å få den hvite DHT22 som også kan måle negative temperaturer.
Trinn 6: Case Design
Selv om det er litt av en overkill, ble en 3D -trykt kube (weather_cube) laget for å holde DHT22 temperatursensoren på plass. Kuben er limt til bunnen av IP -boksen, og har bare 1 hull for at luften skal nå sensoren. Jeg har lagt til et garn ved hullet mot bier, veps og andre små fluer.
En ekstern boks kan eventuelt brukes til å gjøre stasjonen mer vanntett hvis du monterer den på en oppvaskstang på det åpne.
Idee til én nyttig funksjon: å legge til en stor metalltakplate 1-2 cm på toppen av esken som gir skygge fra solen om sommeren, selv om dette også kan ta bort vårt nyttige sollys fra panelet. Du kan komme med et design som skiller panelet og esken (forlater panelet på solen, boksen i skyggen).
På bildene: en av stasjonene fjernet fra arbeidsmiljøet etter 1 år, batterispenningen er på forbløffende 3,9V fortsatt, ingen vannskade på noen del av esken, selv om nettet jeg limte i bunnen av kuben ble revet fra hverandre. Grunnen til at stasjonen måtte betjenes er tilkoblingsfeil på LDR -kontakten, selv om startkabelen så ut til å være på plass, var tilkoblingen brutt, derfor var pinnen noen ganger flytende og ga dårlige LDR -analoge avlesninger. Forslag: Hvis du bruker standard PC -jumperkabler, limer du dem alle etter at stasjonen fungerer perfekt for å unngå dette.
Trinn 7: Programvare
Programvarekoden krever 3 eksterne biblioteker (LowPower, DHT, VirtualWire). Jeg hadde problemer med å finne noen av dem lett online i det siste, så jeg legger ved dem i en egen ZIP -fil. Uansett hvilket operativsystem du bruker Linux/Windows, er det bare å finne Arduino IDEs bibliotekmappe og pakke dem ut der.
Bare et notat, uansett at jeg allerede fraråder å kjøpe DHT11, hvis du bruker feil type DHT -sensor, vil programmet bare henge for alltid i begynnelsen ved initialiseringsdelen (du vil ikke engang se oppstartslampen blinke 3 ganger).
Hovedløyfekoden er veldig enkel, først leser den miljøverdiene (temperatur, varmeindeks, fuktighet, sol), sender dem gjennom radio, deretter bruker den lavmaktbiblioteket til å sette Arduino i dvale i 5 minutter.
Jeg har funnet ut at senking av baudhastigheten vil øke stabiliteten til radiooverføringene. Stasjonen sender en veldig liten mengde data, 300 bps er mer enn nok. Ikke glem at senderen bare opererer fra ca. 4.8V, i fremtiden 3.3V -versjon kan dette føre til enda dårligere overføringskvalitet (sende data gjennom vegger og andre hindringer). Jeg støter på et problem med å bruke en Arduino Mega festet til en Raspberry PI 2 som driver Mega fra PI, at jeg ikke mottok noen overføring. Løsningen var å drive Mega fra en separat ekstern 12V -forsyning.
Trinn 8: Versjon 2 (ESP32 -basert)
Alt som kan gå i stykker, vil bryte for å sitere gode gamle Murphy, og etter hvert mislyktes stasjonene på mystiske måter. En begynte å sende gibberish soldata som gikk opp til titusenvis, noe som er umulig på grunn av: Arduino-kortet inneholder en 6-kanals (8 kanaler på Mini og Nano, 16 på Mega), 10-bits analog til digital omformer. Dette betyr at den vil kartlegge inngangsspenninger mellom 0 og 5 volt til heltallsverdier mellom 0 og 1023. Så etter å ha byttet radio, LDR og omprogrammert Atmega 328P flere ganger ga jeg opp og bestemte meg for at det var på tide med innovasjon. La oss gå ESP32.
Brettet jeg brukte var et: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi & Bluetooth Card Rev1 MicroPython 4MB FLASH
wiki.wemos.cc/products:lolin32:lolin32_lit…
Mikrokontroller ESP-32
Driftsspenning 3.3V Digitale I/O -pinner 19 Analoge inngangspinner 6 Klokkehastighet (maks) 240Mhz Flash 4M byte Lengde 5mm Bredde 2.54mm Vekt 4g
Som i motsetning til bildet ikke har LOLIN -logoen (forfalsket fra Kina). Min første hyggelige overraskelse var at pinout trykt på brettet passet med Arduino pinout! Etter å ha håndtert så mange noname -tavler der jeg måtte lete etter pinouts hele dagen, var jeg lei trett og gjorde feil endelig et brett der pinout er rett frem WoW!
Men her er den mørke siden av historien:
I utgangspunktet har jeg koblet LDR til A15 som er pin 12 fordi det var lettere å lime pinnene sammen. Så har jeg 4095 avlesninger (som er det maksimale du kan få med AnlogRead på ESP32) som gjorde meg gal fordi hele grunnen til at jeg bygde om stasjonen var de ødelagte LDR -avlesningene fra den gamle (DHT fungerte fortsatt bra). Så det viser seg at:
Esp 32 integrerer to 12-biters ACD-registre. ADC1 med 8 kanaler festet til GPIO 32-39 og ADC2 med 10 kanaler i en annen pinne. Saken er at ESP32 bruker ADC2 til å administrere wifi -funksjoner, så hvis du bruker Wifi, kan du ikke bruke det registret. ADC driver API støtter ADC1 (8 kanaler, knyttet til GPIO 32 - 39) og ADC2 (10 kanaler, knyttet til GPIO 0, 2, 4, 12 - 15 og 25 - 27). Imidlertid har bruken av ADC2 noen begrensninger for applikasjonen:
ADC2 brukes av Wi-Fi-driveren. Derfor kan programmet bare bruke ADC2 når Wi-Fi-driveren ikke har startet. Noen av ADC2 -pinnene brukes som stroppestifter (GPIO 0, 2, 15) og kan derfor ikke brukes fritt. Slik er tilfellet i følgende offisielle utviklingssett:
Så å koble LDR fra pin 12 til A0, som er VP, løste alt, men jeg forstår det ikke, hvorfor viser de til og med ADC2 -pins som tilgjengelige for beslutningstakere. Hvor mange andre hobbister kastet bort massevis av tid på å finne ut av dette? Merk i det minste de ubrukelige pinnene med rødt eller noe eller ikke nevne det i manualen i det hele tatt, så andre produsenter kan bare finne ut om dem hvis de virkelig trenger dem. Hele formålet med ESP32 er å bruke den med WIFI, alle bruker den med WIFI.
En god start på hvordan du konfigurerer Arduino IDE for dette brettet:
Selv om jeg legger det inn i koden her, går det nok en gang:
Det er ikke sikkert at denne koden kompileres for andre ESP32 -modeller enn Weemos LOLIN 32!
Bygg innstillinger: -Bruk opplasting/seriell: 115200 -Bruk CPU/ram: 240Mhz (Wifi | BT) -Bruk flashfrekvens: 80 Mhz
Det er tonnevis med ESP32 -baserte værstasjoner på nettet, de er langt mer alminnelige enn min versjon 1 var med barebone -brikken fordi de er enklere å sette opp, du trenger ikke programmerer, bare plugg inn enheten på usb og programmer den og deres dyp dvalemodus er utmerket for lang tid med batteri. Rett utenfor flaggermuset var dette det aller første jeg testet selv før jeg loddet i breakout -pinnene, for som jeg noterte flere steder i dette prosjektet, er det viktigste det er strømforbruket og med det nåværende (falske) batteriet og det lille solcellepanelet i standby strøm kan egentlig ikke gå over 1-2mAs ellers vil ikke prosjektet kunne opprettholde seg selv på lang sikt.
Det var en hyggelig overraskelse igjen at dyp dvalemodus fungerer som annonsert. Under den dype søvnen var strømmen så lav at min billige multimeter ikke engang kunne måle den (fungerer for meg).
Under sending av data var strømmen rundt 80mA (som er omtrent 5 ganger mer enn da Atmega 328P våknet og sendte), men ikke glem at med V1 var det et gjennomsnittlig 1mA strømuttap på LDR i hvilemodus (som også var avhengig av lysnivåene og gikk fra 0,5mA - 1mA) som nå er borte.
Nå som UltraFire -batteriet debunkes hvis du bruker det samme batteriet, kan du forvente dette:
Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)
Iavg = (2s*80mA + 300s*0.01mA) / (2s + 300s) Iavg = 0.5mA
Pavg = VxIavg = 5Vx0.5mA = 2,5 mW
Teoretisk
Batterilevetid = 22000mWh/2,5mW = 8800 timer = 366 dager ca.
Ekte
Batterilevetid = 800mWh/2,5mW = 320 timer = 13 dager ca
Jeg hadde ikke et omfang for å måle nøyaktig svingen i tide, men med mine tweaks topper det rundt 2 sekunder.
Jeg ville ikke bruke ettermiddagen på tilpasset koding av alt, så jeg lette etter noen andre værstasjoner på Instructables basert på ESP32 for å se hva de gjør for datalagring. Legg dessverre merke til at de bruker ufleksible og begrensede nettsteder som weathercloud. Ettersom jeg ikke er fan av "skyen" og koden deres lenge brøt fordi siden har endret API -et siden den gang, har jeg tatt meg 10 minutter på å lage en tilpasset løsning fordi det ikke er så vanskelig som man kanskje tror. La oss komme i gang!
Først av alt er det ikke noe kretskort -bilde separat for dette prosjektet, fordi det bruker nøyaktig de samme komponentene (beklager det loddet i stygt brødbrettbilde) som V1 med forskjellen på at alt går av med 3.3V. DHT koblet til med en pullup til VCC, LDR trakk ned med en 10k. Problemet man kan se med 18650 -batteriene som min kinesiske falske (6500 mAh ultra solbrann lol: D) er at de starter utladningskurven fra rundt 4,1V ny alder og går til avbruddskretsen starter for å stoppe celleskader (de som er så heldige å ha det). Dette er ingen steder bra for oss som 3,3V inngang. Selv om dette LOLIN -kortet har en litiumbatterikontakt og ladekrets i dette prosjektet, ønsket jeg å pusse opp det jeg kunne fra den gamle stasjonen, så med den gamle 18650 kan du IKKE bruke denne innebygde laderen. Løsningen var død enkel: Jeg kuttet av en mikro -USB -kabel loddet inn i 5V ut av den gamle spenningsforsterkeren og voila -problemet løst, siden kortet på microUSB har regulator.
Så forskjellen mellom den gamle og nye versjonen som i det gamle batteriet gir 3,7V -> boostet til 5V -> ardu kjører på 5V -> alle komponenter kjører på 5V.
I den nye: batteriet gir 3,7V -> boostet til 5V -> regulert via innebygd reg på ESP32 -> alle komponentene kjører på 3,3V.
Programvaremessig trenger vi også et annet DHT -bibliotek. Arduino's DHT er ikke kompatibel med ESP -er. Det vi trenger kalles DHT ESP.
Jeg begynte å basere koden min rundt DHT -eksemplet denne koden ga. Koden fungerer:
1, Få miljødataene fra DHT + Solar -dataene fra fotocellen
2, Koble til wifi med statisk IP
3, POST dataene til et php -skript
4, sov i 10 minutter
Som du vil legge merke til, stemte jeg koden for effektivitet for absolutt å minimere oppvåkningstiden siden den tapper 5 ganger mer strøm enn det gamle prosjektet gjorde da den ble slått på. Hvordan gjorde jeg dette? Først av alt, hvis det er noen form for feil, kommer funksjonen getTemperature () tilbake med false (som betyr 10 minutter søvn igjen). Dette kan være som om DHT -sensoren ikke kan startes eller at wifi -tilkoblingen ikke er tilgjengelig. Som du legger merke til, ble den vanlige while () -sløyfen for å prøve å prøve wifi -forbindelsen for alltid også fjernet, men en forsinkelse på 1 sekund måtte være der inne, ellers vil den ikke alltid koble seg til, og det avhenger også av AP -typen, belastningen osv. Hvor fort den er vil skje, med 0,5 sekunder fikk jeg inkonsekvent oppførsel (noen ganger kunne den ikke koble til). Hvis noen vet en bedre måte å gjøre dette på, vennligst legg igjen det i kommentarene. Først når DHT -dataene leses OG wifi -tilkoblingen er opp, vil den prøve å legge dataene til skriptet på webserveren. Alle typer tidsavfallsfunksjoner som Serial.println () er også deaktivert i normal driftsmodus. Som server bruker jeg også IP for å unngå unødvendig DNS -oppslag, i koden min er både standard gateway og dns server satt til 0.0.0.0.
Jeg forstår ikke hvorfor det er så vanskelig å lage ditt eget API når alt som trengs er:
sprintf (svar, "temp =%d & hum =%d & hi =%d & sol =%d", temp, hum, hei, sol);
int httpResponseCode = http. POST (respons);
Du legger denne lille php -koden til hvilken som helst bringebær pi, og du kan gjøre system () oppgaver med en gang basert på telemetrien som å slå på vifter eller slå på lysene hvis det blir mørkt nok.
Noen notater om koden:
WiFi.config (staticIP, gateway, subnet, dns); // MÅ være etter at Wifi begynner hvor dumt …
WiFi.mode (WIFI_STA); // MÅ ellers opprette et uønsket AP
Ja, nå vet du. Også rekkefølgen på IP -konfigurasjonene kan endres gjennom plattformer, jeg prøvde andre eksempler først der gateway- og delnettverdiene ble byttet. Hvorfor angi statisk IP? Det er ganske åpenbart, hvis du har en dedikert boks på nettverket ditt som en linux -server som kjører isc dhcpd, vil du ikke ha hundre millioner loggoppføringer fra når ESP våkner og får IP -en fra DHCP. Rutere logger vanligvis ikke assosiasjoner, så det blir usett. Dette er prisen for å spare strøm.
V2 klarte aldri å opprettholde seg selv på grunn av batteriet av dårlig kvalitet, og jeg har ganske enkelt lagt det på en adapter, så hvis du vil bygge enten V1 eller V2, IKKE kjøp det nevnte batteriet, gjør din egen forskning på batterier (noen 18650 over 2000mAh annonsert kapasitet på Ebay er en svindel med stor sannsynlighet).
Anbefalt:
Den riktige representanten: 16 trinn
Den riktige representanten: "Løfter du Bro?" For nybegynnere på treningsstudio kan det være en skremmende oppgave å lære å løfte. Øvelsene føles unaturlige, og hver representant føler seg mislykket. For å gjøre situasjonen verre, blir tilskuerne smertende og stirrer på de stakkars
ESP32 Værstasjon Solcelledrevet: 9 trinn
ESP32 Weather Station Solar Powered: I denne opplæringen skal vi bygge et WiFi -aktivert værstasjonsprosjekt. Målet er å designe værstasjon med nesten alle mulige fjærer: Vis nåværende forhold, tid, temperatur, fuktighet, trykk Vis prognose for neste da
Kontrollere Arduino med HTML/Javascript på den enkle måten: 8 trinn
Kontrollere Arduino med HTML/Javascript på den enkle måten: Denne opplæringen viser deg hvordan du styrer en arduino med et ajax -anrop tilbake fra en adafruit Huzzah ved å bare bruke javascript -funksjoner. I utgangspunktet kan du bruke javascript på html -siden som lar deg enkelt skrive html -grensesnitt med enkle j
Breadboard Arduino den riktige måten: 5 trinn (med bilder)
Breadboard Arduino den riktige måten: Det er bokstavelig talt hundrevis av Breadboard Arduinos der ute, så hva er annerledes med denne? Vel, det er flere ting som de fleste av dem og faktisk til og med Arduino selv ikke gjør riktig. Først og fremst er den analoge forsyningen knyttet til
Kopier dine gamle lysbilder på den enkle måten !: 8 trinn (med bilder)
Kopier dine gamle lysbilder på den enkle måten !: Jeg har mange lysbilder fra år siden og har hatt glede av å se dem fra tid til annen. Men jeg kom alltid bort og skulle ønske jeg hadde dem på plate, en CD, Flash -stasjon eller hva som helst slik at jeg kunne se dem oftere. I de dager var lysbilder mye billigere enn