Hi,

beim letzten Mal haben wir damit begonnen, aus dem Arduino eine kleine digitale Wetterstation zu bauen, die Temperatur und Luftfeuchtigkeit anzeigt.

Und wie verprochen ergänzen wir die Station heute um eine schicke Analoganzeige.

Die Temperatur soll über einen Zeiger angezeigt werden, der sich über einer Skala dreht. Das kennst du vielleicht von alten Messgeräten. Bevor die digitale Elektronik ihren Siegeszug antrat, waren alle Messgeräte in dieser Art aufgebaut:

Die kontinuierliche Änderung einer Messgröße wurde auf irgend eine Weise in die Bewegung einer Anzeige umgesetzt. Dafür gibt es zahlreiche Beispiele, die auch heute noch im Gebrauch sind:

  • Die Quecksilbersäule eines Thermometers
  • Die Zeiger einer analogen Armbanduhr
  • Die Druckanzeige an einem Kessel oder einer Espresso Maschine

Streng genommen werden wir zwar ein wenig schummeln, weil wir mit dem Arduino weiterhin digitale Größen verarbeiten und diese nur ganz am Schluss in ein analoges Signal umwandeln. Aber der Effekt ist hinterher derselbe: Ein Zeiger, der die Änderungen der Messgröße durch Bewegung um einen bestimmten Winkel anzeigt.

Außerdem lernst du dabei einige wichtige neue Bauteile kennen. Insbesondere setzten wir zum ersten Mal einen mini Servo ein und schauen uns dessen Ansteuerung an.

Alles in allem ein sehr spannender Kurs. Fangen wir also an.

Ach so, bevor es losgeht, brauchst Du für das Projekt noch folgende Bauteile:

  • Ein Dreh-Potentiometer 10 kOhm
  • Ein kleiner Modellbau-Servo mit einer Betriebsspannung von 5V, siehe auch die Abblidung unten

Arme und Beine für den Arduino

Servos ermöglichen es, sehr gezielte Bewegungen mit dem Arduino zu kontrollieren.Sie sind im Grunde so etwas, wie die Arme und Beine des Arduino und können für Antriebe oder Greifer verwendet werden.  Das ist für alle künftigen Projekte mit Modellfahrzeugen und Roboter  natürlich ganz wesentlich.

Ein weiteres Bauteil, das immer wieder benötigt wird ist das Potentiometer. Hinter diesem kompliziert klingenden Namen verbirgt sich einfach nur ein einstellbarer Widerstand. Es gibt sie in verschiedenen Widerstandsbereichen, mit Drehknopf oder platzsparend mit einem Schlitz für Schraubendreher. Auch diese Bauteile kamen bereits in der analogen Elektronik häufig zum Einsatz. Sie eignen sich als Nutzer-Interface, denn immer wenn man an einem Knopf drehen kann, dann lässt sich damit ein Wert in der Schaltung verändern.

Wir werden die Analoganzeige in drei Schritten aufbauen:

  • Zuerst wird das Potentiometer (meistens nur kurz Poti genannt) eingebaut und der Auslesewert direkt auf das LCD-Display geleitet.
  • Dann verkabeln wir den Servo und  steuern ihn mit dem Auslesewert vom Poti an.
  • Zuletzt wird der Servo-Eingang dann an den Temperatursensor des DHC11 gekoppelt.

 Dateneingabe auf die analoge Weise: Das Potentiometer

Das Potentiometer hat drei Anschlüsse. Zwischen den beiten äußeren Anschlüssen liegt immer ein konstanter Widerstand. Der mittlere Anschluss ist mit einem Schleifer verbunden, der durch Drehen über das Widerstandsmaterial bewegt werden kann. Je nachdem wie lange die Strecke zwischen äußeren Anschlüssen und dem mittleren Schleiferkontakt ist, ändert sich der Widerstandswert dazwischen. So etwas ähnliches hatten wir schon in den Lektionen 2 und 3: Ein Spannungsteiler!

Die Spannung, die über den äußern Kontakten liegt, wird über den mittleren Kontakt in zwei Teile aufgeteilt. Und das praktische am Poti ist, dass diese Unterteilung verstellbar ist, wir haben also einen einstellbaren Spannungsteiler. Das ist auch der Hauptanwendungszweck dieses Bauteils.

Das Poti in der Abbildung hat schon einige Schraubendreher gesehen 🙂

 

Ein Potentiometer im eingebauten Zustand.
Ein Potentiometer im eingebauten Zustand.

Probier es aus und verbinde die äußeren Anschlüsse des Potis mit +5V und GND. Den mittleren Kontakt verbindest du mit dem analogen Eingang des Arduino, den du bei der Ampelsteuerung schon kennen gelernt hast. Wir wählen hier den analogen Pin A0.

Wir verwenden den Aufbau vom letzten Mal, weil wir das LCD-Display für die Anzeige nutzen wollen. Den Temperatur- und Feuchtesensor DHT11 brauchen wir erstmal nicht, aber lass ihn in der Schaltung, da er später wieder benötigt wird.

Zunächst möchten wir aber nur den Wert des analogen Pins auf dem Display anzeigen.

Das geht mit folgendem Sketch:

Der Code enthält nichts Neues für dich. Die Ansteuerung des LCD-Displays kennst du zur Genüge und auch mit dem Auslesen des analogen Pin hast du bereits Erfahrung.

Dennoch dient der Aufbau als wichtiger Schritt, denn damit können wir sicher stellen, dass das Poti korrekt eingebaut ist und funktioniert.

Probiere es aus und verstelle den Schleifer am Potentiometer. Auf dem Display müssten dann die Werte zwischen 0 und 1024 angezeigt werden. Die Anzeige flackert ein wenig, weil die letzten Stellen aufrund von Messungenauigkeiten nicht konstant sind. Wenn dich das stört, kannst du ein kleines Delay  in den loop-Block einbauen.

Das Poti funktioniert? Super, dann kommen wir nun zum Servo!

Am Puls der Zeit

Servo
Ein Modellbau-Servo

Ein Servo ist eine Einheit aus Ansteuerungslogik, Getriebe und Elektromotor, die in einem Gehäuse gemeinsam verbaut sind. Im Unterschied zu einem normalen Elektromotor, der kontinuierlich in eine Richtung dreht, bewegt sich der Servo nur schrittweise und über einen begrenzten Winkelbereich.

Zum Beispiel kann der typische Modellbau-Servo wie der aus unserem Beispiel nur eine halbe Umdrehung machen. Diese kann man aber sehr genau steuern. Du kannst einen exakten Winkel vorgeben, den der Servo dann anfährt und auch hält, selbst wenn eine Kraft an der Achse zieht, oder ein Drehmoment um genau sein.  Gesteuert wird dies über ein sogenanntes Puls-Signal.

Das ist eine Spannung, die nur für sehr kurze Zeit eingeschaltet und wieder ausgeschaltet wird, und das Ganze wird dann periodisch wiederholt. Diese Pulse wertet die innere Elektronik im Servo aus und setzt die Information in die Einstellung der Achse um.

Bei den Farben der Anschlusskabel gibt es verschiedene Ausführungen, je nachdem von welchem Hersteller dein Servo stammt. Eines ist aber allen gemeinsam: Das mittlere der drei Kabel ist immer rot und hier gehört die +5V Versorgungsspannung dran. Das Massekabel ist entweder schwarz oder braun und gehört an den GND Pin am Arduino. Was dann noch übrig bleibt ist die Signalleitung. Sie kann weiß, gelb, orange oder blau sein.

Diese verbindest du mit einem digitalen Pin. Aber Vorsicht: Der Servo funktioniert nicht an jedem Pin.  Der Pin muss in der Lage sein, das spezielle Puls-Signal zu erzeugen, mit dem der Servo angesteuer wird. Du erkennst das daran, dass neben der Pin-Bezeichnung auf der Arduino-Platine eine Wellenline ‚~‘  markiert ist. Beim Arduino Uno sind das die Pins 3, 5, 6, 9, 10 und 11.

