BouwrouteBeginnerEen weekend

Bouw een lijnvolgerrobot: van simulator tot echte baan

Een werkende lijnvolger die je volledig begrijpt — van het uitlezen van de lijn tot de PID-lus die hem stuurt — gebouwd uit onderdelen die je eerst in simulatie afstelde.

Technisch schema: Bouw een lijnvolgerrobot: van simulator tot echte baanSENSOR ERROR

Een lijnvolger is de beste eerste robot: hij waarneemt, beslist en beweegt, maar elk onderdeel is eenvoudig genoeg om volledig te begrijpen. Dit bouwpad is bewust een geleidend pad. In plaats van een onderdelenlijst en een bedradingsfoto om te kopiëren, ontgrendel je één knooppunt tegelijk en leer je het mechanisme achter elke stap voordat je hem bouwt.

Je begint met te begrijpen hoe een rij infraroodsensoren (IR) één regelfout wordt en hoe de proportionele-integrale-differentiële regellus (PID) die fout omzet in vloeiende beweging. Vijf sensoren zijn de ideale balans voor een eerste bouw: drie werken bij lage snelheid maar geven een grove positie, acht geven een fijnere resolutie bij hoge snelheid maar maken bedrading en kalibratie ingewikkeld. Het gewogen gemiddelde dat die metingen samenvat tot één getal met teken — negatief wanneer de lijn links ligt, positief wanneer hij rechts ligt — is het enige signaal dat de regellus ooit ziet. Daarom is het belangrijker om dat getal goed te krijgen dan om een bepaald bord te kiezen.

Dat signaal moet vervolgens twee verschillende wielsnelheden worden. Differentiële aandrijving betekent dat de robot stuurt door de wielen met verschillende snelheden te laten draaien, en de techniekstructuur voert je van de kale motordriver via pulsbreedtemodulatie (PWM) naar de kinematica die één correctie omzet in linker- en rechtercommando’s. Je ziet ook waar odometrie past: het tellen van wielbeweging vertelt je hoe ver je hebt gereisd en waarom die schatting zonder externe referentie afdrijft — een thema dat in elke doolhofrobot terugkomt.

Voordat je geld uitgeeft of een bedradingsfout riskeert, stel het gedrag af in de browsersimulator: teken een baan, wijzig het aantal sensoren en hun onderlinge afstand en sleep de proportionele, integrale en differentiële versterkingen terwijl je fout, rondetijd en tijd op de lijn bekijkt. De simulator is een onderrichtsmodel, geen hardware: hij veronderstelt een vlakke, contrastrijke binaire baan, ideale kalibratie, geen verandering in omgevingslicht en een volmaakt periodieke lus zonder wielslip. Versterkingen die je hier vindt, liggen al dicht bij een geschikte instelling, maar je kalibreert de echte array nog en stelt hem opnieuw af op je eigen tape.

Pas daarna bedraad je de echte robot: de analoge uitgangen van de sensorarray naar pinnen die analoog kunnen lezen, PWM en richting naar de L298N (logica-pinnen kunnen geen motorstroom leveren — de dubbele H-brug schakelt de werkelijke stroom), een aparte motorvoeding op een eigen baan en een gemeenschappelijke aarde die alle modules verbindt. Het laatste knooppunt is montage en verfijning op een echte met tape gemaakte baan, waar je de PID-versterkingen uit de simulator overzet en corrigeert voor ondergrond, accuspanning en timing van de lus. Dezelfde structuur keert later terug bij de lijndoolhofoplosser, die een beslissingslaag toevoegt. Een solide fundering bespaart je dus tijd, zowel nu als later.

Volg de techniekstructuur hieronder van boven naar beneden. Elk knooppunt wordt beschikbaar zodra de vereisten zijn afgerond, en je voortgang wordt op dit apparaat opgeslagen, zodat je de robot in een weekend kunt bouwen zonder je voortgang kwijt te raken.

Stuklijst

