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:

**Common Arduino Sensors for Detecting PPM**

**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.