Hardware-Details (Version 2.0)

Die Komponenten und ihre Verdrahtung

Für Version 2 habe ich die gleichen LED-Module benutzt, die ich bereits zuvor im Prototyp verwendet habe. Es handelt sich um RGB-LEDs vom Typ WS2812; das sind die gleichen, die Adafruit in ihren NeoPixel-Modulen einsetzt, weshalb praktisch vollsändige Softwarekompatibilität zu den zahlreichen NeoPixel-Bibliotheken besteht. Kaufen kann man die von mir verwendeten Module z.B. bei roboter-bausatz.de; sie kosten nur wenige Euro. Der LED-Ring besitzt 12 Segmente und einen Außendurchmesser von ca. 50 Millimetern. Die Matrix ist quadratisch mit einer Kantenlänge von 65 Millimetern und beherbergt 8 x 8 LEDs. Die Module, die ich bisher gekauft habe, sind relativ exakt gearbeitet, nur an den runden Leiterplatten findet man noch Reste der Verbindungsstege. Diese kann man entweder abfeilen, oder einfach dran lassen -- ich habe mein Gehäuse so designt, dass diese Stellen keine Probleme verursachen sollten.

Die Module werden mit 5 Volt Gleichspannung versorgt und erwarten eigentlich auch 5-Volt-Signale. Im Tutorial Getting Started with Raspberry Pi Pico and CircuitPython gibt es einen Verdrahtungsplan, bei dem ein NeoPixel-Modul direkt über die Portpins angesteuert wird; das hat bei mir ebenfalls funktioniert und meine Schaltung basiert auch darauf. Im Adafruit NeoPixel Überguide gibt es einen Abschnitt Logic Level Shifting der das Thema etwas differenzierter betrachtet und zu folgender Zusammenfassung kommt:

If you want a NeoPixel project to be maximally robust and bulletproof, logic level shifting ensures reliable signaling. [...]
Quite often though you can get away without level shifting, as when using a lower supply voltage. With a 5V supply and no shifting, you're taking that small chance of unreliable operation, or "works on-desk but not in-field." That might be good enough for casual, non-critical projects. Ask yourself if failure is an option!

Ich habe entschieden, dass "works on-desk" für mich bis auf weiteres ausreicht, zumal ich bisher keine anderslautende Erfahrung gemacht habe und die Einsparung eines Level-Shifters einfach zu verlockend ist. Sollten beim Nachbau unerklärliche Probleme auftreten, dann wäre dies zumindest eine gute Stelle, um bei der Fehlersuche anzusetzen.

Was die Schaltung selbst angeht, ist sie wie bei vielen Mikrocontroller-Projekten relativ simpel und verbindet eigentlich nur ein paar Komponenten mit Portpins. Ich habe mich für einen Aufbau auf Lochraster entschieden, damit die Hürde für den Nachbau geringer ausfällt. Dazu verwende ich eine 4 x 6 cm große Lochraster-Platine mit Beschriftung, Bohrungen und Lötflächen im Randbereich, die es z.B. ebenfalls bei roboter-bausatz.de gibt, aber auch beim Makershop, BerryBase, Reichelt und den anderen üblichen Verdächtigen.

Pin-Header

Die LED-Module werden bei mir über Steckboard-Verbindungsleitungen an einen Pin-Header angeschlossen, um Zusammenbau und Komponententausch zu vereinfachen. Der Header hat 7 Pins und folgt dieser Belegung (auf meinem Board ebenfalls von links nach rechts zählend angeordnet):

Ring Matrix
Pin # 1 2 3 4 5 6 7
Funktion Data in +5 Volt Ground Data out Data in +5 Volt Ground

Jede WS2812-LED besitzt einen Daten-Eingang und einen Daten-Ausgang. Schlau designte Module machen sich das zu Nutze und bieten ebenfalls die Möglichkeit, mehrere Module zu verbinden. In meinem Fall habe ich das Ring-Modul zuerst platziert und die Matrix darauf folgen lassen, weil die Anschlüsse bequemer zu erreichen waren. Auf dem Board können die Pins 4 und 5 direkt gebrückt werden.

Button

Ich habe einen Button vorgesehen, der später für den Setup-Modus genutzt werden kann. Dieser zieht einfach einen Portpin auf Masse (der Pico verfügt über interne Pullup-Widerstände).

Buzzer

Ein Piezo-Buzzer soll später zum Signalisieren von Fehlern oder Hinweisen genutzt werden. Er wird ebenfalls über einen beliebigen Portpin angeschlossen (im Pico sind alle GPIO-Pins auch PWM-fähig). Achtung beim Anschließen: Piezo-Buzzer sind polar, der Portpin kommt an den Pluspol. Die Piezo-Buzzer sind übrigens ziemlich laut, weshalb ich bei meinem den Schutzaufkleber vorerst drauf gelassen habe.

Fotowiderstand (LDR)

Zur Erkennung der Umgebungshelligkeit habe ich einen LDR als Spannungsteiler eingebaut. Aus praktischen Gründen im Lochraster-Aufbau habe ich den Spannungsteiler so designt, dass der LDR im unteren Zweig sitzt, also bei Belichtung stärker nach Masse zieht als im Dunkeln. Im Prinzip ginge es aber auch andersherum, spielt keine Rolle und kann in der Software durch andere Werte in der Kennlinie angepasst werden.

Das neue Gehäuse

Ein großer Vorteil bei der Umstellung auf den Pi Pico war der geringere Platzbedarf. Einerseits brauchen die Komponenten weniger Platz (insbesondere der eingesparte Level-Shifter), andererseits wird der Pico auch nicht so warm und ich habe weniger Skrupel ihn in ein engeres Gehäuse zu quetschen. An dem Prinzip der Frontplatten-Gestaltung mit den verdeckten Sacklöchern für die LEDs habe ich festgehalten; ursprünglich war hier aus der Not eine Tugend gemacht worden, weil mein 3D-Drucker die kleinen Ringe nicht sauber auslegen konnte, die man für "echte" Löcher gebraucht hätte. Nachdem ich aber etwas Erfahrung mit dem Durchleuchten von weißem PLA sammeln konnte, hat mir das Prinzip sehr gut gefallen.

Ursprünglich wollte ich Einsteckgewinde und Maschinenschrauben nutzen (das Gehäuse ist dafür auch vorbereitet), habe dann aber festgestellt, dass Mehrzweckschrauben (aka. Holzschrauben, 2,0 x 16 mm) prima durch den Einsteck-Bereich hindurch passen und in ein weiteres, dahinter liegendes Sackloch greifen können. Somit sind die gleichen Gehäuseteile für beide Methoden nutzbar, wobei man bedenken muss, dass die Mehrzweckschrauben nach ein paar Montagevorgängen nicht mehr so gut greifen (vor allem, wenn man sie einmal zu fest angezogen hat).

Ebenfalls neu ist die Art der Leiterplatten-Befestigung. Ich habe einen Querträger gebaut, auf dem eine Art Podest sitzt, das die Leiterplatte aufnimmt und durch Nasen auf drei Seiten ausrichtet (die vierte Seite kollidiert mit dem USB-Anschluss). Darauf werden Klammern gesteckt, die verhindern sollen, dass das Board nach oben (bzw. in der späteren Ausrichtung hinten) raus fällt.

Das funktioniert allerdings nur so mittelprächtig: wenn man stark am Board ruckelt (z.B. beim Ein- und Ausstecken eines sehr hartnäckigen USB-Steckers) kann so eine Klammer schon mal abfallen und ist dann je nach Stelle sehr schwierig wieder aufzusetzen. Inzwischen habe ich etwas mehr Erfahrung im Design von flexiblen Bauteilen und würde das eher als Clip machen, der von oben eingesteckt wird und sich dann auf Grund seiner Spannkraft formschlüssig festhält. Aber im großen und ganzen funktioniert es, und wenn jemand das Gerät "für die Ewigkeit" aufbauen möchte, dann kann ein Tröpfchen Heißkleber auch nicht schaden.

