Arduino UNO R3 Einsteiger-Tutorial: Dein erstes Projekt

Du hast noch nie einen Mikrocontroller programmiert? Kein Problem. In diesem Tutorial baust du in weniger als einer Stunde drei funktionierende Schaltungen – von der blinkenden LED bis zur digitalen Temperaturmessung. Alles, was du brauchst: ein UNO R3 Board, ein paar Bauteile und diesen Guide.

Warum der Arduino UNO R3 der perfekte Einstieg ist

Die Welt der Mikrocontroller kann einschüchternd wirken. ESP32, STM32, Raspberry Pi Pico, Nano, Mega – die Auswahl ist riesig, und jede Plattform hat ihre Eigenheiten. Genau deshalb ist der Arduino UNO R3 seit über einem Jahrzehnt der Goldstandard für Einsteiger. Hier sind die Gründe:

🦾 Arduino UNO R3 – Der Klassiker

  • Leonardo-Kompatibilität: Der ATmega328P-Mikrocontroller ist seit Jahren dokumentiert, getestet und in unzähligen Projekten bewährt
  • 5V-Logikpegel: Die meisten Sensoren und Module laufen nativ auf 5V – kein Pegelwandler nötig
  • Robuste Spannungsversorgung: 7–12V über den DC-Hohlstecker oder direkt 5V über USB-C – das Board verzeiht auch mal einen Anschlussfehler
  • 14 digitale I/O-Pins: Davon 6 PWM-fähig für Helligkeitssteuerung oder Servos
  • 6 analoge Eingänge: Perfekt zum Auslesen von Sensoren wie Potentiometern, Lichtsensoren oder Temperaturfühlern
  • USB-C-Anschluss: Kein fummeliges Micro-USB mehr – robust, steckbar in beide Richtungen, moderne Schnittstelle
  • Arduino IDE: Die Entwicklungsumgebung ist kostenlos, läuft auf Windows, macOS und Linux und kommt mit tausenden Beispiel-Projekten

🎯 Perfekt für: Erste Schritte mit Mikrocontrollern, Schulprojekte, Prototyping, IoT-Grundlagen

Im Vergleich zum kleineren Nano V3 punktet der UNO R3 vor allem durch die bessere Zugänglichkeit: Die Pins sind beschriftet, die Buchsenleisten nehmen handelsübliche Jumper-Kabel auf, und das Breadboard-Layout ist Standard. Du musst nicht löten und kannst jede Schaltung in Sekunden umbauen. Und falls doch mal was schiefgeht: Der austauschbare ATmega328P im DIP-Gehäuse lässt sich bei einem Defekt einfach tauschen – bei SMD-Boards undenkbar.

Unser UNO R3 Entwicklungsboard mit USB-C ist vollständig Arduino-IDE-kompatibel, wird per CH340-Treiber erkannt und kostet einen Bruchteil des Originals – bei identischer Funktion.

Was du für dieses Tutorial brauchst

Hier ist die Einkaufsliste. Alle Teile findest du direkt bei makeroo – so sparst du Versand und bekommst alles aus einer Hand.

Bauteil Menge ca. Preis Link
UNO R3 Board (USB-C) 1x ab 12 € Zum Produkt
Breadboard 400 Kontakte 1x ab 3 € Zum Produkt
3mm LED Set (100er Box) 1x ab 6 € Zum Produkt
Widerstände Set (600 Stück) 1x ab 8 € Zum Produkt
JST-XH Stecker Set (230-teilig) 1x ab 10 € Zum Produkt
DHT22 Temperatur-/Feuchtesensor 1x ab 4 € Zum Produkt

Zusätzlich brauchst du ein USB-C-Kabel (Datenkabel, kein reines Ladekabel!) und einen Computer mit installierter Arduino IDE. Die IDE ist kostenlos unter arduino.cc/en/software erhältlich. Installation: Herunterladen, starten, fertig.

💡 Tipp: Das 600er-Widerstände-Set und das 100er-LED-Set sind die beiden Teile, die du bei jedem zukünftigen Projekt brauchen wirst. Wenn du nur zwei Dinge zusätzlich zum UNO kaufst, dann diese. Der Rest kommt mit der Zeit.

