Operation – here in the browser
The replica calculates with the same recipes, glass sizes and pump times as the real firmware. Only time runs faster, so there is no waiting.
Total volume 200 ml
Pouring time – s
Drinks poured 0
The five strength levels
The mixing ratio is set in sixths in the source code (RECIPE[5][3]). Level 3 is the default – level 5 gets a skull on the display.
| Level | Sparkling | Aperol | Water | Character |
|---|
Build
Arduino Nano, an I2C display, three pumps via N-channel MOSFETs.
| Pin | Function |
|---|---|
| A0 | Potentiometer – wiper, ends to 5 V and GND |
| A4 / A5 | LCD 16×2 with I2C backpack (PCF8574), SDA/SCL |
| D2 | “Next/Menu” button to GND, internal pull-up |
| D3 | “Start” button to GND, internal pull-up |
| D9 | MOSFET gate – pump Water |
| D10 | MOSFET gate – pump Sparkling |
| D11 | MOSFET gate – pump Aperol |
| D5 | Piezo buzzer (optional; without it everything keeps running silently) |
Each pump needs a flyback diode (e.g. 1N4007) connected antiparallel – otherwise the inductive spike at switch-off destroys the MOSFET. In addition, a gate series resistor of about 220 Ω and a pull-down of around 10 kΩ from gate to GND, so that the pumps reliably stay off during boot.
What the menu can do
Holding the Next button for 3 seconds opens the main menu.
Party round
Choose 1–9 glasses on the potentiometer, and the machine pours them one after another. In between, change the glass and press Start. A fanfare at the end.
Cleaning
For each pump in turn: swap the bottle for a cleaning bottle, press Start, rinse for 10 seconds. A long press on Next cancels.
Manual
Run a single pump by hand – for priming the hoses. The pump runs as long as Start is held.
Calibration
The pump runs for exactly 10 s into a measuring jug; set the measured amount on the potentiometer and save. It is stored in the EEPROM and survives power cuts.
Statistics
Drink counter from the EEPROM. Holding Start for 3 s resets it.
Screensaver
After 60 s of inactivity, a glass bounces across the display. Any button or the potentiometer wakes the machine – without triggering anything.
Two things that took some work
Why calibration is necessary
The amount is controlled via the pump time : run time = desired millilitres ÷ flow rate. The preset is 250 ml per 10 s – which is practically never right, because hose length, height and viscosity all play a part. So all three pumps go through the calibration menu once, and then the amounts are right.
No reverse running with one MOSFET
A single N-channel MOSFET only switches on and off – the polarity at the pump stays the same and cannot be reversed with it. Real suck-back would need an H-bridge per pump (DRV8871 or L298N). As a substitute, the firmware inserts a 1.2 s drip pause after each pumping cycle before the next ingredient follows.
Build your own
The package contains the commented Arduino sketch, the complete instructions with wiring and a quick guide as a PDF. The “LiquidCrystal I2C” library by Frank de Brabander is required.
Request the source codeDownload on request – a short registration, and I unlock it.