Die Display-Module liegen auf der Frontplatte auf, wobei die Matrix durch vier Wände geführt wird und der Ring auf einem Kreuz aufliegt, das an vier Stellen zwischen die LEDs greift. Mit dem passenden Anpressdruck von hinten hält das einwandfrei. Die Dicke der Matrix-Leiterplatte ist etwas geringer als die der Ring-Leiterplatte. Ich habe deshalb ein weiteres Teil gedruckt, das auf die Matrix gelegt wird, um diese Differenz auszugleichen und ein Klappern zu vermeiden. Es hat seitwärts etwas Spiel und lässt sich beim Zusammenbau relativ leicht einfügen, wenn man es sich zuvor richtig ausgerichtet hinlegt.

Der Querträger greift links und rechts in die Aussparung der Frontplatte sowie in der Mitte zwischen den beiden LED-Modulen. Bei meinem Drucker kommen die Teile so raus, dass diese Verbindung genügend Reibung erzeugt und stabil ist. Zusätzlich stabilisiert wird der Querträger durch die Rückseite, die das Rausrutschen nach oben (später hinten) verhindert. Doch bevor die Rückseite aufgesetzt wird, muss ein winzig kleines Teilchen eingesetzt werden, das ich "Plunger" (Stempel / Stößel) genannt habe. Dieses liegt auf dem Button auf und betätigt ihn, wenn man mit einer Büroklammer o.ä. durch das Loch in der Rückseite piekst. Ich hatte zuerst darüber nachgedacht, einfach nur ein Loch in die Rückseite zu machen, aber dann war mir bei dem Gedanken etwas unwohl, dass jemand ohne was zu sehen mit einem Metallteil auf dem Board herumstochert. Geführt wird der Plunger durch eine rechteckige Röhre an der Gehäuserückseite, die somit einen Kanal bildet, aus dem man beim normalen Betätigen nicht ausbrechen können sollte.

Die hier gezeigte Rückseite wurde im Draft-Modus ausgedruckt und verzichtet auf die eigentliche Abdeckung. Einerseits weil es schneller zu drucken ist, andererseits weil man während der Entwicklung besser ans Board kommt. Die finale Rückseite hat Lüftungsschlitze und einen Durchlass für das USB-Kabel, welches im Draft-Modus einfach irgendwie raushängt. Gedanken an eine gute Zugentlastung habe ich noch keine verschwendet, vielleicht folgt später noch ein Aufbau auf dem Querträger, der eine Verschraubung, Klemmung oder einfach einen Kabelbinder unterstützt. Bis dahin sorgt die Schlaufe im Kabel zumindest dafür, dass der Zug auf den Stecker nicht zu groß wird und man durch einen sanften Widerstand daran erinnert wird, nicht zu fest am Kabel zu zerren.

Konfiguration des 3D-Modells und Nachbau

Ich benutze OpenSCAD, zusammen mit Visual Studio Code und der Extension OpenSCAD Language Support. Um die STL-Dateien nur zu generieren oder kleine Modifikationen durchzuführen reicht OpenSCAD selbst vollkommen aus.

Die meisten Abmessungen ergeben sich direkt aus der Größe der Komponenten, weshalb sie beim Nachbau mit den gleichen Teilen passen sollten. Aber es gibt ein paar benannte Konstanten, mit denen man etwas herumspielen kann und je nach Drucker vielleicht sogar muss:

Ansonsten liegen alle Einzelteile unter components/ und können von dort aus direkt ausgedruckt werden; aber nicht alle Komponenten werden als Druckteil benötigt (Schrauben, Platzhalter für LED-Module, etc.). Benötigt wird:

Bauteil Dateiname Hinweise
Rückseite back.scad Mit Lüftungsschlitzen auf Bauplattform (print = true)
Leiterplatten-Klammer board_clamp.scad Wird 3 mal benötigt, liegend drucken mit Schlitz nach oben
Querträger mit Leiterplatten-Podest board_clip.scad
Frontplatte front.scad
Ausgleich der Leiterplattendicke (Matrix) matrix_inlay.scad
Stößel für Button plunger.scad Liegend drucken (T-förmig)

Die Ausrichtung sollte eigentlich aus der entstehenden STL-Datei hervorgehen, aber meine Druck-Software versucht manchmal schlau zu sein und stellt Teile auf, die eigentlich liegen sollen. Die Druckzeit beträgt mit meinem Adventurer 3 zusammengenommen ungefähr 10 Stunden und benötigt laut Druck-Software ca. 80 Gramm Material (in der Endversion mit draft = false).


Zurück zur Hauptseite