Vorbereitung: Arduino IDE einrichten

Bevor wir die erste LED zum Blinken bringen, muss die Entwicklungsumgebung laufen. Das ist in 5 Minuten erledigt:

  1. Arduino IDE installieren: Von arduino.cc herunterladen und installieren. Fertig.
  2. UNO R3 per USB-C verbinden: Das Board wird mit Strom versorgt – die grüne Power-LED leuchtet. Windows erkennt das Board automatisch und installiert den CH340-Treiber. Falls nicht: CH340-Treiber einmalig von der Herstellerseite laden.
  3. Board und Port auswählen: In der IDE oben auf Tools → Board → Arduino Uno stellen. Dann Tools → Port – den COM-Port (Windows) bzw. /dev/ttyUSB0 (Linux/Mac) auswählen, der auftaucht, sobald das Board verbunden ist.
  4. Test mit Blink-Beispiel: Datei → Beispiele → 01.Basics → Blink öffnen und auf den Pfeil (Upload) klicken. Wenn die onboard-LED (Pin 13) nach ein paar Sekunden blinkt, ist alles bereit.

⚠️ Häufiger Fehler: Der Upload schlägt fehl mit „avrdude: stk500_getsync(): not in sync"? Dann stimmt entweder der Port nicht, oder der CH340-Treiber fehlt. Kontrolliere unter Tools → Port, ob das Board erkannt wurde. Tipp: USB-Kabel abziehen und wieder einstecken – der richtige Port verschwindet und taucht wieder auf.

Projekt 1: LED blinken lassen – Dein „Hello World"

Das erste Programm in jeder neuen Programmiersprache ist „Hello World". In der Welt der Mikrocontroller ist es die blinkende LED. Dieses Projekt zeigt dir die absoluten Grundlagen: Digitaler Ausgang, pinMode(), digitalWrite() und delay().

Schaltungsaufbau

Der Aufbau ist simpel und benötigt nur drei Teile:

UNO R3 Pin Bauteil Verbindung
Digital Pin 13 LED (Anode, langes Bein) → 220Ω Widerstand → LED-Anode
GND LED (Kathode, kurzes Bein) → LED-Kathode

Aufbau auf dem Breadboard: Stecke das UNO Board so in die obere Hälfte des Breadboards, dass die Pin-Leisten beidseitig erreichbar sind. Verbinde Pin 13 über einen 220Ω Widerstand (rot-rot-braun) mit der Anode (langes Bein) der LED. Die Kathode (kurzes Bein) kommt direkt auf die GND-Schiene des Breadboards, die du mit einem Jumper-Kabel mit einem GND-Pin des UNO verbindest.

⚠️ Wichtig: Immer einen Vorwiderstand verwenden! Ohne den 220Ω-Widerstand fließt zu viel Strom durch die LED – sie brennt innerhalb von Sekunden durch. Als Faustregel: 220Ω für rote/gelbe/grüne LEDs, 100Ω für blaue/weiße. Farbcode-Tabelle liegt dem Widerstände-Set bei.

Der Code

Kopiere diesen Code in die Arduino IDE und lade ihn auf dein Board:

// Projekt 1: LED blinken lassen
// Schaltung: Pin 13 → 220Ω Widerstand → LED (Anode)
// LED Kathode → GND

void setup() {
  pinMode(13, OUTPUT);  // Pin 13 als Ausgang definieren
}

void loop() {
  digitalWrite(13, HIGH);  // LED einschalten
  delay(1000);             // 1000 Millisekunden = 1 Sekunde warten
  digitalWrite(13, LOW);   // LED ausschalten
  delay(1000);             // 1 Sekunde warten
}

So funktioniert's

Jedes Arduino-Programm besteht aus zwei Funktionen: setup() läuft genau einmal beim Start. Hier konfigurieren wir Pin 13 als OUTPUT. loop() läuft danach in einer Endlosschleife – immer und immer wieder. digitalWrite(13, HIGH) setzt den Pin auf 5V, die LED leuchtet. delay(1000) pausiert das Programm für 1000 Millisekunden. Dann schaltet digitalWrite(13, LOW) den Pin auf 0V, die LED erlischt. Nochmal 1 Sekunde warten – und von vorn.

