Inhaltsverzeichnis:

NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht - Gunook
NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht - Gunook

Video: NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht - Gunook

Video: NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht - Gunook
Video: Amazing arduino project 2024, Juli
Anonim
NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht
NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht
NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht
NaTaLia Wetterstation: Arduino solarbetriebene Wetterstation richtig gemacht

Nach 1 Jahr erfolgreichem Betrieb an 2 verschiedenen Standorten teile ich meine Projektpläne für solarbetriebene Wetterstationen und erkläre, wie es sich zu einem System entwickelt hat, das wirklich über lange Zeiträume von Solarstrom überleben kann. Wenn Sie meine Anweisungen befolgen und genau die gleichen Materialien wie aufgelistet verwenden, können Sie eine solarbetriebene Wetterstation bauen, die viele Jahre lang läuft. Tatsächlich ist der einzige Faktor, der die Betriebsdauer begrenzt, die Lebensdauer der Batterie, die Sie verwenden.

Schritt 1: Betrieb der Wetterstation

1, Sender: Außenmontierte Box mit Solarpanel, die regelmäßig Wettertelemetrie (Temperatur, Feuchtigkeit, Wärmeindex, Solarstärke) an die Innenempfängereinheit sendet.

2, Empfänger: Inneneinheit aus einem Raspberry PI 2 + Arduino Mega mit einem 433 Mhz RF-Empfänger, der für den Datenempfang angeschlossen ist. In meinem Setup hat dieses Gerät keine lokale LCD-Anzeigefunktion. Es läuft rücksichtslos. Ein Haupt-C-Programm kümmert sich darum, die eingehenden Daten vom Arduino über die serielle Schnittstelle zu empfangen, die Daten dann in eine Textdatei zu protokollieren und die zuletzt empfangenen Daten über Telnet für andere Geräte zur Abfrage zur Verfügung zu stellen.

Die Station steuert die Lichter in meinem Haus durch das Lesen des Fotowiderstands (der bestimmt, ob draußen Tag oder Nacht ist). Der Empfänger ist in meinem Fall ohne Kopf, aber Sie können das Projekt leicht ändern, um ein LCD-Display hinzuzufügen. Eines der Geräte, die die Wetterdaten der Station verwenden, analysieren und anzeigen, ist mein anderes Projekt: Ironforge, der NetBSD-Toaster.

Schritt 2: Erste Versionen

Erste Versionen
Erste Versionen
Erste Versionen
Erste Versionen
Erste Versionen
Erste Versionen
Erste Versionen
Erste Versionen

Es gibt viele Solarprojekte im Netz, aber viele begehen den weit verbreiteten Fehler, dass das System mit der Zeit mehr Energie aus der Batterie entnimmt, was das Solarpanel vor allem in den bewölkten, dunklen Wintermonaten wieder auffüllen könnte.

Wenn Sie ein solarbetriebenes System entwerfen, zählt nur der STROMVERBRAUCH an allen Komponenten: MCU, Funksender, Spannungsregler usw.

Einen großen Computer wie einen Himbeer-Pi oder ein stromhungriges WLAN-Gerät wie den ESP zu verwenden, um nur ein paar Wetterdaten zu sammeln und zu transportieren, wäre ein Overkill, aber wie ich es in diesem Tutorial zeigen werde, ist es sogar ein kleines Arduino-Board.

Am besten messen Sie den Strom während Ihres Bauprozesses immer mit einem Messgerät oder mit einem Oszilloskop (nützlich, wenn Sie versuchen, kleine Nutzungsspitzen während des Betriebs in sehr kurzen Zeitspannen (Millisekunden) zu messen).

Auf dem ersten Bild sieht man meine erste (Arduino Nano Based) Station und das zweite Arduino Barebone Atmega 328P Board.

Die erste Version hatte, obwohl sie einwandfrei funktionierte (Überwachung der Umgebung und Senden von Daten über Funk), einen zu hohen Stromverbrauch von ~ 46 mA und entleerte den Akku in wenigen Wochen.

Alle Versionen verwendeten die folgende Batterie:

18650 6000mAh geschützter Lithium-Ionen-Akku Eingebaute Schutzplatine

AKTUALISIEREN Sie diese ScamFire-Batterien. Obwohl dies ein ziemlich altes Instructable ist, fühlte ich mich immer noch gezwungen, es aufgrund dieser falschen Batterie zu korrigieren. Kaufen Sie NICHT die erwähnte Batterie, recherchieren Sie selbst über andere LION / LIPO-Batterien, alle 3,7-V-Batterien funktionieren mit diesem Projekt.

