Das Kind muss endlich Programmieren lernen – Teil 2: Der Rest

Im ersten Teil dieses Posts habe ich bereits das Ziel eingeführt: Es soll eine Plattform, bestehend aus einem Roboter und einem Board, entstehen mit der Kinder erste Schritte in Richtung Programmieren auf spielerische Art machen können. Dieser zweite Teil beschreibt nun den Aufbau und die Programmierung des Programmier-Boards.

Das Board besteht aus mehreren Komponenten. Zunächst sind das acht Slots mit je zwei Buchsen zum Aufstecken der Programmierbausteine. Außerdem gibt es eine zusätzliche Leiste mit vier Slots, die zur Programmierung einer Subroutine verwendet werden können. Auf dieser Leiste kann man eine Folge von bis zu vier Bausteinen kombinieren. Verwendet man dann im eigentlichen Programm einen Subroutinen-Baustein, dann werden anstelle dessen die Subroutinen-Befehle im Roboter angesteuert. Zusätzlich findet man auf dem Board eine LED, die beim Betrieb leuchtet, und einen Start-Knopf. In dem Board sorgt ein Ardunio Mega für die Verarbeitung der Befehle und die Kommunikation mit dem Roboter.

board

In die Slots steckt man zum Programmieren je einen Programmierbaustein. In der aktuellen Version sind vier Baustein-Varianten umgesetzt: Vorwärts, Linksdrehung, Rechtsdrehung, Subroutine aufrufen. Durch Einstecken eines Bausteins in einen Slot erstellt man einen Spannungsteiler. Damit lässt sich auf einem Arduino-GPIO-Eingang eine abfallende Spannung messen und damit der eingesteckte Baustein identifizieren.

spannungsteiler

Der Widerstand R2 ist auf dem Baustein verbaut und verbindet dort die beiden Pins. Die Widerstände R1 (je einer pro Slot auf dem Board) sind auf einer kleinen Platine untergebracht. Die Widerstände R1 haben je 10k-Ohm, für die Widerstände R2 haben zurzeit 1k-Ohm, 1.5k-Ohm, 2.2k-Ohm und 3.3k-Ohm für die vier Bausteintypen in Verwendung. Bei einem Baustein mit einem 1.5k-Ohm-Widerstand lässt sich am GPIO demnach eine Spannung von 5V * 10k-Ohm / (10k-Ohm + 1.5k-Ohm) = 0.87 * 5V messen. Der Input liefert also einen Wert von etwa 891 bei einem Wertebereich 0 … 1023. Die Abstände zwischen den Gruppen müssen natürlich groß genug sein, damit die analogen Eingänge des Arduinos sie auch unterscheiden können. Nach meinen Erfahrungen liegt die Ungenauigkeit der Schaltung und der Messung bei weniger als 0.01V, sodass hier keinerlei Probleme auftraten. Als GPIO-Anschlüsse werden analoge Eingänge des Arduinos verwendet.

widerstaende

Für die Stecker und Buchsen habe ich Modelleisenbau-Stecker verbaut. In jedem Baustein sind die zwei Stecker direkt über den Widerstand R2 verbunden. Die Stecker sind dann in zwei passende Löcher geklopft und sitzen damit ausreichend fest. Als Abdeckung wird noch ein Sperrholzplättchen darüber geklebt, das auf der Innenseite einen Hohlraum für den Widerstand gedremelt bekam. Auf der Boardseite werden jeweils zwei passende Buchsen verwendet, die mit der Widerstandsplatine verbunden sind.

baustein

Das Board kommuniziert mit dem Roboter über Wifi. Der Roboter dient dabei als Server, das Board muss also lediglich Anfragen verschicken. Allerdings hat ein Arduino Mega in der Grundversion keine Wifi-Karte verbaut. Mit dem ESP8266-Chip steht aber eine sehr günstige Lösung bereit. Beim Verbinden des Chips mit dem Arduino ist zu beachten, dass der Arduino mit 5V arbeitet, der ESP8266 aber nur mit 3.3V. Bei der Verbindung ist daher ein Logik-Level-Konverter zwischenzuschalten. Für die Versorgung des Chips mit 3.3V kommt ein AMS1117-Spannungsregler mit einer Ausgangsspannung von 3.3V zum Einsatz. Meine Recherchen haben zwar ergeben, dass dieser eigentlich über eine externe Spannungsquelle versorgt werden sollte; ich habe ihn aber direkt an den 5V-Ausgang des Arduinos angeschlossen und konnte bisher keine Probleme damit feststellen.

