Our CO gas detection solution stands as a reliable sentinel, providing immediate alerts and real-time data to protect individuals and spaces from the dangers of carbon monoxide
A
A
Hardware Overview
How does it work?
CO 2 Click is based on the 3SP CO 1000, a carbon monoxide (CO) gas sensor from SPEC Sensors, which can sense CO concentration up to 1000ppm. The sensor has a very short response time; however, the longer it is exposed to a particular gas, the more accurate data it can provide. This is especially true when calibration is performed. The sensor is highly sensitive to small dust particles, condensed water, and other impurities, which might prevent gas from reaching the sensor. It is advised to protect the sensor when used in critical applications. In ideal conditions, the lifetime of this sensor is indefinite. Still, in a real-life application, the expected operating life is over five years (10 years at a temperature of 23 ± 3 ˚C and humidity of 40 ± 10% RH). Although very reliable and accurate, this sensor is also great for building relative gas sensing applications. For example, it can detect an increased level of CO gas, which is very hard to detect due to being tasteless, odorless, and colorless. However, when developing applications for the absolute gas concentration, the sensor must be calibrated, and the measurement data needs to be compensated. Factors such as humidity and temperature can affect measurements, the sensor-reaction curve to a specific measured gas (carbon monoxide in this case) is not completely linear, and other gases might affect the measurement (cross-sensitivity to
other gases). For this reason, a range of calibration routines has to be done in the working environment conditions to calculate the absolute gas concentration. CO 2 click uses the LMP91000, a configurable AFE potentiostat IC for low-power chemical sensing applications, from Texas Instruments. It provides the complete sensor solution, generating the output voltage proportional to the sensor current. A trans-impedance amplifier (TIA) with a programmable gain converts the current through the sensor, covering the range from 5μA to 750 μA, depending on the sensor used. The voltage between the referent electrode (RE) and the working electrode (WE) is constant, with the bias set by the variable bias circuitry. This type of sensor performs best when a fixed bias voltage is applied. The sensor manufacturer recommends a 200mV fixed bias for the sensor on this Click board™. The bias voltage and the TIA gain can be set via the I2C registers. In addition, there is an embedded thermal sensor in the AFE IC, which, if needed, can be used for the result compensation. It is available via the VOUT pin as the analog voltage value with respect to GND. The Click board™ has two additional ICs onboard. The first is the MCP3221, a 12-bit successive approximation register A/D converter from Microchip. The second IC is the OPA344, a single-supply, rail-to-rail operational amplifier manufactured by Texas Instruments. It is possible
to use the onboard switch, labeled as AN SEL, to select the IC to which the VOUT pin from the LMP91000 AFE is routed. If the switch is in the ADC position, the VOUT pin will be routed to the input of the MCP3221 ADC. This allows the voltage value at the VOUT pin to be read as digital information via the I2C interface. When the switch is in the AN position, it will route the VOUT pin of the LMP91000 AFE IC to the input of the OPA344. The output of the OPA344 op-amp has a stable unity gain, acting as a buffer so that the voltage at the VOUT pin of the AFE can be sampled by the host MCU via the AN pin of the mikroBUS™. The RST pin on the mikroBUS™ is routed to the MEMB pin of the LMP91000, and it is used to enable the I2C interface section, making it possible to use more than one chip on the same I2C bus. When driven to the LOW logic level, the I2C communication is enabled, and the host device (host MCU) can issue the START condition. The RST pin should stay at the LOW during the communication. This Click board™ can operate with either 3.3V or 5V logic voltage levels selected via the VCC SEL jumper. This way, both 3.3V and 5V capable MCUs can use the communication lines properly. Also, this 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.
Features overview
Development board
EasyPIC v7a is the seventh generation of PIC development boards specially designed for the needs of rapid development of embedded applications. It supports a wide range of 8-bit PIC microcontrollers from Microchip and has a broad set of unique functions, such as the first-ever embedded debugger/programmer over USB-C. The development board is well organized and designed so that the end-user has all the necessary elements in one place, such as switches, buttons, indicators, connectors, and others. With four different connectors for each port, EasyPIC v7a allows you to connect accessory boards, sensors, and custom electronics more efficiently than ever. Each part of the EasyPIC v7a development board
contains the components necessary for the most efficient operation of the same board. In addition to the advanced integrated CODEGRIP programmer/debugger module, which offers many valuable programming/debugging options and seamless integration with the Mikroe software environment, the board also includes a clean and regulated power supply module for the development board. It can use various external power sources, including an external 12V power supply, 7-23V AC or 9-32V DC via DC connector/screw terminals, and a power source via the USB Type-C (USB-C) connector. Communication options such as USB-UART and RS-232 are also included, alongside the well-
established mikroBUS™ standard, three display options (7-segment, graphical, and character-based LCD), and several different DIP sockets. These sockets cover a wide range of 8-bit PIC MCUs, from PIC10F, PIC12F, PIC16F, PIC16Enh, PIC18F, PIC18FJ, and PIC18FK families. EasyPIC v7a is an integral part of the Mikroe ecosystem for rapid development. Natively supported by Mikroe software tools, it covers many aspects of prototyping and development thanks to a considerable number of different Click boards™ (over a thousand boards), the number of which is growing every day.
Microcontroller Overview
MCU Card / MCU
![PIC18LF45K40](https://dbp-cdn.mikroe.com/catalog/mcus/resources/PIC18LF45K40.jpg)
Architecture
PIC
MCU Memory (KB)
32
Silicon Vendor
Microchip
Pin count
40
RAM (Bytes)
2048
Used MCU Pins
mikroBUS™ mapper
Take a closer look
Schematic
![CO 2 Click Schematic schematic](https://dbp-cdn.mikroe.com/catalog/click-boards/resources/1ee94390-48df-60ec-80de-0242ac120003/co-2-click-schematic-v100-1.png)
Step by step
Project assembly
Track your results in real time
Application Output
After pressing the "FLASH" button on the left-side panel, it is necessary to open the UART terminal to display the achieved results. By clicking on the Tools icon in the right-hand panel, multiple different functions are displayed, among which is the UART Terminal. Click on the offered "UART Terminal" icon.
![UART Application Output Step 1](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703a-40a0-6b58-88de-02420a00029a/UART-AO-Step-1.jpg)
Once the UART terminal is opened, the window takes on a new form. At the top of the tab are two buttons, one for adjusting the parameters of the UART terminal and the other for connecting the UART terminal. The tab's lower part is reserved for displaying the achieved results. Before connecting, the terminal has a Disconnected status, indicating that the terminal is not yet active. Before connecting, it is necessary to check the set parameters of the UART terminal. Click on the "OPTIONS" button.
![UART Application Output Step 2](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703a-eb29-62fa-ba91-02420a00029a/UART-AO-Step-2.jpg)
In the newly opened UART Terminal Options field, we check if the terminal settings are correct, such as the set port and the Baud rate of UART communication. If the data is not displayed properly, it is possible that the Baud rate value is not set correctly and needs to be adjusted to 115200. If all the parameters are set correctly, click on "CONFIGURE".
![UART Application Output Step 3](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703b-7543-6fbc-9c69-0242ac120003/UART-AO-Step-3.jpg)
The next step is to click on the "CONNECT" button, after which the terminal status changes from Disconnected to Connected in green, and the data is displayed in the Received data field.
![UART Application Output Step 4](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703c-068c-66a4-a4fc-0242ac120003/UART-AO-Step-4.jpg)
Software Support
Library Description
This library contains API for CO 2 Click driver.
Key functions:
co2_read_adc
- This function reads the converted data (CO) from the 12-bit AD converterco2_enable
- This function puts the device to enabled or to disabled stateco2_get_co2_ppm
- This function reads the CO converted data and calculates this value to the ppm
Open Source
Code example
This example can be found in NECTO Studio. Feel free to download the code, or you can copy the code below.
/*!
* \file
* \brief CO2 Click example
*
* # Description
* This application enables usage of very accurate CO sensor.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes I2C interface and performs the device configuration for properly working.
*
* ## Application Task
* Gets CO (Carbon Monoxide) data as ppm value every 300 miliseconds.
* Results will be logged on UART. The CO value range is from 0 to 1000 ppm.
*
*
* \author MikroE Team
*
*/
// ------------------------------------------------------------------- INCLUDES
#include "board.h"
#include "log.h"
#include "co2.h"
// ------------------------------------------------------------------ VARIABLES
static co2_t co2;
static log_t logger;
// ------------------------------------------------------ APPLICATION FUNCTIONS
void application_init ( void )
{
log_cfg_t log_cfg;
co2_cfg_t cfg;
uint8_t temp_w;
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, "---- Application Init ----" );
// Click initialization.
co2_cfg_setup( &cfg );
CO2_MAP_MIKROBUS( cfg, MIKROBUS_1 );
co2_init( &co2, &cfg );
Delay_ms( 500 );
temp_w = CO2_WRITE_MODE;
co2_generic_write( &co2, CO2_LOCK_REG, &temp_w, 1 );
temp_w = CO2_STANDBY_MODE;
co2_generic_write( &co2, CO2_MODECN_REG, &temp_w, 1 );
temp_w = CO2_3500_OHM_TIA_RES | CO2_100_OHM_LOAD_RES;
co2_generic_write( &co2, CO2_TIACN_REG, &temp_w, 1 );
temp_w = CO2_VREF_EXT | CO2_50_PERCENTS_INT_ZERO | CO2_BIAS_POL_NEGATIVE | CO2_0_PERCENTS_BIAS;
co2_generic_write( &co2, CO2_REFCN_REG, &temp_w, 1 );
log_printf( &logger, "CO 2 is initialized\r\n\r\n" );
Delay_ms( 1000 );
}
void application_task ( void )
{
float co2_value;
co2_wait_i2c_ready( &co2 );
co2_get_co2_ppm( &co2, &co2_value );
log_printf( &logger, "CO : %.2f ppm\r\n", co2_value );
Delay_ms( 300 );
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END