Der Arduino: Mein neuer Computer

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.

Tagged: Tags

8 Thoughts to “Der Arduino: Mein neuer Computer

  1. Ah witzig,

    habe mir zu Beginn der Ferien einen Raspberry Pi bestellt, den ersten Start geschafft, einen halben Artikel geschrieben – komme aber erst die nächsten Tage zu mehr (XBMC, Quake). Der Pi ist ein wenig größer, hat aber mehr Anschlüsse, wenn ich es recht sehe: HDMI und LAN z.B. Ist auch weniger als Programmierobjekt gedacht, sondern als Media-Streamer-Versuch oder eben Wohnzimmer PC in Miniatur.

  2. Vom Raspberry Pi habe ich auch schon gehört, bin schon gespannt auf den Artikel. Der ist vielseitiger als das Arduino, mit Betriebssystem und dergleichen neuartigem Zeug. (Eine Mediaserverlösung fehlt mir übrigens auch noch.)

  3. Danke für den Hinweis. Schon lange habe ich immer wieder Ideen, was man mit einem Microcontroller machen könnte – hier liegen auch schon die Teile, die Spannungsversorgung hab ich schon zusammengelötet. Aber alles in allem mach ich mich zum Hirsch damit, keine Ahnung ob das je funktionieren würde. (In meinem Fall hatte ich mich für einen AtMega entschieden.) Da scheint Arduino ein Ausweg.

    Ich hätte da aber noch ein paar Frägelchen: Kann der Arduino MIDI? (Oder kann man ihm dazu verhelfen? Bzw.: Hat er eine frei taktbare serielle Schnittstelle? ) Können die Analog-Ausgänge direkt, also ohne Treiber, ein Relais mit Strom versorgen? Und: Kann man das Ding unter Linux programmieren?

  4. Eine frei taktbare serielle Schnittstelle hat er (über USB oder einen Eingabe- und einen Ausgabepin), und Anleitungen für MIDI habe ich auch gefunden. Alternativ gibt’s auch aufsteckbare MIDI-Module („MIDI Shield“).
    Linux: Ja. Die Installation der IDE erfordert wie so oft wohl etwas mehr Aufwand als bei Windows, aber nur im üblichen Rahmen.
    Analog-Ausgänge: Bin überfragt. Vielleicht sagt dir das mehr als mir: http://www.arduino.cc/playground/Deutsch/Relais

  5. Ist ja lustig, ich hatte mir auch einen Arduino gekauft. Auch wegen der Processing-Umgebung mit der man das Arduinoboard so schön programmieren kann. Leider läuft processing nicht so schnell auf unseren Schulcomputern, aber ich denke, dass ein W-Seminar mit eigenem Computer sich gut umsetzen ließe.

    Das Arduino wollte ich vor allem für den Physik-Unterricht haben. Ich denke, dass sich vielleicht der ein oder andere Sensor damit herstellen lässt. Mal schauen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.