Aufgabe Vorschlag C - Aufgabe 2.2–2.5 · Abitur Hessen Elektrotechnik LK 2021

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

Aufgabenstellung

Auf einer Straße mit je einem Fahrstreifen pro Richtung befindet sich eine Baustelle, welche einen der beiden Fahrstreifen blockiert. Unter Verwendung einer Ampelanlage wird eine einspurige Verkehrsführung realisiert, damit Fahrzeuge nur abwechselnd in beiden Richtungen den Baustellenbereich passieren können. Die in Material 3 dargestellte Ampelanlage besteht aus sechs Aktoren (Lampen der beiden Verkehrsampeln) und zwei Sensoren. Befindet sich ein Fahrzeug im Erfassungsbereich der Sensoren, so geben diese ein HIGH- und ansonsten ein LOW-Signal ab. Unter Verwendung eines Mikrocontrollers soll eine Steuerung für die Ampelanlage realisiert werden. In Material 4 ist dieser Mikrocontroller dargestellt. Den bereits ansatzweise erstellten Programmcode zeigt Material 5.

Hinweis: Die Ansteuerung der Ampeln muss immer unter Verwendung der Prozeduren setAmpel1 bzw. setAmpel2 (Material 5) erfolgen. Soll z.B. die Ampel 1 auf Rot gestellt werden, so würde der entsprechende Prozeduraufruf wie folgt lauten:

setAmpel1(HIGH, LOW, LOW)

Material 3: Ampelanlage

Material 4: Beschriftung - Mikrocontroller

Material 5: Programmcode (unvollständig)

const int sensor1 = 13;

const int sensor2 = 12;

const int rot1 = 8;

const int gelb1 = 7;

const int gruen1 = 6;

const int rot2 = 4;

const int gelb2 = 3;

const int gruen2 = 2;

void setup()

{

pinMode(rot1, OUTPUT);

pinMode(gelb1, OUTPUT);

pinMode(gruen1, OUTPUT);

pinMode(rot2, OUTPUT);

pinMode(gelb2, OUTPUT);

pinMode(gruen2, OUTPUT);

pinMode(sensor1, INPUT);

pinMode(sensor2, INPUT);

starten();

}

void setAmpel1(int rot, int gelb, int gruen)

{

digitalWrite(rot1, rot);

digitalWrite(gelb1, gelb);

digitalWrite(gruen1, gruen);

}

void setAmpel2(int rot, int gelb, int gruen)

{

digitalWrite(rot2, rot);

digitalWrite(gelb2, gelb);

digitalWrite(gruen2, gruen);

}

void starten()

{

// hier fehlt Code

}

void loop()

{

// hier fehlt Code

}

2.2

Erläutern Sie die Abläufe innerhalb der Prozedur setup (Material 5). Geben Sie die Voraussetzung für das Beenden dieser Prozedur an.

2.3

Nennen Sie auf Basis des in Material 5 dargestellten Programmcodes die Merkmale lokaler Variablen.

2.4

Wird die Ampelanlage eingeschaltet, so startet das im Mikrocontroller gespeicherte Programm. Dabei ist es aus Sicherheitsgründen erforderlich, dass die Ansteuerung der Ampeln in dieser Startphase nach einem definierten Schema abläuft.

Beschreibung der Startphase:

Zuerst blinken 10 s lang die gelben Lampen der beiden Ampeln mit der Blinkfrequenz f=1 Hzf = 1\,\text{Hz}. Anschließend leuchten diese Lampen 5 s lang dauerhaft. Danach schalten beide Ampeln auf Rot und verbleiben für mindestens 10 s in diesem Zustand. Erst nach Ablauf dieser Zeit werden die Sensoren abgefragt. Diejenige Ampel, deren Sensor ein HIGH-Signal abgibt, schaltet sofort auf Rot-Gelb und eine Sekunde später auf Grün. Falls beide Sensoren ein HIGH-Signal abgeben, so ist es egal, welche der beiden Ampeln über Rot-Gelb auf Grün wechselt. Die Grünphase dauert 20 Sekunden, danach ist die Startphase beendet.

Die oben beschriebene Startphase soll innerhalb der Prozedur starten (Material 5) ausgeführt werden.

Implementieren Sie den vollständigen Programmcode dieser Prozedur.

