Eingabegeräte und Sensoren

Das folgende Kapitel stellt Eingabegeräte und Sensoren vor, die eine Interaktion zwischen Nutzer und dem Arduino ermöglichen.

Dabei sollen folgende Komponenten behandelt werden, die individuell konfiguriert werden müssen. Die benötigten Versorgungsspannungen und Schnittstellenkonfigurationen sind aus den jeweiligen Betriebsanleitungen einzusehen und beim Schaltungsaufbau zu beachten.

Fotowiderstand

Der Photowiderstand besitzt einen Widerstandswert, der von der einstrahlenden Lichtstärke abhängig ist. Dessen Abkürzung LDR steht dabei für den englischen Begriff Light Dependent Resistor.

https://upload.wikimedia.org/wikipedia/commons/9/97/LDResistor.jpg
https://upload.wikimedia.org/wikipedia/commons/6/66/Photoresistor.jpg

Das elektrische Fotosensor-Verhalten könnte dabei stark abweichen zwischen den Herstellern. Dennoch liegen gängige Widerstandswerte meist zwischen 1MΩ und 100MΩ bei vollkommender Dunkelheit und 100Ω und 2kΩ bei Lichteinstrahlung.

Fotowiderstände können durch ihr elektrisches Verhalten eingesetzt werden, um Schaltungen aufzubauen, die Änderungen des Umgebungslichts registrieren könnten. Z.B. könnte eine elektrische Schaltung aufgebaut werden, die verwendet werden könnte, um eine Außenbeleuchtung bei Nachteinbruch zu aktivieren. Dazu wird die LDR-Komponente mit einem analogen Eingang des Arduino und dem 0V-Potenzial verbunden. Der Interne Pull-Up Widerstand des Arduino und der LDR bilden dann einen Spannungsteiler, der das ungefähre Helligkeitsniveau abschätzen könnte.

LED leuchtet nicht, solange es hell ist.
LED leuchtet heller je dunkler es wird.
In vollkommener Dunkelheit leuchtet die LED am hellsten.

Der folgende visualisierte Quellcode befindet sich im Arduino-Arbeitsspeicher und möchte den Sachverhalt verdeutlichen. Im Quellcodeblockbereich der loop-Funktion wird in regelmäßigen Abständen die Spannung des Spannungsteilers ausgelesen und entsprechend in die Variabel „eingangsWert“ gespeichert. Anschließend wird mit ihr der Ausgabewert berechnet und in die Variabel „ausgangsWert“ gespeichert. Das entsprechende PWM-Signal, das die Led-Leuchtstärke bestimmen würde, wird von der „analogWrite„-Funktion und der Variabel „ausgangsWert“ anschließend eingeleitet.

Die identische Funktionalität könnte ebenfalls mit einem Transistor erreicht werden. Die folgende Abbildung visualisiert dabei die elektrische Schaltung. Der Spannungsteiler kontrolliert den Basis-Strom, der über den Kollektor- Emitter-Pfad verstärkt werden würde.

Die folgende Abbildung visualisiert das Schaltzeichensymbol eines LDR.

https://upload.wikimedia.org/wikipedia/commons/4/48/Light-dependent_resistor_schematic_symbol.svg

Neigungsschalter

Neigungsschalter sind elektrische Komponente, die abhängig ihrer Raumausrichtung einen elektrischen Stromkreis schalten. Bei entsprechenden Neigungswinkel wird ein Stromfluss aktiviert.

https://images-eu.ssl-images-amazon.com/images/I/51dpac1VPbL.AC_UL320_SR248,320.jpg

Moderne Neigungsschalter besitzen in ihrem Inneren eine bewegbare stromleitende Kugel, die bezüglich der Gehäuse-Raumausrichtung einen Stromkreis schließen würde. Folgende Abbildungen möchte diesen Sachverhalt nochmal verdeutlichen.

https://image.codingworld.io/storage/1738/show
https://elektro.turanis.de/html/prj062/tile_switch.png

