Oximite is an open-source hardware and software stack that brings true pressure and flow profiling to standard pump-driven espresso machines. Driven by a single Raspberry Pi Pico W running bare-metal Asynchronous Rust, it features dual PID loops, zero-cross Triac phase control, and an embedded Wi-Fi web server.
Welcome to the first official update for oximite, my high-performance, asynchronous Rust controller for smart espresso machines (running on the Raspberry Pi Pico W).
I’m thrilled to announce a major milestone: the initial software draft is largely complete! Even better, I’ve built out a full Hardware-In-the-Loop (HIL) simulation suite, and all of my Python-driven integration tests are passing successfully. With the core firmware architecture, PID loops, web interface, and state machines solidifying, it’s finally time to move towards the physical world: Hardware Design.
First Up: AC Zero-Cross & TRIAC Pump Control
The very first hardware hurdle I am tackling is precision control of the espresso machine's vibratory pump (like the classic Ulka pumps) alongside flow sensor calibration.
To achieve accurate pressure profiling and flow control, I am designing a phase-angle TRIAC firing circuit synced to the 50/60Hz mains. But I am doing the zero-cross detection a bit differently to give me a distinct software advantage. Instead of a circuit that just blips at the exact zero-crossing point, my zero-cross detector is designed to output HIGH for one complete half-wave and LOW for the other. Why does this matter? Standard vibratory pumps require half-wave AC to function correctly, which is usually achieved by putting a diode in series with the pump. Because my zero-cross circuit lets the Pico W easily distinguish between the positive and negative half-cycles of the AC mains, I can write my firmware to trigger the TRIAC only on the correct half-waves, entirely skipping the others.
As a side effect, doing this in software means oximite will be able to drive pumps that don't have an inline diode, or even pumps where the existing diode has fried and shorted out! I handle the half-wave rectification directly via smart TRIAC switching.
Next Step: Flow Calibration
Alongside the pump control, I am calibrating the Hall-effect flow meter.
Stay tuned as the PCB routing begins! Let me know in the comments if you've ever dealt with fried pump diodes, or if you have any thoughts on the hardware approach. ☕⚙️