summaryrefslogtreecommitdiff
path: root/learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP
diff options
context:
space:
mode:
Diffstat (limited to 'learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP')
-rw-r--r--learning_examples/DSM501A-example-esp32-ehh-unreliable-CRAP/DSM501A-example-esp32-ehh-unreliable-CRAP.ino64
1 files changed, 64 insertions, 0 deletions
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<string.h>
+#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();
+ }
+}