Wie macht man Digitalisierung? Folge 3

26.01.2018
5 Min.

Ein- und Ausgänge am Raspberry Pi

Dies ist ein kleiner Exkurs, wie das Sensorsignal in den Rasp kommt zur Auswertung.
Der Raspberry hat je nach Modell eine unterschiedliche Anzahl von Ein- und Ausgängen, sogenannten GPIO (General-purpose input/output). Interessanterweise kann bei jedem GPIO über die Software definiert werden, ob dieser Anschluss als Ein- oder Ausgang funktionieren soll. Zwei verschiedene Arten, die GPIO zu nummerieren, können noch für Verwirrung sorgen. Per Software muss man daher zuerst definieren, ob man sich auf die Bezeichnungsart BOARD oder BCM bezieht, auch ist noch eine Library zu laden in welcher die Funktionen für das IO-Handling enthält:

import RPi.GPIO as IO
IO.setmode(IO.BCM)

Eingänge belastet man normalerweise mit einem Widerstand, damit etwas mehr Strom fliessen kann als die omnipräsenten Störsignale und vor allem, damit der Zustand klar als 0 oder 1 definiert ist. Auch dies muss man beim Rasp nicht mit externen Bauteilen machen, diese sind bereits intern vorhanden und können eingeschaltet werden:

IO.setup(20, IO.IN, pull_up_down=IO.PUD_DOWN)

Eingang Nr. 20 wird damit gegen Masse belastet.

Ein einfacher Start in Python

Anstatt direkt auf eine Messung loszugehen, will ich zuerst einmal eine LED an einem Ausgang leuchten lassen, sobald der Eingang hoch ist. Die LED wird über einen Widerstand an den GPIO 23 angeschlossen:

IO.setup(23, IO.OUT)

Die LED leuchten zu lassen ist sehr einfach, mit einer Schleife und der Anweisung, den Ausgang 23 alle 0.2 Sekunden abwechselnd 0 oder 1 zu halten, bringt man sie auch zum Blinken:

i = 0
while i < 10:
     i = i+1
     IO.output(23, 1)
     time.sleep(0.2)
     IO.output(23, 0)
     time.sleep(0.2)

Dass Einrücken im Programmcode bereits eine Bedeutung hat, erinnert mich ein wenig an Fortran… aber dies nur als Randbemerkung aus fossilen Vorzeiten. Auch sonst fällt mir Python durch seine extreme Kürze auf. Der Ausdruck if IO.input(21): genügt bereits, um die Abzweigung zu schaffen. Der Ausdruck ist wahr, wenn der Eingang 21 auf 3V (also = 1) ist.

Eine „ewig“ dauernde Schleife zu erzeugen ist wortkarg und logisch möglich:  while True: Alles was danach eingerückt aufgeführt wird, läuft in dieser Schleife. Wieder am Zeilenanfang begonnen ist ausserhalb der Schleife.

while True:
        if IO.input(21):
            IO.output(23, 1)
            time.sleep(0.2)

Das ist bereits eine minimale Programmschleife, um die Sensoraktivität festzustellen und die LED leuchten zu lassen. Ich muss hier keinen Python Lehrgang schreiben, solche sind bereits in grosser Zahl zu finden. Mit den offiziellen Seiten zum Raspberry Pi und zur Programmiersprache Python ist man schon sehr gut bedient:

Schütteln erzeugt Licht

Mit dem Signal am Digitalausgang des Sensors kann der Rasp etwas anfangen. Ich bringe ihn dazu, die LED leuchten zu lassen, wenn ich den Sensor schüttle. Allerdings ist der Sensor so empfindlich, dass die LED bereits aufleuchtet, wenn jemand im Haus eine Türe öffnet. Oder bei anderer Einstellung so unempfindlich, dass überhaupt nichts geht. Mit rhythmischem Fingertrommeln auf der Versuchsplatine erzeuge ich bei meiner Frau ein paar Fragen und tatsächlich finde ich auch eine Schaltschwelle, bei der leichtes Trommeln nichts bewirkt, frenetisches Hämmern aber die LED zum Leuchten bringt. Das Resultat ist aber ehrlich gesagt wenig befriedigend und ich frage mich, ob ein teurer Sensor hier Schlaueres bewerkstelligen könnte. Zudem werden die Versuche schwierig, weil die Versuchsplatine nicht als Trommel ausgelegt ist. Bevor ich aufgebe, will ich also einen brauchbaren Versuchsaufbau machen.

Jetzt wird es mechanisch

Viele Wege führen zu einem mechanisch zuverlässigen Aufbau. Design, Materialwahl und Herstellverfahren lassen viele Kombinationen zu. Da ich seit vielen Jahren hobbymässig dem 3D-Druck verfallen bin, liegt diese Wahl nahe. Gerade für das Prototyping ist man damit schnell, wenn man die Arbeitsweise dem Verfahren anpasst. Ähnlich wie beim Programmieren empfiehlt sich ein iteratives Vorgehen mit einer gewissen Fehlertoleranz in allen Stufen:

  • Nicht allzu akribisch aufwändig konstruieren
  • ein Exemplar ausdrucken
  • Funktion ausprobieren
  • Konstruktion anpassen

etc. als Schleife durchlaufen. Weil die Tools für Konstruktion und Druck fast nahtlos zusammen funktionieren, ist der Aufwand für einen Durchlauf der Schleife gering. Die Durchlaufzeit hingegen mag je nach dem relativ hoch sein, bis der Drucker das neue Teil fertiggestellt hat. Der Druck läuft aber unbeaufsichtigt, ich muss mich nicht darum kümmern.

Als Konstruktionssoftware verwende ich das kostenlose Tinkercad, welches der kalifornischen Autodesk gehört (wie AutoCAD und andere). Über solche „Spielzeugsoftware“ kann man entweder erhaben lächeln oder sie einfach anwenden und staunen, was damit mit minimalem Aufwand möglich ist. Die Software läuft in der Cloud, konstruiert wird im Browser. Das ist ein Szenarium, welches vor wenigen Jahren kaum vorstellbar gewesen war und heute wirklich gut funktioniert.

Vibrationssensor in TinkerCAD

Vibrationssensor und Halter, Konstruktion in Tinkercad

Das rote Teil ist der Halter, welcher an einem flachen Maschinenteil angeklemmt wird. Rechts unten ist der Sensor vereinfacht abgebildet.

Konstruiert wird im Tinkercad mit Körpern, die als Loch oder massiv aneinandergereiht werden.  Oft braucht es etwas Erfindungsgeist, um die Reihenfolge geeignet zu wählen, damit die Konstruktion einfach ist und nicht etwa durch Löcher vorhandene Teile eliminiert werden.

 Vibrationssensor mit 3D-Halter

Vibrationssensor mit Halter

Das Verkabeln ist vergleichsweise ein richtig aufwändiger Akt, obwohl es nur um ein vieradriges Kabel geht vom Sensor zum Rasp. Und drei Adern hätten auch gereicht; den analogen Ausgang verwende ich ja nicht.
Damit auch der Raspberry nicht nackt auf dem Schreibtisch liegen muss und das Sensorkabel irgendwo befestigt ist, mache ich auch gleich ein Gehäuse für den Rasp.

Gehäuse Raspberry Pi mit Platz für Anschlüssen

Gehäuse Pi mit Sensoranschluss in Tinkercad

Und auch hier wieder: Ich bin nicht alleine! Fertige, präzise Abbilder für meinen Rasp finde ich im Internet innert Kürze entweder direkt in der Community von Tinkercad selbst, oder sonst auf Thingiverse. Das Abbild der Platine brauche ich, um das Gehäuse drum herum zu konstruieren.

 

Gehäuse für Rasp mit Anschlüssen

Der Druck ist mit ABS ausgeführt, schön ist er nicht geworden aber ich lasse es im Moment dabei. Dafür sorgt der löchrige topsoft-Schriftzug für Kühlung. Der Deckel wird mit einem Gummmiring festgehalten. Über die Anschlüsse rechts kann ich den Sensor direkt abgreifen um das Signal auf dem Oszilloskop anzuschauen.

 

Den vierten und letzten Teil dieses Berichts können Sie hier lesen.

 

Autor: Dr. Marcel Siegenthaler