Bauteil · Controller
Arduino Uno
Der Arduino Uno ist das verbreitetste Board zum Robotiklernen – 5-V-Logik, einfach zu programmieren, schwer kaputtzukriegen. Was er kann und wann er passt.
Was es ist
Der Arduino Uno ist ein kleines Entwicklungsboard rund um Microchips ATmega328P, einen 8-Bit-Mikrocontroller. Er führt die Pins des Chips auf beschriftete Leisten, fügt einen USB-Anschluss zum Programmieren und Versorgen hinzu und nimmt dir die kniffligen Teile ab – Spannungsregler, Taktquarz, Reset-Schaltung –, damit du dich auf Code und Verdrahtung konzentrieren kannst. Für einen riesigen Anteil der Robotiklernenden ist der Uno der Weg, auf dem sie erstmals einen Motor drehen oder einen Sensor aufleuchten lassen.
Sein dauerhafter Reiz ist nicht rohe Leistung – nach modernen Maßstäben ist er langsam und speicherarm. Es ist Gutmütigkeit. Die 5-V-Pins verzeihen die Verdrahtungsfehler von Anfängern, die Community hat fast jede stellbare Frage beantwortet, und fast jeder Hobby-Sensor und -Treiber wird mit Beispielcode ausgeliefert, der einen Uno voraussetzt.
Wie es funktioniert
Du schreibst einen Sketch – ein C++-Programm mit zwei Funktionen. setup() läuft einmal beim Einschalten; loop() läuft danach für immer. Darin liest du Eingänge und treibst Ausgänge über die Pins an:
- Digitale Pins lesen oder schreiben ein HIGH/LOW-Signal (5 V / 0 V) – ein Tastendruck, eine LED, der Richtungseingang eines Motortreibers.
- PWM-Pins (mit
~markiert) täuschen eine Analogspannung vor, indem sie sehr schnell ein- und ausschalten. So stellst du Motordrehzahl oder LED-Helligkeit ein. - Analoge Eingänge messen eine Spannung von 0–5 V und melden sie als Zahl von 0–1023. So liest du ein Potenziometer oder einen analogen Liniensensor.
Der Uno hat kein Betriebssystem. Dein Code ist das Einzige, was läuft, was das Timing vorhersehbar macht – wertvoll, wenn du eine Regelschleife um einen echten Roboter schließt.
Wann man ihn verwendet
Greife zum Uno, wenn du lernst, wenn du den größtmöglichen Berg kompatibler Tutorials und Bibliotheken willst, oder wenn die Aufgabe deines Roboters einfach und echtzeitfähig ist: ein paar Sensoren lesen, eine Regelschleife fahren, zwei Motoren ansteuern. Ein Linienfolger, ein Hindernisvermeider oder ein kleiner Rover mit Differenzialantrieb liegen genau in seiner Komfortzone.
Schau dich anderswo um, wenn du WLAN oder Bluetooth brauchst (ein ESP32 ist das übliche Upgrade), viel Mathematik oder Kamerabildverarbeitung (ein Raspberry Pi) oder viel Speicher. Die 2 KB SRAM des Uno sind schneller voll, als Anfänger erwarten – lange Zeichenketten und große Arrays sind die üblichen Verdächtigen.
Typische Fallstricke
- Es ist ein 5-V-Board. Viele moderne Sensoren sind 3,3 V und können durch 5-V-Logik beschädigt werden. Prüfe vor dem Verdrahten das Datenblatt.
- Versorge keine Motoren über das Board. Der Regler des Uno kann keinen Motorstrom liefern; nutze einen separaten Akku und einen Motortreiber. Motoren direkt über den Uno zu versorgen, ist der häufigste Weg, wie Anfänger ihr Board in Brown-out oder Reset schicken.
delay()blockiert alles. Während das Board in einemdelay()steckt, kann es keine Sensoren lesen und nicht reagieren. Für alles Reaktionsfreudige miss stattdessen die Zeit mitmillis().- Behalte den Speicher im Auge. Wenn sich das Board ohne klaren Grund unberechenbar verhält, ist dir möglicherweise der SRAM ausgegangen.
Pinbelegung: was jeder Pin wirklich kann
Vierzehn digitale Pins und sechs analoge, aber sie sind nicht austauschbar. Sechs davon haben einen Zweitjob, der zählt.
| Pin | Zusätzlich | Hinweise für einen Roboter |
|---|---|---|
| D0 (RX) | Hardware-Seriell | Nicht verwenden. Der USB-Programmer besitzt ihn |
| D1 (TX) | Hardware-Seriell | Nicht verwenden. Ebenso |
| D2, D3 | Externe Interrupts 0 und 1 | Die einzigen zwei Pins, die an jeder Flanke aufwachen können – reserviere sie für Encoder |
| D3, D5, D6, D9, D10, D11 | PWM (~) |
Die sechs analogWrite-Pins. Motordrehzahl lebt hier |
| D10–D13 | SPI (SS, MOSI, MISO, SCK) | Nötig für SD-Karte oder nRF24-Funk |
| D13 | Eingebaute LED | Hat LED und Widerstand angelötet – schwacher Eingang, als Ausgang in Ordnung |
| A0–A5 | Analogeingang, 10-Bit | Auch als digitale Pins nutzbar, wenn dir welche ausgehen |
| A4, A5 | I²C (SDA, SCL) | Von jedem I²C-Bauteil geteilt – sie als Analogeingänge zu nutzen kostet dich den Bus |
Zwei dieser Zeilen prägen die meisten Roboterentwürfe. D2 und D3 sind die einzigen echten Interrupt-Pins, das heißt, ein Roboter mit zwei Radencodern belegt beide und hat keine mehr übrig. Und A4/A5 sind der I²C-Bus, sodass ein MPU-6050 plus ein analoges Sensorarray an einem Uno sofort um Pins konkurrieren.
Dieser Pin-Druck ist der häufigste Grund, warum ein Projekt aus einem Uno herauswächst – nicht Tempo, nicht Speicher. Vierzehn digitale und sechs analoge Pins sind schnell weg, wenn du einen Motortreiber (6 Pins), ein Encoderpaar (4 Pins, davon 2 Interrupts) und ein Sensorarray (6 analog) hast.
Stromversorgung, und die drei Wege, sie falsch zu machen
| Eingang | Spannung | Weg | Hinweise |
|---|---|---|---|
| USB | 5 V | Über eine rückstellende Sicherung | Begrenzt auf 500 mA für das gesamte Board |
| Hohlsteckerbuchse | 7–12 V | Über den linearen Regler an Bord | Die empfohlene Versorgung |
VIN-Pin |
7–12 V | Gleicher Regler | Dasselbe wie die Buchse, als Pin herausgeführt |
5V-Pin |
5 V | Direkt auf die Schiene | Umgeht den Regler – keinerlei Schutz |
Der Regler ist linear, das heißt, er verbrennt die Differenz zwischen Eingang und 5 V als Wärme. Bei 12 V Eingang und 200 mA Strom sind das (12 − 5) × 0,2 = 1,4 W in einem kleinen Gehäuse, und er wird wirklich heiß. Nimm 9 V statt 12 V, wenn du die Wahl hast.
Drei konkrete Fehler, die man benennen sollte:
Motoren über den 5-V-Pin versorgen. Der Regler kann keinen Motorstrom liefern, also bricht die Schiene ein, das Board startet neu, und das Symptom sieht aus wie ein Softwareabsturz. Motoren bekommen eine eigene Versorgung und teilen nur Masse.
Den 5-V-Pin aus einer ungeregelten Quelle speisen. Dieser Pin liegt direkt auf der Schiene, also geht alles über etwa 5,5 V direkt in den ATmega328P.
Gleichzeitig über USB und Buchse versorgen. Das Board verkraftet das (ein Komparator wählt die höhere Quelle), aber ein Akku an der Buchse lädt dabei nicht und kann über ein grenzwertiges Design bei einem Klon zurückspeisen.
Was die Pins wirklich liefern können
| Grenze | Wert | Was das bedeutet |
|---|---|---|
| Pro Pin | 20 mA empfohlen, 40 mA absolutes Maximum | Eine LED ist in Ordnung. Ein Motor nicht. Eine Relaisspule nicht |
| Summe über alle Pins | 200 mA | Acht LEDs mit je 20 mA sind bereits das ganze Budget |
| 5-V-Pin, über USB versorgt | ~450 mA nach Eigenbedarf des Boards | Ein Servo kann das allein überschreiten |
| 3,3-V-Pin | 50 mA | Kommt vom Regler des USB-Chips – sehr begrenzt |
Der 3,3-V-Pin erwischt Leute regelmäßig. Er ist keine Allzweck-Schiene; er ist eine 50-mA-Annehmlichkeit. Ein sendendes ESP-01-Modul bricht daran sofort ein.
Das 2-KB-Speicherproblem
Der Uno hat 32 KB Flash für dein Programm und 2 KB SRAM für seine Variablen zur Laufzeit. Flash ist selten die Grenze. SRAM schon, ständig.
Jedes String-Literal in einem Serial.print wird beim Start in den SRAM kopiert:
Serial.println("Calibration complete, entering drive mode"); // 43 bytes of SRAM, forever
Zwanzig solcher Meldungen sind 800 Byte – 40 % der Gesamtmenge. Die Lösung ist F(), das den String im Flash lässt und bei Bedarf liest:
Serial.println(F("Calibration complete, entering drive mode")); // 0 bytes of SRAM
Arrays sind der andere Verbraucher. Ein float sind 4 Byte, also sind ein 200-Samples-Logpuffer 800 Byte, und es gibt überhaupt keine Warnung – der Compiler meldet fröhlich den Flash-Verbrauch und sagt nichts Brauchbares zum Laufzeit-SRAM.
Das Symptom bei Speichermangel ist kein sauberer Fehler. Der Stack wächst nach unten, der Heap nach oben, und wenn sie sich treffen, beschädigen sich Variablen gegenseitig lautlos. Das Board verhält sich unberechenbar: Messwerte, die keinen Sinn ergeben, eine Schleife, die springt, ein Reset ohne Ursache. Wenn sich ein Uno nach einer neuen Funktion irrational verhält, verdächtige SRAM vor allem anderen.
// 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);
}
Unter etwa 200 Byte frei rechne mit Ärger.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Startet neu, wenn Motoren anlaufen | Motorstrom über das Board | Separate Motorversorgung, nur gemeinsame Masse |
| Upload scheitert: „not in sync“ | Etwas an D0/D1 oder falscher Port | Alles an den seriellen Pins abstecken |
| Unberechenbares Verhalten nach neuem Code | SRAM aufgebraucht | Literale in F() packen; freeRam() prüfen |
analogWrite tut nichts |
Pin ist nicht PWM-fähig | 3, 5, 6, 9, 10 oder 11 nutzen |
| Servo-Bibliothek zerstört PWM auf 9/10 | Servo übernimmt Timer 1 |
Andere PWM-Pins nutzen oder Servos über PCA9685 ansteuern |
| I²C-Gerät nicht gefunden | A4/A5 anderweitig belegt | Der I²C-Bus sind exklusiv diese zwei Pins |
| Regler sehr heiß | Eingang nahe 12 V | Auf 7–9 V heruntergehen |
| 3,3-V-Bauteil bricht ein | 50-mA-Grenze dieses Pins | Separaten 3,3-V-Regler nutzen |
| Sensor misst Unsinn | 3,3-V-Sensor an 5-V-Logik | Pegel wandeln oder 3,3-V-Board nutzen |
Uno oder etwas anderes?
| Board | Logik | Warum es wählen |
|---|---|---|
| Uno | 5 V | Gutmütig, universell dokumentiert, gesockelter Chip zum Austauschen |
| Nano | 5 V | Gleicher Chip, breadboardfreundlich, 8 Analogeingänge statt 6 |
| Mega 2560 | 5 V | 54 digital, 16 analog, 6 Interrupts, 8 KB SRAM – die Antwort auf Pin-Druck |
| ESP32 | 3,3 V | WLAN, Bluetooth, Dual-Core, deutlich schneller |
| Pro Micro | 5 V | Natives USB – kann sich als Tastatur oder Maus ausgeben |
Der Nano verdient für Roboter besondere Erwähnung: Es ist derselbe ATmega328P mit demselben Code, und er führt A6 und A7 als zusätzliche Analogeingänge heraus. Für ein 8-kanaliges Reflexionsarray ist das der Unterschied zwischen passt und passt nicht – genau deshalb nennen Linienfolger-Bauten so oft einen Nano.
Die ehrliche Zusammenfassung: Der Wert des Uno ist, dass darauf alles beim ersten Mal funktioniert. Jede Bibliothek, jedes Tutorial, jeder Verdrahtungsplan setzt ihn voraus. Das zählt beim Lernen mehr als jede Spezifikation, und wenn du herauswächst, wird das Herausgewachsene fast immer die Pinzahl sein.
Den Graphen erkunden
Verwendet in diesen Bauprojekten
Projekte, Lernpfade und Simulatoren, die Arduino Uno verwenden.
- Projekt4-DOF-Roboterarm bauen: PCA9685, Servos, Kinematik
- ProjektEin handygesteuertes Roboterauto über Bluetooth oder WLAN bauen
- ProjektEinen Raumabdeckungsroboter bauen, der Böden kehrt
- ProjektEinen ROS-2-Roboter bauen, der sieht und zu einem Marker fährt
- ProjektEinen Stiftplotter bauen: Zwei Schrittmotorachsen, die ankommen
- ProjektGPS-Wegpunkt-Rover bauen: Fährt seine Route selbst
- ProjektHindernisvermeidung bauen: Tasten, Scannen, Lenken
- ProjektLinien-Labyrinthlöser bauen: Mit LSRB-Routenspeicher
- ProjektLinienfolger-Roboter bauen: Vom Simulator zur Strecke
- ProjektMicromouse bauen: Labyrinth-Roboter mit Flood-Fill
- ProjektMini-Sumo-Roboter bauen: Grip, Keil, Kantensensorik
- ProjektPick-and-Place-Roboter: Der Fehlgriffe erkennt
- ProjektSelbstbalancierender Roboter: MPU6050 und PID
- LernpfadElektronik-Grundlagen für Roboter: Ein Lernpfad
Vergleich
Alternativen
Fragen
FAQ zu Arduino Uno
Was ist der Arduino Uno?
Der Arduino Uno ist ein einsteigerfreundliches Mikrocontroller-Board rund um den ATmega328P-Chip. Damit liest du Sensoren aus und steuerst Motoren, LEDs und andere Elektronik mit kurzen C++-Programmen, sogenannten Sketches – das Board, auf dem die meisten Robotik lernen.
Wofür wird der Arduino Uno in der Robotik verwendet?
In der Robotik ist der Uno das Gehirn des Roboters: Er liest Sensoren, führt eine Regelschleife aus und treibt Motoren über einen Treiber wie den L298N an. Er eignet sich für Linienfolger, Hindernisvermeider und kleine Rover, bei denen die Aufgabe einfach ist und vorhersehbares Echtzeit-Timing braucht.
Welcher Mikrocontroller steckt im Arduino Uno?
Im Arduino Uno arbeitet Microchips ATmega328P, ein 8-Bit-AVR-Mikrocontroller mit 16 MHz, 32 KB Flash und 2 KB SRAM. Das Board ergänzt diesen einen Chip um eine USB-Schnittstelle, einen Spannungsregler und Stiftleisten.
Wird Arduino in C oder C++ programmiert?
Arduino-Sketches werden in C++ mit einem vereinfachten, einsteigerfreundlichen Framework darüber geschrieben. Reines C geht auch, da C weitgehend eine Teilmenge von C++ ist, aber die Standard-Arduino-Funktionen und Bibliotheken sind C++.
Ist Arduino-Code schwer zu lernen?
Nein – Arduino ist einer der sanftesten Einstiege in die Hardwareprogrammierung. Die Zwei-Funktionen-Struktur aus setup und loop, ein riesiges Bibliotheksökosystem und Tausende Beispiel-Sketches bedeuten: Als Anfänger lässt du innerhalb einer Stunde eine LED blinken oder einen Motor drehen.
Was ist besser für Robotik, Arduino oder Raspberry Pi?
Sie lösen verschiedene Probleme. Arduino ist ein Mikrocontroller – großartig für Echtzeitsteuerung von Motoren und Sensoren mit vorhersehbarem Timing. Ein Raspberry Pi ist ein vollwertiger Linux-Rechner – besser für Bildverarbeitung, rechenintensive Aufgaben oder WLAN. Viele fortgeschrittene Roboter nutzen beides: einen Pi zum Denken und einen Arduino zum Handeln.
Warum ist der Arduino Uno so weit verbreitet?
Weil er gutmütig ist und bestens unterstützt wird. Seine 5-V-Pins verzeihen die Verdrahtungsfehler von Anfängern, fast jeder Hobby-Sensor wird mit Uno-Beispielcode geliefert, und die Community hat fast jede Frage schon beantwortet – man bleibt selten lange stecken.
Kann ich ChatGPT oder KI für Arduino-Code nutzen?
Ja – KI-Assistenten können Arduino-Sketches entwerfen und beim Debugging helfen und sind eine nützliche Lernhilfe. Teste KI-generierten Code immer an der Hardware, bevor du ihm vertraust, denn ein plausibel aussehender Sketch kann trotzdem falsche Pinnummern, falsches Timing oder falsche Logik enthalten.
Weiterführende Literatur