Turn any grinder into a precision smart grind-by-weight system
demo_small.mp4 |
⚠️ Newly Released Mod - Buyer Beware!
This is a recently released modification project that transforms grinders into smart grind-by-weight systems. While functional and free/open source, it's should be considered an experimental mod that requires technical skill to build and may have rough edges. Build at your own risk !
The Smart Grind-by-Weight is a user-friendly, touch interface-driven, highly accurate open source grinder modification that can transforms any grinder (with a accesable motor relay) into an intelligent grind-by-weight system. Originally developed for the Eureka Mignon Specialita, the system can be easily adapted for other grinders.
The concept is simple: Perform a "brain swap" on your grinder. Replace the original controller with our intelligent ESP32-S3 controller and add a precision load cell to the mix.
Upgrade cost: €30-40 in parts
Target accuracy: ±0.03g tolerance
No regrets: No permanent modifications, and original grind-by-time mode is also available
- User-friendly interface with 3 profiles: Single, Double, Custom
- Beautiful display with simple graphics or detailed charts (easily switchable)
- High accuracy: ±0.03g error tolerance
- Zero-shot learning: Algorithm adapts instantly to any grind size, bean setting, humidity etc. without manual tuning
- Original timed run preserved – there is a setting to enable the original Grind-By-Time mode
- BLE OTA updates for firmware
- Advanced analytics using BLE data transfer and Python Streamlit reports
- For Eureka: No permanent modifications needed - just swap the screen and add 3D printed parts
Our predictive grinding system uses a zero-shot learning approach that adapts to any conditions:
flowchart LR
start((Start Grind)) --> T[TARING]
T --> E[PREDICTIVE<br/>learn latency & flow_rate<br/>compute motor_stop_target_weight]
E --> S[SETTLING]
S --> P[PULSE<br/>bounded pulse using effective_flow_rate]
P -->|abs_error <= tolerance OR error < 0 OR pulses >= max| C[COMPLETED]
P -->|needs more| S
Key Innovation: The algorithm learns grind latency and flow rate in real-time, then uses predictive control to stop just before the target weight, followed by precision pulses to reach exact accuracy. No manual tuning required.
- Get the parts - ESP32-S3 AMOLED display + HX711 + load cell (~€35 total) → See Parts List
- 3D print the mounting parts - All STL files included, no supports needed → See 3D Printed Parts | Community Designs
- Flash firmware & calibrate - Web Flasher (Chrome/Edge desktop + Android only) or command line
- Follow the assembly video - Complete Eureka build process
Ready to build? → See DOC.md for complete build instructions, parts list, and usage guide.
If you want to modify the code or contribute to development, see DEVELOPMENT.md for build instructions.
Design Files: The complete Fusion 360 design is available at 3d_files/smart-grind-by-weight. Eureka Mignon.f3z for modification and adaptation to other grinder models.
Export your grind data and analyze it with the included Streamlit dashboard:
python3 tools/grinder.py analyzeTrack accuracy, flow rates, grind times, and optimize your coffee workflow with detailed session analytics.
This project was inspired by and builds upon the excellent work of:
- openGBW by jb-xyz - Open source grind-by-weight system
- Coffee Grinder Smart Scale by Besson - Smart scale integration concepts
My goal with this project was to get real-life experience coding with AI agents. The code reflects that learning journey. I've learned a lot, and ultimately I'm in awe of how fast you can produce results with AI assistance.
What I've learned so far is that "vibe coding" with AI is great for POCs and testing theories. But afterward you must pivot and reimplement features while keeping a close eye on the architecture the AI produces. Otherwise you'll get stuck at dead ends that require painful refactoring (been there, done that).
In this project, that's most obvious when at state management - it's a bit cluttered in places. I'm very happy with the end result and I'm releasing the project as is. It eliminates grind weight variability from the espresso equation, bringing you one step closer to dialing in perfect shots.
Project Status: This project is shared 'as-is' and I have limited availability for support. While I'm happy to share what I've built, please understand that troubleshooting and feature requests may receive limited attention.
Want to dive deeper? → Check out DOC.md for comprehensive documentation.
Different grinder? → See Grinder Compatibility Matrix for adaptation guidance.
Having issues? → See TROUBLESHOOTING.md for common problems and solutions.
Changelog & Updates → See Releases for version history and updates.
