Introduction: Automatic Pour Over Coffee Machine

Make delicious pour-over style coffee with the press of a button! This machine aims to provide a better-tasting and more sustainable alternative to plastic Keurig pods, with a similar level of convenience.

Using a scale built into the drip tray, you know that your coffee to water ratio is going to be perfect every time. The temperature probe ensures your water is at the right temp for your brew before brew!


Thank you to Professor John Gallaugher at Boston College for helping me learn everything needed to complete this project. I've attached his YouTube here, it's a great resource for CircuitPython and Pico projects!

Supplies

Electronics:

Other Materials:

  • Timemore C2 Coffee Hand Grinder (or some equilavent)
  • Electric Kettle
  • 1/8 and 1/4 inch Plywood
  • Pour-over Dripper
  • Coffee Filters
  • Coffee
  • Electrical Tape
  • Double Sided Tape
  • 1 inch Screws
  • Small Bolts and Washers

Tools:

  • Wood Glue
  • Drill
  • Various Drill Bits
  • Digital Calipers
  • Laser Cutter

Step 1: Set Up Your Pico W on CircuitPython

The first step in this project is getting your Raspberry Pi Pico W (or Pico, we don't use the WiFi features on the W). Adafruit has a great guide here that walks you through all the steps to get your board running.

Next, you will need to install the correct library files for all the different electronics we'll be using!

NOTE: You can find my Lib folder by going to my GitHub repository (this has all the necessary library files for the parts we will be using)

Step 2: Get Your Board Wired Up

Alright, here comes the hard part - connecting the many components to the Pico. Attached above is a nearly complete circuit Diagram, only without the correct motor controllers and without the motors themselves. It might look a little confusing, but I'll list all the connections below.


Pico & Breadboard:

  1. Place the Pico on the breadboard
  2. VBUS to both the + rails
  3. One of the GRDs to the - rails

Button:

  1. For now (testing) place the button anywhere on the breadboard (orientation does not matter)
  2. Let to GRD (- rail)
  3. Other Leg to GP11 on the Pico

Potentiometer:

  1. GRD to the - rail
  2. VCC to 3.3v (cannot take 5v, so don't use VBUS power rail!)
  3. Data to GP28

HX711 Load Cell:

  1. Data to GP6
  2. CLK to GP7
  3. VCC to + rail
  4. GRD to - rail

LCD Display:

  1. SDA to GP4
  2. SCL to GP5
  3. VCC to + rail
  4. GRD to - rail

DS18B20 Temp Sensor:

  1. VCC to + rail
  2. GRD to - rail
  3. Data to GP0

L289N Motor Driver (for pumps):

  1. 5V to + rail
  2. GRD to - rail
  3. GRD to your power supply's ground (-) (3A)
  4. 12V to your power supply's (+) (3A)
  5. IN1 to GP12
  6. IN2 to GP13
  7. IN3 to GP14
  8. IN4 to GP15
  9. OUT1 to a pump 1's (+)
  10. OUT2 to pump 1's (-)
  11. OUT3 to pump 2's (+)
  12. OUT4 to pump 2's (-)

BTS790 Motor Driver (for grinder):

  1. 5V to + rail
  2. GRD to - rail
  3. B- to your power supply's ground (-) (3A)
  4. B+ to your power supply's (+) (3A)
  5. R_EN to GP19
  6. L_EN to GP18
  7. RPWM to GP17
  8. LPWM to GP16
  9. M+ to drill motor's (+)
  10. M- to drill motor's (-)

Great Job! Next up we'll test all these components with the code!

Step 3: Get the Code Working

Before worrying about the case, we have to test all the components to ensure they interact with the code correctly. I have attached the code to run the machine below - an improved version will follow. It will include a way to pause and restart the program with the push of a second button.

Plug your Pico into your computer and get circuit Python going on your chosen IDE. Open up your serial console, run the code, and see if there are any snags. Look for error messages regarding missing libraries or miss-wiring and adjust until everything runs smoothly!

Many of the parameters are adjustable, but it may take time to get used to the code to make these changes. I plan on including a settings.toml file in later editions so that users can alter things such as water temp, output range, and dose ratio easily, for now, you'll have to do it in the Python file!

Step 4: Building the Enclosure/Case

Unfortunately, I lost my .svg files for the laser-cut components for this case! I will be creating new ones (likely with an improved design) and uploading them here as they become available!

In the meantime, feel free to create a custom enclosure and please share the results if you come up with a better case design. A couple of notes if you do decide to make a new case:

  1. There needs to be a mount for the servo so that it can interact with the kettle - this will take some fiddling
  2. The kettle must be secured to the base so it does not move around while the servo is actuating it
  3. The case must be short enough to have the kettle accessible from the top, and a hole needs to be cut
  4. The grinder assembly is going to vary depending on what drill motor you have and the size of your grinder
  5. Keeping the grinder still is difficult: I found thick double-sided tape inside a rectangle barely bigger than the grinder's diameter to work well
  6. A cut-out will be needed in the back for both cables and the pumps (they cannot be mounted flush to a wall)

In the coming days, I will upload the svg files for you to follow along! You will need to alter certain dimensions depending on which kettle and which grinder you choose to use!