Innehållsförteckning:

NaTaLia Weather Station: Arduino Solar Powered Weather Station Gjord på rätt sätt: 8 steg (med bilder)
NaTaLia Weather Station: Arduino Solar Powered Weather Station Gjord på rätt sätt: 8 steg (med bilder)

Video: NaTaLia Weather Station: Arduino Solar Powered Weather Station Gjord på rätt sätt: 8 steg (med bilder)

Video: NaTaLia Weather Station: Arduino Solar Powered Weather Station Gjord på rätt sätt: 8 steg (med bilder)
Video: High Density 2022 2024, Juli
Anonim
NaTaLia Väderstation: Arduino Solar Powered Weather Station Gjord på rätt sätt
NaTaLia Väderstation: Arduino Solar Powered Weather Station Gjord på rätt sätt
NaTaLia Väderstation: Arduino soldriven väderstation gjort på rätt sätt
NaTaLia Väderstation: Arduino soldriven väderstation gjort på rätt sätt

Efter 1 års framgångsrik drift på 2 olika platser delar jag med mig av mina solcellsdrivna väderstationsprojektplaner och förklarar hur det utvecklades till ett system som verkligen kan överleva under långa tidsperioder från solenergi. Om du följer mina instruktioner och använder exakt samma material som anges kan du bygga en soldriven väderstation som kommer att fungera i många år. Egentligen är den enda faktorn som begränsar hur länge det kommer att driva batteriets livslängd det du använder.

Steg 1: Väderstationens drift

1, sändare: Utomhusmonterad låda med solpanel som regelbundet skickar vädertelemetri (temperatur, luftfuktighet, värmeindex, solstyrka) till inomhusmottagarenheten.

2, mottagare: Inomhusenhet tillverkad av en Raspberry PI 2 + Arduino Mega med en 433 Mhz RF -mottagare ansluten för datamottagning. I min inställning har denna enhet ingen lokal LCD -skärmfunktion. Det går obehagligt. Ett huvud C -program tar hand om att ta emot inkommande data från Arduino via serien, sedan logga in data i en textfil och göra den senast mottagna data tillgänglig via telnet för andra enheter för att fråga den.

Stationen styr ljus i mitt hem genom att läsa av fotoresistor (som avgör om det är dag eller natt ute). Mottagaren är huvudlös i mitt fall men du kan enkelt ändra projektet för att lägga till en LCD -skärm. En av enheterna som använder, analyserar och visar väderdata från stationen är mitt andra projekt: Ironforge NetBSD Brödrost.

Steg 2: Första versionerna

Första versionerna
Första versionerna
Första versionerna
Första versionerna
Första versionerna
Första versionerna
Första versionerna
Första versionerna

Det finns många solprojekt på nätet men många av dem begår det vanliga misstaget att systemet tar ut mer energi från batteriet över tid vad solpanelen kan fylla på, särskilt under de grumliga, mörka vintermånaderna.

När du konstruerar ett soldrivet system är det enda som spelar roll strömförbrukning, på alla komponenter: mcu, radiosändare, spänningsregulator etc.

Att använda en stor dator som en hallon -pi eller strömhungrig wifi -enhet som ESP bara för att samla in och transportera några bitar väderdata skulle vara en överkillning, men som jag kommer att visa det i denna handledning är till och med ett litet Arduino -kort.

Det bästa är alltid att mäta ström under din byggprocess med en mätare eller med ett omfång (användbart när du försöker mäta små spikar i användningen under operationen på mycket korta tidsperioder (millisekunder)).

På den första bilden kan du se min första (Arduino Nano Based) station och den andra Arduino Barebone Atmega 328P -kortet.

Den första versionen, även om den fungerade perfekt (övervakning av miljö och sändning av data via radio) hade för hög strömförbrukning ~ 46mA och tömde batteriet på några veckor.

Alla versioner använde följande batteri:

18650 6000mAh Skyddat uppladdningsbart litiumjonbatteri Inbyggt skyddskort

UPPDATERA om dessa ScamFire -batterier. Även om detta är en ganska gammal instruerbar, kände jag mig fortfarande tvungen att korrigera det på grund av detta falska batteri. Köp INTE det nämnda batteriet, gör din egen forskning om andra LION/LIPO -batterier, alla 3,7V batterier fungerar med detta projekt.

