CO2 Laser Water Chiller




Introduction: CO2 Laser Water Chiller

About: I've been writing software since I was in the 6th grade, and working with mostly-digital electronics since High School. These days my career consists of software development and architecture that is focused o…

CO2 Laser Water Chiller

CO2 Laser tubes are cooled by running or pumping water through the tube. This is necessary to extend the life of the tube which otherwise would overheat and quickly lose power and eventually fail to operate. Expensive water chillers are available for CO2 lasers. A commercial water chiller can be more expensive than a low cost laser cutter. This project provides directions on how to make a low cost water chiller for a CO2 laser cutter, whether you have an inexpensive "K40" laser or a nice, commercial Full Spectrum laser. It will demonstrate construction of the complete water chiller system including an Arduino based thermostat enclosed in an acrylic custom laser cut project box.

The video below shows the thermostat in action as water is cooled to under 56° F.

Please also see my earlier article on building a CO2 Laser Water Flow Rate Monitor and Alarm.

Step 1: Parts List...

The Water Chiller System consists of three main parts:

  1. The thermoelectric water chiller
  2. The Arduino based thermostat
  3. The water "cooler" which holds the water and pumps

The parts list below covers all of these parts and provides links for low-cost sources where available. Note however that I used parts that were readily available in my small stock of parts where possible. I also used Amazon Prime where possible to save shipping costs, or I found parts that were locally available. Fortunately here in San Antonio, TX we are lucky to have the following stores that provide many of the items needed: (Note this is not a paid endorsement - find similar local stores in your area and support them!)

  1. Plastic Supply of San Antonio - where I bought acrylic for the thermostat project box for $1/pound from their scrap pile. This is a great local Maker resource. If you don't live near San Antonio, look for a similar supplier near you.
  2. Intertex Electronics - is a lifesaver for last minute electronics parts from resistors and ICs to wire and heat shrink tubing. This is where I got my Arduino Shield Proto PCBs.
  3. Altex Computers & Electronics - though they don't care nearly as much as a Fry's or Microcenter, they are the closest we have in San Antonio. The Hyper TX3 CPU coolers, Heat Sink Compound, and the stereo plug and jack came from here.
  4. Academy Sports & Outdoors - Well they had the lowest local price I could find (including having searched craigslist) for the 5 gallon beverage cooler.

Also worth noting, much of my electronics stock pile came when Radio Shack closed many of their stores in San Antonio and components (e.g. switches, wire, Arduino Shields, etc.) could be obtained at a substantial discount. Fortunately we still have a few Radio Shack stores remaining even if they haven't really captured the Maker market.

The parts list below is for the system I will document in this article. You should however know that I made several attempts before settling on this design. In some of the photos you may see parts from prior attempts. In particular, my first design used a homemade water cooling block and a single Peltier Cooler. It worked, but not quite as well as the system I will present.

