From a26b7c2cff9ca416917872a976fbcce6202fb938 Mon Sep 17 00:00:00 2001 From: Alphara <42233094+xAlpharax@users.noreply.github.com> Date: Sat, 4 Nov 2023 21:34:22 +0000 Subject: Unified code and workflow + logic. All that s needed now is Wifi integration with the outputs. DSM is weird... will look again later. --- LINKS.md | 2 + README.md | 2 + TODO.md | 10 +- actual_board_code/actual_board_code.ino | 115 +++++++++++++++++++++ .../DHT_Tester_esp32/DHT_Tester_esp32.ino | 74 +++++++++++++ .../DHT_Tester_esp32/DHTtester_esp32.ino | 74 ------------- .../DSM501A-example-ehh.ino | 65 ------------ .../DSM501A-example-esp32-ehh-unreliable-CRAP.ino | 64 ++++++++++++ .../MQ135_workaround_analog_esp32.ino | 10 ++ ...parts_per_mil_mq135_workaround_analog_esp32.ino | 10 -- 10 files changed, 273 insertions(+), 153 deletions(-) create mode 100644 actual_board_code/actual_board_code.ino create mode 100644 learning_examples/DHT_Tester_esp32/DHT_Tester_esp32.ino delete mode 100644 learning_examples/DHT_Tester_esp32/DHTtester_esp32.ino delete mode 100644 learning_examples/DSM501A-example-ehh-unreliable/DSM501A-example-ehh.ino create mode 100644 learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP/DSM501A-example-esp32-ehh-unreliable-CRAP.ino create mode 100644 learning_examples/MQ135_workaround_analog_esp32/MQ135_workaround_analog_esp32.ino delete mode 100644 learning_examples/MQ135_workaround_analog_esp32/parts_per_mil_mq135_workaround_analog_esp32.ino diff --git a/LINKS.md b/LINKS.md index 25a2f48..b7b0d40 100644 --- a/LINKS.md +++ b/LINKS.md @@ -15,6 +15,8 @@ DATABASE CONTENDERRRRRRRRRRRRRRRr: https://cassandra.apache.org/_/quickstart.html -- i like this containarization https://graphql.org/ - graphs dbs +FORGET THAT ; DO FIREBASE --> Flutter for android, ios, web + SOME OTHER THINGS I VE SEEN: https://github.com/expressjs/express diff --git a/README.md b/README.md index 136fe9d..499407c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # meteo-board Code and Notes all throughout the competition https://code-envision.ro + +## CHECK THE OTHER .MD FILES AND THEN WORK ON THIS LANDING MD \ No newline at end of file diff --git a/TODO.md b/TODO.md index 8d0291f..aeb0e86 100644 --- a/TODO.md +++ b/TODO.md @@ -1,9 +1,11 @@ -integrate dsm sensor (doing) +integrate dht sensors (done, first thing done) +integrate mq sensor (done) +integrate dsm sensor (done) :DDDD make an api interface (esp32 can use curl's and stuff) -store the data on a mock server that can be accessed with requests (rest, crud) +store the data on a mock server that can be accessed with requests (rest, crud) --> alphara.art ORRRR firebase:) -somehow integrate that continuously with time series data forcasting and other AI/ML predictions +somehow integrate that continuously with time series data forcasting and other AI/ML predictions -- need python for making AND condensing an ML model -incorporate normal graphs and predicted future behaviour of those datapoints to show the urgency of measures that should be taken \ No newline at end of file +incorporate pretty graphs and predict future behaviour/forcasting of those data-points to show the urgency for measure-taking \ No newline at end of file diff --git a/actual_board_code/actual_board_code.ino b/actual_board_code/actual_board_code.ino new file mode 100644 index 0000000..a080a9b --- /dev/null +++ b/actual_board_code/actual_board_code.ino @@ -0,0 +1,115 @@ + +// REQUIRES the following Arduino libraries: +// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library +// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor + +#include "DHT.h" + +// CONFIGURATION + +// DHT PINS + +#define DHTPIN 4 // Digital pin connected to the DHT sensor +// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 + +// Uncomment whatever type you're using +//#define DHTTYPE DHT11 // DHT 11 +#define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 +//#define DHTTYPE DHT21 // DHT 21 (AM2301) + +// DSM PINS + +#define DSM501 18 // Just leave it as is + +// END PIN CONFIGURATION SECTION + + +// SOME VARS + +unsigned long duration; +unsigned long starttime; +unsigned long endtime; +unsigned long sampletime_ms = 1000; +unsigned long lowpulseoccupancy = 0; +float ratio = 0; +float concentration = 0; +uint32_t delayMS = 1000; // in loop delay() explicited + + +// Initialize DHT Sensor. The current DHT reading algorithm adjusts itself to work on faster procs. (rtfm --> docs) +DHT dht(DHTPIN, DHTTYPE); + + +void setup() { // Setup code that gets run regardless + Serial.begin(9600); + + Serial.println(F("----- DHT + MQ + DSM Interface -----")); + + dht.begin(); // Begin DHT System at startup + + pinMode(DSM501,INPUT); // Initialize DSM501A Sensor + + starttime = millis(); +} + +void loop() { // Main code + // Wait a few seconds between measurements. + delay(delayMS); + + // vvv DHT MEASUREMENTS SECTION vvv // + + // Reading temperature or humidity takes about 250 milliseconds! + // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) + float h = dht.readHumidity(); + // Read temperature as Celsius (the default) + float t = dht.readTemperature(); + // Read temperature as Fahrenheit (isFahrenheit = true) + float f = dht.readTemperature(true); + + // Check if any reads failed and exit early (to try again). + if (isnan(h) || isnan(t) || isnan(f)) { + Serial.println(F("Failed to read from DHT sensor!")); + return; + } + + // Compute heat index in Fahrenheit (the default) + float hif = dht.computeHeatIndex(f, h); + // Compute heat index in Celsius (isFahreheit = false) + float hic = dht.computeHeatIndex(t, h, false); + + Serial.print(F("Humidity: ")); + Serial.print(h); + Serial.print(F("% Temperature: ")); + Serial.print(t); + Serial.print(F("°C ")); + Serial.print(f); + Serial.print(F("°F Heat index: ")); + Serial.print(hic); + Serial.print(F("°C ")); + Serial.print(hif); + Serial.println(F("°F")); + + // vvv MQ135 MEASUREMENTS SECTION vvv // + + Serial.println(analogRead(15)); // MQ135 Sensor - ppm metrics (raw) + Serial.println("ppm") + + // vvv DSM501A MEASUREMENTS SECTION vvv // + + duration = pulseIn(DSM501, LOW); + lowpulseoccupancy += duration; + endtime = millis(); + + ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0); + concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // idk what s going on in here anymore.. it used to work, it doesn t now.. + // concentration = 0.001915 * pow(low_ratio, 2) + 0.09522 * low_ratio - 0.04884; + Serial.print("lowpulseoccupancy: "); + Serial.print(lowpulseoccupancy); + Serial.print(" ratio: "); + Serial.print(ratio); + Serial.print(" DSM501A: "); + Serial.println(concentration); + + lowpulseoccupancy = 0; + starttime = millis(); +} diff --git a/learning_examples/DHT_Tester_esp32/DHT_Tester_esp32.ino b/learning_examples/DHT_Tester_esp32/DHT_Tester_esp32.ino new file mode 100644 index 0000000..f12bfb5 --- /dev/null +++ b/learning_examples/DHT_Tester_esp32/DHT_Tester_esp32.ino @@ -0,0 +1,74 @@ +// Example testing sketch for various DHT humidity/temperature sensors +// Written by ladyada, public domain + +// REQUIRES the following Arduino libraries: +// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library +// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor + +#include "DHT.h" + +#define DHTPIN 4 // Digital pin connected to the DHT sensor +// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- +// Pin 15 can work but DHT must be disconnected during program upload. + +// Uncomment whatever type you're using! +//#define DHTTYPE DHT11 // DHT 11 +#define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 +//#define DHTTYPE DHT21 // DHT 21 (AM2301) + +// Connect pin 1 (on the left) of the sensor to +5V +// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 +// to 3.3V instead of 5V! +// Connect pin 2 of the sensor to whatever your DHTPIN is +// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins) +// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins) +// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor + +// Initialize DHT sensor. +// Note that older versions of this library took an optional third parameter to +// tweak the timings for faster processors. This parameter is no longer needed +// as the current DHT reading algorithm adjusts itself to work on faster procs. +DHT dht(DHTPIN, DHTTYPE); + +void setup() { + Serial.begin(9600); + Serial.println(F("DHTxx test!")); + + dht.begin(); +} + +void loop() { + // Wait a few seconds between measurements. + delay(2000); + + // Reading temperature or humidity takes about 250 milliseconds! + // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) + float h = dht.readHumidity(); + // Read temperature as Celsius (the default) + float t = dht.readTemperature(); + // Read temperature as Fahrenheit (isFahrenheit = true) + float f = dht.readTemperature(true); + + // Check if any reads failed and exit early (to try again). + if (isnan(h) || isnan(t) || isnan(f)) { + Serial.println(F("Failed to read from DHT sensor!")); + return; + } + + // Compute heat index in Fahrenheit (the default) + float hif = dht.computeHeatIndex(f, h); + // Compute heat index in Celsius (isFahreheit = false) + float hic = dht.computeHeatIndex(t, h, false); + + Serial.print(F("Humidity: ")); + Serial.print(h); + Serial.print(F("% Temperature: ")); + Serial.print(t); + Serial.print(F("°C ")); + Serial.print(f); + Serial.print(F("°F Heat index: ")); + Serial.print(hic); + Serial.print(F("°C ")); + Serial.print(hif); + Serial.println(F("°F")); +} diff --git a/learning_examples/DHT_Tester_esp32/DHTtester_esp32.ino b/learning_examples/DHT_Tester_esp32/DHTtester_esp32.ino deleted file mode 100644 index f12bfb5..0000000 --- a/learning_examples/DHT_Tester_esp32/DHTtester_esp32.ino +++ /dev/null @@ -1,74 +0,0 @@ -// Example testing sketch for various DHT humidity/temperature sensors -// Written by ladyada, public domain - -// REQUIRES the following Arduino libraries: -// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library -// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor - -#include "DHT.h" - -#define DHTPIN 4 // Digital pin connected to the DHT sensor -// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 -- -// Pin 15 can work but DHT must be disconnected during program upload. - -// Uncomment whatever type you're using! -//#define DHTTYPE DHT11 // DHT 11 -#define DHTTYPE DHT11 // DHT 22 (AM2302), AM2321 -//#define DHTTYPE DHT21 // DHT 21 (AM2301) - -// Connect pin 1 (on the left) of the sensor to +5V -// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 -// to 3.3V instead of 5V! -// Connect pin 2 of the sensor to whatever your DHTPIN is -// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins) -// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins) -// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor - -// Initialize DHT sensor. -// Note that older versions of this library took an optional third parameter to -// tweak the timings for faster processors. This parameter is no longer needed -// as the current DHT reading algorithm adjusts itself to work on faster procs. -DHT dht(DHTPIN, DHTTYPE); - -void setup() { - Serial.begin(9600); - Serial.println(F("DHTxx test!")); - - dht.begin(); -} - -void loop() { - // Wait a few seconds between measurements. - delay(2000); - - // Reading temperature or humidity takes about 250 milliseconds! - // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) - float h = dht.readHumidity(); - // Read temperature as Celsius (the default) - float t = dht.readTemperature(); - // Read temperature as Fahrenheit (isFahrenheit = true) - float f = dht.readTemperature(true); - - // Check if any reads failed and exit early (to try again). - if (isnan(h) || isnan(t) || isnan(f)) { - Serial.println(F("Failed to read from DHT sensor!")); - return; - } - - // Compute heat index in Fahrenheit (the default) - float hif = dht.computeHeatIndex(f, h); - // Compute heat index in Celsius (isFahreheit = false) - float hic = dht.computeHeatIndex(t, h, false); - - Serial.print(F("Humidity: ")); - Serial.print(h); - Serial.print(F("% Temperature: ")); - Serial.print(t); - Serial.print(F("°C ")); - Serial.print(f); - Serial.print(F("°F Heat index: ")); - Serial.print(hic); - Serial.print(F("°C ")); - Serial.print(hif); - Serial.println(F("°F")); -} diff --git a/learning_examples/DSM501A-example-ehh-unreliable/DSM501A-example-ehh.ino b/learning_examples/DSM501A-example-ehh-unreliable/DSM501A-example-ehh.ino deleted file mode 100644 index 7852763..0000000 --- a/learning_examples/DSM501A-example-ehh-unreliable/DSM501A-example-ehh.ino +++ /dev/null @@ -1,65 +0,0 @@ -#include -#define PM1PIN 18 //DSM501A input D6 on ESP8266 -#define PM25PIN 14 // ???? what -byte buff[2]; -unsigned long durationPM1; -unsigned long durationPM25; -unsigned long starttime; -unsigned long endtime; -unsigned long sampletime_ms = 30000; -unsigned long lowpulseoccupancyPM1 = 0; -unsigned long lowpulseoccupancyPM25 = 0; - - -int i=0; -void setup() -{ - Serial.begin(9600); - Serial.println("Starting please wait 30s"); - pinMode(PM1PIN,INPUT); - pinMode(PM25PIN,INPUT); - starttime = millis(); -} - -float calculateConcentration(long lowpulseInMicroSeconds, long durationinSeconds){ - - float ratio = (lowpulseInMicroSeconds/1000000.0)/30.0*100.0; //Calculate the ratio - float concentration = 0.001915 * pow(ratio,2) + 0.09522 * ratio - 0.04884;//Calculate the mg/m3 - Serial.print("lowpulseoccupancy:"); - Serial.print(lowpulseInMicroSeconds); - Serial.print(" ratio:"); - Serial.print(ratio); - Serial.print(" Concentration:"); - Serial.println(concentration); - return concentration; -} - -void loop() -{ - durationPM1 = pulseIn(PM1PIN, LOW); - durationPM25 = pulseIn(PM25PIN, LOW); - - lowpulseoccupancyPM1 += durationPM1; - lowpulseoccupancyPM25 += durationPM25; - - endtime = millis(); - if ((endtime-starttime) > sampletime_ms) //Only after 30s has passed we calcualte the ratio - { - /* - ratio1 = (lowpulseoccupancy/1000000.0)/30.0*100.0; //Calculate the ratio - Serial.print("ratio1: "); - Serial.println(ratio1); - - concentration = 0.001915 * pow(ratio1,2) + 0.09522 * ratio1 - 0.04884;//Calculate the mg/m3 - */ - float conPM1 = calculateConcentration(lowpulseoccupancyPM1,30); - float conPM25 = calculateConcentration(lowpulseoccupancyPM25,30); - Serial.print("PM1 "); - Serial.print(conPM1); - Serial.print(" PM25 "); - Serial.println(conPM25); - lowpulseoccupancyPM1 = 0; - lowpulseoccupancyPM25 = 0; - starttime = millis(); - } -} diff --git a/learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP/DSM501A-example-esp32-ehh-unreliable-CRAP.ino b/learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP/DSM501A-example-esp32-ehh-unreliable-CRAP.ino new file mode 100644 index 0000000..b29a512 --- /dev/null +++ b/learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP/DSM501A-example-esp32-ehh-unreliable-CRAP.ino @@ -0,0 +1,64 @@ +#include +#define PM1PIN 18 //DSM501A input D6 on ESP8266 +#define PM25PIN 14 // ???? what +byte buff[2]; +unsigned long durationPM1; +unsigned long durationPM25; +unsigned long starttime; +unsigned long endtime; +unsigned long sampletime_ms = 30000; +unsigned long lowpulseoccupancyPM1 = 0; +unsigned long lowpulseoccupancyPM25 = 0; + + +int i=0; +void setup() +{ + Serial.begin(9600); + Serial.println("Starting please wait 30s"); + pinMode(PM1PIN,INPUT); + pinMode(PM25PIN,INPUT); + starttime = millis(); +} + +float calculateConcentration(long lowpulseInMicroSeconds, long durationinSeconds){ + + float ratio = (lowpulseInMicroSeconds/1000000.0)/30.0*100.0; //Calculate the ratio + float concentration = 0.001915 * pow(ratio,2) + 0.09522 * ratio - 0.04884;//Calculate the mg/m3 + Serial.print("lowpulseoccupancy:"); + Serial.print(lowpulseInMicroSeconds); + Serial.print(" ratio:"); + Serial.print(ratio); + Serial.print(" Concentration:"); + Serial.println(concentration); + return concentration; +} + +void loop() +{ + durationPM1 = pulseIn(PM1PIN, LOW); + durationPM25 = pulseIn(PM25PIN, LOW); + + lowpulseoccupancyPM1 += durationPM1; + lowpulseoccupancyPM25 += durationPM25; + + endtime = millis(); + if ((endtime-starttime) > sampletime_ms) //Only after 30s has passed we calcualte the ratio + { + // ratio1 = (lowpulseoccupancy/1000000.0)/30.0*100.0; //Calculate the ratio + // Serial.print("ratio1: "); + // Serial.println(ratio1); + + // concentration = 0.001915 * pow(ratio1,2) + 0.09522 * ratio1 - 0.04884;//Calculate the mg/m3 + + float conPM1 = calculateConcentration(lowpulseoccupancyPM1,30); + float conPM25 = calculateConcentration(lowpulseoccupancyPM25,30); + Serial.print("PM1 "); + Serial.print(conPM1); + Serial.print(" PM25 "); + Serial.println(conPM25); // this is pretty negative:) + lowpulseoccupancyPM1 = 0; + lowpulseoccupancyPM25 = 0; + starttime = millis(); + } +} diff --git a/learning_examples/MQ135_workaround_analog_esp32/MQ135_workaround_analog_esp32.ino b/learning_examples/MQ135_workaround_analog_esp32/MQ135_workaround_analog_esp32.ino new file mode 100644 index 0000000..dc2ed08 --- /dev/null +++ b/learning_examples/MQ135_workaround_analog_esp32/MQ135_workaround_analog_esp32.ino @@ -0,0 +1,10 @@ +void setup() { + Serial.begin(9600); + // put your setup code here, to run once: + Serial.println("begin"); +} + +void loop() { + Serial.println(analogRead(15)); // ppm metrics (raw (i think)) + // put your main code here, to run repeatedly: +} diff --git a/learning_examples/MQ135_workaround_analog_esp32/parts_per_mil_mq135_workaround_analog_esp32.ino b/learning_examples/MQ135_workaround_analog_esp32/parts_per_mil_mq135_workaround_analog_esp32.ino deleted file mode 100644 index dc2ed08..0000000 --- a/learning_examples/MQ135_workaround_analog_esp32/parts_per_mil_mq135_workaround_analog_esp32.ino +++ /dev/null @@ -1,10 +0,0 @@ -void setup() { - Serial.begin(9600); - // put your setup code here, to run once: - Serial.println("begin"); -} - -void loop() { - Serial.println(analogRead(15)); // ppm metrics (raw (i think)) - // put your main code here, to run repeatedly: -} -- cgit v1.2.3