Slutligen hade jag tid att debunk ScamFire -batteriet för att se vad det är verklig kapacitet. Därför kommer vi att köra två beräkningar sida vid sida med den verkliga och den "annonserade" kapaciteten.

Först och främst är det en sak att det här batteriet är falskt och ingenting som de påstår om det är sant, de nya versionerna är ännu värre, de kopierade falska med att lämna 2 cent -skyddskretsen så att inget hindrar dem från att ladda ner till noll.

En liten artikel om LION/LIPO-batterier:

TLDR:

Vad detta betyder är att cellens maximala spänning är 4,2v och att den "nominella" (genomsnittliga) spänningen är 3,7V.

Här är till exempel en profil över spänningen för ett "klassiskt" 3,7V/4,2V batteri. Spänningen börjar på 4,2 max och sjunker snabbt ner till cirka 3,7 V under större delen av batteriets livslängd. När du väl träffat 3.4V är batteriet urladdat och vid 3.0V kopplar strömbrytaren från batteriet.

Mina mätningar med en dummy -belastning:

Batteri laddat: 4,1V

Avstängning inställd på: 3,4V

Lastsimulering: 0.15A (min enhet hade lite problem med att gå lägre än så här.)

Uppmätt kapacitet: 0,77 Ah ge den en kostnadsfri 0,8 Ah vilket är 800mAh istället för den annonserade 6000mAh!

Eftersom detta batteri inte ens hade skyddskretsen kunde jag fritt gå ner men vid 3.4V efter 10 minuter kraschar det redan ner till 3.0V.

Därför ger batteriet med enkla beräkningar:

Teoretisk

Batterispänning = 3,7V

Effekt = 3,7x6000 = 22000 mWh

Verklig

Batterispänning = 3,7V Effekt = 3,7x800 = 2960 mWh

Version: 0.1 ARDUINO NANO BASED

Även med LowPower -biblioteket förbrukar en Arduino -nano ~ 16 mA (i viloläge) -> FAIL.

Teoretisk

Pavg = VxIavg = 5Vx16mA = 80 mW

Batteritid = 22000/80 = 275 timmar = 11 dagar ungefär

RealPavg = VxIavg = 5Vx16mA = 80 mW

Batteritid = 800/80 = 10 timmar

Version: 0.2 Atmega 328P Barebone

Strömmen som förbrukas av en ATmega328 beror mycket på vad du gör med den. Bara sitter där i ett standardläge, det kan använda 16mA @ 5V medan det körs på 16MHz.

När ATmega328P är i aktivt läge kommer den kontinuerligt att utföra flera miljoner instruktioner per sekund. Vidare inbyggda kringutrustning Analog to Digital Converter (ADC), Serial Peripheral Interface (SPI), Timer 0, 1, 2, Two Wire Interface (I2C), USART, Watchdog Timer (WDT) och Brown-out Detection (BOD) förbrukar ström.

För att spara ström stöder ATmega328P MCU ett antal vilolägen och oanvända kringutrustning kan stängas av. Vilolägena skiljer sig åt i vilka delar som förblir aktiva, beroende på sömnens varaktighet och den tid som krävs för att vakna (väckningsperiod). Viloläge och aktiva kringutrustning kan styras med AVR-sömn- och strömbibliotek eller, mer kortfattat, med det utmärkta Low-Power-biblioteket.

Low-Power-biblioteket är enkelt att använda men mycket kraftfullt. Påståendet LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); sätter MCU i SLEEP_MODE_PWR_DOWN i 16 ms till 8 s, beroende på det första argumentet. Det inaktiverar ADC och BOD. Stäng av viloläge innebär att alla chipfunktioner är inaktiverade till nästa avbrott. Vidare stoppas den externa oscillatorn. Endast nivåavbrott på INT1 och INT2, avbrott i stiftbyten, matchning av TWI/I2C -adress eller WDT, om den är aktiverad, kan väcka MCU: n. Så med det enda uttalandet kommer du att minimera energiförbrukningen. För en 3,3 V Pro Mini utan ström -LED och utan regulator (se nedan) som kör uttalandet är energiförbrukningen 4,5 μA. Det är mycket nära det som nämns i ATmega328P-databladet för avstängningssömn med WDT aktiverat på 4,2 μA (datablad länkat i källor). Därför är jag ganska säker på att PowerDown -funktionen stänger av allt som är rimligt möjligt. Med påståendet LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);, kommer WDT att inaktiveras och du skulle inte vakna förrän ett avbrott har utlösts.

