Experimini am 24.1.2017
Internet of Things
Das “Internet der Dinge” (engl. “Internet of Things” oder “IoT”) beschreibt das Phänomen, dass immer mehr (Alltags-) Gegenstände mit dem Internet verbunden werden. Der “vernetzte Kühlschrank” ist ein klassisches Beispiel für ein solches Gerät. Allerdings gibt es weit mehr und oft unscheinbarere Dinge, die “smart” werden und miteinander komunizieren.
Ein wesentlicher Faktor für die rasante Entwicklung ist die Verfügbarkeit günstiger Mikrocontroller, Sensoren, Aktoren und Software. Damit kann jede/r eigene smarte Dinge entwickeln. Das sehen wir uns in diesem Experimini genauer an.
Arduino
Arduino ist eine aus Hardware und Software bestehende Microcontroller Plattform. Die Hardware ist in verschiedenen Bauformen oder Modellen erhältlich, “den Arduino” gibt es also eigentlich nicht. Alle Modelle verfügen über zahlreiche digitale und analoge Ein- und Ausgänge. Damit kann man Werte von Sensoren einlesen, auswerten und Geräte steuern. Hard- und Software sind Open Source, die Software ist kostenlos, die Hardware sehr kostengünstig. Rund um Arduino hat sich eine riesige Community entwickelt.
Eine Übersicht über die verschiedenen Arduino Modelle findet sich auf der Arduino Website.
Arduino Modelle
Wir verwenden in diesem Experimini den Arduino Nano.
Sensoren und Aktoren
Sensoren sind Geräte, die Umweltdaten in irgendeiner Form erfassen, z.B. Temperatur, Bewegung, Licht, Gewicht, Feuchtigkeit, pH-Wert, Geschwindigkeit, Position oder beliebige andere Werte.
Aktoren sind Geräte, mit denen sich die Umwelt beeinflussen lässt, beispielsweise Motoren, Pumpen, Lampen, LEDs, Heizungen, Kühler, Servos, Relais usw.
Es gibt eine unüberschaubare Vielzahl von Sensoren und Aktoren, die mit dem Arduino benutzt werden können.
Quellen für Material
Arduinos und Sensoren gibt es bei einer Reihe von Herstellern, bei den teureren oft mit ausführlichen Anleitungen, Datenblättern und Tutorials. Die günstigsten Preise gibt es bei den chinesischen Herstellern.
Breadboard und Kabel
Die Sensoren und Aktoren müssen mit dem Arduino verbunden werden. Oft sind auch weitere Elemente wie Widerstände, Transistoren, Kondensatoren usw. erforderlich. Zum Experimentieren sind so genannte Breadboards hilfreich, das sind Steckbretter, in die Kabel und Bauelemente gesteckt werden können. Die Löcher sind in reihenweise elektrisch miteinander verbunden.
Quellen für Wissen
Arduino
Die offizielle Arduino Website enthält alles, was man für den Anfang braucht, alle Infos zum Arduino, Getting Started Guides, Tutorials und die Arduino Entwicklungssoftware zum Download.
- Arduino Die offizielle Arduino Website
- Instructables ist eine Plattform für alle möglichen Anleitungen, nicht nur technische, es finden sich aber auch viele Arduino Projekte dort.
MySensors
MySensors ist ein Konzept und eine Bibliothek für Funknetzwerke. Es wird ergänzt von MyController, mit dem man die Sensorwerte ansehen und auswerten sowie Geräte steuern kann.
Programmierung
Damit der Arduino misst und steuert, was wir wollen, müssen wir ihn programmieren.
Dafür brauchen wir eine Software, die “Entwicklungsumgebung” oder “IDE” (Integrated Development Environment” und wir müssen den Arduino mit dem Computer verbinden. Der Arduino Nano und einige weitere Modelle besitzen dafür einen USB Anschluss. Beides muss zunächst installiert werden.
Installation der Arduino IDE unter Windows
Zum Schreiben, Compilieren und Hochladen der Sketches muss die Entwicklungsumgebung (“IDE”) installiert werden. Die Software kann auf der Arduino Website heruntergeladen werden. Es gibt einen Installer (EXE) und eine ZIP Version.
Die Installation geschieht wie bei Windows üblich durch Anklicken des heruntergeladenen Installers.
Installation des USB Treibers CH340
Die Arduino Nachbauten aus China sind mit einem anderen USB Chip ausgestattet. Für diesen muss ein spezieller Treiber heruntergeladen und installiert werden.
Der Treiber wird vom Hersteller des Chips, Winchiphead / Nanjing QinHeng Electronics Co., Ltd, auf seiner Webseite angeboten. Die Seite ist auf chinesisch. Eine Erklärung des Vorgangs auf englisch und den Treiber zum Download bietet die Arduino Development Website.
Konfiguration der IDE
Die Entwicklungssoftware ist für verschiedene Microcontroller ausgelegt. Für die Programmierung muss der Controller und der USB Port eingestellt werden. Der Controller wird unter “Board” eingestellt. Den USB Port ermittelt man am einfachsten, indem man einmal vor dem Anschließen des Arduinos an den Rechner und einmal danach die Liste der Ports aufruft und feststellt, welcher Port durch das Anschließen hinzugekommen ist.
Aufbau eines Programms (“Sketch”)
Ein Arduino Programm heißt “Sketch”. Es ist grundsätzlich in zwei Teile aufgeteilt. Im setup() werden Einstellungen vorgenommen, die nur einmal beim Starten (oder “booten”) des Arduinos ausgeführt werden. Die Befehle im zweiten Teil, der loop(), werden immer wieder ausgeführt, solange der Arduino läuft.
Die IDE enthält unter dem Menüpunkt Datei -> Beispiele zahlreiche Beispiele für Programme.
Minimales Programm
Ein minimales Arduino Programm sieht so aus:
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Die Zeilen, die mit zwei Schrägstrichen beginnen, sind Kommentare. Sie werden bei der Programmausführung ignoriert. Die Einrückungen dienen der Übersichtlichkeit und haben keinen Einfluss auf die Funktion des Programms.
Das Minimalbeispiel macht gar nichts.
Sensordaten erfassen und LED blinken
Wir können einen Sensor einlesen, indem wir einen der I/O Pins als Eingang schalten, hier A0, und dann den Wert einlesen und eine LED blinken lassen. Der Arduino hat parallel zu Pin 13 bereits eine LED an Bord.
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
}
void loop() {
sensorValue = analogRead(sensorPin); // read the value from the sensor
digitalWrite(ledPin, HIGH); // turn the ledPin on
delay(sensorValue); // stop the program for <sensorValue> milliseconds
digitalWrite(ledPin, LOW); // turn the ledPin off
delay(sensorValue); // stop the program for for <sensorValue> milliseconds
}
Compilieren des Sketches
Der Arduino versteht die Programmbefehle nicht direkt, sie müssen erst übersetzt werden. Das nennt man “Compilieren”.
Dafür klickt man auf das Symbol mit dem Häkchen in der Symbolleiste der IDE oder wählt über das Menü Sketch -> Überprüfen/Kompilieren oder drückt Strg-R.
Wenn das Programm Fehler enthält, werden sie im unteren Teil des Fensters angezeigt. Nur ein fehlerfreier Sketch kann compiliert werden.
Hochladen des Sketches
Ist der Sketch compiliert, muss er auf den Arduino hochgeladen werden. Dafür muss der Arduino am Rechner angeschlossen sein. Zum Hochladen klickt man auf das Symbol mit dem Pfeil oder wählt über das Menü Sketch -> Hochladen oder drückt Strg-U.
Nach dem Hochladen startet das Programm auf dem Arduino sofort und wird ausgeführt, solange der Arduino mit Strom versorgt wird.
Bibliotheken
Um Sensoren oder Aktoren anzusteuern, muss oft ein bestimmtes Protokoll verwendet werden oder es gibt typische Aktionen, die damit ausgeführt werden können. In vielen Fällen gibt es für den Arduino so genannte Bibliotheken, die diese Funktionen bereitstellen. Sie müssen vor ihrer Verwendung installiert werden.
Beispiele: Schaltung
Wir bauen folgende Schaltung auf und schreiben drei kleine Sketches, um die LEDs anzusteuern und Sensorwerte einzulesen.
Beispiele: Sketches
Drei LEDs
Der Sketch lässt die drei LEDs nacheinander für je eine Sekunde aufleuchten.
Analogen Wert einlesen
Dieser Sketch liest analoge Werte vom Feuchtigkeitssensor ein und gibt sie über die serielle Schnittstelle aus.
Feuchtigkeitsampel
Die Feuchtigketsampel kombiniert beide Programme und zeigt über die rote, gelbe und grüne LED die Feuchtigkeit der Erde im Blumentopf an.
Sketch: Drei LEDs
int pinGreen = 2;
int pinYellow = 3;
int pinRed = 4;
void setup() {
pinMode(pinGreen, OUTPUT); // setze Pin als Ausgang
pinMode(pinYellow, OUTPUT);
pinMode(pinRed, OUTPUT);
}
void loop() {
digitalWrite(pinGreen, HIGH); // grüne LED einschalten
delay(1000); // 1000 ms warten
digitalWrite(pinGreen, LOW); // grüne LED ausschalten
delay(1000); // 1000 ms warten
digitalWrite(pinYellow, HIGH);
delay(1000);
digitalWrite(pinYellow, LOW);
delay(1000);
digitalWrite(pinRed, HIGH);
delay(1000);
digitalWrite(pinRed, LOW);
delay(1000);
}
Sketch: Analogen Wert einlesen
exp_read_analog.ino
int sensorValue = 0;
int pinSensor = A0;
void setup() {
Serial.begin(9600); // Geschwindigkeit der seriellen Verbindung
pinMode(pinSensor, INPUT);
}
void loop() {
sensorValue = analogRead(pinSensor); // analogen Wert vom Sensor einlesen
Serial.println(sensorValue); // Wert über serielle Verbindung ausgeben
delay(100);
}
Sketch: Feuchtigkeitsampel I
int sensorValue = 0;
int pinSensor = A0;
int pinGreen = 2;
int pinYellow = 3;
int pinRed = 4;
void setup() {
Serial.begin(9600); // Geschwindigkeit der seriellen Verbindung
pinMode(pinSensor, INPUT);
pinMode(pinGreen, OUTPUT); // setze Pin als Ausgang
pinMode(pinYellow, OUTPUT);
pinMode(pinRed, OUTPUT);
}
Sketch: Feuchtigkeitsampel II
void loop() {
sensorValue = analogRead(pinSensor); // analogen Wert vom Sensor einlesen
Serial.println(sensorValue); // Wert über serielle Verbindung ausgeben
delay(100);
if ( sensorValue > 800 ) {
digitalWrite(pinRed, HIGH); // rote LED einschalten
digitalWrite(pinYellow, LOW); // gelbe LED ausschalten
digitalWrite(pinGreen, LOW); // grüne LED ausschalten
}
else if ( sensorValue > 400 ) {
digitalWrite(pinRed, LOW); // rote LED ausschalten
digitalWrite(pinYellow, HIGH); // gelbe LED einschalten
digitalWrite(pinGreen, LOW); // grüne LED ausschalten
}
else {
digitalWrite(pinRed, LOW); // rote LED ausschalten
digitalWrite(pinYellow, LOW); // gelbe LED ausschalten
digitalWrite(pinGreen, HIGH); // grüne LED einschalten
}
}
Have Fun!
Viel Spaß bei euren eigenen Experimenten im Internet of Things!