Die Robo4earth kann auch in der Makecode Entwicklungsumgebung für Micro:bit programmiert werden. Hier können die jungen Programmierer*innen weitere Sensoren oder Aktoren in ihre Programme einbinden und die Robo4earth mit Anweisungsblöcken, Python oder JavaScript programmieren.
Die Robo4earth kann auch in der Makecode Entwicklungsumgebung für Micro:bit programmiert werden. Hier können die jungen Programmierer*innen weitere Sensoren oder Aktoren in ihre Programme einbinden und die Robo4earth mit Anweisungsblöcken, Python oder JavaScript programmieren.
Diese Anleitung versteht sich als Hilfestellung für Fortgeschrittene. Daher werden grundsätzliche Programmierkonzepte wie zum Beispiel
Was ist ein Programm?, Was ist eine Funktion?, Was ist eine Schleife/Bedingung? hier nicht näher erläutert.
Wir stellen eine Makecode Erweiterung für die Programmierung der Robo4earth in der Makecode Entwicklungsumgebung zur Verfügung. Mit der Erweiterung kann man die Motoren der Robo4earth ansteuern und Melodien abspielen. Um die Makecode Erweiterung zu einem Makecode Projekt hinzuzufügen, befolge folgende Schritte:
Importiere die angezeigte Erweiterung, indem du darauf klickst.
Wenn das Laden der Erweiterung erfolgreich war, erscheint danach die Robo4earth Erweiterung in deinen Kategorien. Die Robo4earth Blöcke können dann wie alle anderen Blöcke per Drag & Drop in den Arbeitsbereich gezogen werden.
Programmierbeispiel
In diesem Beispiel-Programm reagiert die Robo4earth auf laute Geräusche. Dafür wird beim Einschalten der Robo4earth ein Schwellenwert für die Lautstärke gesetzt. Wenn es lauter als der Schwellenwert ist schaut die Robo4earth böse und schüttelt sich. Dafür wurde die Funktionschüttel dich erstellt.
Achtung: Beim Programmieren ist es immer besser, keine Umlaute oder Sonderzeichen für Benennungen zu verwenden. Daher wurde der Umlaut ü im Funktionsnamen durch ue ersetzt.
Programmiersprachen Ansicht
Sieh dir den Code in einer Programmiersprache an. Schalte dafür von Blöcke zu JavaScript um, indem du auf JavaScript in der blauen Navigationsleiste am oberen Rand klickst.
Sieh dir den Code in einer Programmiersprache an. Schalte dafür von Blöcke zu JavaScript um, indem du auf JavaScript in der blauen Navigationsleiste am oberen Rand klickst.
Sieh dir den Code auch in Python an. Klicke dafür auf den kleinen Pfeil neben JavaScript und wähle Python aus:
Hat man eine Programmiersprache anstatt der Blöcke ausgewählt, kann man sich die Funktionsblöcke genauer ansehen. Wenn man auf einen Block in der Kategorie klickt, wird der jeweilige Funktionsaufruf angezeigt und genaue Beschreibungen der Funktionsparameter.
Die Funktion fahre in Richtung direction mit Tempo speed für seconds Sekunden , wird mit roboearth.drive(direction, speed, seconds) aufgerufen. Die Eingangsparameter direction, speed und seconds werden nachfolgend genau erklärt.
Autovervollständigung
Beim Programmieren in Python oder JavaScript hilft die praktische Autovervollständigung. Wenn man anfängt zu tippen, zeigt diese an, welche Funktionen es gibt, die so anfangen. Man kann dann aus der Liste der angezeigten Funktionen auswählen.
Ebenso werden die voreingestellten Parameter-Eingaben angezeigt, wenn man eine Funktion ausgewählt hat. Man muss die Parameter dann nur mehr für die eigenen Zwecke anpassen.
Programm ausführen
Simulation
Programm laden
Mit MakeCode verbinden
Dateinamen ändern
Simulation
Auf der linken Seite der Make:code Entwicklungsumgebung wird ein Micro:bit angezeigt. Wenn du ein Programm erstellt hast, wird hier automatisch eine Simulation dafür erstellt.
In unserem Beispiel wird ein Lautstärke Schwellenwert gesetzt. Deshalb wird in der Simulation ein Balken mit einem leuchtenden Mikrofon Symbol angezeigt.
Wenn die Simulation läuft, wird der Micro:bit farbig, sonst ist er grau. Drücke während der Simulation die Knöpfe am (virtuellen) Micro:bit oder verschiebe den Pegel des Lautstärke-Balkens und schau, was passiert. Die Motorfunktionen kannst du anhand der rot angezeigten Pins kontrollieren. An diesen liegt eine Spannung an, wenn sie rot angezeigt werden.
Nachdem du das Programm ausgiebig in der Simulation getestet hast, kannst du es auf den echten Micro:bit laden.
Programm auf Micro:bit laden
Erstellte Programme werden aus der Makecode Entwicklungsumgebung als HEX Datei heruntergeladen und auf den Micro:bit geladen. Befolge dafür folgende Schritte:
Klicke auf den violetten Herunterladen-Button in der linken unteren Ecke des Makecode Fensters.
Schließe den Micro:bit per USB-Kabel (Micro B) am Computer an.
Der Micro:bit wird als externes Laufwerk im File Explorer angezeigt.
Ziehe die HEX Datei aus deinem Download-Ordner per Drag & Drop auf das Micro:bit Laufwerk und lasse es los.
Alternativ kannst du auf Windows per Rechtsklick auf die HEX Datei klicken. Dann senden an auswählen und das microbit(Laufwerk:) auswählen.
Micro:bit mit MakeCode verbinden
Man kann den Micro:bit auch direkt mit Makecode verbinden. Dies ist vor allem sinnvoll für den Einsatz in der Schule. Wenn du deinen Micro:bit verbunden hast, wird das Programm beim Drücken auf Herunterladen direkt auf den Micro:bit geladen.
Um deinen Micro:bit mit Makecode zu verbinden, klicke auf die drei Punkte neben dem Herunterladen Button und wähle Gerät verbinden aus. Folge danach den Anweisungen in den Pop-Up Fenstern.
Dateinamen ändern
Der Dateiname der geladenen HEX-Datei setzt sich aus dem Präfix "microbit-" und dem Namen des erstellten Programms zusammen. Leerzeichen werden durch Bindestriche ersetzt. Im gezeigten Beispiel heißt das Programm test all. Die geladene HEX Datei heißt microbit-test-all.hex.
Wenn du den Namen des Programms ändern willst, schreibe den neuen Namen in das weiße Eingabefeld neben dem violetten Herunterladen-Button. Dann speichere das Programm mit einem Klick auf das blaue Disketten-Symbol.
Für Fortgeschrittene
Funktionen
Beispielfunktion
Variablen
Funktionen
Um das Programm übersichtlicher zu machen und sich das Suchen von Fehlern zu erleichtern, sollte man Funktionen für Code erstellen. Das bietet sich vor allem an, wenn derselbe Code öfter im Programm wiederholt wird. Die erstellten Funktionen kann man an den benötigten Stellen im Code aufrufen.
Um eine Funktion zu erstellen, klicke auf die Kategorie Fortgeschritten. Klicke dann auf die dunkelblaue Kategorie Funktionen und auf Funktion erstellen.
Um Parameter (Eingabewerte) zur Funktion hinzuzufügen, klicke auf den gewünschten Datentyp (Text, Bool, Zahl,...).
Der Funktionsname soll zeigen, was die Funktion macht, zum Beispiel “zählePunkte” oder “stoppeMotoren”. Schreibe den Namen anstatt macheEtwas in den Funktionsblock. Funktionsnamen sollten keine Leerzeichen, Sonderzeichen oder Umlaute haben. Üblicherweise wird für Funktionsnamen die Camelcase Schreibweise benutzt (kleinAmAnfangDannGroßbuchstabenAmWortanfang) oder die Snake Case Schreibweise (alles_klein_und_durch_unterstriche_getrennt). Du kannst dir aussuchen, was dir besser gefällt und bleibe dann wenn möglich bei einer Variante.
Um deine Funktion aufzurufen, klicke mit Rechtsklick auf die Funktion im Programmbereich und wähle “Erstelle Aufruf Funktionsname” ganz unten. Du bekommst dann einen Funktionsbaustein, den du in dein Programm einbauen kannst. Alternativ kannst du den Aufruf-Block deiner Funktion aus der Kategorie Funktionen in den Programmierbereich ziehen.
Funktionen kann man mit Pfeilen auf- und zuklappen. Damit kannst du sie platzsparend am Bildschirm anordnen.
Beispielfunktion
Es wurde die Funktion schuettle_dich_so_oft erstellt. Der Name zeigt an, dass sich die Robo4earth schüttelt und dass die eingegebene Zahl die Wiederholungen vorgibt. Den Parameter (num = eine Zahl) kann man per Drag & Drop innerhalb der Funktion einsetzen, hier wurde er für die Wiederholung in der Schleife eingesetzt.
Beim Aufruf der Funktion kannst du die gewünschten Werte als Parameter einsetzen. Hier wurde 2 statt 1 in den Funktionsaufruf geschrieben. Der Roboter schüttelt sich also zweimal und schaut böse wenn es zu laut ist.
Variablen
Für das Programmieren von Sensoren und Aktoren sind Variablen sehr praktisch. In diesen können Werte und Zustände gespeichert werden. Das Programm wird durch den Einsatz von Variablen weniger anfällig für Fehler und verständlicher. Unter der roten Kategorie Variablen können eigene Variablen erstellt werden. Die erstellten Variablen können wie Werte (abgerundete Blöcke) im Programm eingesetzt werden oder mit den beiden Bausteinen setze variable auf und ändere variable um bearbeitet werden.
Im ersten Beispiel wird die Variable hindernisErkannt verwendet, um den Sensorwert eines Infrarotsensors zu speichern und anzuzeigen. Der Sensor gibt 0 aus, wenn ein Hindernis erkannt wird. In der Programmierung steht 0 auch für False (Falsch) und 1 für True (Wahr). Daher wird in der Variable hindernisErkannt eine 1 gespeichert wenn ein Hindernis erkannt wird und eine 0 wenn der Weg frei ist.
Eine Variable kann zum Beispiel auch als Zähler eingesetzt werden. Das ist sehr praktisch bei der Programmierung von Punkteständen in Spielen oder zum Herunterzählen von Leben (ändere variable um -1).
Mikrocontroller (MC) programmieren
MC programmieren
Ereignisse
Signale
Aktoren & Sensoren
Ext. Aktoren & Sensoren
Mikrocontroller programmieren
Bei der Programmierung von Mikrocontrollern ist zu beachten, dass es im Gegensatz zu einem “normalen” Computerprogramm kein Programmende gibt. Stattdessen gibt es meistens eine optionale Setup-Funktion, die zum Start ausgeführt wird und ein Hauptprogramm, welches in Dauerschleife wiederholt wird. In Makecode gibt es dafür die Bausteine beim Start und dauerhaft in der hellblauen Kategorie Grundlagen.
In der Setup Funktion werden Variablen initialisiert und Sensoren kalibriert sowie Motoren, wenn nötig, in die richtige Ausgangsposition gebracht. Man kann auch ein Bild anzeigen oder einen Klang zur Begrüßung abspielen. Daran kann man beim Einschalten erkennen, ob das Programm gestartet wurde und es ist praktisch, um zu kontrollieren, ob das richtige Programm am Micro:bit läuft.
Die Dauerschleife wird immer wiederholt, solange der Mikrocontroller Strom bekommt. In der Dauerschleife kann der Mikrocontroller auf Eingangssignale reagieren oder Werte einlesen und verarbeiten. Man sollte darauf achten, dass nur zuvor initialisierte Variablen hier verwendet werden. Sonst könnte es passieren, dass ein Roboter beim Einschalten sofort losfährt, was zu Verletzungen und der Beschädigung von Bauteilen führen kann.
Die Makecode IDE bietet eine Micro:bit Simulation. Man sollte diese Simulation nach jeder Änderung im Programm nutzen, und ein erstelltes Programm immer ausreichend testen, bevor man es auf den Mikro:bit lädt.
In dem gezeigten Beispielprogramm zeigt der Micro:bit beim Starten ein Bild für 2 Sekunden an. In der Dauerschleife reagiert er auf die Knöpfe A und B.
Ereignisse
Es gibt die Möglichkeit, Ereignisse (Events) zu generieren, auf die das Programm reagiert. Ein Ereignis kann zum Beispiel das Drücken eines Knopfes sein oder ein bestimmtes Eingangssignal eines Sensors. Die sogenannten Event-Handler sind Funktionen, die auf ein Ereignis reagieren. Diese können außerhalb der Dauerschleife definiert werden und werden immer dann ausgeführt, wenn das jeweilige Ereignis eintrifft. In dem folgenden Beispielcode wurde die Dauerschleife durch Event-Handler ersetzt. Diese sind pinke Bausteine aus der Kategorie Eingabe, welche keine Kerbe oben und unten haben (Stand-Alone Funktionen wie “beim Start” und “dauerhaft”).
Signale
Mit Sensoren kann sich der Roboter im Raum lokalisieren und er kann die Welt um sich herum wahrnehmen, mit Aktoren kann er etwas tun, Dinge um sich herum manipulieren oder sich bewegen. Sensoren liefern Input-Signale, Aktoren werden durch Output-Signale gesteuert. Die Anschlüsse für Ein- und Ausgangssignale am Mikrocontroller nennt man “Pins”. Ein Signal kann entweder digital oder analog sein.
Ein digitales Signal hat genau zwei mögliche Zustände: 1 und 0 bzw. An und Aus. Ein Beispiel für ein digitales Eingangssignal ist zum Beispiel ein Schalter. Ein Beispiel für ein digitales Ausgangssignal ist zum Beispiel das Ein-/und Ausschalten einer LED. Du kannst zum Beispiel das Eingangssignal eines Schalters verwenden, um eine LED ein- und auszuschalten.
Bei einem Mikrocontroller zeigt ein digitales Signal an, ob Spannung an einem Pin anliegt (1) oder nicht (0).
Ein analoges Signal nimmt kontinuierlich Werte innerhalb eines bestimmten Intervalls ein. Das kann zum Beispiel bei einem Sensor die Temperatur von –30°C bis +60°C sein oder der Abstand zu einem Hindernis in cm (von 3cm bis 300cm zum Beispiel). Mit einem analogen Ausgangssignal kann man zum Beispiel die Geschwindigkeit von Motoren steuern oder eine LED dimmen.
Am Micro:bit liegt bei einem analogen Signal eine Spannung zwischen 0V und 3V an. Diese Eingangsspannung wird in eine Zahl zwischen 0 und 1023 umgewandelt, welche im Programm weiterverarbeitet werden kann. Umgekehrt muss ein Ausgangssignal an einen Aktor als Zahl zwischen 0 und 1023 ausgegeben werden. Diese Zahl wird vom Micro:bit in eine Spannung von 0V bis 3V umgewandelt, die dann am entsprechenden Pin anliegt.
Micro:bit Aktoren & Sensoren
Der Micro:bit hat eine 5x5 LED-Matrix, die auch als Lichtsensor programmiert werden kann. Ebenso hat der Micro:bit ein Mikrofon und seit Version 2 auch einen eingebauten Lautsprecher. 2 programmierbare Buttons A und B und ein kapazitiver Berührungssensor im Micro:bit Logo (ab Version 2) sind ebenfalls integriert. Der Micro:bit enthält weiters einen Bewegungssensor inklusive Beschleunigungssensor und Kompass und einen Temperatursensor. Die Onboard Sensoren können mit den Blöcken der pinken Kategorie Eingabe verwendet werden. Für die Audioausgabe und die LED-Matrix gibt es eigene Kategorien Musik und LED.
Externe Aktoren & Sensoren
Um externe Aktoren oder Sensoren einzubinden, kann man die Bausteine der fortgeschrittenen Kategorie Pins verwenden. Dazu kannst du dir auf unserer Website unter Tutorials mehr Infos holen und Anleitungen ansehen.
Kennst du schon unsere Robo4earth (Progressive) Web App? - Hier findest du mehr Infos zum Programmieren mit unserer App!
Nützliche Links
🇩🇪 Deutsche Quellen
Hier findest du eine kleine Sammlung von Links, die wir Tüftler*innen empfehlen, die daran interessiert sind, mehr aus ihrem Micro:bit herauszuholen.