Endlich hatte ich Zeit, die ScamFire-Batterie zu entlarven, um zu sehen, wie hoch ihre tatsächliche Kapazität ist. Daher werden wir 2 Berechnungen nebeneinander mit den realen und den "ausgeschriebenen" Kapazitäten durchführen.

Zuallererst ist das eine Sache, dass diese Batterie gefälscht ist und nichts ist wahr, was sie behaupten.

Ein kleiner Artikel zu LION/LIPO Batterien:

TLDR:

Dies bedeutet, dass die maximale Spannung der Zelle 4,2 V beträgt und dass die "nominale" (durchschnittliche) Spannung 3,7 V beträgt.

Hier ist zum Beispiel ein Spannungsverlauf für eine 'klassische' 3,7V/4,2V Batterie. Die Spannung beginnt bei maximal 4,2 und fällt für den größten Teil der Akkulaufzeit schnell auf etwa 3,7 V ab. Sobald Sie 3,4 V erreichen, ist die Batterie leer und bei 3,0 V trennt die Trennschaltung die Batterie.

Meine Messungen mit einer Dummy-Load:

Akku geladen: 4.1V

Cutoff eingestellt auf: 3,4V

Lastsimulation: 0,15 A (mein Gerät hatte ein kleines Problem damit, niedriger zu gehen.)

Gemessene Kapazität: 0,77 Ah ergeben eine unentgeltliche 0,8 Ah, was 800 mAh anstelle der beworbenen 6000 mAh entspricht!

Da diese Batterie nicht einmal die Schutzschaltung hatte, konnte ich frei nach unten gehen, aber bei 3,4 V stürzte sie nach 10 Minuten bereits auf 3,0 V ab.

Daher bietet die Batterie mit einfachen Berechnungen:

Theoretisch

Batteriespannung =3.7V

Leistung =3,7x6000= 22000 mWh

Real

Batteriespannung =3,7VLeistung =3,7x800= 2960 mWh

Version: 0.1 ARDUINO NANO BASIEREND

Auch mit der LowPower-Bibliothek verbraucht ein Arduino nano ~ 16 mA (im Schlafmodus) -> FAIL.

Theoretisch

Pavg=VxIavg =5Vx16mA= 80 mW

Batterielebensdauer = 22000/80 = 275 Stunden = ca. 11 Tage

RealPavg=VxIavg =5Vx16mA= 80 mW

Akkulaufzeit = 800/80 =10 Stunden

Version: 0.2 Atmega 328P Barebone

Der Stromverbrauch eines ATmega328 hängt stark davon ab, was Sie damit machen. Wenn es nur in einem Standardzustand sitzt, kann es 16 mA @ 5 V verwenden, während es mit 16 MHz läuft.

Wenn sich der ATmega328P im aktiven Modus befindet, führt er kontinuierlich mehrere Millionen Befehle pro Sekunde aus. Darüber hinaus die On-Board-Peripherie-Analog-Digital-Wandler (ADC), Serial Peripheral Interface (SPI), Timer 0, 1, 2, Two Wire Interface (I2C), USART, Watchdog Timer (WDT) und die Brown-out-Erkennung (BOD) verbrauchen Strom.

Um Strom zu sparen, unterstützt die ATmega328P MCU eine Reihe von Schlafmodi und nicht verwendete Peripheriegeräte können ausgeschaltet werden. Die Schlafmodi unterscheiden sich darin, welche Teile aktiv bleiben, durch die Schlafdauer und die zum Aufwachen benötigte Zeit (Aufwachzeit). Der Schlafmodus und die aktiven Peripheriegeräte können mit den AVR-Schlaf- und Leistungsbibliotheken oder, kurz gesagt, mit der hervorragenden Low-Power-Bibliothek gesteuert werden.

Die Low-Power-Bibliothek ist einfach zu bedienen, aber sehr leistungsstark. Die Anweisung LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); setzt die MCU in SLEEP_MODE_PWR_DOWN für 16 ms bis 8 s, abhängig vom ersten Argument. Es deaktiviert den ADC und den BOD. Power-Down-Sleep bedeutet, dass alle Chipfunktionen bis zum nächsten Interrupt deaktiviert sind. Außerdem wird der externe Oszillator gestoppt. Nur Level-Interrupts auf INT1 und INT2, Pin-Change-Interrupts, TWI/I2C-Adressübereinstimmung oder der WDT, falls aktiviert, können die MCU aufwecken. So minimieren Sie mit der einzigen Anweisung den Energieverbrauch. Bei einem 3,3 V Pro Mini ohne Power-LED und ohne Regler (siehe unten), auf dem die Anweisung ausgeführt wird, beträgt der Energieverbrauch 4,5 μA. Das ist sehr nah an dem, was im ATmega328P-Datenblatt für den Power-Down-Sleep mit aktiviertem WDT von 4,2 μA erwähnt wird (Datenblatt in Quellen verlinkt). Daher bin ich ziemlich zuversichtlich, dass die powerDown-Funktion alles abschaltet, was vernünftigerweise möglich ist. Mit der Anweisung LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); wird der WDT deaktiviert und Sie würden erst aufwachen, wenn ein Interrupt ausgelöst wird.

