Projekt 84: Wetterstation: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 93: | Zeile 93: | ||
== Software == | == Software == | ||
Die Programmierung wurde mit der Arduino IDE umgesetzt. | Die Programmierung wurde mit der Arduino IDE umgesetzt. | ||
Um den WemosD1 mini mit dieser Software programmieren zu können muss zunächst der Mikrocontroller in die Hardwareübersicht der Software eingebunden werden. Dies | Um den WemosD1 mini mit dieser Software programmieren zu können muss zunächst der Mikrocontroller in die Hardwareübersicht der Software eingebunden werden. Dies erfolgte nach folgender [https://www.heise.de/ct/artikel/Arduino-IDE-installieren-und-fit-machen-fuer-ESP8266-und-ESP32-4130814.html Anleitung].Nachdem der Mikrocontroller eingebunden ist, ist der Weg für die Innen- & Außenstation unterschiedlich. | ||
===Außenstation=== | ===Außenstation=== | ||
Bei der Außenstation wurden folgende Bibliotheken, die nicht in der Arduino IDE verankert sind, verwendet: | Bei der Außenstation wurden folgende Bibliotheken, die nicht in der Arduino IDE verankert sind, verwendet: | ||
Zeile 100: | Zeile 100: | ||
*[https://github.com/Seeed-Studio/Grove_BME280 Seeed_BME28] Liberay für das Auslesen des BME280) | *[https://github.com/Seeed-Studio/Grove_BME280 Seeed_BME28] Liberay für das Auslesen des BME280) | ||
Des Weiteren wurde eine Header Datei erstellt, in der alle | Des Weiteren wurde eine Header Datei erstellt, in der alle geheimzuhaltenden Daten, wie SSID und Thingspeak-Anmeldedaten, gespeichert werden. | ||
Diese Header Datei muss auch in dem Hauptprogramm inkludiert werden. | Diese Header Datei muss auch in dem Hauptprogramm inkludiert werden. | ||
Das ganze Programm ist im Setup der .ino-Datei geschrieben. Dies ist möglich, da der Mikrocontroller nach einem erfolgreichen | Das ganze Programm ist im Setup der .ino-Datei geschrieben. Dies ist möglich, da der Mikrocontroller nach einem erfolgreichen Übermitteln der Daten in einen Tiefschlaf versetzt wird, um Strom zu sparen. So konnten wir den Stromverbrauch im Tiefschlaf auf unter 1 mA reduzieren und somit die Akku-Laufzeit verlängern. | ||
Nachdem eine Wlan-Verbindung aufgebaut wurde, werden die Sensordaten ausgelesen. | Nachdem eine Wlan-Verbindung aufgebaut wurde, werden die Sensordaten ausgelesen. | ||
Der | Der ausgelesene Luftdruck wird noch mit der [http://wetter.andreae-gymnasium.de/interaktives/Druck/hoehenformel.htm Internationalen Höhenformel] in den Luftdruck auf Meereshöhe bei 15 °C umgerechnet. | ||
Nachdem der Wert für den Lufdruck auf Meereshöhe berechnet wurde werden die Messwerte an den [https://thingspeak.com/channels/604529 ThingSpeak Server] gesendet. | Nachdem der Wert für den Lufdruck auf Meereshöhe berechnet wurde, werden die Messwerte an den [https://thingspeak.com/channels/604529 ThingSpeak Server] gesendet. | ||
===Innenstation=== | ===Innenstation=== | ||
Zeile 116: | Zeile 116: | ||
*[https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library LiquidCrystal_I2C Libary] (Diese Libary wird benötigt um die Informationen auf dem Display auszugeben)<br/><br/> | *[https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library LiquidCrystal_I2C Libary] (Diese Libary wird benötigt um die Informationen auf dem Display auszugeben)<br/><br/> | ||
Des Weiteren gibt es wie bei der Außenstation eine Header-Datei (secretInnen.h) in der die Daten für das Wlan und den Server bereitgestellt werden. Diese Daten werden von dort in das eigentliche Programm geladen. Bei der Innenstation gibt es noch eine weitere Header-Datei, in der die Variablen für die Messwerte und den zeitlichen Ablauf des | Des Weiteren gibt es, wie bei der Außenstation, eine Header-Datei (secretInnen.h) in der die Daten für das Wlan und den Server bereitgestellt werden. Diese Daten werden von dort in das eigentliche Programm geladen. Bei der Innenstation gibt es noch eine weitere Header-Datei, in der die Variablen für die Messwerte und den zeitlichen Ablauf des Programms definiert werden. <br/> | ||
Um einen ähnlichen Zustand wie das "Multi-tasiking" zu erreichen, haben wir mit [https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing millis()] anstatt eines [https://www.arduino.cc/reference/en/language/functions/time/delay/ delay()] gearbeitet. So wartet der Mikroconroller nicht bis die Zeit abgelaufen ist | Um einen ähnlichen Zustand wie das "Multi-tasiking" zu erreichen, haben wir mit [https://learn.adafruit.com/multi-tasking-the-arduino-part-1/using-millis-for-timing millis()] anstatt eines [https://www.arduino.cc/reference/en/language/functions/time/delay/ delay()] gearbeitet. So wartet der Mikroconroller nicht bis die Zeit abgelaufen ist, sondern kann in der Zeit andere Aufgaben erledigen. <br/> | ||
Der eigentliche Programmablauf besteht darin, die Informationen nacheinander auf dem Bildschirm auszugeben. | Der eigentliche Programmablauf besteht darin, die Informationen nacheinander auf dem Bildschirm auszugeben. | ||
Dies erfolgt in folgender Reihenfolge: | Dies erfolgt in folgender Reihenfolge: | ||
Zeile 127: | Zeile 127: | ||
*Den Luftdruck gemessen an der Außenstation und umgerechnet auf den Luftdruck auf Meereshöhe<br/> | *Den Luftdruck gemessen an der Außenstation und umgerechnet auf den Luftdruck auf Meereshöhe<br/> | ||
Des Weiteren werden die Daten der Außenstation alle 10 Minuten vom Server abgerufen. Die Messwerte der Innenstation werden alle zwei Minuten an den Server gesendet. <br/> | Des Weiteren werden die Daten der Außenstation alle 10 Minuten vom Server abgerufen. Die Messwerte der Innenstation werden alle zwei Minuten an den Server gesendet. <br/> | ||
Falls keine Verbindung zum Wlan mehr besteht wird versucht diese wieder herzustellen. Dieser Vorgang wird priorisiert, das heißt es wird solange versucht, bis wieder eine Verbindung besteht. Dabei kann es sein, je nach Dauer der Unterbrechung, dass der WemosD1 mini neugestartet wird. | Falls keine Verbindung zum Wlan mehr besteht, wird versucht diese wieder herzustellen. Dieser Vorgang wird priorisiert, das heißt es wird solange versucht, bis wieder eine Verbindung besteht. Dabei kann es sein, je nach Dauer der Unterbrechung, dass der WemosD1 mini neugestartet wird. | ||
Wenn wieder eine Verbindung hergestellt wurde beginnt der Mikrocontroller wieder mit seinem eigentliche Programmablauf. | Wenn wieder eine Verbindung hergestellt wurde beginnt der Mikrocontroller wieder mit seinem eigentliche Programmablauf. | ||
Version vom 8. Januar 2019, 12:43 Uhr
Autoren: Anna Blankenstein, Timo Schmidt
Betreuer: Prof. Schneider
→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)
Thema
Entwicklung einer modernen, mobilen Wetterstation auf Basis eines Microcontrollers.
Die Wetterstation misst Luftdruck, Luftfeuchtigkeit, Außen- und Innentemperatur und zeigt diese Werte auf einem LC-Display alternierend an.
Zusätzlich wird die aktuelle Uhrzeit ausgegeben.
Die Daten werden auf einem Server gespeichert und können somit von dem Benutzer am PC ausgelesen werden.
Ein weiterer Punkt des Projektes ist die Entwicklung eines Gehäuses für die Wetterstation.
Erwartungen an die Projektlösung
- Planung der Wetterstation bestehend aus Außen- und Innenstation
- Drahtlose Kommunikation der Außensensoren und Wetterstation
- Außensensoren: Temperatur, Feuchtigkeit, Luftdruck
- Die Außenstation ist wetterfest
- Innensensoren: Temperatur, Feuchtigkeit
- Beschaffung der Bauteile (Miniaturisierung mit ESP8266)
- Realisierung des Aufbaus
- Messdatenaufzeichnung
- Wetterprognose anhand der Sensordaten
- Machen Sie ein tolles Videos, welches die Funktion visualisiert.
- Test und wiss. Dokumentation
- Live Vorführung während der Abschlusspräsentation
Kür: Zugriff auf die Wetterdaten via Web-Seite
Aufgabe
Einteilung der Aufgaben in die drei Fachbereiche der Mechatronik:
Elektrotechnik:
• Entwicklung des Schaltplans für die Wetterstation
• Erstellen eines Platinen Layouts
• Bestückung der Platine
• Funktionstest
Mechanik:
• Entwurf eines Gehäuses, Erstellen eines 3D Modells
• Prototypenbau
• Fertigung des finalen Gehäuses
• Zusammenbau der einzelnen Komponenten
Informatik:
• Auswertung der Sensordaten
• Kommunikation zwischen Wetterstation und Außensensor herstellen
• Anzeigen der Daten auf dem LC-Display
Projekt
Projektplan
Zu Beginn des Projektes haben wir eine Anforderungsliste (als Excel-Tabelle) erstellt, die wir nach den verschiedenen Komponenten unserer Aufgabe strukturiert haben. Z.B. gibt es eine eigene Kategorie für die Innenstation und eine für die Außenstation. Wichtige Funktionskomponenten haben ebenfalls eine eigene Kategorie erhalten, wie die Kommunikation der Stationen mit dem Web-Server.
So waren wir schnell in der Lage abzusehen, welche Elemente benötigt werden und worüber wir uns weitere Gedanken, in Bezug auf die Umsetzung, machen mussten. Durch eine interne Aufteilung der Aufgaben konnten wir parallel mit verschiedenen Zweigen der Problemstellung anfangen.
Im Laufe der Projektbearbeitung wurde die Anforderungsliste weiter angepasst und vervollständigt.
Projektdurchführung
Während einer von uns mit dem Erstellen der Schaltpläne begonnen hat, hat die andere Person parallel damit begonnen die 3-D Modelle für die Stationen zu entwerfen. Dabei musste darauf geachtet werden, dass schon an dieser Stelle die Abmessungen einer noch zu designenden Platine berücksichtigt werden. Diese Maße wurden aufgrund von den Abmessungen der einzelnen Bauteile grob geschätzt angenommen.
Als die 3-D-Modelle fertig waren, konnte auch das Platinen-Layout erstellt werden, da nun feststand welche Abmessungen tatsächlich eingehalten werden müssen.
Gleichzeitig konnte schon die Software implementiert werden und es mussten weitere Erkenntnisse z.B. in Bezug auf eine Wettervorhersage mit den gegebenen Daten, gewonnen werden. So hatten wir durchgängig ein funktionsfähiges Programm, das sich nach und nach mit weiteren Funktionen ergänzen ließ.
Zeitgleich wurden die erstellten Schaltungen mit Hilfe eines Steckbretts getestet und konnten anschließend auf der zurechgeschnittenen Platinen realisiert werden. Die Bestückung erfolgte von Hand.
Nachdem das Grundgerüst unseres Projektes stand, fingen wir bereits an die Dokumentation strukturiert zu behandeln. Vorher erbrachte Notizen und Datenblätter haben wir zusammengestellt, um unsere Erkenntnisse differenziert festzuhalten. Nach der Dokumentation planten wir die Präsentation und designten die Elemente für den Messestand.
Hardware-Komponenten
BME280
Der BME280 ist ein integrierter Umgebungssensor. Er ist speziell für mobile Anwendungen entwickelt worden, wobei die Größe und der geringe Stromverbrauch eine entscheidende Rolle bei den Konstruktionsanforderungen spielen. Das Gerät enthält genaue Sensoren für Druck, Luftfeuchtigkeit und Temperatur. Der Luftdruck lässt sich in einem Bereich von 300 bis 1.100 hPa messen. Die absolute Genauigkeit beträgt hier etwa +- 1 hPa. Die Luftfeuchtigkeit kann in einem maximalen Bereich von 0 bis 100 %RH gemessen werden, wobei eine Genauigkeit von +- 3 %RH vorliegt. Die Temperatur lässt sich mit einer Genauigkeit von +- 1 °C im Temperaturbereich von 0 bis 65 °C messen.
DHT11
Der DHT11 ist ein digitaler Temperatur- und Luftfeuchtesensor. Er besitzt eine Auflösung von 16 Bit und misst die relative Luftfeuchtigkeit mit einer Genauigkeit von +- 5 %RH im Bereich von 20 – 90 %RH. Die Temperatur wird ebenfalls mit 16 Bit aufgelöst und kann mit einer Genauigkeit von +- 2 % angegeben werden. Der Temperaturbereich liegt bei 0 bis 50 °C.
LC-Display
Das LC-Display mit aufgelötetem I2C-Kommunikations-Adapter ist dadurch über 4 I/O Leitungen mit einem µ-Controller ansprechbar.
Zwei Leitungen dienen zur Spannungsversorgung (VCC und GND) und die anderen zwei Leitungen (SDA und SCL) dienen zu Datenübertragung. Das Display bietet zwei Zeilen und 16 Spalten, um Zeichen anzuzeigen.
Verwendete Schaltungen
Spannungsversorgung
Alle verwendeten Sensoren werden mit einer Spannung von 3,3 V betrieben, das LC-Display benötigt eine Spannung von 5 V. Da wir für die Spannungsversorgung der Innenstation ein 5 V Netzteil und für die Außenstation eine 9 V Block-Batterie verwenden, ist es notwendig die Spannungen jeweils auf 3,3 V zu reduzieren. Aus diesem Grund setzen wir je einen LF 33 CV Festspannungsregler für die Außen- und Innenstation ein. Dieser reguliert bei Eingangsspannungen, bis maximal 16 V, auf eine stabile Ausgangsspannung von 3,3 V. Dafür ist eine externe Beschaltung erforderlich, bestehend aus Kondensatoren (welche dem Datenblatt des Festspannungsreglers entnommen werden können).
Messschaltungen
Der WemosD1 mini nimmt die Messwerte der Sensoren auf. Dafür müssen diese entsprechend angeschlossen werden. Der BME280 für die Außenstation besitzt vier Anschlüsse. Zwei werden für die Spannungsversorgung benötigt (VIn und GND). Die anderen zwei Anschlüsse (SDA und SCL) dienen der Datenübertragung an den WemosD1. Diese sind verbunden mit den Pins D1 und D2. Die Kommunikation erfolgt über den I2C-Bus.
Der DHT11 für die Innenstation besitzt ebenfalls 4 Anschlüsse, wobei nur drei tatsächlich angeschlossen werden. Zwei der drei Pins sind zur Spannungsversorgung erforderlich (VDD und GND). Der dritte Pin (DATA) wird mit einem seriellen Pin (D4) des WemosD1 verbunden. Da der DHT11 eine Low-aktive Kommunikation betreibt, wird ein Pull-up Widerstand zwischen der Versorgungsspannung und der Datenleitung benötigt, um den Pin auf ein definierten High-Pegel zu legen, wenn keine Kommunikation stattfindet. Die Kommunikation erfolgt über einen single-bus mit 40 Transfer-Bits (2x8 Bit für die Luftfeuchte, 2x8 Bit für die Temperatur und 1x8 Paritätsbits).
Platinen-Layout
Die Platine für die Außenstation hat eine Größe von ~32x39 mm und die Platine der Innenstation eine Größe von ~32x32 mm. Auf beiden Platinen wurde die Spannungsregelung realisiert, sowie die jeweiligen Messschaltungen mit dem WemosD1 mini. Wir waren in der Lage die gesamte Schaltung auf engstem Raum zu gestalten, da der WemosD1 über der Schaltung platziert werden konnte. Über zwei Buchsenleisten auf der Platine ist dieser steckbar mit der Schaltung verbunden, sodass der Großteil des weiteren Layouts darunter Platz finden konnte. Generell ist eine einseitige Bestückung auf Lochrasterplatinen (2,54 mm Rastermaß) von Hand vorgenommen worden.
Software
Die Programmierung wurde mit der Arduino IDE umgesetzt. Um den WemosD1 mini mit dieser Software programmieren zu können muss zunächst der Mikrocontroller in die Hardwareübersicht der Software eingebunden werden. Dies erfolgte nach folgender Anleitung.Nachdem der Mikrocontroller eingebunden ist, ist der Weg für die Innen- & Außenstation unterschiedlich.
Außenstation
Bei der Außenstation wurden folgende Bibliotheken, die nicht in der Arduino IDE verankert sind, verwendet:
- ThingSpeak Liberay (für das Senden der Messwerte an den Server)
- ESP8266WiFi (für die Verwendung des WemosD1 mini, ist inkludiert in der IDE nachdem die Hardware eingebunden wurde)
- Seeed_BME28 Liberay für das Auslesen des BME280)
Des Weiteren wurde eine Header Datei erstellt, in der alle geheimzuhaltenden Daten, wie SSID und Thingspeak-Anmeldedaten, gespeichert werden. Diese Header Datei muss auch in dem Hauptprogramm inkludiert werden. Das ganze Programm ist im Setup der .ino-Datei geschrieben. Dies ist möglich, da der Mikrocontroller nach einem erfolgreichen Übermitteln der Daten in einen Tiefschlaf versetzt wird, um Strom zu sparen. So konnten wir den Stromverbrauch im Tiefschlaf auf unter 1 mA reduzieren und somit die Akku-Laufzeit verlängern. Nachdem eine Wlan-Verbindung aufgebaut wurde, werden die Sensordaten ausgelesen. Der ausgelesene Luftdruck wird noch mit der Internationalen Höhenformel in den Luftdruck auf Meereshöhe bei 15 °C umgerechnet. Nachdem der Wert für den Lufdruck auf Meereshöhe berechnet wurde, werden die Messwerte an den ThingSpeak Server gesendet.
Innenstation
Bei der Innenstation wurden folgende Bibliotheken, die nicht in der Arduino IDE verankert sind, verwendet:
- ESP8266WiFi (für die Verwendung des WemosD1 mini, ist inkludiert in der IDE nachdem die Hardware eingebunden wurde)
- WiFiUdp Libary (Zur Herstellung einer Verbindung zum NTP-Server, ist inkludiert in der IDE nachdem die Hardware eingebunden wurde)
- TimeLib Libary (Mit dieser Libary wird die Uhrzeit vom NTP-Server in die Einzelteile des Datums zerlegt)
- Timezone Libary (mit dieser Libary geht es um die Sommer- und Winterzeit)
- DHTesp Libary (Diese Libary wird verwendet um den DHT11 auszulesen
- LiquidCrystal_I2C Libary (Diese Libary wird benötigt um die Informationen auf dem Display auszugeben)
Des Weiteren gibt es, wie bei der Außenstation, eine Header-Datei (secretInnen.h) in der die Daten für das Wlan und den Server bereitgestellt werden. Diese Daten werden von dort in das eigentliche Programm geladen. Bei der Innenstation gibt es noch eine weitere Header-Datei, in der die Variablen für die Messwerte und den zeitlichen Ablauf des Programms definiert werden.
Um einen ähnlichen Zustand wie das "Multi-tasiking" zu erreichen, haben wir mit millis() anstatt eines delay() gearbeitet. So wartet der Mikroconroller nicht bis die Zeit abgelaufen ist, sondern kann in der Zeit andere Aufgaben erledigen.
Der eigentliche Programmablauf besteht darin, die Informationen nacheinander auf dem Bildschirm auszugeben.
Dies erfolgt in folgender Reihenfolge:
- Uhrzeit & Datum
- Die Temperatur gemessen an der Innenstation
- Die Luftfeuchtigkeit gemessen an der Innenstation
- Die Temperatur gemessen an der Außenstation
- Die Luftfeuchtigkeit gemessen an der Außenstation
- Den Luftdruck gemessen an der Außenstation und umgerechnet auf den Luftdruck auf Meereshöhe
Des Weiteren werden die Daten der Außenstation alle 10 Minuten vom Server abgerufen. Die Messwerte der Innenstation werden alle zwei Minuten an den Server gesendet.
Falls keine Verbindung zum Wlan mehr besteht, wird versucht diese wieder herzustellen. Dieser Vorgang wird priorisiert, das heißt es wird solange versucht, bis wieder eine Verbindung besteht. Dabei kann es sein, je nach Dauer der Unterbrechung, dass der WemosD1 mini neugestartet wird.
Wenn wieder eine Verbindung hergestellt wurde beginnt der Mikrocontroller wieder mit seinem eigentliche Programmablauf.
Ergebnis
Zusammenfassung
Lessons Learned
Projektunterlagen
Link zu dem SVN-Ordner des Projekts: https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/84_Wetterstation/
YouTube Video
Weblinks
Link zur Messdaten-Visualisierung: https://thingspeak.com/channels/604529
Literatur
→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)