Bitte Abstand halten: Social Distancing Detektor mit ESP8266

Bitte Abstand halten: Social Distancing Detektor mit ESP8266

Allgemein, Arduino
21 Mai 2021

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:

Als Wearable:

Außerdem:

  • Lötkolben und Lötzinn
  • Heißklebepistole
  • Arduino IDE
WARENKORB

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
Vcc5V (rotes Kabel)
TrigD4 (blau)
EchoD3 (lila)
GNDGND (schwarz)
NeoPixel RingNodeMCU
InD2 (grün)
VCC5V (rot)
GNDGND (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)

Fritzing Schaltbild der Verkabelung eines HC-SR04, NodeMCU v3 Boards und eines NeoPixel Rings.

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

Screenshot der Einstellungen der Arduino IDE

Anschließend einfach unter Werkzeuge->Board->Boardverwalter im Suchfeld
“NodeMCU” eingeben und beim Eintrag “esp8266 by ESP8266 Community” auf
“Installieren” klicken.

Screenshot der Boardverwaltung der Arduino IDE.

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.

Screenshot der Bibliotheksverwaltung der Arduino IDE.

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

Fritzing Schaltbild mit HC-SR04, NeoPixel Ring und NodeMCU v3, die Bauteile liegen übereinander. 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.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 4

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Kommentare

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>