Arduino-compatible sensors that can detect PPM (parts per million) values typically measure gases or chemical concentrations in air or liquid. Here's a list of commonly used PPM-detecting [sensors](https://www.ampheo.com/c/sensors) you can interface with [Arduino](https://www.ampheo.com/c/development-board-arduino), along with their applications: ![Measuring-CO2-Concentration-using-Arduino-and-MQ-135-Sensor](https://hackmd.io/_uploads/rJwb4oLExx.jpg) **Common Arduino Sensors for Detecting PPM** ![企业微信截图_20250623173509](https://hackmd.io/_uploads/ry4Jlj84xe.png) **Notable Digital (Calibrated) PPM Sensors** These are more accurate than analog MQ sensors and often output calibrated PPM readings directly: **1. MH-Z19B / MH-Z14A (CO₂ sensor)** * Measures 400–5000 PPM CO₂ * UART or PWM output * Ready-to-use and accurate for indoor air quality **2. [SCD30](https://www.ampheo.com/product/scd30-26836534) / [SCD41](https://www.ampheo.com/search/SCD41) by Sensirion** * Advanced CO₂, temperature, and [humidity sensor](https://www.onzuu.com/category/board-mount-humidity-sensors) * I2C interface, 0–40,000 PPM range * Accurate and factory-calibrated **Considerations When Using PPM Sensors with Arduino** * Analog [sensors](https://www.ampheoelec.de/c/sensors) (MQ series) need calibration to get accurate PPM values. * PPM readings are often non-linear — use datasheet curves or calibration gases. * For precision, use digital sensors (MH-Z19, SCD30) with direct PPM output. * Warm-up time for gas sensors: usually 30–60 seconds for stable readings. * Add temperature/humidity compensation where needed. **Example: MQ-135 with Arduino (Air Quality)** ``` cpp int sensorPin = A0; void setup() { Serial.begin(9600); } void loop() { int analogValue = analogRead(sensorPin); float voltage = analogValue * (5.0 / 1023.0); Serial.print("Sensor voltage: "); Serial.println(voltage); delay(1000); } ``` To convert to PPM, you must apply a calibration formula or use a lookup table based on the gas and MQ datasheet.