Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

FreeRTOS auf dem Arduino Mega: Multitasking für Echtzeitanwendungen (CSE/ECE474 Lab 4 Tutorial)

Lerne in diesem Tutorial, wie du FreeRTOS auf dem Arduino Mega installierst und mehrere Tasks parallel ausführst – von LED-Blinken bis zur Musikwiedergabe. Ideal für Studierende des Labors CSE/ECE474.

FreeRTOS Arduino Mega CSE/ECE474 Lab 4 Echtzeitbetriebssystem Arduino Multitasking Arduino FreeRTOS Tutorial Deutsch Arduino FreeRTOS Installation Task Prioritäten FreeRTOS Timer 4 Arduino Mega Mario Melodie Arduino Embedded Systems Projekt IoT mit Arduino RTOS für Studierende Arduino Projektideen Sensorabfrage 50 Hz vTaskDelay vs delay Stack Größe FreeRTOS

Einführung in FreeRTOS und Echtzeit-Multitasking

In diesem Tutorial lernst du, wie du mit FreeRTOS auf einem Arduino Mega mehrere Tasks gleichzeitig ausführen kannst. Das ist die Grundlage für moderne eingebettete Systeme – ähnlich wie ein Smartphone mehrere Apps parallel laufen lässt. Stell dir vor, dein Arduino ist wie ein KI-Assistent, der gleichzeitig Sensordaten liest, LEDs steuert und Musik abspielt. Genau das ermöglicht ein Echtzeitbetriebssystem (RTOS).

Das Lab CSE/ECE474 verlangt, dass du FreeRTOS installierst, erste Beispiele zum Laufen bringst und dann ein eigenes Projekt umsetzt. Wir führen dich Schritt für Schritt durch die Installation und die wichtigsten Konzepte – ohne die ganze Aufgabe zu lösen. Du wirst verstehen, wie Task-Prioritäten, Semaphoren und Timer funktionieren.

Installation von FreeRTOS für Arduino

Lade die offizielle Arduino_FreeRTOS-Bibliothek von den Kursseiten herunter (nicht die generische Version, sondern die für CSE/ECE474 getestete). Entpacke das ZIP und kopiere den Ordner in dein Arduino-Bibliotheksverzeichnis (meist Dokumente/Arduino/libraries). Starte die Arduino IDE neu – nun sollte die Bibliothek unter Sketch → Bibliothek einbinden auftauchen.

Öffne das Beispiel blink_analogRead474.ino. Dieses Demo zeigt zwei Tasks: einer lässt eine LED blinken, der andere liest einen Analogwert (z.B. von einem Joystick) über die serielle Schnittstelle aus. Passe den Analog-Pin an deinen tatsächlichen Anschluss an (z.B. A0). Stelle den Baudrate im seriellen Monitor auf 115200 ein – so wie im Code vorgegeben.

Erste Schritte: Blink- und Analog-Task testen

Schließe einen Potentiometer oder Thumbstick an 5V, GND und einen Analog-Pin an. Lade das Demo hoch. Du solltest sehen:

  • Die eingebaute LED (Pin 13) blinkt.
  • Im seriellen Monitor erscheinen Werte zwischen 0 und 1023, die sich ändern, wenn du den Potentiometer drehst.

Funktioniert das? Dann hast du die Basis geschafft! Falls nicht, überprüfe die Pin-Nummer und die Baudrate. Dieses Setup ist wie das Einrichten eines neuen Smart-Home-Geräts: erst muss die Verbindung stimmen, dann kann man loslegen.

Zusätzliche Tasks: Off-Board-LED und Musik

Jetzt kommen zwei weitere Tasks hinzu. Task 3: Eine externe LED (z.B. an Pin 8) blinkt 100 ms an, 200 ms aus. Task 4: Nutze Timer 4, um über einen Lautsprecher die Mario-Melodie (oder deinen eigenen Song) abzuspielen. Die Musik soll dreimal abgespielt werden, mit 1,5 Sekunden Pause dazwischen, und dann stoppen.

Für Task 4 musst du den Timer 4 konfigurieren. Ein Beispiel: Mit TCCR4A und TCCR4B setzt du den Modus und die Frequenz. Die Noten werden als PWM-Signal ausgegeben. Achte darauf, dass der Task sich nach dem dritten Durchlauf selbst beendet – verwende vTaskDelete(NULL).

Alle vier Tasks müssen gleichzeitig laufen. Das ist wie Multitasking auf einem High-End-Gaming-PC: Während der Spieler kämpft, lädt die KI Gegner nach und die Soundkarte spielt Musik – alles parallel und ohne Ruckeln.

Projektphase: Eigene Idee umsetzen

Im zweiten Teil des Labs entwickelst du ein eigenes Projekt, das auf FreeRTOS basiert. Die Anforderungen: mindestens ein Task mit einer Periode von 20 ms oder kürzer (also 50 Hz oder schneller). Das ist typisch für Sensorabfragen oder Regelungen – zum Beispiel ein Balancing-Roboter oder ein digitaler Tempomat.

Sei kreativ! Du könntest einen Ultraschallsensor einlesen und bei Hindernis einen Alarm auslösen, oder ein OLED-Display mit Echtzeitdaten versorgen. Denk an Smart-Home-Anwendungen: Ein System, das Temperatur, Luftfeuchtigkeit und Helligkeit misst und automatisch Jalousien oder Ventilatoren steuert. Oder ein Spiel mit Joystick und Sound – wie ein kleiner Arcade-Automat.

Wichtig: Dein Code muss zuverlässig laufen, ohne Timing-Probleme. Teste mit Serial.print, ob alle Tasks ihre Deadlines einhalten. Vermeide delay() – stattdessen nutze vTaskDelay() oder xTaskDelayUntil(). Das ist wie agiles Projektmanagement: Jeder Task bekommt seine Zeit und muss pünktlich liefern.

Häufige Fehler und Tipps

Viele Studierende vergessen, den Stack-Speicher für Tasks zu dimensionieren. Standardmäßig reichen 128 Worte, aber bei komplexen Funktionen (z.B. Musik) brauchst du mehr – setze configMINIMAL_STACK_SIZE höher. Ein weiterer Klassiker: Prioritäten falsch gesetzt. Wenn ein Task mit hoher Priorität CPU-Zeit blockiert, kommen niedrigere Tasks nicht dran. Nutze vTaskPrioritySet() oder lege die Prioritäten beim Erstellen fest.

Ein Tipp zum Debuggen: Gib jedem Task einen Namen und lass ihn seinen Status über die serielle Schnittstelle ausgeben. So siehst du, ob alle Tasks laufen. Das ist wie ein Live-Dashboard für dein Embedded-System – du hast alles im Blick.

Fazit

Mit FreeRTOS auf dem Arduino Mega beherrschst du die Grundlagen der Echtzeitprogrammierung. Du kannst mehrere Aufgaben parallel ausführen, Hardware ansteuern und kreative Projekte realisieren – von der autonomen Drohne bis zum intelligenten Türschloss. Die Fähigkeiten aus diesem Lab sind direkt übertragbar auf industrielle Steuerungen, IoT-Geräte und Robotik. Viel Erfolg bei deinem Projekt!