<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nick Poole</title>
    <description>The Blog of Nick Poole</description>
    <link>https://nickpoole.me/</link>
    <atom:link href="https://nickpoole.me/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Fri, 26 Sep 2025 00:54:28 -0400</pubDate>
    <lastBuildDate>Fri, 26 Sep 2025 00:54:28 -0400</lastBuildDate>
    <generator>Jekyll v4.3.2</generator>
    
      <item>
        <title>Building an Oxikit O2 Concentrator (Part 2)</title>
        <description>&lt;h2 id=&quot;assuming-control&quot;&gt;Assuming Control&lt;/h2&gt;

&lt;p&gt;My &lt;a href=&quot;/2023/12/18/building-an-oxikit-o2-concentrator-part-1/&quot;&gt;previous post&lt;/a&gt; left off with the oxygen concentrator mechanically complete. All it needed was some electronics to control the solenoid valves. The PSA cycle is so simple that you could easily implement the entire controller in ladder logic on a PLC, or even in discrete timers. That said, I do PCB layout and a lot of Arduino programming for a living so I chose to build my own little Arduino-based solution.&lt;/p&gt;

&lt;h3 id=&quot;arduino-on-din-rails&quot;&gt;Arduino on (DIN) Rails&lt;/h3&gt;

&lt;p&gt;I chose to mount all of the electronics for this project on DIN rail. If you’re not familiar with DIN rail, it’s a standardized size and shape of metal rail that’s used to mount industrial control modules. It’s called DIN rail because it was originally spec’d by Deutsches Institut für Normung.&lt;/p&gt;

&lt;p&gt;What’s cool about DIN rail is that because it’s a popular standard, there are a lot of commercially available components from varying industries that are designed to fit it. In a way, it’s industrial control LEGO. Also, anything that &lt;em&gt;isn’t&lt;/em&gt; already designed for DIN mount can be adapted using clip-on mounting adapters!&lt;/p&gt;

&lt;p&gt;Here’s a rendering of the Arduino breakout that I designed for this project. There’s not much to it! It’s really just a screw terminal breakout for the &lt;a href=&quot;https://www.sparkfun.com/products/15795&quot;&gt;Pro Micro C&lt;/a&gt; with a few extras thrown in. Two of the ADC inputs are shifted down with resistor dividers and protected with Schottky Diodes to accommodate 10V sensors. There aren’t any sensors on the system currently, but I can imagine adding some pressure monitoring down the line so it made sense to lay some groundwork. There’s also a pair of dual-MOSFET chips providing four outputs that are capable of sinking several amps at 30V. These allow the Pro Micro to switch the solenoid valves at 12V.&lt;/p&gt;

&lt;p&gt;The board is designed to fit into an inexpensive &lt;a href=&quot;https://a.co/d/dActgUi&quot;&gt;DIN PCB carrier&lt;/a&gt; so it will mount alongside the rest of the DIN modules.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/PSA_Controller.jpg&quot; alt=&quot;3D Rendering of the controller PCB&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/PSA_Controller_Schematic.png&quot; alt=&quot;Schematic for the controller PCB&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;the-rest-of-the-din-modules&quot;&gt;The Rest of the DIN modules&lt;/h3&gt;

&lt;p&gt;…speaking of which, there’s more to the electronics than just the Arduino breakout. Here’s a shot of every module mounted on a piece of rail, just to make sure they would all fit, before they’re wired up.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/20240428_175400.jpg&quot; alt=&quot;Several DIN modules mounted on a loose piece of DIN rail&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On the left, you can see the Arduino breakout in its DIN carrier and then there are a few other things hanging out. Let’s go over them from left to right.&lt;/p&gt;

&lt;h4 id=&quot;solid-state-relay&quot;&gt;Solid State Relay&lt;/h4&gt;

&lt;p&gt;This relay allows one of the outputs on the control board to switch the 120VAC power to the air compressor. I wanted to give the controller domain over the compressor both for convenience (a standby switch can turn the entire system on and off) and for safety (a future pressure monitoring system could shut off the compressor if there was an overpressure in one of the sieve beds or the buffer tank).&lt;/p&gt;

&lt;h4 id=&quot;5vdc-power-supply&quot;&gt;5VDC Power Supply&lt;/h4&gt;

&lt;p&gt;The control board needs 5VDC to operate, and while I could have built a switching supply on board itself, it was more convenient to just snap on a MeanWell supply. Besides, this way it’s modular. If the 5V supply dies for some reason, I can replace it without doing rework on the control board. This is the smallest DIN mount 5VDC supply that MeanWell makes and it’s still over-spec for the control board, so there’s plenty of overhead for other 5V accessories in the future.&lt;/p&gt;

&lt;h4 id=&quot;12vdc-power-supply&quot;&gt;12VDC Power Supply&lt;/h4&gt;

&lt;p&gt;12VDC is used to activate all of the solenoid valves on the system. It’s also needed for the cooling fans on the condenser coil. This MeanWell supply is good up to 5A which is plenty.&lt;/p&gt;

&lt;h4 id=&quot;circuit-breaker&quot;&gt;Circuit Breaker&lt;/h4&gt;

&lt;p&gt;The air compressor is not gigantic, but it is quite a load on startup, so it seemed prudent to put a 20A breaker on it just in case it got stalled somehow. Is there likely a 20A breaker on whatever circuit you plug the machine into? Sure. This seemed like cheap insurance, though, and also gave me an easy way to manually switch the compressor on and off during testing.&lt;/p&gt;

&lt;h4 id=&quot;terminal-blocks&quot;&gt;Terminal Blocks&lt;/h4&gt;

&lt;p&gt;Several modules on the DIN rail need access to the 120VAC line. These terminal blocks give me an easy way to distribute the mains voltage to everything that needs it.&lt;/p&gt;

&lt;h3 id=&quot;putting-it-all-together&quot;&gt;Putting It All Together&lt;/h3&gt;

&lt;p&gt;Here’s a little diagram to explain how everything was wired together. It’s a bit of a rat’s nest but it’s very straight-forward. Mains voltage comes into the terminal block where it’s distributed to the compressor through a breaker as well as both of the DC power supplies. The 12V supply feeds the cooling fans and the solenoid valve MOSFETs on the control board. The 5V supply feeds the control board. And finally, the solenoid valves also connect to the controller.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/rect13352.png&quot; alt=&quot;Diagram of the wiring on the DIN rail modules&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;controller-firmware&quot;&gt;Controller Firmware&lt;/h2&gt;

&lt;p&gt;The controller firmware I used was taken directly from the Oxikit project. This is something I’ll probably change if I end up adding sensors and safety features down the line. The firmware as provided is intentionally very utilitarian, spartan, easy to parse. Have a look.&lt;/p&gt;

&lt;div class=&quot;language-c highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;c1&quot;&gt;// Full program for Arduino Uno control of Oxycon Relays and LCD units.&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Edited: 05/11/20&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Author: Robert Danger Byrd&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// For Version 5 AKA &quot;Handy Oxy&quot;&lt;/span&gt;


&lt;span class=&quot;c1&quot;&gt;// RELAY PIN ASSIGNMENT&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Defined Pin as Variable&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Defined Pin as Variable&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Defined Pin as Variable&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Fan&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Defined Pin as Variable&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// VARIABLE CREATION&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//delay variable creation&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Startup_Purge_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//delay variable creation&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Production_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//delay variable creation&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Flush_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//delay variable creation&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;long&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PreCharge_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//delay variable creation&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;// STARTUP&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Serial Port initialization&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9600&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;// SET PIN MODE FOR PINS IN PROGRAM&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;pinMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OUTPUT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;pinMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OUTPUT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;pinMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OUTPUT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;pinMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Fan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OUTPUT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;//  SET DELAY TIMING HERE&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Startup_Purge_Delay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Production_Delay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Flush_Delay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;450&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;PreCharge_Delay&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;700&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// VALVE RELAY TEST SEQUENCE&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Relay Test Sequence&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Valve Relay Test Sequence Complete&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;// STARTUP PURGE&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Relay Test Sequence&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Turn on relay&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Startup_Purge_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;// FAN CONTROL&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Program Starting...&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Relay_Test_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Fan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Fan Switched On&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;//CYCLE 1&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Charge / Sieve B Purge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Production_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;//CYCLE 2&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Charge / Sieve B Purge / Flush/PreCharge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Flush_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;//CYCLE 3&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Charge / Sieve B Charge / Flush/PreCharge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;//CYCLE 4&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Purge / Sieve B Charge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Production_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;//CYCLE 5&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Purge / Sieve B Charge / Flush/PreCharge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;LOW&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Flush_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;


  &lt;span class=&quot;c1&quot;&gt;//CYCLE 6&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//**************************************************************************&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Sieve A Charge / Sieve B Charge / Flush/PreCharge&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_A_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sieve_B_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;digitalWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Valve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PreCharge_Delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So, yeah. It sets up Serial for debug messages, defines some delays, and then loops through the PSA cycle. The philosophy here is probably that a complicated firmware is just a possible source of bugs and that if the system has a problem, we’ll probably notice by either the sound of the cycle or the quality/quantity of the O2 output. This system was created as an emergency stopgap for medical O2 production in COVID-stricken India, so keeping it simple and approachable for anyone who needs to build or maintain it takes priority over concise code, fancy watchdogs, safety interlocks, etc.&lt;/p&gt;

&lt;p&gt;In the future, I’d like to integrate an O2 sensor and a flow sensor on the output line so that the machine can adjust its own valve timing in realtime to maintain a set output volume or quality. A system with a larger buffer tank could even use pressure sensors and valve control to shut off the compressor when oxygen demand is lower. In the meantime, running the machine in continuous mode with fixed tunings is just fine to fire up a few torches.&lt;/p&gt;

&lt;h2 id=&quot;cool-dry-air-redux&quot;&gt;Cool Dry Air Redux&lt;/h2&gt;

&lt;p&gt;After wiring everything up and programming the controller, I brought up the system piece-by-piece. First I ran just the valves controller, then the controller and the valves, then everything together with the compressor. Running the compressor for a few minutes made two things apparent: the safety valve works and the condenser is going to get HOT. Of course, we expect the condenser to get hot but I wanted to feel it myself before selecting a cooling fan for the final assembly. Feeling the top of the condenser, I knew we would need significant airflow, but not hurricane force winds. Even without active cooling, the bottom of the coil was staying just above ambient temperature, so with just a little bit of help I figured the coil would be doing its job.&lt;/p&gt;

&lt;p&gt;After looking around at what was available, I finally landed on bolting a bunch of computer fans together. I know this sounds like a hack, but it’s hard to find large, low-profile, high-flow cooling fans. I did consider an electric automotive radiator fan, which would probably work, but I wanted something skinny enough to fit &lt;em&gt;inside&lt;/em&gt; the condenser coil so that there wasn’t a big spinning fan blade hanging off the front of this thing. Bolting together a bunch of smaller fans also gave me the option to add down-facing fans to cool the compressor heads.&lt;/p&gt;

&lt;p&gt;I designed some parts that I could print on my 3D printer to bolt the fans together and ended up with this monstrosity.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/20240510_151802.jpg&quot; alt=&quot;An assembly of 120mm and 80mm computer fans&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After a &lt;em&gt;lot&lt;/em&gt; of fiddling around with the mounting, I finally managed to get the fan stack suspended in the middle of the condenser coil. With the cooling in place, another potential problem showed up: The condenser works really well and the air here is really wet. The coalescing filter at the bottom of the coil is doing a good job catching water, but the mistiness inside the catch-cup made me a little nervous about the humidity of the air heading into the bottom of the sieve beds. To address this, I added a desiccant dryer in-line after the coalescing filter and filled it with fresh desiccant.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/nanpudryer.jpg&quot; alt=&quot;Inexpensive desiccant dryer&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Not only will this keep the air dry, but because the desiccant changes color as it gets saturated, it will act as a visual indicator for how much of a water problem I actually have.&lt;/p&gt;

&lt;h2 id=&quot;complete-assembly&quot;&gt;Complete Assembly&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/FullBuild.jpg&quot; alt=&quot;Several views of the completed assembly&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;system-tour&quot;&gt;System Tour&lt;/h2&gt;