Så med barebone -inställningen kan vi sätta chipet i viloläge i 5 minuter, samtidigt som det tar väldigt lite energi (0,04 mA utan kringutrustning). Detta är dock bara Atmega 328P -chipet med kristalloscillatorn och inget annat, spänningsförstärkaren som används i denna konfiguration för att öka batterispänningen från 3,7V -> 5,0 V förbrukar också 0,01 mA.

En konstant spänningsdränering var det extra fotomotståndet som höjde förbrukningen i viloläge till totalt 1 mA (detta inkluderar alla komponenter).

Formeln för att beräkna den exakta förbrukningen för enheten i både viloläge och väckningsläge är:

Iavg = (Ton*Ion + Tsleep*Isleep) / (Ton + Tsleep)

Jon = 13mA

Detta kommer mestadels från RF433 Mhz -sändaren:

Sändare:

Arbetsspänning: 3V - 12V för max. effektanvändning 12V Arbetsström: max Mindre än 40mA max och min 9mA Resonansläge: (SAW) Modulationsläge: ASK Arbetsfrekvens: Eve 315MHz Eller 433MHz Sändningseffekt: 25mW (315MHz vid 12V) Frekvensfel: +150kHz (max) Hastighet: mindre än 10Kbps

Sovande = 1mA

Skulle vara betydligt mindre utan fotoresistorn.

Trunontid Ton = 250 mS = 0,25s

Sovtid 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

Batteritid = 22000mWh/6mW = 3666 timmar = 152 dagar ungefär

Verklig

Batteritid = 800mWh/6mW = 133 timmar = 5,5 dagar ungefär

Även om dessa fortfarande var en bättre UltraFire -serie, vad jag använde från början så kunde man se att utan solpanelen eller den låga 1mA -förbrukningen skulle detta projekt inte överleva länge.

Bygg gärna stationen och skriv ner dina fynd och beräkningar till kommentarerna så uppdaterar jag artikeln. Jag skulle också uppskatta resultat med olika MCU: er och boost -omvandlare.

Steg 3: Bygga en framgångsrik väderstation

Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation
Bygga en framgångsrik väderstation

Även om det är den första framgångsrika versionen, innehåller den lite misslyckanden på bilderna och jag kan inte göra om dem eftersom stationerna redan är utplacerade. De två spänningsförstärkare som visas på bilden kan erhållas i skrivande stund för flygmodellering och andra applikationer. När jag gjorde om min station tänkte jag på att få en mindre och mer effektiv spänningskort, men mindre i storlek betyder definitivt inte att den är mer effektiv.

Den nya lilla modulen på bilden som inte ens har en indikatorlampa tömde faktiskt 3mA (*FAIL*) av sig själv, så jag stannade kvar på mitt gamla kort:

PFM-kontroll DC-DC USB 0,9V-5V till 5V dc Boost Step-up nätaggregat

I skrivande stund är denna modul fortfarande tillgänglig på Ebay för 99 cent, men om du bestämmer dig för att använda en annan booster, kontrollera alltid strömförbrukningen i vänteläge. Med en förstärkare av god kvalitet bör den inte vara mer än min (0,01 mA), även om den lilla lysdioden ombord måste avlödas.

Steg 4: Hårdvarulista

Maskinvarulista
Maskinvarulista
  • 18650 6000mAh Skyddat uppladdningsbart litiumjonbatteri Inbyggt skyddskort
  • Atmega 328P16M 5V med bootloader
  • Adafruit DC Boarduino (Arduino -kompatibelt) Kit (med ATmega328) <detta kommer att bli en bra investering om du gör framtida barebone -projekt
  • Fotoljuskänsligt motstånd Fotoresistor Optoresistor 5mm GL5539
  • 1A 1000V Diode 1N4007 IN4007 DO-41 Likriktardioder
  • PFM-kontroll DC-DC USB 0,9V-5V till 5V dc Boost Step-up nätaggregat
  • 1.6W 5.5V 266mA Mini Solar Panel Module System Epoxy Cell Charger DIY
  • TP405 5V Mini USB 1A Litiumbatteriladningsladdningsmodul
  • 433Mhz RF -sändare och mottagarlänk kit för Arduino/ARM/MC fjärrkontroll <Kit, innehåller både sändare och reveiver
  • IP65 Switch Protector Junction Box Utomhus Vattentät kapsling 150x110x70mm
  • Ny DHT22 temperatur- och relativ fuktighetssensormodul för Arduino
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini Switch, 1x1N4007diode
  • Adafruit 16 MHz keramisk resonator / oscillator [ADA1873]
  • Arduino UNO/Mega etc för mottagarstation + Raspberry PI 1/2/3
  • Klar akryl plastlåda (tillval)

