Seit mehreren Wochen bin ich dabei, testweise mit Arduinos in Klasse 8 im Wahlpflichtfach Informatik zu arbeiten. Bisher hatten wir die LEGO-Mindstorms verwendet und uns in den Parallelkursen abgewechselt. Weitere Inhalte in Klassen 8 sind Programmierung mit Scratch und Grundlagen der Informatik (da der Informatik-Unterricht in Klasse 8 startet).
Die Kompetenzen zu dem bisherigen Block (ca. 8 Wochen dreistündig) sind Folgende:
- die Roboter-Sensoren nennen und deren Aufgaben beschreiben.
- in der Programmiersprache NXC das Ansteuern der Sensoren implementieren.
- Kontrollstrukturen implementieren und so auf Signale der Sensoren reagieren.
- Variablen anhand von gegebenen Aufgaben implementieren.
Diese sollen entsprechend vergleichbar mit dem Arduino statt dem LEGO Mindstorms abgedeckt werden.
Eine ausführliche Darstellung der einzelnen Stunden, die bereits gelaufen sind und die noch in Planung sind folgt weiter unten, hier die kurze Zusammenfassung (ich unterrichte dreistündig im Wahlpflichtbereich):
- Doppelstunde: Den Arduino kennenlernen – die interne LED ansteuern (einfache Übertragung eines fertigen Quellcodes, komplilieren und übertragen auf den Arduino, Blinkgeschwindigkeit variieren)
- Einzelstunde: Weiter arbeiten am ersten Programm „Blinken“, teilweise 2.Aufgabe: 2 LEDs blinken lassen (das Breadbord verwenden, Vorwiderstände, ein Programm erweitern als einfacher Transfer)
- Doppelstunde: Weiter arbeiten an 2.Aufgabe: 2 LEDs blinken lassen und mehrere LEDs ansteuern (Variablennamen vergeben, einfache englische Fachtexte lesen und praktisch übertragen, festigen der 2.Doppelstunde)
- Einzelstunde: Einfache Ampelsteuerung (Material selbst zusammenstellen, Aufbau auf Breadboard nicht mehr vorgegeben)
- Doppelstunde: App Camps Material: Mit Tinkercad einen Schaltkreis simulieren
- Einzelstunde: Einstieg Sensortechnik (Theorie, Fachtexte lesen, Bauweise und Anwendungen einzelner Sensoren recherchieren)
- Doppelstunde: Den Bewegungssensor aufbauen und programmieren (PINs auch als INPUT deklarieren, Eingabewerte anzeigen lassen)
Bis auf die 7. Stunde hat alles prima geklappt, auch das Arbeiten mit Tinkercad über meinen selbst erstellten Account (alle waren gleichzeitig mit diesem eingeloggt, daher ließen sich keine Zwischenergebnisse speichern, aber immerhin Erfahrungen mit der Simulation sammeln) Irgendwie funktionierte der Bewegungssensor nicht so wie erwartet, das muss ich nach den Ferien nochmal versuchen und in den Ferien selbst noch einmal gründlicher testen. Abschließend werde ich in den verbleibenden zwei Wochen noch mit anderen Sensoren experimentieren und insbesondere mit dem Ultraschallsensor Schaltungen aufbauen lassen.
Fazit:
Das Lernpotential ist ein anderes als mit den LEGO Bausätzen, vor allem:
- das Material ist sehr klein und empfindlich, das heißt einerseits es braucht eine gute und verbindlich strukturierte Organisation, andererseits lernen die Kinder auch sorgfältiges und konzentriertes Arbeiten.
- die IDE / Programmiersprache ist textbasiert und ein C-Dialekt, daher eine etwas höhere Hürde als die LEGO Software (außer NXC, das ist ziemlich ähnlich), aber dafür bei so kleinen Programmen in einer 8.Klasse zu bewältigen. Denkbar ist aber auch eine anfängliche Entlastung mit S4A (Scratch for Arduino), um blockbasiert zu arbeiten und zu einem späteren Zeitpunkt mit dem C-Dialekt weiter zu arbeiten. Andererseits erkennen die Schüler_innen durch die Programmiersprache auch deutlicher die Funktionsweise einer Syntax, als mit Scratch.
- Es muss sehr genau darauf geachtet werden, dass die Schaltkreise auf dem Breadboard richtig aufgebaut werden, bevor Spannung angelegt wird, da sonst Bauteile schnell kaputt gehen, der Ablauf erst aufbauen, dann kontrollieren lassen und dann anschließen und programmieren hat sich bewährt und bringt den Mehrwert mit sich, genaueres Arbeiten einzufordern und damit die Fehlersuche auch weniger frustrierend zu gestalten.
- Es wird viel stärker auf informatische Inhalte fokussiert und Bauteile sind transparenter aufgebaut und ansteuerbar – einzig attraktiver ist beim LEGO-Modell die Bewegung, dies könnte und sollte aber mit Arduinos ebenso umgesetzt werden, da die Motivation eines fahrenden Gerätes ist hoch einzuschätzen ist.
Soweit mein etwas umfangreicherer Versuch, ich hoffe die Materialien und Planungen in den nächsten Jahren weiter ausarbeiten und verbessern zu können. Ein hilfreiches Tool hierfür ist unsere schulinterne elearning-Plattform, durch die sich Lerninhalte gut strukturieren und wiederholen lassen:
Hier nun die etwas ausführlichere Darstellung zu den einzelnen Stunden:
- Doppelstunde: Den Arduino kennenlernen – die interne LED ansteuern
Um den Arduino als Microcontroller kennenzulernen, habe ich grundlegende Informationen aus dem Wikipedia zusammengefasst (siehe: https://de.wikipedia.org/wiki/Arduino_(Plattform)) und zusammen mit einer schematischen Grafik und einem Screenshot der IDE als Arbeitsblatt formatiert. Eine Aufgabe war, das Schema um die Fachbegriffe zu den Bauteilen zu ergänzen (Ein-,AusgangsPIN, USB-Anschluss, Buchse für Stromversorgung, Controller, etc.) ähnlich aber reduziert wie hier: https://www.grund-wissen.de/elektronik/arduino/aufbau.html
Im kurzen Gespräch über Aufbau und Funktion waren mir vor allem wichtig, zu betonen, dass es sich um ein programmierbares Gerät handelt, über den USB-Anschluss Daten von einem Rechner auf den Arduino übertragen werden können und eine grobe Vorstellung davon, was ein PIN ist, um nicht zu sehr Zeit auf technische Details zu verwenden, sondern schnell ist Programmieren einzusteigen. Die Schüler_innen haben alle keine Programmiererfahrungen, so dass ich das erste Listing komplett vorgab, um dann darüber zu sprechen, was an welcher Stelle vorgegeben wird und dies Programm manipulieren zu lassen.
Als erstes Listing habe ich die interne LED blinken lassen, ein Ablauf, der auch unter „Beispiele“ in der Arduino IDE ähnlich mitgeliefert wird.
[code lang="c"]
/*
Eine LED blinken lassen
Autor: Hauke Morisse
Version: 27.06.2018
*/
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
[/code]
2. Einzelstunde + 3. Doppelstunde: 2. und 3.Aufgabe: Mehrere LEDs blinken lassen
Ein wichtiger Aspekt, um mit LEDs arbeiten zu können, ist der Einsatz von Vorwiderständen, um den Strom zu begrenzen, der bei 5 Volt, die an einem Output-PIN an einem Arduino anliegen fließen würde. Dies ist meinen Schüler_innen aus dem Physikunterricht Klasse 7 zumindest grob bekannt, da sie die Reihenschaltung von Widerständen und das ohmsche Gesetz kennen. In dieser und der folgenden Stunde wurde ein Quellcode vorgegeben, der zu erweitern war: Zu Beginn war nur PIN 9 gesetzt, PIN 10 war vollständig zu ergänzen.
[code lang="c"]
/*
Zwei LEDs blinken lassen - Musterlösung
Autor: Hauke Morisse
Version: 01.11.2018
*/
// setup ist eine Funktion, die nur einmal zu Beginn in einem Programm durchlaufen wird
void setup() {
pinMode(9, OUTPUT); // Hier wird der PIN9 als OUTOPUT, also Ausgabe festgelegt (PinMode setzen)
pinMode(10, OUTPUT); // Hier wird der PIN10 als OUTOPUT, also Ausgabe festgelegt (PinMode setzen)
}
// loop ist eine Funktion, deren Inhalt kontinuierlich ausgeführt wird. Diese Funktion erledigt die Hauptarbeit.
void loop() {
digitalWrite(9, HIGH); // der PIN9 wird auf HIGH gesetzt, es liegt eine Spannung an
delay(200); // vor Ausführund der nächsten Befehlszeile wird 200 Millisekunden gewartet
digitalWrite(9, LOW); // der PIN9 wird auf LOW gesetzt, es liegt keine Spannung an
delay(200); // vor Ausführund der nächsten Befehlszeile wird 200 Millisekunden gewartet
digitalWrite(10, HIGH); // der PIN10 wird auf HIGH gesetzt, es liegt eine Spannung an
delay(200); // vor Ausführund der nächsten Befehlszeile wird 200 Millisekunden gewartet
digitalWrite(10, LOW); // der PIN10 wird auf LOW gesetzt, es liegt keine Spannung an
delay(200); // vor Ausführund der nächsten Befehlszeile wird 200 Millisekunden gewartet
}
[/code]
Zu allen Aufgaben, die mit dem Breadboard zu bearbeiten waren gab ich folgenden Hinweis:
„Jede LED wird an einem PIN angeschlossen, wie auf der Schaltung zu sehen ist. Die Nummer dieses PINs lässt sich über den Code ansteuern (im Beispiel PIN 9). ACHTUNG: Der Vorwiderstand (220 Ohm) ist notwendig, damit die LED nicht zerstört wird, wenn eine zu hohe Spannung anliegt. Die LED muss richtig herum eingebaut werden (kürzeres Beinchen zum GND / Minus), wie herum der Widerstand eingesetzt wird ist egal. Daher ist es wichtig, erst die Schaltung vollständig aufzubauen und vor dem Anschluss des Arduino per USB an den Laptop einmal vom Lehrer überprüfen zu lassen, ob alles richtig angeschlossen wurde!“
Die dritte Aufgabe, die ganz ähnlich wie die zweite war, sollte sich aus folgendem Beispiel komplett selbst erschlossen werden und entsprechend nachgebaut und programmiert werden: https://www.hackster.io/m4ttbit/led-blink-pattern-8b57b6
4. Einzelstunde: Einfache Ampelsteuerung
Diese Aufgabe ist recht ähnlich zu unserem Vorschlag für eine Unterrichtseinheit in Klasse 5/6 „Ampelsteuerung“: https://digitallearninglab.de/ubaustein/wie-funktioniert-eine-ampelsteuerung
Allerdings deutlich anspruchsvoller durch die andere Programmiersprache und die deutlich kürzere Zeit. Eine Einzelstunde allein reicht nicht, aber eine Doppelstunde sollte reichen.
5. Doppelstunde: App Camps Material: Mit Tinkercad einen Schaltkreis simulieren
Auf Tinkercad.com muss man sich persönlich anmelden, daher verwendete ich einen Account über meinen Namen und ließ die Schüler_innen sich über diesen einloggen, um kleine Aufgaben von appcamps zu bearbeiten.
6. Einzelstunde und 7.Doppelstunde: Sensortechnik und Bewegungssensor
Zum Einstieg der Arbeit mit Sensoren habe ich einen Auszug der Seite: https://www.lernhelfer.de/schuelerlexikon/physik-abitur/artikel/sensoren lesen lassen. Anschließend sollte in Partnerarbeit nach drei Sensortypen recherchiert werden und einzelne wurden im Kurs vorgestellt. Hierbei war die Aufgabe insbesondere (soweit möglich, weil teilweise sehr schwierig) zu beschreiben:
- Welche Messgröße wird mit dem Sensor aufgenommen?
- Aus welchen Bauteilen / Bestandteilen besteht der Sensor?
- Welche Einsatzgebiete und Anwendungen gibt es?
Anschließend war die Aufgabe: „Bearbeite abschließend folgende Learningapp und übertrage die 4 Lösungen unter dem Titel „Sensortechnik – Einstieg“ in deine Mappe. https://learningapps.org/6116662„
Der letzte Teil der Unterrichtseinheit bisher war zum Bewegungssensor, hierzu hatte ich verwiesen auf die Beschreibung unter: https://funduino.de/nr-8-bewegungsmelder Dies ist fehlgeschlagen, ich werde nach den Ferien wohl noch einmal eine leichtere Version versuchen, möglicherweise auch mit einem Beispielaufbau. Vielleicht wäre es auch günstiger gewesen, zuerst den Ultraschallsensor zu verwenden, obwohl dieser ein Signal mehr benötigt (Sender u. Empfänger des Ultraschalls). Hier der Aufbau und (nicht ganz einfacher) Quellcode zum Bewegungssensor:
[code lang="c"]
int piezo=5; //Das Wort „piezo“ steht jetzt für den Wert 5.
int bewegung=7; //Das Wort „bewegung“ steht jetzt für den Wert 7.
int bewegungsstatus=0; //Das Wort „bewegungsstatus“ steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob eine Bewegung erkannt wird oder nicht.
void setup() //Hier beginnt das Setup.
{
pinMode(piezo, OUTPUT); //Der Pin mit dem Piezo (Pin 5) ist jetzt ein Ausgang.
pinMode(bewegung, INPUT); //Der Pin mit dem Bewegungsmelder (Pin 7) ist jetzt ein Eingang.
}
void loop() //Der Loop-Teil beginnt
{ //Mit dieser Klammer wird der Loop-Teil geöffnet.
bewegungsstatus=digitalRead(bewegung); //ier wird der Pin7 ausgelesen. Das Ergebnis wird unter der Variablen „bewegungsstatus“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert.
if (bewegungsstatus == HIGH) //Verarbeitung: Wenn eine Bewegung detektiert wird (Das Spannungssignal ist hoch)
{ //Programmabschnitt des IF-Befehls öffnen.
digitalWrite(piezo, HIGH); //dann soll der Piezo piepsen.
delay(5000); //...und zwar für für 5 Sekunden.
digitalWrite(piezo, LOW); //...danach soll er leise sein.
} //Programmabschnitt des IF-Befehls schließen.
else //ansonsten...
{ //Programmabschnitt des else-Befehls öffnen.
digitalWrite(piezo, LOW); //...soll der Piezo-Lautsprecher aus sein.
} //Programmabschnitt des else-Befehls schließen.
} //Mit dieser letzten Klammer wird der Loop-Teil geschlossen.
[/code]
(Code / Anleitung für Arduino von Funduino GmbH – Ralf Snieders ist lizenziert unter einer Creative Commons Namensnennung – Nicht kommerziell – Keine Bearbeitungen 4.0 International Lizenz. Quelle: https://funduino.de/nr-8-bewegungsmelder)
Auch interessant zum Thema (aber so nicht für Klasse 8 geeignet): Das Arduino – Programmierhandbuch http://www.netzmafia.de/skripten/hardware/Arduino/Arduino_Programmierhandbuch.pdf
Als wird zum ersten Mal über den Begriff Arduino gestolpert sind, wussten wir nicht genau, was das ist. Mein Sohn Noah hatte jedoch stets Affinität zur Programmierung und mein Mann findet, dass Noah dann schon auch Elektronikkomponenten programmieren sollte. Daher haben wir Noah FRANZIS Baubox (https://kinderprogrammieren.de/spielsachen/experimentierkaesten/franzis-baubox-programmier-werkstatt-erfahrungsbericht/) besorgt, mit der er experimentieren kann und sich mit der Programmiersprache Arduino beschäftigen kann. Aus unserer Sicht ist der Experimentierkasten ein sehr guter Einstieg in die Arduino Programmierung, da Noah innerhalb kürzester Zeit „handfeste“ Ergebnisse vorzeigen konnte. Auch mir als Mutter macht es Spaß die „anfassbaren“ Ergebnisse zu bewundern. Ich finde, dass wenn das Kind programmieren lernen soll, dann Arduino Programmierung.