Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.
Air quality monitoring has shifted from expensive lab equipment to affordable DIY projects, and the PMS5003 Arduino combination sits at the center of this transformation. I’ve integrated this laser-based particulate sensor into several environmental monitoring boards, and it consistently delivers reliable PM readings that correlate well with reference-grade instruments.
This guide covers everything from the operating principles to practical wiring and code, drawing from actual bench experience with the sensor.
What is the PMS5003 Sensor?
The PMS5003 is a digital laser-scattering particulate matter sensor manufactured by Plantower. It measures suspended particles in the air and reports concentration values for PM1.0, PM2.5, and PM10 size categories, plus raw particle counts across six size bins.
Inside the compact 50×38×21mm enclosure, a small fan draws ambient air past a laser beam. When particles pass through this beam, they scatter light in proportion to their size and quantity. A photodetector captures this scattered light, and an onboard microprocessor applies Mie scattering theory to calculate both particle counts and mass concentrations.
The sensor outputs data via UART at 9600 baud, making it straightforward to interface with Arduino boards and other microcontrollers. Each data frame contains 32 bytes with PM values, particle counts, and checksum verification.
PMS5003 Technical Specifications
Here are the key specifications you need for your design:
Parameter
Value
Operating Voltage
4.95V – 5.05V DC
Maximum Current
120 mA
Standby Current
≤ 200 µA
Interface
UART (9600 baud, 8N1)
PM Range
0 – 500 µg/m³
PM Resolution
1 µg/m³
Minimum Particle Size
0.3 µm
Response Time
< 10 seconds
Operating Temperature
-10°C to +60°C
Operating Humidity
0 – 99% RH
Dimensions
50 × 38 × 21 mm
Lifespan
≥ 3 years
The 5V requirement is critical. The internal fan needs proper voltage to maintain consistent airflow, and the sensor won’t operate reliably at 3.3V. However, the UART data pins output 3.3V logic levels, which means you’ll need level shifting when connecting to 5V Arduino boards like the UNO.
PMS5003 Pinout Configuration
The sensor uses an 8-pin Molex Picoblade connector with 1.25mm pitch:
Pin
Name
Function
1
VCC
5V Power Supply
2
GND
Ground
3
SET
Set pin (sleep control, active low)
4
RX
UART Receive (to sensor)
5
TX
UART Transmit (from sensor)
6
RESET
Reset pin (active low)
7
NC
Not Connected
8
NC
Not Connected
Most breakout boards only expose pins 1-5, which covers basic operation. The SET and RESET pins let you implement power-saving modes, putting the sensor to sleep when not actively measuring.
Understanding PM Measurements
The PMS5003 reports particulate matter in two formats that often confuse newcomers:
Standard Particle (CF=1)
These values assume a standard particle density and are intended for indoor environments or factory calibration reference. The sensor applies a correction factor of 1 to the raw measurements.
Atmospheric Environment
These readings account for varying atmospheric conditions and particle densities. For general air quality monitoring, the atmospheric environment values provide more representative results.
The sensor also reports raw particle counts per 0.1 liter of air across six size categories:
Size Category
Description
> 0.3 µm
Total particles larger than 0.3 micrometers
> 0.5 µm
Particles larger than 0.5 micrometers
> 1.0 µm
Particles larger than 1.0 micrometers
> 2.5 µm
Particles larger than 2.5 micrometers
> 5.0 µm
Particles larger than 5.0 micrometers
> 10 µm
Particles larger than 10 micrometers
These counts provide more granular data than the mass concentration values and can help identify specific pollution sources.
Wiring PMS5003 to Arduino
The connection requires attention to the voltage level mismatch. Here’s the basic wiring:
PMS5003 Pin
Arduino UNO Pin
Notes
VCC (Pin 1)
5V
Stable 5V required
GND (Pin 2)
GND
Common ground
TX (Pin 5)
D2 (SoftSerial RX)
Sensor transmit to Arduino receive
RX (Pin 4)
D3 (via level shifter)
Arduino transmit to sensor receive
The sensor’s TX pin outputs 3.3V logic, which Arduino UNO reads without issues since 3.3V exceeds the minimum HIGH threshold. However, sending 5V signals to the sensor’s RX pin risks damage over time. A simple voltage divider (10kΩ and 20kΩ resistors) or a dedicated level shifter protects the sensor input.
For read-only applications where you never send commands to the sensor, you can skip the RX connection entirely since the PMS5003 streams data automatically in active mode.
Arduino Code for PMS5003
Here’s a working sketch that reads and parses the sensor data:
The code waits 30 seconds after startup to let the sensor stabilize. This warm-up period ensures the fan reaches steady-state airflow and the internal calibration settles.
Operating Modes and Power Management
The PMS5003 supports two operating modes:
Active Mode (Default)
The sensor automatically streams data frames. When air quality is stable, it sends data every 2.3 seconds. If conditions change rapidly, the interval shortens to 200-800ms for faster response.
Passive Mode
In passive mode, the sensor only sends data when explicitly requested. This mode saves power and reduces wear on the fan and laser. Send the command sequence 0x42, 0x4D, 0xE1, 0x00, 0x00, 0x01, 0x70 to switch to passive mode.
Sleep Mode
Pulling the SET pin LOW puts the sensor into sleep mode, reducing current draw to under 200µA. The fan stops, and the laser turns off. Allow at least 30 seconds after waking for readings to stabilize again.
PMS5003 vs Other Plantower Sensors
Plantower offers several variants in the PMS series. Here’s how they compare:
Model
Dimensions (mm)
Current Draw
Key Difference
PMS5003
50 × 38 × 21
100 mA
Most common, good availability
PMS7003
48 × 37 × 12
100 mA
Thinner profile
PMSA003
38 × 35 × 12
100 mA
Smallest form factor
All three sensors use identical measurement technology and produce comparable results. The primary differences are physical dimensions and connector styles. For most Arduino projects, the PMS5003 offers the best balance of availability and ease of integration.
Common Issues and Solutions
No Data Output
Verify power supply voltage at the sensor terminals. The fan needs a solid 5V to spin properly. USB-powered Arduino boards sometimes sag under load. Try an external 5V supply rated for at least 500mA.
Erratic Readings
The sensor needs 30 seconds minimum after power-up before readings stabilize. For best accuracy, allow a full minute. Also check that nothing obstructs the air inlet or outlet ports.
Checksum Errors
These usually indicate wiring problems or electrical noise. Keep the UART lines short and away from motor drivers or switching power supplies. Adding 100nF decoupling capacitors across VCC and GND near the sensor helps.
Readings Always Zero
Check the TX/RX crossover. The sensor’s TX connects to Arduino’s RX (receive) pin. A straight-through connection won’t work.
Sensor Placement Guidelines
Position matters significantly for accurate PM measurements:
Install the sensor at least 20cm above ground level to avoid settled dust getting pulled in by the fan. Keep it away from direct airflow from HVAC vents or open windows that could skew readings. The sensor should be oriented with air ports unobstructed.
For outdoor deployment, protect the sensor from rain and direct sunlight. High humidity above 95% or water droplets can damage the optics and give false high readings. Consider a weather shield that allows airflow while blocking precipitation.
Yes, but only if your Arduino has a robust power supply. The sensor draws up to 120mA, which combined with other components can exceed the USB current limit. For reliable operation, use an external 5V regulator or wall adapter rated for at least 1A.
How accurate is the PMS5003 compared to professional equipment?
Field studies show correlation coefficients of 0.6 to 0.9 compared to reference-grade instruments, depending on particle composition and humidity. The sensor performs best for typical urban particulate matter. It tends to over-report in high humidity conditions when water droplets get counted as particles.
What’s the expected lifespan of the sensor?
Plantower rates the sensor for at least 3 years under normal indoor conditions. The laser diode and fan are the limiting components. Continuous outdoor operation in dusty environments will shorten this. Using sleep mode when not actively measuring extends operational life significantly.
Do I need a level shifter for Arduino UNO?
Strictly speaking, yes for the RX line going into the sensor. The sensor’s data input expects 3.3V logic levels. Many hobbyists run without one for quick prototypes, but it risks long-term damage. For production designs, always include proper level translation.
How do I interpret PM2.5 readings for health purposes?
Generally, PM2.5 below 12 µg/m³ is considered good air quality. Values between 12-35 µg/m³ are moderate. Above 55 µg/m³ becomes unhealthy for sensitive groups, and readings over 150 µg/m³ are unhealthy for everyone. These thresholds follow EPA Air Quality Index guidelines.
Building Your Air Quality Monitor
The PMS5003 Arduino pairing opens up practical air quality monitoring for home automation, citizen science projects, and environmental research. The sensor delivers genuine laser-based measurements at a price point that makes dense monitoring networks feasible.
Start with the basic wiring and code examples above, verify you’re getting reasonable readings, then expand into data logging, wireless transmission, or integration with home automation systems. The consistent UART protocol and extensive library support make the PMS5003 one of the most accessible professional-grade PM sensors available for maker projects.
Meta Description Suggestion:
“Learn how to interface the PMS5003 particulate matter sensor with Arduino. Complete guide with pinout, wiring diagram, code examples, and troubleshooting tips for PM2.5 air quality monitoring.”
Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.