2.5

Nach Beendigung der Startphase beginnt der Normalbetrieb:

Zunächst zeigt eine Ampel Grün und die andere Rot. Dieser Zustand ändert sich erst, wenn die rote Ampel von einem Fahrzeug erreicht wird. Die grüne Ampel schaltet dann auf Gelb und 3 s später auf Rot. Nachdem beide Ampeln gleichzeitig 10 s lang Rot gezeigt haben, schaltet die Ampel mit dem wartenden Fahrzeug auf Rot-Gelb und 1 s später auf Grün. Die Grünphase dauert mindestens 20 s. Erst nach Ablauf dieser 20 s reagiert die Ampelanlage wieder auf Fahrzeuge, welche vor der jeweils roten Ampel warten. Dann läuft wieder der oben beschriebene Vorgang ab. Das wechselseitige Freigeben einer Fahrtrichtung wiederholt sich unendlich oft. Solange sich kein Fahrzeug der roten Ampel nähert, verbleibt die Ampelanlage in ihrem momentanen Zustand.

Der oben beschriebene Normalbetrieb soll innerhalb der Prozedur loop ausgeführt werden.

Entwickeln Sie für diese Prozedur ein Struktogramm oder einen Programmablaufplan.

Aufgabenstellung: Aufgabe Vorschlag C - Aufgabe 2.2–2.5 · Abitur Hessen Elektrotechnik LK 2021

Lösung

Nach den offiziellen Korrekturhinweisen

2.2 Erläutern Sie die Abläufe innerhalb der Prozedur setup (Material 5). Geben Sie die Voraussetzung für das Beenden dieser Prozedur an.

Lösung: Zuerst werden die den Aktoren zugeordneten Pins als Ausgänge definiert. Die den Sensoren zugeordneten Pins werden anschließend als Eingänge definiert. Danach wird die Prozedur starten aufgerufen. Voraussetzung für das Beenden: Zuerst muss die Prozedur starten beendet sein, bevor setup beendet wird.

2.3 Nennen Sie auf Basis des in Material 5 dargestellten Programmcodes die Merkmale lokaler Variablen.

Lösung: Lokale Variablen werden innerhalb einer Prozedur definiert und sind auch nur dort gültig. Außerhalb der Prozedur ist kein Zugriff auf diese Variablen möglich. Die Prozedur setAmpel1 enthält beispielsweise die lokale Variable rot.

2.4 Implementieren Sie den vollständigen Programmcode dieser Prozedur [starten].

Lösung: ```c void starten() { for (int i = 0; i < 10; i++) { setAmpel1(LOW, LOW, LOW); setAmpel2(LOW, LOW, LOW); delay(500); setAmpel1(LOW, HIGH, LOW); setAmpel2(LOW, HIGH, LOW); delay(500); } delay(5000); setAmpel1(HIGH, LOW, LOW); setAmpel2(HIGH, LOW, LOW); delay(10000); while (true) { if (digitalRead(sensor1) == HIGH) { setAmpel1(HIGH, HIGH, LOW); delay(1000); setAmpel1(LOW, LOW, HIGH); break; } if (digitalRead(sensor2) == HIGH) { setAmpel2(HIGH, HIGH, LOW); delay(1000); setAmpel2(LOW, LOW, HIGH); break; } } } ```

2.5 Entwickeln Sie für diese Prozedur [loop] ein Struktogramm oder einen Programmablaufplan.

Lösung: Struktogramm (Ablauf in Endlosschleife): - Bedingung 1: `Sensor1 = HIGH UND Ampel2 zeigt grün` - setze Ampel2 auf gelb - warte 3 Sekunden - setze Ampel2 auf rot - warte 10 Sekunden - setze Ampel1 auf rot-gelb - warte 1 Sekunde - setze Ampel1 auf grün - warte 20 Sekunden - Bedingung 2: `Sensor2 = HIGH UND Ampel1 zeigt grün` - setze Ampel1 auf gelb - warte 3 Sekunden - setze Ampel1 auf rot - warte 10 Sekunden - setze Ampel2 auf rot-gelb - warte 1 Sekunde - setze Ampel2 auf grün - warte 20 Sekunden

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.2–2.3 · LK 2021

Mehr Aufgaben zu Mikrocontroller programmieren (Arduino)