135 lines
4.1 KiB
Markdown
Raw Normal View History

2023-01-07 15:48:40 +01: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)
[![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)
# MHZCO2
Arduino Library for MHZ series CO2 sensors.
## Description
2023-07-27 16:14:19 +02:00
The MHZCO2 is an experimental library for the MHZ19B CO2 sensor
with a Serial (RS232-TTL) interface and compatibles.
2023-01-07 15:48:40 +01:00
The library offers a base class and derived classes to prepare for specific functionality.
2023-07-27 16:14:19 +02: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 15:48:40 +01:00
2023-07-27 16:14:19 +02:00
Reference: user manual MHZ129B 2019-04-25 version 1.4
2023-01-07 15:48:40 +01:00
#### Compatibles
This list is not verified although these devices should be compatible based upon datasheet.
| type | precision | notes |
|:-----------|:----------:|:--------|
| MHZ1311A | 50ppm + 5% | energy saving version
| MHZ19 | 50ppm + 5% |
| MHZ19B | 50ppm + 3% | test device
| MHZ19C | 50ppm + 5% |
| MHZ19D | 50ppm + 5% |
| MHZ19E | 50ppm + 5% |
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 16:14:19 +02:00
In previous versions the MTP40F was incorrectly mentioned as compatible.
2023-01-07 15:48:40 +01: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 16:14:19 +02: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 15:48:40 +01:00
## Connection
- check datasheet of your sensor.
## Interface
#### Constructor
- **MHZCO2()** base class constructor.
2023-07-27 16:14:19 +02: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 15:48:40 +01:00
- **uint32_t uptime()** returns milliseconds since 'instantiation'.
#### Range
2023-07-27 16:14:19 +02:00
- **void setPPM(uint16_t PPM)** PPM = 2000, 5000, 10000.
- **uint16_t getPPM()** returns (cached) PPM value.
2023-01-07 15:48:40 +01:00
#### Measure
- **int measure()** workhorse, send command to read the sensor.
2023-07-27 16:14:19 +02:00
- **uint32_t lastMeasurement()** timestamp in milliseconds of last measurement.
2023-01-07 15:48:40 +01: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.
#### Calibration
**WARNING:** use with care, read the datasheet as these commands may disrupt your sensor.
2023-07-27 16:14:19 +02: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 15:48:40 +01:00
- **void calibrateAuto(bool mode = true)**
2023-07-27 16:14:19 +02: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 15:48:40 +01:00
## Future
#### Must
2023-01-18 16:59:34 +01:00
2023-01-07 15:48:40 +01:00
- improve documentation
- buy hardware MHZ19B / MHZ19C
- test with hardware
- verify checksum
- verify timeout
2023-01-18 16:59:34 +01:00
#### Should
2023-01-07 15:48:40 +01:00
- plotter example
- check 3000 PPM
2023-01-18 16:59:34 +01:00
- fix SoftwareSerial - https://github.com/Arduino-CI/arduino_ci/issues/346
2023-01-07 15:48:40 +01:00
#### Could
2023-01-18 16:59:34 +01:00
2023-01-07 15:48:40 +01:00
- extend unit tests
- add type info for derived classes?
2023-07-27 16:14:19 +02:00
- A .. E ?
2023-01-07 15:48:40 +01:00
- save RAM? possible?
2023-01-18 16:59:34 +01:00
2023-01-07 15:48:40 +01:00
#### Won't