Inhoudsopgave:

NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan - Ajarnpa
NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan - Ajarnpa

Video: NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan - Ajarnpa

Video: NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan - Ajarnpa
Video: Как измеряют погоду? Метеостанция "Огурцово". 2024, Juli-
Anonim
NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan
NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan
NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan
NaTaLia-weerstation: Arduino-weerstation op zonne-energie op de juiste manier gedaan

Na 1 jaar succesvol gebruik op 2 verschillende locaties deel ik mijn projectplannen voor een weerstation op zonne-energie en leg ik uit hoe het is geëvolueerd tot een systeem dat echt kan overleven gedurende lange tijd op zonne-energie. Als je mijn instructies opvolgt en exact dezelfde materialen gebruikt als vermeld, kun je een weerstation op zonne-energie bouwen dat vele jaren meegaat. Eigenlijk is de enige factor die de levensduur van de batterij beperkt, de levensduur van de batterij die u gebruikt.

Stap 1: Bediening van het weerstation

1, zender: buiten gemonteerde doos met zonnepaneel die periodiek weertelemetrie (temperatuur, vochtigheid, warmte-index, zonnekracht) naar de binnenontvanger verzendt.

2, Ontvanger: Binnenunit gemaakt van een Raspberry PI 2 + Arduino Mega waarop een 433 Mhz RF-ontvanger is aangesloten voor gegevensontvangst. In mijn opstelling heeft dit apparaat geen lokale LCD-schermfunctionaliteit. Het loopt achteloos. Een centraal C-programma zorgt voor het ontvangen van de binnenkomende gegevens van de Arduino via de seriële, vervolgens logt de gegevens in een tekstbestand en maakt de laatst ontvangen gegevens beschikbaar via telnet zodat andere apparaten ernaar kunnen opvragen.

Het station regelt de lichten in mijn huis door de fotoweerstand te lezen (die bepaalt of het buiten dag of nacht is). De ontvanger is in mijn geval headless, maar je kunt het project eenvoudig aanpassen om een LCD-scherm toe te voegen. Een van de apparaten die de weergegevens van het station gebruikt, ontleden en weergeeft, is mijn andere project: Ironforge the NetBSD Toaster.

Stap 2: Eerste versies

Eerste versies
Eerste versies
Eerste versies
Eerste versies
Eerste versies
Eerste versies
Eerste versies
Eerste versies

Er zijn veel zonne-energieprojecten op het net, maar velen van hen maken de veelgemaakte fout dat het systeem na verloop van tijd meer energie uit de batterij haalt dan het zonnepaneel zou kunnen aanvullen, vooral tijdens de bewolkte, donkere wintermaanden.

Wanneer u een systeem op zonne-energie ontwerpt, is het enige dat telt het STROOMVERBRUIK, op alle componenten: mcu, radiozender, spanningsregelaar enz.

Het gebruik van een grote computer zoals een Raspberry Pi of een energieverslindend wifi-apparaat zoals de ESP om een paar stukjes weergegevens te verzamelen en te transporteren, zou een overkill zijn, maar zoals ik in deze tutorial zal laten zien, is zelfs een klein Arduino-bord dat.

Het beste is om tijdens je bouwproces altijd de stroom te meten met een meter of met een scoop (handig als je kleine pieken in het gebruik tijdens de operatie in zeer korte tijdspannes (milliseconden) probeert te meten).

Op de eerste foto zie je mijn eerste (Arduino Nano Based) station en het tweede Arduino Barebone Atmega 328P bord.

De eerste versie, hoewel deze perfect werkte (monitoringomgeving en verzenden van gegevens via radio) had een te hoog stroomverbruik ~ 46mA en de batterij was binnen een paar weken leeg.

Alle versies gebruikten de volgende batterij:

18650 6000mAh beschermde Li-ion oplaadbare batterij Ingebouwde beschermingskaart

UPDATE op deze ScamFire-batterijen. Hoewel dit een vrij oude Instructable is, voelde ik me nog steeds gedwongen om het te corrigeren vanwege deze nepbatterij. Koop de genoemde batterij NIET, doe je eigen onderzoek naar andere LION / LIPO-batterijen, alle 3.7V-batterijen werken met dit project.

