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

Advertisements

Zur Kasse bitte!

Mittlerweile habe ich herausgefunden, was die wichtigste Erkenntnis ist, wenn man (kleine?) Kinder hat: alles nur eine Phase! Wir treten demnächst in die nächste Spiel-Phase ein: die Kaufladen-Phase. Ein Kaufladen benötigt natürlich eine Kasse, darum soll es hier gehen.

Vorneweg sei gesagt, dass die Kasse, die ich hier beschreibe, eigentlich alles ist nur keine Kasse für einen Kinderkaufladen. Zumindest im vorgestellten Zustand. Die Kasse lässt sich aber upgraden und das soll später auch geschehen; dann wird es eine richtige Kasse. Aktuell kann man weder Geld ablegen, noch rechnen oder einen Bon generieren. Zunächst ist es mehr ein Kassensystem mit Sonderfunktionen (ohne die eigentlichen Funktionen).

Fangen wir aber mit dem Überblick an:

01_spielzeugkasse

Die Kasse besteht aus einer “Tastatur”, einem Display, einer Kamera-Einheit und einem Lautsprecher, alles eingefasst in ein Holzgehäuse.

Beginnen wir mit der Tastatur. Die atomare Einheit der Tastatur ist die Holztaste (Rundholzstück und Holzplättchen).

02a_taster_holz

Davon werden natürlich mehrere benötigt.

02b_taster

Jede Holztaste sitzt auf einem kleinen Taster auf …

02c_taster_elektro

und diese Taster sind zu einer Zwölfer-Einheit zusammengefasst:

02d_taster_brett

Da das Kassensystem multifunktional werden soll, haben die Tasten keine vordefinierte Bedeutung. Sie könnten unter anderem die Ziffern von 0-9 repräsentieren, müssen sie aber nicht.

Das Herz des Systems ist einmal mehr ein Raspberry Pi. Unter anderem wird jeder der Taster an einen GPIO-Pin angeschlossen.

02e_taster_brett_an_rasppi

Jeder  Taster muss mit einem Widerstand abgesichert werden. Damit das bei zwölf Tastern nicht zu unübersichtlich wird, habe ich die Schaltung auf einem kleinen Lochbrett strukturiert.

taster_schaltung

Die zweite Komponente der Kasse ist eine Kamera. Zum Raspberry Pi passend gibt es bereits eine Kamera, die zusätzlich sehr kompakt ist.

03a_kamera

Mit der Kamera sollen QR-Codes aufgenommen werden (Einscannen von Produkten, die mit der Kasse gekauft werden). Dazu musste ich die Kamera ein wenig bearbeiten (das kann man auch an der Linsenfassung sehen) um den Fokus geeignet anzupassen (wie z.B.  in diesem Video zu sehen). Die Kamera ist etwas sensibel gegenüber schlechten Beleuchtungsverhältnissen. Daher habe ich um die Kamera herum vier LEDs positioniert, die für eine ordentliche Ausleuchtung sorgen.

03b_leds

Auch die LEDs müssen mit Widerständen versehen werden und daher habe ich auch diese Schaltung auf eine Lochplatte gebannt.

leds_schaltung

In das Gehäuse eingebaut sieht es dann so aus:

03c_kamera_leds

Die dritte Komponente ist ein Display. Darauf können beliebige (Text-)Informationen ausgegeben werden. Scannt man beispielsweise den QR-Code eines Produktes, dann können der Name und Preis dazu auf dem Display erscheinen.

04_display

Das Display benötigt 5V wobei die Pins des Raspberry Pi mit 3,3V arbeiten. Daher muss der Anschluss des Displays an den Pi über einen Logik-Kanal-Level-Konverter (unscharf im Hintergrund in rot zu erkennen) überbrückt werden.

Alle Aktionen der Kasse sollen natürlich auch ein Feedback erzeugen und das geht (neben der Textausgabe über das Display) am schönsten über eine Soundausgabe. Daher ist in dem Gehäuse auch ein kleiner Aktivlautsprecher verbaut.

05_lautsprecher

Die Tonqualität des Soundausgangs am Raspberry Pi ist nicht sehr gut, daher wird der Lausprecher über eine USB-Soundkarte angesteuert (hier: Speedlink Vigo).

Damit haben wir alle Komponenten beisammen. Bei den Bauteilen des Gehäuses müssen nun natürlich noch die notwendigen Bohrungen und Auskerbungen vorgenommen werden, dann kann die Kasse zusammengesetzt werden.

06_holzzuschnitt

Im laufenden Betrieb sieht es von vorne so …

07b_in_betrieb

und von innen so aus:

08a_innenleben

Kommen wir aber noch einmal zurück zur tatsächlichen Verwendung des Systems. Die eigentliche Funkion als Kasse ist noch gar nicht umgesetzt, lässt sich aber einfach als Update der Software aufspielen (per WLAN!). In das Fach unten sollte dann aber noch eine Schublade für das Spielgeld eingesetzt werden.

Testweise umgesetzt ist bereits der QR-Scanner, einen Eindruck dazu vermittelt das folgende Video: hier klicken.

Initial ausgeliefert wird die Kasse aber als Musik-Box. Durch den Druck einer Taste wird ein Lied abgespielt. Auch davon kann man sich in einem Video einen Eindruck verschaffen: hier klicken.

Natürlich sind auch noch viele andere Erweiterungen denkbar. Fest eingeplant ist beispielsweise ein Kassenbondrucker.

Damit kann das große Shoppen losgehen. Wenn das Verständnis für Zahlen und Rechenoperationen beim Kind kommt, dann wird auch die Kasse mitwachsen und  hoffentlich ein langfristiger Begleiter im Kaufladen sein.

Der Wecker

Es gibt viele Dinge, die ich nicht über Kinder wusste bevor ich selber eins bekommen habe. Beispielsweise war mir nicht in gebotenem Maße klar, dass Kinder nicht speziell in der Nacht schlafen wollen. Es kommt immer wieder vor, dass das Kind unmittelbar nach dem (selbst bestimmten) frühmorgendlichen Aufstehen mitteilet, dass es jetzt müde sei. Noch häufiger aber versuchen Frau und ich das Kind nachts davon zu überzeugen, dass jetzt Nacht sei und man noch nicht aufstehen könne. Ein Verweis auf “Tag” und “Nacht” über die Attribute “Sonne, hell” und “nicht Sonne, nicht hell” fällt im Winter zunehmend schwer. Dem versuche ich nun Abhilfe zu schaffen: durch einen binären Wecker.

Der Wecker soll also zwei Zustände haben: “Sonne” und “nicht Sonne”. Da das mit Negationen vielleicht nicht so einfach ist, haben wir uns vereinfachend für “Sonne” und “Mond” entschieden. Ich als Informatiker hätte “Sonne” und “!Sonne” bevorzugt. Ersteres repräsentiert den Tag (hier kann man an das Aufstehen denken), zweiteres die Nacht (bitte Augen wieder zu machen). Einen solchen Wecker habe ich also gebaut.

Jetzt gibt es sicher viele Wege, einen Wecker zu bauen. Ich dachte mir, das ist eine prima Möglichkeit, erste Erfahrungen mit einem Arduino zu sammeln. Da das Projekt gleichzeitig möglichst kostengünstig sein sollte, habe ich mich für einen Arduino Nano entschieden. Der übernimmt die Steuerung (Logik) des Weckers. Da der Wecker entweder eine Sonne oder einen Mond anzeigen soll, braucht man zusätzlich zwei LEDs. In einschlägiger Quelle kann man zusätzlich nachlesen, warum zur Ansteuerung jeder LED außerdem ein Widerstand benötigt wird (Pro-Tip: R=U/I).

bauteile

Ein Arduino kann zwar ziemlich viel, aber nicht alles. Beispielsweise kann er sich die Zeit nicht merken. Um dieses Manko zu beheben, habe ich meinen Aufbau um ein Zeit-Bauteil (DS1307, Real-Time Clock) erweitert. Das kann im Prinzip nicht mehr als zählen. Irgendwann muss man ihm die aktuelle Zeit nennen und dann zählt es immer weiter. Durch eine aufgesteckte Batterie zählt es insbesondere auch dann weiter, wenn die Stromversorgung mal unterbrochen sein sollte.

Die Elektronik will natürlich auch getestet werden und so habe ich die einfache Schaltung zunächst auf einen Breadboard zusammengesteckt.

testaufbau

Klappt.

Der Wecker soll natürlich kindgerecht aussehen und bekommt daher einen ordentlichen Holzrahmen.

bauteile_rahmen

Der Rahmen wird verleimt und dient damit als Gehäuse für die Elektronik.

einbau

Das drehen wir aber besser schnell wieder um. Nicht, dass da jemand auf falsche Gedanken kommt. Die Frontseite sieht auch viel freundlicher aus. Die beiden Öffnungen im Gehäuse dienen natürlich dazu, die beiden Symbole “Sonne” und “Mond” zu beleuchten. Das passende Motiv ist schnell aus einem Kinderbuch mit etwas Hilfe durch ein Bildbearbeitungsprogramm zusammengestellt.

motiv

Quelle: Miriam Cordes, Nele Moost: Ein Stern leuchtet für dich, Ravensburger Buchverlag, 2011 (ergänzt durch eigene Illustrationen)

Den Arduino kann man nun auf viele verschiedene Arten programmieren. Die einfachste davon ist die Verwendung der Arduino IDE. Die hat zwar viele Einschränkungen, dafür erzielt man sehr schnell erste Erfolge und kann einfache Projekt (wie dieses hier) sofort und ohne Einstiegshürden umsetzen. Das entwickelte Programm kennt zwei Zustände (Tag und Nacht) und lässt abhängig davon eine der beiden LEDs leuchten. Mit Hilfe einer Start- und einer Endzeit wird zwischen den beiden Zuständen hin- und hergeschaltet.

Fertig ist der Wecker. Nun muss ich ehrlich sein, ganz so einfach (Kind wacht auf – prüft den Wecker – stellt fest, es ist noch Nacht – schläft wieder ein) ist es nicht. Dennoch finde ich es bei einer nächtlichen Diskussion mit dem Kind, ob es nicht schon Zeit zum Aufstehen ist, sehr hilfreich, auf den Wecker (“Da ist ja noch der Mond!”) verweisen zu können und mich nicht nur auf die väterliche Autorität verlassen zu müssen (“Ich sage dir, es ist noch Nacht!”). Mission accomplished.