Smart Fan

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche

Der Smart Fan soll in seinen Grundzügen eine Erleichterung im Alltag sein, indem er z.B. während langen Lern- oder Programmiersessions in warmen Sommernächten für ein wenig Abkühlung sorgt. Zusätzlich kann der Smart Fan für die Regulierung der Luftfeuchtigkeit genutzt werden, dies findet besonders im Bad oder Keller einen besonderen Mehrwert. Der verbaute Ventilator schaltet sich entweder bei Überschreitung eines vorab eingestellten Schwellwertes automatisch ein oder lässt sich per App manuell aktivieren. Des Weiteren lässt sich der Smart Fan über die App genauer auf die eigenen Bedürfnisse konfigurieren. So kann der Modus zwischen Temperatur- oder Feuchtigkeitsmessung gewechselt, der Schwellwert separat für den jeweiligen Messwert aktualisiert und die automatische Aktivierung des Ventilators deaktiviert werden.

Demo[Bearbeiten]

Komponenten[Bearbeiten]

Folgend eine Liste der verbauten Komponenten.

Anzahl Bauteil
1 DOIT ESP32 DEVKIT V1
1 DHT22
1 L293D IC
1 DC-Motor 5V
1 Gelbe LED
1 220 Ohm Widerstand
1 PCB Universal Gehäuse
1 IC-Sockel, 16-polig
2 Female-Steckleiste, 16-polig
1 Female-Steckleiste, 3-polig
1 Female-Steckleiste, 2-polig

Gehäuse[Bearbeiten]

Das Gehäuse besteht derzeit aus einem PCB Universal Gehäuse, welches entsprechend präpariert wurde. Ein 3D-Druck war aufgrund der Corona-Pandemie nicht möglich.

SmartFan Front.jpg SmartFan On.jpg

Für den Micro-USB Anschluss des ESP32 Boards (Links) und zur Luftmessung für den DHT22 (Rechts) wurden jeweils zwei Öffnung in das Gehäuse eingelassen. Weiter wurde ein Loch für den Motor und eins für die Status LED gebohrt.

SmartFan USB Left.jpg SmartFan DHT Right.jpg

Das Gehäuse wird mit 4 Schrauben auf der Rückseite verschraubt.

SmartFan Case Backside.jpg

Verkabelung[Bearbeiten]

Im folgenden Bild ist die Verkabelung des Smart Fan als Schema dargestellt.

SmartFan Schematic1.png

Für eine genauere Angabe der Pin-Belegung dienen folgende Tabellen:

DHT22[Bearbeiten]

DHT22 ESP32
VCC 5V
Data GPIO 15
GND GND

L293D IC[Bearbeiten]

L293D IC ESP32
VCC1 5V
VCC2 5V
GND GND
1A GPIO27
2A GPIO26
EN 1&2 GPIO 14

DC-Motor[Bearbeiten]

DC Motor L293D IC
1Y
2Y

Status LED[Bearbeiten]

Gelbe LED ESP32
Anode GPIO18
Kathode GND

Die fertige Platine sieht wie folgt aus:

SmartFan PCB 1.jpg SmartFan PCB 2.jpg

Arduino[Bearbeiten]

Der Arduino Sketch für den Smart Fan wurde mit der Arduino IDE erstellt. Zur übersichtlichen und strukturierten Programmierung wurden die einzelnen Code Komponenten in einzelne Arduino IDE Tabs bzw. Header Dateien gespeichert. Der Code teilt sich dementsprechend in vier Bereiche auf.

Hauptsketch[Bearbeiten]

Der Hauptsketch besteht aus der Fan.ino. Diese besteht aus drei Funktionen.

boolean isOn()[Bearbeiten]

In dieser Methode werden die Bedingungen für den Start bzw. Stopp des Motors kontrolliert.

SmartFan Fan isOn.JPG

void setup()[Bearbeiten]

In der Setup Methode werden neben der Status LED die Setup-Methoden der einzelnen Komponenten aufgerufen.

SmartFan Fan setup.JPG

void loop()[Bearbeiten]