Um die Erzeugung der Pulse für die Ansteuerung müssen wir uns zum Glück nicht kümmern. Auch hier gibt es bereits eine nützliche Bibliothek in der Arduino-Entwicklungsumgebung. Wir binden sie ein mit

#include <Servo.h>

So wird das Servo Objekt erzeugt und initialisiert:

Die Ansteuerung des Servos ist jetzt denkbar einfach. Für fortgeschrittene Anwendungen kannst du mit Hilfe der Servo-Bibliothek auch die Pulsweiten des Steuersignals gezielt kontrollieren, aber heute werden wir einfach den Stellwinkel an die Einheit übertragen und das war’s. Dazu verwenden wir den Befehl myServo.write(Winkel) , wobei Winkel  ein int-Wert zwischen 0 und 180 ist.

Im Beispiel haben wir den Servo an Pin 9 angeschlossen. Hier kommt der Sketch zum Testen des Servo:

In Zeile 23 rechnen wir den Analogwert mit dem Wertebereich 0 bis 1024 um in einen Winkel, der im Bereich 0 bis 180 liegt. Das funktioniert einfach nach dem Dreisatz-Prinzip. Wenn du alles richtig angeschlossen hast, dann kannst du mit dem Poti die Achse des Servo verstellen. Die Bewegung folgt genau deinen Drehbewegungen mit dem Knopf oder dem Schraubendreher. Prima, damit haben wir alles beisammen und können das Thermometer aufbauen.

An neuer Hardware ist dazu fast nichts mehr nötig. Nur eine Skala und einen Zeiger für die Anzeige brauchen wir natürlich noch.

Dazu kannst du einfach ein bißchen Karton nehmen. Du schneidest ein großes Rechteck aus und einen schmalen Streifen, dessen Länge in Etwa der Höhe des Rechtecks entspricht. Diesen kannst du mit der Schere noch etwas ansptitzen und mit etwas Klebestreifen auf das Kunststoff-Drehkreuz kleben, das mit dem Servo mitgeliedert wurde. Dies lässt sich dann mit einer kleinen Schraube auf der Achse fixieren.

Skala_und_Zeiger
Zeiger und Skalenhintergrund aus einer Pappschachtel

Um die Skala zu befestigen, schneidest du in der Mitte der langen Seite eine bogenförmiges kleines Stück heraus, so dass es sich auf dias Gehäuse des Servo hinter der Achse aufstecken lässt. bei Bedarf befestige die Skala mit etwas Klebestreifen von hinten.

Jetzt müssen wir eine Skala einzeichnen. Dabei hilft uns das LCD-Display und der Test-Sketch:

  1. Stelle das Poti so ein, dass die LCD-Anzeige 90 Grad zeigt. Der Zeiger sollte nun senkrecht nach oben zeigen in der Mitte der Skala.
  2. Stelle das Pori auf 0 und markiere die Zeigerstellung mit einem Filzschreiber durch einen Punkt
  3. Wiederhole die Markierung alle 20 Grad, also stelle das Poti nacheinander auf 20, 40, 60.. usw und markiere jeweis die Zeigerstellung

Du solltest nun 10 Punkte auf der Skala haben, die genau einen Halbkreis markieren. Und jetzt ist der nächste Schritt schnell gemacht. Aus der letzten Lektion weißt du noch, wie Temperatur und Luftfeuchtigkeit mit dem DHT11 ausgelesen werden. Alles, was wir tun müssen ist, die Temperatur in einen Winkel umzurechnen und den Zeiger der Anzeige auf diesen Winkel zu steuern. Wenn du willst, kannst du noch die Temperaturen in der Skala eintragen.

 

Das Thermometer ist fertig

Celsius_Skala
So könnte deine Temperaturskala aussehen

Doch wie rechnet man den Temperaturbereich für die Anzeige aus?  Das geht ganz ähnlich, wie im vorigen Sketch bei den Poti-Einstellungen.

Hier kommt erstmal der komplette Sketch, danach gehen wir alles was neu ist im Einzelnen durch:

 

