On a hot day, what's better than a nice cold beverage? Nothing, that's what! Here's a fun way to make made-to-order chilled drinks without using ice (which can dilute things), the Chilled Drinkibot!

The Chilled Drinkibot is a thermoelectric cooler that uses a Peltier cooler, a large heat sink and fan, and a small pump to chill and then deliver your beverage to your waiting glass. It uses a Trinket M0 running CircuitPython to control things, and a temperature gauge to display your final chill value.

Parts and Materials

In addition to the parts listed below, you'll also need a small conductive cup, preferably copper or something silver plated, and material to mount the components. This can be a plastic project box, 3D printed PLA, laser cut acrylic, or anything you like, really! Just so long as we can keep the electronics up above the liquid, and the Peltier cooler fan elevated for airflow.

1 x Adafruit Trinket M0
for use with CircuitPython & Arduino IDE
1 x Peltier Thermo-Electric Cooler
Module+Heatsink Assembly - 12V 5A
1 x Peristaltic Liquid Pump
with Silicone Tubing
1 x Illuminated Toggle Switch
with Cover - White / Clear
1 x 12V 5A switching power supply
12V 5A switching power supply
1 x Female DC Power adapter
2.1mm jack to screw terminal block
1 x 5V 2.4A Switching Power Supply
with 20AWG MicroUSB Cable
1 x Heat Sink Thermal Tape
3M 8810 - 80mm x 80mm
1 x Adafruit Perma-Proto Half-sized Breadboard PCB
Adafruit Perma-Proto Half-sized Breadboard PCB
1 x Black Nylon Screw and Stand-off Set – M2.5 Thread
Black Nylon Screw and Stand-off Set – M2.5 Thread
1 x USB cable - A/MicroB - 3ft
USB cable - A/MicroB - 3ft
1 x Adafruit Parts Pal
Adafruit Parts Pal
You will also need one 1000uF electrolytic capacitor.

You can watch the live build in these two episodes of John Park's Workshop Live.

How does thermoelectric cooling work? Here's a helpful answer from Wikipedia:

Thermoelectric cooling uses the Peltier effect to create a heat flux between the junction of two different types of materials. A Peltier cooler... is a solid-state active heat pump which transfers heat from one side of the device to the other, with consumption of electrical energy, depending on the direction of the current.

The device has two sides, and when a DC electric current flows through the device, it brings heat from one side to the other, so that one side gets cooler while the other gets hotter. The "hot" side is attached to a heat sink so that it remains at ambient temperature, while the cool side goes below room temperature.

You can find Peltier devices being used in devices such as portable camping coolers and computer CPU coolers.

The key considerations for our drink chiller are being able to power the cooler and fan assembly for a pre-determined timing interval, and then doing the same with the pump.

I chose to use a Trinket M0 microcontroller so that we can use a button to initiate the cooling and pumping cycles, easily tune the timings, and so on. Since the Trinket M0 can't power such beefy 12V devices on its own, we'll use a pair of power MOSFET transistor circuits instead. You can think of them as solid state switches that can take a tiny signal from the microcontroller to unleash much higher power from a secondary source, in our case a regulated 12V 5A power supply!

Following the circuit diagram, solder all of your parts to the board as shown. You will need to solder the Trinket M0 to header pins as well to connect them.

It's usually a good idea to first test your circuit by building it on a breadboard, but in this case the power draw of the MOSFETs will exceed the current rating of the breadboard. So, if you do test it that way, only run the cooler for a few seconds at a time to avoid overheating and melting the plastic!
This is not the complete circuit (nothing is yet being controlled by the MOSFETs) but this may be helpful along with the circuit diagram to see how things are assembled on the proto board.


Depending on how you plan to mount/enclose the parts, you may need to either use removable interconnects between some parts, or wait to solder wires to the board until the parts are mounted. 

These include the Peltier and fan wiring, the pump wiring, and the button wiring.

Or, you may wire them all up for testing now, just know that you'll need to desolder/resolder later if your enclosure requires it.

With everything wired, we can now program the Trinket M0 using CircuitPython!

This is the flow of our project, which informs the flow of our code:

  1. Power on the system, light power switch LED
  2. Pour beverage into the chilling vessel
  3. Press button to begin chilling process, light up button LED
  4. When chilling is finished, pump liquid from chilling vessel into drinking glass
  5. Turn off button LED

If you're new to Trinket M0 and CircuitPython, check out this guide for getting started! Once you're ready, and have the latest CircuitPython installed on your board, you can proceed.

Copy the code below, and paste it into your favorite text editor.

You can adjust the code for different chilling and pumping times by changing the values of chillTime in minutes and pumpTime in seconds.

You can see that we turn on and off the button's integrated LED which is connected to pin D2 at the start and finish of the cycle, respectively. What about the power LEDs on the board and the toggle switch? Those bypass the Trinket M0 and run directly off of the 12V supply to indicate that it is live.