Mit dem Barebone-Setup können wir den Chip also für 5 Minuten in den Ruhemodus versetzen, während er sehr wenig Energie verbraucht (0,04 mA ohne Peripherie). Dies ist jedoch nur der Atmega 328P-Chip mit dem Quarzoszillator und sonst nichts, der in dieser Konfiguration verwendete Spannungsbooster zur Erhöhung der Batteriespannung von 3,7 V -> 5,0 V verbraucht ebenfalls 0,01 mA.

Ein konstanter Spannungsverbrauch war der zusätzliche Fotowiderstand, der den Verbrauch im Schlafmodus auf insgesamt 1 mA (einschließlich aller Komponenten) erhöhte.

Die Formel zur Berechnung des genauen Verbrauchs für das Gerät sowohl im Schlaf- als auch im Aufwachmodus lautet:

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

Ion = 13mA

Dies kommt hauptsächlich vom RF433 Mhz Sender:

Sender:

Arbeitsspannung: 3V - 12V für max. Leistungsaufnahme 12VBetriebsstrom: max Weniger als 40mA max und min 9mARResonanzmodus: (SAW)Modulationsmodus: ASKArbeitsfrequenz: Eve 315MHz oder 433MHz Sendeleistung: 25mW (315MHz bei 12V)Frequenzfehler: +150kHz (max)Geschwindigkeit: weniger als 10Kbps

Ruhezustand = 1 mA

Wäre ohne den Fotowiderstand deutlich weniger.

Trunon-Zeit Ton = 250 mS = 0,25 s

Schlafzeit 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

Theoretisch

Batterielebensdauer = 22000 mWh/6 mW = 3666 Stunden = 152 Tage ungefähr

Real

Batterielebensdauer = 800 mWh/6 mW = 133 Stunden = ungefähr 5,5 Tage

Obwohl dies immer noch eine bessere UltraFire-Serie war, die ich anfangs verwendet habe, konnte man sehen, dass dieses Projekt ohne das Solarpanel oder den geringen 1mA-Verbrauch nicht lange überleben würde.

Zögern Sie nicht, die Station zu bauen und Ihre Erkenntnisse und Berechnungen in die Kommentare zu schreiben und ich werde den Artikel aktualisieren. Ich würde mich auch über Ergebnisse mit verschiedenen MCUs und Aufwärtswandlern freuen.

Schritt 3: Aufbau einer erfolgreichen Wetterstation

Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation
Aufbau einer erfolgreichen Wetterstation

Obwohl es die erste erfolgreiche Version ist, enthält sie ein wenig Fehler auf den Bildern und ich kann diese nicht neu erstellen, da die Stationen bereits bereitgestellt sind. Die beiden auf dem Bild gezeigten Spannungsbooster sind zum Zeitpunkt des Schreibens für den Modellflug und andere Anwendungen erhältlich. Als ich meine Station neu gestaltete, dachte ich darüber nach, eine kleinere und effizientere Spannungserhöhungsplatine zu bekommen, aber eine kleinere Größe bedeutet definitiv nicht, dass sie effizienter ist.

Das neue kleine Modul auf dem Bild, das nicht einmal eine Anzeige-LED hat, hat tatsächlich 3 mA (*FAIL*) verbraucht, also bin ich bei meinem alten Board geblieben:

PFM Control DC-DC USB 0,9V-5V bis 5V DC Boost Aufwärts-Stromversorgungsmodul

Zum Zeitpunkt des Schreibens ist dieses Modul noch bei Ebay für 99 Cent erhältlich, aber wenn Sie sich für einen anderen Booster entscheiden, überprüfen Sie immer den Standby-Stromverbrauch. Bei einem guten Booster sollte es nicht mehr als meiner (0,01 mA) sein, obwohl die kleine LED an Bord ausgelötet werden musste.

Schritt 4: Hardwareliste