Ein neuer Datentyp

Wenig überraschend für dich legen wir erstmal die Objekte für die Anteuerung von Servo, DHT11 und LCD-Display an und definieren die Pinbelegung und andere Parameter. (Zeilen 5-16). Was dann kommt kennst du schon vom letzten Mal. In Zeile 38 wird der Servo dem Pin zugeordnet.

Die erste Neuigkeit taucht in Zeile 76 auf: float ist ein Variablentyp, den wir bisher noch nicht hatten.

Während int für ganze Zahlen vorgesehen ist, kannst du in einer float-Variablen Zahlen mit beliebig vielen Nachkommastellen speichern. Dieser Datentyp ist besser geeignet um Messwerte aller Art aufzunehmen, weil diese ja meistens reelle Zahlen sind, also jeden beliebigen Zwischenwert zwischen zwei ganzzahligen Werten annehmen können.

Der Grund für die Bezeichnung float ist, dass man die Methode, mit der im Speicher diese reelle Zahlen dargestellt werden, als Fließkomma-Darstellung bezeichnet oder auf englisch floating point. In den Zeilen 90 bis 95 rechnen wir die Temperatur um in einen Winkel zwischen 0 und 180 Grad.

Mit den Unter- und Obergrenzen kannst du selbst etwas experimentieren. Wenn du zum Beispiel nach dem Tipp in der letzten Lektion einen Fön verwendest, um die Temperaturmessung zu testen, dann kannst du die Obergrenze auch auch 50 Grad oder höher setzen.

Wie funktioniert diese Umrechnung? Es ist wieder eine Version der linearen Umrechnung, wie wir sie schon beim Beispiel mit dem Poti hatten.

Setzt  du in Zeile 93 für Temp  den Wert von Untergrenze  ein, dann ist das Ergebnis für Servo_Winkel  gerade 180. Umgekehrt ergibt sich bei  Temp=Obergrenze  für Servo_Winkel  der Wert 0.

Die Zwischenwerte von Temp werden dann einfach gleichmäßig auf den Bereich von 0 bis 180 verteilt. Du kannst einige Werte einsetzen und es ausprobieren, dann wirst du schnell verstehen, wie der Hase läuft. So etwas nennt man auch lineare Abbildung und es kommt häufig vor bei der Konstruktion von Messgeräten.

Übrigens: Je nachdem, in welcher Richtung du den Servo einbaust, kann es sein, dass die Drehrichtung bei dir umgekehrt ist wie in unserem Beispiel.

In diesem Fall musst du in Zeile 93 den Ausdruck  1-(Temp-Untergrenze)/(Obergrenze-Untergrenze)  ersetzen durch (Temp-Untergrenze)/(Obergrenze-Untergrenze), also das 1-  löschen. Dadurch läuft der Ausdruck von 0 nach 1 anstatt von 1 nach 0, der Zeiger bewegt sich dann also gerade spiegelbildlich.

Die nächsten beiden Zeilen dienen dazu, Ausreißer aus unserem Wertebereich zu eliminieren. Denn die Temperatur kann ja auch außerhalb des Intervalls Untergrenze  bis Obergrenze  liegen. Dann würde unsere Formel Werte kleiner 0 oder größer als 180 Grad liefern, was wir mit den beiden If-Abfragen verhindern.

Schließlich wird der Winkelwert in Zeile 96 an den Servo übertragen. Das war’s schon.

Das Konzept dieser Analoganzeige kannst du für beliebige andere Messungen benutzen, du könntest ein Spannungs- oder Widerstandsmessgerät aufbauen, oder mit dem LDR aus Lektion 4 einen Belichtungsmesser. Da sind wie immer der Phantasie keine Grenzen gesetzt.

Viel Spaß beim Experimentieren und bis zum nächsten Mal in unserem Arduino Onlinekurs!

 

Gesamtaufbau
Der Aufbau mit Digital- und Analoganzeige in der Übersicht

 

Eine Mini-Wetterstation mit Analoganzeige Teil 2 von 2
Markiert in:            

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.