NWT9 - Einen Mikrocontroller programmieren

NWT9 - Einen Mikrocontroller programmieren
NWT9 - Einen Mikrocontroller programmieren
Einleitung
Ein Mikrocontroller ist ein kleiner Computer auf einem Chip: Er kann Eingaben einlesen, ein Programm ausführen und Ausgänge ansteuern. In Alltagsgeräten arbeitet er oft unsichtbar, zum Beispiel in Haushaltsgeräten, Fahrzeugen, Messgeräten, Spielzeug oder automatisierten Anlagen. In diesem aiMOOC lernst Du nicht nur, einen Mikrocontroller zu programmieren, sondern einen vollständigen technischen Entwicklungsprozess zu durchlaufen: Problem verstehen, Ein- und Ausgänge festlegen, Schaltung planen, Programm schreiben, testen, Fehler systematisch suchen und das Ergebnis dokumentieren.
Als gemeinsames Beispiel dient ein sicheres Kleinspannungsprojekt: eine automatische Beleuchtung mit einem Arduino Uno, einem Fotowiderstand und einer LED. Die Schaltung wird nur über USB bzw. eine geeignete Kleinspannungsversorgung betrieben. Netzspannung ist ausdrücklich ausgeschlossen. Danach überträgst Du das Prinzip auf ein Warnsystem mit Abstandssensor sowie auf eine Modellsteuerung mit Servomotor.

Ein Arduino Uno ist ein verbreitetes Mikrocontroller-Board für Unterricht und Prototyping. Andere Systeme wie der BBC micro:bit erfüllen ähnliche Aufgaben, unterscheiden sich aber in Hardware, Anschlüssen und Programmierumgebung.

Lernziele
Nach diesem aiMOOC kannst Du erklären, wie ein Mikrocontroller nach dem Prinzip Eingabe – Verarbeitung – Ausgabe arbeitet. Du kannst einfache Sensoren und Aktoren unterscheiden, digitale und analoge Signale einordnen, einen Ablauf als Algorithmus formulieren, ein Arduino-Programm mit Variablen, Bedingungen und Ein-/Ausgabefunktionen schreiben, Messwerte über den seriellen Monitor beobachten und eine Fehlersuche strukturiert durchführen.
Du arbeitest auf drei Niveaustufen:
| Niveau | Ziel | Typische Leistung |
|---|---|---|
| G – Grundniveau | Eine vorgegebene Schaltung verstehen, sicher aufbauen und ein einfaches Programm anpassen. | Sensorwert lesen, Schwellenwert vergleichen, LED schalten, einfache Fehler finden. |
| M – Mittleres Niveau | Eine Teilaufgabe selbst planen und das Programm robuster machen. | Messwerte kalibrieren, Hysterese einsetzen, Testfälle planen, Warnsystem erweitern. |
| E – Erweitertes Niveau | Ein System selbstständig entwerfen, begründen, optimieren und dokumentieren. | Funktionen strukturieren, Messwerte filtern, Zustände modellieren, Servo- oder Modellsteuerung sicher integrieren. |
Was ist ein Mikrocontroller?
Ein Mikrocontroller enthält typischerweise einen Prozessor, Speicher und Schnittstellen für Ein- und Ausgaben. Er ist dafür gedacht, eine klar abgegrenzte technische Aufgabe zuverlässig auszuführen. Das Programm wird in den Programmspeicher übertragen und nach dem Start wiederholt abgearbeitet.
Bei einem Arduino Uno R3 befindet sich der Mikrocontroller auf einem Entwicklungsboard. Das Board ergänzt unter anderem USB-Anschluss, Spannungsversorgung und leicht zugängliche Pins. Für Lernprojekte ist das praktisch, weil Sensoren und Aktoren ohne eigene Leiterplatte verbunden werden können.
Wichtig: Der Begriff Arduino bezeichnet nicht nur einen einzelnen Mikrocontroller. Ein Arduino Uno ist ein Entwicklungsboard, auf dem ein Mikrocontroller arbeitet. Der Mikrocontroller selbst ist das eigentliche Rechensystem.
Eingabe – Verarbeitung – Ausgabe
Fast jedes Mikrocontroller-Projekt lässt sich zuerst als Informationsfluss beschreiben:
| Schritt | Bedeutung | Beispiel automatische Beleuchtung |
|---|---|---|
| Eingabe | Ein Sensor liefert Informationen aus der Umgebung. | Ein Fotowiderstand liefert einen Helligkeitswert. |
| Verarbeitung | Das Programm bewertet die Eingangsdaten. | Der Messwert wird mit einem Schwellenwert verglichen. |
| Ausgabe | Ein Aktor setzt das Ergebnis sichtbar, hörbar oder mechanisch um. | Eine LED wird ein- oder ausgeschaltet. |
Ein Sensor wandelt eine physikalische Größe in ein elektrisches Signal um. Ein Aktor wirkt in die Umwelt hinein, zum Beispiel durch Licht, Ton oder Bewegung.
Digitale und analoge Signale
Ein digitales Signal wird in einfachen Mikrocontroller-Anwendungen als zwei Zustände betrachtet, zum Beispiel LOW und HIGH. Ein Taster ist ein typischer digitaler Eingang; eine LED kann ein digitaler Ausgang sein.
Ein analoges Signal kann innerhalb eines Bereichs viele Werte annehmen. Der Arduino Uno R3 besitzt analoge Eingänge, an denen eine Spannung durch einen Analog-Digital-Wandler in einen Zahlenwert umgewandelt wird. Beim klassischen Uno R3 liefert analogRead() standardmäßig Werte von 0 bis 1023. Bei anderen Boards kann der Wertebereich anders sein.
Mit PWM kann ein digitaler Ausgang so schnell ein- und ausgeschaltet werden, dass sich zum Beispiel die mittlere Helligkeit einer LED verändern lässt. PWM ist keine echte analoge Ausgangsspannung; es ist ein zeitliches Schaltsignal.
Bauteile kennenlernen
Steckbrett und Leitungen
Ein Steckbrett, auch Breadboard genannt, ermöglicht Schaltungen ohne Löten. Die Kontaktreihen sind intern elektrisch verbunden. Vor dem Aufbau musst Du verstehen, welche Löcher miteinander verbunden sind, sonst entstehen leicht unbeabsichtigte Kurzschlüsse oder offene Verbindungen.