Hardwareliste
Hardwareliste
  • 18650 6000mAh geschützter Lithium-Ionen-Akku Eingebaute Schutzplatine
  • Atmega 328P16M 5V mit Bootloader
  • Adafruit DC Boarduino (Arduino-kompatibel) Kit (w/ATmega328) < dies wird eine gute Investition sein, wenn Sie zukünftige Barebone-Projekte durchführen
  • Fotolichtempfindlicher Widerstand Fotowiderstand Optowiderstand 5mm GL5539
  • 1A 1000V Diode 1N4007 IN4007 DO-41 Gleichrichterdioden
  • PFM Control DC-DC USB 0,9V-5V bis 5V DC Boost Aufwärts-Stromversorgungsmodul
  • 1,6W 5,5V 266mA Mini Solar Panel Modulsystem Epoxy Cell Charger DIY
  • TP405 5V Mini USB 1A Lithium Batterie Ladeplatine Lademodul
  • 433Mhz RF Sender und Empfänger Link Kit für Arduino/ARM/MC Fernbedienung < Kit, enthält sowohl den Sender als auch den Empfänger
  • IP65 Switch Protector Junction Box Outdoor wasserdichtes Gehäuse 150x110x70mm
  • Neues Sensormodul DHT22 für Temperatur und relative Luftfeuchtigkeit für Arduino
  • 1x220 Ohm, 2x10KOhm, 1xLED, 1xMini Switch, 1x1N4007Diode
  • Adafruit 16 MHz Keramik-Resonator / -Oszillator [ADA1873]
  • Arduino UNO/Mega etc für Empfangsstation + Raspberry PI 1/2/3
  • Klare Acryl-Kunststoffbox (optional)

All dies findet man bei Ebay, ich möchte keine Verkäufer durch Verlinken auf ihre Seiten fördern und die Links werden in Zukunft sowieso tot sein.

Hinweise zur Hardwareliste:

Nur für den Fall, dass Sie den Atmega irgendwie mit Programmierung mauern, kaufen Sie mehr davon, dasselbe gilt für den Spannungsbooster und den Solarladeregler.

Das Solarladegerät enthält 2 kleine Farb-LEDs, die nur bei Solarladung leuchten und anzeigen (rot-> Laden, blau-> voll geladene Zustände). Diese können auch entlötet werden. Es gibt dem Akku beim Laden eher etwas mehr Saft.

Wie Sie sehen, befinden sich keine Batteriehalter auf meiner Liste. Wieso den? Weil sie unzuverlässig sind. Ich hatte unzählige Gelegenheiten, bei denen der Akku aus seiner Halterung herausgezogen wurde und die Verbindung verloren ging. Vor allem, wenn Ihr Setup auf einer hohen Dish-Pole wie meinem montiert ist, offen für alle rauen Wetterbedingungen. Ich habe sogar den Akku mit 2 Reißverschlüssen in die Halterung gezippt und er hat es immer noch geschafft, sich herauszubewegen. Tun Sie es nicht, entfernen Sie einfach die äußere Beschichtung von der Batterie und löten Sie die Drähte direkt in die Unterseite der Batterie, die die Überladungsschutzschaltung enthält (den Schutz nicht umgehen). Ein Batteriehalter kann nur verwendet werden, um den Akku im Gerät zu fixieren.

TP405 5V Mini USB 1A Lithium-Batterie-Ladeplatine: Leider enthält diese Platine keinen Rückstromschutz für das Solarpanel nachts in das Solarpanel zurückfließen.

Schritt 5: Montage

Montage
Montage
Montage
Montage
Montage
Montage

Diese Platine enthält relativ wenige Komponenten und die Markierungen auf der Platine sind ziemlich einfach.

Stellen Sie sicher, dass Sie den Atmega328P NICHT falsch herum einsetzen (dies kann sich erhitzen und den Chip blockieren, kann auch den Spannungsbooster zerstören).

In diesem Setup zeigt der Chip nach unten (kleine U-Lochmarkierung PIN1). Alle anderen Komponenten sollten offensichtlich sein.

Verwenden Sie für den LDR ein abgeschirmtes Kabel (zB: Audiokabel von CD-ROM reicht). In einigen Fällen (über viele Testwochen) stellte sich heraus, dass es die Funksignalübertragung stört. Dies war einer dieser Fehler, die schwer zu beheben sind. Wenn Sie also keine Probleme haben möchten, verwenden Sie einfach ein abgeschirmtes Kabel, Ende der Geschichte.

LED: Die LED auf der Unterseite der Box wurde ursprünglich hinzugefügt, um zu blinken, wenn eine ausgehende Funkübertragung stattfindet, aber später habe ich dies als Energieverschwendung angesehen und sie blinkt nur 3 Mal beim Bootvorgang.

TP: ist Testpunkt zum Messen des Stroms für die Gesamtschaltung.

DHT22: Kaufen Sie nicht das billige DHT11, sondern geben Sie 50 Cent mehr aus, um das weiße DHT22 zu erhalten, das auch negative Temperaturen messen kann.

Schritt 6: Gehäusedesign

Gehäusedesign
Gehäusedesign
Gehäusedesign
Gehäusedesign
Gehäusedesign
Gehäusedesign

Obwohl es ein bisschen übertrieben ist, wurde ein 3D-gedruckter Würfel (weather_cube) hergestellt, um den DHT22-Temperatursensor an Ort und Stelle zu halten. Der Würfel wird auf den Boden der IP-Box geklebt und hat nur 1 Loch für die Luft, um den Sensor zu erreichen. Ich habe am Loch ein Netz gegen Bienen, Wespen und andere kleine Fliegen angebracht.

Optional kann eine externe Box verwendet werden, um die Station wasserdichter zu machen, falls Sie sie im Freien an einer Geschirrstange montieren.

Idee für 1 nützliche Funktion: Hinzufügen einer großen Metalldachplatte 1-2 cm oben auf der Box, die im Sommer Schatten vor der Sonne bietet, obwohl dies auch unser nützliches Sonnenlicht vom Panel nehmen könnte. Sie können sich ein Design ausdenken, das die Platte und die Box trennt (die Platte in der Sonne lassen, die Box im Schatten).

Auf den Bildern: Eine der Stationen wurde nach 1 Jahr aus der Arbeitsumgebung entfernt, die Batteriespannung beträgt immer noch atemberaubende 3,9 V, kein Wasserschaden an irgendeinem Teil der Box, obwohl das Netz, das ich an der Unterseite des Würfels geklebt hatte, zerrissen war. Der Grund, warum die Station gewartet werden musste, ist ein Verbindungsfehler am LDR-Anschluss. Obwohl das Überbrückungskabel noch vorhanden zu sein schien, war die Verbindung unterbrochen, sodass der Stift manchmal schwamm und schlechte LDR-Analoganzeigen lieferte. Vorschlag: Wenn Sie Standard-PC-Jumperkabel verwenden, kleben Sie diese alle heiß, nachdem die Station perfekt funktioniert, um dies zu vermeiden.

Schritt 7: Software

Software
Software

Der Softwarecode erfordert 3 externe Bibliotheken (LowPower, DHT, VirtualWire). Ich hatte in letzter Zeit Probleme, einige davon einfach online zu finden, also habe ich sie in einer separaten ZIP-Datei angehängt. Unabhängig davon, welches Betriebssystem Sie Linux / Windows verwenden, suchen Sie einfach den Bibliotheksordner Ihrer Arduino IDE und extrahieren Sie sie dort.

Nur eine Anmerkung, unabhängig davon, dass ich bereits vom Kauf des DHT11 abraten, wenn Sie den falschen DHT-Sensortyp verwenden, bleibt das Programm am Anfang am Initialisierungsabschnitt für immer hängen (Sie sehen nicht einmal, dass die Start-LED dreimal blinkt).

Der Hauptschleifencode ist sehr einfach, zuerst liest er die Umgebungswerte (Temperatur, Wärmeindex, Luftfeuchtigkeit, Solar), sendet sie über Funk und verwendet dann die Lowpower-Bibliothek, um den Arduino für 5 Minuten in den Ruhezustand zu versetzen.

Ich habe festgestellt, dass eine Verringerung der Baudrate die Stabilität der Funkübertragungen erhöht. Die Station sendet eine sehr kleine Datenmenge, 300 bps sind mehr als genug. Vergessen Sie auch nicht, dass der Sender erst ab ca. 4,8V, in der zukünftigen 3,3V-Version kann dies zu noch schlechterer Übertragungsqualität führen (Daten durch Wände und andere Hindernisse senden). Ich habe ein Problem mit der Verwendung eines Arduino Mega, der an einen Raspberry PI 2 angeschlossen ist und den Mega vom PI mit Strom versorgt, dass ich keine Übertragung erhalten habe. Die Lösung bestand darin, den Mega über eine separate externe 12-V-Versorgung zu betreiben.

Schritt 8: Version 2 (ESP32-basiert)

Version 2 (ESP32-basiert)
Version 2 (ESP32-basiert)
Version 2 (ESP32-basiert)
Version 2 (ESP32-basiert)
Version 2 (ESP32-basiert)
Version 2 (ESP32-basiert)