Onderdeel Aantal Geschatte kosten Opmerkingen
Arduino Uno of Nano 1 $5–8 Een Nano is hier de betere keuze: A6 en A7 zijn extern beschikbaar, zodat je een array met acht kanalen kunt aansluiten
IR-reflectiearray 1 $4–10 5 kanalen om mee te leren, 8 als je later snelheid wilt. Eis analoge uitvoer
L298N of TB6612FNG 1 $2–4 Kies bij aankoop TB6612FNG — die heeft een lage spanningsval, terwijl de L298N ~1,5 V als warmte verliest
TT-tandwielmotor 2 $4 De gele versies. Uitvoeringen met encoder kosten $2 meer en besparen een herbouw.
2WD-chassis met wielen en zwenkwiel 1 $6–10 Wordt meestal als kit met de motors verkocht
Accupakket 1 $3–8 6×AA NiMH, of 2×18650 in een beveiligde houder. Geen 9 V-blok
Jumperdraden, tape, schakelaar — $5 19 mm mat elektrische tape voor de baan

Totaal: ongeveer $30–45. De waardevolste verbetering in die lijst zijn motoren met encoders — niet voor dit project, dat ze niet nodig heeft, maar omdat een lijnvolger vrijwel altijd een lijndoolhofoplosser wordt en die ze wel nodig heeft.

Voor de baan: mat zwarte tape op een matte, lichte vloer. Glanzende tape reflecteert bij de verkeerde hoek als wit, en een glanzende vloer doet hetzelfde. Zo ontstaat een robot die op de ene ondergrond wel werkt en op de andere niet, om redenen die op software lijken.

Hoe alles samenhangt

Van Naar Waarom het ertoe doet
Sensorarray VCC, GND Arduino 5 V, GND De zenders bepalen hier de stroomvraag — 100–200 mA bij een array met acht kanalen
Sensorarray OUT1–8 A0–A7 Analoog, één kanaal elk. Daarom is een Nano beter dan een Uno
Motordriver PWMA, PWMB D9, D3 Moeten PWM-compatibele pinnen zijn
Richtingspinnen van de motordriver D8, D7, D5, D4 Digitale pinnen
Motordriver STBY (alleen TB6612FNG) D12, HIGH gestuurd Laat hem zweven en er gebeurt helemaal niets, zonder foutmelding
Accu + Motordriver VM / +12V Nooit de 5 V-pin van de Arduino
Accu − Motordriver GND, Arduino GND, array-GND Eén gemeenschappelijke aarde, vertakt naar één punt

Twee storingen veroorzaken de meeste problemen bij de eerste poging en geen van beide geeft een foutmelding. Een ontbrekende gemeenschappelijke aarde betekent dat de richtingssignalen geen referentie hebben, dus niets beweegt terwijl alles er correct bedraad uitziet. Motorstroom via de Arduino laat de 5 V-voedingsbaan inzakken, reset het bord en lijkt op een softwarecrash.

Bouw de robot in mijlpalen

Bedraad niet de hele robot en ga daarna pas foutzoeken. Elke fase hieronder heeft een test; een fase die zijn test niet haalt, blijft verborgen in de volgende.

# Mijlpaal De test Geslaagd ziet er zo uit
1 Motoren draaien Laat elk wiel op blokken met 200 duty vooruit en achteruit draaien Beide draaien beide kanten op; noteer de duty waarbij elk start
2 Dode zone gemeten Verhoog de duty vanaf 0 in stappen van 5 Je hebt twee getallen en die verschillen — vaak met 5–10
3 Rechte lijn Laat beide wielen 2 m over de vloer vooruit draaien Minder dan 10 cm drift; stel anders één motor softwarematig af
4 Sensoren gelezen Druk alle kanalen af over de lijn en over de vloer De twee metingen van elk kanaal verschillen honderden counts
5 Kalibratie Beweeg de array 3 s over de lijn en druk daarna de genormaliseerde waarden af 0 op de vloer, bij 1000 op de lijn, voor elk kanaal
6 Positie Beweeg de robot met de hand over de lijn en druk de gewogen positie af Vloeiend en monotoon — geen sprongen wanneer de lijn een sensorgrens kruist
7 Alleen P Bestuur met alleen de proportionele versterking, zonder I of D Hij volgt een zachte boog en slingert een beetje. Dat is hier normaal
8 Voeg D toe Verhoog de differentiële versterking tot het slingeren gedempt is Vloeiend volgen op rechte stukken en zachte bochten
9 Volledige baan Rijd een gesloten rondje met een scherpe hoek Hij voltooit rondjes zonder de lijn te verliezen
10 Herstel na verlies van de lijn Til de robot tijdens de rit van de lijn Hij draait de kant op waarin hij al draaide, in plaats van rechtdoor te rijden

