76 lines
1.7 KiB
Python
76 lines
1.7 KiB
Python
import time
|
|
|
|
import adafruit_sgp30
|
|
import board
|
|
import busio
|
|
|
|
i2c = busio.I2C(board.SCL, board.SDA, frequency=100000)
|
|
|
|
# Create library object on our I2C port
|
|
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
|
|
sgp30.iaq_init()
|
|
sgp30.set_iaq_baseline(0x8973, 0x8aae)
|
|
|
|
# highest tVOC recorded in 30 seconds
|
|
highest_breath_result = 0
|
|
|
|
|
|
def warmup_message():
|
|
warmup_time = 20
|
|
warmup_counter = 0
|
|
|
|
# initial read required to get sensor going
|
|
sgp30.iaq_measure()
|
|
|
|
print()
|
|
print("Warming Up [%d seconds]..." % warmup_time)
|
|
|
|
while warmup_counter <= 20:
|
|
print('.', end='')
|
|
time.sleep(1)
|
|
warmup_counter += 1
|
|
|
|
|
|
def get_breath_reading():
|
|
breath_time = 30 # seconds to record breath reading
|
|
# one second count up to breath_time value
|
|
breath_counter = 0
|
|
# initialize list with empty values
|
|
breath_saves = [0] * (breath_time + 1)
|
|
|
|
print()
|
|
print("We will collect breath samples for 30 seconds.")
|
|
print("Take a deep breath and exhale into the straw.")
|
|
input(" *** Press a key when ready. *** ")
|
|
print()
|
|
|
|
while breath_counter <= breath_time:
|
|
_, tvoc = sgp30.iaq_measure()
|
|
breath_saves[breath_counter] = tvoc
|
|
print(tvoc, ', ', end='')
|
|
time.sleep(1)
|
|
breath_counter += 1
|
|
|
|
breath_saves = sorted(breath_saves)
|
|
result = breath_saves[breath_counter - 1]
|
|
|
|
return result
|
|
|
|
|
|
# show the highest reading recorded
|
|
|
|
|
|
def show_results(breath_result):
|
|
print()
|
|
print()
|
|
print("peak VOC reading:", breath_result)
|
|
print()
|
|
input("Press any key to test again")
|
|
print()
|
|
|
|
|
|
# main
|
|
while True:
|
|
warmup_message()
|
|
highest_breath_result = get_breath_reading()
|
|
show_results(highest_breath_result)
|