|
1 | | -# Rusty Coffee |
2 | | -An automated coffee machine in which you can schedule your coffee and customize it to your heart's desire. |
3 | | - |
4 | | -:::info |
5 | | - |
6 | | -**Author**: Lucian-Stefan Lesu \ |
7 | | -**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Lluke18 |
8 | | - |
9 | | -::: |
10 | | - |
11 | | -<!-- do not delete the \ after your name --> |
12 | | - |
13 | | -## Description |
14 | | - |
15 | | -This smart coffee machine has lots of additional features and options when it comes to brewing your favorite refreshing hot drink - coffee. It also has a pulse sensor that, if your pulse is too high, won’t let you drink any coffee! |
16 | | - |
17 | | -## Motivation |
18 | | - |
19 | | -Because I love coffee. Of course, I'm not addicted. |
20 | | - |
21 | | -## Architecture |
22 | | - |
23 | | - |
24 | | - |
25 | | -## Log |
26 | | - |
27 | | -<!-- write your progress here every week --> |
28 | | - |
29 | | -### Week 12 - 18 April |
30 | | -The main Stm32 arrived from mouser. Tested it, and everything works fine. |
31 | | - |
32 | | -### Week 12 - 18 May |
33 | | - |
34 | | -### Week 19 - 25 May |
35 | | - |
36 | | -## Hardware |
37 | | - |
38 | | --STM32U545 |
39 | | -- Water pump |
40 | | --pulse sensor |
41 | | -- TFT LCD Touchscreen |
42 | | --heating element |
43 | | - |
44 | | -### Schematics |
45 | | - |
46 | | -Place your KiCAD or similar schematics here in SVG format. |
47 | | - |
48 | | -### Bill of Materials |
49 | | - |
50 | | -<!-- Fill out this table with all the hardware components that you might need. |
51 | | -
|
52 | | -The format is |
53 | | -``` |
54 | | -| [Device](link://to/device) | This is used ... | [price](link://to/store) | |
55 | | -
|
56 | | -``` |
57 | | -
|
58 | | ---> |
59 | | - |
60 | | -| Device | Usage | Price | |
61 | | -|--------|--------|-------| |
62 | | -| [STM32U545](https://www.st.com/en/microcontrollers-microprocessors/stm32u535-545.html) | The microcontroller | [106.59 RON] (https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | |
63 | | - |
64 | | - |
65 | | -## Software |
66 | | - |
67 | | -| Library | Description | Usage | |
68 | | -|---------|-------------|-------| |
69 | | -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | |
70 | | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | |
71 | | - |
72 | | -## Links |
73 | | - |
74 | | -<!-- Add a few links that inspired you and that you think you will use for your project --> |
75 | | - |
76 | | -1. [link](https://example.com) |
77 | | -2. [link](https://example3.com) |
78 | | -... |
| 1 | +# Rusty Coffee |
| 2 | +An automated coffee machine in which you can schedule your coffee and customize it to your heart's desire. |
| 3 | + |
| 4 | +:::info |
| 5 | + |
| 6 | +*Author*: Lucian-Stefan Lesu \ |
| 7 | +*GitHub Project Link*: https://github.com/UPB-PMRust-Students/fils-project-2026-Lluke18 |
| 8 | + |
| 9 | +::: |
| 10 | + |
| 11 | +<!-- do not delete the \ after your name --> |
| 12 | + |
| 13 | +## Description |
| 14 | + |
| 15 | +This smart coffee machine has lots of additional features and options when it comes to brewing your favorite refreshing hot drink - coffee. It also has a pulse sensor that, if your pulse is too high, won’t let you drink any coffee! |
| 16 | + |
| 17 | +## Motivation |
| 18 | + |
| 19 | +Because I love coffee. Of course, I'm not addicted. |
| 20 | + |
| 21 | +## Architecture |
| 22 | + |
| 23 | +Rusty Coffee is a smart, real-time espresso machine powered by an STM32 microcontroller running the Embassy async RTOS. By utilizing concurrent background tasks, the system seamlessly manages a custom touchscreen interface, wireless Bluetooth overrides, and a precision thermal controller simultaneously, ensuring the UI never lags or freezes. |
| 24 | + |
| 25 | +The machine features a unique dual-sensor safety interlock. Before dispensing, an ultrasonic sensor physically verifies that a mug is present, while a medical-grade pulse oximeter acts as a biometric gatekeeper—calculating a real-time rolling average of the user's heart rate to ensure it is at a safe level. Once cleared, a software-defined PID algorithm dynamically pulses a high-voltage Solid State Relay, locking the espresso boiler precisely at 98.0°C for the perfect extraction. |
| 26 | + |
| 27 | +Some photos of the project: |
| 28 | + |
| 29 | + |
| 30 | + |
| 31 | +## Log |
| 32 | + |
| 33 | +<!-- write your progress here every week --> |
| 34 | + |
| 35 | +### 13 - 19 April |
| 36 | +The main Stm32 arrived from mouser. Tested it, and everything works fine. |
| 37 | +I disassembled the coffee machine that I bought for the heating element. At the lab, I'll desolder the wires connected to the relay module so that I can connect it to a way cooler one. |
| 38 | + |
| 39 | +### 20 - 26 April |
| 40 | +The rest of the components arrived. Aside from the pulse sensor, which doesn't work, apparently, everything seems to be good. Also, I started connecting the display. The LCD looks good, I started with basic shapes from the embedded graphics library. In the future, I'll also have to implement the touch component. |
| 41 | + |
| 42 | +### 27 - 3 May |
| 43 | + |
| 44 | +I finally managed to connect the touch as well. I had to be careful, because apparently the max freq of the touch chip is only 5Mhz, while the screen can go up to much higher. I also implemented the ultrasonic sensor, which was easy work. |
| 45 | + |
| 46 | +### 4 - 10 May |
| 47 | +Ok so I connected the thermocouple as near as I could get it to the heating element. I was lucky, as the coffee machine I bought ( the cheapest one I found, obviously...) had a little knob in which I fitted the screw. On the other end, I connected it to the max31855 module (it's basically a special ADC and amplifier for the signal) |
| 48 | + |
| 49 | +### 11 - 17 May |
| 50 | +Focused more on code, and also connected the newly arrived max30102 SPO2 sensor (thx Roy for the recommendation). |
| 51 | + |
| 52 | +### 18 - 24 May |
| 53 | +I managed to connect the bluetooth module as well (thx Mircea for the trade!). I also connected the lower voltage part of the SSR. Other than that, I wrote more code... |
| 54 | + |
| 55 | +### 25 - 31 May |
| 56 | +Time to bring it all together. I did the final connections of the heating element, using Lexman(basically Wago knockoffs) connectors. I also connected the 230V part to the heating element. I made extra sure everything is safe by isolating it with special tape. Finally, I Screwed the coffee machine back together. Well, let's hope it works at the Pm fair. |
| 57 | + |
| 58 | + |
| 59 | +## Hardware |
| 60 | + |
| 61 | +- STM32U545 microcontroller |
| 62 | +- max30102 sensor |
| 63 | +- TFT LCD Touchscreen |
| 64 | +- heating element + case from a pre-existing coffee machine |
| 65 | +- HC-SR04 ultrasonic sensor |
| 66 | +- HC-05 bluetooth module |
| 67 | +- type K thermocouple |
| 68 | +- max31855 thermocouple module |
| 69 | +- DA solid state relay |
| 70 | + |
| 71 | + |
| 72 | +### Schematics |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | + |
| 77 | +### Bill of Materials |
| 78 | + |
| 79 | +<!-- Fill out this table with all the hardware components that you might need. |
| 80 | +
|
| 81 | +The format is |
| 82 | +
|
| 83 | +| [Device](link://to/device) | This is used ... | [price](link://to/store) | |
| 84 | +
|
| 85 | +
|
| 86 | +
|
| 87 | +--> |
| 88 | + |
| 89 | +| Device | Usage | Price | |
| 90 | +|--------|--------|-------| |
| 91 | +| [STM32U545](https://www.st.com/en/microcontrollers-microprocessors/stm32u535-545.html) | The microcontroller | [106.59 RON] (https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | |
| 92 | +| [max30102] | pulse sensor | [32 RON] (https://www.emag.ro/modul-puls-si-spo2-max30102-multicolor-max30102-mod-black/pd/D3R798MBM/) | |
| 93 | +| [ST7789 TFT LCD Screen] | tft lcd display | [50 RON] (https://www.emag.ro/display-tft-spi-2-8-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg359/pd/DP347SYBM/)| |
| 94 | +| [HC-SR04] | ultrasonic sensor | [15 RON] (https://www.optimusdigital.ro/en/ultrasonic-sensors/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=hc-sr04&results=15)| |
| 95 | +| [max31855] | temperature sensor | [50 RON] (https://www.emag.ro/sezor-de-temperatura-max31855-breakout-pentru-termocuplu-tip-k-interfata-spi-dc-3-5v-bmx640/pd/DX7WTR3BM/)| |
| 96 | +| [k-type thermocouple] | thermocouple | [15 RON] (https://www.optimusdigital.ro/en/temperature-sensors/5006-k-type-thermocouple-m6-1-m.html?search_query=thermocouple&results=40)| |
| 97 | +| [SSR DA] | solid state relay | [40 RON] (https://www.emag.ro/releu-solid-state-ssr-25da-ssr-25-da-ac-control-3-32v-dc-pana-la-24-380v-ac-aur331/pd/DDK72P3BM/)| |
| 98 | +| [Wires] | the Dupont wires | [5 RON] (https://www.optimusdigital.ro/en/wires-with-connectors/889-set-fire-tata-tata-10p-20-cm.html?search_query=wires&results=429)| |
| 99 | +| [HC-05] | bluetooth module | [29 RON] (https://www.optimusdigital.ro/en/wireless-bluetooth/153-hc-05-master-slave-bluetooth-module-with-adapter-33v-and-5v-compatible.html?search_query=hc+05+bluetooth+module&results=65)| |
| 100 | + |
| 101 | + |
| 102 | + |
| 103 | + |
| 104 | +## Software |
| 105 | + |
| 106 | +| Library | Description | Usage | |
| 107 | +|---------|-------------|-------| |
| 108 | +| [mipidsi](https://github.com/almindor/mipidsi) | Display driver for ST7789 | Used for the custom display of the coffee machine | |
| 109 | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | |
| 110 | +| [max3010x](https://github.com/eldruin/max3010x-rs) | pulse sensor library | The strictly typed I2C driver configured for 18-bit Pw411 resolution and FIFO rollover to read the optical pulse data. |
| 111 | +| [pid](https://github.com/braincore/pid-rs) | PID library| The mathematical controller calculating the exact PWM duty cycle needed to hold the boiler at 90.0°C | |
| 112 | +| [heapless](https://github.com/rust-embedded/heapless) | heapless library| Providing statically allocated String and Vec buffers so the system never panics from dynamic memory allocation failures. |
| 113 | +| [pid](https://github.com/braincore/pid-rs) | PID library| The mathematical controller calculating the exact PWM duty cycle needed to hold the boiler at 90.0°C | |
| 114 | +| [defmt](https://www.google.com/search?q=%5Bhttps://github.com/knurling-rs/defmt%5D(https://github.com/knurling-rs/defmt)) | Deferred formatting logging framework | Providing ultra-fast, low-overhead logging for the pulse sensor diagnostics, touch interactions, and Bluetooth commands over your hardware debug probe. | |
| 115 | +| [embassy](https://www.google.com/search?q=%5Bhttps://github.com/embassy-rs/embassy%5D(https://github.com/embassy-rs/embassy)) | Async embedded framework for Rust | Providing the real-time task scheduler (embassy-executor), timers (embassy-time), and hardware drivers (embassy-stm32) for the I2C, SPI, and UART peripherals. | |
| 116 | +| [embassy-sync](https://www.google.com/search?q=%5Bhttps://github.com/embassy-rs/embassy/tree/main/embassy-sync%5D(https://github.com/embassy-rs/embassy/tree/main/embassy-sync)) | Async synchronization primitives | Managing the Watch variables (ALARM_TIME, LATEST_BPM, BREW_ACTIVE) to safely share state between the Bluetooth, Pulse, and Main UI tasks without locking up the CPU. | |
| 117 | + |
| 118 | +## Links |
| 119 | + |
| 120 | +<!-- Add a few links that inspired you and that you think you will use for your project --> |
| 121 | + |
| 122 | +1. [Popular Coffee addict explains why cheap coffee machines suck](https://www.youtube.com/watch?v=P-Ga8SRhRrE&list=PLs-AM-gsRo5KqLKIKE5brhv4XxkQ8MSIq) |
| 123 | +2. [Weirdo Coffee addict reviews an open-source coffee machine](https://www.youtube.com/watch?v=UaC4IQO2WCk&t=1176s) |
| 124 | +3. [Hipster coffee addict builds his own hipster espresso machine](https://www.youtube.com/watch?v=JlgXGrb4lVE&list=PLs-AM-gsRo5KqLKIKE5brhv4XxkQ8MSIq&index=3) |
0 commit comments