BouwrouteBeginnerEen middag

Bouw een robotwagen die je via Bluetooth of wifi bestuurt

Een robotwagen die je vanaf je telefoon bestuurt via Bluetooth of wifi, die op slag stilstaat zodra de verbinding wegvalt in plaats van er vandoor te rijden.

Technisch schema: Bouw een robotwagen die je via Bluetooth of wifi bestuurtCLEARANCE FIELD

Wat je bouwt

Een robotwagen die je vanaf je telefoon bestuurt — via Bluetooth met een HC-05, of via wifi met een ESP32 die zijn eigen bedienpagina serveert.

Dit is de meest toegankelijke robot op deze site: geen regeltheorie, geen algoritme dat je goed moet krijgen, en de storingsmodi zijn zichtbaar in plaats van mathematisch. Het is ook de robot waarvan elke andere robot iets kan leren — wat je moet doen zodra je niet meer de bestuurder bent.

De twee radio’s

HC-05 (Bluetooth) ESP32 (wifi)
Extra hardware Een module, plus een spanningsdeler op RX Geen — de radio zit op de controller
Op de telefoon Een Bluetooth-serieterminalapp Elke browser
Bereik Ongeveer 10 m 30 m+ buiten
Telefoon houdt internet Ja Nee, in accesspointmodus
Beste voor Een eerste draadloze build Alles wat je aan iemand anders wilt geven

Geen van beide is verkeerd. De HC-05 is de kortste route naar een robot die beweegt; de ESP32 is de betere ervaring zodra het werkt, want “verbind met deze wifi en open een browser” hoeft niet te worden uitgelegd.

Onderdelenlijst

Twee routes, en je hebt er maar één nodig. Bouw de Bluetooth-versie als je al een Arduino hebt; bouw de wifi-versie als je vandaag onderdelen gaat kopen.

Onderdeel Bluetooth-route Wifi-route Richtprijs
Controller Arduino Uno ESP32 $5–8
Radio HC-05-module Ingebouwd $4 / $0
Spanningsdeler 1 kΩ + 2 kΩ op de RX van de module Nodig op elke 5 V-sensoringang $0.10
Motordriver 1 1 $2–4
TT-gearmotor 2 2 $4
2WD-chassis 1 1 $6–10
Accupakket 1 1 $6
App op de telefoon nodig Ja — een Bluetooth-serieterminalapp Nee — elke browser —

Totaal: ongeveer $25–35, hoe dan ook.

Het doorslaggevende verschil zit niet in de kosten, maar in de bedieninterface. Een HC-05 geeft je een bytestroom, dus de telefoon heeft een app nodig die bytes kan versturen. Een ESP32 serveert zijn eigen webpagina, dus de telefoon heeft een browser nodig — en dat betekent dat iedereen de robot kan besturen door een URL te openen, zonder iets te installeren. Voor een robot die je aan iemand anders wilt geven is dat een groot verschil zonder extra kosten.

De Bluetooth-route verdient zijn plek wanneer je al een Arduino hebt, of wanneer je de eenvoudigst mogelijke verbinding wilt zonder enige netwerkconcepten. Een byte in, een byte uit.

Bouwvolgorde

1 — Laat hem op een werkbank rijden. Motoren, driver, accu, wielen van de grond, helemaal geen radio. Volg DC-motoren aansturen met PWM en bevestig vooruit, achteruit en elke draai met vaste commando’s. Een radio en een motordriver tegelijk debuggen is hoe middagden verdwijnen.

2 — Voeg de radio toe en laat tekst heen en weer lopen. Bedraad de HC-05 of breng het accesspoint van de ESP32 op, en krijg tekst in beide richtingen vóordat je het aansluit op iets dat beweegt.

3 — Verbind het met een protocol. Eén letter plus een waarde, afgesloten met een newline. Lees door tot de afsluiter in plaats van op elke byte te reageren, want “er zijn bytes binnen” is niet “het bericht is binnen”.

4 — Maak hem veilig bij storing. Dit is de stap die iedereen overslaat, en juist die is belangrijk.

De deadman-timeout

