Funduino Calle – Fahrroboter für den Unterricht

FunduinoZuletzt aktualisiert am

Linienverfolger, Ultraschall und NeoPixel mit MakeCode

Der Fahrroboter Calle wird mit dem Calliope mini V3 gesteuert. Programmiert wird er grafisch in MakeCode – du steckst die Blöcke im Browser zusammen und überträgst das Programm per USB auf den Calliope.

Die Anleitung führt dich durch alle Funktionen des Roboters:

  • Motoren ansteuern und vorwärts, rückwärts und im Kreis fahren
  • Scheinwerfer und NeoPixel-LEDs schalten
  • Einer Linie folgen mit den beiden Liniensensoren
  • Hindernissen ausweichen mit dem Ultraschallsensor

Vorkenntnisse brauchst du keine. Jeder Abschnitt beginnt mit einem kurzen Erklärstück und endet mit einem fertigen Beispielprogramm zum Nachbauen.

Fahrroboter Calle mit aufgestecktem Calliope mini V3
Calle mit Calliope mini V3

Aufbau: die Antriebsräder

Der Aufbau von Calle ist recht leicht: Es müssen nur die beiden Antriebsräder und die vordere Laufrolle montiert werden. Vorher brichst du die seitlichen Platinenränder mit der Hand ab – sie werden nur bei der Produktion für die Stabilität gebraucht.

Die Motoren bringst du mit den weißen Halterungen an der Unterseite an. Achte darauf, dass der überstehende Teil der Halterung und die Achse des Motors nach außen zeigen.

Die Kabel der beiden Motoren führst du durch die Öffnung in der Platine auf die Oberseite und steckst die JST-Stecker in die dafür vorgesehenen Buchsen. Die Ausrichtung der schwarzen und roten Kabel ist dabei egal, da die Stecker nur in einer Ausrichtung passen.

Motoren mit den weißen Halterungen an der Unterseite montiert
Antriebsmotoren montieren
JST-Stecker der Motoren in den Buchsen auf der Oberseite
Motorstecker einstecken
1 / 2

Aufbau: Laufrolle und Komponenten

Die vordere Laufrolle funktioniert wie ein Stützrad und übernimmt alle Bewegungen, die die beiden Antriebsmotoren auslösen.

Zwischen Laufrolle und Platine befestigst du mit zwei kurzen Nylonschrauben zwei Hexagon-Abstandshalter. Diese bringen die Laufrolle auf eine Höhe, die zu den Antriebsrädern passt. Danach befestigst du die Rolle unter der Platine, indem du zwei weitere Schrauben von der Oberseite durch die vorgesehenen Löcher steckst und in den Abstandshaltern verschraubst.

Die übrigen Komponenten – die Linetracking-Sensoren und der Ultraschallsensor – werden abschließend auf der Oberseite der Platine eingesteckt.

Ein MakeCode-Projekt erstellen

Programmiert wird Calle über die MakeCode IDE. Wenn du noch nie mit einem Calliope gearbeitet hast, solltest du dich zuerst damit vertraut machen.

Ein neues Programm heißt in MakeCode „Projekt“. Du klickst auf „Neues Projekt“, gibst ihm einen Namen – in diesem Beispiel „Calle“ – und klickst auf „Erstelle“. Da Calle für den Calliope mini V3 gebaut ist, wählst du diesen Mikrocontroller aus.

Links siehst du den ausgewählten Controller, daneben die Programmblöcke. Im großen mittleren Bereich liegen bereits die Blöcke „beim Start“ und „dauerhaft“ – die sind standardmäßig vorhanden.

MakeCode-Oberfläche mit den Blöcken beim Start und dauerhaft
Die Programmieroberfläche

Praxisaufgabe: die Frontscheinwerfer schalten

Aufgabe: Die beiden Scheinwerfer von Calle sollen über die Knöpfe A und B ein- und ausgeschaltet werden. Es handelt sich um zwei LEDs, die beide am Pin C12 des Calliope angeschlossen sind.

Ohne Programmierung hat der Kontakt C12 den Status „0“ – es liegt keine Spannung an und die LEDs leuchten nicht. Mit dem Block „schreibe digitalen Wert von Pin C12 auf 1“ änderst du den Status auf „1“, und der Calliope gibt an diesem Kontakt 3,3 V aus.

Du gehst auf Fortgeschritten → Pins, wählst in der Digital-Sektion „schreibe digitalen Wert von Pin P0 auf 0“ und stellst den Pin auf C12. Diesen Block duplizierst du: bei Knopf A auf 1, bei Knopf B auf 0.

Danach klickst du auf „Herunterladen“, steckst das Kabel an Calliope und Computer, klickst auf „Weiter“ und dann auf „Koppeln“. Im Popup wählst du den Calliope aus – jetzt bist du verbunden.

Klappt das Verbinden nicht, liegt es meist am Browser: Safari, Firefox und Internet Explorer unterstützen WebUSB nicht. Chrome, Edge und Opera dagegen schon.

Programm: C12 bei Knopf A auf 1, bei Knopf B auf 0
Scheinwerfer über Knopf A und B
Popup mit dem verbundenen Calliope
Der Calliope ist verbunden
1 / 2

Linienverfolger: die Sensorwerte lesen

Die Liniensensoren geben eine Spannung aus – oder eben nicht –, je nachdem, ob sie einen hellen Untergrund oder eine dunkle Linie erkennen.

Um den Messwert weiterzuverwenden, brauchst du einen Speicherplatz: eine Variable. Über Variablen → Erstelle eine Variable legst du eine Variable mit dem Namen „LinienVerfolgerLinks“ an. Den Block „setze LinienVerfolgerLinks auf 0“ ziehst du in den Block „dauerhaft“.

Dann klickst du auf Fortgeschritten → Digital, ziehst „digitale Werte von Pin P0“ an die Stelle der „0“ und änderst den Kontakt auf C15.

Damit du siehst, was der Sensor meldet, ergänzt du aus den Grundlagen den Block „zeige Text“ und tauschst den vorgegebenen Text gegen die Variable aus. Nach dem Hochladen erscheint auf der LED-Matrix eine „0“ oder eine „1“.

Der Artikel sagt an einer Stelle, das Signal „1“ entspreche hellem Untergrund, und ein Kapitel später, der Sensor gebe „1“ aus, wenn er eine Linie sieht. Beides zusammen geht nicht – prüfe die Bedeutung an deinem eigenen Aufbau nach.

Programmblock digitale Werte von Pin auf C15 gesetzt
Sensor am Kontakt C15 abfragen
Programm: Sensorwert über zeige Text auf der LED-Matrix ausgeben
Sensorwert auf der Matrix anzeigen
1 / 2

Linienverfolger: die Motoren steuern

Das Prinzip der Linienverfolgung ist einfach: Kommt Calle nach links von der Linie ab, soll sich der linke Motor stärker drehen – dann fährt der Roboter eine Rechtskurve. Kommt er nach rechts ab, dreht sich der rechte Motor stärker.

Bei zwei Sensoren gibt es vier Fälle: beide hell, beide dunkel, links dunkel und rechts hell, links hell und rechts dunkel. Erkennen beide Sensoren „dunkel“, steht der Roboter mitten auf der Linie und kann Vollgas geben.

Für die Programmierung legst du zwei Variablen an, „LinienVerfolgerLinks“ und „LinienVerfolgerRechts“, und befüllst sie mit den digitalen Werten der Kontakte C14 und C15. Aus dem Bereich Logik nimmst du „wenn wahr dann ansonsten“ und erweiterst den Block zweimal über das Plus-Symbol. Die vier Fälle prüfst du mit je zwei Vergleichen, die du über „und“ verknüpfst.

Die Motorsteuerung ist in MakeCode bereits enthalten: Der rechte Motor ist M0, der linke M1.

Wenn das Programm läuft, die Sensoren aber nicht reagieren, sind sie vermutlich nicht richtig kalibriert. An den Sensoren sitzt eine blaue Box, die du mit einem Schraubendreher einstellen kannst. Stelle Calle dazu über die Linie und justiere so, dass der Sensor genau an der Schwelle zwischen an und aus arbeitet.

Verschachtelte wenn-dann-Bedingungen für beide Liniensensoren
Das Bedingungsgerüst
Fertiges Linienverfolger-Programm mit Motoransteuerung
Das fertige Linienverfolger-Programm
1 / 2

Entfernung messen mit dem Ultraschallsensor

An Calles Vorderseite sitzt ein Modul mit zwei Zylindern, das aussieht wie zwei Augen. Es ist ein Ultraschallsensor.

Er arbeitet wie eine Fledermaus: Er sendet Ultraschallwellen aus, die von Objekten reflektiert werden und wie ein Echo zurückkommen. Aus der Zeit, die die Welle unterwegs war, berechnet der Calliope die Entfernung.

Externe Module sind in MakeCode nicht von Haus aus enthalten. Du klickst auf „Erweiterungen“ und gibst in die Suchleiste den direkten Link zur Bibliothek ein: github.com/Funduino-GmbH/RCW0001

Nach dem Klick auf die Karte „RCW-0001“ erscheint eine neue Rubrik mit einem einzigen Block: „Ultraschallsensor (in cm) trigger auf C8 und echo auf C9“.

Um die Distanz anzuzeigen, ziehst du aus den Grundlagen „zeige Zahl 0“ in den Block „dauerhaft“ und tauschst die „0“ gegen den Ultraschall-Block aus.

Programmblock Ultraschallsensor mit Trigger C8 und Echo C9
Der Ultraschall-Block
Programm: gemessene Distanz über zeige Zahl ausgeben
Distanz auf der Matrix anzeigen
1 / 2

Messwerte über die serielle Kommunikation ausgeben

Die Anzeige auf der LED-Matrix hat einen Nachteil: Es dauert eine ganze Weile, bis die Zahl durchgelaufen ist, und erst danach läuft das Programm weiter. Wenn Daten schnell verarbeitet werden sollen, sind „zeige Zahl“ und „zeige Text“ nicht gut geeignet.

Stattdessen nutzt du die serielle Kommunikation. Unter Fortgeschritten → Seriell setzt du den Block „seriell umleiten auf USB“ in den Block „beim Start“ und „seriell Zeile ausgeben“ in „dauerhaft“. Nach dem Herunterladen erscheint links auf der Webseite eine neue Option, über die du die Messwerte siehst.

Damit du die Werte weiterverwenden kannst, legst du eine Variable „Distanz“ an, setzt den Ultraschall-Block in „setze Distanz auf 0“ und die Variable in die serielle Ausgabe. So kannst du die Daten auslesen und parallel weitere Programmblöcke arbeiten lassen.

Programm: Distanz in einer Variablen speichern und seriell ausgeben
Distanz seriell ausgeben

Abhängigkeiten programmieren

Jetzt spielst du in Abhängigkeit von der gemessenen Entfernung einen Ton ab. Eine solche Abhängigkeit heißt in der Informatik „If-Abfrage“ oder „Wenn-Dann-Funktion“.

Aus der Kategorie Logik nimmst du „wenn wahr dann“, aus der Kategorie Ton den Block „spiele Note … für …“ und aus Logik zusätzlich den „Größer als“-Vergleich. Diese Blöcke setzt du zusammen.

Zum Erweitern klickst du auf das Plus im dunkelgrünen Block: Calle soll vorwärts fahren, wenn die Distanz über 30 liegt, und stoppen, wenn sie kleiner ist. Aus der Kategorie Motoren nimmst du den Block „Motor“ und stellst ihn von M0 auf M0 & M1 um. Unter 30 setzt du den Wert auf 0, ansonsten auf 50 Prozent, damit Calle nicht zu schnell fährt.

Vollständiges Programm: fahren ab 30 cm, sonst stoppen
Das vollständige Programm

NeoPixel ansteuern

Calle hat sechs besondere Lichtquellen: intelligente LEDs vom Typ WS2812, oft auch NeoPixel genannt. Sie können in tausenden Farben leuchten, und mehrere hundert von ihnen teilen sich eine einzige Datenleitung.

Bei Calle werden zwei Kontakte verwendet: P2 steuert die drei LEDs auf der rechten Seite an, P3 die drei auf der linken.

Über „Erweiterungen“ suchst du nach „NeoPixel“ und installierst die Bibliothek. Danach klickst du in der neuen Kategorie auf „Setze strip auf NeoPixels an Pin P0 …“ und stellst den Pin auf P2. Für die linke Seite legst du eine zweite Variable an – wir nennen sie „strip2“ – und stellst sie auf P3.

Mit dem Block „zeige Farbe“ legst du die Farbe fest. Damit die Farben nicht zu schnell wechseln, fügst du aus den Grundlagen „pausiere (ms) 1000“ ein.

Einzeln ansteuern kannst du die LEDs über NeoPixel → mehr mit dem Block „strip setze Farbe von NeoPixel 0 auf rot“. Die Nummerierung läuft auf beiden Seiten von 0 ganz vorne bis 2 ganz hinten.

Zwei NeoPixel-Streifen strip an P2 und strip2 an P3
Beide LED-Seiten anlegen
Programm: NeoPixel einzeln in Blau, Grün und Rot setzen
Die LEDs einzeln ansteuern
Nummerierung der NeoPixel von 0 vorne bis 2 hinten, Draufsicht
Die Nummerierung der Pixel
1 / 3
Anleitung bewerten

Kommentare

Frage stellen oder Erfahrung teilen

Schreib uns, wenn etwas nicht funktioniert. Nenne dabei dein Board und die Fehlermeldung.

Wir prüfen jeden Kommentar vor der Veröffentlichung. Deine E-Mail-Adresse bleibt bei uns.