SCD41 CO₂ Sensor with an Arduino Uno
A true photoacoustic NDIR CO₂ sensor (400-5000 ppm) with onboard temperature and humidity, read over I²C.

The SCD41 pulls current peaks of 205 mA while it measures, so on an Arduino Uno the Adafruit breakout's VIN goes to the 5V pin, never to the Uno's 3.3V. It sits on A4 and A5 at its fixed address 0x62, and a new CO₂ reading arrives every 5 seconds.
Wiring the SCD41 CO₂ Sensor to the Arduino Uno
Pin by pin.
| SCD41 CO₂ Sensor | Arduino Uno |
|---|---|
| VIN | 5V |
| GND | GND |
| SCL | SCL |
| SDA | SDA |
What to know on the Arduino Uno
- The sensor needs a supply that can deliver 205 mA peaks. The Uno's 3.3V pin is rated for 50 mA, so it cannot feed the sensor; the breakout's own regulator, fed from the Uno's 5V, can.Sensirion SCD4x datasheet v1.5, p. 4; Arduino UNO R3 tech specs
- In periodic mode a reading is ready every 5 seconds. The sketch asks getDataReadyStatus() once a second and only reads when it is true, so the Uno spends most of loop() free.Sensirion SCD4x datasheet v1.5, p. 9
- The address 0x62 is fixed, so the Uno's single I2C bus holds one SCD41; sharing it with other sensors at other addresses is fine.Sensirion SCD4x datasheet v1.5, p. 7
- If the Uno and sensor run from a weak USB port, those 205 mA bursts can dip the 5 V rail at each measurement; a short cable and a powered port keep readings steady.Sensirion SCD4x datasheet v1.5, p. 4
SCD41 CO₂ Sensor code for the Arduino Uno
Compiled for arduino:avr:uno on 2026-10-30.
// SCD41 CO₂ Sensor on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/scd41-co2-sensor/arduino-uno
#include <Wire.h>
#include <SensirionI2cScd4x.h> // library 1.x: SensirionI2c, lower-case c
SensirionI2cScd4x scd4x;
void setup() {
Serial.begin(9600);
Wire.begin();
scd4x.begin(Wire, SCD41_I2C_ADDR_62);
scd4x.stopPeriodicMeasurement(); // clean state
scd4x.startPeriodicMeasurement(); // ~5 s cadence
}
void loop() {
uint16_t co2; float temp, hum;
bool ready = false;
scd4x.getDataReadyStatus(ready);
if (ready && scd4x.readMeasurement(co2, temp, hum) == 0 && co2 != 0) {
Serial.print("CO2: "); Serial.print(co2); Serial.print(" ppm ");
Serial.print(temp); Serial.print(" C ");
Serial.print(hum); Serial.println(" %");
}
delay(1000);
}
SCD41 CO₂ Sensor on the Arduino Uno: questions
Can I power the SCD41 from the Arduino Uno's 3.3V pin?
No. The sensor's peaks reach 205 mA (Sensirion datasheet, p. 4) and the Uno's 3.3V pin is rated for 50 mA. Wire the breakout's VIN to the Uno's 5V.
How often does the SCD41 give a reading on the Uno?
Every 5 seconds in periodic mode (Sensirion datasheet, p. 9). Poll getDataReadyStatus() and read only when it reports new data, as the example does.
Which Uno pins does the SCD41 use?
SDA on A4 and SCL on A5, at the fixed address 0x62. Leave the breakout's 3V3 pin unconnected: it is an output.
Keep going
This guide as plain Markdown. /components/scd41-co2-sensor/arduino-uno.md