Du hittar alla dessa på Ebay, jag vill inte marknadsföra några säljare genom att länka till deras sidor och länkarna kommer i alla fall att dö i framtiden.

Anmärkningar för maskinvarulistan:

Bara om du murar Atmega på något sätt med programmering köper fler av dem, samma sak gäller spänningsförstärkaren och solcellsstyrenheten.

Solcellsladdaren innehåller två små färg-lysdioder som bara tänds vid sol laddning och indikerar (röd-> laddning, blå-> fulladdat tillstånd). Dessa kan också vara lödda. Det ger snarare lite mer extra juice till batteriet under laddning.

Som du ser finns det inga batterihållare på min lista. Varför? För att de är opålitliga. Jag hade otaliga tillfällen när batteriet flyttade ut ur hållaren och tappade anslutningen. Speciellt om din installation är monterad på en hög tallriksstång som min, öppen för tuffa väderförhållanden. Jag zippade till och med batteriet i hållaren med 2 blixtlås och det lyckades fortfarande röra sig. Gör inte det, ta bara bort den yttre beläggningen från batteriet och löd ledningarna direkt i botten av batteriet, som innehåller överladdningsskyddskretsen (förbikoppla inte skyddet). En batterihållare kan endast användas för att hålla batteriet på plats i enheten.

TP405 5V Mini USB 1A litiumbatteriladdningskort: tyvärr har detta kort inte skydd mot omvänd ström till solpanelen, för detta behöver du ytterligare 1 diod för att placeras mellan ett ben på solpanelen och laddningskretsen för att stoppa strömförsöket att strömma tillbaka till solpanelen på nätterna.

Steg 5: Montering

hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning

Detta kort innehåller relativt få komponenter och markörerna på tavlan är ganska enkla.

Se till att du INTE sätter in Atmega328P på fel sätt (som kan värma upp och blockera chipet, kan också förstöra spänningsförstärkaren).

I den här inställningen vetter chipet nedåt (liten U1 -markering PIN1). Alla andra komponenter ska vara uppenbara.

Använd skärmad kabel (t.ex.: Ljudkabel från CDrom fungerar bra) för LDR. I vissa fall (under många veckors test) visade det sig att det stör radiosignalöverföringen. Detta var en av dessa buggar som är svåra att felsöka, så om du inte vill ha problem, använd bara en skärmad kabel, slutet på historien.

LED: Lysdioden på lådans botten lades ursprungligen till för att blinka när det finns utgående radioöverföring men senare har jag betraktat det som slöseri med ström och det blinkar bara 3 gånger vid uppstartsprocessen.

TP: är testpunkt för mätning av strömmen för den totala kretsen.

DHT22: Köp inte den billiga DHT11, spendera 50 cent mer för att få den vita DHT22 som också kan mäta negativa temperaturer.

Steg 6: Case Design

Case Design
Case Design
Case Design
Case Design
Case Design
Case Design

Även om det är lite av en överkillning, gjordes en 3D -tryckt kub (weather_cube) för att hålla temperatursensorn DHT22 på plats. Kuben är limmad på botten av IP -rutan, med bara 1 hål för luften att nå sensorn. Jag har lagt till ett nät vid hålet mot bin, getingar och andra små flugor.

En extern låda kan användas som tillval för att göra stationen mer vattentät om du monterar den på en diskstång på det öppna.

Idé för en användbar funktion: att lägga till en stor metalltakplatta 1-2 cm på toppen av lådan som ger skugga från solen under sommaren, även om detta också kan ta bort vårt användbara solljus från panelen. Du kan komma med en design som skiljer panelen och lådan (lämnar panelen på solen, lådan i skugga).

