Dust sensor first try

This commit is contained in:
Carsten Schmiemann 2019-02-14 23:14:37 +01:00
parent cf8130b2a1
commit 1f100c6e69
7 changed files with 117 additions and 64 deletions

BIN
.DS_Store vendored

Binary file not shown.

6
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"terminal.integrated.env.osx": {
"PATH": "/Users/carstenschmiemann/.platformio/penv/bin:/Users/carstenschmiemann/.platformio/penv:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin",
"PLATFORMIO_CALLER": "vscode"
}
}

BIN
lib/.DS_Store vendored

Binary file not shown.

View File

@ -12,5 +12,5 @@
platform = atmelavr
board = pro16MHzatmega328
framework = arduino
lib_deps = PMS Library, TaskScheduler
lib_deps = PMS Library, TaskScheduler, MH-Z19
monitor_speed = 57600

BIN
src/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -1,73 +1,47 @@
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <SimpleModbusSlave.h>
#include <TaskScheduler.h>
#include <PMS.h>
#include "MHZ19.h" // include main library
#include <SoftwareSerial.h> // Remove if using HardwareSerial
SoftwareSerial pms7003(11, 12); // RX, TX
SoftwareSerial mhz19(9, 10); // RX, TX
PMS pms(pms7003);
PMS::DATA data;
Scheduler runner;
#define RX_PIN 9 // Rx pin which the MHZ19 Tx pin is attached to
#define TX_PIN 10 // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600 // Native to the sensor (do not change)
void sensor_pms();
Task t1(5000, TASK_FOREVER, &sensor_pms);
MHZ19 myMHZ19; // Constructor for MH-Z19 class
SoftwareSerial mySerial(RX_PIN, TX_PIN); // Constructor for Stream class *change for HardwareSerial, i.e. ESP32 ***
//////////////// MODBUS Registers ///////////////////
enum
{
R00_Dust_10,
R01_Dust_25,
R02_Dust_100,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
int PM10;
int PM25;
int PM100;
//////////////////////////////////////////////////////
//HardwareSerial mySerial(1); // ESP32 Example
void setup() {
//Serial.begin(57600);
//Serial.print("Starting up...");
mhz19.begin(9600);
pms7003.begin(9600);
pinMode(8, OUTPUT); //MAX485 Tranmit Enable
modbus_configure(9600, 6, 8, TOTAL_REGS_SIZE, 0); //Modbus via MAX485
runner.init();
//runner.addTask(t1);
//t1.enable();
unsigned long getDataTimer = 0; // Variable to store timer interval
void setup()
{
Serial.begin(57600); // For ESP32 baudarte is 115200 etc.
mySerial.begin(BAUDRATE); // Begin Stream with MHZ19 baudrate
//mySerial.begin(BAUDRATE, SERIAL_8N1, RX_PIN, TX_PIN); // ESP32 Example
myMHZ19.begin(mySerial); // *Important, Pass your Stream reference
myMHZ19.autoCalibration(); // Turn ABC ON. Disable with autoCalibration(false) (also default)
}
void loop() {
runner.execute();
holdingRegs[R00_Dust_10] = PM10;
holdingRegs[R01_Dust_25] = PM25;
holdingRegs[R02_Dust_100] = PM100;
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
void loop()
{
if (millis() - getDataTimer >= 2000) // Check if interval has elapsed (non-blocking delay() equivilant)
{
int CO2; // Buffer for CO2
CO2 = myMHZ19.getCO2(); // Request CO2 (as ppm)
if (pms.read(data)) {
/*Serial.print("PM 1.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_10_0);
Serial.println();
*/
PM10 = (int)data.PM_AE_UG_1_0;
PM25 = (int)data.PM_AE_UG_2_5;
PM100 = (int)data.PM_AE_UG_10_0;
}
}
Serial.print("CO2 (ppm): ");
Serial.println(CO2);
void sensor_pms() {
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(PM10);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(PM25);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(PM100);
Serial.println();
float Temp; // Buffer for temperature
Temp = myMHZ19.getTemperature(); // Request Temperature (as Celsius)
Serial.print("Temperature (C): ");
Serial.println(Temp);
getDataTimer = millis(); // Update interval
}
}

73
test/main2.cpp Normal file
View File

@ -0,0 +1,73 @@
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <SimpleModbusSlave.h>
#include <TaskScheduler.h>
#include <PMS.h>
SoftwareSerial pms7003(11, 12); // RX, TX
SoftwareSerial mhz19(9, 10); // RX, TX
PMS pms(pms7003);
PMS::DATA data;
Scheduler runner;
void sensor_pms();
Task t1(5000, TASK_FOREVER, &sensor_pms);
//////////////// MODBUS Registers ///////////////////
enum
{
R00_Dust_10,
R01_Dust_25,
R02_Dust_100,
TOTAL_ERRORS,
TOTAL_REGS_SIZE
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
int PM10;
int PM25;
int PM100;
//////////////////////////////////////////////////////
void setup() {
//Serial.begin(57600);
//Serial.print("Starting up...");
mhz19.begin(9600);
pms7003.begin(9600);
pinMode(8, OUTPUT); //MAX485 Tranmit Enable
modbus_configure(9600, 6, 8, TOTAL_REGS_SIZE, 0); //Modbus via MAX485
runner.init();
//runner.addTask(t1);
//t1.enable();
}
void loop() {
runner.execute();
holdingRegs[R00_Dust_10] = PM10;
holdingRegs[R01_Dust_25] = PM25;
holdingRegs[R02_Dust_100] = PM100;
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
if (pms.read(data)) {
/*Serial.print("PM 1.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(data.PM_AE_UG_2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(data.PM_AE_UG_10_0);
Serial.println();
*/
PM10 = (int)data.PM_AE_UG_1_0;
PM25 = (int)data.PM_AE_UG_2_5;
PM100 = (int)data.PM_AE_UG_10_0;
}
}
void sensor_pms() {
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(PM10);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(PM25);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(PM100);
Serial.println();
}