Nach der Setup Methode wird die Loop Methode ausgeführt. Zum Beginn werden die aktuellen Sensorwerte gemessen und abgespeichert. Darauf folgt der Aufruf der Bluetooth-Loop Methode und anschließend wird geprüft ob der Motor aktiv oder inaktiv sein sollte.

SmartFan Fan loop.JPG

Bluetooth[Bearbeiten]

Die Bluetooth Komponente teilt sich in zwei Dateien und bildet das Herzstück der Kommunikation zwischen Smart Fan und Smartphone. Die benötigten Definitionen und Variablen sind in der BluetoothDefines.h definiert und die benötigten Funktionen wurden in der Bluetooth.ino implementiert.

Wie in der BluetoothDefines.h zu finden, wurde eine eindeutige Service UUID generiert und für jeden Wert der über die Bluetooth Schnittstelle kommuniziert wird, eine entsprechende Characteristic mit einer eine eindeutigen UUID definiert.

SmartFan BLE Defines UUID.JPG

Die wichtigsten Kernmethoden aus der Bluetooth.ino sind:

void bleSetup()[Bearbeiten]

In dieser Methode wird der Bluetooth Low Energy Server erstellt, ein Bluetooth Service initialisiert und die entsprechenden Characteristics dem Service hinzugefügt. Anschließend wird das Advertising, also das öffentliche Bekanntmachen, für unseren Bluetooth Service konfiguriert und aktiviert. Zum Schluss werden die Default-Werte für unsere Characteristics gesetzt.

Da diese Methode zu groß für einen Auszug wäre, bitten wir bei Interesse um einen Besuch in das Git-Repository.

void bleLoop()[Bearbeiten]

Die bleLoop Methode kontrolliert bei aktiver Bluetooth Verbindung ob neue Werte der einzelnen Characteristics vorhanden sind. Anschließend werden die aktuellen Sensorwerte gesendet.

Zusätzlich wird kontrolliert ob eine Verbindung geschlossen oder aufgebaut wurde.

SmartFan BLE bleLoop.JPG

void checkTemperatureThreshold()[Bearbeiten]

Da sich sämtliche Funktionen zur Überprüfung der einzelnen Characteristica ähneln, wird hier als Beispiel der Temperaturschwellwert gezeigt.

SmartFan BLE tempThreshold.JPG

void sendCurrentValues()[Bearbeiten]

In dieser Methode wird der Temperatur- und der Feuchtigskeitsmesswert in einem String verkettet. Als Trennsymbol wird ein Pipe-Symbol | verwendet. Anschließend wird der Wert für die entsprechende Characteristic gesetzt und eine Benachrichtigung mit Hilfe der Funktion notify() ausgelöst.

SmartFan BLE sendValues.JPG

DHT[Bearbeiten]

Die DHT Komponente teilt sich ebenfalls in zwei Komponenten auf. In der DhtDefines.h sind die benötigten Defines und Variablen definiert. Die Funktion zum Auslesen der Messwerte befindet sich in der DHT.ino Datei.

void getCurrentTempHum()[Bearbeiten]

Zur einfacheren Bedienbarkeit des DHT22 wurde die Bibliothek DHT sensor library for ESPx von beegee_tokyo in Version 1.18.0 verwendet. Die Bibliothek ermöglich ein einfaches Konfigurieren und Auslesen des Sensors.

Da der DHT22 ein Mindest-Intervall zwischen den Messungen benötigt, wird der Sensorwert in vordefinierten regelmäßigen Abständen abgefragt. Dieses Intervall kann konfiguriert werden, kann aber nicht unter die vorgegebene Mindest-Intervall Zeit eingestellt werden.

SmartFan DHT getSensorValues.JPG

Motor[Bearbeiten]

Die Motor Komponente besitzt den selben Aufbau wie die anderen Komponenten.

Die benötigten Defines und Variablen sind wieder in der MotorDefines.ino definiert. Die benötigten Funktionen sind in der Motor.ino Datei implementiert.

Die Motor.ino besteht aus fünf Methoden.

void setupMotor()[Bearbeiten]

