CO2-Warner selbstgebaut: Picaxe-CO2-Ampel im Bilderrahmen

Seite 3: Programm fĂĽr den Picaxe

Inhaltsverzeichnis

Unser Programm (siehe Download am Ende des Artikels) ist sehr übersichtlich, da das Picaxe-BASIC die komplizierten Dinge zur Messung der Pulslänge oder zur Ansteuerung des Servos in vorgefertigte Befehle wegkapselt. Das Programm geht durch die folgenden Schritte durch:

1. Bei Start wird der gesamte Anzeige-Bereich einmal mit dem Servo zum Test durchgefahren:

servo pin_servo, 45
pause 1000
servopos pin_servo, 245
pause 1000
servopos pin_servo, off

2. Nach einer Pause von fünf Sekunden wird die Pulslänge gemessen. Da der Puls recht lang sein kann, bis circa eine Sekunde, drosseln wir den Picaxe auf 1Mhz (setfreq m1), um diese Länge noch zuverlässig messen zu können. Nach der Messung (pulsin pin_mhz19, 1, w0) geben wir wieder mit 4MHz Gas (setfreq m4). Das Ergebnis der Messung liegt nun in der Wortvariablen w0 und zwar in Einheiten von 40 Mikrosekunden. Es folgt die Umrechnung in CO2-ppm, welche in der Word-Variable `w1` abgelegt werden.

w1 = w0 / 25
w1 = w1 - 2 * 5
Messbereich beachten

In die Berechnung der CO2-Konzentration geht natĂĽrlich der Wertebereich des Sensors ein. Die Sensoren werden allerdings in verschiedenen Einstellungen ausgeliefert, meist von 0 bis 5000ppm, seltener von 0 bis 2000ppm. Um herauszufinden, welchen Bereich der eigene Sensor abdeckt, testen wir den Sensor an frischer Luft, was einen Wert von 400ppm liefern sollte (und lassen den Picaxe am Rechner angeschlossen).

Den Sensorwert, bzw. den Wert der Variablen können wir mit einem Testprogramm über den Picaxe Editor ansehen: Weiter unten im Programm ist der Befehl debug mit einem ; auskommentiert. Wird das ; gelöscht und das Programm auf den Picaxe übertragen, schickt der Picaxe die ermittelten Sensorwerte auch an den Computer zurück. Bei einem Messbereich bis 2000ppm sollte w1 etwa einen Wert von 400 haben. Dann lautet die Formel zur Berechnung w1 = w1 - 2 * 2.

3. Nun rechnen wir per Dreisatz von Millisekunden auf den Steuerbereich des Servos um. Dieser liegt laut Picaxe-Dokumentation ĂĽblicherweise zwischen 60 und 175, bei unserem Exemplar geht aber mehr: Der Servo kann zwischen 45 und 225 fahren. Entsprechend rechnen wir den Wert von w1 um und legen das Ergebnis in der Wortvariable w2 ab: w2 = 2425 - w1 / 9

Bei den Berechnungen muss man zwei Besonderheiten des Picaxe beachten: Er kann nur mit ganzzahligen Werten – also Integer-Werten – rechnen, weshalb alle Zahlen etwas gerundet sind. Außerdem kennt er nicht die Regel "Punkt- vor Strichrechnung", sondern rechnet stumpf von links nach rechts.

4. Der Servo benötigt von w2 nur das niederwertige Byte b4, außerdem soll der Wert nur dann gesendet werden, wenn sich das Messergebnis geändert hat. Zum Vergleich merken wir uns den Wert in b6. Außerdem stellen wir den Servo nur für eine Sekunde an, um ihn zu positionieren. Die restliche Zeit sollte er aus sein. Zum einen verbraucht er dann weniger Strom und zum anderen nervt er nicht mit ständigem Gezirpe.

if b6 != b4 then
servo pin_servo, b4
pause 1000
b6 = b4
servopos pin_servo, off
end if

5. Für die nächste Messung geht es zurück zum 2. Programmschritt: goto main Zwischen den Messungen warten wir jeweils fünf Sekunden: pause 5000

Für die Programmierung des Picaxe ist eine Software nötig, zum Beispiel der Picaxe Editor 6 für Windows oder die grafische Programmierumgebung Blockly, die auf allen üblichen Plattformen und sogar Mobilgeräten läuft. Damit kann unser Programm über das Nano-Axe-Board oder einen Programmieradapter auf den Picaxe-Chip aufgespielt werden. Eine ausführliche Anleitung gibt es im Make Picaxe Special – inklusive des beliebten Einsteigerprojekts "eine LED zum Blinken bringen", ebenso wie zur Ansteuerung von Servos.