Nützliche Hilfsprogramme für den ROBOprogy
Akustische + optische Meldungen
Wenn der Roboter in eine Situation gerät, in der er stoppen muss, sollte man durch ein akustisches Signal die Ursache mitgeteilt bekommen. Man lernt sehr schnell, was es bedeutet, wenn es dreimal piepst. Das folgende Programm nimmt eine Zahl, beispielsweise 3, vom Stack und piepst entsprechend oft.
: MOTZ { n -- } 0 mmgo \ Zuerst alle Motore stoppen
0 \ Startwert der Wiederholung; n ist Anzahl der Beeps (liegt bereits auf
dem Stack)
do beep 150 ms loop ;
Man kann auch am Ausgang P1 eine LED anschließen (Vorwiderstand nicht vergessen!) und diese blinken lassen:
: BLINK { n -- } 0 \ n ist Blinkerzahl
do p1on 200 ms p1off 200 ms loop ;
Bei manchen Wettbewerben wird verlangt, dass der Roboter ein Notaus-Relais besitzt, das die Stromzufuhr zu allen Motoren zuverlässig unterbricht. Dieses Relais muss aber nach dem Einschalten der Batterie zunächst aus sein. Der Schalter zum Starten und Stoppen des Programms darf damit keine Verbindung haben. In der Hektik des Wettbewerbs passiert es aber leider oft, dieses Notaus-Relais einzuschalten, bevor das Programm gestartet wird. Dann läuft zwar die Elektronik, es bewegt sich aber kein Motor. Da ist es überaus sinnvoll, dass das Programm den Schaltzustand des Relais überwacht und den Fehler meldet. Folgende Schaltung hat sich bewährt:

In Serie zur Relaisspule liegt ein Thyristor, der zunächst isoliert. Deshalb ist die Motor-Zuleitung unterbrochen und der Transistor rechts ist durchgeschaltet. Dessen Kollektor ist mit dem Digitaleingang 1IN des ROBOprogy verbunden und wirkt wie ein geschlossener Schalter. Ein Abfrage von 1IN am Programmstart ergibt also den Wert 255 (oder TRUE). Wenn man nun den ROBOprogy motzen lässt, weiss man sofort: Zuerst Motor-Relais aktivieren! Bei zwei Motoren benötigt man ein Relais mit zwei getrennten Ein-Kontakten. Anders geht es nicht wegen der Brückenschaltung in den Motor-ICs L293D.
Drückt man nun auf die Bereitschaftstaste (links), „zündet“ der Thyristor und bleibt an. Die Relaisspule bekommt Strom und der Motor ist betriebsbereit – man muss nur noch den Befehl 22 MMGO geben. Durch den stromführenden Thyristor sinkt die Basis-Emitter-Spannung des Transistors unter 0,5 V und der Transistor isoliert. Fragt man nun den Eingang 1IN ab, so meldet dieser den Wert 0 (oder FALSE). Als Transistor kann ein beliebiger NPN-Typ verwendet werden.
Hier das dazugehörige Programm MOT_EIN?
: MOT_EIN? { -- f }
1in \ vom Relais
if 5 motz cr TEXT Motor_aus 0 \ wird zum PC gesendet
else 255
then ;
Dieses Programm hinterlässt auf dem DatenStack einen Wert:
Dieses Programm sollte immer am Anfang des Hauptprogrammes stehen. Nur wenn es den Wert 255 auf dem Stack hinterlässt, darf das Hauptprogramm folgen. Der Text "Motor_aus" wird blind über den COM-Port zum PC gesendet. Dieser sollte während der Erprobungsphase immer angeschlossen bleiben. Der PC muss aber nicht angeschlossen sein.
Betätigt man den Not-Aus-Schalter, der am höchsten Punkt des Roboters montiert sein sollte, wird der Haltestrom des Thyristors kurzzeitig unterschritten, dieser isoliert wieder und das Relais unterbricht die Stromzufuhr des Motors (Bei manchen Thyristoren muss man den Wert des Elkos vor dem Not-Aus-Schalter auf 50 Mikrofarad erhöhen).
Einen Roboter sollte man nicht „auf gut Glück“ und ohne jede Kontrolle fahren lassen, denn wahrscheinlich wird er irgendwo anrempeln oder sich mit seinem Gegner auf dem Spielfeld verhaken. In beiden Fällen wird mindestens einer der Motore seine Solldrehzahl längere Zeit unterschreiten und - Dank der integrierten Temporegelung des ROBOprogy - folgt innerhalb der nächsten halben Sekunde ein Alarm: Der Tempomat regelt 40 mal pro Sekunde den Motorstrom. Normalerweise wird dieser abwechselnd erhöht und verringert. Fährt der Roboter über ein Hindernis, muss der Motorstrom vielleicht zehnmal nacheinander vergrößert werden, dann ist das Hindernis überwunden. Wie oft nacheinander der Strom vergrößert werden muss, wird intern mitgezählt und kann jederzeit mit dem Befehl MLOAD kontrolliert werden. Wird ein Wert größer als 14 gemeldet, liegt Überlast vor und das Programm sollte darauf reagieren. Ein paar mal vorwärts und rückwärt fahren, um frei zu kommen, hilft oft weiter. In folgendem Beispiel fährt der Roboter so lange Zeit, wie vorgegeben, ausser er trifft auf ein Hindernis: