

The SCD30, manufactured by Sensirion, is a high-precision digital sensor designed for measuring carbon dioxide (CO2), temperature, and humidity. It employs non-dispersive infrared (NDIR) technology for CO2 detection, ensuring accurate and reliable measurements. The SCD30 is widely used in applications such as indoor air quality monitoring, HVAC systems, greenhouses, and smart home devices. Its compact design and integrated temperature and humidity sensors make it a versatile solution for environmental sensing.








The SCD30 offers robust performance and precise measurements. Below are its key technical details:
| Parameter | Value |
|---|---|
| CO2 Measurement Range | 400 ppm to 10,000 ppm |
| CO2 Accuracy | ±(30 ppm + 3% of reading) |
| Temperature Range | -40°C to +70°C |
| Temperature Accuracy | ±0.3°C |
| Humidity Range | 0% RH to 100% RH |
| Humidity Accuracy | ±3% RH |
| Supply Voltage | 3.3V to 5.5V |
| Power Consumption | 19 mA (average) |
| Communication Interface | I2C and Modbus (via UART) |
| Dimensions | 35 mm x 23 mm x 7 mm |
The SCD30 has a 6-pin interface for power and communication. Below is the pinout description:
| Pin Number | Name | Description |
|---|---|---|
| 1 | VDD | Power supply (3.3V to 5.5V) |
| 2 | GND | Ground |
| 3 | SDA | I2C data line |
| 4 | SCL | I2C clock line |
| 5 | RX (TXD) | UART receive line (Modbus communication) |
| 6 | TX (RXD) | UART transmit line (Modbus communication) |
The SCD30 can be easily integrated into a circuit for CO2, temperature, and humidity sensing. Below are the steps and best practices for using the sensor:
VDD pin to a 3.3V or 5V power source and the GND pin to ground.SDA pin to the I2C data line of your microcontroller.SCL pin to the I2C clock line of your microcontroller.SDA and SCL lines if not already present.RX pin to the TX pin of your microcontroller.TX pin to the RX pin of your microcontroller.Below is an example of how to use the SCD30 with an Arduino UNO via I2C:
#include <Wire.h>
#include <SparkFun_SCD30_Arduino_Library.h> // Include the SCD30 library
SCD30 airSensor; // Create an SCD30 object
void setup() {
Serial.begin(9600); // Initialize serial communication
Wire.begin(); // Initialize I2C communication
if (airSensor.begin() == false) {
Serial.println("SCD30 not detected. Check wiring and try again.");
while (1); // Halt execution if the sensor is not detected
}
}
void loop() {
if (airSensor.dataAvailable()) {
// Read and print CO2, temperature, and humidity values
Serial.print("CO2 (ppm): ");
Serial.println(airSensor.getCO2());
Serial.print("Temperature (°C): ");
Serial.println(airSensor.getTemperature());
Serial.print("Humidity (%): ");
Serial.println(airSensor.getHumidity());
Serial.println(); // Print a blank line for readability
} else {
Serial.println("No data available. Waiting...");
}
delay(2000); // Wait 2 seconds before the next reading
}
Sensor Not Detected:
SDA and SCL lines.Inaccurate Readings:
No Data Available:
dataAvailable() function is being called correctly in the code.Q: Can the SCD30 measure CO2 levels below 400 ppm?
A: No, the SCD30 has a minimum CO2 measurement range of 400 ppm.
Q: How often should I calibrate the SCD30?
A: Calibration frequency depends on the application. For most indoor environments, calibration every 6-12 months is sufficient.
Q: Can I use the SCD30 with a 3.3V microcontroller?
A: Yes, the SCD30 is compatible with both 3.3V and 5V systems.
Q: What is the default I2C address of the SCD30?
A: The default I2C address is 0x61.
By following this documentation, you can effectively integrate and use the SCD30 sensor in your projects.