In dieser Methode werden die entsprechenden GPIO-Pins und PWM-Funktionalität vorbereitet, und der Motor konfiguriert.

Restliche Methoden[Bearbeiten]

Mit der Methode void setMotorSpeed(int speed) kann die Geschwindigkeit des Motors im Bereich von 0 bis 255 eingestellt werden.

Zur Steuerung der Drehrichtung des Motors sind die Methoden void motorForward() und void motorBackward() definiert.

Zum Stoppen des Motors wird die Funktion void motorStop() verwendet.

Smartphone Applikation[Bearbeiten]

Für die Steuerung des Ventilators wurde eine App mithilfe von Flutter entwickelt. Der Prototyp zeichnet sich durch eine einfache UI aus:

  • Zwei Textfelder zur Ausgabe der erhaltenen Sensordaten
  • Ein Slider über den der Temperatur bzw. Luftfeuchtigkeitsschwellwert verändert werden kann
  • Ein Toggle Button um zwischen Temperatur bzw. Luftfeuchtigkeitsschwellwert zu wechseln
  • Zwei Buttons um den Ventilator oder den automatischen Modus zu aktiveren bzw. zu deaktiveren.

Die Bluetooth Kommunikation wurde durch die flutter_blue API realisiert und das flutter_blue Beispiel verwendet.

Bluetooth[Bearbeiten]

SmartFan App Bluetooth.PNG


Als Gegenkomponente der Kommunikation mit dem ESP32, müssen die UUID's des Services und den dazugehörigen Characteristics übereinstimmen. Somit können diese zugeordnet und die Werte die der Sensor liefert gesendet und von der App empfangen und dargestellt werden.

Main und Widget[Bearbeiten]

Da die Methoden der App zu groß für einen Auszug wären, da sie unteranderem auch die Struktur und den Aufbau der Screens enthalten, werden hier nur grundlegend die Funktion, Navigation und Ablauf der App dargestellt. Deshalb bitten wir bei Interesse um einen Besuch in das Git-Repository.

SmartFan App Scan.jpg SmartFan App Scan Results.jpg SmartFan App Connecting.jpg

Ein Drücken des Lupen-Buttons startet die Suche nach Geräten. Alle gefundenen Geräte werden anschließend in einem ListView samt Name, MAC-Adresse und einem Connect-Button der die Verbindung zu dem entsprechenden Gerät initialisiert. Die Aktualisierung der Darstellung der Geräte wird über einen sogenannten Streambuilder realisiert, der im Hintergrund läuft und in gegebenen Zeitintervallen die Liste an gefundenen Geräten aktualisiert.

Control Page[Bearbeiten]

SmartFan App Temp.jpg SmartFan App Hum.jpg SmartFan App Disconnect.jpg

Der Sensor gibt in regelmäßigen Abständen die gemessen Temperatur- und Luftfeuchtigkeitswerte aus und überträgt diese über die Bluetoothverbindung an das gekoppelte Handy. Diese werden dann in der App ausgelesen und dargestellt. Damit diese auch immer aktuell bleiben, wurde erneut die Funktion des Streambuilders verwendet.

Der über den Slider eingestellte Wert wird über den Aufruf der Methode "characteristic.write" an den ESP32 im "Smart Fan" übertragen und überschreibt darin den Schwellwert bei dem dieser sich automatisch aktiviert. Der darüber liegende Toggle-Button setzt intern einen Wahrheitswert, je nachdem, ob es sich bei dem eingestellten Wert um Temperatur oder Luftfeuchtigkeit handelt.

Die zwei Buttons "Motor On/Off" und "Auto On/Off" setzen analog zu dem Toggle-Button einen Wahrheitswert und übertragen diesen an den ESP32. Somit lässt sich der Smart Fan manuell an bzw. ausschalten oder der automatische Modus, der auf die Schwellwerte reagiert, (de)aktivieren.

Ausblick[Bearbeiten]

In Zukunft lässt sich das System durch einen stärkeren Motor erweitern und somit z.B. in Kellerräumen zur Vorbeugung von zu hoher Luftfeuchtigkeit und somit auch Schimmel einsetzen.