Seit Ausbruch der Pandemie dürfte die AHA-Formel den Meisten in Fleisch und
Blut übergegangen sein: Abstand halten, Hygiene beachten und eine Alltagsmaske
tragen.
Für gründliches Händewaschen und Maske musst du selbst Sorge tragen,
aber beim Einhalten des empfohlenen Mindestabstands kann dir dieses Wearable-Projekt
behilflich sein.
Mithilfe eines selbstgebastelten Social Distancing Detektors sendest du ein deutliches
Signal, falls dir deine Mitmenschen zu nahe kommen.
Verwendet wird dafür ein Ultraschallsensor (HC-SR04), ein NeoPixel Ring und ein NodeMCU v2
Board. Dazu misst der Sensor die Distanz zu potenziellen Abstandsverweigerern und
der Pixelring leuchtet grell rot auf, sobald jemand tatsächlich zu sehr
auf Tuchfühlung geht (zu Coronazeiten also näher als 1,5m).
Mehr über den HC-SR04 findest du hier.
Das brauchst du für das Projekt
Für den Aufbau:
- HC-SR04 Ultraschallsensor
- NeoPixel Ring mit 24 Pixeln
- NodeMCU v2 Board
- Widerstandset mit 1kOhm und 2,2kOhm (im Schaltbild wird ein 2kOhm Widerstand für den Spannungsteiler verwendet, 2,2kOhm funktionieren auch)
- Jumper Kabel (male/male)
- Breadboard
Als Wearable:
- Lochrasterplatine (zB. Adafruit PermaProto)
- ~500mAh, 3.7V LiPo (oder PowerBank)
Außerdem:
- Lötkolben und Lötzinn
- Heißklebepistole
- Arduino IDE
Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!
Social Distancing Detektor: Schritt für Schritt
Kabelsalat: Aufbau auf dem Breadboard
Bevor alle Teile fest verlötet werden, lohnt es sich den Aufbau auf einem
Breadboard zu testen.
Nur die Kabel am NeoPixel Ring müssen gleich zu Beginn angelötet werden.
Dazu werden drei Kabel auf eine Länge von etwa 10-15cm gekürzt, sodass
auf einer Seite der Anschluss (male) intakt bleibt.
Dann auf der anderen Seite ca. 0.5cm der Isolierung entfernen und diese Enden
am Ring anlöten.
Die Farbwahl der Kabel ist letzten Endes Geschmackssache, für mehr
Übersichtlichkeit empfiehlt es sich aber, zumindest bei GND und VCC beim
traditionellen schwarz und rot zu bleiben.
Danach werden Sensor, Pixel Ring und Controller einfach kurz nach folgendem Schema verkabelt:
HC-SR04 | NodeMCU |
Vcc | 5V (rotes Kabel) |
Trig | D4 (blau) |
Echo | D3 (lila) |
GND | GND (schwarz) |
NeoPixel Ring | NodeMCU |
In | D2 (grün) |
VCC | 5V (rot) |
GND | GND (schwarz) |
Beachte: der HC-SR04 benötigt 5V, das NodeMCU Board verträgt allerdings
nur 3.3V. Damit das Board sicher vor eventuellen Schäden ist, sollte ein
Spannungsteiler eingebaut werden (denn wie schon meine Mutter sagte: Vorsicht ist besser als Nachsicht).
Ein Spannungsteiler besteht normalerweise aus zwei Widerständen, die eine Spannung in zwei Teilspannungen aufteilen. Um in unserem Fall von 5V auf ungefähr 3.3V zu kommen,
wird ein 1kOhm Widerstand und ein 2kOhm Widerstand (2,2kOhm->ca. 3,4V) am Echo-Pin verwendet. (siehe Schaltbild)
Ran an den Code!
Zuerst geht es an die Konfiguration der Arduino IDE. Damit das NodeMCU Board verwendet werden kann, muss eine entsprechende Board-Verwalter URL unter dem
Menüpunkt Datei->Einstellungen eingetragen werden.
URL zum Kopieren: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Anschließend einfach unter Werkzeuge->Board->Boardverwalter im Suchfeld
“NodeMCU” eingeben und beim Eintrag “esp8266 by ESP8266 Community” auf
“Installieren” klicken.
Für den NeoPixel Ring verwenden wir die NeoPixel library von Adafruit.
Dafür unter Werkzeuge->Manage Libraries… nach “NeoPixel” suchen und bei
“Adafruit Neopixel by Adafruit” “Installieren” auswählen.
Zuletzt müssen noch das NodeMCU Board (unter Tools->
Board->”NodeMCU 1.0 (ESP-12E Module)”) und der richtige COM-Port ausgewählt
werden.
Wenn alles vorbereitet ist, kann der nachfolgende Code in die Arduino IDE kopiert
und auf das Board übertragen werden.
#include <Adafruit_NeoPixel.h>
#define ledPin 5 // NeoPixel Ring
#define echoPin 6 // Echo HC-SR04
#define trigPin 7 // Trig HC-SR04
#define ledNumber 24 // Anzahl der Pixel
Adafruit_NeoPixel pixelRing = Adafruit_NeoPixel(ledNumber, ledPin, NEO_GRB + NEO_KHZ800);
uint32_t red = pixelRing.Color(255, 0, 0); // rot
uint32_t green = pixelRing.Color(0, 128, 0); // grün
// Falls andere Farben verwendet werden sollen
/* uint32_t blue = pixelRing.Color(0, 0, 255); // Blau */
/* uint32_t pink = pixelRing.Color(255, 0, 255); // Pink */
long duration; // vom Sensor gemessene Dauer
long distance; // aus Dauer errechnete Entfernung
// Empfohleneer Mindestabstand, kann hier angepasst werden
int socialDistance = 100;
void setup() {
// Entkommentieren, falls gemessener Abstand auf Serial Monitor ausgegeben werden soll
// Serial.begin(9600);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pixelRing.begin();
pixelRing.setBrightness(50); // Helligkeit des Pixelrings einstellen (50/255)
pixelRing.show();
}
void loop() {
// Sensor wird von HIGH Puls ausgelöst, der länger als 10 Microsekunden dauert
// vorher ein kurzer LOW Puls, für sauberen HIGH Puls
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Signal vom Sensor einlesen:
// duration = Zeit in Mikrosekunden für Senden eines Pings
// bis zum Empfangen des Echos von einem Objekt
duration = pulseIn(echoPin, HIGH);
// Formel: distance = 1/2 * duration / Schallgeschwindigkeit
// Schallgeschwindigkeit ca 323m/s
// durch 2, da duration die Zeit für hin und zurück ist
distance = duration * 0.034 / 2;
// Entkommentieren, falls gemessener Abstand auf Serial Monitor ausgegeben werden soll
// Serial.print("Abstand: ");
// Serial.println(distance);
// falls zu nahe -> PixelRing rot färben
if (distance <= socialDistance) {
pixelRing.fill(red, 0, ledNumber);
pixelRing.show();
}
// sonst alles im Grünen Bereich
else if (distance > socialDistance) {
pixelRing.fill(green, 0, ledNumber);
pixelRing.show();
}
delay(100);
}
Farben und Abstandswert können im Code an den gekennzeichneten Stellen geändert werden. Möchte man genau wissen, bis zu welchem Abstand der Sensor zuverlässig Personen erkennt, können beim Experimentieren die Abstandswerte auf dem Serial Monitor in der Arduino IDE ausgegeben werden, auch dafür einfach die entsprechenden Zeilen entkommentieren.
Vom Kabelsalat zum Wearable Social Distancing Detektor
Ist alles nach Herzenslust angepasst, kann die Testkonstruktion in ein
Wearable – also ein tragbares Device – verwandelt werden.
Bisher wurden die Bauteile per USB vom PC aus mit Strom versorgt. Da ein Rechner
(abhängig von der Größe) als Wearable aber eher unpraktisch ist, wird eine
geeignete mobile Stromversorgung benötigt.
Ganz klassisch kann beispielsweise ein 3.7V LiPo Akku zusammen mit einem TC4056 Charging Modul verwendet werden, der mit dem 5V Pin des Boards verbunden wird (sowohl Sensor als auch PixelRing benötigen 5V).
Alternativ bietet sich eine Powerbank an, die über den USB-Anschluss verbunden wird.
(Und wird die Powerbank gerade nicht für den Social Distancing Detektor benötigt,
lässt sich damit auch gut ein Handy laden).
Die weitere Gestaltung ist ganz deiner Kreativität und deinen Vorlieben überlassen.
Eine Idee wäre, die einzelnen Teile mit Kabeln zu verlöten und mit einer
Heißklebepistole auf einem festen Stück Pappe zu fixieren. Der Pixelring bildet
dann einen leuchtenden Rahmen, Sensor und Board können in der Mitte des Rings
plaziert werden. Anschließend kann auf der Rückseite eine Broschennadel
angeklebt werden und fertig ist der futuristische Social-Distancing-Anstecker (siehe Bild).
Fertig!
Natürlich handelt es sich bei diesem kleinen Projekt nicht um ein medizinisches Gerät.
Und auch, ob gerade tatsächlich eine Person den Mindestabstand verletzt oder nur ein Gegenstand, muss der Träger selbst beurteilen (in den allermeisten Fällen ist die Unterscheidung glücklicherweise recht eindeutig).
Trotzdem ist der Social Distancing Detektor eine witzige Möglichkeit, sich selbst und andere daran zu erinnern, während einer Pandemie nicht zu sehr auf Kuschelkurs zu gehen.
Du hast noch Fragen, Anmerkungen oder einen Fehler gefunden? Schreib’ einfach einen Kommentar!
Für weitere spannende ESP und Arduino Tutorials klicke hier.