Die folgende Seite bietet jeweils eine Einführung in neue Bauteile aus der Kategorie Sensoren, für die unterschiedliche Grundlagen aus dem Kapitel “Bausteine von Algorithmen” benötigt werden. Das Kapitel “Elektrische Grundlagen” ist zum tieferen Verständnis sicherlich hilfreich, aber für diese vorkonfigurierten Bauteile nicht unbedingt notwendig. Mit den hier vorgestellten Bauteilen lässt sich bereits eine Vielzahl an größeren Projekten umsetzen. Vielleicht hast du eine tolle Idee?
Im Folgenden werden Sensoren erklärt, also Bauteile, die aus einer physikalischen Größe in der Umwelt eine elektrische Größe machen, die sich vom Arduino weiterverarbeiten lässt.
Die Abbildungen unten zeigen den Aufbau eines Neigungsschalters im geschlossenen und geöffneten Fall. Beschreibe den Aufbau des Schalters und erkläre, wie es in Abhängigkeit der Neigung des Neigungsschalters zum Leuchten der LED im abgebildeten Schaltkreis kommt. Handelt es sich um einen digitalen oder analogen Sensor?
Schaltplan: Wenn der Neigungsschalter wie unten abgebildet am Arduino angeschlossen wird, kann sein Zustand in Digitalpin 3 ausgelesen werden (vgl. das Auslesen von Tastern).
Programmierung: Der Neigungsschalter ist in Nepo nicht vorkonfiguriert, aber dies ist auch gar nicht nötig. Er lässt sich als digitaler Sensor konfigurieren. Der Rückgabewert eines digitalen Sensors ist in Nepo vom Typ Zahl statt vom Typ Wahrheitswert. Dabei bedeutet die Zahl 0
so viel wie false
und die Zahl 1
bedeutet true
.
Baue eine Alarmanlage, die auslöst, wenn das Steckbrett angehoben wird.
Zusatz: Erkläre, warum es sinnvoll ist, den Piezo-Summer nicht so wie die LED in der oben diskutierten Aufgabe direkt mit dem Neigungsschalter zu verbinden, sondern das Auslösen des Tons im Programm zu regeln.
Bewegungsmelder wurden bereits im Abschnitt Entscheidungen mit mehreren Kriterien treffen erklärt und genutzt, um Wahrheitswerte einzuführen. In diesem Abschnitt steht das Bauteil im Vordergrund. Dazu werden noch einmal alle Informationen zusammengefasst und eine alternative Programmierung vorgestellt.
Bewegungsmelder verfügen über drei Pins, deren Beschriftung man lesen kann, wenn man die Kunststofflinse vorsichtig abzieht (Vorsicht: Nach Abziehen der Linse nicht den Sensor berühren!). Vcc
und GND
dienen der Stromversorgung der elektronischen Komponenten und müssen mit 5V
und GND
am Arduino verbunden werden.
Der mittlere OUT
-Pin ist der Signal-Pin: Wenn eine Bewegung registriert wurde, wird der Wert wahr
zurückgegeben, ansonsten falsch
. Zum Einlesen des Signals wird dieser Pin mit einem Digitalpin des Arduino verbunden.
Hinten befinden sich zwei Drehregler (“Potentiometer”), mit denen sich die Dauer des Bewegungssignals (links) und die Empfindlichkeit (rechts) einstellen lassen. Zusätzlich befindet sich auf der rechten Seite ein sogenannter Jumper, mit dem auf einfache Weise eine Steckverbindung zwischen benachbarten Pins hergestellt werden kann. Wenn sich der Jumper ganz außen befindet, dann bleibt das Bewegungssignal nach dem Erkennen einer Bewegung eine Weile aktiv und wird dann auf jeden Fall deaktiviert. Eine neue Bewegung kann erst nach einer gewissen Zeit wieder registriert werden. Wenn der Jumper hingegen leicht nach innen versetzt ist, bleibt das Bewegungssignal so lange erhalten, wie eine Bewegung erkannt wird (siehe Funduino).
Programmierung: Der Bewegungsmelder ist in Nepo bereits vorkonfiguriert und lässt sich damit einfach auslesen. Aufgrund der Ausgabe von HIGH
und LOW
bzw. true
und false
lässt er sich aber auch als digitaler Sensor konfigurieren. Der Rückgabewert eines digitalen Sensors ist in Nepo vom Typ Zahl statt vom Typ Wahrheitswert. Dabei bedeutet die Zahl 0
so viel wie false
und die Zahl 1
bedeutet true
.
Baue und programmiere eine automatische Tür, die sich öffnet, wenn eine Bewegung registriert wird. Der Bewegungsmelder soll als digitaler Sensor konfiguriert werden. Experimentiere mit den Drehreglern, um die Empfindlichkeit und Dauer des Signals richtig einzustellen.
Recherche: Wie funktioniert eigentlich ein Bewegungsmelder?
Das zentrale Bauteil eines Bewegungsmelders ist ein sogenannter Passiver Infrarot Sensor (PIR), auch Pyroelektrischer Sensor. Recherchiere im Internet, wie solche Sensoren funktionieren und fasse zusammen, wie es zur Registrierung einer Bewegung kommt.
Zum Anschluss an den Arduino wird der mittlere Pin mit einem analogen Eingang verbunden, über den die Spannung am Teilwiderstand zwischen GND und dem analogen Eingang abgefragt werden kann. Die anderen beiden Pins müssen mit 5V und GND verbunden werden, wobei es egal ist, welcher Pin mit GND und welcher mit 5V verbunden wird.
Die Grundlagen des Potentiometers werden auch im Kapitel Elektrische Grundlagen behandelt.
Für das Potentiometer existiert ein vorkonfigurierter Block, über den man die Spannung am Teilwiderstand zwischen GND und dem analogen Eingang auslesen kann. Diese kann zwischen 0V (Teilwiderstand gleich null) oder 5V (Teilwiderstand gleich Gesamtwiderstand) bewegen. Alternativ kann das Potentiometer als analoger Sensor konfiguriert werden und der Analogwert im Programm abgefragt werden.
Hinweis: Du musst dafür sorgen, dass der eingelesene Analogwert zwischen 0 und 1023 in einen PWM-Wert zwischen 0 und 255 umgerechnet wird. Ermittle dazu eine passende Funktion.
Joysticks werden bekanntermaßen für Spielecontroller oder auch zur Steuerung von Maschinen genutzt. Mit dem Arduino lassen sich einfache Versionen davon nachbauen.
Ein Joystick besteht im Wesentlichen aus zwei Potentiometern, die über einen gemeinsamen Hebel variiert werden können. Wie im Schaltbild zu sehen, teilen sich beide den 5V- und GND-Anschluss; der mittlere Anschluss muss natürlich jeweils einzeln ausgelesen werden. Zusätzlich wird durch Drücken des Joysticks ein angebrachter Taster gedrückt, dessen Status am SW-Pin ausgelesen werden kann (sw von engl. “switch”). Da das elektrische Potential am SW-Pin normalerweise schwankt, sollte ein Pullup-Widerstand mit \(R=1 \, k\Omega\) angebracht werden (vgl. Schaltbild).
Programmierung: Das Joystick-Modul ist in Nepo nicht vorkonfiguriert. Die Bestandteile, also die zwei Potentiometer und der Taster, lassen sich aber einzeln konfigurieren. Dies geht wahlweise mit den vorkonfigurierten Potentiometer- und Taster-Blöcken oder als analoger und digitaler Sensor.
Steuere mit dem Joystick-Modul einen Schrittmotor!
Achtung bei Verwendung von Motoren: Spätestens, wenn mehr als ein Motor am Arduino betrieben werden soll, muss eine externe Spannungsquelle genutzt werden, zum Beispiel durch Anschluss einer 9 V-Batterie an das Power-Supply-Module. Schaue dir dazu noch einmal den Infokasten zum Power Supply Module an.
Jeder weiß, wie angenehm es ist, wenn man ein Gerät fernsteuern kann statt aufstehen zu müssen, um die angebrachten Knöpfe zu drücken. Eine einfache Möglichkeit dafür bietet eine Infrarot(IR)-Fernbedienung.
Wie am Namen zu erkennen, verwendet eine IR-Fernbedienung Infrarotstrahlen, die mit dem bloßen Auge nicht sichtbar sind. Hält man jedoch eine Digitalkamera, z. B. vom Smartphone, auf die Infrarot-LED der Fernbedienung und drückt eine Taste, dann kann man ein schnelles Aufblitzen erkennen. Am besten probierst du es selbst einmal aus oder schaust dir ein kurzes Video der IR-Strahlen (siehe unten) an. Das Aufblitzen zeigt, dass die Strahlen in einem bestimmten Rhythmus gesendet werden, aus dem sich entschlüsseln lässt, welche Taste gedrückt wurde.
Empfangen werden die Infrarotstrahlen von einem Infrarotsensor, der im Wesentlichen aus einer Photodiode besteht. Diese ist sehr ähnlich wie eine Leuchtdiode aufgebaut, allerdings funktioniert sie genau umgekehrt: Anhand eintreffender (infraroter) Lichtstrahlen wird ein Stromfluss ausgelöst, der dann registriert und weiter verarbeitet werden kann. Die Photodiode reagiert zwar am empfindlichsten auf infrarotes Licht bei einer Frequenz von \(38 \, kHz\), allerdings auch (weniger stark) auf sichtbares Licht. Um dieses sichtbare Licht, insbesondere die Umgebungshelligkeit, wegzufiltern, befindet sich die Photodiode in einer schwarzen Kunstharzschicht.
Häufig wird der Infrarotsensor zusammen mit einer LED und einem zugehörigen Vorwiderstand auf einer kleinen Platine ausgeliefert, damit das Empfangen eines Signals durch die LED angezeigt werden kann. Es sind aber auch Infrarotsensoren ohne weitere Anzeige im Umlauf.
Der Anschluss an den Arduino ist einfach: GND und 5V dienen wie üblich der Stromversorgung. Der Signal-Pin S muss mit einem beliebigen PWM-Pin (mit \(\sim\)) verbunden werden. Die Pin-Belegung ist aber leider unterschiedlich; je nach dem, ob man ein Modul mit LED-Anzeige oder nur den Infrarotsensor anschließt.
Nachdem der IR-Sensor mit dem Arduino verbunden und in Nepo konfiguriert wurde, können die empfangenen Werte in Nepo abgefragt werden. Die Abbildung unten zeigt ein einfaches Beispiel, wie mit den Tasten 0 und 1 auf einer Infrarot-Fernbedienung die Board-LED des Arduino an- und ausgestellt werden kann. Wenn die Taste mehrere Aktionen auslösen soll (wie die Ausgabe des Codes auf dem seriellen Monitor und das Anschalten der LED), dann muss der Wert in einer Variable gespeichert werden.
In vielen Bereichen werden LED-Streifen genutzt, um einen Raum mit passendem, indirektem Licht auszustatten. Die meisten LED-Streifen lassen sich über eine kleine Infrarot-Fernbedienung steuern, wodurch sich die Farbe, aber auch der Modus einstellen lässt - zum Beispiel eine einzelne Farbe, Fading, Strobe, …
Das Prinzip lässt sich auf ein Lauflicht übertragen. Baue ein Lauflicht und programmiere verschiedene Lauflicht-Modi, die sich mit der Fernbedienung einstellen lassen.
Der DHT-11 verfügt über drei Pins - 5V und GND dienen der Stromversorgung, während das Signal zu den Messdaten über den Signalpin ausgegeben wird. Für die Temperaturmessung ist auf dem DHT-11 ein NTC verbaut.
Das Auslesen des Signalpins ist einfach, weil der DHT-11 in der Konfiguration bereits implementiert wurde, sodass man nur noch den Signalpin angeben muss. Das Signal wird dann automatisch analysiert und decodiert, um anhand der entsprechenden Befehle auf die übermittelte Temperatur bzw. Luftfeuchtigkeit zuzugreifen. Die Größe kann über das Drop-Down-Menü ausgewählt werden.
Baue eine kleine Wetterstation, die alle zehn Minuten Temperatur und Luftfeuchtigkeit misst und auf dem seriellen Monitor ausgibt.
Recherche: Wie wird die Luftfeuchtigkeit gemessen?
Mit dem DHT-11 lässt sich die relative Luftfeuchtigkeit bestimmen. Recherchiere, was darunter zu verstehen ist, und wie diese durch ein elektrisches Bauteil gemessen wird.
Bei deinen Temperaturmessungen mit einem NTC oder dem DHT-11 (in dem auch ein NTC verbaut ist), hast du vielleicht festgestellt, dass die Bauteile nicht besonders genau arbeiten. Für professionellere Anwendungen benötigt man eine wesentlich höhere Genauigkeit. Hier kann der TMP36 helfen: Er hat eine Genauigkeit von \(\pm 1 \, °C\) und kann Temperaturen in einem Bereich von \(-40 \, °C\) bis \(125 \, °C\) zuverlässig messen. Die Messung der Temperatur erfolgt über die Messung einer temperaturabhängigen Spannung. Bei \(0 \, °C\) beträgt die Spannung \(500 \, mV\) (ein sogenannter Offset).
Achtung: Es besteht Verwechslungsgefahr mit dem Transistor! Achte daher genau auf die Aufschrift!
Ein weiterer Vorteil des TMP36 ist, dass die Abhängigkeit von ausgegebener Spannung und Temperatur linear verläuft: Eine Temperaturänderung von \(1 \, °C\) entspricht immer einer Spannungsänderung von \(10 \, mV\).
Ein linearer Zusammenhang zwischen der gemessenen Größe (oft eine Spannung) und der gesuchten Größe (hier die Temperatur) gilt als vorteilhaft, ein exponentieller Zusammenhang dagegen als nachteilig. Begründe anhand der unten abgebildeten Skizzen von Kennlinien, warum ein linearer Zusammenhang besser ist.
Beachte: Jede Messung ist mit einem Fehler versehen!
Baue ein präzises Thermometer und konfiguriere den TMP36 als analogen Sensor.
Tipp: Zur Berechnung der Temperatur musst du zuerst den eingelesenen Analogwert in eine Spannung umrechnen. Um aus der Spannung die Temperatur zu berechnen, musst du die oben angegebenen Informationen noch einmal genau lesen. Zur Kontrolle: Die maximal mögliche Spannung am Signalpin beträgt \(2 \, V\), was einer Temperatur von \(150 \, °C\) entspricht.
Mit einem Tropfensensor lässt sich die Feuchtigkeit auf dem Sensorblatt messen. Solche Sensoren werden zum Beispiel in Windschutzscheiben von Autos eingesetzt, um die Scheibenwischer und ihre Geschwindigkeit zu steuern. Feuchtigkeitssensoren funktionieren im Wesentlichen genauso, allerdings sind die Kontakte dabei so weit auseinander, dass durch Tropfen noch kein Stromfluss entsteht, sondern erst durch zum Beispiel die feuchte Erde eines Blumentopfes, der automatisch bewässert werden soll.
Der Anschluss an den Arduino ist in beiden Fällen einfach: + an 5V, - an GND und der Signalpin S an einen analogen Eingang A[0-5]. Am Signalpin wird eine Spannung (als Analogwert im analogen Eingang) gemessen, die im trockenen Zustand bei \(0 \, V\) (0) liegt und bis zu \(5 \, V\) (1023) steigen kann.
Das grundlegende Prinzip eines Tropfensensors/Feuchtigkeitssensors ist einfach: Je nasser/feuchter es ist, desto besser der Strom durch die feuchte Stelle fließen. Der Arduino kann aber nur eine Spannung messen (als Analogwert) - wie bekommt man diese Umwandlung hin?
Erkläre anhand des unten abgebildeten Schaltplans eines Tropfensensors, wie die Feuchtigkeit auf den Kontakten des Sensorblatts am Signalpin S (analoger Eingang zur Spannungsmessung) gemessen werden kann.
Tipp: Zentral ist der Transistor J3Y, der mit seinen drei Kontakten auf dem Sensor gut erkennbar ist. Die Status-LED mit Vorwiderstand kann dagegen vernachlässigt werden.
Baue einen Scheibenwischer, der automatisch startet, wenn Feuchtigkeit registriert wird. Je nach Feuchtigkeitslevel soll eine von drei Geschwindigkeiten ausgewählt werden.
Hinweis: Du kannst die vorkonfigurierten Blöcke von Nepo für den Tropfensensor verwenden oder einen analogen Sensor konfigurieren, dessen Analogwert du selbst in einen Prozentwert umrechnest (0 entspricht 0 %, 1023 entspricht 100 %).
Der Anschluss an den Arduino ist einfach: + an 5V, - an GND, der Signalpin S an einen analogen Eingang A[0-5]. Am Signalpin liegt eine Spannung an, die sich im Rhythmus des Herzschlags verändert und am analogen Eingang des Arduino gemessen werden kann. Dies lässt sich mit dem seriellen Plotter der Arduino IDE veranschaulichen (siehe Abbildung unten). Man erkennt, dass die gemessenen Analogwerte zwischen ca. 500 und ca. 535, also in einem relativ kleinen Bereich, schwanken (35 bzw. \(0,171 \, V\)).
Als Kriterium für einen Herzschlag könnte man festlegen, dass der Analogwert über 520 liegt. Diese Werte sind jedoch wenig stabil und schwanken je nach Person und Umgebung! Man sollte unbedingt darauf achten, dass die Haut nicht verschwitzt ist und keine Bauteile auf dem Sensor berührt werden (insbesondere auf der Rückseite), damit die Ergebnisse einigermaßen zuverlässig sind. Wenn sich auf dem Arm keine brauchbaren Werte einstellen, lohnt sich ein Versuch auf dem Ringfinger oder dem Ohrläppchen.
Der Pulssensor kann mit den vorkonfigurierten Blöcken von Nepo oder direkt als analoger Sensor eingelesen werden. Im Hintergrund passiert das Gleiche.
Für die Messung des Pulses ist die grüne LED und ein Lichtsensor zentral. Erkläre anhand der schematischen Abbildungen unten das Prinzip der optischen Pulsmessung.
Baue einen Pulsmesser, der anhand der Messwerte von 10 Sekunden den Puls (Herzschläge pro Minute) berechnet.
Hinweis: Es kann nötig sein, sich die Werte von einem seriellen Plotter visualisieren zu lassen, um einen Eindruck vom Wertebereich und von der Grenze für die Herzschlagerkennung zu bekommen. Klappe dafür die Anleitung unter diesem Projekt aus.
0. Vorbereitung: Damit überhaupt Werte über den seriellen Port (USB) übermittelt werden, erstelle ein Programm in Open Roberta, das fortlaufend den aktuellen Wert des Pulssensors auf den seriellen Monitor schreibt und übertrage es auf den Arduino.
1. Der Serielle Plotter ist in die Arduino IDE eingebaut, die genutzt wird, um den Arduino textbasiert zu programmieren. Lade die Arduino IDE herunter und installiere sie.
2. Öffne die Arduino IDE. Zuerst muss der Arduino verbunden werden. Wähle dazu in der oberen Leiste Werkzeuge > Board: Arduino Uno und wähle unter Werkzeuge > Port den Port aus, an dem der Arduino angegeben wird (siehe unten).
3. Öffne den Seriellen Plotter unter Werkzeuge > Serieller Plotter. Das Koordinatensystem wird automatisch an die vom Arduino übermittelten Werte angepasst. Falls keine Werte angezeigt werden, dann kontrolliere, ob die Baud-Rate (unten links) auf 9600 eingestellt ist.
Die wichtigsten Bestandteile des Ultraschallsensors sind der “Transducer” (T) und der “Receiver” (R). Der Transducer ist praktisch ein Lautsprecher, der für uns nicht hörbare Schallwellen aussendet. Der Receiver entspricht einem Mikrofon für Schallwellen. Die Schallwellen werden also vom Transducer ausgesendet, an einem Hindernis reflektiert und vom Receiver empfangen.
Der Ultraschallsensor verfügt über vier Pins. GND und VCC (5 V) sind wie üblich zu belegen und dienen der Energieversorgung. Der Trigger-Pin dient dazu, einen Ultraschallpuls auszusenden - wird er für 10 Mikrosekunden auf ein HIGH-Potential gebracht, wird der Ultraschallpuls getriggert. Wenn dies geschieht, wird der Echo-Pin von der Elektronik des Sensors auf ein HIGH-Potential gebracht, das so lange anhält, bis der Receiver die reflektierte Schallwelle empfängt. Trigger-Pin und Echo-Pin können beide mit einem beliebigen Digitalpin am Arduino verbunden werden.
Die Zeit, die der Echo-Pin auf HIGH liegt, gibt also an, wie lange der Schall braucht, um vom Sensor zum Hindernis und zurück zu gelangen. Mit Hilfe der Schallgeschwindigkeit wird dann berechnet, welche Strecke der Schall zurückgelegt hat. Diese Berechnungen werden praktischerweise von den vorkonfigurierten Nepo-Blöcken übernommen, sodass man direkt die Strecke erhält.
Baue eine Einparkhilfe für ein Auto, die umso schneller piepst, je näher man dem Hindernis kommt. Ab einer Entfernung von 30 cm soll der Ton durchgängig ertönen.
Recherche: Wie wird Ultraschall erzeugt und gemessen?
Die Erzeugung des Ultraschalls beruht wie beim Piezo-Summer auf dem inversen piezo-elektrischen Effekt (vgl. Piezo-Summer); die Messung des Ultraschalls beruht auf dem piezo-elektrischen Effekt. Recherchiere im Internet die Hintergründe dieser Effekte und fasse sie zusammen.
Die Verbindung mit dem Arduino erfolgt über ein Serial Peripheral Interface (SPI) (weitere Informationen unten), weshalb die meisten Pins am Arduino festgelegt sind (siehe unten). Der RST-Pin und der SDA-Pin lassen sich ggf. noch ändern. Wichtig: Der Mikrocontroller auf dem RFID-Chip arbeitet mit einem Logiklevel von \(3,3 \, V\) und würde durchbrennen, wenn man ihn an 5 V anschließt. Der Arduino verfügt direkt neben dem 5 V-Anschluss auch über einen 3,3 V-Anschluss. Der IRQ-Pin des RFID-Empfängers wird nicht benötigt und kann ignoriert werden.
Zur Programmierung kann man die bloße Anwesenheit eines RFID-Senders abfragen oder die ID eines RFID-Senders. Die Anwesenheitsabfrage unterscheidet nicht, welcher RFID-Sender anwesend ist, sie liefert also bei jedem RFID-Sender true
zurück. Sinnvoller ist also in den meisten Fällen die Abfrage der einzigartigen ID des RFID-Senders, um diese abspeichern und im nächsten Programm darauf reagieren zu können. Ein Beispielprogramm zeigt die folgende Abbildung.
Fehlerquellen: Bei der Programmierung gibt es zwei Fehlerquellen zu beachten, die man möglichst vermeiden sollte:
gib ID
und gib Anwesenheit
kurz hintereinander verwendet, wird der zweite Befehl nicht funktionieren, weil dazu (durch die Implementierung im Hintergrund) immer eine neue Karte erkannt werden muss.Für den Vergleich von vorgegebener ID und eingelesener ID muss für beide eine Variable vom Typ Zeichenkette angelegt werden, damit Nepo keinen Fehler anzeigt. Das unten abgebildete Beispiel erzeugt also einen Fehler. (Hintergrund: Wenn die vorgegebene ID nicht als Zeichenkette (String) definiert wird, wird sie als sogenanntes Character-Array behandelt. Da die eingelesene ID aber vom Typ String ist, sollen sozusagen Äpfel mit Birnen verglichen werden.)
Baue und programmiere einen Prototypen für eine Katzentür, die sich automatisch öffnet, wenn die Katze (mit RFID-Chip am Halsband) sich der Tür nähert.
Erweiterung: Schließe einen weiteren RFID-Empfänger am Arduino an (siehe Informationen unten). Einer der RFID-Empfänger soll sich draußen, der andere drinnen befinden. Programmiere nun drei Modi, zwischen denen sich hin- und herschalten lässt:
Das Serial Peripheral Interface (engl. für serielle periphäre Schnittstelle) ist ein Bus-System, um Daten zwischen Mikrocontrollern und integrierten Schaltkreisen nach dem Master-Slave-Prinzip auszutauschen. Der Master ist hier immer der Arduino, die Slaves sind die angeschlossenen Bauteile. Für die Kommunikation werden neben zwei Leitungen zur Spannungsversorgung (5 V bzw. 3,3 V und GND) vier weitere Leitungen benötigt:
Beschleunigungssensoren oder Lagesensoren tauchen in zig verschiedenen Geräten auf:
Auch mit dem Arduino lassen sich interessante Dinge mit Beschleunigungssensoren bauen. Verwendet wird hier das Modul GY-61, auf dem der Beschleunigungssensor ADXL335 verbaut ist. Da der ADXL335 mit einem Pegel von 3V arbeitet, befindet sich auf der kleinen Platine zusätzlich ein Spannungsregler, der die 5V vom Arduino auf 3V für den ADXL335 herunterregelt. Zusätzlich ist ein kleines Koordinatensystem auf der Platine gezeichnet, das angibt, in welchen Richtungen die Beschleunigung gemessen wird. Die z-Achse verläuft dabei senkrecht zur Platine nach unten, wenn man auf das Koordinatensystem schaut. Dies ist erkennbar an dem Kreis mit einem Kreuz darin - als Eselsbrücke kann man sich einen Dartpfeil vorstellen, dessen gekreuzte Federn man von hinten sieht, wenn er von einem weg zeigt.
Der ADXL335 gibt für die Beschleunigungen \(a_x\) in x-Richtung, \(a_y\) in y-Richtung und \(a_z\) in z-Richtung jeweils eine Spannung aus, die laut Datenblatt des ADXL335 (S. 10) proportional zur Beschleunigung ist. Am Arduino kann diese Spannung über die analogen Eingänge A0 bis A5 gemessen werden. Wenn die Schaltung wie im folgenden Schaltplan erfolgt, dann müssen im Open Roberta Lab drei analoge Sensoren für A0, A1 und A2 angelegt werden, deren Werte als Analogwerte ausgelesen werden.
Nach Abzug der Analogwerte, die für die Beschleunigung 0 stehen, erhält man drei Analogwerte für die Beschleunigung in x-Richtung, y- Richtung und z-Richtung. Diese lassen sich mathematisch als dreidimensionaler Vektor auffassen, dessen Betrag bzw. Länge berechnet werden kann, um (einen Analogwert für) die Gesamtbeschleunigung zu erhalten.
Entwickle eine Musikbox für Kinder mit einem einfachen Bedienkonzept: Um das nächste Lied abspielen zu lassen, muss man sie schütteln.
Vorlage: Du kannst das folgende Programm herunterladen und im Open Roberta Lab importieren, um es als Vorlage zu nutzen: beschleunigungssensor-vorlage.xml. Du findest darin eine Funktion "gibBeschleunigung", die die Gesamtbeschleunigung (vgl. mathematischen Exkurs oben) für dich berechnet.
Mögliche große Erweiterung: Nutze eine RFID-Karte als CD. Je nachdem, welche RFID-Karte erkannt wird, werden andere Lieder abgespielt. Diese Idee wird auch beim Tonuino-Projekt genutzt!
Entwickle einen Schrittzähler!
Hinweise und Tipps:
Mit einem analogen Hall-Sensor lässt sich die Stärke eines Magnetfeldes (verkürzt: eines Magneten) messen. Solche Messungen werden zum Beispiel bei der Pipeline-Inspektion genutzt, um Risse in einer Pipeline zu finden und ihre Größe abzuschätzen. Dabei wird die Pipeline durch sehr starke Magnete magnetisiert. Wenn Risse vorhanden sind, kommt es jedoch zu Änderungen bei der Magnetisierung. Diese können durch die Hall-Sensoren erfasst und gemessen werden.
Es gibt viele verschiedene Hall-Sensoren - in diesem Kurs wird das Hall-Sensor-Modul "KY-035" genutzt. Das ist eine kleine Platine, auf der der Hall-Sensor AH49E verlötet ist.
Achtung: Hall-Sensoren können leicht mit Transistoren verwechselt werden! Achte genau auf die Aufschrift auf dem schwarzen Kästchen und hole ggf. eine Lupe, um zu erkennen, ob es sich um einen Transistor, einen analogen Hall-Sensor oder einen digitalen Hall-Sensor handelt.
Sensor und Modul verfügen über drei Pins, die beim Arduino an 5V, GND und einen analogen Eingang (A0 bis A5) angeschlossen werden, wie der Schaltplan unten zeigt.
Die Verbindung mit 5V (Pluspol) und GND (Minuspol) sorgt für den Stromfluss durch den Hall-Sensor. Wenn sich der Hall-Sensor in einem Magnetfeld befindet, dann entsteht in ihm eine sogenannte Hall-Spannung, die im Hall-Sensor noch weiter verstärkt und stabilisiert wird. Am Signalpin S kann man diese Spannung (gegenüber GND) messen, indem man ihn an einen analogen Eingang am Arduino anschließt.
Am Arduino wird die Spannung, die der Hall-Sensor ausgibt und die mit der Stärke des Magnetfeldes zusammenhängt, über einen eingebauten Analog-Digital-Wandler (engl. analog-to-digital converter, ADC) durch eine ganze Zahl zwischen 0 und 1023 ausgedrückt. Zuerst muss aus diesem Analogwert die Spannung berechnet werden, um anhand der Spannung dann die Stärke des Magnetfeldes zu berechnen.
Analogwert | Spannung |
---|---|
0 | 0 mV |
1 | |
100 | |
A | |
1023 | 5000m V |
Ein Teslameter ist ein Messgerät für die magnetische Flussdichte \(B\), deren Einheit nach dem Physiker Nikola Tesla benannt ist. \(1 \, T\) (Tesla) ist jedoch bereits eine sehr große Magnetfeldstärke. Handelsübliche Magnete liegen eher im Bereich von wenigen Millitesla.
Um die ausgegebene Spannung und ihren Zusammenhang zur magnetischen Flussdichte zu verstehen, ist ein Blick in das Datenblatt des Hall-Sensors notwendig. Die unten / rechts stehende Tabelle enthält einen Auszug aus dem Datenblatt mit den wesentlichen Informationen zur Ruhespannung, die ausgegeben wird, wenn kein Magnetfeld vorliegt, und zur Sensitvität der Spannung, die angibt, wie stark sich die Ruhespannung ändert, wenn sich die magnetische Flussdichte ändert. Je nach Richtung des Magnetfeldes kann sich die Ruhespannung vergrößern oder verkleinern.
Auszug aus dem Datenblatt des Hall-Sensors AH49E:
min. | typ. | max. | unit | |
---|---|---|---|---|
quiescent output voltage | 2.25 | 2.5 | 2.75 | V |
output voltage sensitivity | 1.1 | 1.6 | 2.1 | mV/GS |
Experimentelle Verbesserung
Laut Datenblatt des Hall-Sensors AH49E kann die Output Voltage Sensitivity schwanken und dementsprechend ungenau können die berechneten Werte für die magnetische Flussdichte sein. Mit einem professionellen Teslameter hingegen lässt sich das selbst gebaute Teslameter eichen.
Miss die Stärke eines Permanentmagneten mit einem professionellen Teslameter und miss die Spannung des Hall-Sensors am Arduino an der gleichen Stelle. Wandle deine Berechnung so ab, dass dein Teslameter den gleichen Wert wie das professionelle Teslameter anzeigt.
Reflexion
Hintergrund: Der Hall-Effekt
Die Messung der Stärke des Magnetfeldes beruht auf der Messung der Hall-Spannung, die im Hall-Sensor erzeugt wird. Im Hall-Sensor befindet sich ein winziges Hall-Plättchen, durch das Strom fließt. Wenn sich ein Magnetfeld diesem Plättchen nähert, werden die bewegten Elektronen zu einer Seite abgelenkt. Somit besteht auf einer Seite des Plättchens ein Elektronenüberschuss und auf der anderen Seite ein Elektronenmangel. Das bedeutet, dass an diesen beiden Seiten eine Spannung anliegt. Dieser Effekt wird nach dem Physiker Edwin Hall Hall-Effekt genannt.
Es lässt sich zeigen, dass diese Hall-Spannung proportional zur Stärke des Magnetfeldes ist. Daher sind Hall-Sensoren sehr gut für die Messung von Magnetfeldstärken geeignet.
Animation von Fraunhofer IIS, CC BY-SA 4.0, via Wikimedia Commons
Bei einem digitalen Hall-Sensor wird das analoge Signal eines Hall-Sensors durch weitere Elektronik so weiterverarbeitet, dass bei der Ausgabe nur noch zwischen Magnetfeld bzw. Magnet anwesend und Magnetfeld bzw. Magnet nicht anwesend unterschieden wird. Dies ist in vielen Anwendungsfällen das Einzige, was wirklich interessiert: So lässt sich damit feststellen, ob der Gurt eines Autos angelegt wurde oder es lässt sich messen, wie oft sich ein Motor oder ein Reifen gedreht hat. Letzteres lässt sich bei Autos oder Fahrrädern nutzen, um aus der Drehzahlmessung die Geschwindigkeit errechnen.
Es gibt verschiedene Hall-Sensoren - in diesem Kurs verwenden wir das Hall-Sensor-Modul KY-003, auf dem der Hall-Sensor A3144 zusammen mit einer LED und einem zugehörigen Widerstand verbaut ist.
Achtung: Hall-Sensoren können leicht mit Transistoren verwechselt werden! Achte genau auf die Aufschrift auf dem schwarzen Kästchen und hole ggf. eine Lupe, um zu erkennen, ob es sich um einen Transistor, einen analogen Hall-Sensor oder einen digitalen Hall-Sensor handelt.
Unten ist der Schaltplan zum Anschließen an den Arduino abgebildet.
Der Hall-Sensor ist nicht im Open Roberta Lab vorkonfiguriert. Er lässt sich aber einfach als digitaler Sensor in der Roboterkonfiguration angeben. Mit dem Befehl gib <digitalen> Wert Sensor <S>
erhält man dann den Rückgabewert 0
(Spannung von 0V bzw. Potential LOW
) oder den Rückgabewert 1
(Spannung von 5V bzw. Potential HIGH
).
Laut Datenblatt des Hall-Sensors A3144 verfügt dieser über eine sogenannte Hysterese. Das bedeutet, dass der Wechsel von HIGH
zu LOW
bei einer anderen Magnetfeldstärke passiert als der Wechsel von LOW
zu HIGH
. Unten wird dies graphisch dargestellt.
Schematische Darstellung der Hysterese des A3144 am Arduino. Der rote Graph stellt den Wechsel von HIGH zu LOW dar, wenn die magnetische Flussdichte zunimmt. Der blaue Graph stellt den Wechsel von LOW zu HIGH dar, wenn die magnetische Flussdichte wieder kleiner wird. Die Werte für \(B_{OP}, B_{RP}, B_{hys}\) und \(U_{HIGH}, U_{LOW}\) im Diagramm wurden vom Autor beim Anschluss an einen Arduino mit \(VCC = 5V\) mit einfachen Mitteln gemessen und schwanken. Sie stellen daher nur einen ungefähren Anhaltspunkt dar.
Die Begriffe werden im Datenblatt auf S. 2 folgendermaßen erklärt:
Größe | Erklärung |
---|---|
\(B_{OP}\) | operate point (ouput turns ON) |
\(B_{RP}\) | release point (ouput turns OFF) |
\(B_{hys}\) | hysteresis (\(B_{OP}-B_{RP}\)) |
Erkläre anhand des Diagramms oben in eigenen Worten die Bedeutung der drei Größen und gib ihren jeweiligen Wert an.
Begründe anhand eines Signals für die magnetische Flussdichte \(B\), das um den Wert \(B \approx 9mT\) schwankt, warum es sinnvoll ist, dass der Hall-Sensor über eine Hysterese verfügt.
Mit dem digitalen Hall-Sensor kann man registrieren, wann der Reifen eines Fahrrads eine Umdrehung ausgeführt hat (siehe Bild am Anfang dieses Abschnitts). Nutze dies und baue damit einen einfachen Fahrradtacho, der die Geschwindigkeit berechnet und anzeigt!