Aufgabe Vorschlag A - Aufgabe 2 - Mikrocontroller program… · Abitur Hessen Elektrotechnik LK 2022

Thema: Mikrocontroller programmieren (Arduino) · Aus der Prüfung LK (2022)

Aufgabenstellung

Um sich im Thema Embedded Systems fortzubilden, haben Sie sich für Ihre Werkstatt zu Hause eine Grundausstattung an technischem Equipment, d. h. einen Mikrocontroller und Bauteile für die Peripherie, gekauft.

Ausgerechnet am Wochenende ist der digitale Multifunktionstimer ihres Terrariums ausgefallen. Dieser hat die Aufgabe für artgerechtes Klima im Terrarium zu sorgen. Dort sollte neben anderen wichtigen Klimafaktoren eine Luftfeuchtigkeit von durchschnittlich 55 % herrschen.

Sie besitzen einen Sensor, der die relative Luftfeuchte misst. Weiterhin finden Sie in Ihrer Werkstatt zwei LEDs (gelb, rot), Widerstände sowie einen Taster.

Sie beschließen unter Verwendung eines Mikrocontrollers eine Intervallsteuerung für Ihr Terrarium anzufertigen. Wenn die Luftfeuchtigkeit zu gering ist, soll eine Benebelungsanlage ein HIGH-Signal erhalten und somit eingeschaltet werden.

Material 4

Material 5

Programmcode

int Luftfeuchte = 12;

int Benebelung = 9;

int Taster = 7;

int AbfrageTaster;

void setup()

{

pinMode(Luftfeuchte, OUTPUT);

pinMode(Benebelung, OUTPUT);

pinMode(Taster, INPUT);

}

void loop()

{

digitalWrite(Luftfeuchte, HIGH);

delay(1000);

digitalWrite(Luftfeuchte, LOW);

delay(1000);

AbfrageTaster = digitalRead(Taster);

if (AbfrageTaster == HIGH)

digitalWrite(Benebelung, HIGH);

else

digitalWrite(Benebelung, LOW);

} Material 6

Beschaltung des Mikrocontrollers

Material 7

Impuls-Zeit-Diagramm

2.2.2

Der in Material 5 aufgeführte Programmcode funktioniert noch fehlerhaft. Das Programm reagiert nur manchmal auf das Betätigen des Tasters.

Analysieren Sie den Ablauf des Programms (Material 5) und ergänzen Sie damit das Impuls-Zeit-Diagramm in Material 7 für die verwendeten Pins.

Erklären Sie die unterschiedlichen Signalverläufe an Pin 7 und Pin 9 anhand des Programmcodes, insbesondere auch die markierten Stellen A und B.

Hinweis: Die Analyse mit Pin 12 beginnen. [9 BE]

2.3

Nachdem der Fehler erkannt wurde, soll nun folgendes gewünschtes Verhalten programmiert werden:

Das Signal an Pin 12 (Luftfeuchte) soll über eine rote blinkende LED realisiert werden. Bei der Betätigung des Tasters an Pin 7 in unregelmäßigen Abständen soll umgehend ohne Zeitverzögerung ein Signal an Pin 9 (Benebelung) anliegen.

Implementieren Sie den Code gemäß den Anforderungen mit sinnvollen Kommentaren an markanten Stellen.

Hinweis: Als Rückgabedatentyp ist unsigned long zu verwenden (vorzeichenloser 32-Bit Ganzzahltyp, Wertebereich 0 bis 4.294.967.295 (232−12^{32} - 1)). [11 BE]

Aufgabenstellung: Aufgabe Vorschlag A - Aufgabe 2 - Mikrocontroller program… · Abitur Hessen Elektrotechnik LK 2022

Lösung

Nach den offiziellen Korrekturhinweisen

2.2.2 Erklären Sie die unterschiedlichen Signalverläufe an Pin 7 und Pin 9 anhand des Programmcodes, insbesondere auch die markierten Stellen A und B.

Lösung: Die Abarbeitung des Programmcodes wird unterbrochen, solange der Code in der ersten delay-Funktion verweilt. Dadurch kann der Eingang Benebelung/Taster nicht abgefragt werden. Folglich passiert an Stelle A nichts, obwohl der Taster gedrückt wird. Der zweite delay-Aufruf ist für die Verzögerung des LOW-Pegels zuständig. Der Taster wird genau zwischen dem Wechsel von LOW nach HIGH (nach den Delays am Schleifenende) abgefragt. Dadurch reagiert Pin 9 auf die ansteigende Flanke bei B, während die vorherigen Tastendrücke während der delay-Pausen ignoriert wurden.

2.3 Implementieren Sie den Code gemäß den Anforderungen mit sinnvollen Kommentaren an markanten Stellen.

Lösung: ```cpp int Luftfeuchte = 12; // rote LED blinkt int Benebelung = 9; // gelbe LED durch Taster int Taster = 7; // Taster int AbfrageTaster; int Intervall = 2000; // Intervallzeit von 2 Sekunden unsigned long vorher; // Zeit-Variable int StatusLED = LOW; // Statusvariable für die blinkende rote LED void setup() { pinMode(Luftfeuchte, OUTPUT); pinMode(Benebelung, OUTPUT); pinMode(Taster, INPUT); vorher = millis(); // merken des jetzigen Zeitstempels } void loop() { // rote blinkende LED über Intervallsteuerung blinken lassen if ((millis() - vorher) > Intervall) { vorher = millis(); StatusLED = !StatusLED; // toggeln des LED-Status digitalWrite(Luftfeuchte, StatusLED); // toggeln der roten LED } // Abfrage Taster-Status AbfrageTaster = digitalRead(Taster); if (AbfrageTaster == HIGH) { digitalWrite(Benebelung, HIGH); // gelbe LED auf HIGH-Pegel (5V) } else { digitalWrite(Benebelung, LOW); // gelbe LED auf LOW-Pegel (0V) } } ```

2.2.2 Impuls-Zeit-Diagramm für Pin 12, Pin 7 und Pin 9

Lösung: - Pin 12: Regelmäßiges Rechtecksignal mit 1 s1\,\text{s} HIGH und 1 s1\,\text{s} LOW (Periodendauer 2 s2\,\text{s}, entsprechend den beiden `delay(1000)`-Aufrufen). - Pin 7: Vorgegebener Signalverlauf des Tasters. - Pin 9: Bleibt LOW bis zum Ende des zweiten Delays vor Stelle B; an Stelle B wird die Abfrage positiv ausgewertet, sodass Pin 9 für die Dauer des Tastendrucks auf HIGH schaltet.

Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium

Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.

Aufgabe Vorschlag B - Aufgabe 2 - Mikrocontroller program… · LK 2022 ›

Mehr Aufgaben zu Mikrocontroller programmieren (Arduino)