💡 Experimentiere: Ändere die delay()-Werte! Mach aus 1000 ms mal 100 ms – die LED flackert schnell. Oder 100 ms an, 900 ms aus – ein kurzer Blitz. Ändere auch den Pin: Alle digitalen Pins 0–13 funktionieren. So lernst du das Timing-Gefühl für deinen Arduino.

Projekt 2: Taster steuert LED – Inputs verstehen

Eine LED einfach nur blinken zu lassen ist nett. Spannender wird es, wenn wir Interaktion ins Spiel bringen. In diesem Projekt schaltest du eine LED per Taster ein und aus – und lernst dabei digitale Eingänge, digitalRead() und den wichtigen INPUT_PULLUP-Modus kennen.

Schaltungsaufbau

Wir erweitern die Blink-Schaltung um einen Taster:

UNO R3 Pin Bauteil Verbindung
Digital Pin 2 Taster (ein Bein) → Taster Bein A
GND Taster (anderes Bein) → Taster Bein B (gegenüberliegende Seite)
Digital Pin 13 LED (Anode) → 220Ω Widerstand → LED-Anode
GND LED (Kathode) → LED-Kathode

Wichtig: Der Taster kommt quer über die Mittelrinne des Breadboards. Taster haben vier Beine – die beiden auf einer Seite sind intern verbunden. Du verbindest eine Seite mit Pin 2, die gegenüberliegende mit GND. Kein externer Pull-Up-Widerstand nötig – wir nutzen den internen.

Der Code

// Projekt 2: Taster steuert LED
// Taster zwischen Pin 2 und GND
// LED an Pin 13 mit 220Ω Vorwiderstand

const int tasterPin = 2;   // Taster an Pin 2
const int ledPin = 13;     // LED an Pin 13
int tasterZustand = 0;     // Variable für den Tasterzustand

void setup() {
  pinMode(ledPin, OUTPUT);          // LED-Pin als Ausgang
  pinMode(tasterPin, INPUT_PULLUP); // Taster-Pin als Eingang mit Pull-Up
  Serial.begin(9600);               // Serielle Kommunikation starten
}

void loop() {
  tasterZustand = digitalRead(tasterPin);  // Taster auslesen

  if (tasterZustand == LOW) {        // Taster gedrückt? (LOW wegen PULLUP!)
    digitalWrite(ledPin, HIGH);      // LED einschalten
    Serial.println("Taster gedrückt - LED AN");
  } else {
    digitalWrite(ledPin, LOW);       // LED ausschalten
    Serial.println("Taster losgelassen - LED AUS");
  }

  delay(50);  // Kleine Pause zur Entprellung
}

So funktioniert's

Hier passiert etwas Neues: INPUT_PULLUP. Ein „Pull-Up"-Widerstand zieht den Pin im Ruhezustand auf HIGH (5V). Wenn der Taster gedrückt wird, verbindet er den Pin mit GND – der Pin wird LOW. Deshalb prüfen wir auf LOW für „Taster gedrückt". Der große Vorteil: Du brauchst keinen externen Widerstand – der ATmega328P hat 20kΩ Pull-Ups eingebaut. Weniger Bauteile, weniger Fehlerquellen.

Serial.begin(9600) startet die serielle Kommunikation. Mit Serial.println() schicken wir Nachrichten an den Computer. Öffne in der Arduino IDE den Serial Monitor (Tools → Serial Monitor oder Strg+Shift+M), um die Ausgaben live zu sehen – perfekt zum Debuggen!

⚠️ Taster-Prellen: Mechanische Taster prellen – das Signal wackelt für wenige Millisekunden. Das delay(50) ist eine einfache Software-Entprellung. Für präzise Projekte brauchst du später eine richtige Entprell-Logik mit Zeitstempeln. Der DHT22-Sensor im nächsten Projekt macht dir das vor.