Neigungsschalter können eingesetzt werden, um Schaltungen zu realisieren, die das Neigungsverhalten eines physischen Objekts analysieren. Der Neigungsschalter wird dafür mit einem Arduino-Eingangs-Pin und dem 0V-Potenzial verbunden. Der Eingangs-Pin dient ebenfalls als Pull-Up Widerstand und könnte durch das 0V-Potenzial prüfen, ob der Neigungsschalterkontakt geschlossen ist.
Für diesen Anwendungsfall wäre der Arduino-Einsatz nicht erforderlich. Der Neigungsschalter könnte direkt mit der LED verbunden werden. Die Umsetzung des inversen elektrischen Verhalten der elektrischen Schaltung wäre durch den Arduino-Einsatz aber wesentlich einfacher zu realisieren.

Neigungssensor in Ausgangsposition: LEDs aus
Neigungssensor geneigt, Schaltschwelle aber noch nicht erreicht: LEDs aus
Neigungssensor bis zur Schaltschwelle geneigt: LEDs an

Der folgende visualisierte Quellcode befindet sich im Arduino-Arbeitsspeicher. Im Codeblockbereich der loop-Funktion wird permanent der Zustand des Neigungssensors abgefragt. Abhängig des jeweiligen Zustandes werden LOW und HIGH Werte geschrieben.

Temperatursensor (TMP36)

Der Temperatursensor TMP36 kann zusammen mit der Bibliothek „TMP36“ als Thermometer verwendet werden. Der Sensor wird dazu mit 5V und Masse, sowie mit einem analogen Arduino-Eingang verbunden.

Eine korrekte Sensorkonfiguration benötigt die Spezifikation des analogen Arduino – Anschlusses und der benötigten Sensor-Versorgungsspannung. Die Sensorrückgabewerte driften bei unterschiedlichen Versorgungsspannungen. Diese Messungenauigkeit sollte bei der Temperaturberechnung berücksichtigt werden.

Die folgende Tabelle visualisiert verschiedene Temperaturmesswerte, die über der seriellen Schnittstelle übertragen wurden.

Die ermittelten Näherungswerte bezüglich vorherrschenden Temperaturen können um wenige Grad abweichen.

Bewegungssensor

Bewegungssensoren dienen der Bewegungserfassung von Lebewesen. Die sogenannten PIR-Sensoren, ausgeschrieben durch den englischen Begriff Pyroelectric Infrared Sensor, können die Intensität infrarotem Licht erkennen.

https://www.rasppishop.de/media/image/product/7250/md/pir-infrarot-bewegungssensor-pir-sensor-hc-sr501.jpg

Jedes Lebewesen strahlt eine für ihn typische Infrarotstrahlung ab, die anhand der Bewegungssensoren erkannt werden könnte. Diese Sensortypen funktionieren ausschließlich bei Lebewesen. Das Bewegungsverhalten toter Gegenstände könnte dabei nicht erfasst werden.

Im Erfassungsbereich des Sensors findet keine Bewegung statt, die LED bleibt aus.
Bewegt sich ein Tier innerhalb des Erfassungsbereichs des Sensors, leuchtet die LED.

Das unten abgebildete PIR Sensor Modul bietet die Möglichkeit seine Signal-Empfindlichkeit, die Signaldauer und den Signaltyp zu spezifizieren.

https://lh3.googleusercontent.com/proxy/dVMvrVbZPjqsqP2ddolZqQ6_-sWZkVk_Qo-8ydwtV4EDm5p4S7BGbouWkNUz-ZRxmpLV0ZDwato4GV73xt6bmGzkqeAg70JilwJZPtNpXIwENmDht69D

Die Markierungen „Haltezeit“ und „Empfindlichkeit“ kennzeichnen dabei integrierte variable Widerstände des Moduls. Der Abstand des Messbereichs, wo mögliche Bewegungen stattfinden könnten, wird am Potentiometer „Empfindlichkeit“ justiert. Der Wertebereich erstreckt sich hierbei zwischen 0,5m und 7m. Mit dem „Haltezeit“ – Potentiometer könnte dabei die Ausgangspin-Signaldauer, die bei aktiven Bewegungsverhalten erzeugt werden würde, eingestellt werden.
Der links angeordnete Schalter, der mit kleinen Wellenformdarstellungen markiert wurde, ist ein sogenannter Schalter bzw. „Jumper„. Er legt das Signalausgabeverhalten bei aktiver Bewegungserkennung fest. Bei Erkennung von mehreren Bewegungsmustern könnte so das Sensorsignalausgabeverhalten näher spezifiziert werden. Je nach Einstellung könnte während der Bewegungserfassung das Ausgabesignal eine Zeitdauer lang erzeugt, oder mehrmals erneut gestartet werden.

