-
Notifications
You must be signed in to change notification settings - Fork 1
/
environment.ino
106 lines (89 loc) · 2.82 KB
/
environment.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Indoor Air Quality monitor
//
// Written by Michele <o-zone@zerozone.it> Pinassi
// Released under GPLv3 - No any warranty
// ************************************
// calculateHumidex()
//
// calculate Humidex value:
// if ((humidex >= 21 )&&(humidex < 27)) ==> OK
// if ((humidex >= 27 )&&(humidex < 35)) ==> not so bad...
// if ((humidex >= 35 )&&(humidex < 40)) ==> bad
// if ((humidex >= 40 )&&(humidex < 46)) ==> health risks
// if ((humidex >= 46 )&&(humidex < 54)) ==> severe health risks
// if ((humidex >= 54 )) ==> heat stroke danger
// ************************************
float calculateHumidex(float temperature, float humidity) {
float e;
e = (6.112 * pow(10,(7.5 * temperature/(237.7 + temperature))) * humidity/100); //vapor pressure
float humidex = temperature + 0.55555555 * (e - 10.0); //humidex
return humidex;
}
// ************************************
// envCallback()
//
// ************************************
void envCallback() {
char temp[10];
unsigned int rzero;
DEBUG("envCallback()");
bme.takeForcedMeasurement();
temperature = bme.readTemperature();
dtostrf(temperature, 5, 2, temp);
env["temperature"] = temperature;
DEBUG("BME280 Temperature: "+String(temp)+"C");
humidity = bme.readHumidity();
dtostrf(humidity, 5, 2, temp);
env["humidity"] = humidity;
DEBUG("BME280 Humidity: "+String(temp)+"%");
pressure = bme.readPressure() / 100.0F;
dtostrf(pressure, 5, 2, temp);
env["pressure"] = pressure;
DEBUG("BME280 Pressure: "+String(temp)+"hPA");
altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
dtostrf(altitude, 5, 2, temp);
env["altitude"] = altitude;
DEBUG("BME280 Altitude: "+String(temp)+"mslm");
// Calculate humidex
humidex = calculateHumidex(temperature, humidity);
if ((humidex >= 21 )&&(humidex < 27)) {
// Good
setLed(0,100,100);
} // dark green
if ((humidex >= 27 )&&(humidex < 35)) {
// Quite good
setLed(50,100,0);
}
if ((humidex >= 35 )&&(humidex < 40)) {
// Not good
setLed(100,100,5);
}
if ((humidex >= 40 )&&(humidex < 46)) {
// Health risk
setLed(100,40,0);
}
if ((humidex >= 46 )&&(humidex < 54)) {
setLed(100,20,0);
}
if ((humidex >= 54 )) {
setLed(100,0,0);
}
dtostrf(humidex, 5, 2, temp);
env["humidex"] = humidex;
DEBUG("Humidex index: "+String(temp));
/* if MQ135 is warmed up... */
if(mq135ready) {
rzero = mq135.getCorrectedRZero(temperature,humidity);
DEBUG("[DEBUG] CO2 RZero: "+String(rzero));
vocs = mq135.getCorrectedPPM(temperature,humidity);
if(isnan(vocs)) {
Serial.println("[ERROR] Failed to read from MQ135 sensor!");
} else {
dtostrf(vocs, 5, 2, temp);
env["vocs"] = vocs;
DEBUG("[DEBUG] MQ135 VOCs PPM: "+String(temp));
}
}
env["timestamp"] = timeClient.getFormattedTime();
isDataReady=true;
}