Mijlpaal 6 is de stap die mensen overslaan en die ze niet moeten overslaan. Als het positiesignaal springt wanneer de lijn tussen twee sensoren door gaat, kan geen enkele regellus worden afgesteld — de discontinuïteit lijkt op een plotselinge, enorme fout en de robot zal bij elke ronde precies op dat moment schokken. Een sprong betekent óf dat de array niet per kanaal gekalibreerd is, óf dat een kanaal door zijn drempel te vroeg wordt uitgesloten.

Hoe een goed resultaat eruitziet

Meting Beginnersbuild Goed afgesteld
Snelheid op rechte stukken 0,15–0,25 m/s 0,4–0,6 m/s
Slingeramplitude op een rechte lijn ±15 mm Minder dan ±5 mm
Kleinste bochtradius die hij volgt ~30 cm ~15 cm
Regelfrequentie 50 Hz 200 Hz of beter
Rondjes voordat de lijn kwijt is Een paar Onbeperkt, totdat de accu inzakt

De regelfrequentie verdient aandacht omdat die stilletjes al het andere begrenst. Een regellus op 50 Hz ziet de lijn elke 20 ms; bij 0,5 m/s is dat 10 mm verplaatsing tussen twee beslissingen. Door elke delay() uit de lus te halen en alleen de sensoren te lezen die je gebruikt, gaat een eerste bouw doorgaans van 50 Hz naar enkele honderden, terwijl het volgen verbetert zonder een versterking aan te raken.

Problemen oplossen

Symptoom Vermoedelijke oorzaak Oplossing
Er beweegt helemaal niets Geen gemeenschappelijke aarde, of STBY laag Verbind alle GND-punten met elkaar; stuur STBY HIGH
Bord reset wanneer hij gaat rijden Motorstroom via de Arduino Scheid de motorvoeding; alleen de aarde wordt gedeeld
Rijdt recht voorbij de lijn Array niet gekalibreerd of te hoog Kalibreer op deze ondergrond; stel de hoogte in op 3–8 mm
Volgt, maar slingert sterk P te hoog of D te laag Halveer P en verhoog daarna D
Oscilleert steeds sneller P veel te hoog Verlaag totdat het rustig is en stel daarna opnieuw af
Drift op rechte stukken Motoren verschillen Stel softwarematig af en controleer opnieuw op jouw rijsnelheid
Slaat alleen bij lage snelheid uit Twee verschillende drempels voor statische wrijving Meet de dode zone van elke motor en compenseer die afzonderlijk
Verliest de lijn bij scherpe hoeken Te snel of array te dicht bij de wielen Verminder de snelheid; zet de array naar voren zodat je de bocht eerder ziet
Rijdt weg wanneer hij de lijn verliest Fout wordt op 0 gezet bij verlies van de lijn Houd de laatste fout vast — 0 betekent “gecentreerd”
Werkt eerst en wordt tijdens de rit slechter Accu zakt in, waardoor de versterkingen niet meer passen Verwacht dit; sluit een snelheidsregellus of accepteer een kortere rit
Werkt niet bij een raam Infrarood van buiten Trek de meting met uitgeschakelde zender af of scherm de array af

Waar je daarna kunt gaan

De lijnvolger is bewust een basis. Drie vervolgstappen kunnen daarop voortbouwen.

Voeg kruispuntdetectie toe en hij wordt een lijndoolhofoplosser — dezelfde PID-lus eronder, met een dunne beslissingslaag erboven die de takken classificeert en de route bijhoudt. Dit is het beste volgende project, omdat het alles hier hergebruikt en slechts één werkelijk nieuw idee toevoegt.

Voeg encoders toe en je kunt een opgegeven snelheid vasthouden in plaats van een opgegeven duty. Daarmee verdwijnt het probleem dat het systeem verslechtert terwijl de accu leegloopt en wordt de afstelling stabiel gedurende de hele rit.