esp8266

Das entsprechende Schaltbild sieht so aus:

esp8266_schaltung

Hat man die Hardware korrekt verkabelt, dann kann man über den seriellen Monitor der Arduino IDE mit TX-Befehlen mit dem ESP8266 sprechen. Eleganter und im hier verwendeten Arduino-Sketch auch so umgesetzt geht es aber natürlich über die Verwendung einer Arduino-Bibliothek.

Nun fehlt nur noch die Ansteuerung des Tasters und der LED. Wie so etwas prinzipiell geht, habe ich bereits bei früheren Posts (zum Beispiel bei der Kinderkasse) beschrieben. In beiden Fällen verwendet man einen digitalen GPIO und je einen Pull-Up-Widerstand.

Und das wars. Das Raster, auf dem sich der Roboter bewegt, lässt sich natürlich noch viel ansprechender gestalten. Für die Akzeptanz hilfreich wären wohl Abbildungen von Piraten, Drachen und Dinosauriern. Das kann aber ja noch kommen. Zunächst kann das Programmieren starten. Die gesamte Programmierstation aus Roboter und Board kann man sich in Aktion in diesem YouTube-Video ansehen:

Den Arduino-Sketch für das Board findet man auf GitHub unter https://github.com/pjenke/makerguy.

Jetzt gilt es zu sehen, ob sich das eine oder andere Kind mit diesem Aufbau nicht vielleicht frühzeitig für das Programmieren begeistern lässt.

Das Kind muss endlich Programmieren lernen – Teil 1: Der Roboter

In der letzten Zeit häufen sich die Stimmen, die meinen, das Programmieren in Zukunft eine Kompetenz sein sollte, die alle Kinder frühzeitig erwerben (“Erste Fremdsprache = Programmiersprache”). Selbstredend teile ich diese Meinung. Die Frage ist vielleicht weniger ob man Kinder an das Programmieren heranführt, sondern vielmehr wie man das macht. Das Ziel muss es schließlich sein, Begeisterung zu erwecken. Mit dem Calliope Mini scheint beispielsweise eine erste deutschlandweite Kampagne durchzustarten. Diese richtet sich an Schülerinnen und Schüler ab der dritten Klasse. Was aber ist das richtige Einstiegsalter für das Thema? Meine Meinung: Es kann nicht früh genug sein, solange es den Kindern Spaß macht. Ich bin nun über zwei Projekte gestolpert, die vielleicht schon für Drei- bis Vierjährige interessant sein könnten. Zum einen handelt es sich dabei um das Spiel Lightbot von dem im Rahmen der Hour-of-Code auch eine kostenlos spielbare Variante entstanden ist. Und kürzlich bin ich dann auf den Cubetto gestoßen, der das gleiche Prinzip mit einem anfassbaren Aufbau umsetzt. In beide Konzepten ist es das Ziel, einen Roboter mit einfachen Befehlen zu programmieren (“ein Feld vorwärts” oder “90-Grad-Drehung nach links”) und damit einen Parcours zu bewältigen. Das inspirierte mich, ebenfalls einen programmierbaren Roboter zu bauen. Zum Cubetto-Projekt sei erwähnt, dass deren Macher eine Anleitung zum Nachbau des Systems frei veröffentlicht haben. Das finde ich eine prima Idee. Meine Maker-Ehre trieb mich aber dennoch an, eine eigene Lösung zu entwickeln. Dieser Post beschreibt den Aufbau des Roboters. Hoffentlich folgt bald noch die Programmierumgebung, die es erlaubt, dem Roboter Leben einzuhauchen (das erinnert mich daran, dass ich mal mein Boot-Projekt zuende bringen muss …).

Der erste Schritt beim Aufbau des Roboters ist die Konstruktion der Bodenplatte, auf der später die Antriebseinheit und die Steuerungselektronik untergebracht werden. In der Bodenplatte sind bereits die Aussparungen für die Räder vorgesehen.

01_bodenplatte

