Listing 1
#!/usr/bin/python
# Notwendige Pakete importieren
import spidev
import time
import os
import sys
import RPi.GPIO as GPIO
time.sleep(300)
GPIO.setmode(GPIO.BCM)
# GPIO-Pin 23 = Eingang
GPIO.setup(23, GPIO.IN)
# SPI-Bus öffnen
spi = spidev.SpiDev()
spi.open(0,0)
# Variablen definieren
# Abtastrate
delay = 0.5
# Dateipfad
file = "/boot/daten/messungen/poti.txt"
# Trennung
trennzeichen = ';'
# file loeschen
os.remove(file)
def schreiben(data):
# in Datei schreiben
fobj_out = open(file,"a")
fobj_out.write(str(position))
fobj_out.write(trennzeichen)
fobj_out.close()
print position
while True:
# Daten auslesen
data = spi.xfer2([0x00])
schreiben(data)
time.sleep(delay)
if GPIO.input(23):
sys.exit()
Sensoren programmieren
Um mit den einzelnen Sensoren zu kommunizieren, kam die GPIO-Schnittstelle des Raspberry Pi zum Einsatz. Deren Pins dienen sowohl als Eingänge als auch als Ausgänge. Weitere Informationen zum Programmieren der Anschlüsse finden Sie in einem Artikel in RPG 05/2013 [4].
Um die Sensoren so lange abzufragen, bis der Taster zum Beenden der Aufzeichnung ein Signal gibt, laufen die Programme in via while True: realisierten Endlosschleifen. Um die erfassten Daten in eine Datei zu schreiben, kommt ein einfacher Datenstrom zum Einsatz, der diese öffnet, die Werte der einzelnen Variablen in jedem Durchlauf ablegt, sie zum Schluss speichert und die Datei wieder schließt. Als Trennzeichen dient ein Semikolon.
Die Verbindung zwischen Raspberry Pi und GPS-Sensor kommt über die TTL-Pins und ein USB-TTL-Adapterkabel zustande. Der Rechner fragt die Daten bei laufender Messung in einer Endlosschleife ab und schreibt sie mit einem Zeitstempel in eine Datei. Weitere Informationen zur Kombination aus einem Raspberry Pi und dem GPS-Sensor von Adafruit finden Sie auf der Homepage des Unternehmens [5].
Beim Messen der Geschwindigkeit haben die Gruppen unterschiedliche Ansätze gewählt: Zwei Teams verwendeten einen Hallsensor, um die Drehzahl zu erfassen. Die Motorrad-Gruppe dagegen hat das ABS-Signal aus dem Motorsteuergerät verwendet. An dieser Stelle der Warnhinweis: Basteln Sie nicht ohne gute Kenntnisse der Fahrzeugtechnik selbst an der Elektronik eines Gefährts herum.
Beim Ansatz mit dem Hallsensor führten schlussendlich unterschiedliche Wege zum Ziel: Der Sensor liefert pro Umdrehung des Rads eine positive Flanke, die wiederum einen Interrupt auslöst, was eine Variable um den Wert 1 erhöht. Anschließend wertet das Programm die Variable alle zwei Sekunden aus und rechnet die Daten in Umdrehungen pro Minute um. Diese schreibt es danach wieder in die Datei. Damit das Auswerten klappt, erfasst die Software zu Beginn und am Ende des Durchlaufs die Systemzeit und bildet die Differenz.
Eine weitere Möglichkeit besteht darin, die Differenz der Zeit (ebenfalls über die interne Systemzeit) zwischen den einzelnen Messpunkten zu erfassen und über den Umfang des Rads auf die Geschwindigkeit zu schließen. Die Drehzahl liefert dann die Taktfrequenz für die restliche Sensorik. Das spart Speicher und erfasst im Stillstand keine Parameter. Die Testperson beendet die Messung über einen Taster, der mit sys.exit() das Python-Programm abbricht.
Potentiometer
Ein A/D-Wandler verarbeitet das Signal des Potentiometers, sodass der RasPi die Daten aufnehmen kann. Dazu tastet das Programm in einer Endlosschleife die Stellung des Potentiometers zweimal pro Sekunde ab und schreibt die Werte in eine Datei.
Ein C#-Programm, das später zum Einsatz kommt, skaliert die Messwerte. Das ist notwendig, da die Mittelstellung des Potentiometers einen Lenkeinschlag von 0 Grad darstellt. Dreht sich der Potentiometer nach links oder rechts, resultiert daraus ein positiver beziehungsweise negativer Wert für den Lenkeinschlag.
Schließlich schreibt das Programm die berechneten Daten mit einem Zeitstempel versehen in eine Datei. Der Zeitstempel ermöglicht das Synchronisieren mit anderen Messdaten.
Start und Ende
Zum Starten der Aufzeichnung sowie der notwendigen Prozesse (wie etwa das Erfassen der GPS-Daten) kamen verschiedene Ansätze zum Einsatz. Es wäre möglich, den Start der Messung mit dem Booten des RasPi zu verbinden. Dafür muss man in /etc/rc.local die entsprechenden Einträge erstellen. Der Mini-PC führt diese dann beim Booten aus und startet somit alle zum Messen erforderlichen Programme.
Die komfortablere Lösung ist, dies nicht mit dem Hochfahren des Mini-Computers zu kombinieren, sondern die Messungen beim Betätigen eines Tasters zu starten. Um dies zu ermöglichen, haben die Studenten die diversen Befehle einfach in ein Python-Programm geschrieben, das der Mini-PC beim Drücken des Tasters ausführt.
Das Beenden der Aufzeichnungen erfolgt auf genau die gleiche Art und Weise. Das Betätigen des Tasters schließt wieder einen Signalkreis. Die einzelnen Programmen für die Sensoren fragen den Taster auf eine positive Flanke ab und das Programm mit sys.exit(). Auf diese Weise landen die letzten Daten in der Datei, und die Software schließt diese ordentlich, bevor sich das Programm sauber beendet. Über einen weiteren Taster ließe sich der RasPi sauber herunterfahren.





