Lesezeit ca. 7 Min.

Gruseln trotz Corona


Logo von Raspberry Pi Geek
Raspberry Pi Geek - epaper ⋅ Ausgabe 12/2021 vom 07.10.2021

Halloween-Hacks

Artikelbild für den Artikel "Gruseln trotz Corona" aus der Ausgabe 12/2021 von Raspberry Pi Geek. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: Raspberry Pi Geek, Ausgabe 12/2021

README

Auch wenn Corona auch dieses Jahr die Aktivitäten zu Halloween wieder einschränkt, hält das einen echten Geek nicht davon ab, ein wenig Grusel zu verbreiten. Einige Servomotoren, das passende PWM-Modul und ein kleines Programm genügen, um einen Totenschädel zum Leben zu erwecken.

Um trotz Corona ein wenig Grusel-Feeling zu bekommen, bauen wir einen animierten Totenkopf. Damit wir nicht immer anonym von einem Schädel sprechen müssen, taufen wir unseren knochigen Freund einfach auf den Namen Paul. Paul soll aus dem Fenster sehen und mögliche Halloween-Fans erfreuen. Dazu braucht er selbstredend Augen, die sich in alle Richtungen bewegen lassen 1.

Weil Halloween ausfällt, muss Paul zudem den Kopf schütteln können. Außerdem wäre es schön, wenn er sprechen könnte. Das geht naturgemäß nur, wenn er auch den Kiefer dazu bewegt. Alle diese Funktionen steuern wir mit sechs Servomotoren ...

Weiterlesen
epaper-Einzelheft 8,99€
NEWS Jetzt gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von Raspberry Pi Geek. Alle Rechte vorbehalten.
Lesen Sie jetzt diesen Artikel und viele weitere spannende Reportagen, Interviews, Hintergrundberichte, Kommentare und mehr aus über 1050 Magazinen und Zeitungen. Mit der Zeitschriften-Flatrate NEWS von United Kiosk können Sie nicht nur in den aktuellen Ausgaben, sondern auch in Sonderheften und im umfassenden Archiv der Titel stöbern und nach Ihren Themen und Interessensgebieten suchen. Neben der großen Auswahl und dem einfachen Zugriff auf das aktuelle Wissen der Welt profitieren Sie unter anderem von diesen fünf Vorteilen:

  • Schwerpunkt auf deutschsprachige Magazine
  • Papier sparen & Umwelt schonen
  • Nur bei uns: Leselisten (wie Playlists)
  • Zertifizierte Sicherheit
  • Freundlicher Service
Erfahren Sie hier mehr über United Kiosk NEWS.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 12/2021 von Eine besondere Zeit. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Eine besondere Zeit
Titelbild der Ausgabe 12/2021 von Vorratshaltung. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Vorratshaltung
Titelbild der Ausgabe 12/2021 von Netzwerktacho. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Netzwerktacho
Titelbild der Ausgabe 12/2021 von Stromverteiler. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Stromverteiler
Mehr Lesetipps
Blättern im Magazin
Volles Programm
Vorheriger Artikel
Volles Programm
Alle Jahre wieder
Nächster Artikel
Alle Jahre wieder
Mehr Lesetipps

... aus dem Modellbau an. Die benötigen zur Ansteuerung ein spezielles PWM-Signal. Nähere Informationen zu den Servos und dem Steuersignal finden Sie im Kasten Servomotor-Grundlagen.

Es gibt viele Wege, passende PWM-Signale zu erzeugen. Wir verwenden in diesem Artikel ein PCA9685-Modul , das es für weniger als 6 Euro bei AZ-Delivery gibt. Von dort stammen auch die nötigen Servomotoren, fünf kleine und ein großer . Pauls Kopf mitsamt einem kompletten Skelett stammt von Amazon, ebenso seine Augen . Damit die sich in alle Richtungen bewegen, befestigen wir sie mit Kardangelenken .

Damit haben wir erst einmal die wichtigsten Bauteile des Projekts zusammen. Darüber hinaus fallen noch noch eine Menge Kleinigkeiten an, die es zu verbauen gilt. Die meisten davon hat aber fast jeder Bastler bereits in der Grabbelkiste. Soweit der Plan; sehen wir uns nun an, wie wir die vielen Einzelteile zu einem Ganzen zusammenbekommen.

Aufbau

Abbildung 2 zeigt den Aufbau der Mechanik zum Bewegen der Augen. Als Basisplatte dient eine Konstruktion aus dem 3D-Drucker, die genau in Pauls Kopf passt. Die OpenSCAD-Datei und das STL dazu finden Sie im Download-Bereich zu diesem Artikel. Falls Sie einen anderen Schädel verwenden möchten, passen Sie diese Dateien entsprechend an.

Die Augen befestigen wir mit 10 Millimeter langen Metallachsen mit einem Durchmesser von etwa 3 Millimetern, die wir mit den Kardangelenken an der Basisplatte verbinden. Bei unserem Aufbau beträgt die Länge der Gestänge zum Ansteuern der Augen etwa 97 Millimeter, die Maße variieren aber je nach Aufbau leicht. Nach einer Funktionsprüfung aller Servos verkleben wir die Basisplatte mit Silikon im Kopf. Das hält recht gut, dämpft die Vibrationen ein wenig und lässt sich zur Not auch wieder lösen.

