Learning Objectives:
Many students submitted cook tests with about two minutes of data - not really enough to do any analysis on. So this wrap-up will focus on a few case studies that came out of the class. But first, here’s a collection of all of the CAD Designs which went through a design review in this class:
Part of the goal of this lab is to familiarize students with 3D printing, and its unique design requirements. In particular, we have all discussed how overhanging features on parts are difficult for an FDM 3D printer to resolve - but we can usually work around those issues! Here is an example from one of my favorite enclosures this year.
This enclosure embraced a more artistic approach to the \(PM_{2.5}\) sensor. This is actually important: part of the reason that people choose to use some products over others, or to try using something at all, is because they are aesthetically interested in the product. But with the original design, we have a couple issues. However we choose to orient the print on the 3D printer, we will have overhanging parts (shown in red below). What can we do to resolve this, while still maintaining the artistic approach of the designer?
First, we split the box base into two pieces, which can be connected
with a press fit after printing the two parts separately. Then, we split the cap into two pieces, and added
counter-bored screw holes to be able to connect them. We made some minor
changes to the wing geometry and head shape to add chamfers, which can
be printed on an FDM printer.
The final product was able to maintain very similar aesthetic features to the original design, while accommodating 3D printing’s unique manufacturing design requirements.
What was the point of making the sensors that we all built in this class? Well, we want to understand something about our environment during something that many of us do every day: cooking. \(PM_{2.5}\) sensors are cool because they make invisible threats visible. \(PM_{2.5}\) particles are so small that we can’t see them. Sometimes, they’re accompanied by much larger particles like the carbon in smoke, but at other times, they can be completely invisible. Gas sensors and particle sensors can allow us to better understand our own environments, and protect ourselves and the people we care about - especially children - from an environmental pollutant that causes ALRI, heart disease, stroke, lung cancer, and many other illnesses.
I took the data from some of your cook tests and turned them into case studies, below. Note that often this required some preliminary data processing to get the data into the type of format that’s easy to work with. If you’re interested in the way I did that, you can look at the script here that processes data to prevpare it for visualization.
These three case studies should each highlight a way that environmental sensors like these can be used, correct ways to use them, and some recommendations for how we can protect ourselves in our own homes - and how we should think about the role of engineering in protecting the public health of the most vulnerable populations on earth.
Two students submitted some short cooking tests in both ventilated and un-ventilated environments. We will look here at the air pollution differences between these environments. Throughout all of our analyses, we will use the WHO recommended level of \(15 \mu g/m^3\), a 24-hour limit not to be exceeded 3-4 days per year. I will indicate this on plots using a dashed red line.
#Bring in the required libraries
library(tidyverse); library(dplyr); library(lubridate)
library(ggplot2); library(cowplot); library(RColorBrewer); library(ggpubr);
whoValue <- 15
#Import the ventilation vs. no-ventilation data
ventData <- read.csv("https://www.dropbox.com/scl/fi/mihpk6glx9o4su0kzp0xb/ventData.csv?rlkey=swpixlkhdfm33axti06twzc9j&dl=1",header=T)
ventData <- data.frame(ventData)
#Remove all "failed"readings
ventData <- ventData[ventData$pm25 != "Failed",]
#Process the data into the proper formats
ventData$vent <- as.factor(ventData$vent); ventData$kitchen <- as.factor(ventData$kitchen)
ventData$dataset <- as.factor(paste(ventData$kitchen,ventData$vent))
ventData$pm25 <- as.numeric(ventData$pm25)
#Plot the results as time series
ggplot() +
geom_point(data=ventData,aes(time, pm25,col=dataset,shape=vent)) +
ylab("PM2.5 Concentration (ug/m3)") +
xlab("Time (s)") + ylim(0,3500) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + theme(legend.position="bottom")
#Plot the results as a box plot (full size, and zoomed)
boxPlot <- ggplot() + geom_boxplot(data=ventData,aes(y=pm25,x=vent,fill=vent)) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + ylab("PM2.5 Concentration (ug/m3)")
zoomed <- boxPlot + ylim(0,20) #Make a zoomed-in box plot
ggarrange(boxPlot, zoomed, nrow=1,ncol=2) #Combine the two box plots
So, what does this mean? Well, most of the time, on average, the air pollution was below the WHO standard, so that’s good. We can see that when we zoom in on the distribution, on the right. But there were many outliers during the cooking tests, times when the reading was above the WHO standard, which we can see on the left-hand plot. There were quite a few readings where the cook was exposed to very high levels of particulate matter, which can have long-term health consequences.
I should note that for both of these cooking tests, boiling water to make noodles was the main cooking activity. That’s generally a safer type of cooking than frying food, when it comes to air pollution.
Overall, the mean particulate matter level was quite a bit higher when ventilation was not active. So, turn your ventilation fans on to protect your lungs and heart from air pollution when you are cooking!
One group of students simultaneously measured the same cooking event from slightly different locations, using two \(PM_{2.5}\) sensors. They also had the foresight to “zero” their sensors by running them for a while in clean air, so we can really see the difference between air quality before and during cooking. One important note is that this is a good example of redundancy: three sensors were set up, but only two successfully recorded data from the cooking test. But with two sensors, there’s a lot we can do!
Here’s what their cooking setup looked like, and the delicious result:
This group also did some work organizing their data, to make it a little easier to analyze now in R.
#Import the data from the .csv file, with 2 sensors
groupData <- read.csv("https://www.dropbox.com/scl/fi/urypre4fw588qbsh2b6fw/group_cook_test.csv?rlkey=d0hkum53yh2e82k3du0hjl1ur&dl=1",header=T)
#Process the data into the formats we want to use
gData <- data.frame(time=as.numeric(groupData$time), pm25=as.numeric(groupData$pm25),
sensor=as.factor(groupData$sensor))
#Make an assumption about the offset between the two sensors' timestamps
offset <- 100 #in seconds
groupData <- gData; groupData[groupData$sensor=="Sensor 1",]$time <-
groupData[groupData$sensor=="Sensor 1",]$time + offset
#Plot the results as time series
ggplot() +
geom_point(data=groupData,aes(time, pm25,col=sensor)) +
ylab("PM2.5 Concentration (ug/m3)") +
xlab("Time (s)") + ylim(0,900) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + theme(legend.position="bottom") +
scale_color_brewer(palette = "Set2")
#Let's see the same thing in a box plot format, but we'll track it over time,
#every 250 seconds:
groupData$boxTime <- as.factor(round(groupData$time/250,0)*250)
ggplot() + geom_boxplot(data=groupData,aes(y=pm25,x=boxTime,fill=sensor)) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + ylab("PM2.5 Concentration (ug/m3)") +
xlab("Time (s)") + theme(legend.position="bottom") +
scale_fill_brewer(palette = "Set2")
What can we take away from this experiment? Well, I see a few things immediately:
Pretty much the entire time cooking was occurring, dangerous levels of particulate matter were present at the locations of both sensors. And, both sensors show quite similar readings, which is a good sign that we’re collecting high-quality data.
An event occurred during cooking that dramatically increased the air pollution level for a little while. Talking to the students who ran this experiment, it sounds like this occurred right when they added sauce to the pasta. So this means that individual stages of cooking show very different levels of air pollution in response. One interesting thing is that Sensor 2 saw a higher mean concentration during that event, which might mean that the smoke plume was more localized than the general air pollution in the kitchen.
We can combine this with the case study above, and say that we should expect that increasing ventilation will improve air quality in the cooking environment. Turn your ventilation fans on! Open your windows! Your lungs and heart will thank you.
One student works in a kitchen which is unique for having several wood-burning ovens. As we discussed in class, exposure to wood smoke is a massive contributor to the global burden of disease, harming especially young children in low- and middle-income countries. But we are all exposed to poor air quality, especially if our work environment includes sources of particulate matter! This case study offers a chance to take a look at how particulate matter pollution varies across different settings within the same kitchen.
#First, this data was all processed by pulling each text file in, assigning a factor that described the cook setting, and then exporting it to a CSV file. We'll import that CSV file now:
resData <- read.csv("https://www.dropbox.com/scl/fi/dwtcm1zrda1ctekpizqov/restaurantData.csv?rlkey=wifp8j3bfp0vxinf9lhysnc32&dl=1",header=TRUE)
#Delete failed readings
resData <- resData[resData$pm25 != "Failed",]
#Tell R what each variable type is
resData$timeStamp <- as.POSIXct(resData$timeStamp)
resData$pm25 <- as.numeric(resData$pm25)
resData$location <- as.factor(resData$location)
#Plot all of the locations chronologically
ggplot() +
geom_point(data=resData,aes(timeStamp, pm25,col=location)) +
ylab("PM2.5 Concentration (ug/m3)") +
xlab("") + ylim(0,1500) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + theme(legend.position="bottom") +
scale_color_brewer(palette = "Set1")
So, we can see that as the sensor was moved around and logged data at several locations around the restaurant kitchen, there’s quite a bit of variation in the mean concentration. It’s always pretty high above the WHO suggested limit, but it varies a whole lot! So let’s look at the distribution of concentrations in different kitchen locations:
#Show a box plot representation of PM2.5 concentrations in different parts of the kitchen
ggplot() + geom_boxplot(data=resData,aes(y=pm25,x=location,fill=location)) +
geom_hline(yintercept = whoValue, color="red",linetype=2) +
theme_bw() + ylab("PM2.5 Concentration (ug/m3)") +
theme(legend.position="none") + xlab("") +
scale_fill_brewer(palette = "Set1")
This reveals some interesting things. First, Grill 1 actually has a higher mean concentration than Oven 2 Intense Fire, but it doesn’t see as many large spikes in concentration. What does that mean? Well, it’s probably best to not spend too much time in EITHER of those locations.
Grill 2 has quite a consistent high concentration, where the Controlled Kitchen and Saute Natural Gas environments also have nice consistent values, much lower than the other locations, but still very elevated compared to breathing really fresh air.
For a restaurant environment, these data might be useful to decide where to put hoods to increase ventilation, decreasing the exposure of kitchen staff to harmful air pollution. Or at the very least, it’s a reminder to spend as little time as possible close to these sources of smoke and particulate matter. Even stepping a few feet away from one of these larger fires can dramatically decrease your exposure to these harmful tiny particles.
These three case studies highlight one of the reasons that environmental sensing is important: whether cooking is something you do daily, something your family does, something you do professionally, or something you’re interested in having an impact in as a Global Engineer or Public Health professional, in all of these case studies we see surprising potential health impacts of this simple behavior.
Case Study 1 showed pretty clearly, from just two sensors in two different kitchens, that we can expect lower levels of harmful air pollution if we use active ventilation while we cook.
Case Study 2 showed the importance of co-locating multiple air quality sensors, and also showed that during a pretty normal cooking party, not only were PM2.5 levels high across the board, they spiked at certain times.
Case Study 3 showed a large variation in both concentrations and the distribution of concentrations in different locations inside the same restaurant kitchen.
Try to think about how this ties together with the public health ideas we introduced in this class. In many cases, exposure to air pollution from cooking, nearby power plants, automotive emissions, or natural systems can have long-term impacts on both morbidity and mortality.
If you’re interested in how our team at the Mortenson Center in Global Engineering has used air quality sensors to support public health research, you can read our publications here and here.