====== lamaPLC project: Sension SCD CO² measurement module ======
{{ :sensor:scd30.png?120|SCD 30 Modul}}
The main distinction between these Sensirion sensors lies in their measurement technology, which affects their size and power use. The **SCD30** employs conventional **NDIR** (//Non-Dispersive Infrared//) technology, whereas the **SCD40/41** series utilises a more recent, compact Photoacoustic principle.
|< 100%>|
^Feature^SCD30^SCD40^SCD41|
^ |{{:sensor:scd30.png?100|SCD 30 Modul}}|-|{{:sensor:scd_41.png?100|SCD 41 Modul}}|
^Technology|NDIR (Dual-Channel)|Photoacoustic|Photoacoustic|
^Size|35 x 23 x 7 mm|10.1 x 10.1 x 6.5 mm|10.1 x 10.1 x 6.5 mm|
^CO² Range|0 – 40,000 ppm|400 – 2,000 ppm|400 – 5,000 ppm|
^Accuracy|±(30 ppm + 3% MV)|±(50 ppm + 5% MV)|±(40 ppm + 5% MV)|
^Voltage|3.3V – 5.5V|2.4V – 5.5V|2.4V – 5.5V|
^Power (avg)|~19 mA|~15 mA|~0.5 mA (Low Power Mode)|
^Interface|[[com:basic_i2c|I²C]] (Address **0x61**), [[com:basic_uart|UART]], PWM|[[com:basic_i2c|I²C]]|[[com:basic_i2c|I²C]]|
^Operating Temperature|0°C to 50°C|||
**Key Differences**
* **Form Factor:** The SCD40/41 is approximately ten times smaller than the SCD30, making it well-suited for compact wearables or integrated smart home devices.
* **Precision vs Size:** The SCD30 generally offers slightly better accuracy and stability over extended periods, thanks to its dual-channel NDIR design, which naturally compensates for sensor drift.
* **Power Efficiency:** For battery-powered devices, the SCD41 is the preferred choice, featuring a "Single Shot" mode that significantly reduces power consumption compared to the SCD30 or SCD40.
* **Mounting:** The SCD40/41 is an SMD (Surface-Mount Device) component suitable for reflow soldering and mass production. In contrast, the SCD30 is usually hand-soldered or connected via pins.
{{page>:tarhal}}
===== SCD30 =====
The SCD30 is a high-precision, 3-in-1 sensor module from Sensirion that measures Carbon Dioxide (CO²), Temperature, and Relative Humidity. It is considered a "true" CO² sensor because it uses Non-Dispersive Infrared (NDIR) technology to directly measure CO² molecules, rather than approximating levels from other gases.
**Key Features & Technology**
* **Dual-Channel Detection:** It uses a dedicated reference channel to compensate for long-term drift, ensuring superior stability over its 15-year lifetime.
* **Integrated Compensation:** The module uses its built-in temperature and humidity data to internally calibrate and normalise the CO2 readings.
* **Self-Calibration Options:** Supports Automatic Self-Calibration (ASC), which resets the sensor's baseline when exposed to fresh air (~400 ppm) regularly, or Forced Recalibration (FRC) for manual setup.
* **Adjustable Sampling:** While the default interval is 2 seconds, it can be set to 1-1800 seconds to reduce power consumption in battery-powered projects.
==== SCD30 Pinout ====
{{ :sensor:scd30_pinout.png|}}
^Pin^Name^Description^Logic Level|
^1|VDD|Supply Voltage (3.3V – 5.5V)|—|
^2|GND|Ground|—|
^3|TX / SCL|Modbus Transmit / I²C Clock|3.0V (internal pull-up)|
^4|RX / SDA|Modbus Receive / I²C Data|3.0V (internal pull-up)|
^5|RDY|Data Ready (High when new data is available)|3.0V|
^6|PWM|Pulse Width Modulation output|3.0V|
^7|SEL|Interface Select (Floating/GND = I²C; High = Modbus)|< 4.0V|
**Key Wiring Notes**
* **Internal Pull-ups:** The module has internal 45 kΩ resistors connected to a 3V supply for the I²C lines.
* **Voltage Warning:** The module can be powered with 5V, but the SCL/SDA logic pins operate at 3V. When using a 5V microcontroller like an Arduino Uno, a level shifter is strongly advised to prevent damage to the sensor.
* **Interface Selection:** For I²C (the standard mode), leave the SEL pin floating or connect it to Ground. To use Modbus, connect the SEL pin to VDD via a voltage divider, ensuring the voltage does not exceed 4V.
==== SCD30 Arduino example code ====
To use the SCD30 with an Arduino, the **SparkFun SCD30** Arduino Library and the Adafruit SCD30 Library are the most common choices.
#include
#include "SparkFun_SCD30_Arduino_Library.h" //
SCD30 airSensor;
void setup() {
Wire.begin();
Serial.begin(9600);
if (airSensor.begin() == false) {
Serial.println("Sensor not detected. Check wiring!");
while (1);
}
Serial.println("SCD30 detected!");
}
void loop() {
if (airSensor.dataAvailable()) {
Serial.print("CO2(ppm): ");
Serial.print(airSensor.getCO2());
Serial.print(" Temp(C): ");
Serial.print(airSensor.getTemperature(), 1);
Serial.print(" Humidity(%): ");
Serial.println(airSensor.getHumidity(), 1);
}
delay(2000); // Sensor updates every 2 seconds by default
}
===== SCD41 =====
{{ :sensor:scd_41.png?120|SCD41 Modul}}
The SCD41, developed by Sensirion, is a compact, highly precise sensor for measuring CO₂, temperature, and humidity. As the second generation of their optical CO² sensors, it employs photoacoustic NDIR (Non-Dispersive Infrared) technology. This approach enables the sensor to be much smaller than conventional CO₂ sensors while maintaining high accuracy, making it perfect for indoor air quality (IAQ) monitoring.
**Key Features**
* 3-in-1 Sensing: Measures CO2 concentration, relative humidity, and temperature simultaneously.
* Miniature Form Factor: Its extremely small size (10.1 x 10.1 x 6.5 mm³) enables easy integration into compact devices.
* High Accuracy: Offers a precision of ±(40 ppm + 5% of reading) across the range 400 to 5,000 ppm.
* Low Power Modes: Includes a "single-shot" mode that reduces average current consumption to <0.4 mA for battery-operated applications.
* Standard Interface: Communicates via I2C, making it compatible with microcontrollers such as Arduino, ESP32, and Raspberry Pi.
**Technical Specifications**
^Parameter^Range / Value^Accuracy (Typical)|
^CO² Concentration|400 – 5,000 ppm (up to 40,000 ppm output)|±(40 ppm + 5%)|
^Relative Humidity|0 – 100% RH|±6% RH|
^Temperature|-10°C to 60°C| +-0.8 °C (at 15-35°C)|
^Supply Voltage|**2.4V – 5.5V**|N/A|
^I²C Address|0x62|N/A|
==== SCD41 Pinout ====
Most breakout boards use a standard 4-pin or 5-pin arrangement for easy connection to microcontrollers like Arduino or ESP32.
{{ :sensor:scd_41.png?200|SCD41 Modul}}
^Pin Name^Type^Description|
^VIN / VCC|Power|Connect to (2.4V – 5.5V) (depending on your board's logic level).|
^GND|Ground|Common ground for power and logic.|
^SCL|I²C Clock|Serial clock line for I²C communication. Usually has a 10k pull-up.|
^SDA|I²C Data|Serial data line for I²C communication. Usually has a 10k pull-up.|
^3Vo|Output|(Adafruit boards only) 3.3V output from the onboard regulator.|
==== SCD41 Arduino example ====
Search for "Sensirion I2C SCD4x" and install it. The example below initialises the sensor and outputs CO², Temperature, and Humidity readings every 5 seconds.
#include
#include
#include
SensirionI2cScd4x scd4x;
void setup() {
Serial.begin(115200);
while (!Serial); // Wait for serial monitor
Wire.begin();
scd4x.begin(Wire);
// Stop potentially running measurement
uint16_t error = scd4x.stopPeriodicMeasurement();
if (error) {
Serial.print("Error stopping measurement: ");
Serial.println(error);
}
// Start periodic measurement (updates every 5 seconds)
error = scd4x.startPeriodicMeasurement();
if (error) {
Serial.print("Error starting measurement: ");
Serial.println(error);
}
Serial.println("Waiting for first measurement... (5 sec)");
}
void loop() {
uint16_t co2 = 0;
float temperature = 0.0f;
float humidity = 0.0f;
bool dataReady = false;
// Check if data is ready to be read
uint16_t error = scd4x.getDataReadyStatus(dataReady);
if (dataReady) {
error = scd4x.readMeasurement(co2, temperature, humidity);
if (!error) {
Serial.print("CO2: ");
Serial.print(co2);
Serial.print(" ppm\t");
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print(" °C\t");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
}
delay(1000); // Check status every second
}
**Key Functions to Note**
* **startPeriodicMeasurement():** Sets the sensor to measure every 5 seconds.
* **getDataReadyStatus():** Use this to avoid reading "stale" data until the next 5-second interval.
* **measureSingleShot():** Available only on the SCD41 (not the SCD40). It allows manual measurement to save power, making it ideal for battery-powered projects.
===== Communication topics on lamaPLC =====
{{topic>communication}}
{{tag>SCD30 SCD40 SCD41 IAQ NDIR sensor I2C arduino_code}}
This page has been accessed for: Today: {{counter|today}}, Until now: {{counter|total}}