====== 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}}