Projekt 91: Decimal Clock Tower: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 121: Zeile 121:


==== Software ====
==== 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
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:
Innenstation:

Version vom 18. Januar 2019, 02:39 Uhr

Quelle: https://fi.wikipedia.org/wiki/Rheinturm#/media/File:Rheinturm_uhrzeit.jpg

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

Abbildung 1: Blockschaltbild des ESP32, Quelle: http://esp32.net/

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

Abbildung 2: Technische Darstellung des DHT22, Quelle: https://akizukidenshi.com/

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

Abbildung 3: Draufsicht BMP180, Quelle: https://www.amazon.com/

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.
    • Generierung Software: 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ührt.
    • Konstruktion der Bauteile: Mit Hilfe von SolidWorks werden Bauteile konstruiert und in einer Baugruppe zusammengefügt. Hierbei wird beachtet, dass in der Konstruktion die Möglichkeiten des 3D-Druckverfahrens berücksichtigt werden.
    • 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
  }
}



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.

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)