The $20 nitrox analyzer
When finances are tight and you still want to show appreciation to someone for the holidays, a handmade gift is often the answer. With a big drop in tourism this year, this is exactly what we did at Divetech for our staff Christmas presents - we made our own nitrox analyzers. This is a project I worked on for quite a while, and finally got around to making them, and figured I would share the files and instructions, in case you wanted to make one too. This analyzer is meant to use old rebreather O2 sensors, something we have plenty of here at Divetech.
To begin, this is a DIY project. Know that making your own nitrox analyzer could be very dangerous if you do something wrong. The risk of not knowing exactly what you are breathing when you go diving could be fatal, so use at your own risk. You've been warned.
Also this project is sort of intensive. You should own or have access to a good 3d printer, and be proficient in its use. Your print settings should be dialed in perfectly. You should also have experience in electronics - soldering, wiring, and programming an Arduino. Troubleshooting the Arduino in particular can be difficult sometimes, and is beyond the scope of this article.
I also must acknowledge, the original Arduino sketch for this was created by Eunjae Im - a rebreather diver and underwater cameraman in Korea. You may visit his site here: https://ejlabs.net/
You will need:
Rocker switch (13 x 19mm mount)
Push button (12mm diameter)
6 M3x10mm hex head screws
4 M2x10mm hex head screws
9v battery clip connector
Note, I've added links to some of these items for convenience. You don't need to get these exact ones, particularly because most of these are in quantities of more than 1.
Download the files here. All STL files are here, along with the Arduino sketch. For those using Prusa slicer, I've also included pre-configured .3mf files.
Print all the parts. The .stl files are in the correct orientation for best printing. Depending on the material used, you may need to use support where the LCD window and rocker switch openings bridge on the front case half. I personally used ABS which does not bridge as well, so I elected to use supports. PETG bridges better than other materials, so support may not be needed. Use your own judgement. Print settings were .3 mm layer height, draft quality.
Glue the calibration switch cover to the front half case using an appropriate adhesive.
Glue the 2 halves of the flow restrictor together.
While the glue is drying, program your Arduino with the supplied sketch.
Wire up the LCD, ADS1115, and your Arduino board. I found it was much easier to wire these outside of the casing, and then insert the components into the case. I also used male and female jumper wires to make the task easier, particularly on the switches.
Insert (carefully) the LCD into the rear case half. Be sure the LCD pins are facing the rear side of the analyzer.
Carefully place the front half onto the rear half, over the LCD. Screw together with 4 M3 hex head screws. Do not over tighten.
Solder jumper wires to your push button and rocker switch. Insert switches into case. Insert battery connector into case, and wire into switch and ground.
Complete all connections to the Arduino board.
Insert ADS1115 and Arduino into slots in the case.
Attach back cover with 4 M2 hex head screws. Do not over tighten.
Insert battery, O2 sensor, and attach battery cover with 2 M3 head head screws.
Turn on analyzer. A logo should appear, and then be replaced with the message "SENSOR ERROR." With the O2 sensor connected, press and hold the calibrate button for 3 seconds. After you release the button, the reading should then become 20.9.
To calibrate, expose sensor to air, press and hold calibrate button for 3 seconds, until "CAL" appears on the screen.
To lock the o2 reading onto the display, briefly press the calibrate button. To unlock, press again.
UPDATE 27-December 2020: Many of you have sent inquiries about the display not presenting correctly when you upload your Arduino sketch. This is most likely because the display is not sized correctly in your library. To fix:
In your Arduino library folder, find the file Adafruit_SSD1306.h
Open this with text editor or notepad.
Scroll down and define the display size as 128x64 by removing the // before this line. If any other screen size is defined, un-define it by placing // in front of it's line.
Save file with same name and location in your library.
UPDATE 2-January 2021: I've added some new flow restrictor couplings with different diameters to account for different sized sensors. There is a 9mm, 9.5mm, 10mm for use with Vandegraph sensors, and a 11.5mm and 12mm for use with Analytical Industry sensors. Use the size appropriate for your particular sensor and printer.
There's also a small radius, 1mm from the bottom of the flow restrictor coupler. The idea is this radius may easily be trimmed using a razor to make for a proper fit inside the sensor.