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.