På bilderna: en av stationerna som togs bort från arbetsmiljön efter 1 år, batterispänningen är på en fantastisk 3,9 V fortfarande, inga vattenskador på någon del av lådan även om nätet jag limmade längst ner på kuben revs sönder. Anledningen till att stationen behövde servas är anslutningsfel på LDR -kontakten, även om bygelkabeln tycktes vara kvar, var anslutningen bruten, därför var stiftet ibland flytande och gav dåliga LDR -analoga avläsningar. Förslag: om du använder standard PC -bygelkablar, limma dem alla efter att stationen har fungerat perfekt för att undvika detta.

Steg 7: Programvara

programvara
programvara

Programvarukoden kräver tre externa bibliotek (LowPower, DHT, VirtualWire). Jag hade problem med att hitta några av dem enkelt online på sistone så jag bifogade dem i en separat ZIP -fil. Oavsett vilket operativsystem du använder Linux/Windows, hitta bara din Arduino IDEs biblioteksmapp och extrahera dem där.

Bara en anmärkning, oavsett att jag redan avråder från att köpa DHT11, om du använder fel typ av DHT -sensor kommer programmet bara att hänga för alltid i början vid initialiseringsavsnittet (du kommer inte ens att se start -LED blinka 3 gånger).

Huvudslingkoden är mycket enkel, först läser den miljövärdena (temperatur, värmeindex, luftfuktighet, sol), skickar dem via radio och sedan använder den lågkraftsbiblioteket för att sätta Arduino i vila i 5 minuter.

Jag har funnit att sänkning av baudhastigheten kommer att öka stabiliteten hos radiosändningarna. Stationen skickar en mycket liten mängd data, 300 bps är mer än tillräckligt. Glöm inte heller att sändaren bara fungerar från ca. 4.8V, i framtiden 3.3V -version kan detta leda till ännu sämre överföringskvalitet (skicka data genom väggar och andra hinder). Jag stöter på ett problem med att använda en Arduino Mega kopplad till en Raspberry PI 2 som driver Mega från PI, att jag inte fick någon överföring. Lösningen var att driva Mega från en separat extern 12V -strömförsörjning.

Steg 8: Version 2 (ESP32 -baserad)

Version 2 (ESP32 -baserad)
Version 2 (ESP32 -baserad)
Version 2 (ESP32 -baserad)
Version 2 (ESP32 -baserad)
Version 2 (baserad på ESP32)
Version 2 (baserad på ESP32)

Allt som kan gå sönder kommer att gå sönder för att citera gamla gamla Murphy och så småningom efter år misslyckades stationerna på mystiska sätt. En började skicka gibberish soldata som gick upp till tiotusentals, vilket är omöjligt på grund av: Arduino-kortet innehåller en 6-kanals (8 kanaler på Mini och Nano, 16 på Mega), 10-bitars analog till digital omvandlare. Detta innebär att den kommer att kartlägga ingångsspänningar mellan 0 och 5 volt till heltal mellan 0 och 1023. Så efter att ha bytt radion, LDR och omprogrammerat Atmega 328P flera gånger gav jag upp och bestämde att det var dags för innovation. Låt oss gå ESP32.

Kortet jag använde var en: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi & Bluetooth Card Rev1 MicroPython 4MB FLASH

wiki.wemos.cc/products:lolin32:lolin32_lit…

Mikrokontroller ESP-32

Driftspänning 3.3V Digitala I/O -stift 19 Analoga ingångsstift 6 Klockhastighet (max) 240Mhz Flash 4M byte Längd 5mm Bredd 2.54mm Vikt 4g

Som till skillnad från bilden inte har LOLIN -logotypen (förfalskning från Kina). Min första trevliga överraskning var att pinout tryckt på tavlan matchade Arduino pinout! Efter att ha hanterat så många noname -brädor där jag var tvungen att leta efter pinouts hela dagen död trött och göra misstag äntligen ett bräde där pinout är rakt fram WoW!

Men här är den mörka sidan av historien:

Inledningsvis har jag anslutit LDR till A15 som är stift 12 eftersom det var lättare att limma ihop stiften. Sedan har jag 4095 avläsningar (vilket är max du kan få med AnlogRead på ESP32) vilket gjorde mig tokig eftersom hela anledningen till att jag byggde om stationen var de trasiga LDR -avläsningarna från den gamla (DHT fungerade fortfarande bra). Så det visar sig att:

