intelligent-environments-lab / bevo_iaq Goto Github PK
View Code? Open in Web Editor NEWBEVO Beacon with more robust air quality monitoring
BEVO Beacon with more robust air quality monitoring
Using the models we developed, we can summarize the data collected from the UTx000 study by applying the models. There is one consideration though:
The measurements should be compared to related studies like those presented in the IAQ and SQ paper since they measured bedroom IEQ using commercial-grade sensors for the most part i.e. Liao et al., 2019.
Approximately 32 beacons still need to have NO2 sensors attached. The software is in place to read from these sensors.
There should be about 30 sensors somewhere in ECJ. I saw the shipment was made a while back, but not sure where these sensors are being kept.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Yes
Deployed: No
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π‘ | - | - |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Yes
Deployed: No
The fabrication video needs to be updated and completed based on some comments from the initial drop. Comments for improving include:
The OLED provides an output of the latest measured values on a 128x64 pixel screen.
The software is simple enough to run, but documentation can be found here and here. In addition, working with the text is made easier using this package.
The hardware is simple enough to hook up: V, GND, SCD, and SCL - the screen has inscriptions for each pin.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | In-House |
RTC | π’ | Original | Factory |
TVOC | π | - | - |
RPi: 3B+
PCB: Hat
Housing: 6/7 (no Partition)
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | In-House |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | In-House |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π | - | - |
RPi: Zero W
PCB: Hat
Housing: 6/7
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π΄ | - | - |
RPi: Zero W
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: No
Deployed: No
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | In-House |
RTC | π’ | Original | Factory |
TVOC | π‘ | - | - |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: No
Deployed: No
There is still a bit of an overheating issue (0.5C) inside the beacon that might be compromising some of the measurements made by the internal sensors (CO2 and PM).
There is one fan that attemps to provide cooling to the RPi.
There is enough space to incorporate a second fan or a larger one. Perhaps a different housing design might also provide more adequate cooling. The current fans that are being used simply require connecting a 3.3V pin and the other to a ground pin.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | In-House |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | - |
Screen | π’ | Original | In-House |
RTC | π’ | Original | Factory |
TVOC | π | - | - |
RPi: Zero W
PCB: Hat
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Needs update
Deployed: No
Python packages currently appeared to be installed through apt-get. Although it's currently hard to tell which may be better, pip (pypi) will probably have more updated packages and would allow us to specify dependencies with a requirements.txt file. This would also allow us to update the python packages for bevo-iaq separately from the raspberry's software.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
Light | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π΄ | - | - |
RPi: 3B+
PCB: Hat
Housing: 6/7 (no partition)
Calibrated: No
Deployed: No
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π‘ | Original | - |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Yes
Deployed: No
This journal seems promising to submit an article about the Beacon. More research into the journal, what a typical article looks like, and how to appropriately craft an article about the beacon should be considered.
Comments from the WCWH community essentially say the beacon could look a bit nicer. In addition, VOCs are emitted from the freshly cut boxes which is a problem if the devices are to be rapidly developed and deployed.
The IAQ beacon is made from cut plywood using the laser cutters from the Inventionworks. Considering the Inventionworks is shut down and they were already frustrated with us hogging the machines, we might be able to prototype a few devices, but the participants might be stuck with the current design.
None as of now.
From pd.read_csv, these values are automatically recognized as nan:
ββ, β#N/Aβ, β#N/A N/Aβ, β#NAβ, β-1.#INDβ, β-1.#QNANβ, β-NaNβ, β-nanβ, β1.#INDβ, β1.#QNANβ, ββ, βN/Aβ, βNAβ, βNULLβ, βNaNβ, βn/aβ, βnanβ, βnullβ
Lines 110 to 114 in 2c7021b
Lines 150 to 154 in 2c7021b
Some of the beacons don't take well to the new install process and continually have a conflict with installing some of the necessary files. Despite efforts on my and Calvin's end, the issues still persist.
Beacons with this issue:
As I add the display functionality, I realize that I will have to create another service file on the RPi that will run the display script at boot. Rather than have a service file for each component of the beacon, I can create one script run.py
that I can set up a service for and then append with the necessary python scripts to run at boot.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: No
Deployed: No
In order to include the OLED screens (see #2) on the RPi, we need to allow for more connections to the i2C pins. These are currently unavailable so we need to obtain more PCBs so we can connect more things!
One issue that has plagued the development of the IAQ Beacon is that the Sensirion sensors (PM and CO2) - which are arguably the most important - run on python2 scripts. If that wasn't a big enough issue, the code is unnecessarily complex as it was modified from the only source that I found online using python to interface with the sensors.
Python2 code is being run to read data from the Sensirion sensors that could be contributing to the bugs associated with reading from these sensors.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
Calibrated: Yes
Deployed: No
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π | - | - |
RPi: 3B+
PCB: Hat
Housing: 6/7 (no Partition)
As far as I can tell, when the i2cdetect -y 1
command returns a slow scan with no detectable addresses, the issue is on the side of hardware - particularly with the pull-up resistors. See comment here.
This issue persists for Beacons:
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Yes
Deployed: No
The following models should be generated from the UTest House and Laboratory calibration efforts:
Linear Models: CO2, PM2.5, NO2 (house only), T (lab only), RH (lab only)
Constant: TVOC, CO (lab only)
We need to update the calculate_summary_statistics.py script:
display.py
scriptModule | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
Light | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Hat
Housing: 1/7
Calibrated: No
Deployed: No
After generating the models, we can compare some of them that were conducted in both calibration efforts:
Prior to deployment, the 20 beacon with working software and hardware need to be calibrated. This issue will serve as a place to write-down updates on these efforts.
The beacon hardware has been properly installed but we first need to check that no new bugs have cropped up since the installation.
Many of the beacons are still running on older software from utx000 so this needs to be updated prior to calibration.
After the hardware and software checkout, we should let the devices run for at least 24 hours to make sure that they are measuring regularly and have no further issues.
Based on this article some important metrics to consider are:
Again borrowing from this article, we should visualize the beacons' performances by comparing:
Module | Included | Condition | Connections |
---|
| CO2 | π’ |Original | Factory |
| Fan | π’ |Original/Cleaned | Original |
| Light | π’ |Original | Factory |
| NO2 | π’ |Original | Factory |
| PM | π’ |Original | Factory |
| Screen | π’ |Original | Factory |
| RTC | π’ |Original | Factory |
| TVOC | π΄ | - | - |
RPi: 3B+
PCB: Hat
Housing: 6/7 (Missing Partition)
Calibrated: No
Deployed: No
An addition to the hardware of the IAQ beacon would be to include a small display that rotates through the various measurments made by the beacon.
There are OLED screens in the lab that have been purchased (more will most likely be needed to update all the current beacons) and code exists on the BEVO Beacon v2s that could be repurposed.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
Calibrated: No
Deployed: No
While much has been done to improve the internal temperature issues that throw off sensor readings, more can be done to alleviate this issue.
Adding more fans can potentially cool the RPi
Adding heat sinks might show some improvement.
Now that we have everything running on the latest version of python, there is no need to separate our output values into two separate files other than for older scripts that rely on a certain format. However, these files can easily be updated for the latest software.
The main
script seems to combine all measurements into one data frame so we could just append this data frame to the latest csv file rather than calling management
, but whatever makes the most sense is best.
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | Factory |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | Factory |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Original
Calibrated: Yes
Deployed: No
The following calibration efforts need to be carried out before any more headway can be made on the BEVO Beacon paper:
The fixed delay doesn't take into account that loop execution time can be variable.
Lines 391 to 394 in 2c7021b
Lines 346 to 349 in 2c7021b
This stack overflow answer proposes an alternative:
import time
starttime = time.time()
while True:
print "tick"
time.sleep(60.0 - ((time.time() - starttime) % 60.0))
As an initial step to help get data from the RPi, we can look into BT data transfer to a smart phone.
Here are some articles to get started:
Module | Included | Condition | Connections |
---|---|---|---|
CO | π’ | Original | Factory |
CO2 | π’ | Original | In-House |
Fan | π’ | Original/Cleaned | Original |
Light | π’ | Original | In-House |
NO2 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | In-House |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
Calibrated: Yes
Deployed: No
Currently, multiple sensors are handled by two scripts that are running on python2 and python3. While the benefit is that readings from sensors can be combined into one output per script, the problem is that readings are made at irregular intervals because of communication lags between sensor and RPi that differ per sensor.
Two scripts can be split into multiple scripts per sensor (6) that would be called at start-up and all be running in parallel.
Major updates would be needed to process that raw data since the output would change significantly (each sensor would output to its own file)
Need to create a new clone with the newer software
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.