Ga sneller. Dit is moeilijker dan het klinkt, maar hier leer je het meeste: snelheid legt elke benadering bloot. De regelfrequentie wordt de grens, de array moet verder naar voren zodat je de bocht eerder ziet, hoeken moeten vóór hun komst worden afgeremd en de banden beginnen te slippen. Dat laatste is de muur — zie wielslip en tractie waar die verschijnt.

Projectroadmap

De bouwroute

Volg de techboom van onderdelen tot een werkende robot. Elk knooppunt wordt ontgrendeld zodra de voorwaarden klaar zijn, en je voortgang wordt op dit apparaat opgeslagen.

0 / 15 klaar

100%
Bouw

Verbind de robot

45 min

Bouw

Zet hem samen en rijd op een echte baan

60 min

Doel

Lijnvolger voltooid

Je hebt hem gebouwd

Componenten

Tutorials in deze route

Oefen voordat je bedraadt

Stem het af in de live simulator

De bouwroute loopt via een lab in de browser. Krijg het gedrag hier goed en zet je instellingen daarna over naar de echte robot.

Veelgestelde vragen

Moet ik onderdelen kopen voordat ik met dit project begin?

Nee. De volledige helft van het project rond waarnemen en regelen draait in de browsersimulator, dus je kunt begrijpen hoe een lijnvolger de lijn uitleest en zijn PID-versterkingen afstellen voordat je iets koopt. Alleen de laatste bouwstappen — bedrading en montage — vereisen de fysieke Arduino, IR-array en motordriver.

Hoe lang duurt het bouwen van een lijnvolgerrobot?

Als je de onderdelen hebt, is een eerste werkende lijnvolger een weekendproject: een middag om waarnemen en regelen te leren en hem in de simulator af te stellen, daarna een paar uur om de Arduino, IR-array en motordriver te bedraden en op een met tape gemaakte baan te verbeteren. De afstelling uit de simulatie gaat rechtstreeks over, waardoor het meeste proef-en-foutwerk verdwijnt.

Wat is het lastigste aan het bouwen van een lijnvolger?

Bijna altijd de regellus, niet de bedrading. De robot zachte bochten zonder slingeren laten volgen betekent dat je de PID-versterkingen afstemt op jouw specifieke motoren, sensorhoogte en snelheid. Daarom laat dit bouwpad je eerst in de simulator afstellen — de versterkingen zijn dus al dichtbij voordat de robot de vloer raakt.

Waarom slingert mijn lijnvolger rond de lijn heen?

Oscillatie betekent meestal dat de proportionele versterking te hoog is, de differentiële demping te laag is of de robot sneller rijdt dan de sensorverwerking aankan. Verlaag eerst de basesnelheid, verlaag Kp daarna met ongeveer 20% en voeg wat Kd toe. Op hardware voegt een lange delay() in de lus dode tijd toe waardoor de differentiële term niet werkt, hoe hoog je die ook instelt — houd het regelinterval vast.

Hoeveel IR-sensoren heeft een lijnvolger nodig?

Vijf is een praktisch startpunt: genoeg om een vloeiende gewogen positie te berekenen en te zien welke kant de lijn op buigt, terwijl bedrading en positieberekening eenvoudig te controleren blijven. Drie sensoren werken voor een langzame oefenbaan met een brede lijn; wedstrijdrobots gebruiken vaak acht voor een fijnere resolutie bij hoge snelheid, maar elke extra sensor is een extra kalibratie en extra bedrading.

Hoe kalibreer ik de IR-reflectiearray?

Vóór een rit beweeg je de array langzaam over zowel de zwarte tape als het witte bord en leg je voor elke sensor de minimum- en maximumwaarde vast. Normaliseer daarna de metingen tijdens gebruik ten opzichte van dat bereik. Kalibratie is belangrijk omdat sensohoogte, reflectie van de ondergrond en kamerverlichting allemaal de ruwe waarden verschuiven; een niet-gekalibreerde array veroorzaakt zelfs bij een gecentreerde robot een systematische fout in de gewogen positie.