Esp 32 integrerar två 12-bitars ACD-register. ADC1 med 8 kanaler kopplade till GPIO 32-39 och ADC2 med 10 kanaler i en annan stift. Saken är att ESP32 använder ADC2 för att hantera wifi -funktioner, så om du använder Wifi kan du inte använda det registret. ADC -drivrutins -API: et stöder ADC1 (8 kanaler, anslutna till GPIO 32 - 39) och ADC2 (10 kanaler, anslutna till GPIO 0, 2, 4, 12 - 15 och 25 - 27). Användningen av ADC2 har dock vissa begränsningar för applikationen:

ADC2 används av Wi-Fi-drivrutinen. Därför kan programmet endast använda ADC2 när Wi-Fi-drivrutinen inte har startat. Några av ADC2 -stiften används som bandstift (GPIO 0, 2, 15) och kan därför inte användas fritt. Så är fallet i följande officiella utvecklingssatser:

Så att ansluta LDR från stift 12 till A0 som är VP löste allt men jag förstår inte varför listar de ens ADC2 -stift som tillgängliga för tillverkare. Hur många andra hobbister slösade massor av tid tills de kom på detta? Markera åtminstone de oanvändbara stiften med rött eller något eller inte nämna det i manualen alls så att andra tillverkare bara kan ta reda på dem om de verkligen behöver dem. Hela syftet med ESP32 är att använda den med WIFI, alla använder den med WIFI.

En bra början på hur du konfigurerar Arduino IDE för detta kort:

Även om jag lägger in det i koden här går det igen:

Denna kod kanske inte kompilerar för andra ESP32 -modeller än Weemos LOLIN 32!

Bygga inställningar: -Använd uppladdning/seriell: 115200 -Använd CPU/ram: 240Mhz (Wifi | BT) -Använd flashfrekvens: 80 Mhz

Det finns massor av ESP32 -baserade väderstationer på nätet, de är mycket mer allmänt än min version 1 var med barebone -chipet eftersom de är lättare att installera, du behöver inte programmerare bara plugga in enheten på usb och programmera den och deras djupt viloläge är utmärkt för lång tid från batteriet. Det här var det allra första jag testade redan innan jag lödde i breakout -stiften eftersom som jag noterade flera platser i det här projektet är det viktigaste strömförbrukningen och med det nuvarande (falska) batteriet och den lilla solpanelen standby makt kan inte riktigt gå över 1-2mAs annars kommer projektet inte att kunna upprätthålla sig själv på lång sikt.

Det var en trevlig överraskning igen att djup sömnläge fungerar som annonserat. Under den djupa sömnen var strömmen så låg att min billiga multimätare inte ens kunde mäta den (fungerar för mig).

Under sändning av data var strömmen cirka 80mA (vilket är cirka 5 gånger mer än när Atmega 328P vaknade och sände), men glöm inte att med V1 fanns det en avg 1mA strömavtappning på LDR i viloläge (som också berodde på ljusnivåerna och gick från 0,5mA - 1mA) som nu är borta.

Nu när UltraFire -batteriet debunkas om du använder samma batteri här är vad du kan förvänta dig:

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

Batteritid = 22000mWh/2,5mW = 8800 timmar = 366 dagar ungefär

Verklig

Batteritid = 800mWh/2,5mW = 320 timmar = 13 dagar ungefär

Jag hade inte ett utrymme att mäta exakt vändningen i tid, men med mina tweaks toppar den cirka 2 sekunder.

Jag ville inte spendera eftermiddagen på anpassad kodning av allt så jag letade efter några andra väderstationer på Instructables baserat på ESP32 för att se vad de gör för datalagring. Tyvärr märkte de att de använder oflexibla och begränsade webbplatser som weathercloud. Eftersom jag inte är ett fan av "molnet" och deras kod länge gick sönder eftersom webbplatsen har ändrat dess API sedan dess har jag tagit mina 10 minuter att göra en anpassad lösning eftersom det inte är så svårt som man kanske tror. Låt oss börja!

