Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Sensormodule und Visuino - Kapitel 3

In diesem Kapitel werden angesprochen

  • Auslesen einer Sensor-Adresse bei 1-Wire Betrieb
  • DS18B20-Modul (Temperatur, 1-Wire Bus)
  • DHT11-Modul (Temperatur, Feuchtigkeit)
  • LM34 und TMP36 Sensor (Temperatur) mit Steckbrettaufbau

Etwas Theorie vorweg

 

Ein 1-Wire Bus beschreibt eine serielle bidirektionale Schnittstelle (entwickelt von der Fa. Dallas Semiconductor Corp. -> Analog Devices -> Maxim), die mit nur einem Draht, mit einer Datenader (DQ), auskommt, die als Stromversorgung, aber auch als Sende- und Empfangsleitung genutzt wird. Das gilt allerdings nur für 1-Wire Objekte, die über eine eigene Stromversorgung verfügen. Hinzu kommt noch eine Masse-Verbindung, deshalb ist der Begriff 1-Wire etwas irreführend.

 

Das in den folgenden Übungen benutzte DS18B20-Modul (s. Abb. 1) verfügt über keine eigene Stromversorgung. Der Sensor DS18B20 wird über zwei Leitungen (VCC und GND) mit Strom versorgt. Die dritte Leitung (1-Wire) dient als Datenleitung. Über einen Pull-up Widerstand zwischen Datenleitung und VCC  (hier: 4k7 bei 5V Betriebsspannung) wird die Datenleitung auf HIGH gezogen und so die Störanfälligkeit verringert. Als Richtwert gilt, dass mindestens 1mA durch den Pull-up Widerstand fließen soll. Die Datenübertragung erfolgt asynchron (ohne Übertragung eines Taktsignals).

 

Jeder 1-Wire Sensor besitzt eine einzigartige 64-Bit ROM Adresse über die er über den Datenbus angesprochen werden kann. In Übung 1 wird gezeigt, wie sich die Adresse eines 1-Wire-Sensors (hier: eines DS18B20) auslesen und im Terminalfenster darstellen lässt.

 

 

Übung 1 - Auslesen einer 1-Wire-Adresse

 

1 - Pflichtenheft oder Was soll die Schaltung können?

  • Die Adresse eines DS18B20 Sensors des gleichnamigen Moduls wird ausgelesen und im Terminalfenster angezeigt.

 

2 - Material

  • Arduino- oder Arduino kompatibles Board (Ard-Board)
  • Steckbrett und Steckdraht (Ma-Ma)
  • DS18B20 Modul
  • Arduino IDE und Visuino auf dem Rechner bereits installiert

 

3 - Anschlussbelegung - DS18B20-Modul -> Ard-Board

  • G -> GND
  • R  -> 3,3V ... 5V -> +5V wg. des Vorwiderstands von 4k7 Ohm
  • Y -> D2

 

 

 

 

Abb. 1

Auf dem DS18B20-Modul ist eine LED und ein 4k7 Pull-up Vorwiderstand für das Bussignal bereits vorhanden. Die LED leuchtet bei Datenabruf kurz auf.

Schaltungsaufbau

 

 

 

 

Abb. 2

Schaltungsaufbau DS18B20 Modul und Ard-Board. Der gelbe Steckdraht ist mit D2 auf dem Ard-Board verbunden; die Spannungsversorgung erfolgt über die Steckdrähte grün (+5V) und blau (GND).

4 - Blockaufbau im Programm Visuino

 

Schritt 1 - Ard-Board festlegen

Starte das Programm Visuino und wähle in der Kopfzeile des Arduino-Blocks über das Werkzeug-Icon ganz rechts das eingesetzte Ard-Board aus.

 

Schritt 2 - Objekte auswählen

Gib in Filtersuche "ds18b" ein, wähle das Objekt "MAXIM 1 Wire Thermometer" (s. Abb. 3) und ziehe es in die Arbeitsfläche.

 

 

 

 

 

 

 

Abb. 3 - Suchfenster des Objekt-Inspektors

Schritt 3 - Blöcke verbinden

Verbinde in der Arbeitsfläche die entsprechenden Punkte des Arduino- mit dem Thermometer1-Block (s. Abb. 4):

  • Thermometer1 OneWire -> Digital Digital[2]
  • Thermometer1 Address -> Serial Serial[0]
  • Speicher das Programm ab.

 

Schritt 4 - Display Elemente und Eigenschaften des DS18B20-Moduls festlegen

  • Keine Veränderungen nötig.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Abb. 4 - Visuino Blockschaltung

Schritt 5 - Kompilieren und Hochladen des Programmcodes

 

  • Öffne unten rechts durch Anklicken des roten Buttons das Arbeitsmenü, klicke den Reiter "Build" und anschließend den Button "Compile/Build and Upload" an. Wenn kein Fehler aufgetreten ist, wird das Programm nach kurzer Zeit in den Controller geladen sein und eine Adresse im Terminalfenster der Arduino IDE ausgegeben (s. Abb. 5). Viel Spaß beim Experimentieren!

Terminalausgabe in der Arduino IDE

 

Abb. 5 - Ausgabe der 64-Bit ROM Adresse (8 Byte hexadezimal codiert) eines 1-Wire Sensors (DS18B20) im Terminalfenster der Arduino IDE.

Übung 2 - Temperatur messen mit einem DS18B20 Modul (1-Wire)

 

1 - Pflichtenheft oder Was soll die Schaltung können?

  • Mit einem DS18B20 Modul wird die Temperatur ermittelt und auf einem 4-zeiligen LCD I2C Display ausgegeben.

 

2 - Material

  • wie in Übung 1 plus 4-zeiliges LCD I2C Display

 

3 - Anschlussbelegung - DS18B20-Modul -> Ard-Board

  • wie in Übung 1

     Anschlussbelegung - LCD I2C Display -> Ard-Board

  • GND -> GND
  • VCC -> +5V
  • SDA -> SDA
  • SCL -> SCL

4 - Blockaufbau im Programm Visuino

 

Schritt 1 - Ard-Board festlegen

Starte das Programm Visuino und wähle in der Kopfzeile des Arduino-Blocks über das Werkzeug-Icon ganz rechts das eingesetzte Ard-Board aus. Bei mir, wie gehabt, ein Arduino UNO WiFi Rev2.

 

Schritt 2 - Objekte auswählen

  • Gib in Filtersuche "LCD" ein, wähle das Objekt "LCD I2C" (s. Abb. 3) und ziehe es in die Arbeitsfläche.
  • Gib in Filtersuche "ds18" ein, wähle das Objekt "Maxim 1-Wire Thermometer" und ziehe es in die Arbeitsfläche (s. Abb. 3).

Schritt 3 - Blöcke verbinden

Verbinde in der Arbeitsfläche die entsprechenden Punkte des Ard- mit dem LCD1- und dem Thermometer1-Block (s. Abb. 5):

  • Thermometer1 OneWire -> Digital Digital[2]  Ard-Block
  • Thermometer1 Out-> In TextField2 LiquidCrystalDisplay1
  • LCD1 Out -> In Serial[0](9600)  Ard-Block
  • Speicher das Programm ab.

Abb. 5 - Blockaufbau mit einem DS18B20 Modul und einem 4-zeiligen LCD I2C Display

Elemente eintragen im LiquidChristalDisplay1

  • Öffne mit einem Doppelklick im Block LCD1 das Fenster Elements.
  • Mit einem Doppelklick auf TextField im rechten Fenster kopiere TextField1 ins rechte Fenster. Wiederhole diesen Vorgang noch zweimal.
  • Verfahre genauso mit CustomCharacterField (1x) und DefineCustomCharacter (1x) (s. Abb. 6).

 

 

 

 

 

 

 

 

 

 

 

 

Abb. 6 - Eintragungen im Fenster Elements.

  • Öffne mit einem Klick im Block LCD1 das Fenster Eigenschaften und dort Elements und DefineCustomCharacter1. Klicke rechts in das Feld Pattern und öffne den Pixel-Editor (s. Abb. 7).

 

 

 

 

Abb. 7 - Pixel Editor

Das Sonderzeichen "Grad" kann hier definiert werden, indem man den Cursor an die Stelle führt, wo ein Pixel gesetzt werden soll und anschließend die Leertaste drückt.

Beendet wird die Sitzung mit OK-

Schritt 4 - Eigenschaften der Module LCD und DS18B20 festlegen

  • Im Fenster Eigenschaften des DS18B20-Moduls lassen sich folgende Einstellungen vornehmen (s. Abb. 8)..

 

 

 

 

 

Abb. 8 - Fenster Eigenschaften des DS18B20 Moduls

Es lassen sich sowohl Grenzwerttemperaturen (Alarm Low, Alarm High) als auch die Angabe in Fahrenheit oder Grad Celsius festlegen. Die maximale Auflösung des ADC beträgt 12 Bit (Voreinstellung), sie lässt sich ebenfalls verändern.

  • Im Fenster Eigenschaften des LCD1-Moduls lassen sich Einstellungen für alle eingetragenen Elemente vornehmen (s. Abb. 9). Versuche selbst eine Lösung zu finden für eine Darstellung auf dem LCD, wie sie Abb. 10 zeigt.

 

 

 

 

 

 

 

 

 

 

 

 

Abb. 9 - Fenster Eigenschaften für den LCD1 Block

Hier erscheinen alle eingetragenen Elemente. Ein Klick auf das blaue Quadrat öffnet das Eigenschaftsfenster des Elements.

 

 

 

Abb. 10 - Eine mögliche Darstellung der Temperatur auf einem LCD. Das Sonderzeichen "Grad" oder "°" erscheint vor dem C.

Übung 3 - Temperatur messen mit einem DHT11-Modul

 

1 - Pflichtenheft oder Was soll die Schaltung können?

  • Mit einem DHT11-Modul wird die Temperatur ermittelt und auf einem 4-zeiligen LCD I2C Display angezeigt. Zusätzlich kann in einer weiteren Übung auch die Messung der Feuchtigkeit hinzugenommen werden (wird hier nicht gezeigt).

 

2 - Material

  • Arduino- oder Arduino kompatibles Board (Ard-Board)
  • Steckbrett und Steckdraht (Ma-Ma)
  • DHT11-Modul
  • Arduino IDE und Visuino auf dem Rechner bereits installiert

 

3 - Anschlussbelegung - DHT11-Modul (s. Abb. 11)  -> Ard-Board

  • GND -> GND
  • +5V -> 5V
  • Data -> D2

     Anschlussbelegung - LCD I2C Display -> Ard-Board

  • GND -> GND
  • VCC -> +5V
  • SDA -> SDA
  • SCL -> SCL

 

 

 

 

 

 

 

 

Abb. 11 - Anschlussbelegung eines DHT11 Moduls

4 - Blockaufbau im Programm Visuino

 

Schritt 1 - Ard-Board festlegen

Starte das Programm Visuino und wähle in der Kopfzeile des Arduino-Blocks über das Werkzeug-Icon ganz rechts das eingesetzte Ard-Board aus. Bei mir, wie gehabt, ein Arduino UNO WiFi Rev2.

 

Schritt 2 - Objekte auswählen

  • Gib in Filtersuche "LCD" ein, wähle das Objekt "LCD I2C" (s. Abb. 3) und ziehe es in die Arbeitsfläche.
  • Gib in Filtersuche "dht11" ein, wähle das Objekt "Humidity and Thermometer ..." und ziehe es in die Arbeitsfläche.

Schritt 3 - Blöcke verbinden

Verbinde in der Arbeitsfläche die entsprechenden Punkte des Ard- mit dem LCD1- und dem HumidityThermometer1-Block (s. Abb. 12):

  • HumidityThermometer1 Temperature -> In TextField1  LCD1-Block
  • HumidityThermometer1 Humidity(%) -> In TextField2  LCD1-Block
  • HumidityThermometer1 Sensor -> Digital Digital[2]  Ard-Block
  • LCD1 Out -> In I2C I2C-Channels  Ard-Block
  • Speicher das Programm ab.

Abb. 12 - Blockverbindung von LCD I2C mit DHT11 Modul und Ard-Board

Schritt 4 - Eigenschaften der Module LCD und DHT11 festlegen

  • Im Fenster Eigenschaften des DHT11-Moduls kann von °C (Voreinstellung) auf Fahrenheit umgeschaltet werden..
  • Ähnlich wie in Schritt 4 der Übung 2 lassen sich die Eigenschaften der Elemente im LCD Block verändern. Ggf. sollte dort noch einmal nachgeschaut werden.
  • Die LCD-Ausgabe kann wie in Abb. 10 gestaltet sein oder - als kleine Übung - wie in Abb. 13, mit Angabe von Temperatur und rel. Feuchte(%).

 

Ausgabe der Messwerte auf einem LCD

 

Abb. 13 - Temperatur und relative Feuchte in % gemessen mit einem DHT11; Ausgabe auf einem 4-zeiligen LCD.

