8×8 Led Matrix Arduino Abstandssensor mit 64 LED Matrix Panel CJMCU in Coroanzeiten

Wenn Freunde nicht wissen wann ein Sicherheitsabstand unterschritten wird, kann man mit Technik nachhelfen und es macht auch noch Spaß. Die Bauteile habe ich alle in meiner Sammlung gehabt. Du brauchst ein Abstandssensor. Ich nehme den alt bekannten HC-SRO4, dann noch ein Summer oder Lautsprecher und eine LED Matrix. Das ganze kann der Arduino Nano steuern.

Die Signalisierung mit dem Summer habe ich ohne Probleme zusammengesteckt. Es sind ja nicht viele Anschlüsse notwendig. Da werdet ihr auch keine Probleme haben. Die beiden Anschlüsse vom Abstandssensor Trigger und Echo kann man auf ein einzigen PIN stecken. Ob das so richtig ist, habe ich nicht geprüft. Bei mir funktioniert es. Schwierig hingegen war die Einbindung der LED Matrix.

Als erstes war das Bibliothekproblem. Auf der Rückseite der LED Matrix stand CJMCU-8*8. Wen man danach suchte bekam man kein Ergebnis. Erst in ein paar Codebeispiele fand ich unter dieser Matrix dass die Bibliothek Adafruit_NeoPixel.h auch funktioniert. Also diese eingebunden und ein paar Beispiele ausprobiert. Klappte alles. Dann mal umgesteckt von DOUT auf DIN und das Teil ging nicht an. Nach vielem suchen und übersetzen dann gefunden dass an DIN weitere LED-Matrix angesteckt werden können. Schön verwirrend.

Also an DOUT kommt die Datenleitung zum Arduino. Weitere Anschlüsse, außer Plus und Minus braucht ihr nicht.

Ich habe den D9 PIN für die LED-Matrix und den D7-PIN für den Abstandssensor vom Arduino genommen. Den Summer lass ich über den D4-PIN ansteuern.

Ach so, ganz Wichtig! Viele LEDs brauchen viel Strom. Also achtet darauf nicht zu viele LEDs auf einmal und zu lange laufen zu lassen. Ihr könntet euren Arduino und was noch viel schlimmer ist, euren USB-Port im Computer beschädigen. Alle LED’s brauchen insgesamt 3 Ampere bei voller Helligkeit. Das kann der USB Port nicht liefern. Es gibt aber mehrere Lösungen. Eine davon ist der Stromanschluss (Plus/Minus) über ein externes Netzteil. Oder aber im Quelltext wird die LED mit weniger Helligkeit eingestellt. Das beschreibe ich weiter unten.

Jetzt geht es erstmal um die Ansteuerung einzelner LED’s und den notwendigen Code.

//8x8Matrix
#include <Adafruit_NeoPixel.h>
#define PIN 9 // DIN Datenpin
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_RGB + NEO_KHZ800);//

Biblithek NeoPixel einbinden. Dann den PIN 9 (D9) festlegen und dem Arduino sagen dass du 64 LED’s hast. Im Setup() kommen die Smilys. Die Byts der LED’s werden Zeilenweise angesteuert. Darum die for Schleife. Dann wird für die angegebene LED die Farbe festgelegt. Die LED’s werden durchnummeriert. Beginnend bei Null.

//Auge links 4 LEDs
    strip.setPixelColor(uint8_t(9), color);
    strip.setPixelColor(uint8_t(10), color);
    strip.setPixelColor(uint8_t(17), color);
    strip.setPixelColor(uint8_t(18), color);

Ich habe mir in Excel die LEDs durchnummeriert und mit Farbe versucht die Smiley zu zeichnen. So kann man auch andere Figuren oder Symole zeichnen. Die Farbe wird in der Loop mit dem Code smiley(strip.Color(0, 0, 25)); festgelegt. Farben werden mit RGB bezeichnet. Also würde der Befehl smiley(strip.Color(Rot, Grün, Blau)); lauten. Das heiße wenn die LED rot leuchen soll, einfach die erste Zahl eintragen und die anderen hinter dem Komma bleiben auf Null. Natürlich kan man auch mischen. Dann werden alle Farben angezeigt die möglich sind. Im Web gibt es ein RGB-Farbrechner. Der größte Wert ist 255. Dann leuchtet die LED mit der Maximalen Leuchtstärke. Aber hier kommt das Stromproblem zum tragen. Bei dem Wert 25 leuchtet die LED nur wenig, aber für mich ausreichend. Probiert mal die Werte und Farben aus. Dann werdet ihr es sehen. Probiert das aber nur mit einer LED. Mit dieser Programmierung und 16 LEDs komme ich auf ca. 100mA.

Da ich ein wechsel zwischen Lachen und Traurig machen will, muss man die anderen LED’s wieder ausschalten. Und das mache ich, indem die LED keine Farbe zugeordnet werden.

// LED ausschalten von lachen, sonst würden die LEDs weiterleuchten
    strip.setPixelColor(uint8_t(24), strip.Color(0, 0, 0));
    strip.setPixelColor(uint8_t(32), strip.Color(0, 0, 0));

Zum Beispiel hier die LED 24 und 32 erhalten keine Farbe. Alle Werte mit 0 angegeben. Es gibt bestimmt bessere Lösungen, aber diese hat mich am schnellsten ans Ziel geführt.

In der Loop wird jeweils die beiden Smileys aufgerufen. Dort ist eine Schleife aus dem Sensorprogramm die prüft ob der Abstandswert über dem eingestellten Wert liegt und dann wird zum ELSE-Zweig gesprungen. Und das Gesicht lacht. Erst wenn der Abstand kleiner ist, kommt das traurige Smiley.

if (cm < Abstand) // wenn Abstand kleiner als der oben eingetragene Wert dann 
  {
    digitalWrite(Piep, HIGH); // Soll den Störenfried signalisieren und er schaut zum Piepton und sieht den Smiley
    bad(strip.Color(0, 15, 0)); //rote LEDs für traurig, 
    strip.show();
  }
  else // wenn nicht Abstand unterschritten
  { 
    digitalWrite(Piep, LOW);
    smiley(strip.Color(0, 0, 25)); //Blau für lachen
    strip.show();
  }

Den gesamten Code kann man hier als pdf-Datei laden.

Natürlich brauch man ein Gehäuse. Ein 3D Drucker vorrausgesetzt, zeichnet und fertigt man selbst eins und kann seiner Phantasie freien lauf lassen.

Übrings, hat funktioniert und es war ein Hingucker. Den Summer habe ich wieder deaktiviert. Nerft ein bisschen, weil man ja selbst dran verbeiläuft und dann piept es natürlich. Aber dafür gibt es ja Schalter.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert