Hinzufügen von Bewegungs- und Orientierungssensorik zu Hobby-Projekten

Ich bin mir nicht sicher warum, aber ich baue schon seit langem gerne Hobbyprojekte mit LEDs. Wie ich oft sage: „Zeig mir eine blinkende LED und ich zeige dir einen glücklichen Mann“. In letzter Zeit stieg mein Interesse am Einbau von Bewegungs- und Orientierungssensorik in meine Hobbyprojekte. Tatsächlich habe ich gerade eine 12 x 12 Anordnung von Tischtennisbällen, die jeweils mit einer dreifarbigen LED ausgestattet sind, um diese Fähigkeit erweitert.

Aber vielleicht sollte ich ganz am Anfang beginnen. Irgendwann im Frühjahr 2020 führte ich einen E-Mail-Chat mit einem befreundeten Ingenieur im Ruhestand namens David Humrich in Australien. David erzählte mir, dass er eine kleine Matrix aus dreifarbigen LEDs gekauft hatte und bat mich um Vorschläge, was er damit machen könnte. Als Antwort habe ich ein kurzes Video eines einfachen Wurm-Programms gepostet, das ich vor ein paar Jahren auf einem 8x8-LED-Array implementiert hatte.

Die Erstellung dieses Videos für David erinnerte mich daran, dass eines meiner zurückgestellten Projekte der Bau eines größeren Arrays war. Ich habe einige sehr interessante Displays gesehen, die auf Tischtennisbällen basieren, also entschied ich mich, das Projekt wiederzubeleben. Ich begann mit dem Kauf einer großen Tüte billiger Tischtennisbälle, die ich in einer 12 x 12 = 144 Bälle großen Anordnung montierte (Abbildung 1).

Abbildung 1: Stolz hält er seine Anordnung aus 12 x 12 Tischtennisbällen, die jeweils eine dreifarbige LED enthalten (Bildquelle: Max Maxfield)

Wenn es um die LEDs geht, ist eine gute Wahl für diese Art von Projekt der auf dem Dreikanal-LED-Treiber WS2818 basierende NeoPixel von Adafruit, z. B. der Streifen 1376 mit 30 NeoPixeln pro Meter. Dieser fünf Meter lange Streifen gab mir 150 Pixel: 144 für das Array, einen als Spannungspegelwandler und fünf als Reserve. Ich habe den Streifen in einzelne Pixelstücke zerhackt und jeweils ein Pixel auf der Rückseite eines Tischtennisballs angebracht.

Am Ende habe ich meine Pixel in einem Serpentinenmuster (Zick-Zack) verdrahtet, beginnend in einer Ecke und dann vorwärts und rückwärts über das Array. Wenn Sie sich entscheiden, ein eigenes Array zu erstellen, spielt es in Wirklichkeit keine Rolle, in welcher Reihenfolge Sie Ihre eigenen Pixel verdrahten, da wir uns dieses Array als 12 Spalten (X-Achse) und 12 Zeilen (Y-Achse) vorstellen, die beide von 0 bis 11 nummeriert sind, wobei sich das Pixel [0,0] in der linken unteren Ecke befindet (wenn Sie auf das Array schauen). Wenn wir also ein Programm schreiben, um unser Array anzusteuern, fügen wir eine Funktion namens GetNeoNum() ein, die X- und Y-Werte als Argumente akzeptiert und die - unter Verwendung eines Algorithmus, der von der Art und Weise abhängt, wie wir das Array verdrahtet haben - die Nummer des entsprechenden Pixels im String zurückgibt.

Für die Ansteuerung dieses Arrays benötigte ich einen Mikrocontroller mit einer angemessenen Menge an Speicher, einem relativ schnellen Takt und einer beträchtlichen Menge an Verarbeitungsleistung, da ich einige interessante Effekte, einschließlich mehrfarbiger Überblendungen, implementieren wollte. Ich habe mich für den 102010328 Seeeduino XIAO von Seeed Technology entschieden (Abbildung 2). Der XIAO, der von einem SAMD21G18-Mikrocontroller ATSAMD21G18A-MUT von Atmel angetrieben wird, ist nur so groß wie eine Standard-Briefmarke und damit das kleinste Arduino-kompatible Mikrocontroller-Entwicklungsboard in der Seeeduino-Familie. Der Mikrocontroller verfügt über einen 32-Bit-Arm-Cortex-M0+-Prozessorkern, der mit 48 Megahertz (MHz) läuft und mit 256 Kilobyte (KByte) Flash-Speicher und 64 KByte SRAM ausgestattet ist.

Abbildung 2: Als derzeit kleinstes Arduino-kompatibles Mikrocontroller-Entwicklungsboard der Seeeduino-Familie bietet das Breadboard-freundliche Seeeduino XIAO den Anwendern einen leistungsstarken 32-Bit-Arm-Cortex-M0+-Prozessor, der mit 48 MHz läuft. (Bildquelle: Seeed Studio)