Variante: Umschaltender Taster (Toggle)

Statt die LED nur beim Drücken leuchten zu lassen, kannst du sie mit jedem Tastendruck umschalten – wie ein Lichtschalter. Ersetze den loop()-Teil durch diesen Code:

bool ledAn = false;
bool letzterTasterZustand = HIGH;
unsigned long letzteEntprellZeit = 0;
const unsigned long entprellVerzoegerung = 50;

void loop() {
  int lesen = digitalRead(tasterPin);

  if (lesen != letzterTasterZustand) {
    letzteEntprellZeit = millis();  // Zeitstempel zurücksetzen
  }

  if ((millis() - letzteEntprellZeit) > entprellVerzoegerung) {
    if (lesen == LOW) {              // Taster stabil gedrückt
      ledAn = !ledAn;                // Zustand umschalten
      digitalWrite(ledPin, ledAn);
      delay(200);                    // Warten gegen Doppelauslösung
    }
  }

  letzterTasterZustand = lesen;
}

Jetzt schaltet jeder Tastendruck die LED um. Die millis()-Funktion liefert die Millisekunden seit Programmstart – damit entprellen wir den Taster sauber ohne blockierendes delay().

Projekt 3: Temperatur und Luftfeuchtigkeit messen mit dem DHT22

Jetzt wird es praktisch: Wir lesen einen digitalen Sensor aus. Der DHT22 (auch als AM2302 bekannt) misst Temperatur und relative Luftfeuchtigkeit mit hoher Genauigkeit – und kommuniziert über nur einen einzigen Daten-Pin. Das ist typisch für viele Sensoren und ein Konzept, das dir immer wieder begegnet.

Warum der DHT22?

Der DHT22 ist seinem kleinen Bruder DHT11 in jeder Hinsicht überlegen:

  • Temperatur: -40 °C bis +80 °C mit ±0,5 °C Genauigkeit (DHT11: nur 0–50 °C, ±2 °C)
  • Luftfeuchtigkeit: 0–100 % rH mit ±2 % Genauigkeit
  • Abtastrate: Alle 2 Sekunden (0,5 Hz) – schnell genug für Raumklima-Überwachung

Schaltungsaufbau

Die Verkabelung des DHT22 ist denkbar einfach – nur drei Verbindungen. Das Modul hat vier Pins, aber wir nutzen nur drei, weil ein Pin (NC = Not Connected) unbeschaltet bleibt:

DHT22 Pin UNO R3 Pin Funktion
VCC (Pin 1) 5V Spannungsversorgung
DATA (Pin 2) Digital Pin 7 Datenleitung (One-Wire)
NC (Pin 3) – (nicht verbinden) Nicht belegt
GND (Pin 4) GND Masse

Zwischen VCC und DATA gehört ein 4,7kΩ Pull-Up-Widerstand. Viele DHT22-Module von makeroo haben diesen bereits auf der kleinen Platine integriert – ein Blick auf die Rückseite zeigt, ob ein kleiner SMD-Widerstand vorhanden ist. Falls nicht: 4,7kΩ aus dem Widerstände-Set zwischen VCC und DATA schalten.

Bibliothek installieren

Damit der DHT22 funktioniert, brauchst du eine Bibliothek. In der Arduino IDE: Sketch → Bibliothek einbinden → Bibliotheken verwalten. Such nach „DHT sensor library" von Adafruit und installiere sie. Die IDE installiert automatisch auch die benötigte „Adafruit Unified Sensor"-Bibliothek mit.

Der Code

// Projekt 3: Temperatur & Luftfeuchtigkeit mit DHT22
// DHT22 DATA-Pin an Pin 7
// VCC an 5V, GND an GND
// 4,7kΩ Pull-Up zwischen VCC und DATA (oft bereits auf dem Modul)

#include "DHT.h"

#define DHT_PIN 7       // Daten-Pin des DHT22
#define DHT_TYPE DHT22  // Sensortyp: DHT22 (AM2302)

DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("=== DHT22 Raumklima-Monitor ===");
  Serial.println("Starte Sensor...");
  dht.begin();
  delay(2000);  // Sensor braucht 2 Sekunden zum Stabilisieren
}