LED als Aktor
Eine LED leuchtet nur bei richtiger Polung. Bei einer typischen bedrahteten LED ist das längere Bein die Anode und das kürzere Bein die Kathode. Für Unterrichtsschaltungen an einem Mikrocontroller-Ausgang wird ein geeigneter Vorwiderstand verwendet, damit der Strom begrenzt wird. Im Projekt wird beispielsweise ein Widerstand im Bereich von 220 bis 330 Ohm verwendet.

Fotowiderstand als Sensor
Ein Fotowiderstand oder LDR verändert seinen Widerstand abhängig von der Beleuchtung. Für eine Messung am analogen Eingang wird er mit einem festen Widerstand zu einem Spannungsteiler kombiniert. Der Mikrocontroller misst die entstehende Spannung als Zahlenwert.

Die genaue Richtung des Zahlenwerts hängt vom Aufbau des Spannungsteilers ab. In unserem Projekt liegt der LDR auf der Seite von 5 V und der feste 10-kOhm-Widerstand auf der Seite von GND. Dadurch ergibt sich typischerweise: hell führt zu einem höheren Analogwert, dunkel zu einem niedrigeren Analogwert. Diese Zuordnung wird vor dem Programmieren durch Messungen überprüft.
Abstandssensor für ein Warnsystem
Ein HC-SR04-Ultraschallsensor kann Entfernungen bestimmen, indem ein kurzer Ultraschallimpuls ausgesendet und die Laufzeit des Echos ausgewertet wird. Im Unterricht lässt sich damit zum Beispiel ein Abstandswarnsystem für ein Modell bauen.

Buzzer, Servo und Motoren als Aktoren
Ein Buzzer kann ein akustisches Warnsignal erzeugen. Ein Servo kann eine vorgegebene Winkelposition anfahren. Ein Gleichstrommotor erzeugt eine Drehbewegung. Diese Aktoren unterscheiden sich deutlich von einer LED, weil sie je nach Typ wesentlich mehr Strom benötigen können.



Sicherheitsregel: Einen Motor niemals einfach direkt an einen Mikrocontroller-Pin anschließen. Für Gleichstrommotoren wird eine geeignete Treiberstufe benötigt. Servos werden nur entsprechend ihrer technischen Daten und der Vorgaben der Lehrkraft versorgt. Bei externer Versorgung muss die Masseführung fachgerecht geplant werden. Für das Kernprojekt dieses aiMOOCs genügt deshalb eine LED als sicherer Aktor.
Programmieren: vom Problem zum Algorithmus
Bevor Du Code schreibst, beschreibst Du die Aufgabe in Alltagssprache. Für die automatische Beleuchtung lautet die Grundidee:
- Sensorwert: Helligkeit messen.
- Schwellenwert: Messwert mit einer Grenze vergleichen.
- Bedingung: Wenn es dunkel ist, Licht einschalten.
- Ausgabe: Wenn es hell ist, Licht ausschalten.
- Wiederholung: Den Vorgang ständig wiederholen.
Daraus entsteht ein Algorithmus. Ein guter Algorithmus ist eindeutig, endlich beschreibbar und so formuliert, dass einzelne Schritte getestet werden können.
setup und loop
Arduino-Programme werden häufig als Sketch bezeichnet. Zwei Funktionen sind besonders wichtig:
setup() läuft nach dem Start einmal. Dort werden zum Beispiel Pins als Ein- oder Ausgang festgelegt und die serielle Kommunikation gestartet.
loop() läuft anschließend immer wieder. Dort werden Sensorwerte gelesen, Entscheidungen getroffen und Aktoren angesteuert.