Die beschriebenen Einstellungsmöglichkeiten sind spezifische Parameter des entsprechenden PIR Sensor Moduls, diese unterscheiden sich natürlich von anderen Moduleinstellmöglichkeiten anderer Hersteller.

Ultraschallsensor

Ultraschallsensoren können Entfernungen abschätzen. Sie senden dazu eine Ultraschallwelle aus, die der Mensch nicht hören kann. Anschließend wird der Zeitpunkt des eintreffenden Echosignals der Ultraschallwelle registriert. Durch diesen Messwert und der physikalischen Konstanten der Schallgeschwindigkeit kann die ungefähre Distanz zum Gegenstand ermittelt werden, an dem die Schallwelle abgeprallt ist. Diese Distanzberechnung kann dann anschließend mit Hilfe einer Bibliothek ermittelt werden.

https://diyi0t.com/wp-content/uploads/2019/08/hc-sr04.png

Der Sensor wird mit 5V über den Arduino versorgt. Außerdem sind der Trigger Pin (Sende Pin) und der Echo Pin (Empfangs Pin) an den Arduino angeschlossen.

Der folgende visualisierte Quellcode implementiert die „HCSR04„-Bibliothek, um Abstandsmessungen mit dem Sensor zu realisieren.

Je nach Objektabstand würden dabei unterschiedliche Ergebnisse erzielt werden.

Genau wie beim Messvorgang des Temperatursensors wird auch hier die reale Gegenstandentfernung nicht zu 100% genau ermittelt. Beim Messvorgang entstehen auch hier Messfehler, die berücksichtigt werden können, aber meist keine Rolle spielen in der Projektentwicklung.

4×4 Tastenfeld

Tastenfelder oder Tastaturen gibt es in beliebigen Größen und eignen sich zum Eingeben diverser Daten.

https://cdn.shopify.com/s/files/1/1509/1638/products/4x4_Matrix_Keypad_front_800x.jpg?v=1581095195

Die obere Abbildung visualisiert dabei ein 4×4 Tastenfeld mit 8 Zugangsleitungen. Die 8 Zugangsleitungen bilden dabei eine Art Matrix, um die einzelnen Tasten, bezüglich ihrer Reihen und Spalten Zugehörigkeit, elektronisch ansprechen zu können. Die erste Vierergruppe selektiert Zeilen und die Zweite Spalten der Matrix. Das Betätigen des Button 3 würde jetzt die Zuleitung 1 und 7 kurzschließen.
Durch dieses Prinzip können parallel betätigte Tastenanschläge ermittelt werden. Das Prüfen auf Tastenanschläge der Buttons „*“ und „D“ erfordert die elektronische Überprüfung der 4., 5. und 8. Zuleitung auf Kurzschluss.

Diese Matrixübersetzung könnte durch eine Arduino-Bibliothek erfolgen.

Die Bibliothek trägt den Namen „Keypad„. Der folgende Quellcode visualisiert das Implementieren und Initialisieren der entsprechenden Bibliothek und des Tastenlayouts.
Das Tastenfeldlayout wird dabei durch das zweidimensionale Array mit den Namen „tastenFeld“ abgebildet. Die Zeilen – und Spaltenanzahl werden in den Konstanten „zeilenAnzahl“ und „spaltenAnzahl“ hinterlegt.
Diese Initialisierung konfiguriert das entsprechende Tastenfeld für die Programmentwicklung. Die Funktion „getKey“ gibt dabei den Tastendruckzustand und die Tastenspezifizierung zurück.

Das Drücken einzelner Tasten würde jetzt zur folgender Liste führen.