

The PMS7003 is a digital particulate matter sensor designed to measure PM1.0, PM2.5, and PM10 concentrations in the air. It utilizes advanced laser scattering technology to detect and quantify airborne particles with high precision. The sensor outputs real-time data via a UART (serial) interface, making it easy to integrate into various systems. Its compact size, low power consumption, and reliable performance make it ideal for air quality monitoring applications.








Below are the key technical details of the PMS7003 sensor:
| Parameter | Value |
|---|---|
| Measurement Range | 0.3 µm to 10 µm (particle size) |
| PM Measurement Types | PM1.0, PM2.5, PM10 |
| Output Interface | UART (3.3V logic level) |
| Operating Voltage | 4.5V to 5.5V |
| Operating Current | ≤ 100 mA |
| Standby Current | ≤ 200 µA |
| Response Time | ≤ 1 second |
| Operating Temperature | -10°C to 60°C |
| Operating Humidity | 0% to 99% RH (non-condensing) |
| Dimensions | 50 mm × 38 mm × 21 mm |
| Weight | ~50 g |
The PMS7003 has a 7-pin connector for power, data communication, and control. Below is the pinout:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (4.5V to 5.5V) |
| 2 | GND | Ground |
| 3 | SET | Sleep mode control (Low: Sleep, High: Active) |
| 4 | RX | UART Receive (3.3V logic level) |
| 5 | TX | UART Transmit (3.3V logic level) |
| 6 | RESET | Reset pin (Low: Reset, High: Normal operation) |
| 7 | NC | Not connected |
Below is an example of how to interface the PMS7003 with an Arduino UNO to read PM2.5 data:
#include <SoftwareSerial.h>
// Define the RX and TX pins for SoftwareSerial
SoftwareSerial pmsSerial(10, 11); // RX = Pin 10, TX = Pin 11
// Buffer to store incoming data from the PMS7003
uint8_t pmsData[32];
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pmsSerial.begin(9600); // Initialize PMS7003 UART communication
Serial.println("PMS7003 Sensor Initialized");
}
void loop() {
if (pmsSerial.available() >= 32) { // Check if 32 bytes are available
for (int i = 0; i < 32; i++) {
pmsData[i] = pmsSerial.read(); // Read data into buffer
}
// Verify the data frame header
if (pmsData[0] == 0x42 && pmsData[1] == 0x4D) {
// Extract PM2.5 concentration (bytes 12 and 13)
uint16_t pm25 = (pmsData[12] << 8) | pmsData[13];
// Print PM2.5 concentration to Serial Monitor
Serial.print("PM2.5 Concentration: ");
Serial.print(pm25);
Serial.println(" µg/m³");
}
}
delay(1000); // Wait 1 second before reading again
}
No Data Output:
Incorrect Readings:
Frequent Resets:
Data Frame Errors:
Q: Can the PMS7003 detect gases like CO2 or VOCs?
A: No, the PMS7003 is designed to measure particulate matter (PM1.0, PM2.5, PM10) and cannot detect gases.
Q: How often should the sensor be calibrated?
A: The PMS7003 is factory-calibrated and does not require user calibration. However, periodic cleaning of the air inlet/outlet may help maintain accuracy.
Q: Can the sensor operate continuously?
A: Yes, the PMS7003 is designed for continuous operation. However, using the sleep mode when not in use can extend its lifespan.
Q: Is the sensor affected by humidity?
A: The PMS7003 can operate in up to 99% relative humidity, but condensation should be avoided to prevent damage.