• Keine Ergebnisse gefunden

Anschließen des Sensors

Im Dokument ARDUINO Befehlsübersicht (Seite 142-145)

Ist das geschehen, muss nur noch der Sensor (oder mehrere) korrekt an den ARDUINO angeschlossen werden. Hier ist etwas zu beachten, sonst geht es nicht: Es muß ein sogenannter „PullUp-Widerstand“ vom Data-Pin des Sensors nach +UB geschaltet werden. Das ist schon alles. Das sieht dann so aus, siehe meine künstlerische Skizze.

Möchte man mehrere dieser Sensoren gleichzeitig nutzen, so sind diese einfach parallel zu schalten. Einen weiteren Widerstand 4,7k braucht man dann nicht! Einfach die weiteren Sensoren parallel zu dem ersten anschließen.

Es gibt noch eine andere Art, diesen Sensor anzuschließen, sie nennt sich „parasite power“. Hier wird die Betriebsspannung aus der Datenleitung entnommen. Der PIN 3 des Sensors bleibt unbeschaltet. Daher stammt auch die Bezeichnung 1Wire, da neben Ground, nur eine Leitung für Spannungsversorgung und Daten benutzt wird. Alles weitere dazu kann man im Datenblatt nachlesen.

Die Programmierung ist dabei aufwendiger und problematischer, weil die Datenleitung bis zu 750ms mit Spannung versorgt werden muss.

Bessere Betriebssicherheit gibt es, wenn die Betriebsspannung mitgeführt wird.

