Sommerzeit ist Hardwarezeit, Teil 2: Ich bin alles andere als ein Elektrolurch. (Fachausdruck von Frau Rau. Fachausdruck vermittelt durch Frau Rau.) Gebt mir die theoretische Informatik, gebt mir Datenstrukturen, gebt mir Informatik und Gesellschaft – technische Informatik war dagegen nie das meine, ich komme entschieden nicht aus der Physik, so wie andere Informatiklehrer, und hatte auch nie das Bedürfnis, mir einen Rechner selber zusammenzuschrauben. Also, nur ein bisschen.
Schon in der Schule war mir das mit der Stärke und der Spannung nie so ganz klar, sehr zum Leidwesen meines technisch versierten Vaters. Dabei hatte ich einen Elektronik-Baukasten, wohl Anfang der 1980er Jahre, mit Alarmanlage und Hupe und Morsetaste und Potentiometer. (Leider kein Bild gefunden, schade. Es war kein Kosmos-Set, soviel weiß ich noch.)
Als mir aber angeboten wurde, dieses Buch zu rezensieren:

Maik Schmidt, Arduino. Ein schneller Einstieg in die Microcontroller-Entwicklung (Amazon) – weiter unten mehr dazu
- da nahm ich das zum Anlass, doch mal etwas elektronischer zu werden. Und jetzt habe ich einen ganzen neuen Computer im Haus, einen Arduino Uno:

(Nachtrag, wegegen besorgter Hinweise: Das Bild des Schlüssels habe ich vorher natürlich manipuliert.)
Wie man hoffentlich sieht, ist dieser Computer recht klein, aber trotzdem ein mehr oder weniger vollständiges Gerät. Kostet auch nur um die 25 Euro. Die verschiedenen Rechner der Arduino-Serie sind speziell für Nichttechniker gedacht, etwa für Künstler, die computergesteuerte bewegliche Plastiken schaffen wollen und dazu einen Minicomputer brauchen, den sie in die Plastik einbauen. Die Hardware und Software dazu sind open source.
Der Mikrocontroller ist dabei das Teil am Gerät, das die Arbeit macht: Er enthält nicht nur den Prozessor (der rechnet, Daten hin- und herschiebt und Programmcode ausführt), sondern auch weitere Steuerungselemente und Arbeitsspeicher, die im heimischen PC auf separate Bauteile aufgeteilt sind. Ein Computer im Kleinen.
Außerdem braucht auch ein kleiner Computer Strom. Der kommt über den Stromanschluss oder über das USB-Kabel, das dazu an einem Rechner oder einem Steckdosenadapter steckt und den Rechner mit den nötigen 5 V Spannung versorgt (und einem halben Ampere Stärke).
Und dann gibt es noch die Ein- und Ausgabepins oben. Das sind sozusagen Augen, Ohren, Mund und Hände des Rechners. Ohne die würden wir nichts davon mitkriegen, wenn der Rechner rechnet.
Man kann jeden Pin als Ausgabe deklarieren, dann kann das Programm an diesen Pin 5 V schicken (einschalten) oder 0 V (ausschalten). Und an diesem Pin kann zum Beispiel eine Leuchtdiode stecken, die dann angeht oder ausgeht.
Oder man deklariert einen Pin als Eingang, dann kann das Programm an diesem Programm überprüfen, ob Spannung anliegt. Und an diesem Pin kann zum Beispiel ein Schalter stecken. Dann schreibt man ein Programm, das immer wieder den Eingangspin auf Spannung überprüft, und wenn dort welche liegt (also der Schalter gedrückt ist), sendet das Programm wiederum Spannung an den Ausgabepin, so dass dort die Diode leuchtet. Schon hat man ein kleines Maschinchen – zugegeben ein so einfaches, dass man dafür keinen Rechner bräuchte.
An diese und die analogen Pins kann man Servomotoren hängen, Leuchtdioden, Summer, Temperaturfühler und Beschleunigungsmesser und alles mögliche sonst. Wie Captain Hook, wenn der statt seiner Hakenhand alle möglichen Küchenutensilien anstecken könnte.
Das Zeug muss man natürlich erst haben. Ich bin dem Rat des Buches gefolgt und habe für unter 70 Euro eine Einsteigerbox gekauft – mit dem Arduino Uno als Rechner und einem Haufen von Käbelchen, Widerständen, Relais, Transistor, Summer, Servomotor, Druckknöpfen, Potentiometer, Temperatur‑, Licht- und Neigungssensor. Ich komme mir schon extrem technisch vor. Das letzte Mal Widerstände gelötet habe ich vor fünfundzwanzig Jahren (ein selbstgebasteltes Mikrophon für die Mundharmonika, lange Geschichte); glücklicherweise muss man zumindest für die Einsteigerspielereien mit dem Arduino nichts löten, sondern kann alle Teile bequem einstecken.