Alles, was kaputt gehen kann, wird kaputt gehen, um den guten alten Murphy zu zitieren und schließlich scheiterten die Stationen nach Jahren auf mysteriöse Weise. Man fing an, Kauderwelsch-Solardaten zu senden, die Zehntausende erreichten, was unmöglich ist, weil: Das Arduino-Board enthält einen 6-Kanal (8 Kanäle beim Mini und Nano, 16 beim Mega), 10-Bit-Analog-Digital-Wandler. Dies bedeutet, dass es Eingangsspannungen zwischen 0 und 5 Volt in ganzzahlige Werte zwischen 0 und 1023 abbildet. Nachdem ich das Radio, LDR und den Atmega 328P mehrmals ausgetauscht und neu programmiert hatte, gab ich auf und entschied, dass es Zeit für Innovation ist. Auf geht's ESP32.

Das von mir verwendete Board war ein: ESP32 WEMOS LOLIN32 Lite V1.0.0 Wifi & Bluetooth Card Rev1 MicroPython 4MB FLASH

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

Mikrocontroller ESP-32

Betriebsspannung 3,3 V Digitale E/A-Pins 19 analoge Eingangspins 6 Taktgeschwindigkeit (max.) 240 MHz Flash 4 MB Byte Länge 5 mm Breite 2,54 mm Gewicht 4 g

Welches im Gegensatz zum abgebildeten nicht das LOLIN-Logo hat (Fälschung aus China). Meine erste angenehme Überraschung war, dass die auf der Platine gedruckte Pinbelegung mit der Arduino-Pinbelegung übereinstimmte! Nachdem ich mich mit so vielen Noname-Boards beschäftigt habe, bei denen ich den ganzen Tag todmüde nach Pinouts suchen musste, um Fehler zu machen, endlich ein Board, bei dem die Pinbelegung einfach ist WoW!

Hier ist jedoch die dunkle Seite der Geschichte:

Anfangs habe ich den LDR mit A15 verbunden, der Pin 12 ist, weil es einfacher war, die Pins zusammenzukleben. Dann habe ich 4095 Anzeigen (das ist das Maximum, das Sie mit AnlogRead auf dem ESP32 erhalten können), was mich wahnsinnig gemacht hat, denn der einzige Grund, warum ich die Station umgebaut habe, waren die kaputten LDR-Anzeigen der alten (das DHT funktionierte immer noch einwandfrei)). Es stellt sich also heraus:

Der esp 32 integriert zwei 12-Bit-ACD-Register. ADC1 mit 8 Kanälen an GPIOs 32-39 und ADC2 mit 10 Kanälen in anderen Pins. Die Sache ist, dass der ESP32 den ADC2 verwendet, um die WLAN-Funktionen zu verwalten. Wenn Sie also WLAN verwenden, können Sie dieses Register nicht verwenden. Die ADC-Treiber-API unterstützt ADC1 (8 Kanäle, verbunden mit GPIOs 32 - 39) und ADC2 (10 Kanäle, verbunden mit GPIOs 0, 2, 4, 12 - 15 und 25 - 27). Die Verwendung von ADC2 hat jedoch einige Einschränkungen für die Anwendung:

ADC2 wird vom Wi-Fi-Treiber verwendet. Daher kann die Anwendung ADC2 nur verwenden, wenn der Wi-Fi-Treiber nicht gestartet wurde. Einige der ADC2-Pins werden als Strapping-Pins (GPIO 0, 2, 15) verwendet und können daher nicht frei verwendet werden. Dies ist bei den folgenden offiziellen Development Kits der Fall:

Das Verbinden des LDR von Pin 12 mit A0, dem VP, hat alles gelöst, aber ich verstehe nicht, warum sie sogar ADC2-Pins als für Hersteller verfügbar auflisten. Wie viele andere Hobbisten haben tonnenweise Zeit verschwendet, bis sie das herausgefunden haben? Kennzeichnen Sie die unbrauchbaren Pins zumindest mit Rot oder so oder erwähnen Sie es im Handbuch überhaupt nicht, damit andere Hersteller nur dann davon erfahren können, wenn sie sie wirklich brauchen. Der ganze Zweck des ESP32 besteht darin, es mit WIFI zu verwenden, jeder nutzt es mit WIFI.

Ein guter Start zum Einrichten der Arduino-IDE für dieses Board:

Obwohl ich es hier in den Code eingefügt habe, geht es noch einmal:

