Indoor air quality monitor
Last updated: 2019-08-07
Tech stack: HTML5, Vue.js, Typescript, bootstrap, Python, Flask, Sqlite, C, Arduino
A simple dashboard showing temperature, humidity, CO2, and TVOC charts at my home. An interactive demo with historic data can be browsed at tznvy.eu/airqualitydemo (pl language only).
This was my very first Arduino project. As I have had very limited exposure to microcontrollers before, which mostly involved programming an emulated 6502 in assembly language in an undergraduate embedded systems course back in 2005, the circuit and the software have been evolving constantly since January as I learned and tried out new things.
First prototype consisted of a single temperature/humidity sensor hooked up directly to an Arduino Uno. As you can see, there were no connectors soldered to the sensor (I didn’t even have a soldering iron at that time), it was just floating in the air.
The netbook you can see in the photo is actually a part of the system. As Arduino doesn’t have network capabilities by itself, to post the readings online I needed to first push them to a machine that had. So the Arduino reads the sensor, formats the readings as CSV, and writes it on the serial port. The netbook have a Python script running 24/7 which listens on the port, parses the values, and posts it over Internet to a REST webservice, which in turn saves them to an SQLite database.
Between January and April, I’ve bought a soldering station and finally attached connectors to the sensor. I’ve also added a CO2/TVOC sensor, and migrated the dashboard to Vue.js and Typescript.
Sometime in June I was experimenting with running ATmega controllers without the Arduino board, and by August I felt confident enough to migrate the project. Not being dependent on Arduino Uno meant I could lower the clock rate to 8MHz and the input voltage to 3.3V, which was nice. I don’t feel much eco-friendlier though, as posting the readings online still requires a PC.
In the future, I would like to replace the serial modem with an ESP8266 wireless module, and finally retire the netbook. This should decrease the average room temperature, and lower the electricity bills as well. Also a cool thing about ESPs is that they can be flashed with the regular Arduino toolchain, which means that eventually I will be able to put the sensor interfacing program directly on ESP and drop the ATmega for even lower power consumption.