Next, save the file as code.py on your Trinket M0, which shows up on your computer as the CIRCUITPY USB drive.

# SPDX-FileCopyrightText: 2017 John Edgar Park for Adafruit Industries
# SPDX-License-Identifier: MIT

# Chilled Drinkibot

import time

import board
from digitalio import DigitalInOut, Direction, Pull

led = DigitalInOut(board.D2)  # Button LED
led.direction = Direction.OUTPUT

button = DigitalInOut(board.D0)
button.direction = Direction.INPUT
button.pull = Pull.UP

chiller = DigitalInOut(board.D3)  # Pin to control the chiller and fan
chiller.direction = Direction.OUTPUT

pump = DigitalInOut(board.D4)  # Pin to control the pump
pump.direction = Direction.OUTPUT

chillTime = 5  # How many _minutes_ of cooling

pumpTime = 35  # How many seconds of pumping

while True:
    # we could also just do "led.value = not button.value" !
    if button.value:
        led.value = False  # turn OFF LED
        chiller.value = False  # turn OFF chiller
        pump.value = False  # turn OFF pump
        led.value = True  # turn ON LED
        chiller.value = True  # turn ON chiller
        time.sleep(chillTime * 60)  # wait chiller time (in seconds)
        chiller.value = False  # turn OFF chiller
        pump.value = True  # turn ON pump
        time.sleep(pumpTime)  # wait pump time
        pump.value = False  # turn OFF pump
        led.value = False  # turn OFF LED

    time.sleep(0.01)  # debounce delay

Next, with the chiller assembly and pump connected, you can test out your system, and then finalize assembly!

Thermal Tape

Clean the bottom of your chilling vessel, and the top of the Peltier. Then, cut a section of thermal tape to size, peel off it's protective film from one side, and stick it to the Peltier. Then, peel the other side and press the chilling vessel down onto it firmly for about twenty seconds for good adhesion.

This will greatly improve the thermal conductivity of the vessel!

Here you can see the frost building up on the exposed Peltier cooler as the liquid inside the vessel has be chilled from 22° C / 71.6° F  down to 3.7° C / 38.7° F ! 

You can see from the photo of my workbench, that I've got a temporary setup in place while testing, but now it's time to neaten things up! You can build your own case/stand to elevate and enclose the electronics and make the button, switch and meter more accessible.

I designed a simple stand for this, which can be cut from wood or plastic on a CNC mill or laser cutter, or 3D printed. Download the file attached below to make your own!

Here are the same curves extruded into 3mm thick models for 3D printing.

In case you'd like to edit the file, here's a zip archive containing a .step file.

After measuring and designing the stand, I made a quick prototype cut from cardboard on a laser cutter.

This is very helpful in figuring out if things work before doing so from more expensive materials, or making a slow 3D print.

You can see here that I had mis-measured the panel meter size, so I adjusted that before continuing.


Once you've made your parts, go ahead and press fit them together. It may take a bit of trimming from a hobby knife to get an exact fit for 3D printed parts, but laser cut parts should fit together right off the machine. If you've laser cut the parts from acrylic, you can use some acrylic cement to fix them together.


Next, assemble the components to the stand. Start by removing the screws from the underside of the chiller assembly, and then screw them back in through the bottom of the stand to affix it. You may choose to remove the grill or leave it in place.

Panel Meter

Push the panel mount temperature meter through the square hole, and then re-connect its two wire connectors.


Mount the PCB using four screws and two standoffs. Place each standoff on the back of the panel, then screw short screws in from the front to hold them in place. 

Set the PCB over the standoffs, and screw them down with two more short screws.

Heat Sinks

You can optionally add extra heat sinks to the MOSFETs, although the cool well without them.

This may be helpful if you have very high ambient temperature, however, or run the Chilled Drinkibot for extended periods of time!

Switch & Button

Feed the switch and button through the holes at the top of the stand. You can then solder the button wires to the board, or connect with cold splices or interconnects if you chose to do that.


Slide the pump into it's place from the front, and then screw in a set of 2.5mm screws and nuts (or standoffs for convenience) to hold it in place.

Then, solder or connect it's wires to the board.

Lastly, feed the Peltier cooler and fan wiring in and connect them to their wiring on the PCB. Here, I did so using splice taps, but you can use removable interconnects or simply solder them together (be sure to protect with heat shrink tubing in this case.


With everything in place and connected to the board, you're ready to chill a beverage! Place the temperature probe into the chilling vessel, as well as the input pump tube, which you can cut to size. In the orientation shown here, the bottom tube is the input.

Then, pour an ounce or two of drink into the chilling vessel, and place the output tube into a drinking glass.

Plug the Trinket M0 into USB power, and then flip the 12V switch.

When you're ready, press the button on the front of the drink chiller, and watch the magic! After a few minutes, the drink will be cold, and the pump will transport it into your waiting glass. Enjoy!

This guide was first published on Nov 03, 2017. It was last updated on Nov 29, 2023.