From bee01589fd1349ce2de01c45e64724bc579f67ee Mon Sep 17 00:00:00 2001 From: igor Date: Sun, 9 Apr 2023 12:25:11 -0700 Subject: [PATCH] initial commit --- .idea/.gitignore | 8 +++ aqi.ino | 133 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 aqi.ino diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/aqi.ino b/aqi.ino new file mode 100644 index 0000000..6bfb501 --- /dev/null +++ b/aqi.ino @@ -0,0 +1,133 @@ +#include +#include +#include +#include + +SensirionI2CSen44 sen44; +// initialize the library with the numbers of the interface pins +LiquidCrystal lcd(12, 11, 5, 4, 3, 2); + +float heatIndex(float t, float rh) { + float hi = 0.0; + if (t <= 40.0) + hi = t; + else { + float hitemp = 61.0 + ((t - 68.0) * 1.2) + (rh * 0.094); + float hifinal = 0.5 * (t + hitemp); + hi = -42.379 + 2.04901523 * t + 10.14333127 * rh - 0.22475541 * t * rh - + 6.83783 * (pow(10, -3)) * (pow(t, 2)) - + 5.481717 * (pow(10, -2)) * (pow(rh, 2)) + + 1.22874 * (pow(10, -3)) * (pow(t, 2)) * rh + + 8.5282 * (pow(10, -4)) * t * (pow(rh, 2)) - + 1.99 * (pow(10, -6)) * (pow(t, 2)) * (pow(rh, 2)); + if (hifinal > 79.0) { + if ((rh <= 13) && (t >= 80.0) && (t <= 112.0)) + hi = hi - ((13.0 - rh) / 4.0) * sqrt((17.0 - fabs(t - 95.0)) / 17.0); + else if ((rh > 85.0) && (t >= 80.0) && (t <= 87.0)) + hi = hi + ((rh - 85.0) / 10.0) * ((87.0 - t) / 5.0); + } else + hi = hifinal; + } + return hi; +} + +float celsiusToFahrenheit(float degrees) { + return degrees * 1.8 + 32; +} + +void setup() { + Serial.begin(115200); + while (!Serial) { + delay(100); + } + + // set up the LCD's number of columns and rows: + lcd.begin(16, 2); + + Wire.begin(); + + uint16_t error; + char errorMessage[256]; + + sen44.begin(Wire); + + error = sen44.deviceReset(); + if (error) { + Serial.print("Error trying to execute getSerialNumber(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } + + // Start Measurement + error = sen44.startMeasurement(); + + if (error) { + Serial.print("Error trying to execute startMeasurement(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + } + + // Clean Fan + sen44.startFanCleaning(); +} + +void loop() { + uint16_t error; + char errorMessage[256]; + + delay(1000); + + // Read Measurement + uint16_t massConcentrationPm1p0; + uint16_t massConcentrationPm2p5; + uint16_t massConcentrationPm4p0; + uint16_t massConcentrationPm10p0; + float vocIndex; + float ambientHumidity; + float ambientTemperature; + float feelsLikeTemperature; + + error = sen44.readMeasuredMassConcentrationAndAmbientValues( + massConcentrationPm1p0, massConcentrationPm2p5, massConcentrationPm4p0, + massConcentrationPm10p0, vocIndex, ambientHumidity, ambientTemperature); + + if (error) { + Serial.print("Error trying to execute " + "readMeasuredMassConcentrationAndAmbientValues(): "); + errorToString(error, errorMessage, 256); + Serial.println(errorMessage); + return; + } + + ambientTemperature = celsiusToFahrenheit(ambientTemperature); + feelsLikeTemperature = heatIndex(ambientTemperature, ambientHumidity); + + lcd.clear(); + + lcd.setCursor(0, 0); + lcd.print("t:"); + lcd.print(round(ambientTemperature)); + + lcd.setCursor(8, 0); + lcd.print("h:"); + lcd.print(round(ambientHumidity)); + + lcd.setCursor(0, 1); + lcd.print("f:"); + lcd.print(round(feelsLikeTemperature)); + + lcd.setCursor(8, 1); + lcd.print("v:"); + lcd.print(vocIndex, 0); + + //Serial.println("------------"); + //Serial.print("Voc:"); + //Serial.println(vocIndex); + //Serial.print("Humidity:"); + //Serial.println(ambientHumidity); + //Serial.print("Temperature:"); + //Serial.println(ambientTemperature); + //Serial.print("Heat:"); + //Serial.println(feelsLikeTemperature); + //Serial.println("------------"); +}