Arduino: Universelles Wenn-Dann mit Sensor und Aktor
Nach unserem ausführlichen Arduino-Tutorial können wir Euch jetzt mal zeigen, wie Ihr das Ding auch wirklich praktisch nutzen könnt: Wenn ein Sensor etwas bestimmtes meldet, dann soll ein Aktor etwas Bestimmtes tun. Diese Grundaufgabe des Arduinos muss man nur einmal verstehen und schon sollten einfache, eigene Projekte möglich sein. Und das in nicht mal 10 Minuten!
Ein Parksensor
OK, ein wenig übertrieben, aber unser Beispiel ist so eine Art Minimal-Parksensor. Das Mini-Projekt: Wenn der Abstand zum Gerät kleiner als 5 cm ist, dann soll eine LED leuchten. Das ist wahnwitzig einfach und im Grunde auf alle Sensoren und Aktoren übertragbar. Und zwar mit Code, den Ihr Euch selbst aus Beispielen zusammenstellen könnt.
Der Schaltkreis
Wir arbeiten hier mit einem Arduino Mega 2560 von Elegoo, aber sowohl Uno als auch die meisten anderen Boards funktionieren genauso. Ihr benötigt einen Ultraschallsensor HC-SR04, wie er zum Beispiel in Elegoo-Sets enthalten ist, eine LED und vier Verbindungskabel männlich auf weiblich.
Der Aufbau: Der Sensor hat vier Anschlüsse. Die äußeren (VCC, GND) kommen an die entsprechenden Arduino-Pins, also 5V und GND. Hinzu kommen Echo und Trig: Der Echo-Anschluss kommt an Pin 11 und der Trig an Pin 12. Über Trig (Trigger) wird ein Signal gesendet, über Echo eines empfangen - und darüber wird der Abstand berechnet.
Jetzt steckt noch eine LED ein: Das längere Beinchen in Pin 13, das kürzere in GND - also wie immer.
Mit der Software Fritzing sieht das Projekt dann fertig so aus:
Die Software
Für den Umgang mit dem Sensor benötigt Ihr bei Elegoo-Arduinos die Bibliothek HC-SR04, die Elegoo im Download zu unserem Arduino-Komplett-Set mitliefert. Diese muss über das Sketch-Menü als ZIP-Datei installiert werden.
Andere Hersteller haben gegebenenfalls andere Bibliotheken für den HC-SR04-Sensor. In dem Fall sucht in den Materialien Eures Herstellers nach einer Anleitung für den Abstandssensor und ladet stattdessen dessen Code in die IDE. Die folgenden Anpassungen könnt Ihr dann zwar nicht 1:1, aber entsprechend übernehmen.
Schaut Euch mal folgenden Code an:
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
void setup() {
Serial.begin(9600); // Wird später gelöscht.
delay(1000);
}
void loop() {
a=sr04.Distance();
Serial.print(a); // Wird später gelöscht.
Serial.println("cm"); // Wird später gelöscht.
delay(1000);
}
Der Kniff: Für das Anschließen einzelner Komponenten findet Ihr bei den meisten (Set-)Anbietern eine Anleitung samt Beispiel-Code. Hier handelt es sich um den Code vom Elegoo-Beispiel. Zunächst wird die besagte Bibliothek über include eingebunden, anschließend werden die Pins definiert - TRIG_PIN und ECHO_PIN für die Anschlüsse 11 und 12. Dann wird sr04 mitgeteilt mit diesen Pins zu arbeiten. Es folgt eine Variable a, die letztlich den Wert speichern wird.
Die setup-Funktion ist obligatorisch, setzt die serielle Verbindung auf 9600 Baud und wartet dann 1000 Millisekunden. Es folgt eine Endlosschleife, in der a auf die von sr04 gemessene Distance gesetzt und anschließend über Serial.print(a) ausgegeben, gefolgt von einem cm. Wieder wird gewartet.
Solchen Code könnt Ihr einfach anpassen:
#include "SR04.h"
#define BLUE 13 // NEU: Pin für die LED
#define TRIG_PIN 12
#define ECHO_PIN 11
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
void setup() {
}
void loop() {
a=sr04.Distance();
if (a < 7) // NEU: Wenn-Dann-Anweisung >
{
digitalWrite(BLUE, HIGH);
}
else
{
digitalWrite(BLUE, LOW);
}
delay(1000);
}
Verschwunden sind die Definition der seriellen Verbindung und die beiden Serial.print-Anweisungen. Dafür sind neu hinzugekommen: Die Definition für eine blaue LED in Pin 13 und eine if-Abfrage: Wenn die Distanz a kleiner 7 ist, wird die LED via digitalWrite (BLUE, HIGH) eingeschaltet, wenn nicht, ausgeschaltet.
Ladet den Code nun auf den Arduino und testet selbst, ob Sensor, LED und Software tun, was sie sollen.
Universelles Wenn-Dann
Den Wenn-Teil für ein Projekt findet Ihr fast immer in den Beispielen für einzelne Bauteile/Sensoren. Das "Dann" im Beispiel ist meist die interne LED oder der serielle Monitor - das könnt Ihr entfernen. Euren Dann-Teil könnt Ihr dann einfach einfügen, indem Ihr schaut, in welchen Variablen die für Euch wichtigen Daten stecken (Temperatur, Abstand, Bewegung, etc.), einen Aktor (LED, Motor, Schalter, etc.) mit einem Pin verbindet und im Sketch definiert. Dann könnt Ihr zum Beispiel über eine simple if-Schleife bestimmen, was bei welchen Werten passieren soll.
Und das ganze Prozedere ist durchaus auch für Nicht-Tekkies machbar, da die Beispiel-Codes für einzelne Komponeten meist nur aus ein paar Zeilen bestehen, die man schnell nachvollziehen kann. Und ganz wichtig: Immer schön Code aus Beispielen und Tutorials nutzen und anpassen - in der Regel sind diese Codes zu trivial, um überhaupt unter eine Lizenz zu fallen, insofern ist das auch rechtlich normalerweise in Ordnung. Für privat sowieso.
Moini, habe dein tut mal nachgemacht und hab auch ein fehler entdeckt. Der operator wurde wahrscheinlich im html falsch angeben da steht… if (a < 7) // NEU: Wenn-Dann-Anweisung statt if (a < 7) // NEU: Wenn-Dann-Anweisung
ansonsten echt super danke
Cool, Danke für den Hinweis! Lustigerweise sehen Deine beiden Zeilen hier im Backend völlig identisch aus, da hat Dich genau der Fehler erwischt, auf den Du mich hingewiesen hast ;) Ich hoffe jetzt passt’s im Text. Eine spitze Klammer auf interpretiert das olle WordPress scheinbar immer als Anfang einer Anweisung, selbst in Code-Blöcken. Daher jetzt auch hinter dem Kommentar die spitze Klammer zu – ohne wird der letzte Absatz im Artikel komplett als Link dargestellt … Manchmal nervt WordPress echt wie sau.