Jeder der 11 Pins des XIAO kann als Analogeingang, als digitaler Eingang oder als digitaler Ausgang verwendet werden. Zehn der Pins unterstützen die Pulsweitenmodulation (PWM) und einer ist mit einem Digital/Analog-Wandler (DAC) ausgestattet, so dass eine echte Analogausgabe möglich ist. Zusätzlich können, falls erforderlich, die Pins 4 und 5 zur Unterstützung einer I2C-Schnittstelle, die Pins 6 und 7 zur Unterstützung einer UART-Schnittstelle und die Pins 8, 9 und 10 zur Unterstützung einer SPI-Schnittstelle verwendet werden.

Wie ich bereits erwähnt habe, bin ich seit kurzem daran interessiert, Bewegungs- und Orientierungssensorik in meine Hobbyprojekte einzubauen. Als Testfall habe ich beschlossen, diese Fähigkeit zu meinem 12x12-Tischtennisball-Array hinzuzufügen.

Ich wollte ein kleines Breakout-Board (BOB) mit einem MEMS-Sensor (mikroelektromechanisches System), der einen 3-Achsen-Beschleunigungsmesser, ein 3-Achsen-Gyroskop und ein 3-Achsen-Magnetometer enthielt. Es dauerte nicht lange, bis ich erkannte, dass die Komplexität, die mit dem Versuch verbunden ist, rohe Sensordaten zu manipulieren und ihnen einen Sinn zu geben, dazu führen würde, dass mir das Gehirn aus den Ohren tropft. Als Alternative habe ich mich für das BOB 2472 von Adafruit entschieden, das mit einem BNO055-Sensor von Bosch mit 9 Freiheitsgraden (DoF) ausgestattet ist.

Abbildung 3: Zusätzlich zu einem 3-Achsen-Beschleunigungsmesser, 3-Achsen-Gyroskop und 3-Achsen-Magnetometer enthält der BNO055-Sensor auf dem BOB 2472 von Adafruit auch einen Arm-Cortex-M0-Prozessor, der die Sensorfusion durchführt. (Bildquelle: Adafruit)

Der BOB kommuniziert mit dem XIAO-Mikrocontroller über eine Zweidraht-I2C-Schnittstelle. Das Tolle am BNO055 ist, dass er auch einen 32-Bit-Arm-Cortex-M0+-Prozessor enthält, der die Rohdaten der drei Sensoren aufnimmt, eine ausgeklügelte Sensorfusion durchführt und mir die benötigten Daten in einer für mich verwertbaren Form zur Verfügung stellt. Wie in diesem Video zu sehen ist, bestand mein erster Test darin, mein Array waagerecht zu halten und dann einen „Ball“ (Pixel) durch Kippen des Arrays um das Display „rollen“ zu lassen.

Fazit

Dieser erste Test hat tatsächlich viel besser funktioniert, als ich erwartet hatte, aber in Wirklichkeit ist er ziemlich simpel. Alles, was ich tue, ist zu erkennen, wenn die Neigung des Arrays einen bestimmten Wert überschreitet (derzeit auf 10 Grad eingestellt) und dann den „Ball“ mit konstanter Geschwindigkeit in die entsprechende Richtung zu bewegen. Der nächste Schritt wird sein, Dinge wie Trägheit und Beschleunigung genauer zu modellieren und dann diese Fähigkeiten zu nutzen, um eine Reihe von Spielen zu implementieren.

Die Hauptsache ist, dass mich diese ersten Experimente dazu inspiriert haben, andere Projekte mit Bewegungs- und Orientierungssensorik auszustatten und sie dadurch noch anspruchsvoller zu machen, als sie ohnehin schon sind. Wie steht es mit Ihnen? Haben Sie irgendwelche Hobby-Projekte, die von der Fähigkeit profitieren würden, zu erkennen, wie sie sich bewegen und in welche Richtung sie ausgerichtet sind?

Über den Autor

Image of Max Maxfield

Clive „Max“ Maxfield erhielt 1980 seinen BSc in Regelungstechnik von der Sheffield Hallam University, England, und begann seine Karriere als Entwickler von Zentraleinheiten (CPUs) für Großrechner. Im Laufe der Jahre hat Max alles von Siliziumchips bis hin zu Leiterplatten und von Gehirnwellenverstärkern bis hin zu Steampunk-Prognosemaschinen (bitte nicht fragen) entwickelt. Darüber hinaus ist er seit mehr als 30 Jahren an der Spitze der Electronic Design Automation (EDA) tätig.

Max ist Autor und/oder Co-Autor einer Reihe von Büchern, darunter „Designus Maximus Unleashed“ (in Alabama verboten), „Bebop to the Boolean Boogie“ (Ein unkonventioneller Leitfaden zur Elektronik), „EDA: Where Electronics Begins“, „FPGAs: Instant Access“ und „How Computers Do Math“. Werfen Sie auch einen Blick auf seinen Blog „Max's Cool Beans“.

More posts by Clive „Max“ Maxfield
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum