Ein Programm das Messen und Abbilden der Raumluftgüte mit dem MQ135 auf dem ARDUINO mit MYSENSORS nach FHEM
Auf dem Weg zum Bau von multiplen Raumsensoren mit FHEM und MYSENSORS war die erste Aufgabe den Programm-Code der CO²-Raumwerte zu entwickeln. Ziel ist die Daten von MYSENSORS nach FHEM zu übertragen, damit diese darstellungskonform im WEBUI abgebildet und weiter verwendet werden können. Es gibt jede Menge Programm-Schnipsel aber leider kein fertiges Beispiel, welches mich zufrieden stellte. Die plausibelsten Werte erzeugt die MQ135.h Bibliothek auf https://github.com/GeorgK/MQ135 . Hierfür habe ich dann noch den Code aus FHEM/MYSENSORS angepasst.
Wichtig ist dass der Sensor 24 Stunden „eingebrannt“ wird und anschließend bei ca. 20 Grad 35 % Feuchte außen kalibriert wird. Ich habe dazu in der Bibliothek den RZERO Wert solange verändert bis der Wert plausibel war.
/*
Arduino MQ135
Anpassung für Bibliothek MQ135.h und MYSENSORS / FHEM von jotthaeff 25.12.2015
Contribution: epierre
Based on David Gironi http://davidegironi.blogspot.fr/2014/01/cheap-co2-meter-using-mq135-sensor-with.html
http://skylink.dl.sourceforge.net/project/davidegironi/avr-lib/avr_lib_mq135_01.zip
*/
#include "MQ135.h"
#include "SPI.h"
#include "MySensor.h"
#include "Wire.h"
#define CHILD_ID_AIQ 0
#define ANALOGPIN 0
float valAIQ =0.0;
float lastAIQ =0.0;
// Initialize the gas Sensor
MQ135 gasSensor = MQ135(ANALOGPIN);
MySensor gw;
MyMessage msg(CHILD_ID_AIQ, V_LEVEL);
void setup()
{
//Serial.begin(9600);
gw.begin();
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("AIQ Sensor MQ135", "1.0");
// Register all sensors to gateway (they will be created as child devices)
gw.present(CHILD_ID_AIQ, S_AIR_QUALITY);
}
void loop() {
float ppm = gasSensor.getPPM();
Serial.print(" CO2: ");
Serial.print(ppm);
Serial.println(" ppm ");
valAIQ=ppm;
if (valAIQ != lastAIQ) {
gw.send(msg.set((int)ceil(valAIQ)));
lastAIQ = ceil(valAIQ);
}
delay(10000);
}