Eindelijk had ik tijd om de ScamFire-batterij te ontmaskeren om te zien wat de echte capaciteit is. Daarom zullen we 2 berekeningen naast de echte en de "geadverteerde" capaciteiten uitvoeren.

Allereerst is dat één ding dat deze batterij nep is en niets wat ze erover beweren is waar, de nieuwe versies zijn nog erger, ze hebben de nep gekopieerd door het 2 cent-beveiligingscircuit weg te laten, dus niets zal ze tegenhouden om tot nul te ontladen.

Een klein artikel over LION/LIPO-batterijen:

TLDR:

Dit betekent dat de maximale spanning van de cel 4,2 V is en dat de "nominale" (gemiddelde) spanning 3,7 V is.

Hier is bijvoorbeeld een profiel van de spanning voor een 'klassieke' 3.7V/4,2V batterij. De spanning begint bij maximaal 4,2 en daalt snel tot ongeveer 3,7 V voor het grootste deel van de levensduur van de batterij. Zodra u 3,4 V bereikt, is de batterij leeg en bij 3,0 V ontkoppelt het uitschakelcircuit de batterij.

Mijn metingen met een dummy load:

Batterij opgeladen: 4.1V

Cutoff ingesteld op: 3.4V

Belastingsimulatie: 0,15A (mijn apparaat had een beetje een probleem om lager te gaan dan dit.)

Gemeten capaciteit: 0,77 Ah geef het een gratis 0,8 Ah die 800 mAh is in plaats van de geadverteerde 6000 mAh!

Omdat deze batterij niet eens het beveiligingscircuit had, kon ik vrijelijk lager gaan, maar bij 3,4V na 10 minuten crasht hij al naar 3,0V.

Daarom levert de batterij met eenvoudige berekeningen:

Theoretisch

Batterijspanning = 3.7V

Vermogen =3.7x6000= 22000 mWh

Echt

Batterijspanning =3.7VPower =3.7x800= 2960 mWh

Versie: 0.1 ARDUINO NANO GEBASEERD

Zelfs met de LowPower-bibliotheek verbruikt een Arduino nano ~ 16 mA (in slaapmodus) -> FAIL.

Theoretisch

Pavg=VxIavg =5Vx16mA= 80 mW

Levensduur batterij = 22000/80 = 275 uur = ongeveer 11 dagen

RealPavg=VxIavg =5Vx16mA= 80 mW

Levensduur batterij = 800/80 =10 uur

Versie: 0.2 Atmega 328P Barebone

Het stroomverbruik van een ATmega328 hangt sterk af van wat je ermee doet. Hij zit daar gewoon in een standaardstatus en kan 16mA @ 5V gebruiken terwijl hij op 16MHz werkt.

Wanneer de ATmega328P in de actieve modus staat, voert hij continu enkele miljoenen instructies per seconde uit. Verder de On-Board Peripherals Analog to Digital Converter (ADC), Serial Peripheral Interface (SPI), Timer 0, 1, 2, Two Wire Interface (I2C), USART, Watchdog Timer (WDT) en de Brown-out Detection (BOD) verbruiken stroom.

Om stroom te besparen ondersteunt de ATmega328P MCU een aantal slaapstanden en kunnen ongebruikte randapparatuur worden uitgeschakeld. De slaapmodi verschillen in welke delen actief blijven, door de slaapduur en de tijd die nodig is om wakker te worden (wekperiode). De slaapmodus en actieve randapparatuur kunnen worden bediend met de AVR-slaap- en stroombibliotheken of, beknopter, met de uitstekende Low-Power-bibliotheek.

De Low-Power-bibliotheek is eenvoudig te gebruiken maar zeer krachtig. De verklaring LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); zet de MCU in SLEEP_MODE_PWR_DOWN gedurende 16 ms tot 8 s, afhankelijk van het eerste argument. Het schakelt de ADC en de BOD uit. Power-down sleep betekent dat alle chipfuncties zijn uitgeschakeld tot de volgende interrupt. Verder wordt de externe oscillator gestopt. Alleen level interrupts op INT1 en INT2, pin change interrupts, TWI/I2C adres match, of de WDT, indien ingeschakeld, kunnen de MCU wakker maken. Dus met de enkele verklaring minimaliseert u het energieverbruik. Voor een 3.3 V Pro Mini zonder power-LED en zonder regelaar (zie hieronder) die de verklaring uitvoert, is het energieverbruik 4,5 μA. Dat komt heel dicht in de buurt van wat wordt vermeld in de ATmega328P-datasheet voor power-down sleep met WDT ingeschakeld van 4,2 μA (datasheet gekoppeld in bronnen). Daarom ben ik er vrij zeker van dat de powerDown-functie alles afsluit wat redelijkerwijs mogelijk is. Met de instructie LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); wordt de WDT uitgeschakeld en wordt u pas wakker als een interrupt wordt geactiveerd.

