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
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 | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: Needs update
Deployed: No
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 |
Light | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Hat
Housing: 1/7
Calibrated: No
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.
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:
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
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.
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 | π’ | Original | Factory |
PM | π’ | Original | Factory |
Screen | π’ | Original | Factory |
RTC | π’ | Original | Factory |
TVOC | π’ | Original | Factory |
RPi: 3B+
PCB: Old
Housing: 7/7
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:
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!
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
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:
After generating the models, we can compare some of them that were conducted in both calibration efforts:
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
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.
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.
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.
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
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 | π΄ | - | - |
PM | π’ | Original | Factory |
Screen | π’ | Original | In-House |
RTC | π’ | Original | Factory |
TVOC | π‘ | - | - |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
Calibrated: No
Deployed: No
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
Need to create a new clone with the newer software
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 |
---|
| 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
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)
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)
The fabrication video needs to be updated and completed based on some comments from the initial drop. Comments for improving include:
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)
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.
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))
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.
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)
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
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 | 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 | π’ | 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 | π‘ | - | - |
RPi: Zero
PCB: Hat
Housing: 6/7 (no Partition)
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:
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
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
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
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.
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 | 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 | 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
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.