Table of Contents

ZonCoffee PID Controller

ZonCoffee is an inexpensive PID controller built around the Atmel ATMEGA32u4.

Hardware Setup

  1. Connect your LCD
    1. Serial LCDs are connected to the “LCD” screw terminal
    2. Parallel LCDs are connected through the auxiliary connector
  2. Connect a rotary encoder and switch to the labeled screw terminal
    1. Internal pull-ups are enabled, so the switch should be connected between ground and the sw pin
    2. If your rotary encoder does not operate correctly with any pin configuration, you may need to try different quadrature sequences in /lib/Quadrature/Quadrature.cpp
  3. Connect a solid-state relay to the 2-pin SSR screw terminal
  4. Connect your 5v power supply (either USB or screw terminal)

Software Setup

To get started, download the ZonCoffee Arduino sketch and libraries

Your ZonCoffee board comes pre-loaded with the latest firmware. However, you can flash your own custom firmware

Arduino IDE

Download the latest Arduino IDE and make sure that the selected board is Arduino Leonardo. The IDE should function as if the ZonCoffee was a normal Arduino Leonardo.

Note: In that zip file, all libraries in the “lib” folder need to be installed to your Arduino IDE. If you haven't done this before, you just need to copy and paste all subfolders of the “lib” directory into the “libraries” folder of your Arduino installation.

LCD support

The firmware comes pre-configured for the HD44780 parallel LCD display. To use a SparkFun serial LCD, you will need to change a couple configuration options:

In the Arduino sketch, browse to options.h

  13 //#define LCDSF      // Use SparkFun serial lcd
  14 #define LCDHD    // Use standard HD44780 lcd or compat.

Uncomment the LCDSF line and comment out the LCDHD line. Now your SparkFun LCD should work properly.

There seems to be a bug in the Arduino IDE when switching between LCDs. If you change the selected display in options.h and get a ton of compilation errors, change the order of these two blocks in zoncoffee.ino (for example):

Change this:

  15 // Setup LCD
  16 #ifdef LCDHD
  17   #include <LiquidCrystal.h>
  18   LiquidCrystal lcd(A5,A4,A3,A2,A1,A0);
  19 #endif
  20
  21 #ifdef LCDSF
  22   #include <SLCD.h>
  23   SLCD sflcd = SLCD(LCDROWS, LCDCOLS);
  24 #endif
  

To this:

  15 // Setup LCD
  16 #ifdef LCDSF
  17   #include <SLCD.h>
  18   SLCD sflcd = SLCD(LCDROWS, LCDCOLS);
  19 #endif
  20 #ifdef LCDHD
  21   #include <LiquidCrystal.h>
  22   LiquidCrystal lcd(A5,A4,A3,A2,A1,A0);
  23 #endif
  24
  

…or the other way around.