Grundbefehle
| Befehl | Aufgabe | Beispiel |
|---|---|---|
pinMode(pin, OUTPUT)
|
Legt einen Pin als Ausgang fest. | LED-Pin vorbereiten. |
digitalWrite(pin, HIGH)
|
Setzt einen digitalen Ausgang auf HIGH. | LED einschalten. |
digitalWrite(pin, LOW)
|
Setzt einen digitalen Ausgang auf LOW. | LED ausschalten. |
analogRead(A0)
|
Liest einen analogen Eingang. | Helligkeitswert erfassen. |
Serial.begin(9600)
|
Startet serielle Kommunikation. | Messwerte zum Computer senden. |
Serial.println(wert)
|
Gibt einen Wert zeilenweise aus. | Debugging mit Messwerten. |
if (...)
|
Prüft eine Bedingung. | Dunkel oder hell unterscheiden. |
Variablen und Konstanten
Variablen speichern Werte, die sich während des Programms ändern können. Konstanten werden für Werte verwendet, die fest bleiben sollen. Aussagekräftige Namen helfen beim Debugging.
const int LDR_PIN = A0;
const int LED_PIN = 9;
int sensorwert = 0;
int schwelle = 500;Statt x, y und z zu verwenden, beschreibst Du mit Namen wie sensorwert, schwelle oder lichtAn, welche Bedeutung ein Wert hat. Das macht das Programm leichter prüfbar und dokumentierbar.
Sicheres Steuerungsprojekt: automatische Beleuchtung
Projektziel: Eine LED soll automatisch eingeschaltet werden, wenn es dunkel wird, und ausgeschaltet werden, wenn genügend Licht vorhanden ist.
Das Projekt bleibt bewusst bei Kleinspannung. Es steuert keine Raumbeleuchtung mit Netzspannung, sondern nur eine Modell-LED. Genau dieses Prinzip kann später in professionellen Systemen mit geeigneter Leistungselektronik übertragen werden.
Material
| Bauteil | Funktion | Hinweis |
|---|---|---|
| Arduino Uno oder vergleichbares Lernboard | Verarbeitung | USB-versorgt |
| LDR | Helligkeitssensor | Teil eines Spannungsteilers |
| 10-kOhm-Widerstand | Spannungsteiler | Messzweig |
| LED | Lichtausgabe | Polung beachten |
| 220- bis 330-Ohm-Widerstand | Strombegrenzung für LED | Pflichtbauteil |
| Breadboard und Jumper-Kabel | Aufbau | ohne Löten |
| USB-Kabel | Programmierung und Versorgung | nur geeignete Geräte verwenden |
Sicherheitscheck vor dem Einschalten
- Kleinspannung: Arbeite ausschließlich mit der vorgesehenen USB- bzw. Kleinspannungsversorgung.
- Kurzschluss: Trenne die Versorgung, bevor Du Leitungen umsteckst.
- LED: Verwende einen Vorwiderstand und prüfe die Polung.
- Motor: Schließe Motoren nicht direkt an einen Mikrocontroller-Pin an.
- Arbeitsplatz: Halte Flüssigkeiten fern und arbeite auf einer übersichtlichen Unterlage.
- Kontrolle: Lass den Aufbau vor dem ersten Einschalten bei Unsicherheit von der Lehrkraft prüfen.
Schaltungsplan in Worten
Für den Sensorzweig wird ein Spannungsteiler aufgebaut: 5 V → LDR → Messpunkt A0 → 10-kOhm-Widerstand → GND.
Für den LED-Zweig wird Pin 9 über einen geeigneten Vorwiderstand mit der LED verbunden; die LED führt anschließend zu GND. Die LED-Polung wird geprüft.
Vor dem Einschalten kontrollierst Du jede Verbindung anhand einer Checkliste. Ein Fehler im Schaltplan wird zuerst korrigiert, bevor Du den Code verdächtigst.
Schritt 1: Sensorwerte beobachten
Bevor die LED automatisch gesteuert wird, misst Du zuerst nur die Helligkeit. Dadurch lernst Du den tatsächlichen Wertebereich Deiner Schaltung kennen.
const int LDR_PIN = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorwert = analogRead(LDR_PIN);
Serial.println(sensorwert);
delay(200);
}Öffne den seriellen Monitor. Notiere einen typischen Wert bei heller Beleuchtung und einen typischen Wert, wenn Du den Sensor abdunkelst. Wähle dann einen Schwellenwert zwischen beiden Bereichen.
Beispiel: Wenn Du etwa 800 bei hell und 250 bei dunkel misst, könnte ein erster Schwellenwert bei 500 liegen. Diese Zahl ist kein Naturgesetz. Sie muss zur tatsächlichen Schaltung und Beleuchtung passen.
Schritt 2: Grundprogramm G
Im Grundniveau wird ein einzelner Schwellenwert verwendet.
const int LDR_PIN = A0;
const int LED_PIN = 9;
const int SCHWELLE = 500;
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorwert = analogRead(LDR_PIN);
if (sensorwert < SCHWELLE) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
Serial.println(sensorwert);
delay(100);
}Erkläre jede Zeile: Welche Werte werden gespeichert? Welche Bedingung entscheidet? Welcher Befehl verändert die LED? Erst wenn Du diese Fragen beantworten kannst, gilt das Programm als verstanden.
Schritt 3: Robuster mit Hysterese M
Liegt der Messwert genau am Schwellenwert, kann eine LED schnell ein- und ausschalten. Das nennt man hier Flattern. Eine Hysterese verwendet zwei verschiedene Grenzen: eine zum Einschalten und eine zum Ausschalten.
const int LDR_PIN = A0;
const int LED_PIN = 9;
const int EIN_SCHWELLE = 430;
const int AUS_SCHWELLE = 570;
bool lichtAn = false;
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorwert = analogRead(LDR_PIN);
if (!lichtAn && sensorwert < EIN_SCHWELLE) {
lichtAn = true;
}
if (lichtAn && sensorwert > AUS_SCHWELLE) {
lichtAn = false;
}
digitalWrite(LED_PIN, lichtAn ? HIGH : LOW);
Serial.print("Sensor: ");
Serial.print(sensorwert);
Serial.print(" LED: ");
Serial.println(lichtAn);
delay(100);
}Zwischen 430 und 570 bleibt der vorherige Zustand erhalten. Dadurch wird die Steuerung stabiler.
Schritt 4: Strukturieren und Filtern E
Im erweiterten Niveau trennst Du Aufgaben in Funktionen. Außerdem kannst Du mehrere Messungen mitteln, damit einzelne Schwankungen weniger Einfluss haben.
const int LDR_PIN = A0;
const int LED_PIN = 9;
const int EIN_SCHWELLE = 430;
const int AUS_SCHWELLE = 570;
bool lichtAn = false;
int mittelwertMessen() {
long summe = 0;
for (int i = 0; i < 10; i++) {
summe += analogRead(LDR_PIN);
delay(5);
}
return summe / 10;
}
void steuern(int wert) {
if (!lichtAn && wert < EIN_SCHWELLE) {
lichtAn = true;
} else if (lichtAn && wert > AUS_SCHWELLE) {
lichtAn = false;
}
digitalWrite(LED_PIN, lichtAn ? HIGH : LOW);
}
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorwert = mittelwertMessen();
steuern(sensorwert);
Serial.print("Mittelwert: ");
Serial.print(sensorwert);
Serial.print(" LED: ");
Serial.println(lichtAn);
delay(50);
}Diskutiere kritisch: Mittelwertbildung glättet Messwerte, verzögert aber die Reaktion etwas. Eine technische Verbesserung hat also häufig auch einen Nachteil.
Testen statt nur ausprobieren
Ein Programm ist nicht fertig, nur weil es einmal funktioniert. Beim Testen vergleichst Du eine erwartete Reaktion mit der tatsächlich beobachteten Reaktion. Dazu formulierst Du vor dem Test klare Testfälle.
| Testfall | Eingabe | Erwartung | Beobachtung | Ergebnis |
|---|---|---|---|---|
| T1 hell | Sensor stark beleuchtet | LED aus | einzutragen | bestanden / nicht bestanden |
| T2 dunkel | Sensor abgedeckt | LED an | einzutragen | bestanden / nicht bestanden |
| T3 Grenzbereich | Helligkeit langsam verändern | keine unerwünschte schnelle Schaltfolge | einzutragen | bestanden / nicht bestanden |
| T4 Neustart | Reset auslösen | System startet in definiertem Zustand | einzutragen | bestanden / nicht bestanden |
| T5 Leitungsprüfung | Sensorleitung bewusst nach Plan kontrollieren | Messwert plausibel | einzutragen | bestanden / nicht bestanden |
G: Führe T1 bis T3 durch und protokolliere die Ergebnisse.
M: Ergänze mindestens zwei eigene Grenz- oder Fehlertests.
E: Entwickle Testfälle, die auch ungewöhnliche Sensorwerte oder einen instabilen Grenzbereich berücksichtigen, und begründe Deine Testabdeckung.
Debugging: Fehler systematisch finden
Debugging bedeutet, Fehler einzugrenzen und zu beseitigen. Dabei hilft eine feste Reihenfolge:
- Beobachtung: Beschreibe exakt, was falsch ist.
- Hypothese: Formuliere eine mögliche Ursache.
- Teiltest: Prüfe nur einen Teil des Systems.
- Messwert: Nutze den seriellen Monitor oder eine Simulation.
- Änderung: Verändere immer nur eine Sache.
- Dokumentation: Notiere Fehler, Ursache und Lösung.
Typische Fehlergruppen sind:
| Fehlergruppe | Beispiel | Prüfmethode |
|---|---|---|
| Schaltung | LED falsch herum, GND fehlt, falsche Breadboard-Reihe | Leitung für Leitung mit Plan vergleichen |
| Pinbelegung | Code nutzt Pin 8, LED steckt an Pin 9 | Pin-Nummern zwischen Schaltung und Code abgleichen |
| Syntax | Semikolon oder Klammer fehlt | Compiler-Meldung lesen |
| Logik | Vergleichsoperator falsch herum | Sensorwert ausgeben und Bedingung gedanklich prüfen |
| Kalibrierung | Schwellenwert passt nicht zum Raumlicht | Hell- und Dunkelwerte neu messen |
| Hardwarebelastung | Motor direkt am Pin | Schaltung sofort ausschalten und sicheren Treiberaufbau verwenden |
Fehlerdiagnose mit dem seriellen Monitor
Der serielle Monitor ist beim Debugging besonders nützlich. Gib nicht nur einen Rohwert aus, sondern auch den internen Zustand.
Serial.print("LDR=");
Serial.print(sensorwert);
Serial.print(" lichtAn=");
Serial.println(lichtAn);Wenn die LED nicht leuchtet, obwohl lichtAn=1 angezeigt wird, liegt der Fehler wahrscheinlich eher im Ausgangszweig als in der Sensorentscheidung. Wenn der Sensorwert sich beim Abdecken gar nicht verändert, prüfst Du zuerst den Sensorzweig.
Simulation als digitales Labor
Eine Simulation ist besonders nützlich, bevor echte Hardware aufgebaut wird. In Wokwi können unter anderem Arduino Uno, LEDs, Fotowiderstände, Ultraschallsensoren und Servos simuliert werden. Eine Simulation ersetzt nicht jede reale Messung, hilft aber dabei, Programmfehler und Verdrahtungsfehler getrennt zu untersuchen.
Wokwi-Simulation: Fotowiderstand und LED öffnen
Wokwi-Dokumentation und weitere Simulationsbauteile
Simulationsauftrag: Baue zuerst eine LED-Steuerung in der Simulation. Ändere dann den simulierten Helligkeitswert. Notiere, bei welchen Werten die LED ihren Zustand ändert. Übertrage danach denselben Algorithmus auf die reale Schaltung und vergleiche die Messwerte.
Drei konkrete Use-Cases
Use-Case A: Automatische Beleuchtung
Eingabe: LDR. Verarbeitung: Helligkeit mit Schwelle oder Hysterese bewerten. Ausgabe: LED.
Geeignet für G, M und E. Auf G-Niveau reicht ein Schwellenwert. Auf M-Niveau wird kalibriert und eine Hysterese eingesetzt. Auf E-Niveau werden Messwerte gefiltert, Funktionen verwendet und Testfälle begründet.
Use-Case B: Abstandswarnsystem
Eingabe: HC-SR04. Verarbeitung: Abstand berechnen und in Bereiche einteilen. Ausgabe: LED und optional Buzzer.
Beispiel: Grün bei großem Abstand, gelb im Warnbereich, rot und Tonsignal bei zu kleinem Abstand. Die genauen Grenzen werden für das Modell festgelegt und begründet.
M-Aufgabe: Entwirf drei Abstandsbereiche und formuliere zuerst Pseudocode.
E-Aufgabe: Verhindere, dass der Buzzer im Grenzbereich hektisch ein- und ausschaltet. Übertrage dazu das Prinzip der Hysterese.
Use-Case C: Modellsteuerung mit Servo
Eingabe: Potentiometer, Taster oder Sensor. Verarbeitung: Messwert in einen Sollwinkel umrechnen. Ausgabe: Servo.