Een draadloze robot blijft het laatste commando uitvoeren dat hij heeft ontvangen. Was dat “vooruit op volle snelheid” en ben je net uit bereik gelopen, dan stopt de robot niet — hij zet door.

Een tijddiagram. Een rij commandopulses komt elke 100 milliseconden binnen zolang een knop ingedrukt is, en stopt dan bij een stippellijn met het opschrift signaal verloren. Daaronder blijft een balk zonder timeout rood en rijdt die balk na het verlies van het signaal onbeheerd eindeloos door. Een tweede balk met een deadman-timeout van 400 milliseconden gaat kort na het laatste commando over naar gestopt.
De commandostream stopt wanneer de verbinding wegvalt, niet wanneer de gebruiker loslaat — en daarom moet de robot zelf op een time-out reageren. SVG downloaden

De oplossing heeft twee helften en je hebt ze allebei nodig:

  • De controller herhaalt. De telefoon stuurt het commando van de ingedrukte knop elke 100 ms, niet één keer bij het indrukken.
  • De robot rekent erop. Komt er niets binnen voor ~400 ms, stop dan.
if (millis() - lastCommandAt > 400) stop();

Nu levert een losgelaten knop, een gesloten app, een lege telefoonaccu en een wandeling uit bereik hetzelfde resultaat op. Je leunt nooit op een stopbericht dat weleens nooit verstuurd wordt.

Gebruik millis() in plaats van delay(). Een delay(200) ergens in de lus is 200 ms waarin de robot niets leest en niets controleert.

Hardwaretips

Geef de radio een schone voeding. Beide modules trekken scherpe stroompieken tijdens het zenden. Een spanningsrail die onder belasting inzakt delen met motoren veroorzaakt resets die precies op softwarecrashes lijken — de robot stopt halverwege met reageren en komt een seconde later terug. Voed de motoren via de driver uit het accupakket en houd de voeding voor de logica gescheiden.

Een bedradingsschema. Een Arduino Uno of Nano verbindt zijn TXD-lijn rechtstreeks met pin D10 van een HC-05-module, gemarkeerd als veilig omdat 3,3 volt uit hoog gelezen wordt op een 5 V-ingang. Het terugpad van pin D11 naar de RXD-pin van de module loopt via een spanningsdeler van 2 kilohm en 3,3 kilohm, met een waarschuwing dat 5 volt rechtstreeks in RXD de module gedeeltelijk beschadigt, zodat hij nog koppelt maar vervormt de gegevens die je hem stuurt.
Drie van de vier draden zijn simpel. De vierde heeft een spanningsdeler nodig, want 5 V in de RXD van de module beschadigt hem langzaam in plaats van duidelijk. SVG downloaden

Let op de 3,3 V-pinnen. De RX van de HC-05 en elke GPIO van de ESP32 zijn 3,3 V-onderdelen. Een 5 V-Arduino die daar naartoe zendt heeft een spanningsdeler nodig. De schade is geleidelijk en gedeeltelijk, en juist daarom zo lastig vast te stellen.

Een L298N is hier prima. De spanningsval ervan telt bij een robot die op snelheid een lijn volgt; bij een handmatig bestuurde wagen corrigeer je er eenvoudig voor met de stand van het gas, dus de goedkopere, gangbare driver is de verstandige keuze.

Hoe goed het eruit moet zien

Meting Bluetooth (HC-05) Wifi (ESP32)
Commandovertraging 20–60 ms 30–100 ms op een lokaal netwerk
Bereik, vrij zicht ~10 m ~50 m, of overal op het netwerk
Bereik door één binnenwand 3–5 m 15–25 m
Tijd tot eerste besturing na het opstarten ~2 s na het koppelen ~5 s om met wifi te verbinden
Opnieuw verbinden na een storing Meestal handmatig Automatisch
Bruikbare deadman-timeout 300–500 ms 300–500 ms

De deadman-timeout is het getal dat je zorgvuldig moet afstellen, en beide radio’s hebben hem nodig. Te lang en de robot blijft merkbaar rijden nadat de verbinding wegvalt — wat bij 0,3 m/s en een timeout van 1 s neerkomt op 30 cm onbeheerde verplaatsing. Te kort en normale packetjitter stopt de robot voortdurend, wat als kapot aanvoelt.

