/VO2max

MetSci VO2 Max - Detailed Build Directions

Primary LanguageC++

VO2 Max Mask

Super cool project to build your own VO2 Max mask. Your "VO2 Max" is a measure of how much oxygen your body and absorb and use during exercise, read more about it here.

Original idea and detailed build instructions can be found on Instructable. Other designs can be found here, a UC Davis Med Center project and a commercial version that costs just under US$6,000.

This fork of Ivor's excellent Github work incorporates the CO2 enhancements from Ulrich Rissel. The intent with this repo is to make it as easy as possible to build a world class piece of kit that'll add useful metrics to your training.

Design Constraints

Less than $200 for all parts and printing. Printable by anyone with a 3D printer (easy print files). Can handle up to 200 liters per minute of exhaled air. Small and light enough to be worn for a full workout. Able to measure resting as well maximum VO2.

App Intent

Allows an athlete to monitor real time RER.

Allows an athlete to monitor gross mechanical efficiency

Allows for BLE or WiFi or ANT+ connections from any other sensor

  • heart rate monitor
  • stride rate or length
  • power meter
  • rowing stroke rate

Versions

  • V1 - Original version that works, can be found via the Instructable link above.
  • V2 - Upgraded version by Urissel & Ivor, includes the CO2 & ambient temp/pressure to adapt to different elevation & temperatures.
  • V3 - Proposed by Mahmoud, this is the T version. Currently abandoned due to issues with getting correct sensor readings.
  • V4 - Proposed by Stefan, affectionately called "The Snork". Latest version.

Current Status

Currently (August 16th 2023) a work in progress. Refer to the Wiki for exactly where we are now.

Steps to Build & Use - INCOMPLETE

Order Sensors, board, and assorted fasteners.

Check the BOM for all the various parts to order, they can take a week or two to come in.

Print 3D Parts

Print out the 3D parts using PLA. This is still a work in progress, but feel free to explore the 3D Test Print directory and print out what you'd like. Nothing works well yet (Aug 4th, 2023).


Test fit all parts and make sure you know where everything goes; that will make the next steps much easier.

Program Board

Originally this project was built with the Arduino IDE. A few of us nerds decided that Platformio might be easier and more rad, so we're using that.

When you first get the board, hold down the boot button while plugging it in, and keep that down. You need to erase everything on the board before you load the rest. From there, you should be able to use the Platformio folder to load everything you'll need. I did this on a Windows computer (a little Beelink with a monitor & display) because I couldn't get it to work on my Mac.

Wire It Up

Assembly

Older Information Relevant to V2 (Urissel/Ivor updated version)

Arduino (from Ivor)

Source code for Arduino under "VO2Max" - Arduino board settings to use for TTGO T-Display:

Board: ESP32 Dev Module
Upload Speed: 921600
CPU Frequency: 240Mhz (WiFi/BT)
Flash Frequency: 80Mhz
Flash Mode: QIO
Flash Size: 4MB (32Mb)
Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5 SPIFFS)
Core Debug Level: None`

Useful Images

Sensor Measurements

Measurements for the sensors.

Build parts

Source parts, top to bottom. 3M mask with front plate removed, 3D printed case, Oxygen sensor, TTGo T-Display, Flow sensor.

First build

First finished build.

Upgrading

Rebuilding to use CO2 sensor. SCD30 pictured right.

Upgraded build

Assembled into case tightly, BM280 barometer addition mounted onto front of tube, wiring for CO2 monitor fed behind and out to top.

Upgraded build

Pictured with the CO2 sensor upgrade attached

3D printing files are within the design folder, Ulrich Rissel's design files to use a larger venturi diameter with CO2 sensor holder in design/CO2_upgrade

Usage - Zwift & Strava

  • Enable bluetooth on your phone
  • Go to "Record" function at bottom of screen on unit, and press it
  • Look for the Heart icon at the bottom, and push that to bring up the bluetooth pairing screen to find the unit

Usage - App

  • Turn on device
  • Add your weight (kg or lbs?)
  • Push the Go button
  • Turn on the Sensirion App, which will automatically pair and start recording data

Programing is done through the USB-C connector. Charging the battery is accomplished by turning on the unit and then plugging it in.

The App is designed for collecting data from a CO2 sensor so you have to spoof it by sending the Volume Minute of O2 to the CO2 level screen, the VO2 max to the Temp screen and the O2 level to the Humidity screen.

Additional changes in this version:

  • Menu system enhanced with adjustable calibration and setup options.
  • Additional GoldenCheetah integration (with VO2 master output)
  • CO2 sensor support (Ulrich's mods)

Running the unit with Zwift or Strava

Use FinalZwiftConnect with files

  • DFRobot_OxygenSensor.cpp
  • DFRobot_OxygenSensor.h

Running the unit on the Sensirion MyAmbience app (iOS)

  • FinalSensirionScreen
  • DFRobot_OxygenSensor.cpp
  • DFRobot_OxygenSensor.h
  • Sensirion_GadgetBle_Lib.cpp
  • Sensirion_GadgetBle_Lib.h