Skip to content

jaapp/smart-grind-by-weight

Repository files navigation

Smart Grind-by-Weight

Turn any grinder into a precision smart grind-by-weight system

demo_small.mp4

Smart Grind-by-Weight Modification

⚠️ 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


✨ Features

  • 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

🧠 Intelligent Grinding Algorithm

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
Loading

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.


🚀 Quick Start

For Users - Using Pre-built Firmware

  1. Get the parts - ESP32-S3 AMOLED display + HX711 + load cell (~€35 total) → See Parts List
  2. 3D print the mounting parts - All STL files included, no supports needed → See 3D Printed Parts | Community Designs
  3. Flash firmware & calibrate - Web Flasher (Chrome/Edge desktop + Android only) or command line
  4. Follow the assembly video - Complete Eureka build process

Ready to build? → See DOC.md for complete build instructions, parts list, and usage guide.


For Developers - Building from Source

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.


📊 Analytics Dashboard

Analytics Dashboard

Export your grind data and analyze it with the included Streamlit dashboard:

python3 tools/grinder.py analyze

Track accuracy, flow rates, grind times, and optimize your coffee workflow with detailed session analytics.


🙏 Credits & Inspiration

This project was inspired by and builds upon the excellent work of:


📝 Personal Note

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.

About

Touchscreen ESP32‑S3 controller and load cell for precise coffee dosing.

Resources

License

Stars

Watchers

Forks

Packages

No packages published