HINWEIS: Es gibt neben den Sensoren DS18x20 noch welche mit der Bezeichnung DS18x20-PAR. Diese werden ausschließlich mit parasitePower betrieben, der Anschluß VDD ist nicht vorhanden! Zudem Temperaturfestigkeit nur bis +100°C
(Quelle: https://datasheets.maximintegrated.com/en/ds/DS18S20-PAR.pdf und https://datasheets.maximintegrated.com/en/ds/DS18B20-https://datasheets.maximintegrated.com/en/ds/DS18S20-PAR.pdf)

Hier wird zum Anschluss nur die erstere Variante betrachtet - die Programmierung ist dabei auch einfacher.

Programmierung

Hierzu sei der Beispiel-Sketch „Simple“ aus der Library DallasTemperature zum ersten Testen empfohlen.

Auf diesen beziehe ich mich hier größtenteils.

Im eigenen Sketch müssen natürlich die beiden Libraries eingebunden werden.

#include <OneWire.h>

#include <DallasTemperature.h>

Als nächstes wird dem Compiler mitgeteilt, an welchem digitalen Pin der Sensor angeschlossen ist:

#define ONE_WIRE_BUS 2 // Sensor DS18B20 an digitalem Pin 2

Nun werden die Libraries initialisiert mit den folgenden beiden Anweisungen:

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

Im setup() muss die Library gestartet werden.

sensors.begin();

So, das war eigentlich alles, damit das Programm vorbereitet ist zum erfolgreichen Abfragen der Temperaturen. Wann dieses geschieht, liegt in den Vorlieben des Programmierers. Mir persönlich reicht es, wenn maximal 1mal pro Minute die Temperatur abgefragt wird.

Weiterhin ist zu bedenken, das die Sensoren relativ lange brauchen, um die Temperatur abzufragen und zu verarbeiten: bis zu 750ms. Das ist in ARDUINO-Programmen eine halbe Ewigkeit! Wenn man zeitkritische Dinge im Programm laufen hat, z.B. Tasterabfragen, sind diese dann per Interrupt zu lösen (siehe hier).

Sonst erfolgt unter Umständen keine Reaktion auf den Tastendruck. Auch bei anderen Programmfunktionen ist diese lange Zeit eventuell ein Problem und man muss sich genau überlegen, wie man das Problem löst.

An geeigneter Stelle (oder auch in einer separaten Funktion) wird nun die Abfrage mit dem folgenden Befehl vorbereitet:

sensors.requestTemperatures(); // Temperatur holen

143 Der folgende Befehl übergibt den Wert des Sensors an eine float-Variable:

float temp = sensors.getTempCByIndex(0);

Die Zahl (0) bedeutet, dass der erste Sensor ausgelesen wird, wenn es mehrere sind. Will man den zweiten auslesen, kann man das mit (1) machen usw. Auch eine for-Schleife ist denkbar, bei vielen Sensoren.

Meine maximale Anzahl von Sensoren an einem Projekt waren bisher 2 Stück, da ist es am einfachsten, man macht es so:

float temp0 = sensors.getTempCByIndex(0);

float temp1 = sensors.getTempCByIndex(1);

Dann stehen die beiden Werte als Fliesskommazahl in den Variablen temp0 und temp1 zur weiteren Verarbeitung zur Verfügung. Man kann sie anzeigen, auf bestimmte Wert reagieren, zu hoch, zu tief…

MCP9700 (analoger Sensor)

Beispiel-Sketch verfügbar: temp_MCP9700.ino

Der MCP9700 ist ein analoger Sensor der Firma Microchip. Dieser liefert am Ausgang eine der Temperatur direkt proportionale Gleichspannung mit einer Auflösung von 10mV/°C. Bei 0°C beträgt die Ausgangsspannung 500mV, bei 20°C demzufolge 700mV, 30°C entsprechen 800mV, -20°C entsprechen 300mV usw. Diese Spannung muss also mit einem analogen Eingang des ARDUINO verarbeitet werden.

Die Eigenschaften des Sensors in Kurzform:

- Hoher Temperaturbereich -40°C bis +150°C

- Geringer Stromverbrauch

- Sehr günstig

- Simple Programmierung ohne Library

Nachteile:

- Jeder Sensor belegt einen analogen Eingang

- Genauigkeit nicht so gut mit +-4°C

- Anfällig gegen Schwankungen der Referenzspannung des ARDUINO (meist die +UB Betriebsspannung)

Anschließen des Sensors

Das Anschließen dieses Sensors ist besonders einfach. Einfach die Betriebsspannung 5V DC und GND anschließen. Der Ausgang wird nun an einen beliebigen Analogeingang gelegt. Das war es auch schon.

Programmierung

Zum Messen der Temperatur muss der Wert des AD-Wandlers (z.B. A0) in eine für den Menschen nützliche Form gebracht werden. Da der AD-Wandler lediglich einen Wert von 0…1024 entsprechend der anliegenden Spannung von 0…5V zurück gibt, ist etwas Mathematik nötig, um daraus eine Temperatur zu bekommen.

Diese Berechnung ist für den ARDUINO aber keine Schwierigkeit.

Wir definieren uns erst mal eine float-Variable, um den errechneten Wert der Temperatur dort zu speichern.

float temp = 0.0; // errechnete Temperatur

Im Programm bringen wir nun an geeigneter Stelle unseren Code unter, um den 10bit-Wert des AD-Wandlers in eine Temperatur umzuwandeln. Hier sollte auch wieder bedacht werden, wie oft man die Temperatur neu berechnet, es reicht sicher einmal pro Minute aus.

temp = (analogRead(A0) * 5.0 / 1024.0) - 0.5;

temp = temp / 0.01;

Allerdings geht diese Berechnung deutlich schneller als das Auslesen der 1wire-Sensoren.

Hinweis

Ein ähnlicher Sensor ist der LM35. Er hat auch eine Auflösung von 10mV/°C, liefert aber bei 25°C eine Ausgangsspannung von 250mV. Durch Anpassung der obigen Formel kann er genauso angewendet werden.

LM75 (I2C-Sensor)

Siehe hier im Kapitel für I2C

145

Luftfeuchte-Sensoren und deren

Im Dokument ARDUINO Befehlsübersicht (Seite 142-145)