GY-63_MS5611/libraries/MHZCO2/README.md

177 lines
5.6 KiB
Markdown
Raw Normal View History

2023-01-07 09:48:40 -05:00
[![Arduino CI](https://github.com/RobTillaart/MHZCO2/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![Arduino-lint](https://github.com/RobTillaart/MHZCO2/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/MHZCO2/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/MHZCO2/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/MHZCO2/actions/workflows/jsoncheck.yml)
2023-11-14 04:25:54 -05:00
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/MHZCO2.svg)](https://github.com/RobTillaart/MHZCO2/issues)
2023-01-07 09:48:40 -05:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/MHZCO2/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/MHZCO2.svg?maxAge=3600)](https://github.com/RobTillaart/MHZCO2/releases)
2023-11-14 04:25:54 -05:00
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/MHZCO2.svg)](https://registry.platformio.org/libraries/robtillaart/MHZCO2)
2023-01-07 09:48:40 -05:00
# MHZCO2
Arduino Library for MHZ series CO2 sensors.
## Description
2023-07-27 10:14:19 -04:00
The MHZCO2 is an experimental library for the MHZ19B CO2 sensor
with a Serial (RS232-TTL) interface and compatibles.
2023-01-07 09:48:40 -05:00
The library offers a base class and derived classes to prepare for specific functionality.
2023-07-27 10:14:19 -04:00
The base class is based upon the MHZ19B specification.
This might change in the future as compatibles might differ on detail.
2023-01-07 09:48:40 -05:00
2023-07-27 10:14:19 -04:00
Reference: user manual MHZ129B 2019-04-25 version 1.4
2023-01-07 09:48:40 -05:00
2023-12-29 10:57:01 -05:00
#### Version 0.2.0
Version 0.2.0 fixes a bug in **setPPM()** which makes older versions obsolete.
2023-01-07 09:48:40 -05:00
#### Compatibles
This list is not verified although these devices should be compatible based upon datasheet.
2023-12-29 10:57:01 -05:00
There exists different models of 400-2000 PPM and 400-5000 PPM and 400-10000 PPM.
As far as known these have the same interface as there is very little information to be found.
2023-01-07 09:48:40 -05:00
| type | precision | notes |
|:-----------|:----------:|:--------|
| MHZ1311A | 50ppm + 5% | energy saving version
| MHZ19 | 50ppm + 5% |
| MHZ19B | 50ppm + 3% | test device
2023-12-29 10:57:01 -05:00
| MHZ19C | 50ppm + 5% | (1)
2023-01-07 09:48:40 -05:00
| MHZ19D | 50ppm + 5% |
| MHZ19E | 50ppm + 5% |
2023-12-29 10:57:01 -05:00
Note (1):
There exists different models of the MHZ19C and probably others.
The range can go from 400-2000 PPM, 400-5000 PPM and 400-10000 PPM.
As far as known these have the same interface as there is very little
information to be found. See #9.
2023-01-07 09:48:40 -05:00
Note: The calibration of the MHZ1311A is different than MHZ19x series
If there are compatible devices missing in this list, please let me know.
2023-07-27 10:14:19 -04:00
In previous versions the MTP40F was incorrectly mentioned as compatible.
2023-01-07 09:48:40 -05:00
#### Links
- https://emariete.com/en/sensor-co2-mh-z19b/
- https://emariete.com/en/sensor-co2-low-consumption-mh-z1311a-winsen/
- https://revspace.nl/MHZ19
2023-07-27 10:14:19 -04:00
- https://www.co2.earth/ - current outdoor CO2 level can be used for calibrating.
- https://keelingcurve.ucsd.edu/ - historical outdoor CO2 level.
- https://github.com/RobTillaart/MTP40C
- https://github.com/RobTillaart/MTP40F
- https://github.com/RobTillaart/Cozir
2023-01-07 09:48:40 -05:00
## Connection
- check datasheet of your sensor.
## Interface
2023-11-14 04:25:54 -05:00
```cpp
#include "MHZCO2.h"
```
2023-01-07 09:48:40 -05:00
#### Constructor
- **MHZCO2()** base class constructor.
2023-07-27 10:14:19 -04:00
- **MHZ19()** constructor. Also 19B, C, D, E
- **void begin(Stream \* str)** set the Serial port to use, e.g Serial1,
or a softwareSerial port.
2023-01-07 09:48:40 -05:00
- **uint32_t uptime()** returns milliseconds since 'instantiation'.
#### Range
2023-07-27 10:14:19 -04:00
- **void setPPM(uint16_t PPM)** PPM = 2000, 5000, 10000.
- **uint16_t getPPM()** returns (cached) PPM value.
2023-01-07 09:48:40 -05:00
#### Measure
2023-12-29 10:57:01 -05:00
- **int measure()** workhorse, send command to read the sensor and
waits until an answer is received. Return values see below.
2023-07-27 10:14:19 -04:00
- **uint32_t lastMeasurement()** timestamp in milliseconds of last measurement.
2023-01-07 09:48:40 -05:00
- **int getCO2()** returns CO2 PPM last measurement.
- **int getTemperature()** returns temperature last measurement.
- **int getAccuracy()** returns accuracy last measurement.
- **int getMinCO2()** returns minCO2 last measurement.
The latter two might not be supported by all MH sensors.
2023-12-29 10:57:01 -05:00
Return values of **measure()**
| value | Name | Description |
|:-------:|:------------------:|:--------------|
| 0 | MHZCO2_OK | measurement succeeded.
| -10 | MHZCO2_TIMEOUT | to too long to receive an answer
| -11 | MHZCO2_ERROR_CRC | Checksum error, handle answer with care.
2023-01-07 09:48:40 -05:00
#### Calibration
**WARNING:** use with care, read the datasheet as these commands may disrupt your sensor.
2023-07-27 10:14:19 -04:00
- **void calibrateZero()** Only use when sensor is at least 30 minutes
in a calibrated **400** PPM environment.
- **void calibrateSpan(uint16_t span)** Only use when sensor is at least 30 minutes
in a calibrated **2000** PPM environment.
2023-01-07 09:48:40 -05:00
- **void calibrateAuto(bool mode = true)**
2023-07-27 10:14:19 -04:00
Note the outdoor calibration CO2 level differs per day and one should check
a local airport or weather station for a good reference.
The University of San Diego keeps track of CO2 for a long time now.
See - https://keelingcurve.ucsd.edu/
2023-01-07 09:48:40 -05:00
## Future
#### Must
2023-01-18 10:59:34 -05:00
2023-01-07 09:48:40 -05:00
- improve documentation
- buy hardware MHZ19B / MHZ19C
- test with hardware
- verify timeout
2023-01-18 10:59:34 -05:00
#### Should
2023-01-07 09:48:40 -05:00
- check 3000 PPM
2023-01-18 10:59:34 -05:00
- fix SoftwareSerial - https://github.com/Arduino-CI/arduino_ci/issues/346
2023-01-07 09:48:40 -05:00
#### Could
2023-01-18 10:59:34 -05:00
2023-12-29 10:57:01 -05:00
- investigate configurable timeout. now hardcoded 1 second.
- 2 bytes + 2 functions.
2023-01-07 09:48:40 -05:00
- extend unit tests
- add type info for derived classes?
2023-07-27 10:14:19 -04:00
- A .. E ?
2023-01-07 09:48:40 -05:00
- save RAM? possible?
2023-01-18 10:59:34 -05:00
2023-01-07 09:48:40 -05:00
#### Won't
2023-11-14 04:25:54 -05:00
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,