Build a simple device that warns if CO2 concentration in a room becomes a risk for COVID-19 aerosol infections.
- Measures CO2 concentration in room air.
- Controls an RGB LED (green, yellow, red, like a traffic light).
- A buzzer can be connected that alarms if levels are critical.
- Also opens a WiFi portal which shows current readings and a graph (not connected to the internet).
This project was heavily inspired by ideas from Umwelt-Campus Birkenfeld.
You can also find a good overview of the topic by Rainer Winkler here: Recommendations for use of CO2 sensors to control room air quality during the COVID-19 pandemic.
- The sensor used here is the Sensirion SCD30 (around $50 / 40€) which is optionally augmented by a BME280 pressure sensor to improve accuracy.
- Look here if you want to use MH-Z19B sensors.
LED color | CO2 concentration |
---|---|
Green ("all good") | < 800 ppm |
Yellow ("open windows") | 800 – 1000 ppm |
Red ("leave room") | > 1000 ppm |
Based on a Recommendation from the REHVA (Federation of European Heating, Ventilation and Air Conditioning associations, rehva.eu) for preventing COVID-19 aerosol spread, especially in schools.
You can read current levels and a simple graph for the last hour by connecting to the WiFi coro2sens
that is created.
Most devices will open a captive portal, immediately showing the data. You can also open https://10.0.0.1/
in a browser.
- Any ESP32 or ESP8266 board (like a WEMOS D32 (about $18 / 15€) or WEMOS LOLIN D1 Mini (about $7 / 6€)).
ESP32 has bluetooth, for future expansion. - Sensirion SCD30 I2C carbon dioxide sensor module (mouser.com) (around $50 / 40€).
- 1 NeoPixel compatible RGB LED (WS2812B).
- Optional: BME280 I2C pressure sensor module, improves accuracy (less than $5 / 4€).
- Optional: 3V piezo buzzer or simple speaker.
- A nice case :)
ESP pin | goes to |
---|---|
3V3 | SCD30 VIN, BME280 VIN |
5V | LED +5V |
GND | SCD30 GND, BME280 GND, LED GND, Buzzer (-) |
SCL / D1 | SCD30 SCL, BME280 SCL |
SDA / D2 | SCD30 SDA, BME280 SDA |
GPIO 0 / D3 | LED DIN |
GPIO 14 / D5 | Buzzer (+) |
(GPIOs can easily be changed in src/main.cpp
)
Flashing the ESP using PlatfomIO
- Simply open the project, select your env (ESP8266 / ESP32) and run / upload.
- Or via command line:
pio run -t -e esp21e upload
for ESP8266.pio run -t -e esp32dev upload
for ESP32.
- Libraries will be installed automatically.
- Install the latest Arduino IDE.
- Download the latest code and unzip it somewhere.
- Open
coro2sense.ino
in thecoro2sens
sub folder in your Arduino IDE. - Install (or update) your board platform
(Tools –> Board –> Board Manager...):- Install
esp8266
oresp32
.
- Install
- Install (or update) the following libraries using the built-in library manager (Tools –> Library Manager...)
- For ESP8266:
SparkFun BME280
Adafruit NeoPixel
- For ESP32:
SparkFun SCD30 Arduino Library
SparkFun BME280
Adafruit NeoPixel
- For ESP8266:
- Install the following external libraries
(download .zip file, then import it via Sketch –> Include Library –> Add .ZIP Library...):- For ESP8266:
- For ESP32:
- Run & upload :)
Please let me know of any issues you might encounter (open a GitHub issue or write me on twitter.com/kmetz or [email protected]).