&lt;p&gt;Here is an illustration of the completed system that I think is a little easier to parse than the original photograph. Let’s take on last tour of the whole thing now that it’s all in one piece.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/outline.png&quot; alt=&quot;Illustration of the complete assembly&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From bottom to top: The 2HP oil-free electric air compressor sits on the base of the hand-truck that serves as the frame. The running capacitor for the compressor is mounted to the side. Just above that is the condenser coil made from 25’ of 3/8” soft copper tubing. The first section of the condenser is covered in an insulating foam sleeve to prevent condensation from collecting in the riser and dripping into the compressor. At the end of the condenser is a safety valve to keep the system pressure below 40psi. After that, a coalescing filter to remove condensed water from the air stream and a desiccant dryer to catch any remaining humidity.&lt;/p&gt;

&lt;p&gt;Suspended in the middle of the condenser coil is the cooling fan stack. This comprises 4 120mm fans pulling air across the coil and 2 80mm fans blowing air down onto the compressor heads.&lt;/p&gt;

&lt;p&gt;On the back of the frame, I’ve mounted the sieve beds, which can be seen poking up over the top of the power and control section. The buffer tank sits on the side of the frame (and got a green OXYGEN sticker). On the other side of the frame, I mounted some 3D printed cord keepers for the power cable.&lt;/p&gt;

&lt;p&gt;The DIN rail with all of the power and control modules lives just above the condenser. The existing cross-beam on the hand-truck makes a convenient support for securing wires.&lt;/p&gt;

&lt;p&gt;Above the DIN section you can see the output end of the sieve beds with their respective pressure gauges. And then on the handle of the hand-truck, a 3D printed mount for the output pressure regulator.&lt;/p&gt;

&lt;h2 id=&quot;how-to-test-it&quot;&gt;How To Test It&lt;/h2&gt;

&lt;p&gt;So how do we know it’s making oxygen? Well, there are quantitative methods: Electronic O2 Sensors, chemical titrations, etc. But it’s not actually important to me at this point what the exact concentration is, I just need it to feed a torch. Eventually, I’ll likely invest in an O2 meter so I can tune the system and get the most out of my zeolite, but the first tests will just be determining whether oxygen enriched air is coming out of the output at all.&lt;/p&gt;

&lt;p&gt;My first test was just the first thing that came to mind. I rolled up a piece of printer paper and lit it on fire, allowing it to burn out and smolder before dropping it into a pyrex measuring cup. Then I turned on the system and attached a piece of hose to the output, aiming it into the measuring cup. Sure enough, the smoldering paper began to burn so brightly that it was hard to look at, leaving behind a white ash.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/Screenshot_20240601_183940_Gallery.jpg&quot; alt=&quot;Still image from the first test video of paper burning in oxygen&quot; /&gt;&lt;/p&gt;

&lt;p&gt;With confirmation that the air coming out of the system was indeed enriched, I moved on to testing a small oxy-fuel torch. I cut the oxygen fitting off of a Mag-Torch brazing torch and jammed the hose into the output on the concentrator. Without a check-valve or a flashback arrestor of any kind, I was very careful to keep the test short and to pay attention to the order in which I was pressurizing and depressurizing the fuel and oxygen. After tweaking the output regulator, I was able to make a steady blue flame using MAPP gas as my fuel source. MAPP burns a lot like Acetylene with a yellow, sooty flame at atmospheric pressure and oxygen, so the fact that the resulting flame was sharp and blue with no soot suggests an adequate oxygen concentration.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2024/building-an-oxikit-o2-concentrator-part-2/Screenshot_20240501_193100_Gallery.jpg&quot; alt=&quot;Still image from the second test video of a small torch burning&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Encouragingly, I had to dial the output regulator &lt;em&gt;way&lt;/em&gt; down to keep from blowing out the torch, meaning that there’s a lot more capacity on tap.&lt;/p&gt;

&lt;h2 id=&quot;finishing-touches&quot;&gt;Finishing Touches&lt;/h2&gt;

&lt;p&gt;Before I press this machine into service, there are a few things that need to happen. First, I need to assemble an oxy-fuel manifold for my torches. Parts are en route for that project now. The manifold will allow me to keep my torches connected and adjusted with ball valves to switch them on and off, it will also have needle-valve controlled outputs on the fuel side for things like bunsen burners. On top of that, the manifold will act as a convenient point to attach flashback arrestors for the entire system. I’ll post more on the torch manifold after it’s completed.&lt;/p&gt;

&lt;p&gt;Another last minute addition to the machine will be an hour meter to keep track of how many hours of service the sieve beds have seen. This will help me determine how much life can be squeezed from a batch of molecular sieves. Down the road, after I have an idea of how long they &lt;em&gt;should&lt;/em&gt; last, the hour meter will act as a diagnostic tool. If the zeolite is wearing out too fast, there’s a problem.&lt;/p&gt;

&lt;h2 id=&quot;sauce&quot;&gt;Sauce?&lt;/h2&gt;

&lt;p&gt;I don’t have a step-by-step assembly guide or anything, but if you’d like to get your hands on any of the original work I did for this project including the CAD files or PCB layouts, you can find it in the &lt;a href=&quot;https://github.com/NPoole/PSA_Oxygen_Concentrator&quot;&gt;github repo&lt;/a&gt;. Anything that’s missing from my documentation of this project can probably be found in the original &lt;a href=&quot;https://oxikit.com/&quot;&gt;Oxikit documentation&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Jun 2024 00:00:00 -0400</pubDate>
        <link>https://nickpoole.me/2024/06/01/building-an-oxikit-o2-concentrator-part-2/</link>
        <guid isPermaLink="true">https://nickpoole.me/2024/06/01/building-an-oxikit-o2-concentrator-part-2/</guid>
        
        <category>Oxygen_Concentrator</category>
        
        
      </item>
    
      <item>
        <title>Building an Oxikit O2 Concentrator (Part 1)</title>
        <description>&lt;h2 id=&quot;running-out-of-o2&quot;&gt;Running out of O2&lt;/h2&gt;

&lt;p&gt;Earlier this year, I was working on an experimental tube when I ran out of oxygen for my torch. Usually this is just kind of annoying, since I work with borosilicate glass there’s no harm in losing my hot flame, I just give it a light annealing pass with my MAPP gas torch and come back to it later. This time, however, I was in the middle of the pinch. The pinch is where the base of the tube is heated until it’s extremely soft and the pass-through wires are pinched into it, forming a vacuum-tight seal. I was heating up to make the final pinch when my flame started to die and this essentially ruined the tube base. I was so angry that I vowed never to run out of oxygen again, and there was only one way to do this: pull it out of the fucking air.&lt;/p&gt;

&lt;p&gt;This isn’t anything new, glass shops all over the world run oxygen concentrators to feed their torches. And why not? Hauling around compressed, or liquefied, oxygen is a pain in the ass. There are even companies that refurbish worn out medical oxygen concentrators for this purpose. Originally, this was my plan, to buy a worn out medical unit and fix it up. It turns out that this is harder to do than people say. Not for technical reasons, but for logistical reasons. Most medical supply resellers don’t list their busted equipment, and you can’t buy the not-busted equipment because it’s still medical equipment and you — presumably — don’t have a prescription. So you end up cold-calling a bunch of places to ask what they’ve got and then convince them to price it for you. Otherwise, you can wait for one to show up on a local marketplace board or auction site, but an alarming number of these are either scams or in awful condition. At the end of this process, if you’re lucky, you pay under $500 for an oxygen concentrator that will make 5L/min of &amp;gt;90% O2 for a hundred hours or so before you need to open the canisters and change out the zeolite anyway (we’ll talk about zeolite in a minute).&lt;/p&gt;

&lt;p&gt;You could go the non-medical route, of course, there are companies that build “oxygen plants” for industry, but these are usually quite large, high-output installations that cost $$$ in exchange for high-reliability and industrial compliance.&lt;/p&gt;

&lt;p&gt;So what can you do if neither of those sound appetizing? You can build one from scratch. Maybe a decade ago this would have been harder to do, but now it’s shockingly approachable. In fact, there’s even an open source hardware project!&lt;/p&gt;

&lt;h2 id=&quot;oxikit-project&quot;&gt;Oxikit Project&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;India is battling with the worst 2nd wave of Covid-19 Pandemic. Several big hospitals across India are relying on daily oxygen supplies but they are not getting enough to keep some as backup in case of emergency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While poking around the internet trying to learn the working principle behind commercial oxygen concentrators — and watching a lot of really excellent lectures from Indian universities on YouTube — I stumbled across the website of &lt;a href=&quot;https://oxikit.com/&quot;&gt;Oxikit, LLC&lt;/a&gt;. They’ve designed an open source oxygen concentrator that can be built from off-the-shelf parts to help address the shortage of medical oxygen in rural India resulting from the 2nd wave of COVID infections. They claim this machine can be built for under 3,000 USD and supply 15-20L/min of 94-96% pure oxygen. It’s hard to imagine how many lives have been saved by this project.&lt;/p&gt;

&lt;p&gt;The documentation for the project is surprisingly complete and well-curated for an open source hardware project that was spun up so quickly. There’s a complete bill-of-materials, several system diagrams, and even a set of &lt;a href=&quot;https://youtube.com/playlist?list=PL4O1RQEiLpHBJ0i1zqe-CZk1p_NTtGl76&amp;amp;si=5eQMRAuQ5RKtakTF&quot;&gt;instructional YouTube videos&lt;/a&gt; showing how to construct the Oxikit concentrator step-by-step.&lt;/p&gt;

&lt;p&gt;I immediately knew that this was the answer to my torch problem. At first, $3K sounds pretty steep, but looking at the BOM, there are a lot of corners I can cut because no one will be breathing this oxygen, so materials sourcing and component reliability aren’t as paramount. Also, I already had a lot of the components that I needed. Before we talk about my implementation of the Oxikit design, let’s talk about the working principle: Differential Adsorption.&lt;/p&gt;

&lt;h2 id=&quot;pressure-swing-adsorption-oxygen-concentrators&quot;&gt;Pressure Swing Adsorption Oxygen Concentrators&lt;/h2&gt;

&lt;p&gt;An oxygen concentrator has a lot of hoses and valves and stuff that all look very impressive, but the actual star of the show is a sand-like substance in the canisters that everything else is just there to support. This substance is zeolite: a microporous, crystalline aluminosilicate. In fact, it’s a very specifically structured form of zeolite called molecular sieves. If you’re familiar with the world of chemistry, you’ll have heard of these. Molecular sieves are made from different materials with different pore sizes and are used in a wide range of applications. In fact, if you know chemistry, the theory behind PSA oxygen concentration is going to sound a lot like column chromatography.&lt;/p&gt;

&lt;p&gt;For all of the non-chemists, molecular sieves are little balls of ceramic material with a very carefully controlled pore size on the order of interatomic distances, usually measured in ångströms. One common molecular sieve is the 5A sieve, which has pores that are just the right size to adsorb water molecules and remove them from solution. These are used to dehydrate and store hygroscopic reagents by literally trapping water molecules that bump into them. The molecular sieves used in PSA oxygen concentrators are usually much smaller, having a larger surface area per mass, and &lt;em&gt;usually&lt;/em&gt; have a 10A pore size — with 5A sieves are used in some applications. These sieves, “0.4-0.8mm 13X” sieves, have the consistency of fine playground sand — although they feel much more “slippery” because of their uniform semi-spherical shape. These zeolite sieves will selectively adsorb nitrogen molecules at a higher rate than oxygen. This means that atmospheric air entering one end of the sieve bed will leave the other end oxygen-enriched. Pretty quickly, of course, the sieve bed will become saturated, so what do you do then?&lt;/p&gt;

&lt;h4 id=&quot;the-psa-cycle&quot;&gt;The PSA Cycle&lt;/h4&gt;

&lt;p&gt;The trick is to operate two sieve beds at the same time and “swing” the pressure back and forth between them. Take a look at the diagram below:&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/PSA-operating-cycle.png&quot; alt=&quot;illustrated diagram of the PSA cycle&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Image Credit: Ortiz-Torres, et al. (2023). Active Fault-Tolerant Control Applied to a Pressure Swing Adsorption Process for the Production of Bio-Hydrogen. Mathematics. 11. 1129. 10.3390/math11051129. CC-BY 4.0&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;The adsorption capacity of the sieves will increase at higher pressures and we can exploit this property to grab nitrogen when we want to and then flush it out for the next cycle. Let’s focus on what’s happening in just one sieve bed:&lt;/p&gt;

&lt;h5 id=&quot;phase-one-pressurization&quot;&gt;Phase One: Pressurization&lt;/h5&gt;

&lt;p&gt;During the first phase, air is pumped into the sieve bed. In our case this pressure will reach about 30psi.&lt;/p&gt;

&lt;h5 id=&quot;phase-two-adsorption&quot;&gt;Phase Two: Adsorption&lt;/h5&gt;

&lt;p&gt;Under pressure, the nitrogen in the air will be selectively adsorbed onto the sieves, leaving oxygen free to move between them.&lt;/p&gt;

&lt;h5 id=&quot;phase-three-depressurization&quot;&gt;Phase Three: Depressurization&lt;/h5&gt;

&lt;p&gt;Now, the gas in the sieve bed is allowed to escape the opposite end. This gas is mostly oxygen, as it’s leaving the end with the highest concentration of oxygen and adsorbed nitrogen is slow to leave the sieves as the canister depressurizes. But this leaves a lot of nitrogen still in the canister, simply repressurizing at this point would result in a lower yield. We need to do one crucial step first.&lt;/p&gt;

&lt;h5 id=&quot;phase-four-purge&quot;&gt;Phase Four: Purge&lt;/h5&gt;

&lt;p&gt;During the purge phase, oxygen enriched air is flowed through the canister in the &lt;em&gt;opposite&lt;/em&gt; direction. This flushes the nitrogen out and leaves the sieves ready to adsorb more nitrogen. The question you might be asking now is, where do we get this oxygen enriched air? The answer: Our other sieve bed.&lt;/p&gt;

&lt;h5 id=&quot;do-the-swing&quot;&gt;Do the Swing&lt;/h5&gt;

&lt;p&gt;The reason this technique is called pressure &lt;em&gt;swing&lt;/em&gt; adsorption is because the two sieve beds are operated out of phase with one another such that while one is pressurizing, the other is depressurizing. This means that while one is adsorbing, the other can be purging, and we can divert some of the output oxygen from one sieve bed to flush the other. This process can be repeated with a period of a few seconds to produce a steady stream of highly oxygen-enriched air.&lt;/p&gt;

&lt;h4 id=&quot;getting-your-hands-on-sieves&quot;&gt;Getting Your Hands on Sieves&lt;/h4&gt;

&lt;p&gt;You would think that such a magical material would be hard to come by, right? Or at the very least, extremely expensive. Luckily, they’re used in a LOT of industries for gas purification, desiccation, and exhaust scrubbing, so they’re made in massive amounts. This means that the cost for &lt;a href=&quot;https://www.aliexpress.us/item/3256805263376376.html&quot;&gt;0.4-0.8mm 13X zeolite sieves on AliExpress&lt;/a&gt; is about $50/kilo. About 3 kilograms of sieves are required for an Oxikit sized concentrator, so we’re talking about $150 worth of material. This zeolite will eventually wear out — although we do some clever things to slow this down as much as possible — but even with wear, these sieves will operate for hundreds of hours before losing enough efficacy to need replacing.&lt;/p&gt;

&lt;h2 id=&quot;the-build&quot;&gt;The Build&lt;/h2&gt;

&lt;p&gt;My oxygen plant would follow the Oxikit plan pretty closely, so the first order of business was to acquire the PVC plumbing parts and the zeolite. My zeolite arrived in 0.5 kilo vacuum sealed foil bags within just a few weeks of ordering from China. The PVC could mostly be sourced from a local hardware store, but because it’s all 3” Schedule 40, some of the fittings are a little hard to find. I ended up ordering all of mine online. It’s important that you use Schedule 40 pipe and not DWV, because the latter is not pressure rated and could crack or explode under pressure. Pressurizing gas inside of Schedule 40 PVC is already wildly out of spec, but at pressures of 30 psi and below, the risk is somewhat minimal.&lt;/p&gt;

&lt;h4 id=&quot;sieve-canisters&quot;&gt;Sieve Canisters&lt;/h4&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231012_215401.jpg&quot; alt=&quot;A box full of PVC assemblies made from bushings and push-connect air fittings&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here you can see all my end-caps staged for assembly. Every part needs to be cleaned, primed, and glued together using PVC cement. Here you can see two caps for each sieve bed and then a third set of caps for an empty canister that will be used as a buffer tank to remove the pressure oscillations from the output stream. You might think it’s as easy as just filling some 3” PVC with sieves and slapping these on the ends — and it almost is — but there are few things we need to do first.&lt;/p&gt;

&lt;p&gt;Because the canisters are constantly being pressurized and depressurized, and being subjected to flow in both directions, the sieves will have a tendency to shift back and forth in the canister. This shifting will pulverize the sieves over time, rendering them ineffective and contaminating the output stream with fine zeolite dust. To avoid this, we need to “pre-load” the sieves so that they’re under constant mechanical pressure and thus &lt;em&gt;can’t&lt;/em&gt; shift during the pressure swing. This is achieved using a piston and a spring. The Oxikit uses a pair of fairly exotic stainless steel, flat, peak-to-peak wave springs for this. That makes sense for their application, the stainless steel will have a long service life without reacting in the oxygen-rich environment and the wave springs can achieve a high spring ratio in a low profile. I opted for a cheaper and more accessible option. I found &lt;a href=&quot;https://hypercoilonline.com/transfer-assist-springs-50-rate/&quot;&gt;these&lt;/a&gt; transfer assist springs for racing suspension.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231018_130228.jpg&quot; alt=&quot;A pair of large coil springs with dark blue powder coat&quot; /&gt;&lt;/p&gt;

&lt;p&gt;They have the same spring rate as the springs that are spec’d from Oxikit, but they’re normal coil springs. They’re not going to be as resistant as the stainless steel, but at least they’re powder coated. Oxygen will transport through the epoxy layer and slowly rust the spring, but I expect they’ll have an adequate service life and because this is a non-medical application, there’s nothing wrong with a little contamination in the output stream.&lt;/p&gt;

&lt;p&gt;Another difference in my design is the piston construction. The Oxikit project has a very clever piston assembly made out of modified PVC fittings. I think this is a great solution for a machine to be built with no custom-manufactured components. In my case, however, I’m in no rush and I have a 3D printer, so I designed a piston and a spring seat to print on my trusty Creality CR10.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231025_211356.jpg&quot; alt=&quot;PVC end caps with pistons and springs inserted&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The spring seat sits flat against the PVC bushing and keeps the spring centered in the assembly. The piston is permeable, so that the process gas can run through it, but makes a tight fit with the inside of the canister. The face of the piston is covered with fine stainless steel mesh and two layers of non-woven filter material. The filter material is allowed to drape the sides of the piston to act as a piston ring and form a seal between the piston and the cylinder wall, preventing zeolite from being blown past the piston. A similar arrangement of screens can be found at the other end as well, I also modeled and printed the screen support for this instead of modifying an off-the-shelf fitting. The piston assembly is built around a pair of threaded PVC fittings so that the sieves can be packed into the canister and then the piston assembly can be screwed down onto the end, compressing the spring and applying the pre-load.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231025_210604.jpg&quot; alt=&quot;Both sieve canisters and the buffer tank glued up and ready for charging and final assembly. The sieve canisters are about 26&amp;quot; inches long in total, the buffer tank is 18&amp;quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the photo above, one of the sieve beds is considerably shorter than the other because I wasn’t able to make some of the fittings seat all the way. This bothered me so much that I ended up buying more parts and rebuilding that sieve canister. The next step is to fill them with zeolite. The Oxikit videos recommend using an air hammer at a very low setting to agitate the sieves as you fill the canister, this ensures that they’re tightly packed and won’t settle during operation, taking up the slack in the pre-load spring and getting pulverized over time. I opted to use a Theragun-style vibrating massage gun, which was plenty powerful enough to make the sieves dance in the canister. During this operation it’s important to wear a good dust mask because it will generate a fair amount of mineral dust that’s very bad for your lungs. I had a half-face respirator with P100 pre-filters handy, so I just wore that.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/Screenshot 2023-12-21 160410.png&quot; alt=&quot;Top down view of a canister filled with molecular sieves being vibrated with a massage gun&quot; /&gt;&lt;/p&gt;

&lt;p&gt;After filling the sieve canisters and making sure that they were well-packed, all that was left was to screw down the piston assemblies. This was achieved with two strap-wrenches and a lot of elbow grease. Before the assembly went on, however, the threads got a liberal coating of thread compound to seal it against gas leaks. Thread compound was used on all PVC threaded connections as opposed to Teflon tape because the tape tends to split parts if you over-torque it or apply too much. And with that, that’s our sieve beds and buffer tank finished!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231122_204829.jpg&quot; alt=&quot;Both sieve beds and the buffer tank laying on the floor with a coil of air hose and various pneumatic valves and fittings.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, I had been gathering the pneumatic valves and fittings to plumb everything together. But before we talk about valves, we need to talk about our compressed air source.&lt;/p&gt;

&lt;h4 id=&quot;cool-dry-oil-free-compressed-air&quot;&gt;Cool, Dry, Oil-Free, Compressed Air&lt;/h4&gt;

&lt;p&gt;The air compressor will the be most expensive single component of the build, even counting the zeolite in the sieve beds. You may think that you could run your shop compressor into it, and if you have an extremely fancy shop then maybe you could, but my shop compressor is not particularly fancy and the air that comes out of it is well-contaminated with water and oil. This is a problem for multiple reasons. Water will clog and destroy the molecular sieves, as will oil. But oil has an even more disastrous effect on the system, because after the sieves it will be in contact with compressed oxygen and this could potentially cause it to rapidly oxidize, resulting in fire or explosion.&lt;/p&gt;

&lt;p&gt;The compressor pump that Oxikit specs for this task is a 2HP, 2-cylinder, electric diaphragm pump. Diaphragm pumps are great because they contain no oil and so they introduce no oil to the air stream. The downside is that they’re more expensive than oil-sealed piston pumps for the same flow rate. Oxikit has offered this pump in their shop for $600, which is about the going rate, but it hasn’t been in stock for some time and I’d hate to divert a pump from medical use. I found that a nearly identical pump was being sold by California Air Tools as a replacement motor for their compressors at about &lt;a href=&quot;https://www.globalindustrial.com/p/sp-9421-2-hp-ultra-quiet-oil-free-air-compressor-motor&quot;&gt;half that price&lt;/a&gt;. This compressor pump is available from a number of distributors including Global Industrial, Grainger, Northern Tool, and Tractor Supply. I ended up ordering mine from Tractor Supply and it arrived in about a week.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231206_123750.jpg&quot; alt=&quot;A 2HP electric compressor being held aloft with some effort by one hand.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The pump comes with a pair of mufflers, an elbow for the output, and the running capacitor. Oddly, it doesn’t come with a plug for the unused output port, but those are easy enough to find. Although the specs say that the pump has 3/8” NPT ports, this is not true. The ports in the cylinders themselves are actually 1/2” NPT and the included elbow is a 1/2”-3/8” reducer. You’ll need a 1/2” NPT plug. This little thing is DENSE, it’s a 2HP electric motor. It also comes with a set of rubber isolators that thread into the feet. I ended up buying a separate set because I needed a lower profile stud, but it’s nice that they’re included because they probably wear at a similar rate to the pump. This is intended to be a replacement kit, after all.&lt;/p&gt;

&lt;p&gt;Now we have oil-free air, but it’s going to be quite warm coming out of the compressor and if you live in the southeastern US like me, it’s gonna be WET. To solve these problems, we’ll employ a large copper coil to cool the air. Cooling the air will also lower its capacity to hold moisture, so we’ll condense a lot of the water out of it as well. I made my condenser out of 3/8” soft copper tubing. I suppose it would be possible to use a pre-build condenser for this application. Something like an automotive heater core would probably work fine, and you might even get away with a PC water cooling radiator, but 30psi might be asking a lot of some of the cheaper offerings. If you don’t mind the tedium of bending copper tubing, it’s the cheapest and most effective solution, and it’s the solution recommended by Oxikit. My coil will sit overtop of my compressor, so I started it with a vertical leg that I covered in foam insulation to prevent condensed water from running back into the compressor. The other end of the coil connects to a pressure safety valve to keep the system below 40psi as well as a water trap so that condensate running out of the coil can be captured and drained.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231212_122611.jpg&quot; alt=&quot;A large coil of copper tubing with black plastic support brackets attached.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I designed and 3D printed a bunch of brackets to hold the coil in position, keep the coil spacing even, and prevent it from vibrating too much. Eventually, the coil would be rigidly mounted to a frame that’s isolated from the pump with rubber isolators.&lt;/p&gt;

&lt;h4 id=&quot;pneumatic-control&quot;&gt;Pneumatic Control&lt;/h4&gt;

&lt;p&gt;The final challenge is to control the flow of compressed air between all of the parts of the system. To achieve this, I opted for cheap &lt;a href=&quot;https://www.amazon.com/gp/product/B095VTDKHL/ref=ppx_yo_dt_b_asin_title_o03_s00&quot;&gt;TAILONZ solenoid valves&lt;/a&gt; on Amazon. These will inevitably fail, but at $16/pc, they’re replaceable. The system is plumbed with 1/2” OD PU air tubing and quick-connect fittings.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/Screenshot 2023-12-21 164551.png&quot; alt=&quot;Diagram of the Oxikit system found in the assembly docs&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;System diagram found in the Oxikit Docs&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;There are two pressure regulators on the system. One is after the compressor to ensure that the system is only exposed to about 30psi. The other is the output regulator which gets set to just a few psi. Make sure that anything with a gauge on it after the sieve beds is equipped with an &lt;strong&gt;oil-free&lt;/strong&gt; gauge. Two oil-free gauges designed for oxygen service were installed on the sieve beds as well to monitor the pressure swing during operation. All of these parts were sourced extremely cheaply from Amazon.&lt;/p&gt;

&lt;h4 id=&quot;mechanically-complete-system&quot;&gt;Mechanically Complete System&lt;/h4&gt;

&lt;p&gt;The Oxikit system is built on a wooden frame, which is a cheap and sturdy solution but not very convenient for my application so I chose to build mine on wheels. Originally, I started to design a custom chassis using aluminum t-slot extrusion, but I quickly noticed that I was essentially designing a hand-truck, so instead I commandeered a hand-truck from my shop and used that. I modeled and printed custom mounting brackets for everything and attached them with M5 hardware. The compressor was bolted to the platform using rubber vibration isolating standoffs.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/posts/2023/building-an-oxikit-o2-concentrator-part-1/20231218_001627.jpg&quot; alt=&quot;The mechanically complete oxygen concentrator waiting on electronics.&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That’s the whole thing, completely assembled except for the electronics. I have yet to finish the electronics portion, but I plan to attach DIN rail to the front of the chassis and use that to mount the electronics. Keep an eye out for part 2, where I’ll elaborate on the electronics and we’ll test the system!&lt;/p&gt;
</description>
        <pubDate>Mon, 18 Dec 2023 00:00:00 -0500</pubDate>
        <link>https://nickpoole.me/2023/12/18/building-an-oxikit-o2-concentrator-part-1/</link>
        <guid isPermaLink="true">https://nickpoole.me/2023/12/18/building-an-oxikit-o2-concentrator-part-1/</guid>
        
        <category>Oxygen_Concentrator</category>
        
        
      </item>
    
      <item>
        <title>A Vacuum Diode for Make: Magazine</title>
        <description>&lt;p&gt;After my presentation at &lt;a href=&quot;https://youtu.be/ak_-2BR225o?si=kjINmBJsjLsR_Wap&quot;&gt;Hackaday Superconference 2022&lt;/a&gt; I was asked by my friend David to write a piece for Make: Magazine. I originally wrote the article around the diode tube that I presented at Supercon. However, because I had built that tube hastily in the days before the conference, I didn’t have a lot of good photos of the process. I decided the best thing to do was to make another tube specifically for the Make: article and take care to document the process this time.&lt;/p&gt;

&lt;p&gt;The article ran in &lt;a href=&quot;https://www.makershed.com/products/make-magazine-volume-86-print&quot;&gt;Make: Volume 86&lt;/a&gt; but couldn’t contain all of the photos that I took at full resolution, so I thought it would be fun to go over them in more detail here.&lt;/p&gt;

&lt;h3 id=&quot;the-ol-flare-and-pinch&quot;&gt;The Ol’ Flare and Pinch&lt;/h3&gt;

&lt;p&gt;The hardest part of making a vacuum tube is fabricating the base, where the pins pass-through from atmosphere to the high-vacuum side. The easiest way to achieve this as a hobbyist is the pinch method. With the proper combination of metal and glass, a pinch seal can be extremely robust. Because I prefer to work with borosilicate glass, my feed-through metal needs to be Tungsten (although Molybdenum foil also works as well as specialty alloys such as Kovar). To make a vacuum-tight pinch, the Tungsten wire needs to be cleaned to remove any oils and other junk and then treated with a flame to apply a layer of oxide. The Tungsten oxide is what actually binds the metal to the glass so it’s important to have a uniform film. This sounds more difficult than it is. I’ve made good working seals by cleaning the wire with alcohol and then heptanes, passing it over a flame until white hot, then rubbing off the loose oxide with a cotton swab. This method is demonstrated by jdflyback in this &lt;a href=&quot;https://www.youtube.com/watch?v=vfvfgGj521M&quot;&gt;YouTube video&lt;/a&gt; about building a handmade triode.&lt;/p&gt;

&lt;p&gt;Because Tungsten is brittle, I first spot-weld short Tungsten pins onto longer pieces of Nickle wire. The Nickle is more mechanically forgiving and readily welds to the Tungsten, while the Tungsten portion wets to the glass and creates our seal.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230618_235616.jpg&quot; alt=&quot;three pins assembled in a clamp. Each is made from a thin piece of Tungsten wire with thicker pieces of Nickel wire welded to either end.&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Pins being prepared in my extremely high-tech clamping fixture&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;Once the pins are prepared, we need a piece of glass to pinch them in. The glass needs to be a smaller diameter than the tubing for the envelope of the tube so that once it’s pinched, it still fits inside. That’s why the end is flared, to make it easier to join with the envelope.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230618_222335.jpg&quot; alt=&quot;A small piece of glass tubing with a flared end&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Behold. A bad, small, trumpet.&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;To make the flare, I simply chucked up the tubing in a power drill and heated the end with a MAPP gas torch while turning it. I nudged it gently with a tool to get the end to flare. Ideally, I would do this in the glass lathe, but I haven’t made a collet to hold these small parts. After the flare is made, I pre-flatten it just enough to support the wires before the pinch.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230618_230734.jpg&quot; alt=&quot;The small piece of glass tubing with a flared end held in a small wire fixture beside a large piece of glass tubing&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Here you can see the way that the pinch will fit in the envelope.&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;To actually make the pinch, the pins are inserted into the flare and then the flare is heated to softness with an oxy-propane flame. I usually make a preliminary pinch, to capture the pins in place before heating the glass more thoroughly to make the final pinch. I’ve tried various tools to do the pinch. First I used smooth jawed pliers, but it’s difficult to make an even pinch that way because they don’t close parallel. Then I tried large tweezers, because they’re slightly more parallel but it’s difficult to put enough pressure on the pinch. I have my sights set on a pair of smooth jaw, brass parallel pliers which I’ve yet to try, but I suspect will work quite well.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_001855.jpg&quot; alt=&quot;The small piece of glass tubing with a flared end, now flattened with thin wires protruding through the flattened portion&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;This seal may not be pretty, but it did work!&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;h3 id=&quot;assembling-the-active-elements&quot;&gt;Assembling the Active Elements&lt;/h3&gt;