Abbildung 3 zeigt den Schaltplan von Paul. Das Modul PCA9685 steuern wir über die I 2 C-Schnittstelle des Raspberry Pi. Dabei gilt es, den Eingang OE des Moduls auf Masse zu ziehen, da sonst die Ausgänge des PCA9685 nicht aktiviert werden.

Zur Spannungsversorgung verwenden wir vier AA-Akkus. Sie können aber auch andere Spannungsquellen verwenden, die etwa 6 Volt liefern und den nötigen Strom für die Servos bereitstellen. Selbst ein kleiner Servomotor zieht beim Anfahren einige Hundert Milliampere. Verwenden Sie keinesfalls die 5-Volt-Leitung des RasPi zur Spannungsversorgung: Das führt unter Umständen zur Überlastung des Netzteils und zum Absturz des Minirechners. Die Leitungen VCC und V+ dürfen Sie auf keinen Fall verbinden – das würde der RasPi nicht überleben.

Auf dem RasPi verwenden wir als Betriebssystem das aktuelle Raspberry Pi OS Lite. Um das Systemabbild auf eine SD-Karte zu schreiben, verwenden wir den Raspberry Pi Imager, der auf der Webseite des Projekts zum Herunterladen bereitsteht .

Servomotor-Grundlagen

Servomotoren für den Modellbau steuert in der Regel ein PWM-Signal an. Das Kürzel steht für Pulsweitenmodulation, die mit einer festen Grundfrequenz arbeitet und das Verhältnis zwischen Ein- und Ausschaltzeit variiert. Das erlaubt es zum Beispiel, die Leistung an einem Verbraucher exakt zu steuern.

Die Grundfrequenz des PWM-Signals liegt bei 50 Hertz, eine Periode dauert entsprechend 20 Millisekunden. Das Signal für den Servo hat eine Einschaltzeit von ein bis zwei Millisekunden. Dabei dient die erste Millisekunde als eine Art Synchronisationsimpuls, die darauffolgende Impulslänge steuert den Winkel des Servomotorhebels. Signale mit weniger als einer Millisekunde Einschaltzeit erkennt der Motor nicht. Dauert die Einschaltzeit länger als zwei Millisekunden, verharrt der Servo in der maximalen Endposition, so zumindest die Theorie. Das Verhalten realer Servos weicht aber nicht selten um einiges vom definierten Timing ab. Programme, die Servos steuern, müssen daher immer eine Möglichkeit zur Justierung schaffen. Auch der im Artikel angesteuerte Aufbau fällt nicht zu 100 Prozent genau aus.

Vorbereitung

In unserem Beispielprojekt erweckt ein RasPi der dritten Generation Paul zum Leben. Verwenden Sie stattdessen einen RasPi 4, müssen Sie die WiringPi-Bibliothek in Version 2.52 manuell nachinstallieren. Um das PCA9685-Modul über die

I 2C-Schnittstelle anzusteuern, müssen Sie auf dem Raspberry Pi noch einige Kleinigkeiten einrichten.

Als Erstes aktivieren Sie die I 2 C-Schnittstelle mit dem Tool Raspi-config. Geben Sie dazu auf der Kommandozeile den Befehl sudo raspi‐config ein und wählen Sie unter 3 Interface Options |P 5 I2C die Option Yes aus. Anschließend beenden Sie das Tool wieder. Im nächsten Schritt müssen Sie einige Programme installieren; die dazu notwendigen Kommandos zeigt Listing 1.

Danach überprüfen Sie mithilfe des Kommandos i2c‐detect, ob sich das PCA9685-Modul korrekt am Bus meldet (Listing 2). Sie sollten in der Ausgabe zwei I 2 C-Adressen sehen: Zum einen die reguläre 0x40, die sich über die Lötpads auf der Platine verändern lässt, und zum anderen die sogenannte Allcall-Adresse 0x70. Befinden sich mehrere PCA9685- Module an einem I 2 C-Bus, dann kann man über die Allcall-Adresse alle gleichzeitig programmieren – eine recht praktische Funktion für das Setup oder um alle verbundenen Module gleichzeitig zu schalten. Theoretisch dürfen Sie bis zu 62 PCA9685-Module an einem I C-Bus anschließen.

Für einen ersten Test steuern wir einen einzelnen Servomotor über den Ausgang OUT0 an. Dazu verwenden wir das Tool I2cset. In Listing 3 initialisieren die ersten vier Befehle den PCA9685 mit einer Basisfrequenz von rund 50 Hz. Exakt 50 Hz erzeugt der eingebaute Taktgenerator des Moduls zwar nicht, aber immerhin eine sehr dichte Näherung. Die folgenden vier Kommandos setzen die Steuerregister für alle Ausgänge auf null, die letzten sechs erzeugen PWM-Signale mit einer Dauer von von 1, 1,5 sowie 2 Millisekunden. Das bringt den Servo in beide Endlagen (1 ms und 2 ms) und in die Mittelposition (1,5 ms). Sie müssen hier immer zwei Werte (High- und Low-Byte) setzen, um eine bestimmte Impulslänge zu erhalten.

