

Das hier beschriebene Fahrzeug ist mit einem Sensor ausgestattet, der Schwarz von Weiß unterscheiden kann. Mit diesem Sensor und einer passenden Programmierung ist das Fahrzeug in der Lage, Richtungskorrekturen vorzunehmen, entweder nach rechts oder links. Es kann so – richtungsgebunden – einer Kreislinie folgen.
Um solchen Einschränkungen zu begegnen, werden Linienfolger üblicherweise mit mindestens zwei Sensoren ausgestattet, also einer für jeden der beiden Motoren. Und das funktioniert dann so: Wenn die Linie (ein relativ breiter schwarzer Pfad) genau zwischen den Sensoren liegt, laufen beide Motoren und das Fahrzeug fährt geradeaus. Kommt ein Sensor über Schwarz, wird der jeweiligen Motor kurz gestoppt und so die Fahrtrichtung geändert: Ein Motorstopp korrigiert nach links, der andere nach rechts. Somit kann die Richtung frei gewählt und die Linie muss nicht zum Kreis gebunden sein.
Diese Umstände wecken möglicherweise das Interesse, das im Folgenden beschriebene Fahrzeug mit einem zweiten Sensor auszustatten und die Programmierung entsprechend zu erweitern.

Bei dem hier verwendeten Sensor handelt es sich um einen QTR-1A, der wie folgt mit dem Calliope mini verbunden wird:

GND am Sensor wird mit GND, VCC mit VCC und OUT mit Pin C16 verbunden.

Für die Programmierung ist es nötig eine Variable zu erzeugen. Dazu wird im MakeCode-Editor auf die Kategorie „Variablen“ und in dem sich öffnenden Menü auf „Erstelle eine Variable…“ geklickt.

Als Name ist hier „hell“ gewählt worden. Dieser Baustein und zwei weitere finden sich nach dieser Aktion im Auswahlmenü.

Für dieses Projekt gebraucht werden „hell“ und „setze hell auf“.
Auch Logik-Bausteine werden benötigt, nämlich ein „wenn – dann – ansonsten“ Block und unter „Vergleich“ ein „0 < 0“ Block. Die Abbildung unten zeigt alle bis hierher genannten Bausteine.

Der „setze hell auf 0“ Baustein wird als erster unter „dauerhaft“ eingefügt. Darunter folgt der „wenn – dann – ansonsten“ Block. Darin – und zwar in das Feld mit der Bezeichnung „wahr“- fügt sich der „0 < 0“ Block. Die folgende Abbildung zeigt dieses Zwischenergebnis.

Danach muss die Variable „hell“ in das linke weiße Feld des „wenn – dann – ansonsten“ Blocks eingefügt werden. Anschließend wird über das kleine weiße Dreieck das Zeichen „<“ auf „>“ geändert und die „0“ im rechten weißen Feld auf „500“ gesetzt werden. Hier das Ergebnis dieser Aktionen.

Der vorletzte etwas schwieriger zuzuordnende Block findet sich unter „Fortgeschritten“ und „Pins“ als dritter von oben „analoge Werte von Pin P0“. Er wird im Block „setzte hell auf“ in das weiße Feld eingefügt.

Schließlich wird über das weiße Dreieck hinter „P0“ der Pin „C16 (A1 RX) ausgewählt.

Die übrigen Schritte sollten sich aus der folgenden Abbildung des kompletten Programmcodes ergeben.

Die gleiche Sache in JavaScript.
let hell = 0
basic.forever(function () {
hell = pins.analogReadPin(AnalogReadWritePin.C16)
if (hell > 500) {
motors.dualMotorPower(Motor.M0_M1, 50)
} else {
motors.dualMotorPower(Motor.M0, 0)
}
})
So wird festgelegt, dass „hell“ die Messwerte annehmen soll, die vom Sensor über „Pin C16“ abgegriffen werden. Die Werte können zwischen 0 und 1023 variieren. Ist der Untergrund hell, ist der Wert hoch, ist er dunkel, ist er deutlich kleiner. In der „wenn – dann – ansonsten“ Bedingung ist ein Schwellenwert von 500 vorgegeben. Ist der Wert größer als 500, dann laufen beide Motoren, fällt er unter 500, bleibt Motor M0 stehen.
Den Reflexionssensor gibt es hier zu kaufen.