das Fritzing Starter Kit
Das Buch von Maik Schmidt enthält als Projekte unter anderem: Einen Zufallswürfel; das Übersetzen von vom PC gesendeten Text in Morsesignale; Entfernungsmessung mit Ultraschallsensor; das Anschließen eines Wii-Nunchucks; eine Universalfernbedienung. Für mich als Einsteiger eine Nummer zu groß, aber die einfachen Projekte kann ich. Als Nächstes möchte ich alleine etwas ganz Simples ausprobieren: eine Ampel, die man per Knopfdruck weiterschaltet. Dazu muss ich nur eine rote, grüne und gelbe Diode (durch Widerstände geschützt) und einen Schalter an beliebige Pins stecken. Und das mit der Masse, das muss ich noch kapieren, Das Programm, das die Ein- und Ausgabepins dann ampelmäßig steuert, ist dann wieder ganz einfach – ganz der Zehntklassstoff.
Das Buch erklärt nicht die Programmiersprache C++, man sollte sich also etwas damit auskennen, oder zumindest mit Java, das ist recht ähnlich. Die Entwicklungsumgebung nimmt einem dabei viel Arbeit ab. Über die serielle Schnittstelle kann der PC mit anderen Sprachen (Java, JavaScript, Processing, Python) mit dem Arduino kommunizieren.
Das Buch ist für Einsteiger mit einigem Grundwissen geeignet. Ich weiß nicht, was es sonst an Arduino-Büchern gibt; viele, nehme ich an, und online gibt es auch jede Menge Anleitungen. Ich werde jedenfalls nach und nach die Modelle im Buch ausprobieren, soweit ich die Bauteile dazu habe.
Anhang 1: Die Programmierung
Programmiert wird ein Arduino so: Man installiert die Arduino-Entwicklungsumgebung auf dem Rechner. Die ist abgeleitet von und ganz ähnlich aufgebaut wie Processing (Blogeintrag). Man schreibt in dieser Entwicklungsumgebung ein einfaches Programm in der Sprache C++, zum Beispiel dieses:
int pin = 13;
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}
Beim Aufruf eines Processing- oder Arduino-Progamms wird immer zuerst die setup-Methode einmal ausgeführt, in der hier der Pin Nr. 13 auf OUTPUT gesetzt wird. Das heißt, an diesen Steckplatz sendet das Programm Signale. Dort steckt später zum Beispiel eine Diode.
Die loop-Methode wird dagegen nicht nur einmal, sondern ständig ausgeführt. Zuerst wird an den 13er-Pin ein HIGH-Signal gesendet (5 V), dann eine Sekunde gewartet, dann ein LOW-Signal (0 V), dann wieder eine Sekunde gewartet. Und das immer wieder.
Wenn das Programm geschrieben ist, wird es in den Speicher des Arduino übertragen. Dort bleibt es, bis es irgendwann mal durch ein anderes Programm überschrieben wird. Sobald der Arduino Strom kriegt, lädt ein Bootloader das Programm und startet es – in unserem Fall wird Pin 13 abwechselnd mit einem HIGH- und einem LOW-Signal versorgt. Wenn an Pin 13 dann auch tatsächlich zum Beispiel eine Diode hängt, wird sie blinken.
Tatsächlich versteht unser kleiner Arduino keine so hochentwickelte Sprache wie C++. Die passt da ja gar nicht rein, das wird doch wohl jeder einsehen. Also wird der Progammcode erst einmal übersetzt in eine viel einfachere, primitivere Sprache, die der Arduino-Mikrocontroller dann auch wirklich versteht. Das heißt “kompilieren”, und es ist also gar nicht das C++-Programm, das an den Arduino-Prozessor übertragen wird, sondern der kompilierte Programmcode. Das heißt auch Maschinensprache, und wer will, kann die Maschinensprache oder die Vorstufe dazu, Assembler, gleich selber schreiben, ohne über C++ gehen zu müssen. Dann sieht ein Programm so aus:
LDI R16,2 ; lade die Zahl 2 in Register Nr. 16
MOV R1,R16 ; kopiere den Inhalt von Register Nr. 16 nach Nr. 1
Hier gibt es Tutorien dazu, Und das ist dann auch Stoff der 12. Jahrgangsstufe. Denn nicht nur der Arduino-Prozessor versteht kein C++, das gilt genauso – aber vielleicht weniger nachvollziehbar – für den Prozessor im PC und jedem anderen Rechner. Die verstehen alle nur ihre eigene Maschinensprache.
Anhang 2: Die Ampel

Das ist meine Ampelmaschine. Ich habe dazu nur ein Projekt im Buch minimal abgewandelt… uh, andersfarbige Dioden genommen und einen anderen Schalter eingebaut.
Diese Konstruktion kann Eingaben von außen über einen Schalter entgegennehmen, und über drei Dioden nach außen Ausgaben senden. Was sie mit diesen Möglichkeiten anstellt, liegt am Programm, das Ein- und Ausgabe steuert. Zufallsleuchten, Blinklicht, Ampelschaltung, oder die Berechnung einer komplizierten Formel (grün für ja, rot für nein).
Ist das Informatik? Für mich ist es eher, uh, Elektrolurcherei. Schon mal, weil der Druckknopf nicht so idealisiert funktioniert wie in einer Simulation, sondern mechanisch ist und beim Drucken eine Zeitlang nachschwingt, und das Programm sich darauf einstellen muss.
Die Elektrolurcherei ist aber auch dringend nötig bei mir. Inzwischen weiß ich halbwegs, was Masse ist! Durch das Stecken von Kabeln und das Schreiben von Programmen eigens für die gebastelte Maschine (statt einer Simulation davon auf dem PC) bekommt man vielleicht auch mehr Gespür dafür, was ein Computer eigentlich macht. Ich will schauen, ob ich nächstes Jahr Gelegenheit finde, das mit Schülern auszuprobieren.