Ein Potentiometer eignet sich als analoger Bediengeber. Ein Servomotor eignet sich beispielsweise für eine Schranke, einen Zeiger oder eine Klappe im Modell. Die mechanische Konstruktion muss so gebaut sein, dass niemand eingeklemmt wird.
E-Aufgabe: Entwickle eine Modellschranke, die nur dann bewegt wird, wenn ein Sensorzustand eindeutig erkannt wurde. Nutze eine sichere Servo-Versorgung nach Vorgabe der Lehrkraft. Begrenze den Bewegungsbereich im Programm.
Vom Test zum technischen Produkt
Technische Entwicklung ist ein Kreislauf. Nach einem Test wird nicht automatisch alles neu gebaut. Zuerst wird analysiert, welcher Teil verbessert werden muss.
| Phase | Leitfrage | Beispiel |
|---|---|---|
| Problem | Was soll das System tun? | Licht bei Dunkelheit einschalten. |
| Plan | Welche Sensoren, Aktoren und Pins werden benötigt? | LDR an A0, LED an Pin 9. |
| Implementierung | Wie wird der Algorithmus in Code übersetzt? | if-Bedingung oder Hysterese.
|
| Test | Welche Eingaben müssen geprüft werden? | hell, dunkel, Grenzbereich. |
| Debugging | Warum weicht das Verhalten von der Erwartung ab? | falsche Schwelle, Verdrahtung, Logikfehler. |
| Verbesserung | Wie wird das System robuster? | Hysterese, Mittelwert, klarere Funktionen. |
| Dokumentation | Kann eine andere Person das Projekt nachvollziehen? | Schaltplan, Code, Testprotokoll, Reflexion. |
Dokumentation
Eine gute technische Dokumentation ermöglicht es einer anderen Person, das Projekt nachzuvollziehen und Fehler zu reproduzieren. Dokumentiere mindestens:
| Dokumentationsteil | Inhalt |
|---|---|
| Aufgabenstellung | Was soll das System leisten? |
| Ein-/Ausgänge | Welche Sensoren und Aktoren werden verwendet? |
| Schaltung | Pinbelegung und Aufbau |
| Algorithmus | Ablauf in Worten, Pseudocode oder Flussdiagramm |
| Programm | kommentierter, übersichtlicher Code |
| Testprotokoll | Testfall, Erwartung, Beobachtung, Ergebnis |
| Fehlerprotokoll | Fehlerbild, Hypothese, Ursache, Lösung |
| Bewertung | Was funktioniert gut, was würdest Du verbessern? |
G: Fülle eine vorgegebene Dokumentationsvorlage vollständig aus.
M: Ergänze eigene Testfälle und begründe die Wahl des Schwellenwerts.
E: Vergleiche mindestens zwei Lösungsvarianten und begründe die technisch bessere Lösung mit Kriterien wie Stabilität, Verständlichkeit und Sicherheit.
Differenzierung G/M/E im Überblick
| Kompetenz | G | M | E |
|---|---|---|---|
| Schaltung | nach Vorlage aufbauen | Teilaufbau selbst planen | Gesamtsystem mit Begründung planen |
| Programmieren | Variablen, if, Ein-/Ausgabe
|
Hysterese, Kalibrierung, strukturierte Ausgabe | Funktionen, Filter, Zustandslogik |
| Testen | vorgegebene Tests durchführen | eigene Testfälle ergänzen | Grenzfälle und Testabdeckung begründen |
| Debugging | offensichtliche Fehler mit Checkliste finden | Hypothesen bilden und Teiltests durchführen | Fehler reproduzierbar eingrenzen und dokumentieren |
| Dokumentation | vollständig und verständlich | begründet und mit Messwerten | vergleichend, kritisch und technisch präzise |
Fachbegriffe
| Begriff | Kurzdefinition |
|---|---|
| Mikrocontroller | programmierbares Rechensystem für eingebettete technische Aufgaben |
| Sensor | Bauteil, das eine physikalische Größe erfasst |
| Aktor | Bauteil, das ein Steuersignal in eine Wirkung umsetzt |
| Algorithmus | eindeutige Folge von Verarbeitungsschritten |
| Variable | benannter Speicherplatz für einen Wert |
| Schwellenwert | Grenzwert für eine Entscheidung |
| Hysterese | unterschiedliche Ein- und Ausschaltgrenzen zur Stabilisierung |
| Debugging | systematische Suche und Beseitigung von Fehlern |
| PWM | schnelles digitales Ein-/Ausschalten mit veränderlichem Tastverhältnis |
| Kalibrierung | Anpassen von Mess- oder Entscheidungsgrenzen an reale Bedingungen |
Medien- und Quellenhinweise
Die verwendeten Bilder stammen aus Wikimedia Commons. Vertiefende technische Informationen findest Du in der Arduino-Sprachreferenz und in der Wokwi-Dokumentation.
Interaktive Aufgaben
Quiz: Teste Dein Wissen
Welche Aufgabe hat ein Sensor in einem Mikrocontroller-System? (Er erfasst eine physikalische Größe und liefert ein Eingangssignal) (!Er speichert das gesamte Programm dauerhaft) (!Er verstärkt jeden Motorstrom automatisch) (!Er ersetzt den Mikrocontroller)
Welche Funktion läuft in einem typischen Arduino-Sketch nach dem Start immer wieder? (loop) (!setup) (!pinMode) (!Serial)
Warum wird bei einer LED ein Vorwiderstand verwendet? (Er begrenzt den Strom durch die LED) (!Er macht aus der LED einen Sensor) (!Er erhöht die USB-Spannung) (!Er speichert den letzten LED-Zustand)
Was liefert analogRead am klassischen Arduino Uno R3 standardmäßig? (Einen Zahlenwert von 0 bis 1023) (!Nur die Wörter an oder aus) (!Immer einen Wert von 0 bis 9) (!Direkt eine Entfernung in Zentimetern)
Wozu dient eine Hysterese in der automatischen Beleuchtung? (Sie verhindert häufiges Umschalten im Grenzbereich) (!Sie ersetzt den Helligkeitssensor) (!Sie erhöht die Versorgungsspannung) (!Sie lädt das Programm schneller hoch)
Was ist ein sinnvoller erster Schritt beim Debugging? (Das fehlerhafte Verhalten genau beschreiben) (!Alle Kabel gleichzeitig umstecken) (!Das Programm vollständig neu schreiben) (!Den Schwellenwert zufällig ändern)
Warum ist der serielle Monitor beim Testen hilfreich? (Er macht interne Messwerte und Zustände sichtbar) (!Er versorgt einen Motor mit zusätzlichem Strom) (!Er ersetzt den Vorwiderstand der LED) (!Er misst automatisch jede Spannung im Raum)
Welche Aussage zu Motoren an Mikrocontroller-Pins ist richtig? (Motoren dürfen nicht einfach direkt an einen Mikrocontroller-Pin angeschlossen werden) (!Jeder Motor darf ohne Treiber direkt an jeden Pin) (!Ein Motor benötigt niemals eine eigene Versorgung) (!Die Stromaufnahme eines Motors ist immer kleiner als die einer LED)
Was kennzeichnet einen guten Testfall? (Er enthält eine klare Eingabe und eine erwartete Reaktion) (!Er verändert möglichst viele Dinge gleichzeitig) (!Er wird erst nach dem Test formuliert) (!Er besteht nur aus der Aussage funktioniert)
Was gehört zu einer guten Projektdokumentation? (Schaltung Programm Testprotokoll und Fehleranalyse) (!Nur ein Foto des fertigen Aufbaus) (!Nur die letzte Codezeile) (!Nur die Namen der Bauteile)
Memory
| Mikrocontroller | verarbeitet Eingaben nach einem Programm |
| Sensor | erfasst eine physikalische Größe |
| Aktor | setzt ein Signal in Licht Ton oder Bewegung um |
| Fotowiderstand | reagiert auf Helligkeit |
| Hysterese | nutzt verschiedene Ein- und Ausschaltgrenzen |
| Debugging | systematische Fehlersuche |
| Serieller Monitor | zeigt Messwerte und Zustände |
| Vorwiderstand | begrenzt den LED-Strom |
Drag and Drop
| Ordne die richtigen Begriffe zu. | Thema |
|---|---|
| Eingabe | Sensorwert erfassen |
| Verarbeitung | Bedingung im Programm prüfen |
| Ausgabe | LED Buzzer oder Servo ansteuern |
| Testen | Erwartung mit Beobachtung vergleichen |
| Debugging | Ursache eines Fehlers systematisch eingrenzen |
| Dokumentation | Aufbau Code Tests und Verbesserungen festhalten |
Kreuzworträtsel
| Mikrocontroller | Welches Bauteil verarbeitet Sensordaten nach einem gespeicherten Programm? |
| Sensor | Wie heißt ein Bauteil das eine physikalische Größe erfasst? |
| Aktor | Wie heißt das Gegenstück zum Sensor das eine Wirkung erzeugt? |
| Debugging | Wie heißt die systematische Suche nach Programm- oder Aufbaufehlern? |
| Schwelle | Wie heißt eine Grenze ab der das Programm einen anderen Zustand wählt? |
| Servo | Welcher Motor kann gezielt eine Winkelposition anfahren? |
LearningApps
Lückentext
Offene Aufgaben
Leicht
- Bauteilkarten: Erstelle fünf Lernkarten mit Foto oder Zeichnung zu Mikrocontroller, Sensor, LED, Widerstand und Breadboard. Beschreibe jeweils die Aufgabe des Bauteils.
- EVA-Prinzip: Zeichne für die automatische Beleuchtung ein Diagramm mit Eingabe, Verarbeitung und Ausgabe und erkläre jeden Pfeil.
- Messprotokoll: Miss mindestens fünf Helligkeitswerte in unterschiedlichen Situationen und wähle daraus einen begründeten Schwellenwert.
- Fehlerdetektiv: Baue die Schaltung nach Vorlage auf und erstelle eine Checkliste mit mindestens sechs Punkten, die Du bei einem Fehler zuerst prüfst.
Standard
- Hysterese entwickeln: Finde zwei passende Schaltgrenzen für Deinen Lichtsensor. Teste, ob die LED im Grenzbereich ruhiger schaltet als mit nur einem Schwellenwert.
- Warnsystem planen: Entwirf ein Abstandswarnsystem mit Ultraschallsensor und drei Warnstufen. Erstelle Pseudocode, bevor Du programmierst.
- Simulation und Realität: Baue die automatische Beleuchtung zuerst in Wokwi und anschließend real auf. Vergleiche die Messwerte und erkläre mindestens zwei Unterschiede.
- Debugging-Protokoll: Erzeuge absichtlich drei harmlose Fehler, zum Beispiel eine falsche Pin-Nummer oder einen unpassenden Schwellenwert. Dokumentiere Fehlerbild, Hypothese, Test und Lösung.
Schwer
- Modellsteuerung: Entwickle eine sichere Servo-Anwendung, etwa eine Schranke oder einen Zeiger. Begrenze den Bewegungsbereich und begründe die gewählten Winkel.
- Messwertfilter: Vergleiche Rohwerte mit einem Mittelwert aus zehn Messungen. Untersuche, wie sich Glättung und Reaktionszeit verändern.
- Zustandsautomat: Formuliere für ein Warnsystem mindestens drei Zustände und eindeutige Übergangsbedingungen. Implementiere den Automaten und teste Grenzfälle.
- Technische Dokumentation: Erstelle eine vollständige Projektdokumentation mit Schaltplan, kommentiertem Programm, Testmatrix, Fehlerprotokoll, Sicherheitsbewertung und Verbesserungsvorschlag.