Parts List

  1. 2 Thermoelectric Coolers (Peltier Coolers), 92 W each ($13.99 for 5 on Amazon)
    Mine were TEC1-12709 (90W) but they are old, you should be able to use TEC1-12706 (

  2. 2 Cool Master Hyper TX3 CPU Coolers ($18.80/each) (
  3. Additional Thermal Grease such as Type 44 Heat Sink Compound ( $9.95 + shipping. If you live in Texas look at Altex.
  4. 80mm Computer Case Fan ( $5.49
  5. 2 Momentary Push Button Switches similar to Radio Shack 275-0609 ( $3.99 for 2.
  6. A 4.7k Ohm Resistor.
  7. IP65 Waterproof Digital Thermal Temperature Probe ( $8.99
  8. Arducam 1602 16x2 Serial HD44780 Character LCD ( $8.79
  9. 12 volt 30 amp DC Power Supply ( $21.49 (Note: You could also use an ATX power supply if you can get one with high enough 12 volt current. I recommend 30 Amps for the 12 volt line. See for example:
  10. 2 40x40 mm Aluminum (or better Copper) Water Cooling Blocks. (I used these $15.99 for 2.
  11. An Arduino Uno ( $21.15 (or a less expensive clone)
  12. A Seeed Studio Relay Shield v2 (v3 would probably work as well) ( $22.80. Shop around. You'll be able to find these for less than $10.
  13. An A000082 Arduino Shield Proto PCB ( $3.36
  14. A set of header pins for connecting the Arduino Shield to the Relay Shield. ( $4.80. Alternatively you might prefer to use Stackable Header pins. ( $1.95
  15. 3/8" O.D. (1/4" I.D.) PVC Clear Vinyl Tubing ( $5.49
  16. 92 GPH Submersible Pump ( $8.99
  17. 15 Amp Tamper Resistant Single 120v (NEMA 25) outlet ( $2.99
  18. Gap filling foam ( Shop local to save. Walmart and hardware stores care this.
  19. A 5 gallon seat top beverage cooler ( $22.99
  20. 1/4" Shielded Stereo Plug ( $2.89
  21. 1/4" Chassis Mount Stereo Jack ( $2.59
  22. 3-pin XLR panel/chassis mount jack and plug ( $5.90

  23. Various Wire, solder, and heat shrink tubing (prefer stranded over solid, and use lower gauge - thicker wire for 120 volt and the wires going to the Peltier Coolers)
  24. Various Hardware (4-40 screws and bolts, #8 screws and bolts), etc.
  25. Acrylic for making your own project box for the thermostat. I used 3/16" ivory acrylic from the Scrap Pile ($1.00/pound) at Plastic Supply of San Antonio. You can also purchase a pre-made box that works for you.
  26. Plastic or wood to support the cooler. I used a piece of Starboard that is about 3/4" thick and about 4" x 4" which also came from the $1.50/pound scrap pile at Plastic Supply of San Antonio. Plywood will work fine.
  27. A heavy duty pump and appropriate silicone tubing for your laser tube. If you already have a working system you already have this.
  28. A Ping-Pong Ball
  29. Silicone glue and/or RTV Silicone Gasket Maker
  30. A 110/120v 3-prong plug & cord. Find one with a flat cord if you want to use the cutout I used on the left panel. Otherwise modify the cutout.
  31. Acrylic Cement (if building your own project box from acrylic)
  32. A 1/2" Schedule 40 Threaded PVC Plug ( $0.97
  33. A 1/2" Schedule 40 Threaded PVC Cap ( $0.83

Step 2: The Water Chiller Design...

The Chiller Design

The water chiller works by slowly pumping water from a 5 gallon insulated "beverage cooler" into a set of "water cooling blocks" that are designed for CPU cooling. The two blocks are connected together with vinyl tubing to increase the amount of time the water is in contact with the cool surface of the blocks. Water is pumped out of the beverage cool into one of the blocks and then into the other block, and then back into the beverage cooler.

Each water cooling block is connected to the cold side of a peltier (a.k.a. thermoelectric) cooler. The hot side of the cooler is connected to a CPU Cooler with fans -- one for each peltier cooler. By drawing the heat away from the hot side of the peltier the cool side is capable of freezing water within a few seconds. For this reason, the water pump MUST remain running while power is applied to the coolers. Also, without the CPU coolers drawing heat away from the thermoelectric coolers, the cool side will not remain cool. Note that the hot side can get hot enough to cause serious burns. Don't apply power to one until it is connected to the heat sink of the CPU cooler.

Water is pumped as slowly as our 92 GPH pump allows (it has an flow adjustment feature). This increases the time the water spends being chilled before being pushed back into the container.

The thermostat is responsible for turning on the pump, the thermoelectric coolers, and the CPU cooler fans. It also turns on the case fan while the others are running.

The diagram above illustrates how the pieces are stacked together and wired. The CPU fans +12 volt lines connect together as do the +12 volt lines of the thermoelectric coolers, but each set is kept separate. Use thicker (lower gauge) wire for the thermoelectric coolers and the ground line. Each cooler is 90 to 92 watts and therefore draws a substantial amount of current. I used 22 AWG stranded wire. It works, but it gets very warm. I recommend you use thicker wire. A common ground wire may be used.

Heat sink compound is used on each side of the thermoelectric coolers, each side of the water cooling blocks, and on the bottom of the CPU cooler heat sink.

As will be shown in the next step, the CPU cooler will be bolted together holding everything in place. They need to be bolted through some type of a material that will serve as a frame.

Once bolted together, with the wiring all extended to the cord that will attach to the thermostat, and after testing that everything works, some spray-in foam is used to insulate around the water cooling blocks. You may with to add insulation wherever possible to increase efficiency.

The photo below show the completed water chiller mounted to the 5 gallon beverage cooler.

Step 3: Assembling the Water Chiller...

To assemble the chiller unit, start with the following parts:

  1. Both Cool Master Hyper TX3 CPU Coolers
  2. Both Thermoelectric coolers
  3. Both Water Cooling Blocks (aluminum or copper)
  4. Heat Sink Compound
  5. Clear Vinyl Tubing (1/4" O.D., 3/8" I.D.)
  6. #6 bolts, approximately 1.5" long, with nuts
  7. Some type of mounting material - I used 3/4" starboard. It turned out to be about the perfect thickness. 3/4" plywood should work as well.

Prepping the CPU Coolers

The CPU Coolers come with legs attached to plastic standoffs. Remove the plastic standoff so that you have only the metal leg. There are also screws in the package to attach the legs to the heat sink. Each leg is marked with L or R to orient it properly. Attach the legs. The photo below shows the legs as shipped and with the standoffs removed on the left, and on the right how they should be attached to the heat sink.

Preparing the mounting block...

Use a piece of clear plastic like a bakery container (shown below) to mark where you will drill holes in your mounting block. Then drill the holes.

After the holes are drilled cut out the center fit around the thermoelectric coolers and the water cooling blocks. One whole side must be cut out (you might try drilling instead) to allow the tubes to reach the water cooling blocks. I used band saw to make the cuts, but with patience a hack saw or maybe even a jig saw or scroll saw could be used. In the photo below on the right you will see the mount/frame I used for the final product. A piece from the top left along with the drilled hole is used for bolting that far corner.

Remove Labels from the Water Cooling Blocks

Remove the labels from the water cooling blocks. A bit of Goo Gone will help.

Assembling the Cooler Stack

With the frame ready to go and the labels removed from the cooling blocks, assembly the cooler stack as shown in the diagram on the previous step. To do this, set one of the CPU Coolers upside down and apply heat sink compound to the heat sink. Then place the first peltier / thermoelectric cooler hot side down on to the heat sink. After this apply heat sink compound to the top -- the cold side of the thermoelectric cooler. NOTE: If you don't know which side is the hot side of your peltier cooler, check the specs that came with it, or briefly apply a 9 volt battery to the leads with proper polarity while holding the cooler between your fingers. ONLY BRIEFLY or you will get burned. You will quickly discover which side is the hot side.

Next set coat both side of each water cooling block with heat sink compound and stack them on top of each other. Arrange the stack how you like, but I elected to face the inlet/outlets on adjacent sides. I also started with the vinyl tubes in place, but this honestly made it more difficult to assemble. You will notice in the photo below that in one of the tubes I inserted a short piece of 1/4" O.D. copper tubing to help slow the water flow slightly.

Once both water cooling blocks are stacked, with heat sink compound between each layer and on the top, place the second thermoelectric cooler on top of the stack, cold side down, hot side up, and add heat sink compound to the top of it.

Now place the final CPU cooler on top of the stack and use adequate bolts and nuts to run through the holes in the legs of the bottom CPU cooler legs, through the mounting block holes, and then through the top CPU cooler legs. Tighten this down, but not too tight -- don't crack your peltier coolers!

Insulating the Water Cooling Blocks

Use some gap filler foam (available at Walmart and hardware stores) to fill the gaps around the water cooling blocks. Do this very slowly or it will expand out of control. Be sure to place something underneath of it to protect your table. I used some saran wrap. Also be sure to keep the wire from being encompassed by foam. They should pass through it, but not be buried in it.


To complete the Water Chiller Unit, solder all of the black wires to a single ground wire. The wire should be 18 to 24 inches long. Be sure to use heat shrink tubing to insulate any bare wires. Connect the ground wire to pin 1 of your 3-pin connector plug.

Then solder both of the red wires for the CPU cooler fans to a single wire and connect it to pin 2 of your 3-pin connector plug. The wire should be 18 to 24 inches long. Be sure to insulate any bare wires with heat shrink tubing.

Finally solder both red wires from the thermoelectric coolers to a single wire 18 to 24 inches long and solder the other end of it to pin 3 of the 3-pin connector. Again, insulate any bare wires with heat shrink tubing.

The red wires (pins 2 and 3) will connect to separate relays in thermostat. The other side (the normally open side) of the relays will connect to the 12 volt output of the power supply. The black (ground) wire will connect directly to the power-supply ground.


The chiller is complete but you need to work out a way to mount it to your 5 gallon beverage cooler. At least that is one option. Maybe you will have ideas for a better way to package up the chiller. It will need to be within reach of the thermostat and of the tubes connecting to the water pump inside the beverage cooler. The photos below show how I used a 3/16" piece of acrylic and a set of bolts to make a mount that will slide into the cup holder slot on the beverage cooler.

The final product

Step 4: The Thermostat Circuit...


The thermostat unit is composed of the following components:

  1. The 12 volt power supply
  2. An Arduino Uno
  3. A Seeed Studio Relay Shield
  4. A Serial 16x2 LCD display
  5. A 4.7k Ohm Resistor
  6. Two switches to control the temperature setting
  7. A Case Fan
  8. An IP65 Waterproof Thermometer
  9. A custom shield to facilitate stacking on the Relay Shield, providing connectivity between the thermometer and the Arduino as well as the +12 volt line to the case fan through a relay.
  10. A custom laser cut case which will be covered in a subsequent step

Power Supply

Note that the 12 volt power supply will provide power to all of the following:

  1. The thermostat circuit, including the Arduino, shields, and thermometer.
  2. The case cooling fan
  3. The CPU Cooler fans in the Water Chiller Unit
  4. The Thermoelectric Coolers in the Water Chiller Unit

I recommend using a power supply capable of 30 A @ 12 volts. The majority of the power consumed will be from the two 92 watt thermoelectric coolers.

Connecting the Arduino

The Arduino UNO will have the Seeed Studio Relay Shield stacked on it first. On top of that we will place our custom shield made with the A000082 Shield Proto PCB. The Arduino PINs are connected as follows:

PIN 2: To the UP momentary push-button switch, the other side of which connects to ground.

PIN 3: To the DOWN momentary push-button switch, the other side of which connects to ground.

PINS 4 - 6: Utilized by the Seeed Studio Relay Shield

PIN 10: Connects to the signal wire (yellow or white) of the IP65 Waterproof digital thermometer. Be sure to connect this to one of the pins of the stereo plug. I selected the pin connected to the most extended part of the plug. When you solder the IP65 thermometer wires to the stereo jack make sure it matches up. You also need to run a 4.7k Ohm resistor from PIN 10 to the +5v line.

PIN A4: To the SDA connection on the Serial LCD backpack board.

PIN A5: To the SCL connection on the Serial LCD backpack board.

The Full Schematic

NOTE: The schematic diagram was made using EasyEDA, a web based schematic capture program that is free. I recommend supporting their business so that this service remains free.

Connecting the rest...

As you can see from the schematic diagram, the circuit is built on top of an Arduino Shield and ties into the lower layered shield -- the Seeed Studio Relay shield. To keep everything modular, the external components -- the water chiller and the thermometer probe are connected through plug-able connectors, but exactly how this is done is up to you. You will see from the photos how I did this, and it works well. In the schematic, the relays are shown using labels from the relays on the relay shield. In all 4 cases the normally connected (N.C.) pin is not connected to anything. It is not terribly important which relay controls which item but it is a good idea to keep them separate and it will allow you to customize your sketch to change the timing to suit your needs.

A small part of the circuit uses AC power. The 12 volt power supply of course is powered by AC power. Additionally, the chiller pump is AC powered and the relay controls power to the pump so that it only runs while the chiller is turned on.

Step 5: The Thermostat Project Box...

Having the project box planned out and ready as you build the shield and connect components will make things easier. This part of the project is something you should customize according to the materials at hand and your own tastes. If however you like the project box I built, and can utilize the LaserCAD files or .PLT files attached to this step, you can match my box in every detail, or change things as you like. If you use different size switches or connectors, or even if your power cable is a different size, change the cutouts as needed!

Designing the Box

My project box is made from 3/16" acrylic. The box pattern was made using BoxMaker ( BoxMaker will allow you to enter your box dimensions and thickness, and then will produce a PDF file containing each panel. My laser cutter is controlled by LaserCAD which can not import PDF files, so it was necessary to first import the PDF file into Inkscape, and then save each panel as a DXF file. The DXF files can be imported into LaserCAD and then cutouts for external facing components like the LCD, switches, and case fan can be added in LaserCAD.

Using My Files

If you use the attached .pwj5 files with a LaserCAD capable laser cutter just make a note of which colors are enabled and the cut settings and adjust as necessary. Because I made the box in several passes, the current cut settings only reflect the last pass. There is one file for each panel as well as a file for making the Arduino shelf. It is also very important to note that some lines marked as cut lines are NOT meant to be cut, but instead were meant for aligning screw holes, etc. Typically in the .pwj5 files these are unchecked, or the laser power level for that color is set too low to cut, usually both.

There is also a set of .PLT files for each panel. These were exported from LaserCAD. You can use the .plt files to open and edit the drawings in AutoCAD, or you can use a free online converter to convert the PLT file to PDF or another format that will work with your Laser Cutting software. Feel free to modify the files for your needs, including removing my name and putting yours there!

The Arduino shelf has through-holes that match up to the holes in an Arduino Uno, making it easy to attach the Uno to the board using 4-40 bolts and nuts.

Assembling the Box

With each panel cut and the appropriate cutouts in place for your components you can now insert the components and solder wires as needed.

Cementing the Box

With external parts attached to the box panels and wires connected to the shield (see next step) you can begin to cement the box together. Start by cementing the Arduino shelf to the back panel. Be sure to place wax paper or something similar under it to protect your table surface.

Construction Order

With the Arduino shelf in place, you may wish to attach the Arduino, then cement the back panel to the bottom panel.

Cement each of the remaining panels in place when most convenient but be advised that you will most like want to do it in the following order:

  1. Install the Power Supply and attach it to the back panel or the bottom panel first.
  2. Run the power cord through the left panel and attach it to the power supply.
  3. Attach ALL power wires to the power supply (following the schematic) BEFORE cementing the left panel in place. It may be a tight fit, so plan carefully.
  4. With the wires all attached to the power supply, cement the left panel in place.
  5. Place the Seeed Studio Relay Shield on top of the Arduino
  6. (See the next step) - Solder the header pins to the Shield Proto PCB
  7. Solder the wires from the right panel and the front panel to the Shield Proto PCB.
  8. Attach the new shield to the top of the Seeed Studio Relay Shield
  9. Only after these steps cement the front and right panel. DO NOT CEMENT the TOP panel. It is not necessary and will permanently shut you out of the box. The top panel should fit snuggly and take a modest amount of effort to remove, but should remain removable!

Step 6: Building the Thermostat Shield...

Soldering the header pins

It may be easiest to start on the shield by soldering the header pins to it. If you use stackable header pins you can place another shield on top of this one if there is ever a need to expand your circuit. I used what I had on hand - the non-stackable pins. While doing this, you might also want to attach a reset button as you will see in my photos. It is not necessary but I had one so I added it.

Soldering and Connecting the LCD

The Thermostat shield requires several wires from the various panels to attach to it. If you don't mind the time and expense associated with placing sockets, plugs, or header pins for removable cables to external components I would highly recommend doing so. I did not, in large part because I did not want to order them and wait for them to arrive. Instead I soldered (long) wires from the connectors on the panels directly to the shield, with one exception. I happened to have a cable with a connector that fit the LCD backpack perfectly. I soldered the end of the cable without a connector directly to the shield (A4, A5, +5v, and GND), and then plugged the cable into the backpack.

NOTE: If you order and use the Arducam Serial 16x2 LCD package that I ordered from Amazon you will first need to solder the backpack to the LCD. Follow their instructions -- or at least test to make sure the ground on the backpack matches the ground on the LCD before soldering it the same as you see in my photos.

The photo below shows the 4 wires from the LCD's Serial Backpack connected to the shield on pins A4 (SDA) and A5 (SCL) as well as the ground and +5 volt wires connected.

The Thermometer Connection, Pushbutton Switches, and Case Fan Power

Next the thermometer SIGNAL wire is connected to PIN 10. A 4.7k ohm resistor also is run from PIN 10 to the +5 volt pad.

The UP momentary push-button switch is connected to PIN 2, with the other side connected to the GND pad. Similarly, the DOWN momentary push-button switch is connected to PIN 3, with the other side connected to the GND pad. Pins 2 & 3 are used because they are tied to Interrupt 0 and 1 of the Arduino.

I also connected a wire from Vin to COM4 on the Relay Shield. NC4 on the Relay Shield goes to the +12v line of the 80mm Case Fan. The ground wire from the case fan connects to the GND pad. This is because the case fan was for me an afterthought. I found that the box got fairly warm -- mostly from the power supply. By adding the case fan and powering it only when the chiller is running the box stays cool.

The photo below shows all of these connections with labels. (Click or tap on it to zoom in on it.)

Step 7: Wire the Relays and Power the Arduino...

Powering the Arduino

Create a power jack like the one shown below. The red wire will connect to one of the +12v terminals on the power supply. The black wire will connect to one of the -12v (ground) terminals on the power supply. The jack will plug into the Arduino.

Powering the CPU Cooler Fans, Thermoelectric Coolers through the Relays

Connect a wire from one of the +12v terminals on the power supply to the NO1 terminal on the Relay Shield. Connect another wire from another +12v terminal on the power supply to the NO2 terminal on the Relay Shield. Then connect the +12v wire from the Chiller Unit Jack (3-pin Audio connector) to COM1 on the Relay Shield. Be sure this connects to the +12v wire of the CPU Cooler Fans on the other side of the cable. This +12 volt terminal can be shared with the Arduino power supply. Connect the +12v wire from the Chiller Unit Jack (3-pin Audio connector) the runs to the Red Wires of the thermoelectric coolers to COM2 on the Relay Shield. The Thermostat circuit will turn these relays on (COM < - > NO) when the water temperature drops below the thermostat setting. NOTE: I soldered Philmore Male Terminals (NO.65-5021C) to each of the wires going in and out of Relay 1 and 2 for a better connection.

Connect the AC Power Socket and Main through the Relay

The ground wire and the neutral AC wires connect to both the power supply (GND and N) and the chiller pump AC socket directly. The AC hot wire (L) connects directly to the power supply (L) and then to terminal COM3 on the Relay Shield. A heavy duty wire is run from the NO3 terminal on the Relay Shield to the remaining L (hot) connection on the chiller pump AC socket.

The 80mm Case Fan Power

As mentioned in the previous step, you can directly connect +12 volts from one of the power supply terminals to COM4, or you can run it from Vin on the shield PCB as I did. Similarly, you could directly connect the case fan's ground wire to a -12v terminal on the power supply, or you can connect it to the ground pad on the shield PCB. Connect the case fan's +12 volt wire to the NO4 terminal on the Relay Shield.

Pluging it all in...

With all of the connection now made you can attach the shield. You can also now cement the remaining panels in place.

Remember to not cement the top panel! If anything goes wrong you'll need to remove it to access the internals! It will fit snuggly without cement and the fan guard will help with leverage in removing it.

Step 8: The Thermostat Sketch

Prerequisite Libraries

The Arduino sketch is attached. You will need the following libraries installed in order to compile and use it:

  1. OneWire - Used to read the IP65 Digital Waterproof Thermometer
  2. LiquidCrystal_I2C - Used for the Serial LCD

I recommend building a small circuit and sketch to test each component before building the larger circuit, just in case something has changed and you need a different library.

The Sketch File

If you wish to use my sketch as-is, it is attached to this step as Thermostat.ino. It should work with your Arduino Uno (or clone) without changes if you followed my circuit.

How it works...

The thermostat is fairly simple, and not unlike the thermostat you use to control the temperature in your home. The LCD displays the current water temperature in Fahrenheit and Celsius on the first line, and the current setting on the second line. Whenever the water temperature is above the setting, the pump and chiller are turned on. When the temperature drops 1.75 F° below the setting, the chiller, pump, and fans will all shut off until the temperature again rises above the setting.

Input Lockout

Because of the difficult of getting a clean signal from the Arduino Interrupt Pins (maybe this is a problem with my old over-used Arduino Uno? Or maybe it is because of noise from the rest of the circuit), I have added a "Setting Lock" feature. In order to change the thermostat setting you must hold down both the UP and DOWN buttons for 1 second. When this has been detected, the LCD will display the message "----UNLOCKED----" on the top line and " Enter Temp: " on the second line for 3/4 of a second. While unlocked, the UP and DOWN buttons may be used to increase or lower the thermostat setting. If no buttons are pressed for 10 seconds, the input lockout is reinstated. If both buttons are pressed and held simultaneously again for 1 second the lock is also reinstated, but be warned that it can be difficult to press both buttons simultaneously without bounces causing the temperature setting to increase or decrease by one or two. For that reason you may prefer to just let the system re-lock on its own by leaving the buttons untouched for 10 seconds.

Reading the Temperature

Please read through the sketch for all of the details on how the code works. Here I will only highlight portions of it. In particular, the TemperatureModule class utilizes the OneWire 2 library to read the temperature from the DS18B20 in the IP65 Digital Waterproof Temperature Probe. The TemperatureModule class is based on code in the DS18x20_Temperature, OneWire 2 example sketch. It offers only two methods: Initialize() and ReadTemperatureF(). Initialize() must be called before ReadTemperatureF is called for the first time. ReadTemperatureF will return the temperature in Fahrenheit and will fill in a passed variable with the temperature in Celsius. An instance of TemperatureModule is declared on line 171 of the sketch, after the definition of the class:

You will also notice g_lcd on line 172 - an instance of LiquidCrystal_I2C. Both of these global objects utilize macros defined at the top of the file. These macros also define each Arduino PIN used by the sketch:


Lines 1 through 3 include the libraries used by this sketch. On line 3 you will see the include of EEPROM.h. This will be used during setup, and after the thermostat setting is adjusted to save the temperature in the Arduino's EEPROM so that it is remembered across power resets. The temperature is stored as a single byte and allowed temperature settings go from 35°F to 85°F. This seems to be a reasonable range for our purposes and by using a single byte to store the value things are simplified.

The setup() function of the sketch will first set a couple of global variables used to debounce our push button switches. After this it will set the Pin Mode for each pin we will use (lines 255 through 260):

On line 261, we set the Chiller to the Off state, and on line 263 through 269 the temperature setting is read from the EEPROM and set to 56°F if the current value is out of range. Lines 271 through 273 initialize the I2C LCD library and because it takes about a second to initialize the TemperatureModule, the message "Initializing...." is displayed on the LCD until the temperature sensor is detected (lines 278 through 280). An additional 1 second wait is forced on line 281 -- this seems to be required by the OneWire library for properly reading the temperature sensor.

With everything else initialized we attach Interrupt 0 to the BumpSettingsUp function on line 283, and Interrupt 1 to BumpSettingsDown on line 284 and enable interrupts (line 285).

The BumpSettingsUp and BumpSettingsDown functions check to see if the input is locked. If it is not, they will increase or decrease g_uiTemperatureSetting, as long as the interrupt (triggered by a push) satisfies the time requirements to not qualify as a switch bounce. These two functions also ensure the setting stays between 35 and 85 degrees.

Not shown here is BumpSettingsDown() which is identical to BumpSettingsUp except that it drops the value in g_uiTemperatureSettings. There are also a few other functions used as helpers such as OutputLCDLine() which will display a string on line one or two of the LCD. The function TurnCoolingOnOrOff shown below is used to set all 4 relays to the ON or OFF position and to record whether things are ON or OFF in g_bCooling:

The function ToggleInputMode is called when both buttons are held down for one second, or after 10 seconds of no buttons being pressed while input is unlocked. As you can see it records a new setting in the EEPROM slot 0:

This double-button press check is done by the helper function CheckLockUnlock():

All of this leads to the main loop:

In this first half, there is a check to see if the user is unlocking input. If 10 seconds has passed since a button has pressed, while input is unlocked, the code on lines 373 through 379 will ensure that the lock is reinstated.

On line 383 the current thermostat setting is displayed on the second line of the LCD, and on line 387 the current temperature is read from the thermometer. It is then displayed on the first line of the LCD, on line 397. Because the thermostat setting was converted to a float on line 385 a simple comparison can be done to see if the Chiller needs to be turned on:

If the current temperature is above the thermostat setting the Chiller is always turned on (line 406). Otherwise we check to see if the temperature is 1.75 degrees below the setting and if so the Chiller is turned off.

On line 418 a one second delay occurs to provide time for the thermometer to be read properly again and the loop is reentered.

Step 9: The Water Container and Pumps

My initial setup for the CO2 Laser cooling water utilized a 5 gallon bucket (left over from pool supplies), with holes drilled in the top to run the tubes, etc. While this worked, and would have worked with the chiller, it is far from efficient. As I tested the chiller with a similar setup I was able to drop the water temperature as much as 19 degrees Fahrenheit from room temperature, but, it quickly became obvious that this was inefficient. Any type of an insulated cooler would probably have solved the problem, but a beverage cooler fits the bill perfectly. You may want to search for a used cooler. If you can find one at a better price, there is no reason to pay for a new one, just to drill holes in it! I found a set of 5 gallon beverage coolers for sale in my area on craigslist, but it turned out that they were more expensive than a new cooler from Academy Sports & Outdoors.

A few modifications to the cooler are required. You've likely noticed them already in the photos. The first modification is to remove the dispenser spigot and seal the hole. Use a wrench to hold the nut inside of the beverage cooler, while twisting the spigot counter-clockwise. Once loosened remove the nut and the spigot. You may wish to retain these along with the o-ring used to seal at the joints.

Place an o-ring () on the 1/2" Schedule 40 PVC plug and push into the spigot opening of the cooler from the outside. Put the 1/2" Schedule 40 PVC Cap over the threads from inside the beverage cooler and tighter. Being very uninterested in dealing with leaks, I also added a substantial amount of silicone sealant around and over the fittings on both the inside and the outside. Here is a view of the outside before and after (though I had already turned the spigot upside down in the before photo)... Unlike me, you might want to remove the label before sealing:

Drilling and Sealing...

It is also necessary to drill holes in the top sides of the beverage cooler to pass the water tubes in and out, as well as the pump AC cords. I wanted the insulation to be as good as possible with this cooler, so I placed the holes about 1" below the bottom of the lid. I also opted to cut the AC cords on the pump and repair them near the plug. One additional hole will be required for the IP65 Digital Waterproof Thermometer probe.

For each of these holes, use calipers to measure the diameter of the cord, and drill a hole that matches. Then after running the cord through the hole and placing the item (especially pumps) inside of the cooler, seal-up the hole with some RTV gasket silicone, silicone caulk, or silicone sealant.

I recommend placing the first 4 holes near the cup holder mount. These will be for:

  1. The thermometer probe
  2. The water tube running to the Chiller Pump
  3. The water tube returning from the Chiller Pump
  4. The AC cord for the Chiller Pump

Note that you will need to cut the AC power cord for the pump(s) to run them through these small holes. Be prepared for this and to make sure you adequately repair the cord! Failure to do it right could result in electrocution!

Repairing the AC cord(s)...

I may have been a bit overzealous in ensuring that the pump cord is properly repaired, but it is always better to be safe than sorry. As you will see in the photo below, I placed heat-shrink tubing (2 sizes) on each wire before soldering them back together. I also placed 3 (2 different sizes) of heat-shrink tubing and a piece of vinyl tubing over one end of the cord before soldering. After trimming the excess soldered wire, the heat-shrink tubing covered the solder joints and was sealed for each wire. After each wire was insulated, the smaller pieces of heat shrink tubing for the cord were pulled into place and sealed one at a time. Next the vinyl tubing was placed over the enter length of the cord where the original outside layer of insulation had been removed. This was held in place with a zip-tie at each end, and then another larger piece of heat-shrink tubing covering the entire piece of vinyl tubing, extending over each end was sealed.

This was done for both pump cords.

The Wicked Eyeball...

With the pumps in place and their cords restored to a safe operational state, and with the tubes all in place, there is one thing left to protect. The thermometer probe is advertised as being "waterproof", but this thing is just outside where rain may occasionally get on it. It's sitting in a bucket of water 24/7! For that reason I decided to add a bit of protection specifically around the joints of the heat-shrink tubing that appears to make it "waterproof."

Using the caliper again to measure the widest part of the probe, I drilled a hole straight through a Ping-Pong ball. (I had these on hand from making Ping-Pong ball lacquer.) Next insert the probe through the hole in the ball. The majority of the probe should extend out the other side, stopping just shy of where the heat-shrink tubing start on the probe. Seal the probe this way in the ball using RTV gasket silicone or another silicone sealant. The red RTV silicone leaves the probe looking like a blood-shot eyeball with..., well with something protruding from it. It's not Halloween, so there is not contest for that all by itself! ;)

This minor modification, in addition to protecting the probe, will keep the thermometer floating with the tip underwater. I considered purchasing a piece of 3/8" or 1/2" copper bar and drilling a hole just big enough to fit the probe into it. The bar would extend to the bottom of the beverage cooler, transferring the temperature throughout to the probe. In the end, I decided this was good enough.

Filling with Water

Now it is time to place the entire unit near the laser cutter and fill it with distilled water. If your setup is someplace where the water may freeze, you should probably mix the distilled water with antifreeze. Place the lid on top, plug everything in, and you should now be able to chill the water. With my testing in a room where the average room temperature was 75° F, the chiller was easily able to maintain 54° F without running constantly. Though you may know more about this than I do, I've read that 56° F is a good temperature for cooling CO2 laser tubes.

Step 10: Energy Consumption...

11.25 KWH

I've run the Water Chiller non-stop for 168 hours - exactly one week. The kill-a-watt meter is reading 11.25 KWH. These results are better than expected, though maybe not as good as one could hope.

My current cost of electricity is 9.3 cents per kilowatt hour. The room temperature has averaged 75° F throughout that week, and the laser has been used only a few times. If these variables hold true, the energy cost to me will be approximately $0.14 / day, or $4.41 / month. That is about $53.76 each year.

It is likely that your mileage will vary. I am fortunate enough to live in an area where the cost per kilowatt hour is not as high as the national average. I've also recently added an 8,000 Watt PV Solar system to my house as well (in an effort to lower energy costs -- $700/month in the summer!), and this will undoubtedly reduce the cost of running this unit as well.


One thing I have noticed that is concerning is that the water temperature always increases by 1 to 2 degrees when the pump to the laser tube is turned on, even if the laser is not in use. Part of this expected since the tubes to the laser tube are not insulated, and it is a fair bit of room-temperature travel when compared to the route the water takes to run through the chiller. My fear however is that the 620 Gallon-per-hour water pump I use to pump water through the laser tube is actually heating the water. I will eventually try using an external (non-submersible) pump for this purpose, or maybe a smaller submersible pump. My Water Flow Rate Meter indicates that I am only pumping about 0.9 liters per minute through the tube. That is 54 liters or 14.26 gallons per hour. I upgraded to a larger pump trying to increase the flow rate, but was never able to get beyond 0.9 liters per minute. It's likely that there is some heat caused from a pump that is working hard against immediate bottlenecks. Though I dread having to cut and repair another pump AC cord, I will post comments in the future on the effects of using a smaller or external pump


Step 11: Update...

External Pump

As mentioned in the previous step, the large pump I used to supply water to the laser tube was causing some warming of the water. When I ran it for 30 minutes or longer, it became obvious that the temperature was rising at a rate far faster than I had hoped -- as much as 5 to 10 degrees. I've now replaced that pump with an external pump. There is still a slight rise in temperature while the pump is running -- even if the laser is not in use, but this is expected since the water is circulating out of the cooler and through a substantial length of tubing and through the laser tube, none of which are insulated. My tests showed that the temperature gain (efficiency loss) was only 1 to 3 degrees with the new pump. Well worth the swap.

As you can see from the photos, I switched to this small external pump which I bought via The pump is capable of 1.2 GPH. It is quiet enough to not be a problem. Being a 12 volt pump I also had to add a 12 volt power supply, which for now is the supply I made from an ATX (computer) power supply.

Because this pump is external and requires water to be present before it is powered on, I changed the plug in the 5 gallon beverage cooler and ran water directly from the cooler into the pump. I also used a length of 1/4" I.D. fuel line tubing from the pump into the Flow Rate Monitor, to help some with the insulation.

The Flow Rate Monitor shows that this pump is able to move approximately 0.80 liters per minute through the tubing and laser tube. This is about 0.10 liters per minute less than my oversized submersible pump, but is on par or slightly better than the pump that came with the K40 laser.

Thermostat Firmware Update

I've also updated the Thermostat firmware. The changes were needed to fix issues with the thermometer sometimes having anomalous readings. Now an average of the last 10 readings (last 10 seconds) is used in the decision to turn the chiller on or off. Also, any reading that is 5 degrees or more away from the previous reading is thrown out. After 10 such conditions, the thermometer will be re-initialized. This appears to be necessary because of issues with the 1-wire protocol used to read the thermometer. The updated Arduino INO file (Thermostat.ino) is attached to this step.

Step 12: Final Thoughts...

Final Thoughts

Though I nearly gave up after my first two attempts at making this system work, I am not very pleased. I will as mentioned try swapping out the main pump (that pumps water to the laser tube) to see if I can keep the water cooler during laser operation, and I will add comments with the results at a future date. As always, your comments are appreciated.

Please also see my 1st article on the CO2 Laser Water Flow Rate Meter and Alarm.

Full Spectrum Laser Contest 2016

Participated in the
Full Spectrum Laser Contest 2016

Be the First to Share


    • Mason Jar Speed Challenge

      Mason Jar Speed Challenge
    • Bikes Challenge

      Bikes Challenge
    • Remix Contest

      Remix Contest

    19 Discussions


    4 years ago

    Here is a video on how to build a 30 kV powersupply. You could use with some big CO2 lasers to generate up to 75 W of optical power (I think) just by the voltage differences.


    4 years ago

    Here is another video.


    4 years ago

    Here is a you tube video on cooling the laser with special water pipes.


    4 years ago

    Here is more info on how to build your own CO2 laser.


    4 years ago

    This is partically cool since i know of some stores that sell CO2 laser but they are really expensive. Our ones at Algonquin run on 90% CO2, 5-10% Helium gas (I think) and opperates at voltages near 40,000 volts 60 to 200 mA.

    Here is a link on a CO2 laser.


    Reply 4 years ago

    Thanks! I hope it is helpful!


    4 years ago

    What is this line doing?

    digitalWrite(RELAY_J1_PIN, bOn ? HIGH : LOW);


    Reply 4 years ago

    This line switches relay J1 to the ON position (Normally Open). IIRC all of the relays switch on and off at the same time. One relay (J1)connects power to the thermoelectric coolers, another to the CPU fans for the coolers (J2), another (J3) connects the A/C voltage to the water pump, and the last one (J4) turns on the cooling fan on the case.

    Because they are all synchronized it doesn't matter much which relay connects to which thing as long as you are running the lines properly (in other words, +12v and ground to the fans and coolers, A/C lines to the pump, etc.)

    Is that what you were asking? If you are not familiar with C/C++'s ternary operator, what that line means is:
    if(true == bOn)
    digitalWrite(RELAY_J1_PIN, HIGH);
    digitalWrite(RELAY_J1_PIN, LOW);

    It is just a more compact way of writing it. And would have been easier to understand if I'd not been lazy and wrote it as:
    digitalWrite(RELAY_J1_PIN, (true == bOn) ? HIGH : LOW);

    -Andrew Sandoval


    Reply 4 years ago

    "what that line means is:if(true == bOn){ digitalWrite(RELAY_J1_PIN,
    HIGH);}else{ digitalWrite(RELAY_J1_PIN, LOW);}It is just a more
    compact way of writing it. And would have been easier to understand if
    I'd not been lazy and wrote it as:digitalWrite(RELAY_J1_PIN, (true ==
    bOn) ? HIGH : LOW);"

    ^this, thank you :-)


    4 years ago

    Hey, I was looking to use the LM35 instead of the dallas temp sensor. Any reason I can't/shouldn't do this? I am looking to change this up a little, pumping the water through a closed system and a shoulder pad to have an ice-less ice pack. so, i was thinking putting the LM35 directly onto the water blocks to input the temperature, no need for water proof sensor. any advice especially with the code?


    Reply 4 years ago

    I used the DS18B20 based sensor because it was already waterproof, etc. You should be able to use the LM35, just look for sample Arduino code for it. I think I have one I've tested somewhere, and IIRC it is actually easier to use because it doesn't have the 1-wire (.75 second) time delay requirement. But that is from memory of things done a few years ago so I may be wrong.

    In my latest project, which hasn't been documented yet, I use two of the DS18B20 (waterproof also) thermometer modules with a Raspberry Pi and a DS2482-100. The DS2482-100 is nice because it handles all of the 1-wire protocol and you talk to it with I2C. My code is C++ for Windows IoT so it wouldn't match-up well to Arduino, but it would not be hard to write Arduino code for the DS2482-100 if someone had the need -- in this project however, the Thermostat is fairly simple, so talking to the 1-wire device with the Arduino is not a problem... Nevertheless, you will see a bunch of code around handling anamolous temperature readings -- probably because of imperfections in the way the 1-wire is read.

    Bottom-line, yes it should not be too hard to change to the LM35. Both are fairly inexpensive as I recall.

    Best wishes with it. Let us know how it turns out if you decide to do this!

    -Andrew Sandoval


    Reply 4 years ago

    Looks interesting. If you don't mind, post a photo of yours when complete.

    -Andrew Sandoval


    Reply 4 years ago

    I'm sure a substitute would be fine. You need something that has close to or more surface area than the thermoelectric cooler. If you can find a drawing with sizes for the one you purchase you should be able to compare that to the size of your coolers.

    Putting that part together takes some ingenuity. You can do it the way I did, but that can easily be improved upon. If I'd had a 3D printer at the time I might have printed a box to fit each part into, and then once assembled I could have filled the box with foam insulation.

    I hope that helps!
    -Andrew Sandoval

    Ricardo RaulM
    Ricardo RaulM

    4 years ago

    Amazing. Thanks, very much!

    Ricardo RaulM
    Ricardo RaulM

    4 years ago

    Amazing. Thanks, very much!


    4 years ago

    Wow, this is beautiful! You have my vote!


    Reply 4 years ago

    Thanks much!