void loop() {
  delay(2000);  // DHT22 maximal alle 2 Sekunden abfragen

  float luftfeuchtigkeit = dht.readHumidity();
  float temperatur = dht.readTemperature();

  // Fehlerbehandlung
  if (isnan(luftfeuchtigkeit) || isnan(temperatur)) {
    Serial.println("FEHLER: Sensor konnte nicht ausgelesen werden!");
    Serial.println("Prüfe: Verkabelung, Pull-Up-Widerstand, VCC (5V)");
    return;  // loop() neu starten
  }

  // Ergebnisse ausgeben
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(luftfeuchtigkeit);
  Serial.print(" %\t");

  Serial.print("Temperatur: ");
  Serial.print(temperatur);
  Serial.println(" °C");

  // Hitze- / Kälte-Warnung
  if (temperatur > 30.0) {
    Serial.println("WARNUNG: Hohe Temperatur – Lüften empfohlen!");
  } else if (temperatur < 15.0) {
    Serial.println("INFO: Recht kühl – Heizung prüfen.");
  }
}

So funktioniert's

Nach dem Upload öffnest du den Serial Monitor (9600 Baud einstellen!). Alle zwei Sekunden erscheinen die aktuellen Messwerte. Puste sanft auf den Sensor – die Temperatur und Luftfeuchtigkeit sollten sich sichtbar verändern. Damit hast du deinen ersten funktionierenden digitalen Sensor ausgelesen.

Die Funktion isnan() prüft, ob der Sensor einen gültigen Wert geliefert hat. isnan steht für „is Not a Number" und ist essentiell für robuste Messprogramme – der DHT22 kann bei Kommunikationsfehlern ungültige Werte liefern. Ohne diese Prüfung würdest du „nan" im Serial Monitor sehen und im schlimmsten Fall falsche Entscheidungen im Programm treffen.

💡 Erweiterungsidee: Kombiniere Projekt 2 und 3! Lass eine LED aufleuchten, wenn die Temperatur über 25 °C steigt. Oder schließe eine zweite LED an, die bei unter 30 % Luftfeuchtigkeit warnt (trockene Heizungsluft im Winter). Mit if (luftfeuchtigkeit < 30) { digitalWrite(warnLedPin, HIGH); } hast du deinen ersten Raumklima-Alarm gebaut.

Häufige Fehler und wie du sie behebst

Jeder, der mit Mikrocontrollern arbeitet, macht Fehler. Das ist Teil des Lernprozesses. Hier die häufigsten Stolperfallen – und wie du sie in 30 Sekunden behebst:

🔴 Upload schlägt fehl: Board nicht erkannt? Anderen USB-Port testen, Kabel prüfen (Datenkabel, kein reines Ladekabel!), CH340-Treiber installieren. Manchmal hilft: Arduino IDE schließen und neu öffnen.

🔴 LED leuchtet nicht: Polarität prüfen! Das lange Bein (Anode) muss zum Widerstand/Pin, das kurze (Kathode) zu GND. Vorwiderstand vergessen? Ohne 220Ω ist die LED entweder durchgebrannt oder der Pin liefert nicht genug Strom.

