Sodastream bottle filling faucet

A few years ago my wife and I decided that we no longer wanted to haul plastic water bottles from the store. A partly ecologically driven but just as much because we no longer had the space to store a monthly supply of water while it just flow from the faucet.

We only had a few ‘problems’ to overcome:

  • We have a resin based water softener. While it shouldn’t be a real problem to drink this water, it is not advised.
  • I personally don’t like the chlorine taste of tap water (my wife doesn’t mind)
  • We mostly drink sparkling water. To this day this does not directly come from the tap without some additional hardware.

All those were easy enough to overcome:

  • We branched the water supply before the water softener
  • We added a water filter to improve the taste of the water
  • We bought a Sodastream to add CO2 to the water. We went with the model with the glass bottles: the plastic ones have an expiration date and that, while better, would still add to the plastic waste pile

To improve the value proposition of this whole setup we also invested in a larger CO2 canister of 4 kg with an adapter hose. This reduces the cost of CO2 from ±30 €/kg to only ±6 €/kg. Since we both like our water with plenty of carbonation that cost saving adds up quickly.

Since cold water can hold more CO2 than room temperature water we pre-fill 5 bottles, chill them in the refrigerator and carbonate them right before we drink them. But after drinking each bottle, you have to refill them to the exact height prescribed by the Sodastream system: fill too low and you loose more CO2 than you should and don’t have sufficient carbonation, fill too high and the machine overflows each time you carbonate.
Since manually filling each time quickly becomes hassle, I decided to delegate the task to a better suited actor: the mighty Arduino Nano.

At first I only used a solenoid valve which was timer operated by the Arduino. But with varying water pressure the fill volume would fluctuate too much. So I added a water flow sensor to be able to measure the dispensed volume independent of the pressure.

The system is controlled with a single button that you operate with single, double and long presses to use the different functionalities:

  • A short press starts the system and fills until flow sensor registered the amount of pulses stored in the EEPROM. This is used to fill the Sodastream bottles. When water is already flowing a single press stops the water.
  • a long press ignores the flow sensor and is used to fill other bottles that have a larger volume. For safety the valve automatically closes after 2 minutes or until the button is pressed.
  • double press and hold is used to set the filling volume and store the value in the EEPROM

For a few years, the hardware of this setup just put together on some perfboard. While this worked flawlessly, I wanted to make a nice PCB to document the project and make it possible for other to copy or improve on my concept. So I made a schematic and board layout with KiCAD and had the board made by JLCPCB.

To finish it of I also designed a 3D printed enclosure to fit everything neatly in the cupboard.

The result: easily filled bottles, always to the exact volume required.

The PCB, 3D files, code, required components,… can all be found on Github