Lernkontrolle
- Systemanalyse: Eine automatische Modellbeleuchtung schaltet ständig ein und aus, obwohl sich die Raumhelligkeit kaum ändert. Erkläre zwei mögliche Ursachen und entwickle eine Lösung, die nicht nur aus einem neuen Zufallswert für die Schwelle besteht.
- Fehlersuche: Der serielle Monitor zeigt plausible Helligkeitswerte und
lichtAn=1, die LED bleibt aber dunkel. Entwickle eine begründete Reihenfolge von mindestens vier Prüfungen. - Transfer Warnsystem: Übertrage das Prinzip Eingabe – Verarbeitung – Ausgabe von der automatischen Beleuchtung auf ein Abstandswarnsystem. Begründe, welche Teile gleich bleiben und welche ersetzt werden.
- Sicherheitsbewertung: Jemand möchte einen Gleichstrommotor direkt an Pin 9 anschließen. Erkläre, warum das problematisch ist, und beschreibe die sichere technische Grundidee einer geeigneten Ansteuerung.
- Algorithmusvergleich: Vergleiche eine Lösung mit einem einzelnen Schwellenwert und eine Lösung mit Hysterese. Entscheide, welche Lösung für schwankende Sensorwerte geeigneter ist, und begründe Deine Entscheidung.
- Teststrategie: Entwickle für eine Modellschranke fünf Testfälle, die nicht nur den Normalfall, sondern auch Grenzfälle, Neustart und einen fehlerhaften Sensorwert berücksichtigen.
Lernnachweis
Für einen Lernnachweis zu diesem Thema ist wichtig, dass Du nicht nur fertigen Code vorzeigst, sondern den technischen Entwicklungsprozess verständlich belegen kannst.
- Funktionsmodell: Das sichere Modell führt die vereinbarte Steuerungsaufgabe zuverlässig aus.
- Schaltungsverständnis: Du kannst Ein- und Ausgänge, Versorgung und Schutzbauteile erklären.
- Programmverständnis: Du kannst zentrale Codeabschnitte erläutern und kleine Änderungen selbst durchführen.
- Testkompetenz: Du planst nachvollziehbare Testfälle mit Erwartung und Beobachtung.
- Debuggingkompetenz: Du kannst mindestens einen Fehler systematisch eingrenzen und die Lösung dokumentieren.
- Dokumentationskompetenz: Schaltplan, Algorithmus, Code, Testprotokoll und Reflexion sind vollständig und verständlich.
- Sicherheitskompetenz: Du beachtest Kleinspannung, Vorwiderstand, spannungsfreies Umstecken und die sichere Ansteuerung stromstärkerer Aktoren.
- Reflexion: Du benennst eine sinnvolle Verbesserung und begründest deren Vor- und Nachteile.
OERs zum Thema
Verknüpfte Lernbereiche
aiMOOC-Projekte
MOOCwiki · Deutsch
Nach dem Lernen ist vor dem Lernen
Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.
Zur MOOCwiki-HauptseiteMediathek wird aus dem Wiki geladen ...
Keine passenden Inhalte gefunden. Bitte ändere Suche oder Filter.
NEWSLernweltNOAH fragen