Projekt 91: Decimal Clock Tower
Autoren: Eugen Preger, Rudi Sugandi
Betreuer: Daniel Klein
→ zurück zur Übersicht: WS 18/19: Angewandte Elektrotechnik (BSE)
Thema
Der Rheinturm bildet eine Dezimaluhr mit Hilfe von LEDs ab. Darüber hinaus soll die Uhr um Funktionen einer Wetterstation erweitert werden. Dazu werden Temperatur, Luftdruck und Luftfeuchtigkeit gemessen. Ein LED-Streifen dient hierbei sowohl als Anzeige der Uhr, als auch der Wetterdaten
Aufgabe
Konstruktion einer Uhr mit Wetterstation in der Form des Rheinturms
Erwartungen an die Projektlösung
- Technische Recherche zur Lösungskonzeptionierung
- 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
- Bestellung der Bauteile (Miniaturisierung z.B. Arduino Nano)
- Konstruktion des Rheinturms mit der Konstruktionssoftware SolidWorks
- Platinenlayout mit Multisim/Ultiboard
- Platinenfertigung auf dem Fräsbohrplotter
- Softwareprogrammierung: Uhrzeit, Temperatur, Luftfeuchtigkeit, Druck, Messdatenaufzeichnung, Wetterprognose anhand der Sensordaten
- Fertigung und Montage der Bauteile
- Machen Sie ein tolles Videos, welches die Funktion visualisiert.
- Test und wiss. Dokumentation der Lösung
- Live Vorführung während der Abschlusspräsentation
Kür: Zugriff auf die Wetterdaten via Web-Seite
Einleitung
Das Internet der Dinge oder IoT ist das neue Trendwort, welches in den letzten Jahren das Internet erobert. Das IoT beschreibt eine Technologie der kommunikativen Vernetzung von physischen und virtuellen Gegenständen, die dadurch eine gemeinsame Arbeit erfüllen können. Der Decimal Clock Tower beschreibt den miniaturisierten Rheinturm, der sich dieser Technologie bedient. Er stellt nicht nur, wie sein großes Original, die Uhrzeit mit Hilfe einer Dezimal-Uhr dar, dieser misst zudem Wetterdaten aus. Mit Hilfe von Sensorik werden Messdaten, wie Temperatur, Luftfeuchtigkeit und Luftdruck gemessen und drahtlos auf einen eigens dafür erstellten oder von einem host bereitgestellten Webserver versendet. Eine einfache Außenstation, bestückt mit einem kleinen Computer und Sensorik, bietet die Außen-Wetterwerte an. Die Kommunikation zwischen dem Rheinturm und der Außenstation erfolgt ebenfalls drahtlos mit Hilfe eines Protokolls, welcher vom Hersteller der Mikrokontroller bereitgestellt wurde.
Verwendete Hardware
- Entwicklungsboard SBC-NodeMCU-ESP32
- Programmierbare RGB-LED-Streife WS2812B
- Digitaler Temperatur- und Feuchtigkeitssensor DHT22
- Digitaler Luftdruck Sensor BMP180
- Steckernetzteil, 15 W, 5 V, 3 A
Hardwarebeschreibung
SBC-NodeMCU-ESP32
Wie der Abbildung 1 zu entnehmen, besitzt das Entwicklungsboard ESP32 ein internes WLAN-Funkmodul, welches im Projekt für die Kommunikation zwischen der Innen- und Außenstation sowie zur Datenübertragung an den Webserver verwendet wird. Die beiden Xtensa-Prozessoren werden für das Multithreading verwendet. Ein Prozessor der Innenstation wird zur Darstellung der Zeit verwendet. Der zweite Prozessor steuert die Kommunikation. Mit Hilfe des Co-Prozessors, welcher einen sehr niedrigen Stromverbrauch hat, wird die Deep-Sleep-Funktion der Außenstation, da diese mit Batterien betrieben wird, realisiert. Das Entwicklungsboard ist nach dem Zusatz des Espressif IoT Development Framework mit der Arduino IDE kompatibel. Der Microkontroller arbeitet mit einer Spannung von 3,3 V. Ein Spannungsregler sorgt dafür, dass das Board mit einer Spannung von 3,3 V bis 10 V an Vin betrieben werden kann.
Technische Daten
- Anschluss: Micro-USB, Vin
- Prozessoren:
- 2x Xtensa LX6, 160 MHz - 240 MHz
- Co-Prozessor mit sehr niedrigem Stromverbrauch
- Interner RAM: 520 kB
- Interner ROM: 448 kB
- Flash-Speicher: 4 MB
- Internes Bluetooth-Modul
- Internes WLAN-Modul mit Antenne
- Integrierter Hall-Senso
- Integrierter Temperatursensor
Digitaler Temperatur- und Feuchtigkeitssensor DHT22
Das digitale Temperatur- und Feuchtigkeitsmodul DHT22 (AM2302) gibt ein kalibriertes digitales Signal durch eine Ein-Adrige Verbindung (Single-Bus) aus, welches bis zu einer Entfernung von max. 20 m übertragbar ist. Der Sensor kann mit 3,3 V oder 5 V betrieben werden.
Technische Daten:
- Betriebsspannung: 3,3 V oder 5 V
- Temperatur:
- Messbereich: -40 °C bis 80 °C
- Genauigkeit: +- 0,5 °C bis +- 1,0 °C
- Wiederholgenauigkeit: +- 0,2 °C
- Auflösung 0,1 °C
- Luftfeuchtigkeit:
- Messbereich: 0 % bis 99,9 %
- Genauigkeit: +- 2 % (bei 25 °C)
- Wiederholgenauigkeit: +- 0,3 %
- Auflösung 0,1 %
Digitaler Luftdruck Sensor BMP180
Der BMP180 ist ein präziser digitaler Drucksensor für Verbraucheranwendungen. Der Sensor ist stromsparend und für den Einsatz von Outdoor-Geräten optimiert.
Technische Daten:
- Anschluss: I2C
- Betriebsspannung 1,8 V bis 3,6 V
- Messbereich: 300 hPa bis 1100 hPa
- Rauschen: 0,06 hPa
Projekt
Das Projekt bildet eine Grundlage einer vernetzten Einheit zur Automatisierung von Aufgaben in einem Umfeld bis zu einem Umkreis von einigen km an. Eine zentrale Einheit kommuniziert hierbei mit einer weiteren Station. Daten werden von der zweiten Station der zentralen Einheit übergeben, die diese verarbeitet und einem Webserver zur Verfügung stellt. Mit Hilfe des V-Modells nach VDI 2206 wurde das Projekt realisiert. Dabei wirde die Hauptfunktion in Teilfunktionen zerlegt. Die Teilfunktionen werden analysiert und dabei Problemlösungen definiert. Mit Hilfe eines morphologischen Kastens werden die Lösungen gruppiert. Anschließend wird eine Nutzwertanalyse zur Bewertung der einzelnen Problemlösungen herangeführt und daraus die Lösung generiert.
Projektplan
Der Abbildung XX kann der Projektplan entnommen werden. Dieser beschreibt den Arbeitsablauf zu diesem Projekt und lässt sich folgendermaßen gliedern:
- Phase 1: Planung und Vorbereitung
- Recherche möglicher Konzepte und Teillösungen: Mit Hilfe von Literatur und Internet werden Ideen generiert, die zur Haupt- und Teilfunktionsbeschreibung führen. Aus den Teilfunktionen werden Problemlösungen generiert.
- Vorläufige Konzepterstellung: Die Teillösungen werden gruppiert und bewertet. Die höchst-bewerteten Teillösungen fließen in das Konzept ein.
- Stücklistenerstellung und Bestellung: Nach der Erstellung des Konzeptes, werden Bauteile gesucht. Eine Liste wird zum fixen Termin ausgehändigt.
- Phase 2: Durchführung
- Software-Recherche: Benötigte Bibliotheken werden gesucht und analysiert. Im Internet bestehende Beispiele helfen bei der Analyse der Bibliotheken.
- Softwaregenerierung: Implementierung und Evaluation der Software wird nacheinander durchgeführt. Fehler werden analysiert und behoben. Mit fortschreitender Implementierung generieren sich neue wechselwirkende Fehler, die zur Softwareanpassungen führen.
- Konstruktion der Bauteile: Mit Hilfe von SolidWorks werden Bauteile konstruiert und in einer Baugruppe zusammengefügt. Hierbei werden die Möglichkeiten des 3D-Drucks beachtet.
- Layout der Schaltung: Nach umfassender Analyse und Simulation auf dem Steckbrett hat sich herausgestellt, dass die Schaltung sehr einfach ist und daher auch ohne großen Aufwand in die Konstruktion implementiert wurde.
- Fertigung der Platine: Es wurde von dem Plot der Platine abgesehen, da der Aufwand bei der einfachen Schaltung größer gewesen wäre. Eine Streifenraster-Platine im passenden Zuschnitt wurde eingesetzt.
- Bestückung der Platine und Verkabelung:
- Fertigung der Bauteile: Die eigens konstruierten Bauteile wurden mit Hilfe von additiven Verfahren erstellt. Dabei wurde ein 3D-Drucker und das PLA-Filament verwendet.
- Phase 3: Evaluation
- Testung der Schaltung: Die Schaltung wurde für eine längere Zeit in Betrieb genommen.
- Testung der Software: Die Software wurde für eine längere Zeit in Betrieb genommen
- Dokumentation: Die Dokumentation wurde nach wissenschaftlichen Maßstab durchgeführt und liegt im SVN-Ordner vor.
Projektdurchführung
Die Projekte werden in Gruppen bearbeitet. Aufgaben werden auf die Team-Mitglieder aufgeteilt. Dieses Projekt wurde in die Bereiche Hardware und Software aufgeteilt. Nachfolgend werden diese beschrieben
Hardware
Software
Die Software, geschrieben in C und C++ mit Hilfe der Arduino IDE und externen Bibliotheken, beschreibt zwei Teile. Ein Teil implementiert die Steuerung der Innenstation, bestehend aus dem Rheinturm. Die Funktionen der Außenstation werden mit dem zweiten Teil erreicht. Folgend werden einige wichtige Abschnitte der Programmierung beschrieben.
Innenstation: Die Innenstation benutzt beide Kerne. Mit Hilfe des folgenden Code-Abschnittes kann das Multithreading implementiert werden:
//global:
TaskHandle_t Task1, Task2; // Task-Handle
SemaphoreHandle_t baton; // Typ zur Übergaberegulierung
// in void Setup():
baton = xSemaphoreCreateMutex();
xTaskCreatePinnedToCore( // Gebe Aufgabe an definierten Kern:
weatherStation, // Functionname
"weatherStation", // taskName
2000, // Stack-Größe
NULL, // Parameter
1, // Priorität
&Task1, // Task-Handle
1); // CORE 1
// LOOP #2
void weatherStation( void * parameter ) // weatherStation wird, wie void loop in Kern 1 bearbeitet
{
for (;;) // Dauerschleife
{
xSemaphoreTake(baton, portMAX_DELAY); // Nimm den Übergabetypen
xSemaphoreGive(baton); // Gebe den Übergabetypen direkt ab.
//… Weiterer Code
}
}
Die Methode xTaskCreatePinnedToCore kreiert einen Aufgabenabschnitt für einen definierten Kern. Welche Aufgabe und welcher Kern, sowie, wieviel Speicherplatz und Funktionsparameter sowie die Priorität werden der Parameterliste, wie zu sehen, hinzugefügt. Der Übergabetyp reguliert, ob die Kerne gleichzeitig oder nacheinander arbeiten sollen. In diesem Beispiel arbeiten die Kerne gleichzeitig, da der Übergabetyp direkt zurückgegeben wird. Damit die Kerne nacheinander arbeiten, muss der Übergabetyp am Ende der Funktionen überegeben werden. Der Task weatherStation widmet sich der Auslesung des DHT22-Sensors, startet eine Verbindung zur Außenstation, verbindet sich mit WiFi nachdem die Werte der Außenstation empfangen wurden und sendet die Wetterdaten an einen Webserver.
Programmierung der Sensorik:
// includes
#include <DHT.h> // Bibliothek des Sensors (zu finden: Github)
//defines und globals
#define DHTPIN 15 // Angabe des digitalen Inputs für den Single-Bus
#define DHTTYPE DHT22 // Typdefinition für die Bibliothek
DHT dht(DHTPIN, DHTTYPE); // Konstruktor des Sensors
// Setup
dht.begin(); // Initialisierung des Sensors
// Auslesung
temp = dht.readTemperature(); // Auslesen der Temperatur (float)
hum = dht.readHumidity(); // Auslesen der Luftfeuchtigkeit (float)
Mit gegebener Bibliothek lässt sich die Sensorik einfach implementieren. Auf gleiche Art wird auch der Drucksensor der Außenstation programmiert. Dabei wird nur eine andere Bibliothek verwendet.
Verwendete Bibliotheken:
- Innenstation
- DHT_sensor_library:
- FastLED:
- WiFi:
- NTPClient:
- Außenstation
- Adafruit_BMP085_Library:
- Adafruit_BMP085_Unified:
- DHT_sensor_library:
- WiFi:
Ergebnis
Zusammenfassung
Lessons Learned
Projektunterlagen
YouTube Video
Weblinks
Literatur
--- → zurück zur Übersicht: WS 18/19: Angewandte Elektrotechnik (BSE)