Übung 4 und 5 - Temperatur messen mit einem LM34 und TMP36 GZ

 

Etwas Theorie vorweg

Bei der LM34/35-Serie handelt es sich um Präzisions-Temperatursensoren mit integrierten Schaltkreisen, deren Ausgangsspannung linear proportional zur Fahrenheit-Temperatur ist.

 

Eigenschaften (Auszug aus dem Datenblatt des LM34)

Linearer Skalierungsfaktor: +10,0 mV/°F

Genauigkeit         : 1,0 °F (bei +23 °C)

Messbereich       : -50°F ... +300°F

Stromaufnahme   : < 90 μA

 

Eigenschaften (Auszug aus dem Datenblatt des TMP36)

Linearer Skalierungsfaktor: +10,0 mV/°C

Genauigkeit         : +/-1,0 °C (bei +25 °C)

Messbereich       : -40°C ... +125°C

Stromaufnahme   : < 50 μA

 

Bevor die Temperatur in Celsius angeben werden kann, muss zunächst die analoge Ausgangsspannung UF bestimmt werden. Es gilt:

  • UF verhält sich zu 5V wie URohwert zu 1024 (wg. 10-Bit ADC)

Die Ausgangsspannung UF errechnet sich bei einer Referenzspannung von 5V dann über die Gleichung:

  • UF = URohwert * 5/1024 V  oder  UF = URohwert * 488.28125 mV (1)

 

  • Bei meinen Versuchen betrug die Referenzspannung 4,77V, deshalb ändert sich der Faktor in (1) bei meinen Berechnungen auf 465,82031.

Der Wert von UF in der Einheit mV gibt gleichzeitig die Temperatur in °F bei einem LM34 an, wenn man ihn mit 100 multipliziert.

Mithilfe der Gleichung

  • UC = (UF - 32) * 0,556  (2)

lässt sich der Temperaturwert UF auf einen Wert in °C umrechnen.

 

 

 

Mit einer einfachen Analogmessung am Data-Pin eines spannungsversorgten LM34 lässt sich sofort die Temperatur in °F bzw. bei einem TMP36 in °C ablesen. Angezeigt sind im Bild links etwa 0,72V oder 720 mV bei einem LM34.

10mV entsprechen 1°F (s. Datenblatt);

720 mV entsprechen 72 °F oder 22 °C.

1 - Pflichtenheft oder Was soll die Schaltung können?

  • Mit einem LM34 werden die Rohdaten aufgenommen, dann in Grad Fahrenheit und schließlich in Grad Ceslsius umgerechnet und die jeweiligen Ergebnisse auf einem 4-zeiligen LCD I2C Display angezeigt.
  • Der LM34 und der TMP36 sind pinkompatibel. Tausche sie aus. Die Anpassung der Blöcke mit ihren Elementen und Eigenschaften (wird hier nicht mehr gezeigt) müssen selbst durchgeführt werden.

 

2 - Material

  • siehe Übung 3; statt DHT11 wird zuerst ein LM34 genommen. Wenn das Ergebnis aus dem Pflichtenheft erreicht wurde, kann der LM34 gegen einen TMP36 ausgetauscht und die entsprechenden Blöcke mit ihren Eigenschaften unter Visuino angepasst werden.

 

3 - Anschlussbelegung - LM34 bzw. TMP36 (s. Abb. 14)  -> Ard-Board

  • GND -> GND
  • +5V -> 5V
  • Data -> A0

     Anschlussbelegung - LCD I2C Display -> Ard-Board

  • siehe Übung 3

 

 

 

 

 

 

 

Abb. 14 - Pinbelegung LM34 DZ. Der Sensor ist pinkompatibel mit einem TMP36.

4 - Blockaufbau im Programm Visuino

 

Schritt 1 - Ard-Board festlegen

Starte das Programm Visuino und wähle in der Kopfzeile des Arduino-Blocks über das Werkzeug-Icon ganz rechts das eingesetzte Ard-Board aus. Bei mir, wie gehabt, ein Arduino UNO WiFi Rev2.

 

Schritt 2 - Objekte auswählen

  • Gib in Filtersuche "LCD" ein, wähle das Objekt "LCD I2C" (s. Abb. 3) und ziehe es in die Arbeitsfläche.

Schritt 3 - Blöcke verbinden