Först och främst finns det ingen kretskortbild separat för det här projektet, eftersom det använder exakt samma komponenter (förlåt för det lödda i fula brödbrädebild) som V1 med skillnaden att allt körs av 3.3V. DHT ansluten med en pullup till VCC, LDR drog ner med en 10k. Problemet man kan se med 18650 -batterierna som min kinesiska fake (6500 mAh ultra sun fire lol: D) är att de startar urladdningskurvan från cirka 4,1 V ny ålder och går tills deras avstängningskretsar startar för att stoppa cellskador (de som har turen att ha det). Detta är ingenstans bra för oss som 3.3V ingång. Även om detta LOLIN -kort har en litiumbatterikontakt och laddningskrets i detta projekt ville jag renovera det mesta jag kunde från den gamla stationen så med den gamla 18650 kan du INTE använda den här inbyggda laddaren. Lösningen var helt enkel: jag klippte av en mikro -USB -kabel som löds in i 5V ur den gamla spänningsförstärkaren och voila -problemet löstes, eftersom kortet på microUSB har regulator.

Så skillnaden mellan den gamla och nya versionen som i det gamla batteriet ger 3,7V -> boostad till 5V -> ardu körs på 5V -> alla komponenter körs på 5V.

I den nya: batteriet ger 3,7V -> förstärkt till 5V -> reglerat via inbyggd reg på ESP32 -> alla komponenter körs på 3,3V.

Programmässigt kommer vi också att behöva ett annat DHT -bibliotek, Arduinos DHT är inte kompatibelt med ESP: erna. Det vi behöver kallas DHT ESP.

Jag började basera min kod kring DHT -exemplet som denna kod gav. Kodens funktion är:

1, Hämta miljödata från DHT + Solar -data från fotocellen

2, Anslut till wifi med statisk IP

3, posta data till ett php -skript

4, sova i 10 minuter

Som du kommer att märka ställde jag in koden för effektivitet för att absolut minimera väckningstiden eftersom den tappar 5 gånger mer ström än det gamla projektet gjorde när den slogs på. Hur gjorde jag det här? Först och främst om det finns någon typ av fel kommer funktionen getTemperature () att återvända med falskt (vilket betyder 10 minuters sömn igen). Detta kan vara som att DHT -sensorn inte kan startas eller att wifi -anslutningen inte är tillgänglig. Som du märker var den vanliga while () -slingan för att fortsätta försöka wifi -föreningen för alltid också borttagen men en fördröjning på 1 sekund behövde vara kvar där annars kommer den inte alltid att ansluta och det beror också på AP -typ, laddning etc hur snabbt det kommer att hända, med 0,5 sekunder fick jag inkonsekvent beteende (ibland kunde det inte ansluta). Om någon vet ett bättre sätt att göra detta vänligen lämna det i kommentarerna. Först när DHT -data läses OCH wifi -anslutningen är uppe försöker den lägga upp data till skriptet på webbservern. Alla typer av tidsödande funktioner som Serial.println () är också inaktiverade i normalt driftläge. Som server använder jag också IP för att undvika onödig DNS -sökning, i min kod är både standardgateway och dns -server inställd på 0.0.0.0.

Jag förstår inte varför det är så svårt att skapa ditt eget API när allt som krävs är:

sprintf (svar, "temp =%d & hum =%d & hi =%d & sol =%d", temp, hum, hi, sol);

int httpResponseCode = http. POST (svar);

Du lägger den här lilla php -koden till alla hallon pi och du kan göra system () uppgifter direkt baserat på telemetri som att slå på fläktar eller tända lamporna om det blir tillräckligt mörkt.

Några anteckningar om koden:

WiFi.config (staticIP, gateway, subnät, dns); // MÅSTE vara efter att Wifi börjar hur dumt …

WiFi.mode (WIFI_STA); // MÅSTE annars skapa en oönskad AP

Ja, nu vet du. Även ordningen på IP -konfigurationer kan ändras via plattformar, jag försökte andra exempel först där gateway- och subnätvärdena växlades. Varför ställa in statisk IP? Det är väl uppenbart, om du har en dedikerad ruta i ditt nätverk som en linux -server som kör isc dhcpd, vill du inte ha hundra miljoner loggposter från när ESP vaknar och får IP från DHCP. Routrar loggar normalt inte associationer så det kommer att bli osynligt. Detta är priset för att spara energi.

V2 har aldrig kunnat upprätthålla sig på grund av batteriet av dålig kvalitet och jag har helt enkelt lagt det på en adapter så om du vill bygga antingen V1 eller V2 köp INTE det nämnda batteriet, gör din egen forskning om batterier (någon 18650 över 2000mAh annonserad kapacitet på Ebay är en bluff med stor sannolikhet).

Rekommenderad: