Capitalizing on the new wearable of masks by integrating technology to better understand breath composition and how it correlates to health.
I find wearables to be very dynamic pieces of technology, as their use is often extended beyond their traditional function in a multitude of ways. The best example is a smartwatch; the dominant purpose of one is to tell time, but since it's already on your wrist, it's perfectly poised to also gather information on your pulse and track your movement through the day.
Since masks have become a staple this year, I thought that there might be untapped potential to implement peripheral technologies, particularly when it comes to health data. The mask is already positioned well to gather data about your breath, and how the composition of your breath can give better insights about your health.
Specifically, you can monitor breath composition by analyzing the bVOCs, or breath Volatile Organic Compounds. The most important biomarkers of diseases in human body are ammonia, acetone, isoprene, nitic oxide, hydrogen sulphide, methane, ethane and pentane.
The build was a little tricky to get perfect due to two factors: One, the microcontroller needed to be quite small and contained to fit within the mask, but at the same time have IoT capabilities; and two, the gas sensor(s) needed to have a wide range of bVOCs, while also being small enough to fit in the mask.
This meant that I ruled out using the LilyPad ecosystem due to the fact that it was difficult to make it into an IoT device. This also meant that I couldn't use the MQ sensors because of their size, even though they provide individual readings for each biomarker.
Instead, I settled on using the BME680 Environmental Sensor Breakout, which can easily connect to the ESP32 Thing Plus via Qwiic, and get power through a single-cell LiPo battery. While it still isn't the most ideal build, it was the best compromise between size, IoT capabilities, and range of bVOCs.
The BME680 produces a breath VOC equivalent output (bVOCeq) based on a bVOC mixture that represents the most important compounds in an exhaled breath of healthy humans, as seen in the table below. However, this means that it isn't able to distinguish any specific bVOC compound from the read out value - only whether the overall gas concentration has increased or decreased.
As a raw signal, the BME680 will output resistance values and its changes due to varying VOC concentrations. Since this raw signal is influenced by parameters other than VOC concentration (like humidity level), the raw values are transformed to an IAQ (Indoor Air Quality) index by BSEC smart algorithms. Therefore, to get true IAQ values to determine the bVOCeq we have to use Bosch's BSEC Arduino Library, which uses an algorithm to convert the resistance value to an IAQ value.
Since the mask needs to be an IoT device, we'll create a Blynk app, so we'll need to manipulate the code to include a Blynk authentication token, WiFi credentials, and serial to run the app.
Even with the smart algorithm from Bosch, the values are still a bit varied. The current values are high (bVOCe ppm is upwards of 900), but it's also important to remember that higher VOC concentrations are typically indicated by lower raw gas values. I think I'll give the sensor time to calibrate itself and see if the values change, otherwise I'll have to go back and reinterpret the results!
Here is my little homemade mask, built up and ready for use! The weight of the build doesn't actually make too much of a difference when I'm wearing the mask, which is a plus. As for next steps, I really think that masks will be an effective wearable for future since they're so prevalent in our everyday life right now. In this project I focused on health, but some other interesting applications could be language translation through ML, or customizable LED apps that complement the mask.
Interesting! A couple of questions:
I'm guessing that because the sensor is directly next to your face and not in an open room, you will have to scale the bVOC readings. 900ppm readings are factoring in 1 m^3 of air, so you need to approximate the volume of the air in your lungs (under a few liters) and use some multiplier to come up with a new way to quantify the data..
Ahhh, yes this is incredibly helpful! It always comes back to dimensionality and unit conversion. Let me revisit my code and see if approximating lung capacity (I think it's ~4L for women) will help clarify the data. Thank you!
This is very interesting. Do you plan to share the code, or do the libraries you mention already do the heavy lifting?
The Bosch Arduino library did a lot of the heavy lifting - it's incredibly robust! Here's a link to repo if you'd like to check it out!
It seemed especially timely, since my reading of this blog post got interrupted while someone stuck a swab up my nose to test for Covid-19. I'd hope that someone is at least chasing the possibility that a Covid-19 infection might give an indication through bVOCs.
Anyway, I would have been inclined to do something with the Artemis as processor, as it can run for a fair while on a CR-2032, so could be a lot more compact and lighter weight, though it would require soldering.