300–500 ms is het bruikbare frequentiebereik voor beide. Onder ongeveer 250 ms gaat gewone wifi-jitter hem al activeren; boven ongeveer 700 ms rijdt de robot bij een weggevallen verbinding zichtbaar op eigen houtje door.

Waar dit hierna heen gaat

De commandolaag die je hebt gebouwd staat los van elke gedragslaag, en juist daarom is het een goede fundering. Voeg een ultrasone sensor toe en de robot kan weigeren tegen een muur in te rijden, zelfs terwijl je vooruit ingedrukt houdt — het begin van de obstakelvermijdende robot.

Die combinatie, een robot die je kunt besturen én die jou kan overstemmen, is ook de eenvoudigste manier om autonomie te ontwikkelen: je kunt de robot precies daar neerzetten waar een bug zich voordoet, zonder heen te lopen en hem op te pakken.

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 / 14 klaar

100%
Bouw

Maak hem veilig bij storing

Bouw

Doel

Bestuur hem vanaf je telefoon

Doel

Componenten

Tutorials in deze route

Veelgestelde vragen

Moet ik Bluetooth of wifi gebruiken voor een robotwagen?

Bluetooth met een HC-05 is het eenvoudigst aan de praat te krijgen en koppelt één keer, maar je hebt een serieterminalapp nodig en het bereik is ongeveer tien meter. Een ESP32 over wifi heeft helemaal geen app nodig — hij serveert zijn eigen bedienpagina aan elke browser — en haalt meer afstand, maar de telefoon verliest zijn internetverbinding zodra hij met het netwerk van de robot is verbonden. Voor een eerste build is Bluetooth de kortste route; voor alles wat je gaat demonstreren is de app-loze bedienpagina van de ESP32 het extra uur waard.

Waarom blijft mijn Bluetooth-robot rijden nadat ik de knop loslaat?

Omdat hij het loslaten nooit heeft gehoord. Een bedraadde robot stopt zodra je loslaat; een draadloze blijft het laatste commando herhalen dat hij kreeg. De oplossing heeft twee kanten: laat de telefoon het huidige commando elke 100 ms herhalen zolang een knop ingedrukt is, en laat de robot vanzelf stoppen als er een paar honderd milliseconden niets binnenkomt. Dan levert een losgelaten knop en een verbroken signaal hetzelfde veilige resultaat op, en ben je nooit afhankelijk van een stopbericht dat weleens nooit kan aankomen.

Kan ik de HC-05 beschadigen door hem direct aan een Arduino te hangen?

Ja, op één pin. De logica van de module is 3,3 V en de RX-pin is niet 5 V-bestendig, dus een Arduino die rechtstreeks naar binnen zendt, belast die ingang. Wat het zo frustrerend maakt, is dat de schade meestal gedeeltelijk is — de module koppelt nog en zendt nog, maar maakt de gegevens stilletjes ongeldig of negeert ze. Twee weerstanden als spanningsdeler op die ene lijn voorkomen dat.

Heb ik een app nodig om de robot vanaf mijn telefoon te besturen?

Alleen voor Bluetooth. Een HC-05 heeft een Bluetooth-serieterminalapp op de telefoon nodig om de poort te openen. Een ESP32 heeft niets nodig: hij maakt zijn eigen wifinetwerk en serveert een HTML-pagina, dus je maakt verbinding en opent een browser. Dat is het sterkste praktische argument voor de ESP32 bij een robot die anderen ook moeten kunnen besturen.

Kan een met de telefoon bestuurde robot zichzelf ook besturen?

Ja, en dat is de logische volgende stap. De commandolaag die je hier bouwt staat los van de gedragslaag, dus met sensoren erbij kan de robot jou overstemmen — hij weigert tegen een muur in te rijden, zelfs als je vooruit ingedrukt houdt. Bouw de handmatige laag eerst: een sensor debuggen is een stuk makkelijker als je de robot met de hand van de andere kant van de kamer kunt neerzetten.