Fischertechnik, het constructie-speelgoed. Als kind nog mee gespeeld,
sindsdien uit het oog verloren. Onlangs zag ik op Marktplaats een
'Intelligent Interface', bedoeld om Fischertechnik modellen met behulp
van een PC te besturen. Leuk! Niet alleen bestond Fischertechnik nog,
de verbinding met een computer was er nu ook.
Ik was er alleen wat laat bij. Het interface werd geleverd met software
bedoeld voor MS-DOS. Dat is 16-bits software, terwijl 64 bits nu de norm
is. Niet dat het veel uit maakte, want die software stond op een 3,5 inch
diskette die ik toch niet meer kan lezen... Besturing via een seriele poort is
ook wat lastig, moderne computers hebben zo'n poort niet meer.
Het interface is vermoedelijk al in de jaren '90 op de markt gebracht. Dat is
vrij oud, maar het idee erachter is nog bij de tijd. Acht digitale ingangen,
twee analoge ingangen en vier bestuurbare uitgangen kunnen ook nu nog van pas komen.
De 8 digitale inputs zijn bedoeld voor schakelaars of reed-contacten waarmee
een status aan of uit wordt aangegeven. De analoge inputs EX en EY meten weeerstand en
zijn bedoeld voor sensoren voor licht, vochtigheid of temperatuur. De vier outputs
M1 t/m M4 kunnen worden verbonden met motoren of lampen.
Het leek me leuk om uit te zoeken of het interface met moderne middelen nog
te gebruiken is. En dat is-ie. Met moderne programmeertalen als Perl en Python
is dat goed te doen. Ik heb met beide talen een paar voorbeeldprogramma's gemaakt,
zie verderop. Perl en Python kunnen draaien op Windows, Linux, Apple en BSD.
Wat is er nodig? Allereerst een computer met een seriele (RS232) poort. Laptops hebben die vrijwel nooit meer, desktops hebben hooguit nog een header op het moederbord. Gelukkig bestaan er USB-adapters die een RS232 poort ter beschikking stellen. Die adapters zijn goed verkrijgbaar en niet duur. De mijne, merk Logilink, kostte zo'n 10 euro. Verder is er een seriele kabel nodig. Dat moet een 'straight cable' zijn, zoals die vroeger met een modem werd gebruikt. Die kabels hebben aan het ene eind een male connector en aan het andere eind een female connector. Het mag geen zogenaamde null-modem of 'cross' kabel zijn. Zo'n kabel heeft female connectors aan beide einden.
Verder heeft u Perl en/of Python nodig. Er zijn wel programma's in andere talen te vinden, bijvoorbeeld in C en zelfs nog Turbo Pascal. Perl en Python zijn moderner. Zo is het werken met bits in die talen mogelijk zonder lastige bit-operaties. Dat maakt het programmeren een stuk simpeler. Ik heb gebruik gemaakt van Python versies 3.11 (FreeBSD/Linux) en 3.13 (Windows). Voor Perl is gebruik gemaakt van de versies 5.36.3 (FreeBSD) en 5.40 (Windows).
Voor wat betreft Windows en Perl is nog een waarschuwing op z'n plaats. Er zijn lange tijd problemen geweest met de module voor seriele communicatie, bestand CommPort.pm. Dat betrof de 64-bits versies van Perl, de 32-bits versies hadden dat niet. Inmiddels zijn die problemen verholpen, maar dat heeft misschien nog niet alle distributie-sites bereikt. De versie van Strawberry Perl voor Windows die ik onlangs (oktober 2024) installeerde had het probleem nog wel. Als u foutmeldingen als Second Read/Write attempted before First is done... te zien krijgt, controleer dan of u de laatste versie van CommPort.pm heeft. Goede versies zijn verkrijgbaar bij uw Perl-leverancier en bij www.cpan.org. Eventueel kunt u ook deze versie van CommPort.pm proberen.
Ik heb een paar programma's geschreven die werken met het Intelligent interface, zowel in Perl als in Python. De eerste, test genaamd, is bedoeld als voorbeeld om het programmeren van input- en outputpoorten te laten zien. Het Perl programma vindt u hier (download). De versie geschreven in Python vindt u hier (download). Een aantal opmerkingen die voor al deze programma's gelden:
Om het interface te testen moeten er schakelaars, reed-contacten of foto-transistors aangesloten worden aan E1 t/m E8. Aan de uitgangen M1 t/m M4 kunnen het beste motoren of lampen aangesloten worden. Controleer of variabele Commport de juiste waarde bevat en start dan het test-script, met Python of met Perl. In acht stappen wordt de aansturing van M1 t/m M4 getoond. Daarna wordt in een tweede while-lus de status van poorten E1 t/m E8 getoond. Wijzigingen met de aangesloten schakelaars worden meteen op scherm getoond. Met de schakelaar aan E8 kan het programma beeindigd worden. Dat kan ook met Ctrl-c of Alt-F4.
Programma verkeerslicht.pl (en .py) stuurt een verkeerslicht aan. Het groene licht wordt aangesloten
op output M1, het oranje licht aan output M2 en het rode licht aan M3. Daarmee stuurt het programma een
verkeerslicht op de bekende wijze aan. Pas ook hier zo nodig de variabele Commport aan.
Het Perl verkeerslicht vindt u hier (download).
De Python-versie staat hier (download).
Voor het laatste programma is een gamecontroller nodig, bijvoorbeeld zoals hier rechts afgebeeld.
Daarmee kan een spelletje Pong! bestuurd worden. Dit is een grafische versie van het spel dankzij gebruik
van een extra module pygame, die u waarschijnlijk eerst moet downloaden en installeren.
De Pythonversie is bedoeld voor twee spelers: gamecontroller 1 wordt verbonden met poorten E1 en E2,
gamecontroller 2 moet zijn aangesloten op poorten E3 en E4. Je kunt er een single-player versie van maken
door poort E6 met een kabeltje op "AAN" te zetten. Programma beeindigen gaat met Alt-F4.
De Python-versie van het programma staat hier (download).
De Perl versie is simpeler door het ontbreken van een module specifiek voor game-ontwikkeling.
Dit is een single-player versie in een terminalvenster die met de gamecontoller aan poort E1 en E2
bediend kan worden. Deze versie werkt trouwens ook met de toetsen Z en / voor de peddle en q
of Ctrl-c om het spel te beeindigen.
De versie in Perl vindt u hier (download).
Tot slot nog een meer object-georienteerde aanpak. Hier is programmatuur m.b.t. de seriële poort
ondergebracht in een Perl module (.pm bestand) genaamd ft30402.pm (download).
Bijbehorend programma ft30402.pl (download) is een OO-versie
van het verkeerslicht dat gebruik maakt van deze Perl module. Het programma bevat nu alleen nog de functionaliteit
t.b.v het verkeerslicht en is daardoor aangenaam kort. U kunt e.e.a. proberen door beide bestanden naast elkaar in een
directory te plaatsen en vanuit die directory ft30402.pl te starten.
Hetzelfde met Python: Routines m.b.t. de seriële poort zijn in een Python module genaamd ft30402.py
(download) opgenomen. Programma pong.py (download)
maakt gebruik van die module en is daardoor korter en eenvoudiger, ondanks dat nu ook met toetsen q, e en i, p gespeeld
kan worden.
Tot zover. Het wegschrijven van programmatuur naar het interface lukt me nog niet. Dat vergt waarschijnlijk wat assemblercode, het ontbreekt me op dat punt aan specifikaties. Mochten de programma's opmerkingen of vragen opleveren dan hoor ik dat graag. Bovenin vindt u een contactformulier en m'n mailadres staat hier ook wel ergens.