Heyho,
vor einigen Wochen wurde ich per E-Mail gefragt, ob ich nicht Lust hätte an einem Projekt mit zu arbeiten. Konkret ging es darum CO2/O2/Ethanols etc. Werte eines Sensors einzulesen und via Web darzustellen.
Zu dem Zeitpunkt lief das alles noch auf einem Windowssystem und wohl mehr schlecht als recht.... . Die Idee war es, das ganze System auf ein Raspberry Pi umzustellen und als Stand-Alone Gerät zu entwickeln.
Ok gesagt getan, ich hielt fleißig E-Mailkontakt mit den Leuten und half erstmal die Sensorschnittstelle (eine große, weiße Box mit Ethernet und RS232 Anschluss für bis zu 12 Sensoren) per UART an das Raspberry anzuschließen.
Als dies nicht gelang (u.a. weil das Raspberry bei einer Baudrate von 9600 am AMA0 immer ein undefiniertes Zeichen zusätzlich mit ausgibt - ka was das ist, ich krieg es auf jeden Fall nicht weg) sind wir auf USB umgestiegen.
Dazu habe ich ein kleines Pythonprogramm geschrieben, welches einen Sensor nach einem Ergebnis fragt und das Ergebnis empfängt, auswertet und mitloggt.
Das erste Programm war auch nicht so schön.....brauchte teilweise fünf Versuche um es zu starten, wenn es vorher unterbrochen wurde etc.
Nach ein paar Versuchen mit einem Timeout beim Serial-Modul klappte es dann doch viel zuverlässiger.
Jetzt am Wochenende haben wir das System mal als ganzes getestet, sprich drei Sensoren (Ethanol, O2 und CO2) an einem Raspberry Pi, dazu ein AVR Net IO / PCF8574 (welches wir davon schlussendlich verwenden werden wissen wir noch nicht) um drei Pumpen anzusteuern.
Dazu kommt noch ein Adafruit Thermodrucker und ein Display / Monitor (jetzt noch nicht aber in paar Wochen wenn wir uns entschieden haben).
Wie funktioniert nun das ganze?
Nach dem Bootvorgang legt das Raspberry drei Textdateien an und beschreibt sie mit "0" (genau wie die Dateien für die GPIOs unter /sys/class/gpio.
Diese Dateien werden danach von einem Pythonprogramm sequenziell ausgelesen und bei einer "1" in einer Datei wird die dem entsprechende Pumpe geschaltet.
Das Beschreiben der Datei findet durch PHP/Python etc. statt (quasi wie das Schalten eines GPIOs, nur über I2C mit dem Portexpander oder über USB mittels AVR Net IO -> beim AVR Net IO kommt noch der AD/Wandler mit dazu).
Anschließend wird ein weiteres Programm gestartet, welches alle Ports an der Sensorbox abfragt, herausfindet ob ein Sensor angeschlossen ist und die ID, die Portnummer und den Sensortyp in einer Textdatei speichert.
Sobald das Programm durchgelaufen ist, wird das Hauptprogramm gestartet, welches die Textdatei ausließt und alle angeschlossenen Sensoren abfragt. Das Ergebnis wird in einer Log-Datei für jeden Sensor und einer großen Log Datei für alle Sensoren gespeichert.
Diese sehen dann z.B. so aus:
Sensor 1:
Code:
20.05.2013 22:51:28 1369090288 1.183101828e-001 10.000000000e-001
Log:
Code:
19.05.2013 19:51:28 1368993088 Sensor_2: 5.078991444e-002
19.05.2013 19:51:31 1368993091 Sensor_2: 5.084003787e-002
19.05.2013 19:51:34 1368993094 Sensor_2: 5.085029646e-002
19.05.2013 19:51:36 1368993096 Sensor_2: 5.090338151e-002
19.05.2013 19:51:39 1368993099 Sensor_2: 5.087201838e-002
19.05.2013 19:51:42 1368993102 Sensor_2: 5.079552858e-002
19.05.2013 19:51:44 1368993104 Sensor_2: 5.072014979e-002
Geplant ist jetzt noch, dass mit den Sensorwerten Berechnungen angestellt werden und je nach Wert dann eine Pumpe geschaltet wird (daran arbeite ich im Moment noch).
Zudem soll ein Monitor angeschlossen werden, wo man die Sensorwerte sieht, Triggerwerte für die Pumpen setzen kann und nebenbei noch die eigentliche Konsole hat (wird dann alles über tty1, tty2 und tty3 laufen - bzw. ist so geplant).
Längerfristig ist geplant, dass wir zusammen mit dem Hersteller das Raspberry und die Sensorbox alles in ein Gerät packen um alles ein wenig kompakter zu gestalten (aber das dauert noch etwas ).
So ich hoffe ich habe nichts vergessen....wenn doch, füge ich es hinzu sobald es mir eingefallen ist .
Anbei noch ein paar Fotos von unserer "Session" am Samstag:
Der Aufbau:
Bild hier
Bild hier
Sensor und Raspberry:
Bild hier
Sensorbox:
Bild hier
PHP:
Bild hier
Eine der Pumpen:
Bild hier
USB Stick zur Messdatenspeicherung + PCF8574 Portexpander:
Bild hier
Ein CO2 Plot der letzten zwei Tage von mir Zuhause.
Excel erkennt den "." im Datensatz nicht als Dezimalstelle, sondern als 1000er Stelle.....daher sind die Werte leicht hoch, aber es interessiert nur die Kurve .
Später geschieht die Auswertung mittels Origin, weil Excel u.a. nur 32000 Datensätze pro Kennlinie zulässt:
Bild hier
Die Peaks sind übrigens von mir durch drauf pusten entstanden.
Lesezeichen