NOTE: The PM2.5 Sensor Module SPS30 does not come in the same package with this Click board™. If you’re interested in the complete package please visit the HVAC Click bundle.
How does it work?
HVAC Click as its foundation uses the SCD41, a Sensirion’s next-generation miniature CO2 sensor. This carbon dioxide sensor builds on the photoacoustic sensing principle and Sensirion’s patented PASens® and CMOSens® technology to offer high accuracy at a minor form factor. It operates within a specified range from 400 to 5’000 ppm, configurable through the I2C interface with a low-power single-shot mode supported to reduce noise levels, i.e., on-demand measurement.
The SCD41 features on-chip signal compensation to counteract pressure and temperature effects. Feeding the SCD41 with the pressure or altitude enables the highest accuracy of the CO2 output signal across an extensive pressure range. Setting the temperature offset improves the accuracy of the relative humidity and temperature output signal. Note that the temperature offset does not impact the accuracy of the CO2 output.
HVAC Click communicates with MCU using the standard I2C 2-Wire interface to read data and configure settings, supporting Standard mode operation with a clock frequency up to 100kHz. Furthermore, this Click board™ is suitable for indoor air quality applications using an additional SPS30, a Particulate Matter (PM) sensor from Sensirion, with the help of which the HVAC Click in the most energy-efficient and human-friendly way maintains a low CO2 concentration for a healthy, productive environment.
The measurement principle of the SPS30 is based on laser scattering, which, together with high-quality, enables precise measurements from its first operation and throughout its lifetime of more than ten years. In addition, the SPS30 provides the possibility of using both I2C and UART interfaces where the communication interface selection can be made by positioning SMD jumpers labeled COMM SEL to an appropriate position. Note that all the jumpers’ positions must be on the same side, or else the Click board™ may become unresponsive. Also, to activate I2C communication, the JP4 jumper must be populated.
This Click board™ can operate with both 3.3V and 5V logic voltage levels selected via the VCC SEL jumper. This way, it allows both 3.3V and 5V capable MCUs to use the communication lines properly. In addition, however, the Click board™ comes equipped with a library containing easy-to-use functions and an example code that can be used, as a reference, for further development.
Specifications
Type
Environmental,Gas
Applications
Can be used for indoor air quality applications and in smart ventilation systems to regulate ventilation in the most energy-efficient and human-friendly way, maintaining low CO2 concentration for a healthy, productive environment
On-board modules
SCD41 – Sensirion’s next-generation miniature CO2 sensor
Key Features
Low power consumption, high accuracy, photoacoustic sensor technology PASens®, integrated temperature, and humidity sensor, additional connection to SPS30 particulate matter sensor, and more.
Interface
I2C,UART
Feature
No ClickID
Compatibility
mikroBUS™
Click board size
M (42.9 x 25.4 mm)
Input Voltage
3.3V or 5V
Pinout diagram
This table shows how the pinout on HVAC Click corresponds to the pinout on the mikroBUS™ socket (the latter shown in the two middle columns).
Onboard settings and indicators
Label | Name | Default | Description |
---|---|---|---|
LD1 | PWR | – | Power LED Indicator |
JP1 | VCC SEL | Left | Logic Level Voltage Selection 3V3/5V: Left position 3V3, Right position 5V |
JP2-JP3 | COMM SEL | Left | SPS30 Communication Interface Selection I2C/UART: Left position I2C, Right position UART |
JP4 | JP4 | Populated | SPS30 I2C Interface Activation Jumper |
J1 | SPS30 | Populated | SPS30 Particulate Matter Sensor Connection Header |
HVAC Click electrical specifications
Description | Min | Typ | Max | Unit |
---|---|---|---|---|
Supply Voltage | 3.3 | – | 5 | V |
SPS30 Supply Voltage | – | 5 | – | V |
SCD41 CO2 Measurement Range | 400 | – | 5000 | ppm |
SCD41 Humidity Measurement Range | 0 | – | 95 | %RH |
Operating Temperature Range | -10 | +25 | -60 | °C |
Software Support
We provide a library for the HVAC Click on our LibStock page, as well as a demo application (example), developed using MikroElektronika compilers. The demo can run on all the main MikroElektronika development boards.
Library Description
The library covers all the necessary functions to control HVAC Click board. A library performs the communication with the SCD40 Sensor via I2C interface and with the SPS30 via I2C or UART interface.
Key functions:
void hvac_scd40_read_measurement ( measuremen_data_t *m_data )
– SCD40 read measurement function.void hvac_sps30_start_measurement ( void )
– SPS30 start measurement command function.void hvac_sps30_read_measured_data ( mass_and_num_cnt_data_t *m_n_c_data )
– SPS30 read measured data function.
Examples description
The application is composed of three sections :
- System Initialization – Initializes I2C or UART and start to write log.
- Application Initialization – Initialization driver enables – I2C or UART, SCD40: perform factory reset, serial number, features, product type platform type, product version and SPS30: perform start measurement mode, also write log.
- Application Task – (code snippet) This is an example which demonstrates the use of HVAC Click board. HVAC Click board can be used to measure : Concentration of CO2 in air, Temperature ( degree Celsius ), Relative Humidity ( % ), Mass Concentration of PM1.0, PM2.5, PM4.0, PM10 and Number Concentration of PM0.5, PM1.0, PM2.5, PM4.0 and PM10. All data logs write on USB uart changes.
void application_task ( ) { if ( select_communication == I2C_COMMUNICATION ) { hvac_scd40_send_cmd( HVAC_MEASURE_SINGLE_SHOT ); Delay_ms( 5000 ); hvac_scd40_read_measurement( &hvac_data ); Delay_ms( 100 ); WordToStr( hvac_data.co2_concent, log_text ); mikrobus_logWrite( " CO2 Concent = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_LINE ); FloatToStr( hvac_data.temperature, log_text ); mikrobus_logWrite( " Temperature = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " C", _LOG_LINE ); FloatToStr( hvac_data.r_humidity, log_text ); mikrobus_logWrite( " R. Humidity = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " %", _LOG_LINE ); mikrobus_logWrite( "- - - - - - - - - - - - - ", _LOG_LINE ); while ( hvac_sps30_get_ready_flag( ) != HVAC_SPS30_NEW_DATA_IS_READY ); } mikrobus_logWrite( " Mass Concentration : ", _LOG_LINE ); hvac_sps30_read_measured_data( &sps30_data ); Delay_ms( 100 ); FloatToStr( sps30_data.mass_pm_1_0, log_text ); mikrobus_logWrite( " PM 1.0 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " ug/m3", _LOG_LINE ); FloatToStr( sps30_data.mass_pm_2_5, log_text ); mikrobus_logWrite( " PM 2.5 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " ug/m3", _LOG_LINE ); FloatToStr( sps30_data.mass_pm_4_0, log_text ); mikrobus_logWrite( " PM 4.0 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " ug/m3", _LOG_LINE ); FloatToStr( sps30_data.mass_pm_10, log_text ); mikrobus_logWrite( " PM 10 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " ug/m3", _LOG_LINE ); mikrobus_logWrite( "- - - - - - - ", _LOG_LINE ); mikrobus_logWrite( " Number Concentration : ", _LOG_LINE ); FloatToStr( sps30_data.num_pm_0_5, log_text ); mikrobus_logWrite( " PM 0.5 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " n/cm3", _LOG_LINE ); FloatToStr( sps30_data.num_pm_1_0, log_text ); mikrobus_logWrite( " PM 1.0 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " n/cm3", _LOG_LINE ); FloatToStr( sps30_data.num_pm_2_5, log_text ); mikrobus_logWrite( " PM 2.5 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " n/cm3", _LOG_LINE ); FloatToStr( sps30_data.num_pm_4_0, log_text ); mikrobus_logWrite( " PM 4.0 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " n/cm3", _LOG_LINE ); FloatToStr( sps30_data.num_pm_10, log_text ); mikrobus_logWrite( " PM 10 = ", _LOG_TEXT ); mikrobus_logWrite( log_text, _LOG_TEXT ); mikrobus_logWrite( " n/cm3", _LOG_LINE ); mikrobus_logWrite( "--------------------------", _LOG_LINE ); Delay_ms( 2000 ); }
The full application code, and ready to use projects can be found on our LibStock page.
Other mikroE Libraries used in the example:
- I2C
- UART
- Conversions
Additional notes and informations
Depending on the development board you are using, you may need USB UART click, USB UART 2 click or RS232 click to connect to your PC, for development systems with no UART to USB interface available on the board. The terminal available in all MikroElektronika compilers, or any other terminal application of your choice, can be used to read the message.
mikroSDK
This Click board™ is supported with mikroSDK – MikroElektronika Software Development Kit. To ensure proper operation of mikroSDK compliant Click board™ demo applications, mikroSDK should be downloaded from the LibStock and installed for the compiler you are using.
For more information about mikroSDK, visit the official page.