The story begins simply: after reading articles about the importance of monitoring indoor CO2 levels and the health impacts of not complying with established standards, I decided to look into the issue and monitor the market for suitable solutions. Unfortunately, none of the options satisfied me. Some were outright deceptive (using cheap and inaccurate sensors), others had limited functionality, inappropriate design, and other subjective and, in some cases, objective issues.
As I continued to delve deeper into the topic of AQ (air quality sensors), I discovered that it's not just carbon dioxide that's harmful, but also VOCs, PM, NOX, humidity, temperature, atmospheric pressure, and more. And while researching this topic, I formulated a number of requirements for the device:
1. The device must be quite versatile.
Since all humanity, progressive and not so progressive, has suddenly embraced comfort and disliked overpaying for bills, many have acquired smart homes on various platforms. I use Home Assistant, but you can connect it to any device, including Apple and Tuya. Therefore,
2. It should work with a smart home.
A smart home is great and trendy, but you also want to quickly see if it's time to open a window or turn on the ventilation with a quick glance at the sensor. Therefore:
3. The device should have a convenient and visible status indicator from a distance.
And small details like design, so it's easy to place/stand/hang (subjectively), and user-friendly controls. The main thing is to stop the creative process in time and not try to cram everything into one device at once.
So, what are we monitoring?
CO2. The data can be found in WHO and GOST (State Standard) recommendations.
Let's immediately introduce the concept of comfort and health zones. We can roughly divide the data received from the sensors into zones:
Green Zone (everything is fine)
Orange (tolerable)
Red (already harmful (roughly speaking))
And Dangerous (everything is bad, ventilation is required)
And yes, I won't be putting strict restrictions on various indicators into the code; we'll give the user the ability to adjust the boundaries of these zones themselves, BUT we'll add default data and limit the adjustment of the danger zone to 3000 ppm for CO2, since that's not good at all.
We obtain the following gradation for CO2:
Green zone up to 1000 ppm (data varies from 600–800 ppm, and up to 1000 ppm is considered acceptable).
Orange zone from 1000 ppm to 1500 ppm; essentially, ventilation is required.
Red zone from 1500 ppm to the Danger zone of 2500 ppm.
At 2500 ppm, the sensor should alert the user of danger with an audible signal and vibration.
Having evaluated the idea of using zones, we decided to apply them to other sensor readings. The same principle applies: we define recommended values, set them as defaults, and provide the ability to change them.
Who are we, you might ask, dear reader? UX/UI designer Mary took on the design of the "face," interface, and usability, as she also wanted such a contraption for her workstation. Who knew developing such a simple device would take so long?
For NOx (nitrogen oxides, mainly the result of combustion):
Green zone up to 10 ind,
Orange zone up to 100 ind, and
Red zone up to 200 ind; above that, it's Danger zone.
For VOc (Volatile Organic Compounds (Phenols, Styrene, Methane, Chlorine, Benzene, Tetrachloroethylene, Xylene, Acetone, etc.)):
Green zone up to 100 ind,
Orange zone up to 200 ind, and
Red zone up to 300 ind; above that, it's Danger zone.
For PM2.5 (airborne dust, reducing the risk of lung cancer):
Green Zone up to 50 ug/m³,
Orange Zone up to 100 ug/m³, and
Red Zone up to 150; above that, it's considered a Danger Zone.
All these values are modifiable; in Home Assistant, it looks like this:
The design and appearance of the device were based on the Zones concept and the need for convenient user notifications. Simply put, it should be easy to see from any part of the room, from any angle, the air quality status of the three main indicators: CO2, VOC/NOX, and PM.
We initially planned to use a large display, which you can see in the render.
In principle, it could be left in place and further developed if needed.
And before you say "give me two," let's address the main issues with this design. First, it's more expensive; second, it's sensitive to viewing angles and glare from external light sources. There's an option with OLED matrices, but a matrix of this size significantly increases the cost. But, again, we plan to develop both options if there's support and interest from the audience.
Now, let's return to the basic design.
The top IPS display (1.47'' 172x320px) displays the values of three main indicators and also highlights the value that has gone into the red zone.
LED-backlit discs smoothly change color from, say, green to orange, depending on the value's state. For example, if the CO2 reading is up to and including 1000 ppm, it's emerald green; at 1100 ppm, it shifts to orange; at 1500 ppm, it's completely orange; and as the reading continues to rise, the color shifts closer to red. If the reading enters the Danger Zone, the disc and the display begin to smoothly flash.
We also decided to add a buzzer and vibration motor to the device for additional notifications; these can be disabled through the smart home settings.
Since our AQ becomes a light source (display backlight and discs), we're adding brightness control based on room lighting, both automatically and in manual mode, where you can set the brightness from 255 (maximum) to 10 (minimum). Naturally, this changes the backlight intensity not only of the "alien discs" but also of the displays.
The second display, also IPS (1.69") 240x280), should display the date and time, temperature, humidity, atmospheric pressure, and room illumination in lux. It should also show network status icons, including whether the buzzer and vibration are enabled, and whether the device is connected to the Wi-Fi network and the smart home server via MQTT or another connection option, depending on the selected server.
Since I don't want to drag out this article, for a detailed explanation of the design, user interaction, and all interfaces, see this article by a UX designer. It's all described in great detail…
Now for the hardware:
I tried different sensor combinations, here's one option.
But ultimately, I settled on the following component set:
For CO2: SCD30
For PM, humidity/temperature, VOC, NOx: SEN55-SDN-T, a recently released sensor that combines a number of sensors.
Atmospheric pressure: BME280
Illumination: MAX44009
Currently, this is the best option in terms of availability and price/quality/accuracy ratio. However, the set may change.
The project is currently being finalized and prototyped. I'd like to add new features and the ability to configure settings via a mobile app.
And for a larger display (5–7 inches), you can display the weather, add an alarm function, and other features.
What's next:
Initially, this was all written for Arduino, but it became clear long ago that it was too small and it was time to switch to native IDEs. Then I decided to split it into two parts: two microcontrollers, one for the display and other bells and whistles, and the other for polling sensors and communicating with the smart home server. While the logic and interfaces are being written, the choice of chips isn't that important, but later, it will probably be some kind of ESP and STM.
The test board and Arduino code for it are available on GitHub.
But again, this is still a work in progress.
I'd like to especially thank those who supported and perhaps will continue to support the project in any way they can.
I really want to bring this thing to the final stage, build a prototype and enclosure.
Also, if the idea takes off, we could go on to industrial production with open-source firmware. But that's only if there are people willing to invest in it and help us launch a Kickstarter campaign. If not, the project will be made publicly available or will be donated to donors, as they decide, by public vote.
Top comments (0)