Verbinde in der Arbeitsfläche die entsprechenden Punkte des Ard- mit dem LCD1-Block (s. Abb. 15). Füge vorher im LCD1-Block die Elemente TextField1 und AnalogField1 ein:

  • LCD1 Out -> In I2C I2C-Channels  Ard-Block
  • Speicher das Programm ab.

Abb. 15 - Visuino Blockaufbau für die Rohdatenausgabe eines LM34 bzw. TMP36 GZ auf einem LCD I2C Display

Schritt 4 - Eigenschaften der Elemente im Fenster Eigenschaften festlegen

  • TextField1 Einstellungen

 

 

 

 

Abb. 16a - Visuino LCD I2C Properties Elements TextField1 für Rohdatenausgabe LM34

  • AnalogField1.Einstellungen

 

 

 

 

 

 

Abb. 16b - Visuino LCD I2C Properties Elements AnalogField1 für Rohdatenausgabe LM34

Ausgabe der Rohdaten auf einem LCD I2C

 

Abb. 17 - LCD I2C Ausgabe der Rohdaten eines LM34. Angezeigt wird eine Zahl ; sie entspricht einem Spannungswert zwischen 0V und 5V, ermittelt über einen 10-Bit ADC.

Rohdaten in °F umrechnen

 

Dazu muss die Blockschaltung aus Abb. 15 um einen Baustein erweitert werden, der den  Rohwert mit einem festen Zahlenwert 488.28125 (s. Formel (1)) vor der Ausgabe auf dem LCD  multipliziert.

  • Gib in das Suchfenster des Objekt-Inspektors "multiply" ein, wähle aus dem Fenster "analog" das Objekt "Multiply Analog By Value" (s. Abb. 18) und ziehe es in die Arbeitsfläche.

 

 

 

 

 

Abb. 18

Suchfenster im Objekt-Inspektor mit dem Fenster "Analog" und dem Objekt "Multiply Analog By Value".

  • Ergänze den Blockaufbau (s. Abb. 15) wie in Abb. 19 gezeigt und gib im Fenster Eigenschaften des Blocks MultiplyByValue im Feld Value den Wert 488.28125 ein. Speichere das Programm ab.

Abb. 19 - Der Block MultiplyByValue1 wird zusätzlich eingefügt.

Datenausgabe auf einem LCD I2C

 

 

 

Abb. 20 - LCD I2C Ausgabe der Rohdaten eines LM34 und die Temperatur in Grad Fahrenheit.

  • Zur Darstellung der Temperatur in °C wird Formel (2) benutzt. Dazu muss der Block AddValue1 in die Blockstruktur eingefügt (s. Abb. 22) und die Eigenschaft entsprechend Formel (2) eingetragen werden.
  • Es müssen weitere Elemente in den Block LCD1 eingetragen und im Fenster  Eigenschaften des Blocks LCD1 entsprechend angepasst werden (s. Abb. 22).
  • Nach Abspeichern der Blockstruktur und Starten des Programms wird auf dem LCD I2C angezeigt (s. Abb. 21):

 

 

Abb. 21 - Aus den Rohdaten wird die Temperatur in °C errechnet und auf einem 4-zeiligen LCD I2C dargestellt.

Abb. 22 - Blockstruktur zur Berechnung der Temperatur in °C mit einem LM34 bzw. TMP 36GZ, dargestellt auf einem LCD I2C 4-zeilig.

Anpassung des Visuino Programms für einen TMP36 Sensor

Nachdem das Pflichtenheft für einen LM34 erfüllt wurde, wird der LM34 gegen einen pinkompatiblen TMP36 getauscht. Die Anpassung der Blöcke und Elemente mit ihren Eigenschaften (s. Abb. 23 - 25) erfolgt nach den gleichen Methoden, wie in den vorherigen Übungen bereits gezeigt. Das Ergebnis mit einem TMP36 könnte auf einem LCD I2C dann so aussehen (s. Abb. 26):

 

 

 

 

 

 

Abb. 23

Eintragungen im Fenster Elements von LCD1

 

 

 

 

 

Abb. 24

Eintragungen in Properties Elements TextField1 und TextField2 von LCD1

 

 

 

 

 

 

 

 

Abb. 25

Eintragungen in Properties Elements AnalogField1 und AnalogField2 von LCD1.

 

Abb. 26

Mögliche Darstellung für einen TMP36 Sensor auf einem LCD I2C.

240420

Druckversion | Sitemap
© Reinhard Rahner - Gettorf