Zum Inhalt springen

NWT9 - Einen Mikrocontroller programmieren

Aus MOOCsWiki Staging
Version vom 13. September 2026, 22:07 Uhr von Glanz (Diskussion | Beiträge) (aiMOOC über GPT aiMOOC Action erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
aiMOOC-Siegel

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:

  1. Sensorwert: Helligkeit messen.
  2. Schwellenwert: Messwert mit einer Grenze vergleichen.
  3. Bedingung: Wenn es dunkel ist, Licht einschalten.
  4. Ausgabe: Wenn es hell ist, Licht ausschalten.
  5. 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

  1. Kleinspannung: Arbeite ausschließlich mit der vorgesehenen USB- bzw. Kleinspannungsversorgung.
  2. Kurzschluss: Trenne die Versorgung, bevor Du Leitungen umsteckst.
  3. LED: Verwende einen Vorwiderstand und prüfe die Polung.
  4. Motor: Schließe Motoren nicht direkt an einen Mikrocontroller-Pin an.
  5. Arbeitsplatz: Halte Flüssigkeiten fern und arbeite auf einer übersichtlichen Unterlage.
  6. 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:

  1. Beobachtung: Beschreibe exakt, was falsch ist.
  2. Hypothese: Formuliere eine mögliche Ursache.
  3. Teiltest: Prüfe nur einen Teil des Systems.
  4. Messwert: Nutze den seriellen Monitor oder eine Simulation.
  5. Änderung: Verändere immer nur eine Sache.
  6. 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.

Wikipedia: Mikrocontroller

Arduino Language Reference

Arduino Built-in Examples

Wokwi Documentation


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

Vervollständige den Text.
Ein Mikrocontroller verarbeitet Eingaben nach einem gespeicherten

. Ein Bauteil zur Erfassung einer physikalischen Größe heißt

. Eine LED ist in unserem Projekt ein

. Der Fotowiderstand wird über einen analogen

ausgelesen. Eine Entscheidung im Programm kann mit einer

formuliert werden. Der Grenzwert für die Entscheidung heißt

. Zwei getrennte Schaltgrenzen bilden eine

. Messwerte und interne Zustände können über den

beobachtet werden. Die systematische Fehlersuche heißt

. Ein dokumentierter Vergleich aus Eingabe und erwarteter Reaktion ist ein

. Vor einer Änderung an der Verdrahtung wird die

getrennt. Ein Motor wird nicht direkt an einen Mikrocontroller-Pin angeschlossen sondern benötigt je nach Typ eine geeignete

.




Offene Aufgaben


Leicht

  1. Bauteilkarten: Erstelle fünf Lernkarten mit Foto oder Zeichnung zu Mikrocontroller, Sensor, LED, Widerstand und Breadboard. Beschreibe jeweils die Aufgabe des Bauteils.
  2. EVA-Prinzip: Zeichne für die automatische Beleuchtung ein Diagramm mit Eingabe, Verarbeitung und Ausgabe und erkläre jeden Pfeil.
  3. Messprotokoll: Miss mindestens fünf Helligkeitswerte in unterschiedlichen Situationen und wähle daraus einen begründeten Schwellenwert.
  4. Fehlerdetektiv: Baue die Schaltung nach Vorlage auf und erstelle eine Checkliste mit mindestens sechs Punkten, die Du bei einem Fehler zuerst prüfst.


Standard

  1. Hysterese entwickeln: Finde zwei passende Schaltgrenzen für Deinen Lichtsensor. Teste, ob die LED im Grenzbereich ruhiger schaltet als mit nur einem Schwellenwert.
  2. Warnsystem planen: Entwirf ein Abstandswarnsystem mit Ultraschallsensor und drei Warnstufen. Erstelle Pseudocode, bevor Du programmierst.
  3. 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.
  4. 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

  1. Modellsteuerung: Entwickle eine sichere Servo-Anwendung, etwa eine Schranke oder einen Zeiger. Begrenze den Bewegungsbereich und begründe die gewählten Winkel.
  2. Messwertfilter: Vergleiche Rohwerte mit einem Mittelwert aus zehn Messungen. Untersuche, wie sich Glättung und Reaktionszeit verändern.
  3. Zustandsautomat: Formuliere für ein Warnsystem mindestens drei Zustände und eindeutige Übergangsbedingungen. Implementiere den Automaten und teste Grenzfälle.
  4. Technische Dokumentation: Erstelle eine vollständige Projektdokumentation mit Schaltplan, kommentiertem Programm, Testmatrix, Fehlerprotokoll, Sicherheitsbewertung und Verbesserungsvorschlag.




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lernkontrolle

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

  1. Funktionsmodell: Das sichere Modell führt die vereinbarte Steuerungsaufgabe zuverlässig aus.
  2. Schaltungsverständnis: Du kannst Ein- und Ausgänge, Versorgung und Schutzbauteile erklären.
  3. Programmverständnis: Du kannst zentrale Codeabschnitte erläutern und kleine Änderungen selbst durchführen.
  4. Testkompetenz: Du planst nachvollziehbare Testfälle mit Erwartung und Beobachtung.
  5. Debuggingkompetenz: Du kannst mindestens einen Fehler systematisch eingrenzen und die Lösung dokumentieren.
  6. Dokumentationskompetenz: Schaltplan, Algorithmus, Code, Testprotokoll und Reflexion sind vollständig und verständlich.
  7. Sicherheitskompetenz: Du beachtest Kleinspannung, Vorwiderstand, spannungsfreies Umstecken und die sichere Ansteuerung stromstärkerer Aktoren.
  8. 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-Hauptseite
Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...