🔴 Taster reagiert nicht: INPUT_PULLUP gesetzt? Ohne Pull-Up schwebt der Pin („floating") und liefert zufällige Werte. Taster sitzt quer über der Breadboard-Mittelrinne? Die Beine einer Seite sind verbunden – nicht auf derselben Seite verdrahten.

🔴 DHT22 zeigt „nan": Sensor bekommt keine Spannung (VCC auf 5V prüfen), DATA-Pin falsch angegeben, oder Pull-Up-Widerstand fehlt. Auch möglich: Du hast den Sensor zu schnell hintereinander ausgelesen – mindestens 2 Sekunden Pause zwischen Abfragen.

🔴 Serial Monitor zeigt komische Zeichen: Baudrate stimmt nicht! Die Baudrate im Serial Monitor (unten rechts) muss mit dem Wert in Serial.begin() übereinstimmen. Standard ist 9600.

Grundregel beim Debuggen: Immer nur eine Sache gleichzeitig ändern. Sonst weißt du nie, welche Änderung das Problem gelöst hat. Und: Der Serial Monitor ist dein bester Freund. Wenn etwas nicht funktioniert, gib mit Serial.println() aus, was dein Programm gerade tut – so siehst du sofort, wo es hakt.

Nächste Schritte: Vom UNO R3 zum Nano V3 und mehr

Du hast jetzt drei Projekte erfolgreich umgesetzt – Gratulation! Dein UNO R3 ist ein fantastisches Einstiegs-Board, aber irgendwann willst du vielleicht mehr. Kleinere Projekte, mehr Leistung, drahtlose Kommunikation. Hier ist dein Upgrade-Pfad:

📦 Arduino Nano V3 – Klein, günstig, breadboard-freundlich

  • Gleicher Chip wie der UNO R3 (ATmega328P) – dein gesamter Code läuft 1:1 weiter
  • Nur 45 × 18 mm – passt direkt aufs Breadboard, kein externes Board nötig
  • USB-C – gleiche moderne Schnittstelle wie der UNO R3
  • Perfekt für fertige Projekte, die dauerhaft verbaut werden (Gehäuse, 3D-Druck, Wearables)
  • Preis: Nochmal günstiger als der UNO – ideal für Multi-Sensor-Projekte

🎯 Perfekt für: Kompakte Projekte, mehrere Boards gleichzeitig, fest verbaute Steuerungen

Unser Nano V3 mit USB-C ist der logische nächste Schritt. Gleicher ATmega328P, gleiche Arduino IDE, gleiche Programmierung – nur kompakter und günstiger. Viele Maker haben einen UNO R3 zum Experimentieren auf dem Schreibtisch und mehrere Nano V3 in fertigen Projekten.

Bei den Sensoren lohnt sich nach dem DHT22 vor allem der HC-SR04 Ultraschallsensor für Abstandsmessungen. Von der einfachen Parkhilfe bis zum interaktiven Kunstprojekt – Ultraschall ist vielseitig und einfach anzusteuern. Oder stöbere in unseren Kategorien:

🔧 Dein nächstes Projekt startet hier

Alles, was du für die nächsten Schritte brauchst, findest du bei makeroo – von Mikrocontrollern über Sensoren bis zum passenden Zubehör.

Noch Fragen zu deinem UNO R3? Schreib uns – wir helfen dir gerne weiter!

Fazit: Dein Einstieg in die Welt der Mikrocontroller

In diesem Tutorial hast du drei vollständige Projekte gebaut – von der blinkenden LED über eine Taster-gesteuerte Schaltung bis zum digitalen Temperatursensor. Du kennst jetzt die wichtigsten Konzepte der Arduino-Programmierung:

  • Digitale AusgängepinMode(), digitalWrite() und wann ein Vorwiderstand nötig ist
  • Digitale Eingänge – Taster mit INPUT_PULLUP ohne externe Bauteile
  • Serielle Kommunikation – Der Serial Monitor als dein Debug-Werkzeug Nr. 1
  • Sensor-Integration – Bibliotheken einbinden und präzise Sensordaten auslesen
  • Fehlerbehandlungisnan() und millis() für robuste Programme ohne Abstürze
  • Entprellung – Mechanische Taster sauber auslesen ohne Störsignale

Der UNO R3 ist der perfekte Startpunkt: robust, gut dokumentiert, verzeiht Anfängerfehler und wächst mit deinen Fähigkeiten mit. Wenn du irgendwann an seine Grenzen stößt, wartet der Nano V3 auf dich – kleiner, günstiger, aber mit exakt dem gleichen Chip und 100 % Code-Kompatibilität.

Das Wichtigste zum Schluss: Einfach machen. Jedes Projekt, das du baust, bringt dich weiter. Fehler sind keine Rückschläge, sondern die beste Lernquelle, die es gibt. Also: Breadboard raus, UNO R3 anschließen, loslegen. 🚀

Zurück zum Blog