Das Fahrwerk wird aus Bauteilen zusammengesetzt, die aus alten Märklin-Baukästen stammen. Ich hatte mal in einem Anfall von Nostalgie einige Reste von solchen Baukästen günstig bei ebay zusammengekauft. Bisher hatte ich aber noch gar keinen wirklichen Einsatz dafür. Endlich ändert sich das.

02_achsen

Die beiden Räder werden einzeln gesteuert. Damit wird das Kurvenfahren ermöglicht, ohne das eine Lenkung im eigentlichen Sinne umgesetzt werden muss. Das gleiche Prinzip kommt auch bei Raupenfahrzeugen zum Einsatz: Wenn das Vehikel um eine Kurve fahren soll, drehen sich die beiden Achsen gegenläufig, beim Vorwärts- und Rückwärtsfahren drehen sie sich jeweils in die gleiche Richtung. Den Antrieb für die beiden Achsen liefern zwei Mini-DC-Motoren mit integriertem Getriebe.

03_motor

Nun muss noch für die Ansteuerung der beiden Motoren gesorgt werden. Das Gehirn dafür ist ein NodeMCU v3. Das ist im Prinzip eine Kombination aus einem ESP8266-Wifi-Modul und einem Arduino. Man kann also kabellos damit kommunizieren und gleichzeitig hat man diverse Schnittstellen, um weitere Elektronikbauteile anzuflanschen. Die Ansteuerung der beiden Motoren übernimmt auch gleich ein ganz einfaches und günstiges Bauteil: ein HG7881 Motortreiber. Die Programmierung dieses Bauteils über den Arduino ist ein Kinderspiel.

04_elektonik

Zu guter Letzt soll noch eine Möglichkeit integriert werden, damit der Status des Roboters nach außen vermittelt werden kann. Dazu spendiere ich ihm eine grüne LED, die immer leuchtet, wenn die Stromversorgung steht. Außerdem habe ich einen Neopixel-Ring integriert, der lustige Farbspiele zeigen kann, etwa, wenn eine Programmieraufgabe mit dem Roboter erfolgreich absolviert wurde.

08_neopixels[Beispiel-Lichtspiel-Video durch Klick auf das Bild]

Sowohl die grüne LED als auch der Neopixel-Ring werden in den Deckel des Roboters integriert und mit dem NodeMCU verkabelt.

06_leds

Das Gehäuse wird noch durch einen stylischen Wolf belebt und dann kann sich der Roboter auf den Weg machen.

07_ergebnis

Hoffentlich gibt es bald den zweiten Teil dieses Posts, sodass der Roboter auch programmiert und zum Einsatz gebracht werden kann. Aktuell lässt er sich nur über eine kleine Webschnittstelle und einen Browser steuern. Seine Bestimmung wird er aber erst finden, wenn eine kindgerechte Programmierung unterstützt wird.

Ach ja, und nun noch an alle, die denken: “Ein dreijähriges Kind soll Programmieren lernen? Typisch helikopterartige Drill-Tiger-Eltern! Pfui!” Ja. Stimmt. Bau’ ich trotzdem. So.

PS: In Zukunft werde ich auch Code und Schaltzeichnungen/Verkabelungspläne unter GitHub veröffentlichen: https://github.com/pjenke/makerguy

Spielzeug Selber Machen

Kinder lieben Spielzeug. Das ist nun keine bahnbrechende Erkenntnis. Allerdings lieben Kinder nicht immer das gleiche Spielzeug, das auch die Eltern toll finden. Die Rosa-Bunt-Quietsch-Blink-Mafia, die ihre Produkte gerne in Spielwarengeschäften ausstellt, hat beispielweise ein Sortiment, das mich nicht so anspricht. Das Kind soll sich gerne hier und da was davon aussuchen, aber vielleicht lässt sich das ergänzen? Ja, das lässt sich ergänzen: mit DIY-Spielzeug. Das gefällt dem Kind tatsächlich auch, insbesondere, weil man es sogar gemeinsam bauen kann. In den letzten Monaten sind so ein paar Spielzeuge bei uns entstanden von denen ich hier berichten möchte.

Zunächst ist da die Schokoladentafel. Die wird aus Sperrholzresten gemacht. Die einzelnen Stücke werden zurechtgesägt und am Rand ein wenig angeschliffen. Manche Stücke kommen einzeln vor, manche hängen zusammen. Die zusammenhängenden Stücke unterteilt man einfach mit einer kleinen Kerbe. Zuletzt werden die Stücke noch in eine kleine Pappschachtel eingepasst – fertig ist die Schokoladentafel.

