Component · Controller
Arduino Uno
Het meest gebruikte microcontrollerbord om robotica te leren: 5V-logica, eenvoudig te programmeren, moeilijk te breken. Wat de Uno kan en wanneer je hem kiest.
Wat het is
De Arduino Uno is een klein ontwikkelbord rond de ATmega328P van Microchip, een 8-bits microcontroller. De pinnen van de chip zijn beschikbaar op gelabelde headers; het bord voegt een USB-poort toe voor programmeren en voeding en regelt de lastige details af, zoals de spanningsregelaar, het klokkristal en het resetcircuit, zodat jij je kunt richten op code en bedrading. Voor veel beginnende roboticalerenden begint hun eerste robotavontuur bij de Uno: daar laten ze voor het eerst een motor draaien of een sensor oplichten.
De blijvende aantrekkingskracht is niet de ruwe prestatie; volgens moderne maatstaven is hij traag en heeft hij weinig geheugen. Het is vergevingsgezindheid. De 5V-pinnen verdragen bedradingsfouten van beginners, de community heeft vrijwel elke denkbare vraag beantwoord en vrijwel elke hobbysensor en driver wordt geleverd met voorbeeldcode voor de Uno.
Hoe het werkt
Je schrijft een sketch, een C++-programma met twee functies. setup() wordt eenmaal uitgevoerd
als het bord aan gaat; loop() draait daarna voor altijd. Daarin lees je ingangen en bestuur je
uitgangen via de pinnen:
- Digitale pinnen lezen of schrijven een HIGH/LOW-signaal (5 V / 0 V), zoals een knopdruk, een LED of de richtingsingang van een motordriver.
- PWM-pinnen, herkenbaar aan
~, bootsen een analoge spanning na door zeer snel aan en uit te schakelen. Daarmee stel je de snelheid van een motor of de helderheid van een LED in. - Analoge ingangen meten een spanning van 0–5 V en geven die terug als getal van 0–1023. Zo lees je een potentiometer of een analoge lijnsensor.
De Uno heeft geen besturingssysteem. Alleen je code draait, waardoor de timing voorspelbaar is. Dat is waardevol wanneer je een regellus rond een echte robot sluit.
Wanneer je hem gebruikt
Kies een Uno wanneer je leert, de grootst mogelijke verzameling compatibele tutorials en bibliotheken wilt of een eenvoudige real-timetaak uitvoert: enkele sensoren uitlezen, een regellus draaien en twee motoren aansturen. Een lijnvolger, een robot met obstakelvermijding of een kleine rover met differentiaalaandrijving valt precies binnen zijn comfortabele toepassingsgebied.
Kies iets anders wanneer je Wi-Fi of Bluetooth nodig hebt, meestal een ESP32 als upgrade, zware wiskunde of beeldverwerking nodig hebt, met een Raspberry Pi, of veel geheugen nodig hebt. De 2 KB SRAM van de Uno vult zich sneller dan beginners verwachten; lange tekenreeksen en grote arrays zijn de gebruikelijke oorzaken.
Veelvoorkomende valkuilen
- Het is een 5V-bord. Veel moderne sensoren werken op 3,3 V en kunnen door 5V-logica beschadigen. Controleer de datasheet vóór het bedraden.
- Voed motoren niet vanaf het bord. De spanningsregelaar van de Uno kan geen motorstroom leveren; gebruik een aparte accu en een motordriver. Motoren rechtstreeks via de Uno voeden is de meest voorkomende oorzaak van brown-out of een reset van het bord.
delay()blokkeert alles. Terwijl het bord in eendelay()staat, kan het geen sensoren uitlezen of reageren. Gebruik voor alles dat moet reagerenmillis()om de tijd bij te houden.- Let op het geheugen. Gedraagt het bord zich zonder duidelijke reden onvoorspelbaar, dan ben je mogelijk de SRAM kwijt.
Pindindeling: wat elke pin werkelijk kan
Veertien digitale en zes analoge pinnen, maar ze zijn niet uitwisselbaar. Zes daarvan hebben een tweede belangrijke taak.
| Pin | Ook | Opmerking voor een robot |
|---|---|---|
| D0 (RX) | Hardware-serial | Niet gebruiken. Deze wordt gereserveerd door de USB-programmer |
| D1 (TX) | Hardware-serial | Niet gebruiken. Idem |
| D2, D3 | Externe interrupts 0 en 1 | De enige twee pinnen die op elke flank kunnen wekken; reserveer ze voor encoders |
| D3, D5, D6, D9, D10, D11 | PWM (~) |
De zes analogWrite-pinnen. Hier regel je de motorsnelheid |
| D10–D13 | SPI (SS, MOSI, MISO, SCK) | Nodig voor een SD-kaart of een nRF24-radio |
| D13 | Ingebouwde LED | Heeft een LED en weerstand; een zwakke ingang, maar prima als uitgang |
| A0–A5 | Analoge ingang, 10-bit | Ook als digitale pin te gebruiken als je ze nodig hebt |
| A4, A5 | I²C (SDA, SCL) | Gedeeld door alle I²C-apparaten; gebruik je ze als analoge ingang, dan verlies je de I²C-bus |
Twee van die lijnen bepalen de meeste robotontwerpen. D2 en D3 zijn de enige echte interruptpins, dus een robot met twee wielencoders gebruikt beide en houdt er geen over. En A4/A5 vormen de I²C-bus, dus een MPU-6050 en een analoge sensorarray op een Uno concurreren meteen om pinnen.
Deze pintekort is de belangrijkste reden dat een project uit de Uno groeit, niet de snelheid of het geheugen. Veertien digitale en zes analoge pinnen zijn snel op als je een motordriver (6 pinnen), een encoderpaar (4 pinnen, waarvan 2 interrupts) en een sensorarray (6 analoge) hebt.
Voeding en de drie manieren om het te verprutsen
| Invoer | Spanning | Pad | Opmerkingen |
|---|---|---|---|
| USB | 5 V | Via een resetbare zekering | Beperkt tot 500 mA voor het hele bord |
| Bajonetconnector | 7–12 V | Via de lineaire spanningsregelaar op het bord | De aanbevolen voeding |
VIN-pin |
7–12 V | Dezelfde regelaar | Hetzelfde als de connector, maar als pin beschikbaar |
5V-pin |
5 V | Rechtstreeks op de rail | Omzeilt de regelaar; geen beveiliging |
De regelaar is lineair en verbrandt dus het verschil tussen de ingang en 5 V als warmte. Bij
12 V in en 200 mA verbruik is dat (12 − 5) × 0.2 = 1.4 W in een kleine behuizing, waardoor hij
werkelijk warm wordt. Voer liever 9 V dan 12 V toe als je kunt kiezen.
Drie specifieke fouten zijn het noemen waard:
Motoren voeden via de 5V-pin. De regelaar kan geen motorstroom leveren. De rail zakt, het bord reset en het symptoom lijkt op een softwarecrash. Motoren krijgen een eigen voeding en delen alleen de massa.
De 5V-pin voeden vanuit een spanningsbron zonder spanningsregeling. Die pin ligt recht op de rail, dus alles boven ongeveer 5,5 V gaat direct naar de ATmega328P.
Gelijktijdig voeden via USB en de bajonetconnector. Het bord verwerkt dat met een comparator die de hoogste bron selecteert, maar een accu op de connector laadt niet op. Bij een kloon met onvoldoende bescherming in het ontwerp kan die accu via USB stroom terugvoeren.
Wat de pinnen kunnen leveren
| Grens | Waarde | Betekenis |
|---|---|---|
| Per pin | 20 mA aanbevolen, 40 mA absoluut maximum | Eén LED kan wel. Een motor niet. Een relaiswikkeling ook niet |
| Totaal over alle pinnen | 200 mA | Acht LED’s van 20 mA gebruiken het hele budget al |
| 5V-pin, gevoed via USB | ~450 mA na het eigen verbruik van het bord | Eén servomotor kan dit al overschrijden |
| 3,3V-pin | 50 mA | Komt uit de regelaar van de USB-chip; zeer beperkt |
De 3,3V-pin verrast mensen regelmatig. Het is geen algemene rail, maar een hulpaansluiting voor 50 mA. Een ESP-01-module die probeert te zenden, veroorzaakt hier direct brown-out.
Het probleem met 2 KB geheugen
De Uno heeft 32 KB flashgeheugen voor je programma en 2 KB SRAM voor variabelen tijdens de uitvoering. Flash is zelden de beperking. SRAM wel, en dat voortdurend.
Elke letterlijke tekenreeks in Serial.print wordt bij het opstarten naar SRAM gekopieerd:
Serial.println("Calibration complete, entering drive mode"); // 43 bytes of SRAM, forever
Twintig zulke berichten nemen 800 bytes in, 40% van het totaal. De F()-macro laat de tekenreeks in
flash staan en leest die alleen indien nodig:
Serial.println(F("Calibration complete, entering drive mode")); // 0 bytes of SRAM
Ook arrays verbruiken veel geheugen. Een float is 4 bytes, dus een logbuffer van 200 monsters is
800 bytes en zonder waarschuwing. De compiler meldet het flashverbruik gewoon en zegt niets
bruikbaars over SRAM tijdens de uitvoering.
Het symptoom van een tekort is geen nette foutmelding. De stack groeit naar beneden, de heap naar boven. Wanneer ze elkaar raken, beschadigen variabelen elkaar stilzwijgend. Het bord gedraagt zich onvoorspelbaar: metingen die geen zin hebben, een lus die slaat, een reset zonder oorzaak. Begint een Uno zich onlogisch te gedragen nadat je een functie hebt toegevoegd, ga dan eerst uit van een tekort aan SRAM.
// Drop this in and watch it while you develop.
int freeRam() {
extern int __heap_start, *__brkval;
int v;
return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}
Bij minder dan ongeveer 200 bytes vrij geheugen kun je problemen verwachten.
Problemen oplossen
| Symptoom | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
| Reset zodra de motoren starten | Motorstroom loopt via het bord | aparte motorvoeding, alleen gemeenschappelijke massa |
| Uploaden mislukt met “not in sync” | Iets op D0/D1 of verkeerde poort | Koppel alles los van de seriële pinnen |
| Onvoorspelbaar gedrag na toevoegen van code | SRAM vol | Omsluit letterlijke strings met F(); controleer freeRam() |
analogWrite doet niets |
Pin ondersteunt geen PWM | Gebruik 3, 5, 6, 9, 10 of 11 |
| Servobibliotheek verstoort PWM op 9/10 | Servo neemt Timer 1 over |
Gebruik andere PWM-pins of bestuur servomotoren via een PCA9685 |
| I²C-apparaat niet gevonden | A4/A5 worden voor iets anders gebruikt | De I²C-bus uitsluitend op deze twee pinnen |
| Spanningsregelaar zeer warm | Ingang rond 12 V | Verlaag naar 7–9 V |
| 3,3V-apparaat veroorzaakt brown-out | Limiet van 50 mA op de pin | Gebruik een aparte 3,3V-regelaar |
| Sensor leest onzin | 3,3V-sensor op 5V-logica | Gebruik een spanningsniveau-omzetter of een bord van 3,3 V |
Uno of iets anders?
| Bord | Logica | Waarom je het kiest |
|---|---|---|
| Uno | 5 V | Vergevingsgezind, universeel gedocumenteerd en de microcontroller is vervangbaar doordat hij in een socket zit |
| Nano | 5 V | Dezelfde chip, geschikt voor breadboards en 8 analoge pins in plaats van 6 |
| Mega 2560 | 5 V | 54 digitale, 16 analoge, 6 interrupts en 8 KB SRAM; het antwoord op pintekort |
| ESP32 | 3,3 V | Wi-Fi, Bluetooth, twee kernen en veel sneller |
| Pro Micro | 5 V | Native USB; kan zich voordoen als toetsenbord of muis |
De Nano verdient bijzondere vermelding voor robots: het is dezelfde ATmega328P met dezelfde code, maar geschikt voor breadboards en met A6 en A7 als extra analoge ingangen. Voor een 8-kanaals reflectiearray betekent dat het verschil tussen wel of niet passen. Daarom schrijven lijnvolgerbouwprojecten zo vaak een Nano voor.
De eerlijke samenvatting: de waarde van de Uno is dat alles er de eerste keer op werkt. Elke bibliotheek, tutorial en bedradingsschema gaat ervan uit. Tijdens het leren is dat méér waard dan elke specificatie, en als je er te groot voor wordt, is dat vrijwel altijd het aantal pinnen.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de Arduino Uno voorkomt.
- ProjectBouw een 4-DOF-robotarm: PCA9685, servomotoren en kinematica
- ProjectBouw een GPS-waypointrover die zelfstandig rijdt
- ProjectBouw een grijp-en-plaatsrobot die weet wanneer hij misgreep
- ProjectBouw een lijndoolhofoplosser-robot met LSRB-routegeheugen
- ProjectBouw een lijnvolgerrobot: van simulator tot echte baan
- ProjectBouw een micromouse: robot die doolhoven oplost met flood fill
- ProjectBouw een mini-sumo robot: grip, wig en randherkenning
- ProjectBouw een obstakelvermijdende robot: meten, scannen en sturen
- ProjectBouw een penplotter: twee stappenmotorassen die op de plek komen
- ProjectBouw een robot die een gebied afdekt en de vloer veegt
- ProjectBouw een robotwagen die je via Bluetooth of wifi bestuurt
- ProjectBouw een ROS 2-robot die een marker ziet en er naartoe rijdt
- ProjectBouw een zelfbalancerende robot met MPU6050 en PID
- LeerrouteElektronicafundamenten voor robots: een leertraject
Vergelijken
Alternatieven
Vragen
FAQ over de Arduino Uno
Wat is de Arduino Uno?
De Arduino Uno is een beginnersvriendelijk microcontrollerbord rond de ATmega328P-chip. Je kunt er sensoren uitlezen en motoren, LED's en andere elektronica aansturen met korte C++-programma's die sketches worden genoemd. Het is het bord waarop de meeste mensen robotica leren.
Waar wordt de Arduino Uno in de robotica voor gebruikt?
In de robotica fungeert de Uno als het brein van de robot: hij leest sensoren, voert een regellus uit en bestuurt motoren via een driver zoals de L298N. Hij past bij lijnvolgers, robots met obstakelvermijding en kleine rovers waarvan de taak eenvoudig is en die voorspelbare real-timetiming nodig hebben.
Welke microcontroller gebruikt de Arduino Uno?
De Arduino Uno gebruikt de ATmega328P van Microchip, een 8-bits AVR-microcontroller die op 16 MHz draait met 32 KB flashgeheugen en 2 KB SRAM. Het bord voegt een USB-interface, een spanningsregelaar en pinheaders rond deze ene chip toe.
Wordt de Arduino geprogrammeerd in C of C++?
Arduino-sketches worden geschreven in C++ met daarop een vereenvoudigd, beginnersvriendelijk framework. Je kunt ook gewoon C gebruiken, omdat C grotendeels een deelverzameling van C++ is, maar de standaardfuncties en bibliotheken van Arduino zijn C++.
Is Arduino-code lastig te leren?
Nee; Arduino is een van de toegankelijkste manieren om te leren programmeren van hardware. De structuur met twee functies, setup en loop, het enorme bibliotheekecosysteem en duizenden voorbeeldsketches zorgen ervoor dat een beginner binnen een uur een LED kan laten knipperen of een motor kan laten draaien.
Wat is beter voor robotica, Arduino of Raspberry Pi?
Ze lossen verschillende problemen op. Arduino is een microcontroller en dus uitstekend voor real-time besturing van motoren en sensoren met voorspelbare timing. Een Raspberry Pi is een volledige Linux-computer en beter voor beeldverwerking, zware berekeningen of Wi-Fi. Veel geavanceerde robots gebruiken beide: een Pi om te denken en een Arduino om te handelen.
Waarom wordt de Arduino Uno zo veel gebruikt?
Omdat hij vergevingsgezind is en goed wordt ondersteund. De 5V-pinnen verdragen bedradingsfouten van beginners, vrijwel elke hobbysensor wordt geleverd met voorbeeldcode voor de Uno en de community heeft vrijwel elke vraag beantwoord, waardoor je meestal niet lang vastloopt.
Kan ik ChatGPT of AI gebruiken om Arduino-code te schrijven?
Ja; AI-assistenten kunnen Arduino-sketches opstellen en debuggen en zijn een nuttig leermiddel. Test door AI gegenereerde code altijd eerst op de hardware voordat je erop vertrouwt, want een plausibel ogende sketch kan nog verkeerde pinnummers, timing of logica bevatten.
Verder lezen