&lt;p&gt;This is the base that we’ll build the rest of the diode on top of. For this directly heated diode, we’ll just need two elements: a tungsten filament, and a coil of wire to act as the plate. I formed the coil out of Nickel wire around the shaft of a screwdriver and then made filament supports out of Nickel wire as well. All of these parts were spot welded to the pins on the base before getting a thorough cleaning with alcohol and heptanes. After the washing, but before being welded into the envelope, the assembly gets an evaporable getter (the small ring at the top). The getter contains Barium metal which we’ll evaporate after the tube is evacuated in order to sequester any oxygen molecules that migrate off of the metal during operation. This helps to maintain the integrity of the vacuum.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_012035.jpg&quot; alt=&quot;The tube base with a coil and filament connected&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Ready for action&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;Now I just need to stuff all of this into a piece of glass tubing. Here’s an idea of how the flare fits into the envelope.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_012308.jpg&quot; alt=&quot;The tube base assembly sitting in a piece of tubing such that the flare sits against the open face of the tube&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Here&apos;s the fitup of the unwelded part&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;While the piece is upright like this, the flare was tacked in place with a small oxy-propane flame. Then the piece was moved to the lathe so finish up the glass seal around the base. Careful heating and gentle pressure to prevent it from collapsing resulted in a serviceable joint.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_014321.jpg&quot; alt=&quot;The tube base assembly welded into a piece of tubing&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;...and now with the welded joint.&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;This tubing is sized to fit into a quick connect on the vacuum system, but to aid the separation, I heat the tubing above the assembly and pull it to make a neck.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_015512.jpg&quot; alt=&quot;The tube assembly now has a thin section in the middle&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;This neck in the tubing will make it easier to close off after evacuation.&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;h3 id=&quot;big-succ&quot;&gt;Big Succ&lt;/h3&gt;

&lt;p&gt;And now we’ve reached arguably the easiest, but most nerve-wracking stage: Evacuation. The whole assembly goes into a compression fitting at the top of the evacuation bench. This system will be the subject of a whole other write-up, but it’s essentially a collection of vacuum pumps and gauges.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_023753.jpg&quot; alt=&quot;The tube assembly is upside-down and connected to a vacuum apparatus&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Pumping down to 10^-5 mbar&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;During pumpdown, the tube is heated with a propane torch to drive off any adsorbed water. The internals are heated with an induction coil. Finally, the filament is powered to a dim glow to drive out oxygen.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_024747.jpg&quot; alt=&quot;Close-up of the filament glowing inside the tube assembly&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Signs of life! This is always satisfying&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;And now the step where I can ruin everything extremely quickly! Gently heating the neck of the tube with a propane torch until it begins to soften and close in on itself, I use my other hand to twist and pull the tube away from the vacuum system. If all goes well, both pieces of glass will remain sealed, and the tip-off will be complete.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_030106.jpg&quot; alt=&quot;Close-up of the tube closed off and removed from the evacuation bench&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Only one thing left to do and this tube is finished&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;After the tube is tipped off, the only thing left to do is to fire the getter. To do this, I use an induction heater designed to loosening rusted bolts. I bought mine on eBay for under $200. All you have to do is put the coil around the tube and line it up so it’s concentric with the getter ring. After a few seconds, the ring will get red hot and you’ll see a mirror developing on the glass above it, this is the getter material. This mirror of reactive Barium metal will react with oxygen in the tube to keep the vacuum clean.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_030554.jpg&quot; alt=&quot;Close-up of the tube from the previous image with a silvery deposit on the inside top of the tube&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;The diode is complete!&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;h3 id=&quot;gblowing-filament&quot;&gt;G(B)lowing Filament&lt;/h3&gt;

&lt;p&gt;With the tube complete, I archived my photos and sent them off to Make: Magazine. In the meantime, I put the finished tube on my bench for testing. Sure enough, it’s a diode.&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_032503.jpg&quot; alt=&quot;Close-up of the tube in a test stand with a glowing filament&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;Look at that beautiful glow&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;Of course, in the process of taking these photos, I got a little carried away with the filament current and tested it to destruction. That’s fine, I got the photos I needed. Besides, look at the beautiful Tungsten mirror it made:&lt;/p&gt;

&lt;figure&gt;
    &lt;img src=&quot;/assets/images/posts/2023/a-vacuum-diode-for-make-magazine/20230619_035808.jpg&quot; alt=&quot;Close-up of the tube with a blown filament&quot; /&gt;
    
        &lt;figcaption class=&quot;caption-text&quot;&gt;If you&apos;re not testing to destruction, are you even testing?&lt;/figcaption&gt; 
    
&lt;/figure&gt;

&lt;p&gt;I’m looking forward to building a curve tracer so that I can properly characterize these devices, but for now I’m just happy that several months later this tube still hasn’t leaked up.&lt;/p&gt;
</description>
        <pubDate>Sun, 10 Dec 2023 00:00:00 -0500</pubDate>
        <link>https://nickpoole.me/2023/12/10/a-vacuum-diode-for-make-magazine/</link>
        <guid isPermaLink="true">https://nickpoole.me/2023/12/10/a-vacuum-diode-for-make-magazine/</guid>
        
        <category>DIY_Vacuum_Tubes</category>
        
        
      </item>
    
  </channel>
</rss>