schokolade

Von der Schokoladentafel zum Einkaufsladen ist es eigentlich nicht mehr weit. Fehlt nur noch das Zahlungsmittel. Mit der Kinderkasse ist das bargeldlose Zahlen bereits vorgesehen. Vielleicht ist es aber dennoch schön, auch ein paar Münzen klimpern zu lassen. Ein Eierbecher dient als Schablone für etwas Karton-Zuschnitt. Die Scheiben werden beidseitig mit Gold- oder Silberstift angemalt und bekommen ihre Wertzahlen. Los geht’s mit der kapitalistischen Früherziehung!

muenzen

Digitalisierung ist in aller Munde, vielleicht haben wir ja bald alle Haushaltsroboter. Höchste Zeit, dass auch das Kind auf diese Zeit vorbereitet wird. Auch für den Roboter kommen lauter kleine Holzreste zum Einsatz. Der T-förmige Torso zeigt, wie stark der Roboter ist. Die Gliedmaßen und der Kopf werden mit Schrauben am Rumpf befestigt. Dazu werden die Löcher vorgebohrt, damit die einzelnen Teile zueinander beweglich bleiben. Asimov freut sich!

roboter

Das Wasser haben wir ja bereit mit dem Boot erobert. Fehlt noch der Luftraum. Auch hier setzen wir das Fahrzeug aus Holzresten zusammen. Der Rumpf wird aus einer Leiste mit quadratischem Querschnitt gefertigt. Die beiden Enden sind dynamisch und luft-schnittig abgeschrägt. Die Flügel und die Heckflosse werden aus Sperrholz gesägt. Zur Befestigung werden in den Rumpf passende Kerben geschnitten und die Bauteile mit einem kleinen Nagel fixiert. Die Passagiere bekommen einen Gummigurt und nehmen (nicht ganz realitätsgetreu) auf der Maschine Platz.

flugzeug

Das Kind hat neuerdings die Dinosaurier für sich entdeckt. Einem Buch zum Thema ist zu entnehmen, dass man die Knochen der Dinosaurier in der Erde finden kann und einfach ausbuddeln muss. Leider hat eine erste Suche im Garten dieses Versprechen nicht halten können. Als Abhilfe dienen diese beiden Knochenattrappen, die aus Sträucher-Schnitt-Holz entstanden sind. Die können wunderbar in der Sandkiste verbuddelt werden und dann von dem Mini-Archäologen geborgen und natürlich klassifiziert werden (“Tyrannosaurier oder Flugsaurier?” Man weiss es nicht.).

knochen

Zugegeben, all’ das Spielzeug erfährt nicht immer die gleiche Aufmerksamkeit wie das aus der Glitzer-Bunt-Fraktion. Als kleine Ablenkung zwischendrin ist es aber allemal geeignet.

Roboter? Fernsteuerauto?

In der c’t Make habe ich von dem Roboterbausatz der IGS Mühlenberg gelesen. Der hat mich so fasziniert, dass ich ihn gerne bauen wollte. Leider klappte es mit dem 3D Drucker, der mir zur Verfügung stand, nicht, die Bauteile in ausreichender Präzision zu drucken. Aufgeben wollte ich aber auch nicht gleich und habe zufällig mitbekommen, dass Microsoft jetzt auch auf den Maker- und Internet-of-Things-Zug aufspringen will. Na dann mal los.

Auf der Microsoft-Seite zum Thema habe ich die Zeichnung für einen Roboter aus Holz gefunden. Die sieht so aus …

zeichnung… und soll eigentlich mit einer CNC-Fräse geschnitten oder gebrannt werden. Da ich so eine nicht habe (was nicht ist, kann aber noch werden …), musste also die Laubsäge ran. Besonders hat mir gefallen, dass man die Bauteile später stecken kann und nicht etwa schrauben oder kleben muss.

Bevor es an die Laubsägearbeiten geht, muss ich mich um den Antrieb kümmern. Der soll über zwei Servos und nicht wie sonst häufig üblich, über Motoren, erfolgen. Normalerweise haben Servos einen festen Drehwinkel (z.B. -90 Grad bis +90 Grad) und eignen sich damit beispielweise zur Bewegung eines Ruders in einem Schiff. Für den kontinuierlichen Antrieb eines beweglichen Objektes sind sie damit aber zunächst nicht geeignet. Glücklicherweise lassen sich Servos so “modifizieren”, dass sie sich kontinuierlich drehen. Eine schöne Anleitung dazu findet man etwa hier. Da ich die Schritte nur übernommen habe, gebe ich keine vollständige Anleitung sondern lediglich ein paar Impressionen wieder:

servoHat alles geklappt, steuert man nun bei den Servos die Geschwindigkeit und nicht mehr den Stellungswinkel. Der Antrieb des Bots wird über je einen Servo pro Hinterrad gemacht. Wenn man ordentliche Servos hat (ich verwende zweimal den TowerPro MG995), dann bekommt man damit auch ordentlich Schub hin. Die Steuerung hat das gleiche Prinzip wie ein Kettenfahrzeug. Will man beispielsweise nach links lenken, dann dreht man das linke Rad einfach ein wenig langsamer. Vorwärts kommt man, indem beide Räder mit der gleichen Geschwindigkeit drehen. Um stabil zu stehen, benötigt man natürlich noch ein drittes Rad. Das kann aber fix montiert werden und hat kaum Einfluss, weder auf Antrieb noch auf Lenkung.

Bei einem normalen Servo steuert man die Position über die Pulslänge des anliegenden Signals. Dieses Signal muss also kontrolliert erzeugt werden. Auf dem Roboter soll bei mir ein Raspberry Pi die Kontrolle übernehmen. Leider hat der on-board keine Möglichkeit, ein solches Signal zu erzeugen (ein Arduino im Vergleich kann das). Aber, gibt es da nicht auch was von Adafruit? Ja, gibt es: den PCA9685. Der lässt sich als I2C-Gerät mit dem Raspberry Pi verbinden und kann dann bis zu 16 Servos bequem steuern.

servo_controllerDamit ist die Hardware fertig. Vorne und hinten werden in der mobilen Variante (wenn der Roboter frei herumfährt) noch zwei Batterieblöcke angefügt; einer für den Raspberry Pi und einer für die Servos. Der Raspberry Pi verlangt exakt 5V. Dies stelle ich durch das Zwischenschalten eines kleinen Spannungswandlers sicher (Pololu 5V 600mA Step-Down Spannungsregler D24V6F5, gibt es wie viele weitere wunderbare Dinge bei Exp-Tech).

Fertig sind alle Komponenten …

bot_auseinander_gebaut… und so sieht er am Stück aus:

botEin ferngesteuertes Fahrzeug wird es aber natürlich erst, wenn man es auch aus der Ferne steuern kann. Das soll per Smartphone geschehen. Für den Raspberry Pi habe ich dazu zunächst eine Software geschrieben, die den Roboter steuern kann und dazu die Servos geeignet anspricht. Diese Komponente habe ich hinter einem leichtgewichtigen Webserver versteckt und mit einer rudimentären REST-Schnittstelle versehen. Ob es wirklich die optimale Lösung ist, dass man ein ferngesteuertes Fahrzeug per Webschnittstelle steuert, das sei dahingestellt. Für diesen Prototypen reicht es allemal. Für die Steuerung braucht man auf der anderen Seite noch eine App. Das ist eine hervorragende Gelegenheit, sich mal die neue Programmiersprache von Apple dazu anzuschauen: Swift. Erster Eindruck: Prima! Damit habe ich eine iOS-App geschrieben, die primär zwei Slider zur Verfügung stellt, einen für die Geschwindigkeit und einen für die Lenkung.

appBewegt man die Slider, werden die aktuellen Werte an die Webschnittstelle des Bots gesendet und dort für die Ansteuerung der Servos verwendet. Jetzt müssen nur noch der Bot und das Smartphone in ein gemeinsames Netzwerk (z.B. mein WLAN) und es kann losgehen: Bot-Demo-Video.

Webschnittstelle? War da nicht schonmal was? Ja, das ist technologisch das gleiche wie es auch bei meiner Heimautomatisierung zum Einsatz kommt. Und könnte man das nicht so ähnlich auch bei dem halbfertigen Boot machen? Ja, kann man. Und wird man. Stay tuned.