Dieser Code wird möglicherweise nicht für andere ESP32-Modelle als den Weemos LOLIN 32 kompiliert!

Build-Einstellungen: -Use Upload/Seriell: 115200 -Use CPU/RAM: 240Mhz(Wifi|BT) -Use Flash Freq: 80Mhz

Es gibt Unmengen von ESP32-basierten Wetterstationen im Netz, sie sind viel häufiger als meine Version 1 mit dem Barebone-Chip, weil sie einfacher einzurichten sind, Sie brauchen keinen Programmierer, schließen Sie das Gerät einfach an USB an und programmieren Sie es und ihre Der Deep-Sleep-Modus eignet sich hervorragend für lange Akkulaufzeiten. Auf Anhieb war dies das allererste, was ich getestet habe, noch bevor ich die Breakout-Pins einlöte, denn wie ich an mehreren Stellen in diesem Projekt bemerkt habe, ist das Wichtigste der Stromverbrauch und mit der aktuellen (gefälschten) Batterie und dem kleinen Solarpanel der Standby Strom kann nicht wirklich über 1-2m gehen, da sich das Projekt sonst nicht auf Dauer halten kann.

Es war wieder eine angenehme Überraschung, dass der Tiefschlafmodus wie beworben funktioniert. Während des Tiefschlafs war der Strom so gering, dass mein billiges Multimeter ihn nicht einmal messen konnte (funktioniert bei mir).

Während des Sendens von Daten betrug der Strom etwa 80 mA (das ist etwa 5-mal mehr als beim Aufwachen und Senden des Atmega 328P), vergessen Sie jedoch nicht, dass der LDR beim V1 im Ruhemodus einen durchschnittlichen Stromverbrauch von 1 mA hatte (was auch von der Lichtstärke abhing und von 0,5mA - 1mA ging) das ist jetzt weg.

Nun, da der UltraFire-Akku entlarvt ist, wenn Sie denselben Akku verwenden, können Sie Folgendes erwarten:

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

Theoretisch

Batterielebensdauer = 22000 mWh/2,5 mW = 8800 Stunden = 366 Tage ungefähr

Real

Batterielebensdauer = 800 mWh/2,5 mW = 320 Stunden = 13 Tage ungefähr

Ich hatte kein Zielfernrohr, um die Einschaltzeit genau zu messen, aber mit meinen Optimierungen sind es etwa 2 Sekunden.

Ich wollte den Nachmittag nicht damit verbringen, alles individuell zu codieren, also suchte ich nach einigen anderen Wetterstationen auf Instructables basierend auf ESP32, um zu sehen, was sie für die Datenspeicherung tun. Habe leider festgestellt, dass sie unflexible und eingeschränkte Websites wie Weathercloud verwenden. Da ich kein Fan der "Cloud" bin und ihr Code lange Zeit kaputt gegangen ist, weil die Site seitdem ihre API geändert hat, habe ich meine 10 Minuten gebraucht, um eine benutzerdefinierte Lösung zu erstellen, weil es nicht so schwer ist, wie man vielleicht denkt. Lass uns anfangen!

Zuallererst gibt es für dieses Projekt kein separates Platinenbild, da es genau die gleichen Komponenten verwendet (sorry für das im hässlichen Steckbrettbild gelötete) wie das V1 mit dem Unterschied, dass alles mit 3,3 V läuft. Der DHT hat sich mit einem Pullup zu VCC angeschlossen, der LDR mit einem 10k. Das Problem, das man bei den 18650-Batterien wie meiner chinesischen Fälschung (6500 mAh Ultra Sun Fire lol: D) sehen könnte, ist, dass sie die Entladekurve ab etwa 4,1 V beginnen und so lange gehen, bis ihre Abschaltschaltung einsetzt, um Zellschäden zu stoppen (diejenigen, die das Glück haben, es zu haben). Dies ist für uns als 3,3V-Eingang nirgendwo gut. Obwohl dieses LOLIN-Board in diesem Projekt über einen Lithium-Batterieanschluss und eine Ladeschaltung verfügt, wollte ich das meiste, was ich von der alten Station konnte, renovieren, sodass Sie dieses eingebaute Ladegerät mit dem alten 18650 NICHT verwenden können. Die Lösung war denkbar einfach: Ich habe ein in die 5V gelötetes Micro-USB-Kabel vom alten Spannungsbooster abgeschnitten und voila Problem gelöst, da die Platine auf dem MicroUSB einen Regler hat.

Der Unterschied zwischen der alten und der neuen Version besteht also darin, dass die alte Batterie 3,7 V liefert -> auf 5 V angehoben -> ardu läuft mit 5 V -> alle Komponenten laufen mit 5 V.

In der neuen: Batterie liefert 3,7V -> auf 5V angehoben -> durch Onboard-Regler auf ESP32 geregelt -> alle Komponenten laufen mit 3,3V.

Softwaretechnisch benötigen wir auch eine andere DHT-Bibliothek, das DHT des Arduino ist nicht mit den ESPs kompatibel. Was wir brauchen, heißt DHT ESP.

Ich begann, meinen Code auf dem DHT-Beispiel zu basieren, das dieser Code bereitgestellt hat. Die Funktionsweise des Codes ist:

1, Holen Sie sich die Umweltdaten vom DHT + Solardaten von der Fotozelle

2, Verbinden Sie sich mit WLAN mit statischer IP

3, POST die Daten in ein PHP-Skript

4, 10 Minuten schlafen gehen

Wie Sie feststellen werden, habe ich den Code auf Effizienz abgestimmt, um die Aufwachzeit absolut zu minimieren, da er das 5-fache der Energie verbraucht als das alte Projekt, wenn es eingeschaltet ist. Wie habe ich das gemacht? Zuallererst, wenn es IRGENDEINE Art von Fehler gibt, gibt die Funktion getTemperature() mit false zurück (was wiederum 10 Minuten Schlaf bedeutet). Dies kann daran liegen, dass der DHT-Sensor nicht initiiert werden kann oder die WLAN-Verbindung nicht verfügbar ist. Wie Sie bemerken, wurde die übliche while()-Schleife für den ewigen Versuch der WLAN-Verbindung ebenfalls entfernt, aber es musste eine Verzögerung von 1 Sekunde drin bleiben, sonst wird die Verbindung nicht immer hergestellt und es hängt auch vom AP-Typ, der Last usw. ab, wie schnell sie ist wird passieren, bei 0,5s habe ich inkonsistentes Verhalten bekommen (manchmal konnte keine Verbindung hergestellt werden). Wenn jemand einen besseren Weg dafür kennt, hinterlasse es bitte in den Kommentaren. Nur wenn die DHT-Daten gelesen UND die WLAN-Verbindung besteht, wird versucht, die Daten an das Skript auf dem Webserver zu senden. Alle Arten von Zeitverschwendungsfunktionen wie Serial.println() sind auch im normalen Betriebsmodus deaktiviert. Als Server verwende ich auch IP, um eine unnötige DNS-Suche zu vermeiden, in meinem Code sind sowohl das Standard-Gateway als auch der DNS-Server auf 0.0.0.0 eingestellt.

Ich verstehe nicht, warum es so schwer ist, eine eigene API zu erstellen, wenn nur Folgendes erforderlich ist:

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

int httpResponseCode =

Sie fügen diesen kleinen PHP-Code in einen beliebigen Himbeer-Pi ein und können basierend auf der Telemetrie sofort system()-Aufgaben ausführen, wie z. B. Lüfter einschalten oder Licht einschalten, wenn es dunkel genug wird.

Einige Hinweise zum Code:

WiFi.config (statische IP, Gateway, Subnetz, DNS); // MUSS sein, nachdem Wifi angefangen hat, wie dumm…

WiFi.mode(WIFI_STA); // MUSS, sonst wird auch ein unerwünschter AP erstellt

Ja, jetzt weißt du es. Auch die Reihenfolge der IP-Konfigurationen kann sich über Plattformen ändern, ich habe zuerst andere Beispiele ausprobiert, bei denen die Gateway- und Subnetzwerte umgeschaltet wurden. Warum eine statische IP einstellen? Nun, es ist ziemlich offensichtlich, wenn Sie eine dedizierte Box in Ihrem Netzwerk haben, wie einen Linux-Server, auf dem isc dhcpd ausgeführt wird, möchten Sie keine hundert Millionen Protokolleinträge, wenn der ESP aufwacht und die IP vom DHCP erhält. Router protokollieren normalerweise keine Zuordnungen, so dass sie unsichtbar bleiben. Dies ist der Preis für die Energieeinsparung.

V2 konnte sich aufgrund der Batterie von schlechter Qualität nie selbst halten und ich habe sie einfach auf einen Adapter gesteckt. Wenn Sie also entweder die V1 oder V2 bauen möchten, kaufen Sie NICHT die erwähnte Batterie, sondern recherchieren Sie selbst nach Batterien über 2000 mAh beworbene Kapazität bei Ebay ist mit hoher Wahrscheinlichkeit ein Betrug).

Empfohlen: