Lijnvolger met analoge elektronica

Enige tijd geleden kocht ik online een bouwpakketje van een eenvoudig lijnvolg-wagentje. Het licht van twee LED’s beschijnt twee lichtgevoelige weerstanden (LDR’s). De motorsturing is (via twee verschilverstekertjes van een LM392 opamp-IC) zodanig ingericht dat de sensoren, die zich ieder aan één kant van de lijn bevinden, de lijn zelf ‘willen ontwijken’. Doordat er altijd maar één motor tegelijk draait, beweegt het karretje nogal zenuwachtig via een zig-zag-beweging telkens heen en weer óver de lijn. Door de instelbare drempelwaarden van de twee LDR’s is echter wel al een soort van ‘voorkeursrichting’ te programmeren, maar of het wagentje ook echt de juiste afslag van de rotonde neemt blijft een kwestie van toeval.

Video : toestemming voor cookies nodig
Instellingen
analog-car-2

Met een Arduino, ESP-32, of andere microcontroller, is dit natuurlijk op te lossen met slimme programmatuur. In het voorgaande project beschreef ik al mijn lijnvolger-wagentjes die zijn uitgerust met meerdere IR-sensoren en een AI-camera. De meeste tijd daarbij ging zitten in het verfijnen van de software. Maar, ondanks het feit dat deze beide ‘Robocars’ het clubparcours binnen 20 seconden aflegden (meer dan zes keer zo snel als de uiteindelijke winnaar), waren de reacties vanuit de fischertechnik-club erg lauw. Ik bleek me met 3D-geprinte onderdelen, een ‘fischertechnik-vreemde’ controller met (weinig zichtbare) maatwerk-programmatuur voor de PID-regeling als enig buitenbeentje in de ‘Maker-categorie’ te hebben gemanouvreerd. Om mijzelf opnieuw te motiveren, en hopelijk wat meer klankbord en feedback van anderen aan te boren, besloot ik daarom een Robocar met simpele analoge elektronica te maken. Ik stelde mij deze keer aanvullend de eis dat alles met onderdelen uit het originele fischertechnik programma moest zijn op te bouwen

Ik beperkte me daarom tot de originele fischertechnik ‘IR-Spursensor’ (nr. 128598). Deze sensor wordt gevoed met 9 volt en bevat twee IR-sensoren met digitale uitgangen. Als een sensor zich boven een zwart spoor bevindt, komt er een zeer laag voltage (bijna nul) uit deze uitgang. Als de sensor zich naast de lijn in het witte gebied beweegt, is de uitgang nagenoeg gelijk aan de voedingsspanning. Voor de aansturing van de motoren koos ik niet voor relais maar voor simpele BD135 transistoren, die in 1977 officieel het fischertechnik nummer 36929 kregen omdat ze onderdeel vormden van het Elektronik-Praktikum (nr. 39629). De kleine witte steekdoosjes voor transistoren (nr. 38230) en draadverbindingen (nr. 38228) uit die doos kwamen daarvoor ook goed van pas. Door deze originele fischertechnik onderdelen te gebruiken kan mijn deelname in het 'echte' fischertechnik Robocar-klassement me in geen geval ontzegd worden. 😄

 analog-car-BD135
analog-car-1

Al snel werd het duidelijk dat het voor de regeling gemakkelijk zou zijn als van de sensor-uitgangen óok het geïnverteerde signaalniveau voorhanden zou zijn. Hierdoor was de keuze voor de traditionele fischertechnik elektronicamodules, de z.g. 'Silberlingen', snel gemaakt. Omdat alle Silberlingen zowel de normale, als het complementaire uitgangssignaal bieden, komt het er niet op aan wélke Silberlingen we direct achter de IR-sensoruitgangen schakelen. Functioneel hebben we simpelweg twee ‘inverters’ nodig, en zowel de ‘Grundbaustein’ als de AND/NAND of de OR/NOR bouwsteen kunnen hiervoor worden gebruikt. Zelf koos ik er voor één AND/NAND en één OR/NOR Silberling te gebruiken. Maar een andere combinatie is ook mogelijk. Het gaat er slechts om dat we zowel het normale als het geïnverteerde signaal van elke sensor voorhanden hebben. Theoretisch zouden zelfs de relais-Silberlingen hiervoor kunnen worden gebruikt, hoewel dat de keuze voor een ‘moderne’ motorsturing met transistoren eigenlijk teniet doet. Zelf koos ik daarom voor een minder luidruchtige volledige ‘solid-state’ oplossing.

Het basisidee van de regeling is dat er altijd minimaal één motor draait. Het terug naar de lijn sturen zou dus moeten bewerkstelligd door telkens de motor aan de andere kant van de wagen (tijdelijk) te stoppen. Zodra de wagen dan weer óp de lijn is gekomen, mogen beiden motoren weer draaien totdat een nieuwe stuur-correctie nodig is. In de meest eenvoudige  vorm zouden de motoren direct kunnen worden aangestuurd door de logische signalen uit beider sensoren. Maar dan zal er absoluut te allen tijden één sensor óp de lijn moeten blijven. Zodra beide sensoren van de lijn raken, zullen immers beide motoren stoppen en de wagen tot stilstand komen. Dit beperkt de snelheid van de wagen vanzelfsprekend enorm.

Intelligenter wordt het al als we een soort ‘geheugen’ kunnen creeëren door elke sensor een Flip-Flop te laten aansturen. De gewenste bijsturing blijft dan gelden totdat de wagen vanaf de kant waar hij de lijn verliet, weer is teruggestuurd op de lijn. Omdat de motorstroom-sturing met de transistoren in principe ‘positieve logica’ volgt, kunnen we dan de geïnverteerde uitgangen van de Flip-Flops hiervoor gebruiken. Voordat deze regeling echter echt ‘intelligent’ is, zijn er dan echter wel een paar voorwaarden:

  1. Bij inschakelen van de wagen op de lijn, moeten in beginsel beide motoren gaan draaien. Omdat de sturing via Flip-Flops loopt, moeten deze dus een vaste voorspelbare opstart-conditie (beiden ‘actief’) hebben. Dit is normaal niet vanzelfsprekend: in welke staat een Flip-Flop opstart, ligt in principe niet vast. En als beide Flip-Flops initieel tegengesteld opstarten, zal de wagen direct van de lijn rijden en er nooit meer terugkeren.
  2. Er moet altijd minimaal één motor blijven draaien. Ook als (bv. door de snelheid van de wagen, het naijlen van de stuurbeweging bij een haakse of te scherpe bocht) de wagen de naastliggende sensor óók van de lijn laat raken. In dit geval moet alleen de eerste sensor-detectie blijven gelden totdat deze sensor die als eerste de lijn verliet weer op de lijn is terug gestuurd.

Als we de wagen inschakelen zodra hij midden op de lijn staat, kunnen we er vanuit gaan dat beide sensoren een lage uitgangsspanning hebben. Voor de Silberlingen, met hun ‘negatieve logica’ is dat ‘actief’. Aan voorwaarde 1 kan dus eenvoudig worden voldaan door het geïnverteerde sensor-signaal op de Sd ingang van de betreffende Flip-Flop te gebruiken.

Als we het niet-geïnverteerde signaal van de sensor (in mijn geval de ZNAND of ZNOR uitgang) gebruiken op de CP ingang van de Flip-Flop, zal deze de Flip-Flop telkens ‘resetten’ zodra de sensor van de lijn raakt. De motor schakelt uit en alleen de motor aan de kant waar de lijn werd verlaten blijft draaien zodat de wagen weer naar de lijn zal sturen.

We zijn dan al een eind, maar zullen ook nog aan voorwaarde 2 moeten voldoen, omdat de wagen anders compleet stopt als de andere sensor ook van de lijn raakt voordat de wagen kan worden teruggestuurd naar de lijn.

analoge-lijnvolger2
analoge-lijnvolger1

We zoeken dus een methode om de Flip-Flop die de (enige) op dat moment nog draaiende motor aanstuurt te ‘bevriezen’. In andere woorden: alleen de eerste sensor die van de lijn gaat bepaalt welke motor uit gaat, totdat deze sensor weer is teruggekeerd op de lijn. Tot dat moment dienen de meetwaarden van de andere sensor simpelweg genegeerd te worden. Er moet immers altijd één motor blijven draaien.
 
Dit is mogelijk met de J- en K-ingangen van de Flip-Flop, die indien niet aangesloten als ‘1’ of ‘actief’ beschouwd. In de beschrijving van de fischertechnik Flip-Flop module lezen we dat we, als we alleen ingang K aansluiten (J=’1’), te maken hebben met de situatie waarin indien K=’0’ de uitgang Q van de betreffende Flip-Flop altijd ‘1’ zal zijn. Dit is precies wat we willen, omdat de betreffende motor dan gewoon blijft draaien!

We kunnen dus voldoen aan voorwaarde 2, door elke sensor-inverteruitgang op de K-ingang van de andere Flip-Flop aan te sluiten. Hierdoor zal de eerste sensor die van de lijn raakt, zorgen dat de informatie van de andere sensor tijdelijk ‘genegeerd’ wordt tot hij zelf weer terug is gekeerd op de lijn. Hierdoor blijft de andere motor wél draaien, is gewaarborgd dat er altijd minimaal één motor draait en is de ‘geheugenwerking’ van de wagen gerealiseerd.

Wie als (een van de) sensor-signaalinverters Grundbaustein (nr. 30813) gebruikt, kan de voedingsspanning gemakkelijk aansluiten op pin 9 (+) en 3 (-) van deze klassieke elektronicamodule. Wie, zoals ik, hiervoor geen extra gelijkrichter-Silberling (nr. 30811) wilde aanschuiven kan voor het aansluiten van de voedingsspanning gebruik maken van een 7,5 mm steen (nr. 37468) met twee verende contacten uit een 8-standen draaischakelaar (nr. 31312)

dc-aansluiting

silberlingen-wiring

Aldus opgebouwd heeft deze Robocar weinig moeite met scherpe bochten, T-splitsingen of de ‘rotonde’ in het clubparcours. Bovendien kan hij, door zijn ‘bochten-geheugen’, een stuk sneller rijden dan de wagentjes die hun snelheid zo sterk moeten beperken om te voorkomen dat beide sensoren van de lijn raken. Het was voor mij de eerste keer dat ik de K-ingang van de Flip-Flop nuttig kon gebruiken. Na de in het vorige nummer van het clubblad beschreven meer geavanceerde lijnvolg-technieken met AI-camera en procesregeling met vijf IR-sensoren, is dit model een letterlijk fundamenteel sluitstuk van het drieluik van Robocar-wagens dat ik maakte. Deze Robocar heeft geen extra sensor(en) nodig, gebruikt géén relais of microcontroller en kan volledig met onderdelen uit het fischertechnik programma worden opgebouwd. Hopelijk is het mogelijk hem op één van de komende clubdagen eens te demonstreren op het ‘club-parcours’.

Slotwoorden

Na de twee Robocars, waarbij de nadruk lag op het programmeren van de besturing met een microcontroller, was het goed om nu een stap terug (in de tijd) te doen en hetzelfde te proberen met traditionele analoge elektronica. Dit onderstreept eens te meer dat de basistechnieken voor autonome besturing al in de vorige eeuw beschikbaar waren. Theoretisch is het mogelijk om deze uit klassieke elektronicamodules opgebouwde logica nog verder uit te breiden en zelfs een eenvoudige P-regeling met meerdere sensorparen te creëren. Voor een snel rijdende Robocar, die ook geen problemen heeft met scherpe bochten, is dit echter geenszins noodzakelijk.

three-generations