Met de barebone-opstelling kunnen we de chip dus 5 minuten in de slaapstand zetten, terwijl hij heel weinig energie verbruikt (0,04 mA zonder randapparatuur). Dit is echter alleen de Atmega 328P-chip met de kristaloscillator en niets anders, de spanningsversterker die in deze configuratie wordt gebruikt om de batterijspanning van 3,7 V -> 5,0 V te verhogen, verbruikt ook 0,01 mA.

Een constante spanningsafvoer was de toegevoegde fotoweerstand die het verbruik in de slaapstand opdreunde tot in totaal 1 mA (dit omvat alle componenten).

De formule voor het berekenen van het precieze verbruik voor het apparaat in zowel de slaap- als de waakmodus is:

Iavg = (Ton*Ion + Tslaap*Islaap) / (Ton +Tslaap)

Ionen = 13mA

Dit komt meestal van de RF433 Mhz zender:

zender:

Werkspanning: 3V - 12V voor max. stroomverbruik 12VWerkstroom: max Minder dan 40mA max en min 9mAResonantiemodus: (SAW)Modulatiemodus: ASKWerkfrequentie: Eve 315MHz of 433MHzTransmissievermogen: 25mW (315MHz bij 12V)Frequentiefout: +150kHz (max) Snelheid: minder dan 10Kbps

Islaap = 1mA

Zou aanzienlijk minder zijn zonder de fotoresistor.

Trunontijd Ton=250 mS = 0.25s

Slaaptijd Tsleep = 5 min = 300s

Iavg = (Ton*Ion + Tslaap*Islaap) / (Ton +Tslaap)

Iavg = (0,25s*13mA + 300s*1mA) / (0,25s+300s)

Iavg=1,26mA

Pavg=VxIavg =5Vx1.26mA=6 mW

Theoretisch

Levensduur batterij = 22000mWh/6mW = 3666 uur = ongeveer 152 dagen

Echt

Levensduur batterij = 800mWh/6mW = 133 uur = ongeveer 5,5 dagen

Hoewel dit nog steeds een betere UltraFire-serie was die ik aanvankelijk gebruikte, kon je zien dat zonder het zonnepaneel of het lage 1mA-verbruik dit project niet lang zou overleven.

Voel je vrij om het station te bouwen en schrijf je bevindingen en berekeningen op bij de opmerkingen en ik zal het artikel bijwerken. Ik zou ook resultaten op prijs stellen met verschillende MCU's en boost-converters.

Stap 3: Een succesvol weerstation bouwen

Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen
Een succesvol weerstation bouwen

Hoewel het de eerste succesvolle versie is, bevat het een klein beetje fouten op de foto's en ik kan die niet opnieuw maken omdat de stations al in gebruik zijn. De twee spanningsversterkers die op de afbeelding worden getoond, zijn op het moment van schrijven verkrijgbaar voor aero-modellering en andere toepassingen. Toen ik mijn station opnieuw ontwierp, dacht ik aan een kleiner en efficiënter voltage step-up board, maar kleiner in omvang betekent zeker niet dat het efficiënter is.

De nieuwe kleine module op de foto die niet eens een indicatie-led heeft, heeft zelf 3mA (*FAIL*) afgevoerd, dus ik bleef bij mijn oude bord:

PFM-besturing DC-DC USB 0,9V-5V tot 5V dc Boost-upgradevoedingsmodule

Op het moment van schrijven is deze module nog verkrijgbaar op Ebay voor 99 cent maar mocht je toch besluiten om een andere booster te gebruiken, controleer dan altijd het stand-by stroomverbruik. Met een goede kwaliteit booster zou het niet meer mogen zijn dan de mijne (0,01 mA), al moest de kleine LED aan boord wel gedesoldeerd worden.

Stap 4: Hardwarelijst

Hardwarelijst
Hardwarelijst
  • 18650 6000mAh beschermde Li-ion oplaadbare batterij Ingebouwde beschermingskaart
  • Atmega 328P16M 5V met bootloader
  • Adafruit DC Boarduino (Arduino-compatibel) Kit (met ATmega328) < dit wordt een goede investering als u toekomstige barebone-projecten uitvoert
  • Foto-lichtgevoelige weerstand Fotoweerstand Optoresistor 5 mm GL5539
  • 1A 1000V Diode 1N4007 IN4007 DO-41 Gelijkrichterdiodes
  • PFM-besturing DC-DC USB 0,9 V-5 V tot 5 V dc Boost Step-up voedingsmodule
  • 1.6W 5.5V 266mA Mini Zonnepaneel Module Systeem Epoxy Cell Charger DIY
  • TP405 5V Mini USB 1A Lithiumbatterij Oplaadkaart Oplaadmodule
  • 433Mhz RF zender en ontvanger link kit voor Arduino/ARM/MC afstandsbediening < Kit, bevat zowel de zender als de ontvanger
  • IP65 schakelaar beschermer aansluitdoos buiten waterdichte behuizing 150x110x70mm
  • Nieuwe DHT22-sensormodule voor temperatuur en relatieve vochtigheid voor Arduino
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini Switch, 1x1N4007diode
  • Adafruit 16 MHz Keramische Resonator / Oscillator [ADA1873]
  • Arduino UNO/Mega etc voor ontvangststation + Raspberry PI 1/2/3
  • Doorzichtige acryl plastic doos (optioneel)

Je kunt deze allemaal op Ebay vinden, ik wil geen verkopers promoten door naar hun pagina's te linken en de links zullen in de toekomst sowieso dood gaan.

Opmerkingen voor de hardwarelijst:

Voor het geval je de Atmega op de een of andere manier met programmeren zou kopen, koop er meer van, hetzelfde geldt voor de spanningsbooster en de zonnelaadcontroller.

De zonnelader bevat 2 kleine kleuren-LED's die alleen aangaan in geval van opladen op zonne-energie en aangeven (rood-> opladen, blauw-> volledig opgeladen toestanden). Deze kunnen ook worden gesoldeerd. Het geeft tijdens het opladen eerder wat extra kracht aan de batterij.

Zoals je ziet staan er geen batterijhouders op mijn lijstje. Waarom? Omdat ze onbetrouwbaar zijn. Ik heb talloze keren meegemaakt dat de batterij uit de houder kwam en de verbinding verloor. Vooral als je opstelling op een hoge schotelpaal zoals de mijne is gemonteerd, open voor alle barre weersomstandigheden. Ik heb zelfs de batterij met 2 ritsen in de houder geritst en hij kon er nog steeds uit. Doe het niet, verwijder gewoon de externe coating van de batterij en soldeer de draden rechtstreeks in de onderkant van de batterij, met daarin het beschermingscircuit tegen overlading (omzeil de bescherming niet). Een batterijhouder kan alleen worden gebruikt om de batterij in het apparaat op zijn plaats te houden.

TP405 5V Mini USB 1A oplaadbord voor lithiumbatterijen: helaas heeft dit bord geen tegenstroombeveiliging voor het zonnepaneel, hiervoor moet u nog 1 diode tussen een poot van het zonnepaneel en het laadcircuit plaatsen om de stroom te stoppen. om 's nachts terug in het zonnepaneel te stromen.

Stap 5: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Dit bord bevat relatief weinig componenten en de markeringen op het bord zijn vrij eenvoudig.

Zorg ervoor dat u de Atmega328P NIET op de verkeerde manier plaatst (die kan opwarmen en de chip blokkeren, kan ook de spanningsversterker vernietigen).

In deze opstelling is de chip naar beneden gericht (klein U-gaatje dat PIN1 markeert). Alle andere componenten moeten duidelijk zijn.

Gebruik afgeschermde kabel (bijv.: audiokabel van cd-rom is prima) voor de LDR. In sommige gevallen (na vele weken testen) bleek dat het de overdracht van het radiosignaal verstoort. Dit was een van die bugs die moeilijk op te lossen waren, dus als je geen problemen wilt, gebruik dan gewoon een afgeschermde kabel, einde verhaal.

LED: De LED aan de onderkant van de doos is oorspronkelijk toegevoegd om te knipperen wanneer er uitgaande radiotransmissie is, maar later heb ik het als verspilling van energie beschouwd en het knippert slechts 3 keer tijdens het opstartproces.

TP: is een testpunt voor het meten van de stroom voor het totale circuit.

DHT22: Koop niet de goedkope DHT11, geef 50 cent meer uit om de witte DHT22 te krijgen die ook negatieve temperaturen kan meten.

Stap 6: Case-ontwerp

Kastontwerp
Kastontwerp
Kastontwerp
Kastontwerp
Kastontwerp
Kastontwerp

Hoewel het een beetje overdreven is, is er een 3D-geprinte kubus (weather_cube) gemaakt om de DHT22-temperatuursensor op zijn plaats te houden. De kubus is aan de onderkant van de IP-box gelijmd, met slechts 1 gat voor de lucht om de sensor te bereiken. Ik heb een net bij het gat toegevoegd tegen bijen, wespen en andere kleine vliegen.

Een externe doos kan optioneel worden gebruikt om het station waterdicht te maken voor het geval u het op een schotelpaal in de open lucht monteert.

Idee voor 1 handige functie: het toevoegen van een grote metalen dakplaat van 1-2 cm aan de bovenkant van de doos die schaduw van de zon biedt tijdens de zomer, hoewel dit ook ons nuttige zonlicht van het paneel kan wegnemen. Je kunt een ontwerp bedenken dat het paneel en de doos scheidt (laat het paneel op de zon, de doos in de schaduw).

Op de foto's: een van de stations na 1 jaar uit de werkomgeving verwijderd, batterijspanning staat nog steeds op verbluffende 3,9 V, geen waterschade aan enig deel van de doos, hoewel het net dat ik aan de onderkant van de kubus had geplakt, uit elkaar was gescheurd. De reden dat het station onderhoud nodig had, is een verbindingsfout op de LDR-connector, hoewel de jumperkabel nog steeds op zijn plaats leek te zitten, was de verbinding verbroken, waardoor de pin soms zweefde en slechte LDR-analoge uitlezingen gaf. Suggestie: als u standaard pc-jumperkabels gebruikt, lijm ze dan allemaal vast nadat het station perfect werkt om dit te voorkomen.

Stap 7: Software

Software
Software

De softwarecode vereist 3 externe bibliotheken (LowPower, DHT, VirtualWire). Ik had de laatste tijd problemen om sommige ervan gemakkelijk online te vinden, dus ik heb ze in een apart ZIP-bestand bijgevoegd. Ongeacht welk besturingssysteem je Linux/Windows gebruikt, zoek gewoon de bibliotheekmap van je Arduino IDE en pak ze daar uit.

Even een opmerking, ondanks dat ik al afraad om de DHT11 te kopen, als je het verkeerde type DHT-sensor gebruikt, blijft het programma gewoon voor altijd aan het begin hangen bij het initialisatiegedeelte (je zult de opstart-led niet eens 3 keer zien knipperen).

De hoofdluscode is heel eenvoudig, eerst leest het de omgevingswaarden (temperatuur, warmte-index, vochtigheid, zonne-energie), stuurt ze via de radio en gebruikt vervolgens de lowpower-bibliotheek om de Arduino 5 minuten in de slaapstand te zetten.

Ik heb ontdekt dat het verlagen van de baudrate de stabiliteit van de radio-uitzendingen zal vergroten. Het station verzendt een zeer kleine hoeveelheid data, 300 bps is meer dan genoeg. Vergeet ook niet dat de zender pas vanaf ca. 4.8V, in de toekomstige 3.3V-versie kan dit leiden tot een nog slechtere transmissiekwaliteit (gegevens door muren en andere obstakels sturen). Ik kom een probleem tegen met het gebruik van een Arduino Mega die is aangesloten op een Raspberry PI 2 die de Mega van de PI voedt, dat ik geen transmissie heb ontvangen. Oplossing was om de Mega van een aparte externe 12V voeding te voorzien.

Stap 8: Versie 2 (ESP32-gebaseerd)

Versie 2 (ESP32-gebaseerd)
Versie 2 (ESP32-gebaseerd)
Versie 2 (ESP32-gebaseerd)
Versie 2 (ESP32-gebaseerd)
Versie 2 (ESP32-gebaseerd)
Versie 2 (ESP32-gebaseerd)

Alles wat kan breken, zal breken om de goede oude Murphy te citeren en uiteindelijk faalden de stations na jaren op mysterieuze manieren. Men begon wartaal zonne-gegevens te verzenden die opliepen tot tienduizenden, wat onmogelijk is vanwege: Het Arduino-bord bevat een 6-kanaals (8 kanalen op de Mini en Nano, 16 op de Mega), 10-bit analoog naar digitaal converter. Dit betekent dat het ingangsspanningen tussen 0 en 5 volt zal omzetten in gehele waarden tussen 0 en 1023. Dus na het vervangen van de radio, LDR en het meerdere keren herprogrammeren van de Atmega 328P gaf ik het op en besloot dat het tijd was voor innovatie. Laten we gaan voor ESP32.

Het bord dat ik gebruikte was een: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi & Bluetooth-kaart Rev1 MicroPython 4MB FLASH

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

Microcontroller ESP-32

Bedrijfsspanning 3,3 V Digitale I/O-pinnen 19 analoge ingangspinnen 6 Kloksnelheid (max.) 240 Mhz Flash 4M bytes Lengte 5 mm Breedte 2,54 mm Gewicht 4 g

Die in tegenstelling tot de afgebeelde niet het LOLIN-logo heeft (namaak uit China). Mijn eerste aangename verrassing was dat de pinout op het bord overeenkwam met de Arduino pinout! Na zoveel noname-boards te hebben gehad waar ik de hele dag naar pinouts moest zoeken, doodmoe om fouten te maken, eindelijk een board waar de pinout ongecompliceerd is WoW!

Maar hier is de donkere kant van het verhaal:

Aanvankelijk heb ik de LDR aangesloten op A15, pin 12, omdat het gemakkelijker was om de pinnen aan elkaar te lijmen. Dan heb ik 4095 uitlezingen (wat het maximum is dat je kunt krijgen met AnlogRead op de ESP32) die me gek maakte omdat de hele reden waarom ik het station herbouwde de kapotte LDR-uitlezingen van de oude waren (de DHT functioneerde nog steeds prima). Het blijkt dus dat:

