From 8edca25e174c6a2e5e520a04cf59882febe51f00 Mon Sep 17 00:00:00 2001 From: delia vasile Date: Sun, 31 May 2026 23:41:09 +0300 Subject: [PATCH] Final documentation --- .../2026/delia.vasile1402/architecture.svg | 141 +++++++++++++----- .../2026/delia.vasile1402/finalproject.webp | Bin 0 -> 41924 bytes .../project/2026/delia.vasile1402/index.md | 24 ++- 3 files changed, 119 insertions(+), 46 deletions(-) create mode 100644 website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/finalproject.webp diff --git a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/architecture.svg b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/architecture.svg index 8c391f1f8d2..d59c20c56d7 100644 --- a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/architecture.svg +++ b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/architecture.svg @@ -1,39 +1,102 @@ - - - - - - - - - - STM32 NUCLEO-U545RE-Q - Main MCU + Internal RTC - - - - SSD1306 OLED - Display via I2C - - I2C - - - - Push buttons - Feed / Play / Sleep - - EXTI - - - - Passive buzzer - Audio via PWM - - PWM - - - - USB power - 5V supply - - +

5V

EXTI

I2C

PWM

USB
Power

SH1106 OLED
Display

Push Buttons
Feed, Play, Sleep

STM32 NUCLEO-
U545RE-Q

Passive Buzzer
Audio

\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/finalproject.webp b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/finalproject.webp new file mode 100644 index 0000000000000000000000000000000000000000..4b1e834a1226f2181fd37348041651cddcb3c210 GIT binary patch literal 41924 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 literal 0 HcmV?d00001 diff --git a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/index.md b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/index.md index 7532d2b1d2a..3f041d1ce92 100644 --- a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/index.md @@ -10,7 +10,7 @@ A virtual pet that lives, grows, and misses you when you're away ## Description -A Tamagotchi (digital pet) built on the STM32 NUCLEO-U545RE-Q microcontroller, programmed entirely in Rust. The system uses a finite state machine with concurrent async tasks. It provides visual feedback via an OLED screen, audio feedback via a PWM-driven passive buzzer, and accepts input via three physical buttons (Feed, Play, Sleep). The pet's state (hunger, happiness, fatigue) degrades over time using the microcontroller's internal RTC, so the pet continues to age even when the device is idle. +A Tamagotchi (digital pet) built on the STM32 NUCLEO-U545RE-Q microcontroller, programmed entirely in Rust. The system uses a finite state machine with 11 distinct pet states and 5 concurrent async tasks running on the Embassy framework. It provides visual feedback via an SH1106 OLED screen with custom pixel-art animations, audio feedback via a PWM-driven passive buzzer with unique melodies per state, and accepts input via three physical buttons (Feed, Play, Sleep). The pet's stats (hunger, happiness, fatigue) decay over time, driving state transitions and triggering warning sounds. ## Motivation @@ -22,7 +22,7 @@ I chose this project because it combines several embedded systems concepts (asyn The main components of the system are: - **STM32 NUCLEO-U545RE-Q** — main microcontroller with internal RTC running Embassy/Rust -- **SSD1306 OLED screen** — displays the pet's current state via I2C +- **SH1106 OLED screen** — displays the pet's current state via I2C - **3 push buttons** — user input (Feed, Play, Sleep) via EXTI interrupts - **Passive buzzer + transistor** — audio feedback via hardware PWM @@ -40,12 +40,19 @@ Set up the development environment and started experimenting with Embassy on the ### Week 10 - 11 Developed the KiCad schematic and assembled the prototype for the project. +### Week 12 +Implemented the pet FSM, display rendering, button input, and PWM audio. + +### Week 13 +Debugged async task interactions. Tuned gameplay parameters and finalized the hardware assembly. + ## Hardware -The project uses the STM32 NUCLEO-U545RE-Q as the main microcontroller. An SSD1306 OLED screen is connected via I2C. Three push buttons handle user input and a passive buzzer driven by a transistor provides audio feedback. Time tracking is handled by the microcontroller's built-in RTC. +The project uses the STM32 NUCLEO-U545RE-Q as the main microcontroller. An SH1106 OLED screen is connected via I2C. Three push buttons handle user input and a passive buzzer driven by a transistor provides audio feedback. ![Hardware photo](hardware.webp) +![Final project photo](finalproject.webp) ## Schematics ![KiCad Schematic](schematic.webp) @@ -55,7 +62,7 @@ The project uses the STM32 NUCLEO-U545RE-Q as the main microcontroller. An SSD13 | Device | Usage | Price | |--------|-------|-------| | STM32 NUCLEO-U545RE-Q | Main microcontroller | — | -| SSD1306 OLED screen | Graphical interface | 20 RON | +| SH1106 OLED screen | Graphical interface | 20 RON | | 3x Push buttons | User input (Feed/Play/Sleep) | 5 RON | | Passive buzzer + transistor | Audio feedback | 6 RON | | Jumper wires + breadboard | Assembly | 15 RON | @@ -64,10 +71,13 @@ The project uses the STM32 NUCLEO-U545RE-Q as the main microcontroller. An SSD13 | Library | Description | Usage | |---------|-------------|-------| -| `embassy-stm32` | Async HAL for STM32 | I2C, EXTI, Timers, RTC | -| `embassy-time` | Async time management | Managing concurrent tasks | +| `embassy-stm32` | Async HAL for STM32 | I2C, EXTI, TIM3 PWM, RCC | +| `embassy-executor` | Async task executor | 5 concurrent tasks, cooperative scheduling | +| `embassy-time` | Async time management | Timers, tick scheduling, debounce | +| `embassy-sync` | Sync primitives | Mutex, Channel for shared state | | `embedded-graphics` | 2D graphics library | Drawing to the OLED display | -| `ssd1306` | Display driver for SSD1306 | Used for the OLED screen | +| `sh1106` | Display driver for SH1106 | Used for the OLED screen | +| `embedded-hal 0.2` | Hardware | PWM trait for buzzer control | | `defmt` | Logging framework | Debugging | ## Links