Falls Sie ein Oszilloskop besitzen, lesen Sie das Signal damit aus, das dann so aussieht wie in Abbildung 4 gezeigt. Weitere Informationen zur genauen Bedeutung der Register des PCA9685 finden Sie im Datenblatt .

Programm

Um auf die I 2 C-Schnittstelle zuzugreifen, benötigt unser in C geschriebenes Testprogramm die WiringPi-Bibliothek . Eine Übersicht der Funktionen finden Sie in der Tabelle „Übersicht I 2 C-Funktionen“.

Beim Einsatz von Servomotoren in Projekten ist immer eine kleine Unschärfe bei der Positionierung zu erwarten. Die zum Erreichen einer bestimmte Position nötigen Signale hängen auch ein Stück weit vom mechanischen Aufbau und den Toleranzen der Servos ab.

Um diese Klippe zu umschiffen, definieren wir ein Array für neun mögliche Positionen der Augen, das die konkreten Werte zur Signalerzeugung enthält. Die Tabelle IDs für die Augen führt den Index zu jeder einzelnen Augenposition (aus der Perspektive von Paul). Die Arrays mit den Werten für die Augen heißen right und left. Sie müssen die Werte darin vermutlich an Ihren eigenen Aufbau anpassen.

Weitere Infos und interessante Links

www.raspi-geek.de/qr/46770

Kommen wir nun zum Programm (Listing 4). Nach dem Import aller nötigen Bibliotheken definiert der Code die Arrays für die Augenpositionen sowie einige Konstanten. Danach folgen die Funktionen, mit denen sich Paul steuern lässt.

Die Funktionen eyeLeft und eyeRight übernehmen dabei das Bewegen der Augen. Sie bekommen als Übergabewert den Index aus der ID-Tabelle und positionieren die Augen mithilfe der beiden Arrays left und right. Innerhalb der Funktionen greift das Programm auf die entsprechenden Register des PCA9685 zu und teilt die Integerwerte mit ein wenig binärer Logik in zwei Bytes.

Die Funktionen teeth und neck bekommen je einen Integerwert für die Position, den die Software in die Byte- Register des PCA9685 schreibt. Auch hier gilt es wieder zu beachten, dass sich die Werte bei jedem Aufbau leicht unterscheiden. Dazu ein Tipp: Ermitteln Sie so gut wie möglich die Mittelposition. Danach arbeiten Sie sich vor, bis Sie nach rechts und links an die mechanischen Grenzen der Servos stoßen. Üblicherweise brummen diese beim Erreichen der Endposition recht laut. Wählen Sie für die Endposition einen Wert kurz vor Beginn des Brummens.

Dateien zum Artikel herunterladen unter

www.raspi-geek.de/dl/46770

Zu guter Letzt gibt es noch die init- Funktion. Sie initialisiert den PCA9685 und setzt sämtliche Steuerregister zunächst auf null. Beim genauen Hinsehen erkennen Sie, dass hier dieselben Werte zum Einsatz kommen, die wir schon in Listing 3 via Kommandozeile in die entsprechenden Register geschrieben haben. Die main-Funktion schließlich initialisiert zuerst den PCA9685. Anschließend ruft sie die schon beschriebenen Funktionen auf, um jede von Pauls Bewegungen zu testen.

Sie kompilieren das C-Programm mit dem Kommando cc paul.c ‐lwiringPi ‐opaul. Der C-Compiler erzeugt direkt ausführbare Binaries, das Beispielprogramm starten Sie mit dem Kommando ./paul auf der Konsole. Paul lässt sich mit den vorhandenen Funktionen nun so programmieren, dass er beliebige Bewegungsabläufe abspult. Ihrer Fantasie sind dabei keine Grenzen gesetzt, wie ein Youtube-Video zeigt.

Fazit

Paul zum Leben erwecken gestaltet sich als ein äußerst kurzweiliges Projekt mit hohem Spaßfaktor.

Das Beispielprogramm zeigt nur grob, was Paul so alles kann – es lassen durchaus komplexere Bewegungsabläufe programmieren. Das PCA9685-Modul steuert bis zu 16 Servos an. Es stellt also kein Problem dar, dem Kopf noch mehr Bewegungsmöglichkeit zu verleihen oder ein komplettes Skelett zum Leben zu erwecken. Es wäre auch möglich, synchron zu den Bewegungen eine Tonspur abzuspielen. Das würde den Eindruck erwecken, dass Paul etwas erzählt.

Insgesamt kann das Projekt als solide Basis für Ihre eigene Halloween-Dekoration dienen. Der Autor wünscht Ihnen auf jeden Fall viel Spaß beim Entwickeln eigener Choreografien für Paul. Hoffen wir, dass im nächsten Jahr wieder ein richtiges Halloween stattfindet.

(tle)

Der Autor

Martin Mohr erlebte die komplette Entwicklung der modernen Computertechnik live mit. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem RasPi erwachte seine alte Liebe zur Elektronik wieder.