| |
Computing Experimental : Die Schildkröte
Eine Mail brachte mich wieder auf die Turtle(Schildkröte) des Kastens Computing
Experimental von 1987. Hier ein aktueller Nachbau (ein Scan der Original
Bauanleitung ist in Turtle.ZIP enthalten). In
Abweichung vom Original wurde hier ein ca. 2 m langes 10er Flachbandkabel
verwendet, da die Turtle am Intelligent Interface betrieben wird. Das Kabel ist
deutlich frexibler als das Original 20er Flachband, also auch eine Lösung für
das parallele Interface. Hier wurden die Original MiniMotoren des Kasten
verwendet, die aktuellen erfordern eine Modifikation des Aufbaus, sonst kann man
die Turtle problemlos mit modernen Teilen nachbauen, hier wurde nur ein
Touchsensor (Taster) vorn eingebaut (daher die nur 10 Adern des Kabels). Das
Turtle-Tempo ist recht gemächlich.
Verkabelung :
- Linker Motor an M1, Impulstaster an E2
- Rechter Motor an M2, Impulstaster an E4
- TouchSensor(Taster vorn) an E5
Für die ersten Gehversuche mit der Turtle wurde die aktuelle FishFa30.DLL (vbFish30Setup.EXE)
in Verbindung mit VBScript genutzt (eine Delphi-Version ist hinten)
:
Option Explicit
Dim ft
Const ftiLinks = 1, ftiRechts = 2
Const ftiFull = 15, ftiTime = 1
Set ft = CreateObject("FishFa30.FishFace")
ft.OpenInterface("COM1")
MsgBox "Turtle gestartet (Ende ESC)"
Do
GeheRechts 33
If GeheVor(266) Then
GeheRechts 33
GeheVor 266
GeheLinks 33
GeheZuruck 66
GeheLinks 33
End IF
GeheZuruck 66
Loop Until ft.Finish(0)
ft.CloseInterface
MsgBox "Turtle beendet"
Sub GeheRechts(Impulse)
ft.SetMotor 1, ftiLinks, ftiFull, Impulse
ft.SetMotor 2, ftiRechts, ftiFull, Impulse
ft.WaitForMotors 0, 1, 2
End Sub
Sub GeheLinks(Impulse)
ft.SetMotor 1, ftiRechts, ftiFull, Impulse
ft.SetMotor 2, ftiLinks, ftiFull, Impulse
ft.WaitForMotors 0, 1, 2
End Sub
Function GeheVor(Impulse)
GeheVor = True
ft.SetMotor 1, ftiLinks, ftiFull, Impulse
ft.SetMotor 2, ftiLinks, ftiFull, Impulse
Do
If ft.GetInput(5) Then
ft.ClearMotors
GeheVor = False
End If
Loop while _
ft.WaitForMotors (40, 1, 2) = ftiTime
End Function
Sub GeheZuruck(Impulse)
ft.SetMotor 1, ftiRechts, ftiFull, Impulse
ft.SetMotor 2, ftiRechts, ftiFull, Impulse
ft.WaitForMotors 0, 1, 2
End Sub |
Das ist schon das komplette Programm. Als "Entwicklungsumgebung"
habe ich den NotePad (Editor) genutzt. Dazu die Source und das PDF-File des
Handbuchs auf dem Desktop plaziert und Strg+S im Editor und Klick auf das Icon :
es läuft (oder auch nicht dazu siehe : VBScript-Ecke).
Und noch ein paar Anmerkungen zum Programm :
- Die Source beginnt mit dem Hauptprogramm. In der Do - Loop Schleife stehen
eine Reihe von Fahrbefehlen; die Schleife wird durch Drücken der ESC-Taste
beendet. Wenn bei GeheVor ein Hindernis entdeckt wird (Taster : TouchSensor)
wird der Befehl beendet, im ersten Fall werden dann die weiteren Befehle
übersprungen.
Die Zusammenstellung der Befehle ist mehr oder weniger unsinnig, mal sollte
sich kurz darüber ärgern und sie dann nach eigenem Gusto gestalten.
- Die Methode ft.SetMotor in den Gehe-Befehlen ist eine Errungeschaft von
FishFa30, hier läuft der Motor nur solange bis die vorgegebene Anzahl
Impulse erreicht wurde. Mit ft.WaitForMotors wird darauf gewartet.
- Bei GeheVor ist es ein wenig aufwendiger. Hier wird in einer Do - Loop
Schleife gewartet, immer 40 MilliSekunden, und dann wird wieder nach dem
TouchSensor gefragt und ggf. abgebrochen.
Damit Delphi nicht zu kurz kommt hier eine
Konsol-Version für Delphi-Beginner mit Turbo-Pascal Vergangenheit :
program poorTurtle;
uses FishFa30;
var ft: TFishFace;
procedure GeheRechts(Impulse: Cardinal);
begin
ft.SetMotor(ftiM1, ftiLinks, ftiFull, Impulse);
ft.SetMotor(ftiM2, ftiRechts, ftiFull, Impulse);
ft.WaitForMotors(0, ftiM1, ftiM2);
end;
procedure GeheLinks(Impulse: Cardinal);
begin
ft.SetMotor(ftiM1, ftiRechts, ftiFull, Impulse);
ft.SetMotor(ftiM2, ftiLinks, ftiFull, Impulse);
ft.WaitForMotors(0, ftiM1, ftiM2);
end;
function GeheVor(Impulse: Cardinal): Boolean;
begin
Result := true;
ft.SetMotor(ftiM1, ftiLinks, ftiFull, Impulse);
ft.SetMotor(ftiM2, ftiLinks, ftiFull, Impulse);
repeat
if ft.GetInput(ftiE5) then begin
ft.ClearMotors;
Result := false;
end;
until ft.WaitForMotors(40, ftiM1, ftiM2) <> ftiTime;
end;
procedure GeheZuruck(Impulse: Cardinal);
begin
ft.SetMotor(ftiM1, ftiRechts, ftiFull, Impulse);
ft.SetMotor(ftiM2, ftiRechts, ftiFull, Impulse);
ft.WaitForMotors(0, ftiM1, ftiM2);
end;
begin
ft := TFishFace.Create(false, // --- ohne AnalogScan
false); // kein Slave
try
ft.OpenInterface('COM1');
except
on e: EFishFace do begin
WriteLn('poorFish : InterfaceProblem'); ReadLn; exit;
end;
end;
WriteLn('poorTurtle gestartet');
repeat
GeheRechts(33);
if GeheVor(226) then begin
GeheRechts(33);
GeheVor(66);
GeheLinks(33);
GeheZuruck(66);
GeheLinks(33);
end;
GeheZuruck(66);
until ft.Finish(0); // --- Programmende : Escape-Taste
ft.CloseInterface;
ft.Free;
WriteLn('poorTurtle beendet'); ReadLn;
end.
|
Genutzt wird die neue FishFa30.DCU auf Basis von umFish30.DLL. Die DCU
entspricht in ihrer Funktion genau der FishFa30.DLL in VB6.
ACHTUNG : gleich nach dem ersten Projektstart im Menü Projekt | Optionen |
Linker die Option Textbildschirm-Anwendung markieren (sonst laufen die WriteLn
nicht). Das Programm besteht nur aus dieser Source :
- uses FishFa30;
Verweis auf die benötigte Unit FishFa30.DCU
- var ft: TFishFace;
Deklaration der genutzten Klasse von FishFa30
- Und dann in schönster Pascal Manier erstmal alle genutzten Routinen und
ganz am Schluß gehts dann mit begin und einer repeat until Schleife los.
Die Befehlsfolge ist ein wenig curious, man sollte sie gleich nach eigenem
Gusto ändern.
- Die Methode ft.SetMotor in den Gehe-Befehlen ist eine Errungeschaft von
FishFa30, hier läuft der Motor nur solange bis die vorgegebene Anzahl
Impulse erreicht wurde.
- Bei GeheVor ists ein wenig aufwendiger. Hier wird in einer repeat until
Schleife gewartet, immer 40 MilliSekunden, und dann wird wieder nach dem
TouchSensor gefragt und ggf. abgebrochen.
Die Sources zu den Programmen, eine zusätzliche VB6-Version, eine Delphi
Windows Version, die FishFa.DCU und die Original
Bauanleitung befinden sich in Turtle.ZIP,
zusätzlich ist vbFish30Setup.EXE
erforderlich(auch für Delphi : Vorab das VB6 Handbuch und
umFish30.DLL-Installation. Das enthält auch ein ausführliches Handbuch zu FishFa30.
Wenn
man dann noch mehr tun möchte, die Turtel "aufrüsten" und sie
gar in ein Labyrinth schicken möchte (wie im Original Handbuch angedeutet) kann
man im Internet einige Anregungen finden :
Bei einer www.google.de
Suche mit dem Suchbegriff - Roboter Labyrinth --- habe
ich eine ganze Reihe interessanter Seiten gefunden :
|