Eine Kombination aus Raspberry Pi und Arduino eignet sich bestens für anspruchsvolle Aufgaben bei der Sensorik und Heimautomation. Dabei ergänzen sich die Stärken der beiden Boards ideal.
Wie der Raspberry Pi ist auch der Arduino unter Open-Hardware-Nutzern populär, erfüllt aber einen etwas anderen Zweck: Die Embedded-Plattform dient meist als Basis für einfache Hardware-Projekte. Mit ihrer Hilfe lassen sich unkompliziert Lichter, Motoren und andere Geräte im heimischen Umfeld ansteuern. Anders als der RasPi verfügt der Arduino aber nicht über ein komplettes Linux-Betriebssystem und ist daher kein wirklich vollständiger Rechner. Er wurde eher als System für einfache, universelle Ein- und Ausgabe entwickelt und zielt damit klar auf elektronische Appliances ab.
In manchen Einsatzszenarien erscheint eine Interaktion zwischen Raspberry und Arduino durchaus vorstellbar. So könnte ein Programm auf dem RasPi Eingaben eines am Arduino angeschlossenen Sensors verarbeiten oder der Pi ein Signal an den Arduino schicken, damit dieser die Lichter dimmt oder die Vorhänge schließt. Im Folgenden wollen wir zeigen, wie Sie den Raspberry Pi dazu bringen, via USB-Kabel mit einem Arduino zu kommunizieren. Eine solche Konfiguration kann dann als Ausgangspunkt für eigene Projekte dienen.
Teileliste
Um einen Raspberry Pi Modell B unter Raspbian mit einem Arduino Uno R3 zu verschalten, benötigen Sie ein Breadboard, drei Kabel für die Verbindungen von und zu diesem, ein Netzwerkkabel für den RasPi, ein USB-Kabel für den Arduino, einen 220-Ohm-Resistor sowie eine 3,5-Millimeter-LED (als Statusanzeige).
Auf dem Raspberry richten Sie zunächst einmal die Arduino-Entwicklungsumgebung ein, die Sie im Paket arduino finden. Zusätzlich benötigen Sie die Python-Bibliothek python-serial aus dem gleichnamigen Raspbian-Paket. Haben sie beides installiert, können Sie die Arduino-IDE aus dem Hauptmenü heraus über Elektronik | Arduino IDE starten (Abbildung 1).

Abbildung 1: In der Arduino-IDE schreiben Sie Programme für den Arduino, übersetzen diese, und schicken Sie an das Board.
Serial Arduino
In der Arduino-Entwicklungsumgebung tippen Sie den Code aus Listing 1 ein. Ein solches Code-Stück nennt man im Arduino-Jargon einen Sketch. Dieser liest von einer seriellen Schnittstelle (in diesem Fall der USB-Anschluss) und lässt eine LED so oft aufleuchten, wie die Variable num aus den eingehenden Daten es vorgibt.
Listing 1
# helloArduino.ino
const int ledPin = 8;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
int num = Serial.read() - '0';
{
for (int i= 0; i<num; i++)
{
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
delay(300);
}
}
}
delay(1000);
}
Nach dem Abspeichern des Codes laden Sie den Sketch auf den Arduino hoch. Dazu verbinden Sie den Arduino mit einem USB-Port des RasPi und klicken den Upload-Schalter an (das zweite Icon von links in der Werkzeugleiste der Arduino-IDE). Dies sendet den kompilierten Sketch an den Arduino. Behalten Sie dabei das Statusfenster ganz unten in der Arduino-IDE im Auge. Geht bei der Übertragung etwas schief, müssen Sie eventuell den Port für den Arduino unter Tools | Serial Port einstellen. Der dem Arduino zugeordnete Port erscheint in aller Regel automatisch in der IDE und heißt fast immer ttyACM0.
Die Schaltung
Für den vorgesehenen Zweck genügt eine ganz einfache Schaltung (Abbildung 2). Wie Sie sehen, kommt der HIGH-Wert direkt von Pin 8 des Arduino, den Sie direkt mit dem 220-Ohm-Resistor verbinden. Das andere Ende des Resistors legen Sie an die Anode (das Plus-Bein) der LED an. Deren Kathode (das Minus-Bein) verbinden Sie direkt mit Masse, in diesem Fall mit dem Arduino als Gnd bezeichneten Pin.

Abbildung 2: Das Diagramm des benötigten Schaltkreises. Es wurde mit dem Programm Fritzing erstellt, das sich speziell für Arduino-Entwürfe gut eignet.
Nun geht es wieder zurück an den Raspberry Pi, wo Sie nun ein Stück Python-Code erstellen, entweder im Texteditor oder in einer Python-IDE wie IDLE. Tippen sie die Zeilen aus Listing 2 ein und speichern Sie diese in der Datei ardu2Pi.py. Sie starten das kleine Programm durch den Aufruf python ardu2Pi.py in einem Terminal.
Listing 2
#!/usr/bin/python
# ardu2Pi.py
################
# Port Detection
import serial
for com in range(0,4):
try:
PORT = '/dev/ttyACM'+str(com)
BAUD = 9600
board = serial.Serial(PORT,BAUD)
board.close()
break
except:
pass
########
# Blinks
from Tkinter import *
import time
DEVICE = '/dev/ttyACM'+str(com)
BAUD = 9600
ser = serial.Serial(DEVICE, BAUD)
root = Tk()
def five() :
ser.write('5')
return
def two() :
ser.write('2')
return
def seven() :
ser.write('7')
return
root.title("Arduino im Test")
Label(text="Raspberry Pi Geek 05/2013", fg="#0A116B").pack()
Label(text="RasPi gruesst Arduino!",fg="#0A116B").pack()
Button(text='2x blinken', command=two, background="#33D63B", fg="#FFFFFF").pack()
Button(text='5x blinken', command=five, background="#1DE4F2", fg="#FFFFFF").pack()
Button(text='7x blinken', command=seven, background="#DC0F16", fg="#FFFFFF").pack()
root.mainloop()
Der erste Teil des Codes prüft, an welchem RasPi-Port der Arduino hängt, und speichert dessen Nummer in der Variablen com. Nun zeigt das Programm ein rudimentäres Tk-Fenster mit drei Schaltern an (Abbildung 3). Drücken Sie einen davon, dann leuchtet die LED so oft auf, wie die Aufschrift es angibt. Dazu sendet das Programm über das USB-Kabel die Anzahl der gewünschten Pulse, die der Arduino in Listing 1 in die Variable num einliest.
Fehlerquellen
Blinkt die LED nicht, dann kann das unterschiedlichste Ursachen haben. Prüfen Sie zunächst einmal die Schaltung und stellen Sie sicher, dass nichts lose sitzt. Das Kabel von Pin 8 des Arduino muss auf die selbe Reihe des Breadboards führen wie das eine Bein des Resistors. Dessen anderes Bein gehört wiederum in die selbe Reihe wie die Anode der LED (normalerweise das längere Bein). Schließlich muss das letzte Kabel von der Kathode der LED zurück zum Gnd-Pin des Arduino führen, um den Schaltkreis zu schließen (Abbildung 4).