De esp 32 integreert twee 12-bits ACD-registers. ADC1 met 8 kanalen aangesloten op GPIO's 32-39 en ADC2 met 10 kanalen in andere pinnen. Het punt is dat de ESP32 de ADC2 gebruikt om wifi-functies te beheren, dus als je wifi gebruikt, kun je dat register niet gebruiken. De ADC-stuurprogramma-API ondersteunt ADC1 (8 kanalen, aangesloten op GPIO's 32 - 39) en ADC2 (10 kanalen, aangesloten op GPIO's 0, 2, 4, 12 - 15 en 25 - 27). Het gebruik van ADC2 heeft echter enkele beperkingen voor de toepassing:

ADC2 wordt gebruikt door de Wi-Fi-driver. Daarom kan de applicatie ADC2 alleen gebruiken als het Wi-Fi-stuurprogramma niet is gestart. Sommige van de ADC2-pinnen worden gebruikt als omsnoeringspinnen (GPIO 0, 2, 15) en kunnen dus niet vrij worden gebruikt. Dat is het geval in de volgende officiële Development Kits:

Dus het aansluiten van de LDR van pin 12 op A0, de VP, loste alles op, maar ik begrijp niet waarom ze zelfs ADC2-pinnen vermelden als beschikbaar voor makers. Hoeveel andere hobbisten hebben tonnen tijd verspild om dit uit te zoeken? Markeer de onbruikbare pinnen op zijn minst met rood of zoiets of vermeld het helemaal niet in de handleiding, zodat andere makers er alleen achter kunnen komen als ze ze echt nodig hebben. Het hele doel van de ESP32 is om hem te gebruiken met WIFI, iedereen gebruikt hem met WIFI.

Een goed begin om de Arduino IDE voor dit bord in te stellen:

Hoewel ik het hier in de code heb gezet, gaat het nog een keer:

Deze code compileert mogelijk niet voor andere ESP32-modellen dan de Weemos LOLIN 32!

Build instellingen: -Gebruik upload/serieel: 115200 -Gebruik CPU/ram: 240Mhz(Wifi|BT) -Gebruik flash freq: 80 Mhz

Er zijn talloze op ESP32 gebaseerde weerstations op het net, ze zijn veel gebruikelijker dan mijn versie 1 was met de barebone-chip omdat ze gemakkelijker in te stellen zijn, je hebt geen programmeur nodig, sluit gewoon het apparaat aan op usb en programmeer het en hun diepe slaapmodus is uitstekend voor langdurig gebruik van de batterij. Dit was meteen het allereerste dat ik testte, zelfs voordat ik de breakout-pinnen soldeerde, want aangezien ik meerdere plaatsen in dit project heb opgemerkt, is het BELANGRIJKSTE het stroomverbruik en met de huidige (nep) batterij en het kleine zonnepaneel de standby stroom kan niet echt meer dan 1-2 mA gaan, anders kan het project zichzelf niet op de lange termijn in stand houden.

Het was weer een aangename verrassing dat de diepe slaapstand werkt zoals geadverteerd. Tijdens de diepe slaap was de stroom zo laag dat mijn goedkope multimeter het niet eens kon meten (werkt voor mij).

Tijdens het verzenden van gegevens was de stroom ongeveer 80 mA (wat ongeveer 5 keer meer is dan toen de Atmega 328P wakker werd en aan het zenden was), maar vergeet niet dat er met de V1 een gemiddeld stroomverbruik van 1 mA was op de LDR in slaapmodus (wat ook afhing van de lichtniveaus en ging van 0,5mA - 1mA) dat is nu weg.

Nu de UltraFire-batterij wordt ontkracht als je dezelfde batterij gebruikt, kun je dit verwachten:

Iavg = (Ton*Ion + Tslaap*Islaap) / (Ton +Tslaap)

Iavg = (2s*80mA + 300s*0.01mA) / (2s+300s) Iavg = 0,5mA

Pavg=VxIavg =5Vx0.5mA=2.5 mW

Theoretisch

Levensduur batterij = 22000mWh/2,5mW = 8800 uur = ongeveer 366 dagen

Echt

Levensduur batterij = 800 mWh/2,5 mW = 320 uur = ongeveer 13 dagen

Ik had geen bereik om de inschakeltijd precies te meten, maar met mijn tweaks eindigt het rond de 2 seconden.

Ik wilde de middag niet besteden aan het op maat coderen van alles, dus ik zocht naar een aantal andere weerstations op Instructables op basis van ESP32 om te zien wat ze doen voor gegevensopslag. Helaas hebben ze gemerkt dat ze inflexibele en beperkte sites gebruiken, zoals Weathercloud. Omdat ik geen fan ben van de "cloud" en hun code al lang brak omdat de site zijn API sindsdien heeft gewijzigd, heb ik mijn 10 minuten genomen om een aangepaste oplossing te maken, omdat het niet zo moeilijk is als je zou denken. Laten we beginnen!

Allereerst is er geen aparte printplaat voor dit project, omdat het exact dezelfde componenten gebruikt (sorry voor dat gesoldeerd in lelijke breadboard-afbeelding) als de V1 met het verschil dat alles op 3.3V loopt. De DHT haakte af met een pullup naar VCC, de LDR trok naar beneden met een 10k. Het probleem dat je zou kunnen zien met de 18650-batterijen zoals mijn Chinese nep (6500 mAh ultra sun fire lol: D) is dat ze de ontlaadcurve beginnen vanaf ongeveer 4,1 V new age en doorgaan totdat hun cutoff-circuit in werking treedt om celbeschadiging te stoppen (degenen die het geluk hebben het te hebben). Dit is nergens goed voor ons als 3.3V input. Hoewel dit LOLIN-bord in dit project een lithiumbatterijconnector en oplaadcircuit heeft, wilde ik het meeste van het oude station opknappen, dus met de oude 18650 kun je deze ingebouwde oplader NIET gebruiken. De oplossing was doodeenvoudig: ik sneed een micro-USB-kabel af die in de 5V uit de oude spanningsversterker was gesoldeerd en voila probleem opgelost, omdat het bord op de microUSB een regelaar heeft.

Dus het verschil tussen de oude en nieuwe versie die in de oude batterij 3.7V levert -> opgevoerd naar 5V -> ardu draait op 5V -> alle componenten draaien op 5V.

In de nieuwe: batterij levert 3,7 V -> opgevoerd tot 5 V -> geregeld via ingebouwde reg op ESP32 -> alle componenten werken op 3,3 V.

Softwarematig hebben we ook een andere DHT-bibliotheek nodig, de DHT van de Arduino is niet compatibel met die van de ESP. Wat we nodig hebben heet DHT ESP.

Ik begon mijn code te baseren op het DHT-voorbeeld dat deze code opleverde. De werking van de code is:

1, Haal de milieugegevens van de DHT + Solar-gegevens van de fotocel

2, maak verbinding met wifi met statische IP

3, POST de gegevens naar een php-script

4, ga 10 minuten slapen

Zoals je zult merken, heb ik de code afgestemd op efficiëntie om de wektijd absoluut te minimaliseren, omdat deze 5 keer van de stroom verbruikt dan het oude project deed toen het werd ingeschakeld. Hoe heb ik dit gedaan? Allereerst, als er ENIGE soort fout is, zal de functie getTemperature() terugkeren met false (wat betekent dat er weer 10 minuten slaap is). Dit kan zijn alsof de DHT-sensor niet kan worden gestart of de wifi-verbinding niet beschikbaar is. Zoals je opmerkt, is de gebruikelijke while()-lus om te blijven proberen, de wifi-associatie voor altijd verwijderd, maar er moest een vertraging van 1 sec worden gelaten, anders zal het niet altijd verbinding maken en het hangt ook af van het AP-type, laden enz. hoe snel het is zal gebeuren, met 0,5s kreeg ik inconsistent gedrag (soms kon het geen verbinding maken). Als iemand een betere manier weet om dit te doen, laat het dan in de reacties achter. Alleen wanneer de DHT-gegevens zijn gelezen EN de wifi-verbinding is ingeschakeld, wordt geprobeerd de gegevens naar het script op de webserver te posten. Allerlei tijdverspillers zoals Serial.println()'s zijn ook uitgeschakeld in de normale operationele modus. Als server gebruik ik ook IP om onnodige DNS-lookup te voorkomen, in mijn code zijn zowel de standaardgateway als de dns-server ingesteld op 0.0.0.0.

Ik begrijp niet waarom het zo moeilijk is om je eigen API te maken als je alleen het volgende nodig hebt:

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

int httpResponseCode =

Je plaatst deze kleine php-code op elke raspberry pi en je kunt meteen systeem()-taken uitvoeren op basis van de telemetrie, zoals ventilatoren aanzetten of de lichten aandoen als het donker genoeg wordt.

Enkele opmerkingen over de code:

WiFi.config (statisch IP, gateway, subnet, dns); // MOET zijn nadat Wifi begint, hoe dom …

WiFi.modus (WIFI_STA); // MOET anders wordt er ook een ongewenste AP gemaakt

Ja nou weet je het. Ook de volgorde van de IP-configuraties kan via platforms veranderen, ik probeerde eerst andere voorbeelden waarbij de gateway- en subnetwaarden werden omgeschakeld. Waarom een statisch IP-adres instellen? Nou, het is vrij duidelijk, als je een speciale box op je netwerk hebt, zoals een linux-server die isc dhcpd draait, wil je geen honderd miljoen log-items vanaf het moment dat de ESP ontwaakt en het IP-adres van de DHCP krijgt. Routers loggen normaal gesproken geen associaties, dus dat zal ongezien blijven. Dit is de prijs van het besparen van stroom.

V2 heeft zichzelf nooit kunnen onderhouden vanwege de batterij van slechte kwaliteit en ik heb hem gewoon op een adapter geplaatst, dus als je de V1 of V2 wilt bouwen, koop dan NIET de genoemde batterij, doe je eigen onderzoek naar batterijen (elke 18650 meer dan 2000mAh geadverteerde capaciteit op Ebay is een zwendel met een grote kans).

Aanbevolen: