> Source: https://www.tinkered.ai/components/scd41-co2-sensor/arduino-uno (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/scd41-co2-sensor/arduino-uno. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# SCD41 CO₂ Sensor with an Arduino Uno

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

| SCD41 CO₂ Sensor | Arduino Uno | Note |
| --- | --- | --- |
| 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)

## Code

Libraries: sensirion/Sensirion I2C SCD4x

```cpp
// 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);
}
```

Compiled for arduino:avr:uno on 2026-10-30.

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

## More

- [SCD41 CO₂ Sensor reference](https://www.tinkered.ai/components/scd41-co2-sensor.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the SCD41 CO₂ Sensor on the Arduino Uno in the browser, with this wiring and code, free: https://www.tinkered.ai/components/scd41-co2-sensor/arduino-uno
