Off course the hardware needs to be accompanied by some nice software. I thought I’d make some initial sketches of the tablet app UI to form a mental image of how the software should look before I dive into the architectural design of the app on the tablet and the firmware for the esp8266 and Arduino.
The application has a shell that will show a logo (nav bar top left), a screen title / info (nav bar top middle) and a settings button (nav bar top right). At the bottom is a bar with four tabs:
- A coffee tab that is used for the preparation of coffee
- A scale tab that gives access to the scale functions when you are not necessarily preparing coffee.
- A maintenance tab that is used to do the maintenance routines on the machine (like flushing and calibration).
- A recipe / profile tab that can be used to manage and track coffee recipes.
The contents of the tabs load in the middle content area of the app.
When the machine is off it will only offer a button to turn it on. The top right icon (to go to the app settings that can be used to establish a connection to the Arduino) is available, as is the bottom right icon to go manage the recipes (as the machine does not have to be on for that). All other tabs at the bottom show the on button instead of their content. Turning the machine on, will start heating of the boiler and will provide access to the other tabs that were previously unavailable.
The coffee tab
The coffee tab will show the name of the active recipe / profile. It will show a row with information like the current boiler pressure, current boiler temperature and current group head temperature. It will provide controls to adjust the desired steam pressure and the desired brew temperature for the coffee. Adjusting any of the controls will show a save icon that can be used to save the adjusted values to the current recipe. There will also be two icons to start preparing coffee: A button that starts an automated sequence and a button that either starts or stops the water flow through the group head (and turns on the pimp) to manually brew a coffee.
The scale tab
The scale tab will show a stopwatch and the current weight on the scale. The stopwatch can be started and stopped by a button and can also be reset. The scale provides a tare function that will reset the current balance of the scale to zero (regardless of what is on the plateau).
The maintenance tab.
The maintenance tab will provide access to two flush routines and to the calibration functions of the pressure and temperature sensors. The group head flush is just a quick flush of the group head and screen in case there is any ground coffee residue there. The back-flush routine is a little bit elaborate:
- Remove portafilter basket and insert blind filter in portafilter. Add cleaning powder. Insert portafilter into group head. Press back-flush button.
- The machine will activate brew cycle for 10 seconds. Stop 10 seconds. Repeat 5 times. After the routine it will show the continue button.
- Remove portafilter. Press continue button. The machine will activate brew cycle. Rinse portafilter with blind filter in stream of water from group head. The machine will stop cycle after a while and show continue button.
- Insert portafilter with blind filter into group head. The machine will Repeat step (2) without detergent. The machine will show continue button.
- Remove portafilter and switch out the blind basket with the basket used to brew. press continue.
- The machine will flush flush the group head once more to ensure no soap residue is left.
The calibration buttons are available to see the temperature / pressure offsets and adjust them accordingly.
The coffee routine
The coffee routine is the routine that is started when you press the automated coffee routine button on the coffee tab. It will show the weight on the scale on the first tab, the target weight to be ground and the (approximate) grind setting from the current recipe. There will be buttons to tare the scale (when the empty portafilter is on top of the plateau) or to subtract a predefined weight (when you forget to place the portafilter on the scale and start grinding immediately. This happens to me a lot when I’m in a hurry). After you are done grinding, you can place the portafilter again on the plateau to weigh the coffee. When the desired amount of coffee is in the basket, you can press continue to start the cooling flush routine. While the machine is flushing the puck prep routine can be finished. After the machine is done flushing, install the portafilter, optionally adjust the target weight of the brew and place the empty cups on the plateau. You can tare manually, or just press continue to auto tare the scale. After pressing continue the brewing process will start with some nice graphs showing the pressure, temperature and weight profiles in a single graph. The machine will automatically stop when reaching the target weight. After reaching the weight, depending on the desired time specified in the recipe, the machine might make a recommendation for adjustment of the grind size.
Choosing the recipe tab will show a list of recipes that are stored and that can be used to adjust the machine parameters at once. Selecting a recipe is as easy as placing a check mark before a recipe. There are edit and delete buttons as well as an add button to add a new recipe. Recipe data that might be stored is:
- Coffee type
- Roast (light / dark scale)
- Photos (ground beans, end product)
- Dose: this will show as the target weight during automated brew and might control grind time as well.
- Target weight: target weight of the brew. Controls ratio and moment at which the brew process is stopped.
- Temperature: desired temperature of the water as it flows through the group head. Influences flushing routine and boiler pressure.
- Desired duration of the recipe: Used to give grind size advice.
- Pre-infusion time. Controls the time between opening of the group head solenoid and the pump.
- Some notes that can be used as extra info during the brew process.
This is what I came up with so far, and this is the mock-up that I will base the UI and architecture of the app on. Please let me know in the comments if I’ve forgotten anything!