DustSensor: Difference between revisions

From RevSpace
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 30: Line 30:
=== Protocol outgoing data ===
=== Protocol outgoing data ===
The protocol for measurement data from the module is that data is sent in frames.
The protocol for measurement data from the module is that data is sent in frames.
Each frame starts with specific begin marker bytes, then a length byte, then the actual data, a checksum and finally an end marker byte.
Each frame starts with specific begin marker bytes, then a length byte, then the actual data, and finally a checksum.
I think it is a good match to use a simple finite state machine to parse the stream and get synchronized to the frames.
I think it is a good match to use a simple finite state machine to parse the stream and get synchronized to the frames.


Line 41: Line 41:
|-
|-
|0x42 0x4D
|0x42 0x4D
|Begin
|Begin marker
|Begin marker
|ASCII for characters 'B' and 'M'
|-
|-
|0x1C
|0x1C

Revision as of 17:23, 3 December 2017

Project Dust Sensor
Pms7003.jpg
Experiments with a dust sensor
Status Initializing
Contact bertrik
Last Update 2017-12-03

Introduction

I ordered a dust sensor module to perform measurements of airborne dust. In particular, I ordered this one, the Plantronics PMS 7003. It's being advertised as an advanced generation of dust sensor (7th generation), while still reasonably priced. It uses lasers to perform the measurement and I think it contains a small fan to move the air around.

Hardware

Data sheets can be found:

The module takes 5V to run and communicates using 3.3V levels.

It attempts to make an estimate of the number of particles per size category. It also gives an estimate of the total mass of the particles.

I plan to connect this thing up using an ESP8266.

Software

This module outputs its data as a 32-byte serial data stream at 9600 bps.

Protocol outgoing data

The protocol for measurement data from the module is that data is sent in frames. Each frame starts with specific begin marker bytes, then a length byte, then the actual data, and finally a checksum. I think it is a good match to use a simple finite state machine to parse the stream and get synchronized to the frames.

Protocol
Value Meaning Remark
0x42 0x4D Begin marker ASCII for characters 'B' and 'M'
0x1C Length Length of following data
XX YY PM1.0 concentration (ug/m3) CF=1, standard particles
XX YY PM2.5 concentration (ug/m3) CF=1, standard particles
XX YY PM10 concentration (ug/m3) CF=1, standard particles
XX YY PM1.0 concentration (ug/m3) in atmospheric environment
XX YY PM2.5 concentration (ug/m3) in atmospheric environment
XX YY PM10 concentration (ug/m3) in atmospheric environment
XX YY Number of particles >0.3 um in 0.1 liter air
XX YY Number of particles >0.5 um in 0.1 liter air
XX YY Number of particles >1.0 um in 0.1 liter air
XX YY Number of particles >2.5 um in 0.1 liter air
XX YY Number of particles >5.0 um in 0.1 liter air
XX YY Number of particles >10 um in 0.1 liter air
VV Version number ?
EE Error code ?
C1 C2 Check code basically the sum of all bytes up to the check code, "eight"

Data is encoded in big-endian format.

Protocol incoming data

This protocol allows commands to be sent to the module, also in frames. Each command frame consists of 7 bytes. It starts with two marker bytes, then a command byte, two data bytes and finally two checksum bytes.

References