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.

Advertisements

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