Introduction
Build up a simple environmental monitor station with this multi-function environment sensor! Based on the combination of CCS811+BME280 chip, this module features high accuracy, IIC interface and fast Measurement. The BME280 can provide temperature and humidity compensation for CCS811 to improve the whole accuracy to a certain extent. It can be used to detect temperature, humidity, barometric pressure, altitude, TVOC and eCO2.
CCS811 air quality sensor uses AMS's unique micro-hot plate technology. Compared with conventional gas sensors, it has lower power consumption, shorter preheating time, and smaller size. The internally integrated ADC and MCU allow it to collect and process data, and return via I2C.
BME280 is an environmental sensor that combines temperature sensor, humidity sensor and barometer in one board. It has high precision, multiple functions, small size, etc. The sensor offers ±0.5℃ temperature error and ±2%RH humidity error. It provides very stable performance within the detection temperature range. Besides, the offset temperature coefficient is ±1.5 Pa/K, equiv. to ±12.6 cm at 1 °C temperature change.
NOTE: The chip has stretched the clock in I2C. So, it may be not compatible with some controllers, such as Raspberry Pi.
The following table shows the effects of carbon dioxide and TVOC on the human body.
Carbon Dioxide (PPM) | Effect on Human | TVOC Concentration (PPB) | Effect on Human | |
---|---|---|---|---|
<500 | Normal | <50 | Normal | |
500-1000 | A little uncomfortable | 50-750 | Anxious,uncomfortable | |
1000-2500 | Tired | 750-6000 | depressive, headache | |
2500-5000 | Unhealthy | >6000 | headache and other nerve problems |
Applications
- Environment Monitor
- Air Purifiers
- Smart Home
- Ventilation System
- Weather Forecast
Specification
- Operating Voltage: 3.3V~5.5 V
- Working Current: <20mA
CCS811 Parameter:
- Preheat Time: <15s
- I2C Address: 0x5A(in default)/0X5B
- Operating Temperature Range: -40℃~85℃
- Operating Humidity Range: 10%RH~95%RH
- eCO2 Measuring Range: 400ppm~8000ppm
- TVOC Measuring Range: 0ppb~1100ppb
BME280 Parameter: - I2CAddress:0x76(in default)/0X77
- Operating Temperature: -40℃~85℃
- Temperature Measuring Range: -40℃~+85℃, resolution of 0.1℃, deviation of ±0.5℃
- Humidity Measuring Range: 0~100%RH, resolution of 0.1%RH, deviation of ±2%RH
- Pressure Measuring Range: 300~1100hPa
Board Overview
Num | Label | Description |
---|---|---|
1 | VCC | + |
2 | GND | - |
3 | SCL | IIC clock line |
4 | SDA | IIC data line |
5 | INT | Interrupt pin: interrupt in low level |
6 | WAKE | Switch pin: awake in low level / sleep in high level |
7 | RST | Reset pin: reset in low level |
Tutorial
The product warm-up time is short, accurate readings can be made quickly once powered up. The read time can be shortened by setting the environmental baseline (the baseline acquisition and setup method are explained below; for more details about baseline, go to the end of the wikipage to find the related document).
NOTE: Please run the sensor for 48hours when using it for the first time.
Requirements
Hardware
- DFRduino UNO R3 (or similar) x 1
- Multi-function environmental Module - CCS811+BME280 x 1
- Jumper wires
Software
- Arduino IDE
- Download and install the CCS811 Library and examples.
- Download and install the BME280 Library and examples (About how to install the library?)
- About API Function List
Connection Diagram
1. Get Baseline
Why should we get the baseline?
Why should we get the baseline? Because once get it, we can show the air quality quickly after the sensor warm-up by inputting the baseline. Otherwise, it will cost a long time to read correctly when startup in polluted air.
During the first week of running the sensor, it is recommended to save a new baseline every 24 hours. After 1 week of operation, it can be saved every 1-28 days
NOTE:
- Please place it in a fresh air environment (20 minutes or more) to obtain the baseline.
- Different sensors, different measurement cycles have different baselines.
Expected Results
After a while, the baseline reaches to a stable value.
2. Get Data
Input the baseline value to the function sensor.writeBaseLine();
If you don't want to set the baseline, please disable this function in the sample program. The sensor will automatically calibrate the baseline, but it would be a pretty long process.
after the function uploaded to UNO, open the serial port monitor to check the carbide dioxide concentration and TVOC concentration.
Expected Results
3. Concentration Alarm
Input the baseline value to the function sensor.writeBaseLine();
Upload it to UNO, when the CO2 concentration moves from the current range (low, medium, high) to another range (more than 50 ppm), an interruption is generated and the current CO2 value will be printed.
NOTE: This example requires the INT pin of the sensor to be connected to the corresponding interrupt pin on the main board (in the sample, D2 of UNO is selected).
AVR Series Interrupt Pin and Interrupt Number
328 Mainboards: Uno, Nano, Mini... | Mega2560 | 32u4 Mainboards: Leonardo... | |
---|---|---|---|
Interrupt Pin | D2, D3 | D2, D3, D21, D20, D19, D18 | D3, D2, D0, D1, D7 |
Interrupt Number | 0, 1 | 0, 1, 2, 3, 4, 5 | 0, 1, 2, 3 ,4 |
Expected Results
When you blow air to the sensor, the range of CO2 concentration changes, which results in an interruption; when the gas concentration decreases, there is also an interruption.
4. BME280 Read Data
Note:please check the IIC address of BME280 in the program before using. Chip initialization will fail when the hardware IIC address is not the same as the address in the codes.
Run the codes, then the related data will be printed.
Expected Results
FAQ
Q: Why the sensor init failed and the serial monitor printed "device not detected"?
A: Check whether the IIC address in the codes is the same as the sensor address.
For any questions, advice or cool ideas to share, please visit the DFRobot Forum.