Dust sensor first try
This commit is contained in:
parent
cf8130b2a1
commit
1f100c6e69
|
@ -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"
|
||||
}
|
||||
}
|
Binary file not shown.
|
@ -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
|
Binary file not shown.
100
src/main.cpp
100
src/main.cpp
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
Loading…
Reference in New Issue