diff --git a/.github/workflows/image-check.yml b/.github/workflows/image-check.yml index b28c7e02dca..24358516ef6 100644 --- a/.github/workflows/image-check.yml +++ b/.github/workflows/image-check.yml @@ -116,7 +116,7 @@ jobs: ERRORS=0 MAX_WIDTH=1024 MAX_HEIGHT=768 - MAX_FILE_SIZE=307200 # 300KB in bytes (300 * 1024) + MAX_FILE_SIZE=389120 # 380KB in bytes (380 * 1024) FILES="${{ steps.changed-files.outputs.files }}" @@ -178,7 +178,7 @@ jobs: echo " File size: ${FILE_SIZE_KB}KB (${FILE_SIZE} bytes)" if [ "$FILE_SIZE" -gt "$MAX_FILE_SIZE" ]; then - echo " FAIL – File size ${FILE_SIZE_KB}KB exceeds limit of 300KB" + echo " FAIL – File size ${FILE_SIZE_KB}KB exceeds limit of 380KB" ERRORS=$((ERRORS + 1)) else echo " File size OK" @@ -262,4 +262,4 @@ jobs: exit 1 else echo "✅ All SVG files are clean – no embedded base64 images found." - fi + fi \ No newline at end of file diff --git a/slides/lectures/fils_en/01/admin/slides.md b/slides/lectures/fils_en/01/admin/slides.md index 6ea50d9d640..01400c1403d 100644 --- a/slides/lectures/fils_en/01/admin/slides.md +++ b/slides/lectures/fils_en/01/admin/slides.md @@ -7,8 +7,8 @@ - 12 lectures - 1 Q&A lecture for the project -## Labs - - 7 labs +## Labs + Project Support + - 12 labs ## Project - Build a hardware device running software written in Rust @@ -23,12 +23,24 @@ --- # Grading + | Part | Description | Points | |--------|-------------|--------| -| [Lecture](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lecture) tests | You will have a test at every class with subjects from the previous class. | 1p | -| [Final Lecture](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lecture) test | You will have a test during one of the lectures in January. | 4p | -| [Lab](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lab) | Your work at every lab will be graded. | 1p | +| [Lecture](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lecture) tests | You will have a test at every class with subjects from the previous class. | 0.2p | +| [Final Lecture](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lecture) test | You will have a test during one of the lectures in May. | 1.8p | +| [Lab](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lab) | Your **presence** at every lab will be graded. | 1p | +| [Lab](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lab) Test | A final test at the lab - will scale your lab grade | 1p | | [Project](https://embedded-rust-101.wyliodrin.com/docs/fils_en/project) | You will have to design and implement a hardware device. Grading will be done for the documentation, hardware design and software development. | 3p | -| Final Test | You will have to take an exam during the last week of the semester. | 2p | +| Final Test | You will have to take an exam during the last week of the semester. | 4p | | **Total** | *You will need at least 4.5 points to pass the subject.* | **11p** | diff --git a/slides/lectures/fils_en/01/slides.md b/slides/lectures/fils_en/01/slides.md index 301c6c6720d..2955263cbcf 100644 --- a/slides/lectures/fils_en/01/slides.md +++ b/slides/lectures/fils_en/01/slides.md @@ -59,6 +59,12 @@ src: ./admin/slides.md src: ./subjects.md --- + + +--- +src: ../../resources/rust/slides.md +--- + --- diff --git a/slides/lectures/fils_en/01/team.md b/slides/lectures/fils_en/01/team.md index a1369e13a19..a0f6ad00f47 100644 --- a/slides/lectures/fils_en/01/team.md +++ b/slides/lectures/fils_en/01/team.md @@ -5,7 +5,7 @@ layout: section --- ---- + # Our team
@@ -20,9 +20,14 @@ layout: section ## Labs -- Alexandru Radovici -- Teodor Dicu (Hardware) -- Genan Omer (Software) +- Andrei Zamfir +- Dănuț Aldea +- Irina Bradu +- Genan Omer +- Cristiana Precup +- Eva Cosma +- Victor Lișman +- Roi Bachynskyi
diff --git a/slides/lectures/fils_en/02/slides.md b/slides/lectures/fils_en/02/slides.md index 4bf3602ee2b..f0397101202 100644 --- a/slides/lectures/fils_en/02/slides.md +++ b/slides/lectures/fils_en/02/slides.md @@ -31,9 +31,11 @@ Lecture 2 - Memory Mapped I/O - GPIO Peripheral - Embedded Rust Stack -- `embassy-rs` +- `embassy` - + --- src: ../../resources/mmio/slides.md diff --git a/slides/lectures/fils_en/08/slides.md b/slides/lectures/fils_en/08/slides.md index da72737c2a0..6d6d6796274 100644 --- a/slides/lectures/fils_en/08/slides.md +++ b/slides/lectures/fils_en/08/slides.md @@ -60,6 +60,7 @@ src: ../../resources/mmu/slides.md --- layout: two-cols --- + # Microcontroller (MCU) Integrated in embedded systems for certain tasks @@ -70,7 +71,7 @@ Integrated in embedded systems for certain tasks - costs $0.1 - $25 - uses **Memory Protection Unit** - + :: right :: diff --git a/slides/lectures/fils_en/10/trusted_firmware.md b/slides/lectures/fils_en/10/trusted_firmware.md index 7450f37b5aa..f68da1af10b 100644 --- a/slides/lectures/fils_en/10/trusted_firmware.md +++ b/slides/lectures/fils_en/10/trusted_firmware.md @@ -76,6 +76,7 @@ Provided in SDK --- layout: two-cols-header --- + # Public Key Infrastructure ::left:: @@ -93,13 +94,14 @@ layout: two-cols-header ::right:: +
- - +
--- layout: two-cols-header --- + # Digital Signatures needs a *key pair* (RSA or ECS) and a *hashing algorithm* @@ -125,7 +127,9 @@ Verifying ::right:: +
+
--- layout: two-cols @@ -298,4 +302,4 @@ flowchart LR - Smart Cards - keys should never be read from the device - software in these devices should not be tampered with - - JavaCard (applets are uploadable) \ No newline at end of file + - JavaCard (applets are uploadable) diff --git a/slides/lectures/resources/adc/slides.md b/slides/lectures/resources/adc/slides.md index 9f4d16485e7..11e416efc4b 100644 --- a/slides/lectures/resources/adc/slides.md +++ b/slides/lectures/resources/adc/slides.md @@ -19,6 +19,7 @@ for this section --- layout: two-cols --- + # ADC sampling an analog signal to an array of values @@ -35,7 +36,7 @@ sampling an analog signal to an array of values :: right :: -
+
@@ -90,7 +91,7 @@ how the ADC works :: right :: -
+
@@ -131,7 +132,7 @@ $$
-
+
diff --git a/slides/lectures/resources/communication/slides.md b/slides/lectures/resources/communication/slides.md index 1849c1280d4..8b0f9f9d396 100644 --- a/slides/lectures/resources/communication/slides.md +++ b/slides/lectures/resources/communication/slides.md @@ -53,7 +53,7 @@ safely share data between tasks :: right :: -
+
@@ -65,7 +65,7 @@ safely share data between tasks # Blocking Mutex -no `.await` allowed while the mutex is held +no `.await` allowed while the Blocking Mutex is held ```rust{1|3-5|7-14|10-14|all} use embassy_sync::blocking_mutex::Mutex; @@ -88,7 +88,7 @@ async fn task1() { --- # Async Mutex -`.await` is allowed while the Mutex is held, it will release the Mutex while `await`ing +`.await` is allowed while the Mutex is held ```rust{1|3-5|7-14|10-14|all} use embassy_sync::mutex::Mutex; diff --git a/slides/lectures/resources/embassy-rs/slides.md b/slides/lectures/resources/embassy-rs/slides.md index c3dc0da3062..8478c43cc5d 100644 --- a/slides/lectures/resources/embassy-rs/slides.md +++ b/slides/lectures/resources/embassy-rs/slides.md @@ -1,7 +1,8 @@ --- layout: section --- -# embassy-rs + +# embassy [Embedded Asynchronous](https://embassy.dev/) --- @@ -80,7 +81,7 @@ async fn main(_spawner: Spawner) {
-The `main` function is called by the embassy-rs framework, so it can exit. +The `main` function is called by the `embassy` framework, so it can return. --- --- @@ -136,7 +137,6 @@ async fn main(_spawner: Spawner) { ```` ---- --- # GPIO Output @@ -195,7 +195,7 @@ async fn main(_spawner: Spawner) {
-The `main` function is called by the embassy-rs framework, so it can exit. +The `main` function is called by the `embassy` framework, so it can return. --- --- diff --git a/slides/lectures/resources/exceptions/slides.md b/slides/lectures/resources/exceptions/slides.md index fdc97c3663b..746ce3044a8 100644 --- a/slides/lectures/resources/exceptions/slides.md +++ b/slides/lectures/resources/exceptions/slides.md @@ -19,19 +19,27 @@ for this section - Section 8.2 - *Exception types+* --- ---- + # Processor Exceptions what happens if something does not work as required +
+ ![Exceptions](./exceptions.svg) +
+ --- ---- + # ARM Cortex-M Exceptions what happens if something does not work as required +
+ ![Exceptions](./cortex-m.svg) +
+ --- # Exception (HardFault) Handling @@ -106,12 +114,11 @@ for this section - Section 11.7 - *Lockup* --- ---- # ARM Cortex-M Interrupts some hardware device notifies the MCU -
+
@@ -313,6 +320,7 @@ flowchart LR --- layout: two-cols --- + # Boot -
+
diff --git a/slides/lectures/resources/future/slides.md b/slides/lectures/resources/future/slides.md index 8b09135e5ab..50574d17dab 100644 --- a/slides/lectures/resources/future/slides.md +++ b/slides/lectures/resources/future/slides.md @@ -14,6 +14,7 @@ for this section --- layout: two-cols --- + # Future

Main Unit

Keyboard Unit

Bluetooth

12 Piano Keys

4 Menu Buttons

MCP23017

Raspberry Pi Pico H

HC-05 Master

HC-06 Slave

STM32 Nucleo-U545RE-Q

ST7789V TFT Display

Passive Buzzer

\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/index.md b/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/index.md new file mode 100644 index 00000000000..b4a6077d096 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/index.md @@ -0,0 +1,125 @@ +# Piano Trainer +A wireless piano learning assistant with falling notes, physical keys, and real-time scoring. + +:::info + +**Author**: Adela-Mihaela Băieșiu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Adela717.git + +::: + + + +## Description + +Piano Trainer is an embedded piano learning system built around a wireless keyboard unit and a main display unit. + +The project is inspired by piano tutorial videos where colored notes fall toward the piano keys. The user has a 12-key piano keyboard covering one chromatic octave. The keyboard unit detects key presses and sends them wirelessly using Bluetooth. + +The main unit, built around the STM32 Nucleo-U545RE-Q development board, receives the key events, displays the falling notes on a TFT screen, generates audio feedback using a passive buzzer, and computes gameplay statistics. + +The device includes a menu system for choosing predefined songs, a gameplay screen with falling notes, a listening mode for visualizing song notes without scoring, a results screen, and a best scores screen. + +## Motivation + +I chose this project because I learned piano using online videos where colored notes move toward the keys and show when and for how long each note should be played. I wanted to recreate this learning method as a physical embedded device. + +## Architecture + +- **Piano input module**: reads the 12 physical piano keys corresponding to one chromatic octave. +- **Menu input module**: reads the control buttons used for navigating the interface: UP, DOWN, SELECT, and BACK. +- **Display module**: renders the start menu, song selection screen, gameplay screen, falling notes, results screen, listening mode screen, and best scores screen. +- **Song engine**: stores each song as a sequence of note events. Each event contains the note, the expected start time, and the note duration. +- **Audio module**: generates musical tones using a passive buzzer controlled through PWM. +- **Scoring module**: compares the expected notes with the user input and computes the final score, accuracy, number of correct notes, missed notes, and maximum combo. +- **Best scores module**: keeps track of the best scores achieved during the current runtime session. +- **Application state machine**: controls the transitions between the main menu, song selection, listening mode, gameplay, results, and best scores screens. +- **Wireless keyboard module**: reads the physical piano keys and menu buttons on a separate keyboard unit. +- **Bluetooth communication module**: sends key press, key release, and menu button events from the keyboard unit to the main display unit. +- **Listening mode module**: allows the user to visualize the notes of a selected song without scoring, useful for learning the melody before playing it. +![Architecture diagram](./architecture.svg) + +## Log + + + +### Week 5 - 11 May + +- Settled on the project idea and shaped it into a small piano trainer with physical keys, audio feedback, a display, song selection, and scoring. +- Split the system into two parts: a wireless keyboard side and a main unit that handles sound, display, and game logic. +- Picked the main components and put together the first version of the hardware plan and bill of materials. + +### Week 12 - 18 May + +- Built the first working prototype and wired the keyboard side to the main unit. +- Got the 12 piano keys and menu buttons working, then configured the Bluetooth link between the two boards. +- Added the first STM32-side logic so the received key events could trigger piano sounds. +- Brought up a basic version of the TFT screen to confirm that the display integration was working. + +### Week 19 - 25 May + +- Reworked the display UI into a more complete menu-based interface. +- Added the screens for song selection, listening mode, gameplay, statistics, and navigation. +- Integrated the scoring and gameplay flow with the keyboard input and audio feedback. + +## Hardware + +The project is built as two separate hardware units: a wireless keyboard unit and a main display unit. + +The wireless keyboard unit contains the physical piano keys and the menu control buttons. It is responsible for detecting user input and sending key events to the main unit through Bluetooth. The keyboard contains 12 physical keys, covering a chromatic octave. + +The main display unit contains the STM32 Nucleo-U545RE-Q development board, the TFT display, and the passive buzzer. It receives input events from the wireless keyboard unit, updates the game state, displays the falling notes, generates sound, and computes the final statistics. + +### Schematics + +![Schematics](./schema.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller board used to run the Rust firmware, receive keyboard events, control the TFT display, and generate audio through PWM | Provided | +| Raspberry Pi Pico H | Secondary microcontroller used in the wireless keyboard unit to read the piano keys and menu buttons through the MCP23017 and forward events to the Bluetooth UART module | 41.14 RON | +| HC-05 Bluetooth UART Module | Bluetooth master module used on the Pico keyboard unit to transmit key and menu events wirelessly | 30.25 RON | +| HC-06 Bluetooth UART Module | Bluetooth slave module used on the STM32 main unit to receive key and menu events wirelessly | 30.4 RON | +| TFT SPI Display ST7789V 2.8 inch 240x320 | Used to display the main menu, song selection screen, listening mode, falling notes, results, and best scores | 58.99 RON | +| MCP23017 I/O Expander | Used by the wireless keyboard unit to read most of the piano keys through I2C, reducing the number of GPIO pins required | 7.77 RON | +| 12x12mm Tactile Push Buttons x16 | Used as 12 physical piano keys and 4 menu control buttons | 1.52 RON | +| Passive Buzzer Module 3.3V-5V | Used to generate musical tones through PWM | 6.44 RON | +| Breadboards | Used as the prototyping area for connecting the modules, buttons, power rails, and peripherals | 12.89 RON | +| 10 Male-Male Jumper Wires x4 | Used for breadboard connections between components | 10.30 RON | +| 10 Female-Male Jumper Wires x4 | Used for connecting modules with pins to the breadboard or Nucleo board | 8.66 RON | +| 10 Female-Female Jumper Wires x4 | Used for direct connections between modules with male header pins | 6.54 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| embassy-rs | Async embedded framework for Rust | Used as the main runtime for the STM32 firmware | +| embassy-stm32 | STM32 hardware abstraction layer for Embassy | Used for UART, SPI, DMA, GPIO, timers, PWM, and clock configuration on the main unit | +| embassy-futures | Async utilities for Embassy-based applications | Used for coordinating asynchronous tasks and handling concurrent input/display logic | +| embedded-io-async | Async I/O traits for embedded systems | Used for reading UART data asynchronously from the Bluetooth module | +| embedded-hal | Common embedded hardware abstraction traits | Used for shared embedded traits such as PWM control | +| defmt + defmt-rtt | Lightweight embedded logging framework | Used for debugging and runtime logs through probe-rs | +| panic-probe | Panic handler for embedded Rust programs | Used to report firmware panics during debugging | +| Custom ST7789V display driver | Minimal SPI display driver implemented in Rust | Used to initialize the TFT display and draw the menu, gameplay, and results UI | +| heapless | Fixed-capacity data structures for embedded systems | Used for storing songs, notes, menu items, and scoring data without dynamic allocation | +| rp2040-hal / rp-pico | Hardware abstraction layer and board support package for Raspberry Pi Pico H | Used for GPIO, I2C, UART, and timing on the wireless keyboard unit | +| UART-based Bluetooth communication | Serial communication over HC-05/HC-06 Bluetooth modules | Used for sending key press, key release, and menu events from the keyboard unit to the main display unit | + +## Links + + +- https://youtu.be/NPBCbTZWnq0?si=qws_AIqdEubiwgxn +- https://embassy.dev/book/ +- https://github.com/embassy-rs/embassy diff --git a/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/schema.svg b/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/schema.svg new file mode 100644 index 00000000000..220a334ebe9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/adela.baiesiu/schema.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVGSW16SW_PushSW10SW_PushSW8SW_PushSW6SW_PushSW9SW_PushSW12SW_PushSW11SW_PushGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico12345678J3Conn_01x08SW13SW_PushSW7SW_Push1234J1HC06-5VPA21PA12PA03VREF4VSS5VDDA6PC37PC28PC19NRST10PB911PC012PH3-BOOT013PB814VBAT15VSSSMPS16VDDSMPS17PB718PB519PB420PB321PC1022PC1123PC1224PA1325PA1426PA1527PA1028PA1229PA1130VDDUSB32PD033PD134PB1335PC636PB1437PB1538PB639PC1340PB1241PE442PB143PB044PC545PB1146PB1047PB248PC449PA850PA951PA752PA653PA554PA455PA356ANT_IN58RF_OUT59PH061PH162PD1463PE164PD1365PD1266PD767PD268PC969PD370PC771PE372PD473PD974PD875PD1576PD1077PE278PE079PD580PD681PD1182PC883U1STM32WB5MMG123J2Passive BuzzerSW4SW_PushSW3SW_PushSW1SW_PushSW2SW_PushSCLGPB41GPB52GPB63GPB74V_{DD}5V_{SS}6SCK8SDA9A011A112A213~{RESET}14INTB15INTA16GPA017GPA118GPA219GPA320GPA421GPA522GPA623GPA724GPB025GPB126GPB227GPB328EP29U2MCP23017x-x-MLSW5SW_PushSW14SW_Push1234J4Conn_01x04SW15SW_PushDCI/OVCCGNDGNDVCCSDOLEDRESETSDIVCCRXDTXDGNDRXDGNDSCKTXDVCC-5VU1STM32WB5MMGPA21PA12PA03VREF4VSS5VDDA6PC37PC28PC19NRST10PB911PC012PH3-BOOT013PB814VBAT15VSSSMPS16VDDSMPS17PB718PB519PB420PB321PC1022PC1123PC1224PA1325PA1426PA1527PA1028PA1229PA1130VDDUSB32PD033PD134PB1335PC636PB1437PB1538PB639PC1340PB1241PE442PB143PB044PC545PB1146PB1047PB248PC449PA850PA951PA752PA653PA554PA455PA356ANT_IN58RF_OUT59PH061PH162PD1463PE164PD1365PD1266PD767PD268PC969PD370PC771PE372PD473PD974PD875PD1576PD1077PE278PE079PD580PD681PD1182PC883 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/buzzer.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/buzzer.webp new file mode 100644 index 00000000000..7ce76774a85 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/buzzer.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/fan.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/fan.webp new file mode 100644 index 00000000000..3b0d0bae5d9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/fan.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/flame_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/flame_sensor.webp new file mode 100644 index 00000000000..d66928f7807 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/flame_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/full_system.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/full_system.webp new file mode 100644 index 00000000000..11850b7fd0d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/full_system.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd.webp new file mode 100644 index 00000000000..3a2b1ad992e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd_alarm.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd_alarm.webp new file mode 100644 index 00000000000..e720c7eb898 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/lcd_alarm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/light_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/light_sensor.webp new file mode 100644 index 00000000000..8edbcb6db55 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/light_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/pir_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/pir_sensor.webp new file mode 100644 index 00000000000..f1a42c40456 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/pir_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled.webp new file mode 100644 index 00000000000..fc443b44fe5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled_back.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled_back.webp new file mode 100644 index 00000000000..9d5fe2106df Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/project_assembled_back.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/schematic.webp new file mode 100644 index 00000000000..eaa68234f1f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/sound_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/sound_sensor.webp new file mode 100644 index 00000000000..2918bd2595a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/sound_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/uv_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/uv_sensor.webp new file mode 100644 index 00000000000..5a5e4323e2a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/images/uv_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/index.md b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/index.md index dd9b50f7921..81a5d1fd94c 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/adelina_maria.alexe/index.md @@ -13,25 +13,24 @@ A desk-mounted environmental monitoring device that evaluates working conditions ## Description -The Focus Station is a device that monitors the environment at a user's desk and computes a Focus Score (0–100) representing how favorable the conditions are for concentrated work. It reads temperature, pressure, carbon monoxide levels, ultraviolet light intensity, ambient noise, and user presence. Based on these inputs, the device displays the score and individual sensor readings on a color LCD, controls a desk fan automatically, signals Pomodoro work/break intervals through a buzzer, and transmits all data over Bluetooth to a companion application on the user's computer for logging and visualization. +The Focus Station is a device that monitors the environment at a user's desk and computes a Focus Score (0–100) representing how favorable the conditions are for concentrated work. It reads ultraviolet light intensity, ambient noise, room brightness, user-presence, and fire risk factors. Based on these inputs, the device displays the score and individual sensor readings on a color LCD using a grid dashboard UI layout with dedicated alert pop-ups. + +Additionally, it controls a desk cooling fan automatically, signals Pomodoro work/break intervals through a passive buzzer, and transmits all data via USB UART to a local web server application on the user's computer for historical logging, productivity analysis, and persistence. The system detects when the user leaves the desk during work mode and reminds them to return, and also warns if the user stays at the desk during break time. ## Motivation I chose this project because it addresses a real problem I experience daily. As someone who spends long hours at a desk, I often fail to notice when the room gets too warm, the air becomes stale, or the noise level rises, all factors that silently reduce concentration and productivity. -Commercial solutions either monitor only one parameter (like a simple thermometer) or are expensive smart-home systems designed for entire houses. I wanted a compact, single-device solution focused specifically on the desk environment. - -Additionally, the Pomodoro timer integration makes the device a complete productivity companion rather than just a passive monitor. +I wanted a compact, single-device solution focused specifically on the desk environment that combines environmental monitoring with productivity tools. The Pomodoro timer integration with motion detection makes the device a complete productivity companion rather than just a passive monitor. ## Architecture -- **Sensor Subsystem**: Reads environmental data from multiple sensors (temperature/pressure via I2C, CO/UV via ADC, noise and presence via digital GPIO). Each sensor runs as an independent async task, sampling at 1–5 second intervals. -- **Focus Score Engine**: Receives data from all sensors and computes a weighted score every second. Penalties are applied for unfavorable conditions (high temperature, stale air, excessive noise, UV glare, low pressure, user absence). -- **Pomodoro Timer**: A state machine that cycles through IDLE → WORK (25 min) → BREAK (5 min) → WORK, controlled by a physical push button. Transitions trigger buzzer alerts. -- **Display System**: An ILI9341 LCD shows the Focus Score, sensor readings with color-coded status indicators, the Pomodoro countdown, and contextual recommendations (e.g., "Open a window"). -- **Output Control**: A PWM-driven fan activates automatically when the temperature is high and the user is present. A passive buzzer generates distinct tones for Pomodoro transitions and low Focus Score alerts. -- **Communication Module**: An HC-05 Bluetooth module transmits sensor data and the Focus Score as JSON over UART to a PC application every 10 seconds. -- **PC Application**: A Python script receives data over Bluetooth serial, stores it in an SQLite database, and displays time-series graphs through a web dashboard. +- **Sensor Subsystem**: Reads environmental data from multiple sensors — UV light and flame detection via ADC, sound level via ADC with peak detection, ambient light via digital GPIO with LM393 comparator, and user presence via PIR digital GPIO. Each sensor is sampled every loop iteration (~1 second). +- **Pomodoro Timer**: A state machine cycling through IDLE → WORK (25 min) → BREAK (5 min) → WORK, controlled by the on-board push button. Transitions trigger buzzer alerts. The fan activates automatically during WORK sessions. +- **Display System**: An ILI9341 2.4" TFT LCD connected via SPI shows all sensor readings with color-coded status indicators (green = normal, yellow = warning, red = alert), the Pomodoro state and countdown timer, and contextual text recommendations. +- **Alert System**: A passive buzzer emits distinct patterns for different events — short beep for Pomodoro transitions, rapid triple beep for flame detection, and medium beep for presence-related reminders. Alerts are prioritized: fire > light warning > motion reminders > noise. +- **Fan Control**: A mini fan with integrated L9110 driver activates automatically when the Pomodoro timer enters WORK mode, providing airflow during focus sessions. +- **Motion Intelligence**: The PIR sensor tracks user presence and integrates with the Pomodoro state — if no motion is detected for 7 seconds during WORK, it alerts "Back to work!"; if motion persists for 10 seconds during BREAK, it warns "Step away!". ### Architecture Diagram @@ -44,18 +43,92 @@ Additionally, the Pomodoro timer integration makes the device a complete product ### Week 4 - 10 May +Set up the development environment for the STM32 Nucleo board. Resolved a USB driver issue on macOS where the ST-LINK interface was being claimed by a kernel driver, preventing probe-rs from accessing the board through SWD. After fixing this, successfully ran `probe-rs info` and confirmed the board is detected as an ARM Cortex-M33 chip. + +Wrote and flashed the first blinky program using Embassy on the board. The green LED on PA5 blinks at 1 Hz, confirming that the entire toolchain (cross-compilation, flashing, defmt logging over RTT) works correctly. + ### Week 11 - 17 May +Hardware Milestone: + +Identified the user button on the board and discovered that the button on PC13 uses inverted logic when pressed. Implemented a toggle mechanism with debouncing for the button and built the initial Pomodoro state machine with three states: IDLE, WORKING, and BREAK. + +Started connecting and testing sensors one by one. Connected the buzzer and verified it produces tones. Connected the UV sensor via ADC and implemented baseline calibration to handle ADC. Connected the flame sensor via ADC and discovered that the analog output drops significantly when flame is detected (inverted logic). Implemented intensity-based flame detection with multiple severity levels. + +Set up the LCD display via SPI with the mipidsi driver. Required configuring the PLL clock to 160 MHz for adequate SPI transfer speed. Integrated the display with sensor readings, showing color-coded text that updates in real time. + +Created the full project structure with separate modules for each subsystem: sensors (UV, flame, sound), outputs (buzzer, fan), pomodoro state machine, and display. + ### Week 18 - 24 May +Integrated all remaining components into the system. Connected the sound sensor via ADC using analog peak detection — sampling 100 readings per cycle and computing the maximum deviation from baseline to detect noise spikes. Connected the light sensor (photoresistor) as a digital input for ambient light detection. Connected the PIR motion sensor for user presence tracking. + +Connected the new fan module with integrated driver. Implemented logic to activate the fan automatically during Pomodoro WORK sessions and deactivate it during BREAK and IDLE. + +Implemented the motion-aware Pomodoro logic: tracking consecutive ticks of no-motion during WORK (triggers "Back to work!" alert after 7 seconds) and motion during BREAK (triggers "Step away!" alert after 10 seconds). + +Built the complete alert priority system on the LCD: flame detection (highest priority, red "EVACUATE!!!"), excessive light ("Close blinds!"), motion reminders during Pomodoro, noise warnings ("Headphones on!"), and "All good!" when everything is normal. Each alert triggers appropriate buzzer patterns. + +![Full system assembled](images/full_system.webp) + ## Hardware -The project uses an STM32 Nucleo-U545RE-Q as the main microcontroller board, featuring an ARM Cortex-M33 core with an integrated ST-LINK/V3E debugger. A 2.4" ILI9341 TFT display connected via SPI serves as the main user interface, showing the Focus Score, sensor readings, and the Pomodoro countdown. A BMP280 sensor connected via I2C measures ambient temperature and barometric pressure. An MQ-7 gas sensor on an ADC pin detects carbon monoxide levels through a voltage divider. A GUVA-S12SD UV sensor on an ADC pin measures ultraviolet light intensity near the desk. A KY-038 sound sensor on a digital GPIO pin detects excessive ambient noise. An HC-SR501 PIR sensor on a digital GPIO pin detects user presence at the desk. A passive buzzer driven by PWM emits Pomodoro transition tones and low Focus Score alerts. A mini 5V DC fan controlled via PWM through an IRLZ44N MOSFET activates automatically when the temperature is high and the user is present. An HC-05 Bluetooth module connected via UART transmits sensor data to a companion PC application. The on-board user button B1 on PC13 controls the Pomodoro timer, and the on-board LED LD2 on PA5 indicates the current Pomodoro state. All components are connected on a breadboard with jumper wires. +### STM32 Nucleo-U545RE-Q + +The main microcontroller board, featuring an ARM Cortex-M33 core running at 160 MHz via PLL. It includes an integrated ST-LINK/V3E debugger for programming and real-time logging via RTT. The board provides both Arduino-compatible and ST Morpho headers for peripheral connections. + +### LCD Display (ILI9341) + +A 2.4" color TFT display with 240×320 pixel resolution, communicating over SPI at 16 MHz. It serves as the main user interface, showing the Pomodoro timer state and countdown, all sensor readings with color-coded status indicators (green/yellow/red), and contextual alert messages. The display uses the mipidsi driver with the embedded-graphics library for text rendering. + +![LCD Display](images/lcd.webp) + +### UV Sensor (GUVA-S12SD) + +A photodiode sensitive to UVA and UVB radiation. It outputs an analog voltage proportional to UV intensity, read via ADC. The sensor requires baseline calibration at startup to compensate for ADC offset at the 160 MHz system clock. UV levels are categorized as Low, Moderate, High, Very High, or Extreme with corresponding color coding on the display. + +![UV Sensor](images/uv_sensor.webp) + +### Flame Sensor (KY-026) + +An infrared flame detection module with both analog and digital outputs. The analog output (connected via ADC) provides intensity readings: the value drops significantly when a flame is present. The sensor is powered at 5V for adequate sensitivity. Flame detection triggers an immediate triple-beep buzzer alarm and displays "EVACUATE!!!" in red on the LCD. + +![Flame Sensor](images/flame_sensor.webp) + +### Sound Sensor + +A microphone module with analog output connected via ADC. The system uses peak detection, sampling 100 readings per loop cycle and computing the maximum deviation from a calibrated baseline. When the deviation exceeds a threshold, noise is detected and "Headphones on!" is displayed as a recommendation. The sensor includes a potentiometer for sensitivity adjustment. + +![Sound Sensor](images/sound_sensor.webp) + +### Light Sensor (LM393 Photoresistor) + +A photoresistor module with an integrated LM393 comparator that provides a digital output. It detects whether the ambient light level is above or below an adjustable threshold (set via onboard potentiometer). When excessive light is detected (e.g., direct sunlight on the desk), the system alerts "Close blinds!" with a buzzer beep. The display shows "Light: Bright" or "Light: Dark" accordingly. + +![Light Sensor](images/light_sensor.webp) + +### PIR Sensor (HC-SR501) + +A passive infrared motion sensor that detects human presence through body heat radiation. It has a detection range of up to 7 meters with a 110 degrees field of view. The sensor outputs a digital HIGH signal when motion is detected. In the Focus Station, it integrates with the Pomodoro timer, tracking whether the user is at the desk during WORK mode and whether they have stepped away during BREAK mode, providing appropriate reminders. + +![PIR Sensor](images/pir_sensor.webp) + +### Mini Fan with L9110 Driver + +A small DC fan module with an integrated L9110 H-bridge driver, eliminating the need for external transistors or MOSFETs. The fan is controlled via a single GPIO pin: HIGH to run, LOW to stop. In the Focus Station, it activates automatically when the Pomodoro timer enters WORK mode, providing airflow during focus sessions, and deactivates during BREAK and IDLE states. + +![Fan Module](images/fan.webp) + +### Passive Buzzer + +A buzzer module driven by GPIO that produces audible tones when the pin is set HIGH. It generates different alert patterns depending on the event: a short confirmation beep at startup and Pomodoro transitions, a rapid triple beep for flame detection emergencies, and medium-length beeps for presence-related Pomodoro reminders. + +![Buzzer](images/buzzer.webp) ### Schematics - +![Schematic](images/schematic.webp) ### Bill of Materials @@ -73,13 +146,13 @@ The format is |--------|-------|-------| | [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller board | Provided by university | | [LCD ILI9341 2.4" TFT](https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf) | Display for Focus Score, sensors, and Pomodoro timer | ~70 RON | -| [BMP280](https://cdn-shop.adafruit.com/datasheets/BST-BMP280-DS001-11.pdf) | Temperature and pressure sensor | ~8 RON | -| [MQ-7](https://www.pololu.com/file/0j313/mq7.pdf) | Carbon monoxide / air quality sensor | ~32 RON | +| [HC-SR501 PIR Sensor](https://www.emag.ro/senzor-de-miscare-detector-pir-hc-sr501-sensibilitate-reglabila-33-x-23-x-30-mm-multicolor-2-a-020/pd/DZLTKLMBM/) | User presence detection at desk | ~10 RON | | [GUVA-S12SD](https://cdn-shop.adafruit.com/datasheets/1918guva.pdf) | UV radiation sensor | ~25 RON | +| [KY-026 Flame Sensor](https://www.hwlibre.com/en/ky-026/) | Fire/flame detection | ~7 RON | | [KY-038 Sound Sensor](https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/Sound-Sensor-Schematic.pdf) | Noise detection | ~5 RON | -| [HC-05 Bluetooth Module](https://www.robofun.ro/wireless/modul-bluetooth-hc-05-master-slave-cu-buton.html) | Wireless communication with PC | ~25 RON | +| [LM393 Light Sensor](https://www.emag.ro/modul-senzor-lumina-intensitate-luminoasa-yqzbml-mod-light/pd/D2PMPD2BM/?ref=history-shopping_487582703_156063_2) | Ambient light level detection | ~5 RON | | [Passive Buzzer Module](https://www.handsontec.com/dataspecs/module/passive%20buzzer.pdf) | Pomodoro alerts and Focus Score warnings | ~5 RON | -| Mini Fan 5V DC | Automatic desk cooling | ~15 RON | +| [Fan Module with L9110 Driver](https://www.emag.ro/modul-ventilator-5v-l9110-thbxal-fan-mod/pd/D75W5D2BM/?ref=history-shopping_487582703_156063_1) | Desk cooling during work sessions | ~15 RON | | 1N4007 Diode | Flyback protection for fan motor | ~1 RON | | Resistors (10kΩ, 20kΩ) | Voltage divider for MQ-7 analog output | ~2 RON | | Breadboard + Jumper Wires | Prototyping connections | ~20 RON | @@ -89,8 +162,17 @@ The format is | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Peripheral access: GPIO, SPI, ADC | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Running the main loop with async delays | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | Pomodoro countdown, sensor sampling intervals | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy) | Embedded HAL bridge | SpiDeviceWithConfig for shared SPI bus | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Sync primitives | Mutex for SPI bus sharing | +| [mipidsi](https://github.com/almindor/mipidsi) | MIPI DCS display driver | Controlling the ILI9341 LCD over SPI | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text and UI elements on the LCD | +| [defmt](https://github.com/knurling-rs/defmt) | Deferred formatting logger | Debug logging over RTT during development | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Transmitting log messages to host computer | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Displaying panic messages via defmt | +| [heapless](https://github.com/rust-embedded/heapless) | Static data structures | Fixed-size strings for display text formatting | ## Links @@ -100,3 +182,7 @@ The format is 2. [STM32U545 Datasheet](https://www.st.com/resource/en/datasheet/stm32u545re.pdf) 3. [Nucleo-U545RE-Q User Manual (UM3062)](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) 4. [Rust on STM32 Workshop](https://rust.ipworkshop.ro/docs/embassy/) +5. [ILI9341 Display Datasheet](https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf) +6. [GUVA-S12SD UV Sensor Datasheet](https://cdn-shop.adafruit.com/datasheets/1918guva.pdf) +7. [mipidsi Rust crate documentation](https://docs.rs/mipidsi/latest/mipidsi/) +8. [embedded-graphics documentation](https://docs.rs/embedded-graphics/latest/embedded_graphics/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/images/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/images/schematics.webp new file mode 100644 index 00000000000..75ebad36545 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/images/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/index.md new file mode 100644 index 00000000000..40ec2a0343f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/agherghiceanu/index.md @@ -0,0 +1,144 @@ +# Quadraped Robot +A bluetooth-controlled spider robot that can move around via 8 servos. + +:::info + +**Author**: Alexandru-Bogdan Gherghiceanu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-alexgherghiceanu + +::: + + + +## Description + +This project is a bluetooth controlled spider robot that you can sync up to your phone/tablet. From your device you can control it's speed,direction of travel and issue it extra gestures and commands, such as a wave. + +## Motivation + +From a young age, I have been interested in robots and the process of building them. Futhermore, I have been following the +progress of boston dynamics projects for a long time, so I knew that I wanted to build a quadraped robot myself. When I recently +watched the movie Project Hail Mary, I decided that a spider is the best shape for my project to take. + +## Architecture +```mermaid +flowchart TD + subgraph ext ["External Inputs"] + U["Android/iOS Device"] + BT_Mod["HM-10 Bluetooth Module"] + end + + subgraph stm ["STM32 Microcontroller (Rust Code)"] + BTH["Bluetooth Handler Module"] + MP["Motion Planner Module"] + KE["Kinematics Engine (IK) Module"] + I2C["I2C Controller Module"] + end + + subgraph periph ["Logic Peripherals"] + ServoD["PCA9685 Servo Driver Module"] + Motors["Servomotors (x8)"] + end + + U -- "Bluetooth (BLE) Commands" --> BT_Mod + BT_Mod -- "Serial Data (UART)" --> BTH + BTH -- "Parsed Command (e.g., 'F', 'L', 'W')" --> MP + MP -- "Pose/Leg Positions (X,Y,Z)" --> KE + KE -- "Servo Angles" --> I2C + I2C -- "I2C Commands" --> ServoD + ServoD -- "PWM Signals" --> Motors +``` +## Log + + +### Week 16 - 22 March + +Decided on the project idea + + +### Week 13 - 19 April + +Ordered the necessary hardware components. + +### Week 20 - 26 April + +All hardware components arrived. + +## Week 27 April - 3 May + +Started writing the documentation and modifying the source chasis to fit my components. + +### Week 5 - 11 May + + +Finalized source chasis and printed the first version in order to start test-fitting components. + +### Week 12 - 18 May + +Tested all individual components, finalized the second version of the chasis and started writing the software required to run the robot. + +### Week 19 - 25 May + +Completed and uploaded the main portion of the software, with only minor addition left if time allows. Also performed first complete assembly to confirm everything fits correctly. + + +## Hardware + +The main brain of the project is the STM32 Nucleo-U545RE-Q microcontroller provided by the PM team. This takes the input from the HM-10 Bluetooth module and processes it into a signal the i2c controller can then give to the PCA9685 Servo Driver. From there, the signal is passed on to the 8 servomotors that power our robot spider, 2 in each leg. The system is powered by a 1000mAh 7.4v LiPo 2 cell batery and will be built on a modified version of the chasis of the Sesame spider-robot linked in the link section. + +### Schematics + +![Diagram](images/schematics.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | [~120 RON]() | +| [Servomotor MG90S, angrenaje Aluminiu](https://sigmanortec.ro/servomotor-mg90s-angrenaje-aluminiu) | The servomotors, we will use 8 | [19,34 RON]() | +| [Modul PCA9685, interfata I2C, 16 CH, servo motor](https://sigmanortec.ro/Modul-PCA9685-interfata-I2C-16-CH-servo-motor-p126016016) | Used to interface the microcontroller and the servomotors | [27.27 RON]() | +| [Modul coborator tensiune XL4015, 8-36VDC, 5A, 75W](https://sigmanortec.ro/Modul-coborator-tensiune-XL4015-8-36VDC-5A-75W-p158483017) | Used to interface the microcontroller and the servomotors | [9,96 RON]() | +| [Intrerupator KCD-1, SPST, On/Off, 23mm](https://sigmanortec.ro/Modul-coborator-tensiune-XL4015-8-36VDC-5A-75W-p158483017) | Used to turn the robot on or off | [1,85 RON]() | +| [4.0 Bluetooth Module (3.3 V and 5 V Compatible)](https://www.optimusdigital.ro/en/wireless-bluetooth/862-modul-bluetooth-40-cu-adaptor-compatibil-33v-si-5v.html?search_query=4.0+Bluetooth+Module+%283.3+V+and+5+V+Compatible%29&results=21) | Used to connect from the phone to the robot | [29,99 RON]() | +| [Electrolytic Capacitor 1000 uF, 50 V](https://www.optimusdigital.ro/en/capacitors/3006-electrolytic-condensator-from-1000-uf-to-50-v.html?search_query=0104210000027129&results=1) | Used to store excess voltage | [1,49 RON]() | +| [0.25 W 1K Ω Resistor](https://www.optimusdigital.ro/en/resistors/848-025w-22k-resistor.html?search_query=0.25+W+1K+%CE%A9+Resistor&results=32) | Used to provide resistance in the circuit | [0,10 RON]() | +| [Undervoltage Battery Alarm Module](https://www.optimusdigital.ro/en/others/2237-alarma-scadere-tensiune-acumulatori.html?search_query=Undervoltage+Battery+Alarm+Module&results=1) | Used to signal when the battery is low | [7,99 RON]() | +| [Incarcator B3 20W 1.6A pentru Acumulatori 2S si 3S cu Echilibrare Celule](https://www.emag.ro/incarcator-b3-20w-1-6a-pentru-acumulatori-2s-si-3s-cu-echilibrare-celule-b3-20w-1600-2s3s/pd/DGCKNZ3BM/?ref=history-shopping_484971926_47538_1) | Used to charge the batery | [29,90 RON]() | +| [Baterie Gens Ace G-Tech Soaring 1000mAh 7.4V 30C 2S1P XT60](https://www.emag.ro/baterie-gens-ace-g-tech-soaring-1000mah-7-4v-30c-2s1p-xt60-kxg0060208/pd/D5RNQWMBM/?ref=history-shopping_484971926_36153_1) | Used to power the robot | [58,20 RON]() | +| [Set conectori electrici Amass XT60, 1 mama si 1 tata si 2 carcase](https://www.emag.ro/set-conectori-electrici-amass-xt60-1-mama-si-1-tata-si-2-carcase-amxt60/pd/DN37BB3BM/?ref=history-shopping_484971926_3410_1) | Used to connect the battery | [8,82 RON]() | +| [10 x Fire Dupont mama-mama 20cm](https://www.emag.ro/10-x-fire-dupont-mama-mama-20cm-ai307-s465/pd/D1J66JBBM/?ref=history-shopping_484971926_38837_1) | Used to connect different parts of the project | [2,67 RON]() | +| [40 x Fire Dupont mama-tata 20cm](https://www.emag.ro/40-x-fire-dupont-mama-tata-20cm-zcbozh-fdp-fm-40x20/pd/DRQD522BM/?ref=history-shopping_484971926_156063_1) | Used to connect different parts of the project | [19,72 RON]() | + + + + +## Software + +| Library / Tool | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 Hardware Abstraction Layer | Used to control the Nucleo board's pins, allowing the microcontroller to talk to the PCA9685 driver via I2C and to the HM-10 Bluetooth module via UART. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded devices | Used to run the main loop of the robot, processing incoming Bluetooth commands and updating motor angles smoothly. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delay library | Used to create the necessary delays between the robot's animation frames so it walks correctly, and to handle Bluetooth read timeouts. | +| [defmt](https://github.com/knurling-rs/defmt) & [defmt-rtt](https://github.com/knurling-rs/defmt) | Logging framework and transport | Used to print debugging info and state changes directly to my laptop's terminal to track what the brain is doing. | +| [panic-probe](https://github.com/knurling-rs/probe-rs) | Panic handler | Used to catch program crashes and print the error backtrace to the terminal, making debugging much easier. | +| [probe-rs](https://probe.rs/) | Debugging and flashing tool | Used to seamlessly compile, flash, and run the Rust code onto the STM32 board using the simple `cargo run` command. | + + +## Links + + + +1. [Laboratoarele PM](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab) +2. [Proiectul de inspiratie](https://www.doriantodd.com/sesame) +3. [Repository-ul Proiectului Sesame](https://github.com/dorianborian/sesame-robot/tree/main) +... diff --git a/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/block_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/block_diagram.svg new file mode 100644 index 00000000000..271b70e817f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/block_diagram.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + Joystick Controller + + + HC-12 TX + + + HC-12 RX + + + STM32 NUCLEO + U545RE-Q + + + L298N Motor Driver + + + DC Motors + + + Battery Pack + + + Control + + + Wireless + + + Serial + + + PWM / GPIO + + + Motor power + + + Power + + + Power + diff --git a/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/index.md b/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/index.md new file mode 100644 index 00000000000..daad2b3cbe6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alex_mark.stan/index.md @@ -0,0 +1,88 @@ +# RC Car + +Remote controlled car using wireless serial communication. + +:::info + +**Author**: Alex Mark Stan \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-MRK1717 + +::: + +## Description + +This project consists of building a remote-controlled car using wireless serial communication through the HC-12 module. + +A joystick is used as input on the controller side, sending commands wirelessly to the car. The STM32 NUCLEO board receives these commands and controls the motors accordingly. + +The system allows forward, backward, left, and right movement by controlling four DC motors through a motor driver. + +## Motivation + +I chose this project because it combines both hardware and software concepts, allowing me to learn about wireless communication, motor control, and processing analog inputs. + +It is also a practical project that can be extended later with additional sensors or control features. + +## Architecture + +![Block Diagram](./block_diagram.svg) + +The system is composed of two main parts: +- Controller side: joystick module and HC-12 transmitter +- Car side: HC-12 receiver, STM32 NUCLEO board, motor driver, DC motors, and battery pack + +The joystick generates analog input values. These values are converted into movement commands and transmitted wirelessly through the HC-12 module. The STM32 receives the commands and sends control signals to the motor driver, which drives the DC motors. + +## Log + +### Week 20 - 24 April +Chose the project idea and analyzed the system architecture. Studied the components required for building the RC car, including the STM32 NUCLEO board, HC-12 module, and motor driver. + +### Week 25 - 28 April +Researched communication between controller and car using the HC-12 module. Planned the hardware setup and started preparing the initial documentation. + +## Hardware + +STM32 NUCLEO-U545RE-Q board: Responsible for receiving commands and controlling the motors. + +HC-12 Wireless Module: Used for wireless serial communication between the controller and the car. + +Joystick Module: Used to generate movement commands based on user input. + +L298N Motor Driver: Controls the speed and direction of the DC motors. + +DC Motors: Provide physical movement for the car. + +Battery Pack: Provides power for the car components. + +### Schematics + +TBD + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | [110 RON](https://ro.rsdelivers.com/product/stmicroelectronics/nucleo-u545re-q/stmicroelectronics-nucleo-u545re-q-stm32-nucleo/1899566) | +| [Chassis Kit](https://www.pololu.com/category/2/motors) | The base for the car | [48.40 RON](https://www.emag.ro/) | +| [HC-12 Wireless Module](https://components101.com/wireless/hc-12-wireless-module) | Used for wireless communication | [20 RON](https://www.emag.ro/) | +| [Joystick Module](https://components101.com/modules/joystick-module) | Used for user input control | [20 RON](https://www.emag.ro/) | +| [L298N Motor Driver](https://components101.com/modules/l298n-motor-driver-module) | Used to control the motors | [10.84 RON](https://www.emag.ro/) | +| [DC Motors](https://www.pololu.com/category/2/motors) | Used for movement | [4 x 15 RON](https://www.emag.ro/) | +| [Battery Pack](https://components101.com/batteries/18650-lithium-cell) | Power supply | [30 RON](https://www.emag.ro/) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware interface | Used as the base library for controlling STM32 peripherals | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timing utilities | Used for delays and timing control | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Used for portable embedded hardware interfaces | + +## Links + +1. https://components101.com/wireless/hc-12-wireless-module +2. https://components101.com/modules/l298n-motor-driver-module +3. https://components101.com/modules/joystick-module +4. https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html +5. https://github.com/embassy-rs/embassy \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/Digital_Fairy_Hardware.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/Digital_Fairy_Hardware.svg new file mode 100644 index 00000000000..6232e8e6296 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/Digital_Fairy_Hardware.svg @@ -0,0 +1 @@ +SVG Image created as Digital_Fairy_Hardware.svg date 2026-05-12T09:01:15 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: Digital_Fairy_Hardware.kicad_schSheet: /3V3GNDINTLEDSCLSDAVINJ1TCS3472GND+3V3+3V3CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U1MPU-6050GND+5V+3V3GNDGNDI/OVCCJ3TTP223+3V3+5VRGBDOUT1DIN2VCC3VDD5VSS6D1WS2812GND+5VGND+3V3GND+3V3DOGNDVCCJ4LM393+5VGNDOUTVCCJ2MicrofonGND+3V3GNDGNDILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U3CR2013-MI2120GND+5V+3V3LOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16U5PAM8403DGND12LS1Speaker+5VVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U2STM32U545RETxQ+3V3+5V+3V3+3V3I2C_SDALCD_CSSD_CDLED_DATAI2C_SCLI2C_SDALCD_RSTSPI_SCKSPI_MOSILCD_DCLCD_CSSPI_MOSISPI_SCKSD_CSSPI_MISOSD_CDTOUCH_SIGI2C_SDAMIC_OUTI2C_SCLPHOTO_DOI2C_SCLPHOTO_DOAUDIO_OUTLED_DATASPI_MOSISPI_MISOMIC_OUTAUDIO_OUTAUDIO_OUTSPI_SCKLCD_DCSD_CSLCD_RSTTOUCH_SIG+3V3+3V3U1MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U3CR2013-MI2120VCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14GND+5VU2STM32U545RETxQVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64GNDGNDGND+3V3+3V3+5V+3V3+5VGND+5VGNDU5PAM8403DLOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16D1WS2812DOUT1DIN2VCC3VDD5VSS6+5VGND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/arhitectura.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/arhitectura.svg new file mode 100644 index 00000000000..658711247a6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/arhitectura.svg @@ -0,0 +1,3 @@ + + +
Microcontroller
(STM32 Nucleo Board)
Microcontroller...




...




...
TCS34725
Color sensor
TCS34725...
MPU-6050
Motion/IMU
MPU-6050...
LM393
Light sensor
LM393...
Microphone
Sound sensor
Microphone...
TTP223
Touch sensor
TTP223...
Buttons
Reset / color
detect
Buttons...
Sensory Module
Sensory Module
ILI9341 LCD
Pixel-art display
ILI9341 LCD...
MicroSD card
Audio / image
assets
MicroSD card...
PAM8403 +
Speaker
Audio feedback
PAM8403 +...
WS2812 LED
Ambient lighting
WS2812 LED...
Feedback Module
Feedback Module
I2C
I2C
I2C
I2C
ADC
ADC
ADC
ADC
GPIO
GPIO
GPIO
GPIO
SPI
SPI
SPI
SPI
DAC
DAC
GPIO
GPIO
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/index.md new file mode 100644 index 00000000000..5c272b1d481 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.ciupitu/index.md @@ -0,0 +1,171 @@ +# Digital Fairy Companion +An embedded fairy companion that reacts to light, sound, touch, and color with animated expressions, synchronized audio, and mood-driven lighting. + +:::info + +**Author**: Ciupitu Alexandra-Isabela\ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-SabeCiupi) + +::: + + + +## Description + +The Digital Fairy Companion functions as a reactive embedded system that translates environmental data into interactive emotional responses to simulate a sentient digital presence. By continuously monitoring real-time inputs from light, motion, sound, color sensors and by capacitive touch interaction, the system utilizes a complex Finite State Machine to manage over seventeen distinct behavioral states. These inputs are processed by an STM32 Nucleo microcontroller which autonomously coordinates visual animations on a 2.4-inch LCD, synchronized audio responses stored on a microSD card, and dynamic ambient lighting via RGB LEDs. In practice, the system adapts its persona based on environmental triggers, such as entering a sleep state in low light, providing a comprehensive multi-sensory user experience. + +## Motivation + +I chose this project because of a deep conviction that mood and mental well-being are fundamental pillars for personal growth and resilience in daily life. By merging the technical rigor of embedded systems with the whimsical charm of childhood nostalgia, I aimed to recreate the sense of magic that is often absent in standard modern technology. This project serves as a bridge between the complex mechanics of real-time sensor processing and the emotional human experience, providing a supportive companion that acknowledges and reacts to its user's environment. Ultimately, developing this system from the ground up allows me to explore how hardware and software can be harnessed not just for utility, but to foster a more mindful and enchanting atmosphere within a personal workspace. + +## Architecture + + +![SchemaBloc](./arhitectura.svg) + +### Components and Interconnection +The Digital Fairy Companion is structured into three primary functional modules that work in tandem to create an interactive experience: +* **Sensory Module** + + This layer is responsible for environmental data acquisition. It utilizes a TCS34725 for color identification, an MPU 6050 for motion and rhythm detection, a photoresistor for light intensity, an analog microphone for sound levels, and a TTP223 capacitive sensor for touch interaction. These sensors are connected to the central unit using a mix of I2C, SPI, and ADC interfaces. + +* **Processing & Logic Module** + + At the core of the system sits the NUCLEO-U545RE-Q microcontroller, which implements a Finite State Machine (FSM) to manage over 10 distinct emotional states. It evaluates incoming sensor data to determine the appropriate behavior, such as switching from "Sleepy" to "Scared" based on sudden light and sound changes. + +* **Feedback & Enclosure Module** + + The system produces outputs through a 2.4-inch ILI9341 LCD for pixel-art animations, a PAM8403 amplifier paired with a 1W speaker for audio, and WS2812 RGB LEDs for status-based lighting. The entire system is integrated into a thematic "Fairy House" enclosure, where the screen acts as a window and sensors are strategically hidden in decorative elements like an entrance flower or the roof. + +### Data & Logic Flow +Data enters the system through various protocols: I2C for complex sensory modules (Color and IMU) and SPI for high-speed communication with the LCD and SD card. The microcontroller performs real-time analysis of these inputs to trigger state transitions. Once a state is identified, the MCU retrieves corresponding graphical frames and audio clips from the microSD card and updates the visual and auditory outputs simultaneously. + +## Log + + +### Week 2 - 8 March +I choosed my project idea and I thought the details of the project. + +### Week 13 - 19 April +I wrote the initial documentation. + +### Week 5 - 11 May + +This week, I focused on the hardware assembly of the project. I successfully soldered the components onto the pins using a soldering iron and solder, ensuring reliable electrical connections. Additionally, I purchased a speaker to complete the audio subsystem for the device. + +### Week 12 - 18 May + +This week, I finalized the remaining minor hardware details and adjustments to ensure all connections were perfectly secure. Additionally, I focused on implementing the software architecture, successfully writing the asynchronous code that integrates all sensors and brings my digital fairy companion to life. + +### Week 19 - 25 May + +## Hardware + +Each component was selected to balance high performance with the low-power requirements of an always-on companion device: +* **Microcontroller (MCU)** + + The NUCLEO-U545RE-Q was chosen for its ultra-low-power capabilities and sufficient processing power to handle multiple serial protocols and complex FSM logic concurrently. + +* **Display & Storage** + + The ILI9341 LCD module was selected for its vibrant color reproduction and integrated microSD slot, which simplifies the wiring for the SPI bus while providing ample storage for pixel-art assets. + +* **Sensors** + + The TCS34725 provides superior color accuracy via I2C, while the MPU 6050 (GY-521) offers 3-axis precision for detecting physical interaction or "dizziness". The TTP223 capacitive touch sensor allows for a seamless "petting" interface without mechanical wear. + +* **Audio Subsystem** + + To provide clear auditory feedback, the PAM8403 Class D amplifier is used to drive a compact 1W 8ohm speaker, delivering high-efficiency sound reproduction directly from the board's DAC. + +* **Prototyping & Power** + + The system is assembled on an MB102 830-point breadboard using a combination of male-to-female and male-to-male jumper wires. Power is supplied through the USB connection of the Nucleo board, ensuring a stable 5V and 3.3V supply for all modules. + +### Schematics + + +![SchemaHardware](./Digital_Fairy_Hardware.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|-------|-------| +| [ILI9341 2.4" LCD with Touch and SD Slot](https://www.bitmi.ro/ecran-lcd-ili9341-cu-touch-si-slot-pentru-card-sd-2-4-10797-bitmi-ro.html?gad_source=1&gad_campaignid=22990790771&gclid=Cj0KCQjwm6POBhCrARIsAIG58CI9J_OjbqLsP55WVXLVXK4t0tbIUI6HwqQBbrRAZelJB7tnRIu_BBwaAl8tEALw_wcB) | Display for pixel-art animations and SD card storage | [66,99 RON](https://www.bitmi.ro) | +| [TCS34725 Color Recognition Sensor](https://www.bitmi.ro/senzor-de-recunoastere-culorilor-tcs34725-11528.html?gad_source=1&gad_campaignid=21312430054&gclid=Cj0KCQjwm6POBhCrARIsAIG58CKA59ezjv7EMOcSnebIJfpuMzCeV7eYwOhPFfXKTtjKoG95O3QhUHIaAs4fEALw_wcB) | Detects ambient colors for state transitions | [19,99 RON](https://www.bitmi.ro) | +| [GY-521 MPU-6050 Gyroscope + Accelerometer](https://www.bitmi.ro/modul-giroscop-accelerometru-pe-3-axe-gy-521-11022.html?gad_source=1&gad_campaignid=22991722025&gclid=Cj0KCQjwm6POBhCrARIsAIG58CLV1czH8KcB0ugE427ynmQnYKl73YCqR8sPsFia3oSTV-r8sD_R5LIaAvUKEALw_wcB) | Motion and rhythm detection | [24,19 RON](https://www.bitmi.ro) | +| [PAM8403 Class D Audio Amplifier Module](https://www.bitmi.ro/modul-amplificator-audio-clasa-d-2x3w-dc-5v-pam8403-10764.html) | Drives the speaker for audio feedback | [5,99 RON](https://www.bitmi.ro) | +| [High Sensitivity Microphone Sound Sensor Module](https://www.bitmi.ro/modul-senzor-sunet-cu-microfon-sensibilitate-ridicata-iesire-analogica-11248.html?gad_source=1&gad_campaignid=21312430054&gclid=Cj0KCQjwm6POBhCrARIsAIG58CKOXY7KbNqWNDGkSCjvKiWgJLeFwFiP5H9MZ4EDyVmPl2ZfKPiSrCIaAh34EALw_wcB) | Detects ambient sound levels | [13,92 RON](https://www.bitmi.ro) | +| [WS2812 RGB5050 LED Module](https://www.bitmi.ro/modul-led-rgb5050-ws2812-10402.html) | Status-based ambient lighting | [3,99 RON](https://www.bitmi.ro) | +| [CJMCU RGB LED Module](https://www.optimusdigital.ro/en/others/13627-cjmcu-rgb-led-module.html?search_query=modul+led+rgb&results=34) | Status-based ambient lighting | [4,99 RON](https://www.optimusdigital.ro) | +| [LM393 Photodiode Sensor Module](https://www.bitmi.ro/senzori-electronici/modul-senzor-cu-fotodioda-lm393-10524.html) | Detects ambient light intensity | [3,65 RON](https://www.bitmi.ro) | +| [TTP223 Capacitive Touch Sensor](https://www.bitmi.ro/senzor-touch-capacitiv-ttp223-10993.html?gad_source=1&gad_campaignid=22991722025&gclid=Cj0KCQjwm6POBhCrARIsAIG58CJL3fHTJQgAh4WWhmBka0jOd8Hln5wbZWOXjDbRidbKQH-Fw2FF9ZcaAlqQEALw_wcB) | Touch/petting interaction interface | [1,98 RON](https://www.bitmi.ro) | +| [MB102 830-Point Breadboard](https://www.bitmi.ro/componente-electronice/breadboard-830-puncte-mb-102-10500.html) | Prototyping platform | [13,99 RON](https://www.bitmi.ro) | +| [400-Point Breadboard](https://www.bitmi.ro/electronica/breadboard-400-puncte-pentru-montaje-electronice-rapide-10633.html) | Buttons platform | [6,99 RON](https://www.bitmi.ro) | +| [40x Dupont Wires Male-Female 20cm](https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-mama-20cm-10512.html) | Connecting modules to microcontroller | [6,99 RON](https://www.bitmi.ro) | +| [40x Dupont Wires Male-Male 20cm](https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-tata-20cm-10511.html) | Breadboard connections | [8,99 RON](https://www.bitmi.ro) | +| [40x Dupont Wires Female-Female 30cm](https://www.bitmi.ro/electronica/40-fire-dupont-mama-mama-30cm-10503.html) | Breadboard connections | [6,99 RON](https://www.bitmi.ro) | +| Mini Speaker 1W 8Ω | Audio output | 18 RON | +| MicroSD Card | Storing graphical frames and audio clips | 39.99 RON | +| Tactile Push Button 6x6mm | Reset and color detection triggers | 0.65 RON x 3 | +| 1x40 Pin Header 2.54mm | Connecting PAM8403 to breadboard | 2 RON | +| NUCLEO-U545RE-Q | Main microcontroller running the FSM logic | - RON | + + +## Software +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Abstraction Layer (HAL) asynchronous dedicated to STM32 microcontrollers. | Initialization of system clocks and direct control of hardware peripherals: GPIO pins (Input, Output), asynchronous interruptions on pins (ExtiInput), communication bus (SPI, I2C), sound generator (DAC) and LED timers (SimplePwm). | +| [embassy-executor](https://crates.io/crates/embassy-executor) | High-efficiency asynchronous cooperative runtime for embedded systems. | Manage priorities and run parallel to the 9 competing tasks (tasks) of the fairy, alternating processing time without preemptive bottlenecks. | +| [embassy-time](https://crates.io/crates/embassy-time) | Asynchronous utilities for time management and timers. | Allows executing asynchronous breaks (Timer::after_millis), measuring the duration of events and releasing the processor during expectations. | +| [embassy-sync](https://crates.io/crates/embassy-sync) | Primitive thread-safe synchronization (channels, mutexes) for asynchronous environments. | It implements the inter-task message queue (Channel) used by sensors to send commands to the FSM brain, as well as providing support for safe atomic blockages. | +| [embassy-embedded-hal](https://crates.io/crates/embassy-embedded-hal) | Implementations of shared busses. | Allows safe sharing of the same physical SPI1 bus between the TFT screen and the MicroSD card reader, avoiding data collisions. | +| [embedded-graphics](https://crates.io/crates/embedded-graphics) | Optimised 2D graphics library for small integrated screens. | Define color models (Rgb565), coordinate points, and draw decoded pixel packets from the card directly on the screen. | +| [mipidsi](https://crates.io/crates/mipidsi) | High-level universal driver for screens based on SPI controllers. | Manages boot sequence, 240x320 resolution, and hardware control for ILI9341 chip color screen. | +| [display-interface-spi](https://crates.io/crates/display-interface-spi) | Transport software interface dedicated to SPI bus screens. | Translates drawing logic commands from the graphics driver into raw bit packs sent to the Data/Command (DC) and Clock physical pins. | +| [embedded-sdmmc](https://crates.io/crates/embedded-sdmmc) | High-efficiency asynchronous cooperative runtime for embedded systems. | Allows directory opening, real-time fragmented navigation and reading of animation files (.RAW) and audio (.WAV) stored on the MicroSD card. | +| [mpu6050](https://crates.io/crates/mpu6050) | Driver for inertial sensor (IMU) with 6 axes MPU6050. | Interfaces the sensor on the I2C bus and extracts the raw accelerations on the X, Y and Z axes to detect when the fairy is slightly moved or shaken. | +| [tcs3472](https://crates.io/crates/tcs3472) | Driver for optical color sensor and ambient light TCS34725. | Activates the RGB and Clear photodiodes of the sensor, allowing to read the colors from reality and send them to the normalization algorithm. | +| [embedded-hal](https://crates.io/crates/embedded-hal) | Traits (traits) and standard abstractions for embedded hardware in Rust. | Provides a common language between the sensor drivers and the physical pins of the microcontroller, mapping the software functionalities on the PWM channels. | +| [defmt](https://crates.io/crates/defmt) & [defmt-rtt](https://crates.io/crates/defmt-rtt)| Ultra-fast and efficient space logging framework for microcontrollers. | Sends diagnostic text messages and telemetry data from the board directly to the computer console via the Segger RTT protocol without consuming unnecessary Flash memory. | +| [panic-probe](https://crates.io/crates/panic-probe/) | Handler for critical errors (panic) integrated directly with defmt. | If the code encounters a fatal error, it stops execution safely and prints the exact code line and backtrace into the terminal for debugging. | +| [static_cell](https://crates.io/crates/static_cell) | Mechanism for the safe creation of static references to runtimes without allocation on heap. | It allows the transformation of communication buses (SPI and I2C) into global static resources, so that they can be shared and accessed by all tasks started in the main. | +| [cortex-m](https://crates.io/crates/cortex-m) | Functii de nivel scazut arhitectura de procesoare ARM Cortex-M. | Used for the execution of the microsecond loop at the assembly instruction level (cortex_m::asm::delay), ensuring the synchronization of the audio tact for DAC. | + +### Description software +Loop states: +- STATE_NEUTRAL: The default companion state. The fairy loops an idle animation with occasional eye-blinking and soft audio. It actively listens to all environmental sensors. +- STATE_SLEEPY: Triggered when the photodiode detects sustained darkness (sleeping animation and plays a continuous lullaby). +- STATE_HAPPY: Triggered when the TTP223 touch sensor is actively held. The fairy loops a happy animation and playful sounds. It features a short grace period to prevent accidental interruption from touch bouncing. +- STATE_DANCE: Triggered by gentle movements from the MPU6050 accelerometer. The fairy loops a dancing animation while the RGB LED runs a high-speed disco stroboscope cycle. + +Reaction states: +- STATE_HELLO: The initial hardware-protected introduction state at startup. It plays an introductory animation and audio clip before automatically transitioning to NEUTRAL. +- STATE_WAKING_UP: Executes only if the fairy is in SLEEPY mode and light returns. +- STATE_FEAR: Triggered by a sudden noise spike (NoiseBurst) or an ultra-fast light flash (blitz effect). +- STATE_ANGRY: Triggered by sustained loud noise or when the fairy is shaken/disturbed while trying to sleep. When the anger animation finishes, it dynamically checks the room: transitioning directly back to SLEEPY if it is dark, or to NEUTRAL if it is bright. +- STATE_DIZZY: Triggered by sudden, violent shaking detected by the gyroscope. It locks the fairy into a dizzy state for exactly 5 seconds before returning to normal. + +EXTI BUTTONS: +- STATE_COLOR_DETECT: ctivated by pressing the dedicated color button. This state bypasses all background sensors. It polls the TCS34725 sensor, runs a custom saturation-boosting math algorithm, and streams live, vibrant BGR colors onto the TFT screen. A second press toggles the fairy back to her previous stable state. +- Emergency Reset: Pressing the hardware reset button instantly overrides any current state (including protected loops) and forces the system back to STATE_HELLO. + +## Links + + + +1. [Nucleo STM32F401RE with CC3000 and ILI9341 LCD](https://youtu.be/UnLNsv0Yht0?si=uK1fpNcbcgJiIeQF) + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/architecture.svg new file mode 100644 index 00000000000..d090cd20aa7 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/architecture.svg @@ -0,0 +1,4 @@ + + + +
Senzor de nivel
HC-SR04P
Senzor de nivel...
Senzor Hall effect
Senzor Hall effect
Senzor IR
Senzor IR
Senzor Temp/Umid
Senzor Temp/Umid
*doua boluri servire
*doua boluri servire
senzor presiune
senzor presiune
Motor pas cu pas 2
(+ULN2003)
Motor pas cu pas 2...
Motor pas cu pas 2
(+ULN2003)
Motor pas cu pas 2...
Servo SG90
(Lid lock, PWM)
Servo SG90...
STM32
Nucleo-U545RE-Q
STM32...
sursa alim
sursa alim
Modul MicroSD
Modul MicroSD
DS3231 RTC
DS3231 RTC
OLED SSD1306
OLED SSD1306
3 Butoane Push
3 Butoane Push
Active Buzzer
Active Buzzer
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/img_hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/img_hardware.webp new file mode 100644 index 00000000000..ceabb1d6f1f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/img_hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/index.md new file mode 100644 index 00000000000..786dffec659 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/index.md @@ -0,0 +1,104 @@ +# Automated Pill Dispenser +A sensor-verified automatic medication dispenser with dual stepper motor carousel and shutter mechanism. + +:::info + +**Author**: Dinu Alexandra \ +**GitHub Project Link**: [GitHub Repository](https://github.com/UPB-PMRust-Students/acs-project-2026-alexandraioana3) +::: + + +## Description + +The device dispenses pills from a 7-day rotating carousel according to a preset schedule. A stepper motor rotates the pill box to the correct day, while a second stepper motor controls a shutter disc that opens to release pills by gravity. An IR sensor confirms dispensing, a Hall sensor verifies carousel position, an ultrasonic sensor detects user proximity, and a temperature/humidity sensor monitors storage conditions. The user sets schedules via 3 buttons and an OLED display. A servo motor locks the lid to prevent unauthorized access. All dispensing events are logged to a MicroSD card. + +## Motivation + +Elderly people and patients with complex treatments frequently forget to take their medication on time. Commercial automated dispensers are expensive and often lack verification mechanisms. This project provides an affordable solution that verifies every step of the dispensing process through multiple sensors, monitors storage conditions, and alerts the user through audio and visual feedback — all without requiring internet connectivity. + +## Architecture + +![Architecture Diagram](architecture.svg) +The system has three main subsystems connected to the STM32 Nucleo-U545RE-Q: + +- **Sensor subsystem** — 4 sensors provide feedback: Hall effect (KY-035, ADC) for carousel homing, IR obstacle sensor (GPIO) for pill detection, HTU21D (I2C) for temperature and humidity, HC-SR04P (GPIO) for user proximity detection. +- **Actuator subsystem** — 3 actuators control dispensing: Stepper motor 1 + ULN2003 (GPIO×4) rotates the carousel, Stepper motor 2 + ULN2003 (GPIO×4) controls the shutter disc, Servo SG90 (PWM) locks/unlocks the lid. +- **Interface subsystem** — OLED SSD1306 display (I2C), DS3231 RTC (I2C) for scheduling, MicroSD card module (SPI) for event logging, active buzzer (PWM) for alarms, 3 push buttons (GPIO) for menu navigation. + +All I2C devices (OLED, DS3231, HTU21D) share the same bus on PB6/PB7 with 4.7kΩ pull-up resistors. Communication protocols used: I2C, SPI, GPIO, PWM, ADC. + +## Log + +### Week 4 - 10 May +The hardware components arrived, and I immediately began testing them individually to verify their basic functionality on the breadboard. + +### Week 11 - 17 May +I successfully interconnected all the hardware modules and developed the initial part of the software architecture using async Embassy tasks. + +![Hardware Setup](img_hardware.webp) + +### Week 18 - 24 May +Finalize the software implementation, calibrated the sensor thresholds, and completed the overall structural design for the final demonstration. + +## Hardware + +The mechanical assembly uses a commercially available 7-day round pill box mounted upside-down on the first stepper motor's shaft. The compartments face downward onto a fixed base plate. A second stepper motor drives a shutter disc beneath the base — when the shutter hole aligns with the active compartment, pills fall through by gravity into a collection tray. A neodymium magnet glued to the carousel triggers the Hall sensor once per revolution for position calibration. The IR sensor at the dispensing window confirms that pills actually fell through. The entire assembly sits inside a box enclosure containing the breadboard, STM32 Nucleo, battery holder, and all electronics. + +### Schematics + +![KiCad Schematic](schematic_kicad.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | Provided by university | +| [OLED Display 0.96" SSD1306 I2C](https://sigmanortec.ro/en/oled-display-096-i2c-iic-blue) | Displays schedule, status, alerts | [16.96 RON](https://sigmanortec.ro/en/oled-display-096-i2c-iic-blue) | +| [DS3231 RTC Module](https://sigmanortec.ro/en/precision-real-time-module-rtc-ds3231-with-battery-33-5v) | Real-time clock for dose scheduling | [17.98 RON](https://sigmanortec.ro/en/precision-real-time-module-rtc-ds3231-with-battery-33-5v) | +| [HTU21D Temp & Humidity Sensor](https://sigmanortec.ro/en/temperature-and-humidity-sensor-htu21d-i2c-15-36v) | Monitors medication storage conditions | [17.22 RON](https://sigmanortec.ro/en/temperature-and-humidity-sensor-htu21d-i2c-15-36v) | +| [Hall Sensor KY-035](https://sigmanortec.ro/en/senzor-hall-analog-magnetic-ky-035-5v) | Carousel homing and position verification | [4.15 RON](https://sigmanortec.ro/en/senzor-hall-analog-magnetic-ky-035-5v) | +| [IR Obstacle Sensor](https://sigmanortec.ro/en/ir-obstacle-sensor-33-5v) | Detects pills falling through dispensing window | [3.12 RON](https://sigmanortec.ro/en/ir-obstacle-sensor-33-5v) | +| [HC-SR04P Ultrasonic Sensor](https://sigmanortec.ro/en/ultrasonic-sensor-hc-sr-04p-3-55v) | Detects user proximity for display wake-up | [10.14 RON](https://sigmanortec.ro/en/ultrasonic-sensor-hc-sr-04p-3-55v) | +| [28BYJ-48 Stepper Motor](https://sigmanortec.ro/en/stepper-motor-5v-28byj48-with-reducer) ×2 | Rotates carousel and shutter disc | [20.58 RON](https://sigmanortec.ro/en/stepper-motor-5v-28byj48-with-reducer) | +| [ULN2003 Driver Module](https://sigmanortec.ro/en/stepper-motor-driver-module-4-phases-uln2003-5-12v) ×2 | Drives the stepper motors | [9.94 RON](https://sigmanortec.ro/en/stepper-motor-driver-module-4-phases-uln2003-5-12v) | +| [SG90 Servo Motor 180°](https://sigmanortec.ro/en/servo-motor-sg90-with-limiter) | Locks/unlocks the lid | [9.49 RON](https://sigmanortec.ro/en/servo-motor-sg90-with-limiter) | +| [Active Buzzer 5V](https://sigmanortec.ro/en/active-buzzer-5v) ×2 | Audible alarm for dose reminders | [2.22 RON](https://sigmanortec.ro/en/active-buzzer-5v) | +| [Mini Button 6×6×5mm](https://sigmanortec.ro/en/mini-button-6x6x5-4-pins) ×4 | Menu / Up / Down navigation | [1.44 RON](https://sigmanortec.ro/en/mini-button-6x6x5-4-pins) | +| [MicroSD Card Module SPI](https://www.optimusdigital.ro/ro/memorii/1516-modul-slot-card-microsd.html) | Logs dispensing events in CSV format | [~7.00 RON](https://www.optimusdigital.ro/ro/memorii/1516-modul-slot-card-microsd.html) | +| [Breadboard MB102 830pts](https://sigmanortec.ro/en/breadboard-mb102-830-puncte-transparent) | Prototyping platform | [16.66 RON](https://sigmanortec.ro/en/breadboard-mb102-830-puncte-transparent) | +| [Breadboard Power Supply](https://sigmanortec.ro/en/sursa-alimentare-33v-si-5v-pentru-breadboard) | Regulates power to 3.3V and 5V rails | [6.69 RON](https://sigmanortec.ro/en/sursa-alimentare-33v-si-5v-pentru-breadboard) | +| [4×AA Battery Holder](https://sigmanortec.ro/en/suport-baterii-aa-4aa-cu-capac-si-intrerupator) | Power source (6V) | [6.34 RON](https://sigmanortec.ro/en/suport-baterii-aa-4aa-cu-capac-si-intrerupator) | +| [Varta AA Batteries ×8](https://www.emag.ro/baterii-alcaline-varta-helps-longlife-power-aa-6-2-buc-4906121428/pd/DRFZL2MBM/) | Powers the system | [13.18 RON](https://www.emag.ro/baterii-alcaline-varta-helps-longlife-power-aa-6-2-buc-4906121428/pd/DRFZL2MBM/) | +| [TP4056 Charging Module](https://sigmanortec.ro/en/lithium-battery-charging-module-tp4056-typec-5v-1a-with-protection) | Optional LiPo charging | [4.72 RON](https://sigmanortec.ro/en/lithium-battery-charging-module-tp4056-typec-5v-1a-with-protection) | +| [Resistor Kit 600pcs](https://sigmanortec.ro/en/resistors-kit-30-values-600-pieces-1-4w-10r-1m) | Pull-up resistors for I2C, button pull-downs | [15.16 RON](https://sigmanortec.ro/en/resistors-kit-30-values-600-pieces-1-4w-10r-1m) | +| [Dupont Wires MM 30cm ×40](https://sigmanortec.ro/en/40-fire-dupont-30cm-tata-tata) | Breadboard connections | [8.39 RON](https://sigmanortec.ro/en/40-fire-dupont-30cm-tata-tata) | +| [Dupont Wires FM 10cm ×40](https://sigmanortec.ro/en/40-fire-dupont-10cm-tata-mama) | Module-to-breadboard connections | [7.73 RON](https://sigmanortec.ro/en/40-fire-dupont-10cm-tata-mama) | +| [Dupont Wires FF 30cm ×40](https://sigmanortec.ro/en/40-fire-dupont-30cm-mama-mama) | Module-to-module connections | [7.59 RON](https://sigmanortec.ro/en/40-fire-dupont-30cm-mama-mama) | +| [Neodymium Magnets 5×2mm ×20](https://www.emag.ro/set-magneti-rotunzi-puternici-neodim-5x2-mm-argintii-20-buc-ebn2481/pd/D2R1YT3BM/) | Position marker on carousel for Hall sensor | [24.16 RON](https://www.emag.ro/set-magneti-rotunzi-puternici-neodim-5x2-mm-argintii-20-buc-ebn2481/pd/D2R1YT3BM/) | +| 7-Day Round Pill Box | Carousel body (7 wedge compartments) | 3.81 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | HAL and async runtime for STM32 | GPIO, I2C, SPI, PWM, ADC peripheral access | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs 6 concurrent tasks: scheduler, motor control, sensors, display, proximity, logging | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers and delays | Non-blocking delays for stepper stepping, sensor polling, alarm timeouts | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | OLED display driver | Renders schedule, status pages, and alerts on the 0.96" I2C display | +| [ds323x](https://github.com/eldruin/ds323x-rs) | DS3231 RTC driver | Reads current time, sets alarm times for dose scheduling | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | SD card FAT32 filesystem driver | Writes timestamped dispensing events to CSV files via SPI | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | Standardized interfaces for GPIO, I2C, SPI, ADC peripherals | +| [defmt](https://github.com/knurling-rs/defmt) + [defmt-rtt](https://github.com/knurling-rs/defmt) | Logging framework | Structured debug logging via RTT during development | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Prints panic info and backtraces via RTT probe | + +## Links + +1. [Embassy-rs — Async framework for embedded Rust](https://github.com/embassy-rs/embassy) +2. [SSD1306 OLED driver crate](https://crates.io/crates/ssd1306) +3. [DS323x RTC driver crate](https://crates.io/crates/ds323x) +4. [Embedded SDMMC crate](https://crates.io/crates/embedded-sdmmc) +5. [PM Rust Course — Lab 01](https://pmrust.pages.upb.ro/docs/acs_cc/lab/01) +6. [PM Rust Course — Lab 02](https://pmrust.pages.upb.ro/docs/acs_cc/lab/02) +7. [PM Rust Course — Lab 03](https://pmrust.pages.upb.ro/docs/acs_cc/lab/03) +8. [28BYJ-48 Stepper Motor Datasheet](https://components101.com/motors/28byj-48-stepper-motor) +9. [HTU21D Sensor Datasheet](https://www.te.com/commerce/DocumentDelivery/DDEController?Action=showdoc&DocId=Data+Sheet%7FHPC199_6%7FA6%7Fpdf%7FEnglish%7FENG_DS_HPC199_6_A6.pdf%7FCAT-HSC0004) diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/schematic_kicad.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/schematic_kicad.svg new file mode 100644 index 00000000000..0c223265ae6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandra.dinu0302/schematic_kicad.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title: Automated Pill DispenserFile: pill_dispenser.kicad_schSheet: /Author: Dinu Alexandra 332CCVCCIR_OUTGNDIRGND1VCC2SCL3SDA4DS3231 RTC (I2C2)HALL_AOVCCGNDJ4HALL KY-035SW1SW_PushGND1VCC2SCL3SDA4OLED SSD1306 (I2C1)I11I22I33I44I55I66I77GND8COM9O710O611O512O413O314O215O116U2ULN2003R2RR4RR1RGND1VCC2SCL3SDA4HTU21D (I2C2)PWM1+2-3M2Motor_Servo12BZ1BuzzervcctrigechoGNDJ1HC-SR04PSW2SW_PushSERVO_SIGVCCGNDJ3SERVOI11I22I33I44I55I66I77GND8COM9O710O611O512O413O314O215O116U1ULN2003VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U5STM32U545RETxQSW3SW_PushPWM1+2-3M1Motor_ServoR3R5VGNDGND3.3VGNDGND5VGND5V5VGND3.3VGND3.3V3.3V3.3VGNDGNDGNDGND3.3VGND3.3V5VGND5VR4ROLED SSD1306 (I2C1)GND1VCC2SCL3SDA4M1Motor_ServoPWM1+2-3R3R \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/block_diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/block_diagram.webp new file mode 100644 index 00000000000..09704963a53 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/block_diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/components_inside_box.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/components_inside_box.webp new file mode 100644 index 00000000000..e6aac3e8299 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/components_inside_box.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/frame_photo.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/frame_photo.webp new file mode 100644 index 00000000000..e37b3495744 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/frame_photo.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/schematics.webp new file mode 100644 index 00000000000..7c2151ae47e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/assets/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/index.md new file mode 100644 index 00000000000..97d4609136b --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.babacea/index.md @@ -0,0 +1,88 @@ +# Automated Chessboard +A fully automated chess system featuring a CoreXY magnetic mechanism for autonomous piece movement. + +:::info + +Author: Babacea Alexandru \ +GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-AlexandruBabacea-student + +::: + +## Description + +The Automated Chessboard project involves the development of a fully automated chess system that allows both human-versus-human gameplay (with move validation) and human-versus-AI gameplay. + +The core innovation and complexity lie in the hidden mechanism that moves the pieces autonomously. This utilizes a CoreXY rail system positioned beneath the playing surface. This allows an electromagnet to navigate under the board and drag the magnetic chess pieces to their new positions. The detection of piece locations on the board is achieved through an 8x8 matrix of 64 magnetic sensors. + +## Motivation + +This project was undertaken to integrate complex mechanical design with embedded software and artificial intelligence. The goal is to demonstrate how embedded Rust can be used to manage precise motor control (CoreXY kinematics), high-density sensor arrays and algorithmic decision-making in a real-time, physical interactive system. + +## Architecture + +The system architecture comprises the following modules: +- Processing Module: An STM32 microcontroller serves as the central processing unit, running both the game logic (chess engine) and the motion logic (step generation). +- Actuation Module: Controls the physical movement using two Nema 17 stepper motors and a powerful electromagnet. +- Detection Module: A grid of 64 magnetic Reed sensors read via external multiplexers, compensating for the limited GPIO pins on the microcontroller. + +![block_diagram](./assets/block_diagram.webp) + +## Log + +### Weeks March 16th - March 29th +Researched and finalized the bill of materials. Placed orders for the necessary electronic and mechanical components. Initiated the 3D printing process for the custom magnetic chess pieces. + +### Weeks March 30th - April 12th +Prepared the physical structure by cutting the V-slot aluminum profiles and the OSB base panel. Successfully assembled the main outer frame of the chessboard and completed the 3D printing of the structural parts. + +### Weeks April 13th - April 26th +Installed the CoreXY mechanical drive system, including pulleys, timing belts, and the Nema 17 stepper motors. Developed and executed the initial test scripts to validate motor movement and control via the A4988 drivers. + +### Weeks April 27th - May 10th +Finalized the physical enclosure by adding the side walls and the top playing surface complete with the chess sticker. Installed the initial piece detection matrix, wiring and validating the first two rows of reed switches through a multiplexer. Furthermore, integrated the transistor-controlled electromagnet and successfully executed the first physical test to move a piece. + +### Week May 11th - May 17th +Connect all reed switches to the MUXs and the STM32 Nucleo. Reprint the 3D chess pieces to make them lighter and use only one magnet. Write the software to read all reed switches and mirror all the moves that the white player makes. + +## Hardware + +The hardware setup includes an STM32 microcontroller, 64 magnetic Reed sensors for piece detection, two Nema 17 stepper motors for the CoreXY movement and a 12V electromagnet to physically drag the pieces. + +### Schematics + +![block_diagram](./assets/schematics.webp) + +### Photos + +| Frame | Components | +| :---: | :---: | +| ![frame_photo](./assets/frame_photo.webp) | ![components_photo](./assets/components_inside_box.webp) | + +### Bill of Materials + +| Device | Usage | Price | Link | +|--------|--------|-------| ------ | +| STM32 Microcontroller | Main processing unit | 121 RON | [Link](https://ardushop.ro/ro/plci-de-dezvoltare/2411-stmicroelectronics-nucleo-g0b1re-6427854012296.html?gad_source=1&gad_campaignid=17003133061&gclid=Cj0KCQjwkrzPBhCqARIsAJN460mPAlJ6u6wInd95khH3RsV0L5u3VJBf06mP8uxdrzOwLBNtfjXcb6QaAlCFEALw_wcB) +| Nema 17 Stepper Motor | CoreXY movement | 2 x 67 RON | [Link](https://sigmanortec.ro/Nema17-1-5A-p125805542) +| A4988 Stepper Driver | Motor control | 2 x 8 RON | [Link](https://www.optimusdigital.ro/en/stepper-motor-drivers/866-driver-pentru-motoare-pas-cu-pas-a4988-rosu.html?search_query=A4988&results=8) +| 12V Electromagnet (5kg) | Moving the chess pieces | 7.51 EURO | [Link](https://ampul.eu/ro/electromagnei-adezivi/3826-1623-electromagnet-5kg-50n-25x20mm?utm_source=google&utm_medium=cpc&gad_source=1&gad_campaignid=17339270587&gclid=Cj0KCQjwkrzPBhCqARIsAJN460kEl4_91gEkpgTrI4AhOqYvAlbM5sYt642dCYwF1qAknT5J9WZYmxoaAss2EALw_wcB#/tensiune-3_v_dc) +| TIP122 Transistor + Diode | Electromagnet control | 5 RON | - | +| Reed Sensor | Piece detection matrix | 64 x 1.86 RON | [Link](https://sigmanortec.ro/en/magnetic-reed-switch-n-o) +| CD74HC4067 Multiplexer | Sensor matrix reading | 4 x 4.76 RON | [Link](https://sigmanortec.ro/Modul-multiplexor-16-canale-p126258652) +| Endstop limit switch | Axis calibration (homing) | 2 x 5.23 RON | [Link](https://sigmanortec.ro/Endstop-mecanic-SS-5GL2-p136284192) +| V-slot profiles and belts | Mechanical frame | 5 x 24.79 RON | [Link](https://www.emag.ro/profil-aluminiu-v-slot-20x20-50cm-negru-pentru-constructii-3d-5905832546328/pd/DBP10N3BM/?cmpid=146733&utm_source=google&utm_medium=cpc&utm_content=79559759954&utm_campaign=(RO:Whoop!)_3P-Y_%3e_Utilaje_si_materiale_de_constructii_order_test&gad_source=1&gad_campaignid=2078923426&gclid=Cj0KCQjwkrzPBhCqARIsAJN460lV6vih-NN5hh__M_T-HASOowbW36AljFTTpLsIYPJTcgxXrF2SGokaAhDlEALw_wcB) +| Mini V wheels | Smooth movement along the axes | 93,68 RON | [Link](https://www.emag.ro/set-de-role-kit-de-roti-mini-v-hw1214wk/pd/DQBXRGMBM/?cmpid=146055&utm_source=google&utm_medium=cpc&utm_campaign=(RO:eMAG!)_3P_NO_SALES_%3e_Imprimante,_scanere_and_consumabile&utm_content=85337494034&gad_source=1&gad_campaignid=7971894862&gclid=Cj0KCQjwkrzPBhCqARIsAJN460kJ9blGKkHQRf67tIr1FPX4YvTQLGhOdl1p8ifyoAWFnInp7YoXALoaAifsEALw_wcB) +| Neodymium magnets | Inside the chess pieces | 37.92 RON | [Link](https://www.emag.ro/set-50-magneti-neodim-universali-diverse-activitati-8x2-mm-rotund-argintiu-dactylionr-dactylion-10142/pd/D26HTPYBM/?ref=ohs_buy_again_481488949) + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| embassy-rs | Asynchronous framework | Efficient task management and hardware abstraction | +| embassy-stm32 | HAL for STM32 | Controlling PWM for steppers and GPIO for sensors | +| defmt | Logging framework | Real-time debugging and telemetry | + +## Links + +1. [Automated Chessboard by Greg06 (Instructables)](https://www.instructables.com/Automated-Chessboard/?fbclid=PAVERTVgQkc31leHRuA2FlbQIxMABzcnRjBmFwcF9pZA81NjcwNjczNDMzNTI0MjcAAaf3d5kjWfOXYe6eTNwDwONbe9yrm8rgNCHcAq2UOxQGzEu7HfhKyTgcw8Q93w_aem_8qWs7lUFjMI_7Cdr_kOIEA) +2. [CoreXY Kinematics Theory](https://corexy.com/theory.html) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/automotive-black-box.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/automotive-black-box.webp new file mode 100644 index 00000000000..29b179aa489 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/automotive-black-box.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/schema-block-black-box.drawio.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/schema-block-black-box.drawio.webp new file mode 100644 index 00000000000..5ddc66f877a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/schema-block-black-box.drawio.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/state-machine-release.drawio.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/state-machine-release.drawio.webp new file mode 100644 index 00000000000..2757ec767eb Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/docs/state-machine-release.drawio.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/index.md index 6a083ed348d..49d659ba9d4 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.barbu2809/index.md @@ -8,98 +8,137 @@ A black box that logs data on an SD card if the RC car has been in an accident. ::: - - ## Description -The project will do 2 things: -1. Detect if the RC car was involved in a crash -2. If a crash had occurred log data such as acceleration, speed etc on an SD card. +This project serves two main purposes: +1. Detecting whether the RC car was involved in a crash. +2. Logging telemetry data, such as acceleration and orientation in space, onto an SD card in the event of an accident. ## Motivation -I am passionate about cars. Many of my solo projects had involved cars from modeling to simulating the forces that act on a car. +I am deeply passionate about cars. Many of my previous solo projects have revolved around automotive engineering, ranging from 3D modeling to simulating the physical forces that act upon a vehicle in motion. ## Architecture -Add here the schematics with the architecture of your project. Make sure to include: - - i will do a Kalman filter so i need a crate for handling math and matrix multiplication - - i will have to do some custom graphs to determine when an accident happened so another rust crate there - - from what i understand i also need a filter that stabilizes the signal from the IMU sensor +Project architecture schematic: +[draw.io schema of the project](docs/schema-block-black-box.drawio.webp) - +The core of the system is a Kalman filter that performs sensor fusion between the accelerometer and the gyroscope. To eliminate noise, the filter records multiple readings over a 2-second interval, stabilizing the raw IMU signal before processing acceleration. Because these algorithms require complex linear algebra, a dedicated Rust mathematics crate handles all matrix multiplications. -## Log +Building upon this stabilized data, the system compares deceleration and impulsewith some thresholds to accurately detect an accident. The exact crash threshold was determined empirically by running test measurements, plotting the results, and analyzing the data. Once a crash is detected, the system immediately logs the car's acceleration and orientation to a CSV file on the SD card. + +Additionally, the hardware includes two physical buttons to streamline testing and demo reruns: one safely ejects the SD card to prevent data corruption, while the other resets the IMU state to eliminate gyroscope drift and ensure a fresh start. - +Below is the state machine diagram of the project: +[Image](docs/state-machine-release.drawio.webp) + +Noteworthy graphs of my test runs can be found in the `README.md` of the software side of the project. + +## Log ### Week 23 Feb - 29 Mar -Looking for an idea, validating idea, idea is too simple so back to square 1. +Started by brainstorming and validating initial ideas. The first concept was too simple, so I went back to square one. -Asking people for problems that my project could solve, I am not satisfied with the ideas. +I then asked peers about problems my project could solve, but I was not satisfied with the suggestions. -Finding out about back boxes and how they record data for a plane crash, adapting the idea for a smaller scope so i chose a car instead of a plane. +Eventually, I researched aviation black boxes and how they record flight data during a crash. I adapted this concept for a smaller scope, choosing an RC car instead of a plane. -Validating idea with the course staff, idea is good. +After validating this idea with the course staff, it was approved. -Looking for components, finding components, ordering them, they get delivered to the wrong address, waiting for components some more time. +I then searched for and ordered the necessary components. Unfortunately, they were delivered to the wrong address, which caused additional delays. ### Week 30 Mar - 26 Apr -Doing small scale beginner project on the board to get the feel of how to program in rust on the STM board. +Worked on small-scale beginner projects on the STM board to get a feel for programming in Rust. -Waiting for the rest of the components to be delivered. +Continued waiting for the rest of the components to be delivered. -### Week 12 - 18 May +### Week 27 Apr - 10 May -### Week 19 - 25 May +The parts finally arrived at the correct address. -## Hardware +Researched Kalman filters. [Good information was found here](https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python). -Components: - - IMU 6 axis - - MicroSD card module - - STM board (provided by the university) - - buzzer - - LED - - wires - - breadboard - - power supply 4 AA batteries +Bought the RC car body and conducted further research on the specific type of Kalman filter needed, as well as how the car's chassis would affect the readings. -### Schematics +Wired the project hardware to the RC car. -Place your KiCAD or similar schematics here in SVG format. +Fixed an issue where the IMU sensor was not reading data, thanks to the lab assistants. -### Bill of Materials +### Week 11 - 17 May + +Added the external power supply. + +Made significant progress on the software side: +- Refactored the lab code for the MPU6500 component to fit my specific needs. +- Implemented the code for the SD card logging system. +- Tested the buzzer, the two buttons, and the RGB LED. +- Tested sensor fusion and the Kalman filter implementation. +- Discovered two bugs: + - `probe-rs` was not reading the board (caused by unplugging it from the PC at a bad time). This was eventually fixed. + - When connecting the external power supply, the board lights up, but the code does not execute. This issue was resolved later. + +### Week 18 - 24 May + +Worked on the state machine for the test bench. + +Sought help regarding the power supply issue and decided to use a powerbank. However, the powerbank kept shutting down due to the low current draw from the STM board. I tried plugging my phone into the second port to keep it awake, but the powerbank only had one USB-A port. To fix this, I went to Altex Orhideea and bought a 3-meter Hama data cable to keep the project wired to my laptop during tests. I expected signal degradation due to the cable's length, but it works perfectly, and the board is now properly powered. + +### Week 25 - 27 May + +Refactored Kalman Filter and crash detection. - +Developed and tested the release build of the project. + +Recorded the final project demonstration and posted it on YouTube [here](https://www.youtube.com/watch?v=s0vU-t5tHtw&list=PLj-KCdUICNfDgmbNKMuRmQCIzfgc7HheH&index=1). + +Polished the overall project presentation. + +## Hardware + +Components: +- 6-axis IMU +- MicroSD card module +- STM board (provided by the university) +- Buzzer +- LED +- Wires +- Breadboard +- 4x AA battery power supply + +### Schematics + +[KiCad schema](docs/automotive-black-box.webp) + +> [!NOTE] +> I am not entirely sure about the exact part numbers for the buttons, as they are generic hobbyist components, but I recreated them in the schematic to the best of my ability. + +### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [STM32U545](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) | The microcontroller | [113 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf1J6XpRotkoYj96_ZbUSaPnH&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV9JETny_HVaRTMCWUsjLF5mX_nrK4cA6P9VX1bEVQVYmCTCGeIwhOAaAlZUEALw_wcB) | +| [STM32U545](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) | Main microcontroller | [113 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf1J6XpRotkoYj96_ZbUSaPnH&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV9JETny_HVaRTMCWUsjLF5mX_nrK4cA6P9VX1bEVQVYmCTCGeIwhOAaAlZUEALw_wcB) | | [MPU-6500 6 axe](https://sigmanortec.ro/Modul-Accelerometru-Giroscop-I2C-MPU-6500-6-axe-p136248782) | Accelerometer and gyroscope for crash detection | 12 RON * 2 | -| [Suport baterii AA, 4AA](https://sigmanortec.ro/Suport-4-baterii-AA-cu-capac-si-intrerupator-p172447738) | Power up the project | 7 * 2 RON | -| [Modul MicroSD](https://sigmanortec.ro/Modul-MicroSD-p126079625) | For live telemetry | 5 * 2 RON | -| LED | Visual effect of the crash | - | -| Buzzer | Auditorial effect of the crash | - | -| Wires | - | - | -| Breadboard | Link components together | - | - +| [Suport baterii AA, 4AA](https://sigmanortec.ro/Suport-4-baterii-AA-cu-capac-si-intrerupator-p172447738) | Project power supply | 7 RON * 2 | +| [Modul MicroSD](https://sigmanortec.ro/Modul-MicroSD-p126079625) | Live telemetry logging | 5 RON * 2 | +| LED | Visual crash indicator | - | +| Buzzer | Auditory crash indicator | - | +| Wires | Interconnecting components | - | +| Breadboard | Prototyping circuit layout | - | +| RC car | Base chassis for the project | 130 RON | +> [!NOTE] +> Huge thanks to the lab assistants for providing detailed feedback on what hardware to buy! > [!NOTE] -> I bought 2 of each part just in case one breaks. +> I bought two of each component just in case one breaks. ## Software @@ -128,9 +167,8 @@ The format is ## Links - - 1. [Volvo car crash NCAP test](https://www.youtube.com/watch?v=jIuPI1k_kVU&t=10s) 2. [What is a black box](https://www.google.com/search?q=what+is+a+black+box&rlz=1C1GCEA_enRO1076RO1076&oq=what+is+a+black+box&gs_lcrp=EgZjaHJvbWUyCQgAEEUYORiABDIHCAEQABiABDIHCAIQABiABDIHCAMQABiABDIHCAQQABiABDIICAUQABgWGB4yCAgGEAAYFhgeMggIBxAAGBYYHjIICAgQABgWGB4yCAgJEAAYFhge0gEJMTQ5ODNqMGo0qAIAsAIA&sourceid=chrome&ie=UTF-8) 3. [Kalman filter - 1](https://kalmanfilter.net/) 4. [Kalman filter - 2](https://www.youtube.com/watch?v=IFeCIbljreY) +5. [KiCad tutorial](https://www.youtube.com/watch?v=vLnu21fS22s&t=551s) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/diagram.svg new file mode 100644 index 00000000000..adabcad6977 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/diagram.svg @@ -0,0 +1,3 @@ + + +
STEP/DIR
STEP/DIR
STEP/DIR
STEP/DIR
PWM
PWM
STM32
NUCLEO-U545
STM32...
Coil power
Coil power
TMC2208
Driver
(Right)
TMC2208...
Coil power
Coil power
TMC2208
Driver
(Left)
TMC2208...
SG90 Servo
(Pen Lift)
SG90 Servo...
NEMA 17
Motor
(Left)
NEMA 17...
NEMA 17
Motor
(Right)
NEMA 17...
12V DC POWER
12V DC POWER
12V DC POWER
12V DC POWER
Power Supply
12V
Power Supply...
USB/Serial
USB/Serial
Laptop
Laptop
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/schematic.svg new file mode 100644 index 00000000000..e14de4b709f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/images/schematic.svg @@ -0,0 +1,4644 @@ + +SVG Image created as Schematic Polargraph.svg date 2026-05-17T21:15:08 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 + + +2 + +3 + +4 + + +5 + +6 + + + + + + +1 + + +2 + +3 + +4 + + +5 + +6 + + + + +A + + +B + +C + +D + + + + +A + + +B + +C + +D + +Date: + + + + + + + + + +KiCad E.D.A. 10.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: + + + + + + + + +Size: A4 + + + + + + + + + + + +Id: 1/1 + + + + + + + + + + + + + +Title: + + + + + + + + + + + + +File: Schematic Polargraph.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + + + +2 + + +3 + + +4 + + + + +M2 + + +Stepper_Motor_bipolar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + +2 + + + + +3 + + + + +4 + + + + +M3 + + +Stepper_Motor_bipolar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + + + +2 + + + +J3 + + +Barrel_Jack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +C1 + + + +C_Polarized + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM + + + + + + + +1 + + + + + + + ++ + + + + + + +2 + + + + + + +- + + + + + +3 + + + +M1 + + + +Motor_Servo + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND + + + + + + + +1 + + + + + + + +VDD + + + + + + + +2 + + + + +1B + + + + + +3 + + + + +1A + + + + + + +4 + + + + + +2A + + + + + +5 + + + + +2B + + + + +6 + + + + + + +GND + + + + + + + +7 + + + + + + +VMOT + + + + + + + + + +8 + + + + +~{ENABLE} + + + + + + + + + + + + +9 + + + + +MS1 + + + + + + +10 + + + + + + +MS2 + + + + + +11 + + + + + + + +MS3 + + + + + +12 + + + + + + +~{RESET} + + + + + + + + + + + + +13 + + + + + + +~{SLEEP} + + + + + + + + + + +14 + + + + + + + +STEP + + + + + + + + +15 + + + + + + +DIR + + + + + + +16 + + + + + +A1 + + + + +Pololu_Breakout_A4988 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND + + + + + + + +1 + + + + + + + +VDD + + + + + + + +2 + + + + +1B + + + + + +3 + + + + +1A + + + + + + +4 + + + + + +2A + + + + + +5 + + + + +2B + + + + +6 + + + + + + +GND + + + + + + + +7 + + + + + + +VMOT + + + + + + + + + +8 + + + + +~{ENABLE} + + + + + + + + + + + + +9 + + + + +MS1 + + + + + + +10 + + + + + + +MS2 + + + + + +11 + + + + + + + +MS3 + + + + + +12 + + + + + + +~{RESET} + + + + + + + + + + + + +13 + + + + + + +~{SLEEP} + + + + + + + + + + +14 + + + + + + + +STEP + + + + + + + + +15 + + + + + + +DIR + + + + + + +16 + + + + + +A2 + + + +Pololu_Breakout_A4988 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VBAT + + + + + + + + +1 + + + + + + + +PC13 + + + + + + + + + +2 + + + + + + +PC14 + + + + + + + + + + +3 + + + + + + +PC15 + + + + + + + + + +4 + + + + + + + +PH0 + + + + + + + + + +5 + + + + + + +PH1 + + + + + + + + + + +6 + + + + + + +NRST + + + + + + + + + + +7 + + + + + + +PC0 + + + + + + + +8 + + + + + + +PC1 + + + + + + + + +9 + + + + + + +PC2 + + + + + + + +10 + + + + + + + + +PC3 + + + + + + + +11 + + + + + + + +VSSA + + + + + + + +12 + + + + + + +VDDA + + + + + + + +13 + + + + + + + + +PA0 + + + + + + + + +14 + + + + + + + + + +PA1 + + + + + + + + + +15 + + + + + + + + +PA2 + + + + + + + + +16 + + + + + + + + +PA3 + + + + + + + + +17 + + + + + + +VSS + + + + + +18 + + + + + + +VDD + + + + + +19 + + + + + + + + +PA4 + + + + + + + + + +20 + + + + + + + +PA5 + + + + + + + + +21 + + + + + + + + +PA6 + + + + + + + + +22 + + + + + + + +PA7 + + + + + + + + +23 + + + + + + + +PB0 + + + + + + + +24 + + + + + + + + +PB1 + + + + + + + + +25 + + + + + + + +PB2 + + + + + + + +26 + + + + + + + +PB10 + + + + + + + + + +27 + + + + + + + +VLXSMPS + + + + + + + + + + + + +28 + + + + + +VDDSMPS + + + + + + + + + +29 + + + + + +VSSSMPS + + + + + + + + + +30 + + + + + +VDD11 + + + + + + + + + +31 + + + + + + +VDD + + + + + +33 + + + + + + + +PB13 + + + + + + + + + +34 + + + + + + + + +PB14 + + + + + + + + + + +35 + + + + + + + +PB15 + + + + + + + + + +36 + + + + + + + +PC6 + + + + + + + +37 + + + + + + + +PC7 + + + + + + + +38 + + + + + + + +PC8 + + + + + + + +39 + + + + + + + +PC9 + + + + + + + +40 + + + + + + + + +PA8 + + + + + + + + +41 + + + + + + + + + +PA9 + + + + + + + + +42 + + + + + + + + +PA10 + + + + + + + + + + +43 + + + + + + + + +PA11 + + + + + + + + + + + +44 + + + + + + + + + +PA12 + + + + + + + + + + +45 + + + + + + + + +PA13 + + + + + + + + + + +46 + + + + + + +VDDUSB + + + + + + + + +48 + + + + + + + + +PA14 + + + + + + + + + + + +49 + + + + + + + + +PA15 + + + + + + + + + + +50 + + + + + + + +PC10 + + + + + + + + + +51 + + + + + + + + +PC11 + + + + + + + + + + +52 + + + + + + + +PC12 + + + + + + + + + +53 + + + + + + + +PD2 + + + + + + + +54 + + + + + + + + +PB3 + + + + + + + +55 + + + + + + + +PB4 + + + + + + + + +56 + + + + + + + +PB5 + + + + + + + +57 + + + + + + + +PB6 + + + + + + + +58 + + + + + + + +PB7 + + + + + + + +59 + + + + + + + +PH3 + + + + + + + + + +60 + + + + + + + +PB8 + + + + + + + +61 + + + + + + +VDD11 + + + + + + + + + +62 + + + + + +VDD + + + + + +64 + + + + + +U1 + + + +STM32U545RETxQ + + + + + + + + + + + + + + + + + + + + + + + +GND + + + + + +GND + + + + + +GND + + + + + ++12V + + + + + + + + ++3V3 + + + + + + + ++12 + + + + + + + +GND + + + + + ++3V3 + + + + + + + +GND + + + + + ++3V3 + + + + + + + +GND + + + + + +3V3 + + + + + +GND + + + + + ++3V3 + + + + + + + ++12V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A2 + + + +Pololu_Breakout_A4988 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND + + + + + + + +1 + + + + + + + +VDD + + + + + + + +2 + + + + +1B + + + + + +3 + + + + +1A + + + + + + +4 + + + + + +2A + + + + + +5 + + + + +2B + + + + +6 + + + + + + +GND + + + + + + + +7 + + + + + + +VMOT + + + + + + + + + +8 + + + + +~{ENABLE} + + + + + + + + + + + + +9 + + + + +MS1 + + + + + + +10 + + + + + + +MS2 + + + + + +11 + + + + + + + +MS3 + + + + + +12 + + + + + + +~{RESET} + + + + + + + + + + + + +13 + + + + + + +~{SLEEP} + + + + + + + + + + +14 + + + + + + + +STEP + + + + + + + + +15 + + + + + + +DIR + + + + + + +16 + + + + + +U1 + + + +STM32U545RETxQ + + + + + + + + + + + + + + + + + + + + + + + + + + +VBAT + + + + + + + + +1 + + + + + + + +PC13 + + + + + + + + + +2 + + + + + + +PC14 + + + + + + + + + + +3 + + + + + + +PC15 + + + + + + + + + +4 + + + + + + + +PH0 + + + + + + + + + +5 + + + + + + +PH1 + + + + + + + + + + +6 + + + + + + +NRST + + + + + + + + + + +7 + + + + + + +PC0 + + + + + + + +8 + + + + + + +PC1 + + + + + + + + +9 + + + + + + +PC2 + + + + + + + +10 + + + + + + + + +PC3 + + + + + + + +11 + + + + + + + +VSSA + + + + + + + +12 + + + + + + +VDDA + + + + + + + +13 + + + + + + + + +PA0 + + + + + + + + +14 + + + + + + + + + +PA1 + + + + + + + + + +15 + + + + + + + + +PA2 + + + + + + + + +16 + + + + + + + + +PA3 + + + + + + + + +17 + + + + + + +VSS + + + + + +18 + + + + + + +VDD + + + + + +19 + + + + + + + + +PA4 + + + + + + + + + +20 + + + + + + + +PA5 + + + + + + + + +21 + + + + + + + + +PA6 + + + + + + + + +22 + + + + + + + +PA7 + + + + + + + + +23 + + + + + + + +PB0 + + + + + + + +24 + + + + + + + + +PB1 + + + + + + + + +25 + + + + + + + +PB2 + + + + + + + +26 + + + + + + + +PB10 + + + + + + + + + +27 + + + + + + + +VLXSMPS + + + + + + + + + + + + +28 + + + + + +VDDSMPS + + + + + + + + + +29 + + + + + +VSSSMPS + + + + + + + + + +30 + + + + + +VDD11 + + + + + + + + + +31 + + + + + + +VDD + + + + + +33 + + + + + + + +PB13 + + + + + + + + + +34 + + + + + + + + +PB14 + + + + + + + + + + +35 + + + + + + + +PB15 + + + + + + + + + +36 + + + + + + + +PC6 + + + + + + + +37 + + + + + + + +PC7 + + + + + + + +38 + + + + + + + +PC8 + + + + + + + +39 + + + + + + + +PC9 + + + + + + + +40 + + + + + + + + +PA8 + + + + + + + + +41 + + + + + + + + + +PA9 + + + + + + + + +42 + + + + + + + + +PA10 + + + + + + + + + + +43 + + + + + + + + +PA11 + + + + + + + + + + + +44 + + + + + + + + + +PA12 + + + + + + + + + + +45 + + + + + + + + +PA13 + + + + + + + + + + +46 + + + + + + +VDDUSB + + + + + + + + +48 + + + + + + + + +PA14 + + + + + + + + + + + +49 + + + + + + + + +PA15 + + + + + + + + + + +50 + + + + + + + +PC10 + + + + + + + + + +51 + + + + + + + + +PC11 + + + + + + + + + + +52 + + + + + + + +PC12 + + + + + + + + + +53 + + + + + + + +PD2 + + + + + + + +54 + + + + + + + + +PB3 + + + + + + + +55 + + + + + + + +PB4 + + + + + + + + +56 + + + + + + + +PB5 + + + + + + + +57 + + + + + + + +PB6 + + + + + + + +58 + + + + + + + +PB7 + + + + + + + +59 + + + + + + + +PH3 + + + + + + + + + +60 + + + + + + + +PB8 + + + + + + + +61 + + + + + + +VDD11 + + + + + + + + + +62 + + + + + +VDD + + + + + +64 + + + + + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/index.md new file mode 100644 index 00000000000..6c0cdff709a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.birsan02/index.md @@ -0,0 +1,96 @@ +# Polargraph +A vertical drawing machine that uses a polar coordinate system to create pen-on-paper art + +:::info + +**Author**: Alexandru-Vlad Bîrsan \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-vldxndr + +::: + +## Description + +Polargraph - Vertical Plotter + +The Polargraph is a vertical DRP (Digital Reconstruction Plotter) that operates on a polar coordinate system. Unlike the traditional plotter or printer that works on a X Y axis the polargrah transforms polar coordinates into coordonates on the paper by using two motors fixed over the paper that hold wires that have variable lenghts so they can position the drawing tool where it needs to be. + + +## Motivation + +The idea came to me because I have previously studied architecture and have always wanted to have something that could draw using real writing utensils, because while a printer can draw exactly what you want using pin point accuracy it lacks the soul of a hand drawing. This project aims to have the accuracy of a printer while portraying a hand rendered drawing. + + +## Architecture + +![Diagram](./images/diagram.svg) +![Schematic](./images/schematic.svg) + + +## Log + +### Week 27 - 30 April + +Wrote initial documentation and made the first diagram while ordering the parts. Decided to use preexisting software for transforming drawings into lists of instructions. + +### Week 12 - 18 May + +Received all hardware components. Assembled the physical frame using a 60x80cm wooden board and mounted the two NEMA 17 stepper motors at 51.8cm apart. Wired the A4988 drivers directly to the STM32 Nucleo using dupont wires and a breadboard. Successfully tested basic stepper motor movement using Embassy async Rust firmware. + +### Week 19 - 25 May + +Implemented full polargraph kinematics (inverse kinematics using polar-to-cartesian conversion). Added G-Code parser over UART (USART1 at 115200 baud) using BufferedUart. Implemented line interpolation with 1mm segments for smooth curves. Added SG90 servo pen lift control (M3/M5 commands). Successfully tested drawing a square using a Python script to stream G-Code from a .ngc file. + +## Hardware + +The Polargraph is powered by an external 12V DC source to ensure constant torque for the stepper motors. For development purposes, the STM32 Nucleo is tethered via USB for real-time G-Code streaming and debugging. I also used a buck converter to give a steady current to the servo motor directly from the outlet converted to 3v3 because the connection on the stm 3v3 did not give suffiecient current. 3D printed a gondola that houses the servo motor(pen lifter) and the pen itself that is held up by the belts with +2 anchor points. Built a frame for the panel to stay upright and the electronic equipment to be held onto the back of it. + +### Schematics + +![Schematic](./images/schematic.svg) + + +### Bill of Materials + +| Device | Usage | Price | +| :--- | :--- | :--- | +| [STM32 Nucleo-U545](https://www.st.com/en/microcontrollers-microprocessors/stm32u545.html) | Main Controller (Brain of the project) | Owned | +| [NEMA 17 Stepper Motor (1.7A)](https://www.optimusdigital.ro/ro/motoare-pas-cu-pas/106-motor-pas-cu-pas-nema-17-40mm-17a.html) | Axis movement (2 pieces required) | [130 RON](https://www.optimusdigital.ro) | +| [A4988 Stepper Driver](https://sigmanortec.ro/) | Motor control (2 pieces required) | [20 RON](https://sigmanortec.ro) | +| [A4988 Expansion Board](https://sigmanortec.ro/) | Driver carrier with DIP microstepping and terminal block | [10 RON](https://sigmanortec.ro) | +| [SG90 Micro Servo](https://www.optimusdigital.ro/ro/servomotoare/9-servomotor-sg90.html) | Pen lift mechanism | [15 RON](https://www.optimusdigital.ro) | +| [12V 5A Power Supply](https://www.optimusdigital.ro/ro/surse-de-alimentare/123-sursa-de-alimentare-12v-5a.html) | External power for stepper motors | [55 RON](https://www.optimusdigital.ro) | +| [GT2 Pulleys & Belt Kit](https://www.optimusdigital.ro/ro/curele-si-fulii/145-fulie-gt2-20-dinti-5mm.html) | Mechanical transmission system | [40 RON](https://www.optimusdigital.ro) | +| [Breadboard MB-102](https://www.optimusdigital.ro/ro/prototipare/10-breadboard-830-puncte.html) | Prototyping and circuit connections | [15 RON](https://www.optimusdigital.ro) | +| [Jumper Wires M-M / F-M](https://www.optimusdigital.ro/ro/fire-conectori-si-socluri/894-set-fire-tata-tata-65-buc.html) | Connecting components to Nucleo | [15 RON](https://www.optimusdigital.ro) | +| [DC Jack Adapter](https://www.optimusdigital.ro/ro/fire-conectori-si-socluri/124-mufa-dc-mama-cu-terminal-block.html) | Connecting the 12V supply | [5 RON](https://www.optimusdigital.ro) | +| [Capacitor 100uF](https://www.optimusdigital.ro/ro/componente-pasive/220-condensator-electrolitic-100uf-35v.html) | Power spike protection for drivers | [5 RON](https://www.optimusdigital.ro) | + + + +## Software + +| Library | Description | Usage | +| :--- | :--- | :--- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | GPIO for motor control, BufferedUart for G-Code streaming, PWM for servo | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded | Entry point and task runner | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers | Precise delays for step pulses | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework | Debug logging via RTT | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler | Sends panic info through probe-rs | +| [libm](https://github.com/rust-lang/libm) | Math library for no_std | sqrtf and ceilf for inverse kinematics | +| [embedded-io-async](https://github.com/rust-embedded/embedded-hal) | Async IO traits | Read/Write on BufferedUart | + +#### Host Software & Toolchain + +To transform digital images into physical drawings, the project uses a multi-step toolchain: + +1. **G-Code Generation**: Inkscape with G-Code extensions convert images (JPG/PNG) into paths using algorithms to give out the .ngc file that is required the polargraph to know where it should go. +2. **G-Code Streaming**: A Python script streams the generated `.ngc` file over USB serial (USART1 at 115200 baud) to the STM32, waiting for `ok\r\n` acknowledgement after each command before sending the next. + +## Links + +1. [Inkscape](https://inkscape.org/) - Vector graphics editor used for G-Code generation. +2. [Inkscape G-Code Extension](https://github.com/martymcguire/inkscape-unicorn) - Extension for exporting paths as G-Code (.ngc) files. +3. [Polargraph Physics](https://github.com/euphy/polargraph/wiki/Polargraph-physics) - Detailed explanation of the inverse kinematics involved. +4. [A4988 Datasheet](https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf) - Technical specifications for the motor drivers. +5. [Example](https://www.youtube.com/watch?v=aiw3hkDvp-M) - Working example \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/index.md b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/index.md index fc9f19f6d78..f8d77683187 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/index.md @@ -32,18 +32,24 @@ Researched and ordered hardware components from Sigmanortec. ### Week 5 - 11 May +Tested hardware components, soldered MPU pins and built the hardware. + ### Week 12 - 18 May +Developed the software and tested it. Some tweaks are needed. + ### Week 19 - 25 May ## Hardware The system is based on an STM32 NUCLEO development board, complemented by multiple input and output peripherals. It includes visual outputs (OLED display and LED), an audio output (buzzer), and mechanical output (servo motor). User interaction is handled through a push button, a rotary encoder, analog sensors (potentiometer and photoresistor), and an IMU sensor for gesture detection. Data storage is implemented using an SD card module and non-volatile memory (EEPROM) for saving user profiles and leaderboards. +![Inside](inside.webp) +![Outside](outside.webp) + ### Schematics -Work in progress.. \ -Place your KiCAD or similar schematics here in SVG format. +![Schematic](reaction-trainer.svg) ### Bill of Materials @@ -78,12 +84,23 @@ The format is ## Software -Work in progress.. - | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Async HAL for STM32 (GPIO, I²C, ADC, PWM, EXTI) | Board init, peripherals, and drivers for the STM32U545 | +| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Async/await executor for embedded | Runs `main`, encoder/button tasks, and the application loop | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Timers and delays | Round timing, debounce, random wait, and frame pacing | +| [embassy-sync](https://github.com/embassy-rs/embassy/tree/main/embassy-sync) | Sync primitives for Embassy | Mutex around the shared I²C bus | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy/tree/main/embassy-embedded-hal) | Adapters between Embassy and `embedded-hal` | `I2cDevice` for OLED, EEPROM, and MPU on one bus | +| [ssd1306](https://github.com/rust-embedded-community/ssd1306) | Display driver for SSD1306 OLED | 128×64 OLED over I²C | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Menus, game UI, text, and the false-start mark | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | I²C trait used by EEPROM and MPU drivers | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient embedded logging | Debug logs (rounds, false starts, sensor values) | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Sends log output to the debug probe | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Cortex-M support crate | Low-level CPU access (e.g. `nop` during ADC sampling) | +| [cortex-m-rt](https://github.com/rust-embedded/cortex-m-rt) | Runtime for Cortex-M | Reset vector and runtime startup | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler | Prints panics over defmt on the probe | +| [heapless](https://github.com/rust-embedded/heapless) | Collections without heap allocation | Fixed-size `Vec` and `String` for profiles and UI | +| [static_cell](https://github.com/embassy-rs/static-cell) | `'static` initialization helper | Stores the shared I²C bus for the firmware lifetime | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/inside.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/inside.webp new file mode 100644 index 00000000000..d45d02d539f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/inside.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/outside.webp b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/outside.webp new file mode 100644 index 00000000000..772c37e50dd Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/outside.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/reaction-trainer.svg b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/reaction-trainer.svg new file mode 100644 index 00000000000..869f663b8d3 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/alexandru.dima1409/reaction-trainer.svg @@ -0,0 +1 @@ +SVG Image created as reaction-trainer.svg date 2026-05-11T21:44:59 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: reaction-trainer.kicad_schSheet: /+5V(MB102)GNDGNDCLKIN1AUX_DA6AUX_CL7~{CS}8AD0/MISO9REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL/SCLK23SDA/MOSI24U3MPU-6000GND12BZ1BuzzerSCL1GND2SDA3VCC4WP5U2AT24C256GNDGND+3V3+3V3+3V3123456J1Modul card microSDPWM1+2-3M1Motor_ServoGNDGND+3V3R110k+3V3SW1ButonGNDR4LDRVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQR510kGND+3V3123RV1R_PotentiometerGNDGNDGND+3V3H2MountingHoleH3MountingHoleD1LED12345678J2Modul OLED + EC11R3RH1MountingHoleR2330+3V3I2C_SDAI2C_SCLMechanical+3V3+3V3GNDGNDU3MPU-6000CLKIN1AUX_DA6AUX_CL7~{CS}8AD0/MISO9REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL/SCLK23SDA/MOSI24U2AT24C256SCL1GND2SDA3VCC4WP5+3V3R110kSW1ButonGNDR510k+3V3GNDBZ1Buzzer12R3R \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/architecture.webp new file mode 100644 index 00000000000..b8dac1ffb74 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.drawio.svg deleted file mode 100644 index a0feb9a83c5..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.drawio.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
Microcontroller
(STM32U545RE-Q)
Microcontroller...
Audio Alert System
(Passive Buzzer
Audio Alert System...
Motor Driver
(L298N)
Motor Driver...
2x DC Motors
2x DC Motors
Power
(Batteries)
Power...
Obstacle Detection
(Front)
Obstacle Detection...
User Detection
(Rear)
User Detection...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.webp new file mode 100644 index 00000000000..ccf5917f593 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/diagramapm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/front.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/front.webp new file mode 100644 index 00000000000..28a90915a08 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/front.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/project architecture resized.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/project architecture resized.webp deleted file mode 100644 index 95f62f55949..00000000000 Binary files a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/project architecture resized.webp and /dev/null differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/rear.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/rear.webp new file mode 100644 index 00000000000..a674a70a9bf Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/rear.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/side.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/side.webp new file mode 100644 index 00000000000..abc99459f4d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/side.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/top.webp b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/top.webp new file mode 100644 index 00000000000..a8286ce4a97 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/images/top.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/index.md b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/index.md index b2ea01c8361..699e0c2f842 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/alin.abahnencei/index.md @@ -41,21 +41,38 @@ Main Architectural Components: 5. Power Network: - Role: Power the circuit accordingly to each component's needs. - Logic: 1x external battery power the STM32 board and 4x AA batteries power the motors. - -![Architecture Diagram](./images/diagramapm.drawio.svg) +6. Remote Control System (Input): + - Role: Allows the user to stop the alarm remotely. + - Components: Infrared Receiver and Remote Control. + - Logic: The receiver is connected to the board and listens for signals from the remote to trigger the alarm stop function. +7. Visual Indicator System (Output): + - Role: Provides a visual countdown before the alarm goes off. + - Components: 3x LEDs. + - Logic: The LEDs light up in sequence to indicate the time left until the alarm is triggered. + +![Architecture Diagram](./images/diagramapm.webp) +![Front View](./images/front.webp) +![Rear View](./images/rear.webp) +![Top View](./images/top.webp) +![Side View](./images/side.webp) ## Log ### Week 13 - 19 April - Bought the hardware necessary for the project. - - Defined the power managemt system. + - Defined the power management system. ### Week 20 - 26 April - Worked on the documentation, defining the architecture for the main features of the project. - +### Week 27 April - 3 May + - Started working on the hardware, setting up the breadboard and testing the sensors and motors separately. +### Week 4 - 10 May + - Finished the hardware setup and started working on the software, implementing the basic logic for the alarm and the motor control. ### Week 12 - 18 May - + - Met the hardware deadline and presented the project during the lab session. + - Started working on the software, implementing the logic for the user and obstacle detection and the escape system. ### Week 19 - 25 May +- Finished the software implementation and validated the project at the lab session. ## Hardware @@ -68,7 +85,7 @@ Main Architectural Components: ### Schematics -![Schematic](./images/project%20architecture%20resized.webp) +![Schematic](./images/architecture.webp) ### Bill of Materials @@ -86,18 +103,28 @@ The format is |--------|--------|-------| | [STM32 Nucleo U545RE-Q] | The microcontroller | [110 RON](https://eu.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf0GICp7OV9wICGSd4JiEPUkg&gclid=CjwKCAjwzLHPBhBTEiwABaLsSpfYEy1LvXzJXlwQr9pTOutAzfZ2l9gvivkogoet7YjGyN21xj5GexoCsvcQAvD_BwE) | | [Chassis Kit] | The base for the robot | [48.40 RON](https://sigmanortec.ro/Kit-Sasiu-Smart-Car-2WD-p141489122) | -| [HC-SR04 Ultrasonic Sensor] | Used for user and obstacle detection | [16.26 RON](https://sigmanortec.ro/Kit-Sasiu-Smart-Car-2WD-p141489122) | +| [HC-SR04 Ultrasonic Sensor] x2 | Used for user and obstacle detection | [16.26 RON](https://sigmanortec.ro/Senzor-ultrasunete-HC-SR04-p125423514) | | [L298N Motor Driver] | Used to control the motors | [10.84 RON](https://sigmanortec.ro/Punte-H-Dubla-L298N-p125423236) | | [Passive Buzzer] | Used for the alarm sound | [1.45 RON](https://sigmanortec.ro/Buzzer-pasiv-5v-p172425809) | - +| [LEDs] x3 | Used before the alarm starts to indicate the time left until the alarm goes off | [0.30 RON](https://sigmanortec.ro/led-5mm-rosu) | +| [Resistors 220Ω] x3 | Used to limit the current to the LEDs | [0.10 RON](https://www.optimusdigital.ro/en/resistors/10958-05w-220-resistor.html?search_query=resistor+220&results=28) | +| [Resistors 2k2Ω] x2 | Used for the voltage divider | [0.10 RON](https://www.optimusdigital.ro/en/resistors/851-025w-22k-resistor.html?search_query=resistor+2k&results=221) | +| [Resistors 5k2Ω] x2 | Used for the voltage divider | [0.10 RON](https://www.optimusdigital.ro/en/resistors/849-025w-47k-resistor.html?search_query=resistor+5k&results=221) | +| [Infrared Receiver] | Used to stop the alarm remotely | [4.84 RON](https://sigmanortec.ro/Receptor-Infrarosu-KY-022-p136259491) | +| [Infrared Remote Control] | Used to stop the alarm remotely | [3.60 RON](https://www.optimusdigital.ro/en/others/11-mini-infrared-remote.html?search_query=infrared&results=109) | ## Software | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 microcontrollers | Provides hardware abstraction for peripherals like GPIO and EXTI | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded | Manages and schedules concurrent async tasks (sensor, IR, LEDs, buzzer) | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time and delay primitives | Handles precise timing requirements (ultrasonic echoes, IR decoding, motor delays) | +| [defmt](https://github.com/knurling-rs/defmt) | Deferred formatting framework | Highly efficient console logging, debugging, and printing | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Transmits log messages to the host over Real-Time Transfer (RTT) | +| [panic-probe](https://github.com/knurling-rs/panic-probe) | Panic handler for defmt | Catches panics and prints backtraces safely over the RTT channel | +| [cortex-m / cortex-m-rt](https://github.com/rust-embedded/cortex-m) | ARM Cortex-M core crates | Low-level processor setup, core peripherals, and startup code | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/index.md b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/index.md new file mode 100644 index 00000000000..67ce1537e0d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/index.md @@ -0,0 +1,133 @@ +# Electronic Chess Board with Autonomous Play and Legal Move Display + +An electronic chess board that autonomously moves pieces using an XY electromagnetic system, displays legal moves with LCD. + + + +:::info + +**Author:** Onea Amalia-Mihaela \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-AmaliaOnea + +::: + +## Description + +This project is an autonomous chess board powered by an STM32 Nucleo-U545RE-Q microcontroller. The board uses a system of two stepper motors to move an electromagnet along the X and Y axes beneath the board, allowing it to physically move chess pieces (which contain small magnets) without human intervention. An LCD display shows the current piece being moved and its legal moves. + +The board implements a chess engine in Rust that computes valid moves and executes them automatically, moving pieces physically on the board. + +## Motivation + +I chose this project because it combines multiple engineering disciplines: mechanical design, electronics, and software. A self-playing chess board is a fascinating challenge that requires precise motor control and complex game logic — all implemented in Rust on an embedded system. It is a project that is both technically challenging and visually impressive, making it a perfect showcase for the knowledge gained throughout the semester. + +## Architecture + +### System Architecture + +The system is composed of the following main modules: + +- **STM32 Nucleo-U545RE-Q**: The main microcontroller that runs the chess engine, controls the motors, reads the Hall sensors, and drives the LEDs and LCD. +- **XY Motion System**: Two stepper motors (one for each axis) move a carriage beneath the board. An electromagnet mounted on the carriage attracts and moves the magnetic chess pieces. +-**LCD Display**: A 16x2 I2C LCD displays the current piece being moved and its legal moves. +- **Power Supply**: A 12V external power supply powers the stepper motors and electromagnet. A voltage regulator steps down to 5V for the logic components. + +### Block Diagram +![SchemaBloc](schemabloc.webp) + + +## Hardware + +### 1. STM32 Nucleo-U545RE-Q +- **Role**: Main microcontroller +- **Specs**: ARM Cortex-M33, 160MHz, 256KB SRAM, 2MB Flash +- **Used for**: Running the chess engine, controlling all peripherals via GPIO, I2C, and PWM + +### 2. Stepper Motors (x2) — NEMA 17 +- **Role**: Move the electromagnet carriage along X and Y axes +- **Specs**: 1.8° step angle, 12V +- **Connection**: Controlled via A4988 driver modules + +### 3. A4988 Stepper Motor Drivers (x2) +- **Role**: Drive the stepper motors from STM32 GPIO signals +- **Interface**: STEP and DIR pins connected to STM32 GPIO + +### 4. Electromagnet 12V (x1) +- **Role**: Attract and move magnetic chess pieces beneath the board +- **Control**: Switched on/off via MOSFET IRF540N + +### 5. MOSFET IRF540N (x1) +- **Role**: Control the electromagnet (the STM32 cannot supply enough current directly) +- **Connection**: Gate connected to STM32 GPIO, drain to electromagnet, source to GND + +### 6. Diode 1N4007 (x1) +- **Role**: Flyback protection for the electromagnet +- **Connection**: In parallel with the electromagnet, reverse biased + +### 7. LCD I2C 1602 (x1) +- **Role**: Display the chess timer for both players +- **Interface**: I2C (SDA, SCL) + +### 8. Power Supply 12V (x1) +- **Role**: Power the stepper motors and electromagnet + +### 9. Capacitors 100µF (x1) +- **Role**: Stabilize voltage on the power supply lines + +### 10. Breadboard + Jumper Wires +- **Role**: Prototyping and connections + +## Schematics + +![Schematic](schematiculmeu.webp) + + +## Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller | provided by lab | +| NEMA 17 Stepper Motor x2 | Move electromagnet on X and Y axes | ~200 RON | +| A4988 Stepper Driver x2 | Drive stepper motors | ~16 RON | +| Electromagnet 12V | Move chess pieces | ~50 RON | +| MOSFET IRF540N | Control electromagnet | ~5 RON | +| Diode 1N4007 | Flyback protection | ~1 RON | +| LCD I2C 1602 | Chess timer display | ~15 RON | +| Power Supply 12V | Power motors and electromagnet | ~30 RON | +| Voltage Regulator LM7805 | Step down 12V to 5V | ~3 RON | +| Capacitors 100µF x2 | Voltage stabilization | ~2 RON | +| Breadboard + Jumper Wires | Prototyping | ~25 RON | +| **Total** | | **~347 RON** | + +## LOG +### Week 28 April - 2 May +- Components started arriving + +### Week 5 May - 11 May +- All components arrived +- Connected and tested the LCD I2C display — successfully displayed text +- Connected and tested the electromagnet with MOSFET IRF540N +- Started assembling the XY motion system + +### Week 12 May - 18 May +- Connected and tested the two NEMA17 stepper motors with A4988 drivers +- Built the XY motion system using T6 threaded rods +- Purchased plexiglass for the chess board surface +- Purchased Neodymium magnets for the chess pieces +- Assembled the chess board structure + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| embassy-rs | Async runtime for embedded Rust | Task management, timers, GPIO control | +| embassy-stm32 | Embassy HAL for STM32 | GPIO, I2C, PWM control for motors and LCD | +| embassy-time | Timer abstractions | Delays and timing for motor steps | + +## Links + +1. [embassy-rs](https://github.com/embassy-rs/embassy) +2. [STM32 Nucleo-U545RE-Q Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) +3. [PM Lab 02 - GPIO](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/lab/02) +4. [PM Lab 03 - PWM](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/lab/03) +5. [A4988 Stepper Driver Datasheet](https://www.pololu.com/product/1182) diff --git a/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schemabloc.webp b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schemabloc.webp new file mode 100644 index 00000000000..63bd789fa5e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schemabloc.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schematiculmeu.webp b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schematiculmeu.webp new file mode 100644 index 00000000000..d235145dad6 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/amalia_mihaela.onea/schematiculmeu.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/profile.webp b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/profile.webp new file mode 100644 index 00000000000..b4bb7da76da Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/profile.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/schematic.webp new file mode 100644 index 00000000000..222ec1dbb44 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/top.webp b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/top.webp new file mode 100644 index 00000000000..071eb36401c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/images/top.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/index.md b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/index.md index 0ff2e78e559..a2fbafed2bc 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/amir.fallah/index.md @@ -24,15 +24,38 @@ This is a project I had on my radar for a long time. Having no experience with C ## Log ### Week 20 - 24 April + Made initial documentation and ordered hardware parts. +### Week 4 - 8 May + +Parts started to arrive. I tested each part individually with some of them not working. I was forced to order three identical components to be sure one of them worked. Along side the hardware test I build for each component a small sanity check program to test the functionality. + +### Week 11 - 15 May + +Motors arrived. Started work on the main body of the robot. It was made from acrylic and M4 screws. It was very sturdy and can tolerate the occasional falls from testing. + +### Week 18 - 22 May + +Motors provided not enough torque, so I was forced to order stronger motors. After this episode the motors started to balance the platforms. + ## Hardware I am running the robot in a theadered format, for the ease of development, to concentrate my attention on building it, not on changing the battery every 40 minutes. +![Profile View](./images/profile.webp) + +![Top View](./images/top.webp) + +These are some images with the robot. In the end with the new motors it was 1.1kg in weight and 12cm in height from the bottom of the wheels. The testing was done with a 12V 6A transformer so I could test all day long. + +Demo + ### Schematics -TBD +![Schematic](./images/schematic.webp) + +The schematic does not include the power bus, just the data and commands wires. ### Bill of Materials @@ -42,8 +65,9 @@ TBD | [MPU6050](https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/RM-MPU-6000A.pdf) | IMU (Gyroscope + Accelerometer) | [16 RON](https://www.emag.ro/modul-accelerometru-si-giroscop-mpu6050-ai382-s321/pd/DB606JBBM/) | [HM-10](https://components101.com/sites/default/files/component_datasheet/HM10%20Bluetooth%20Module%20Datasheet.pdf) | Bluetooth Module | [27 RON](https://www.emag.ro/modul-bluetooth-4-0-ble-at-09-hm-10-msalamon-conectivitate-rapida-mic-si-eficient-ideal-pentru-proiecte-iot-economiseste-energie-fiabil-usor-de-montat-functioneaza-in-diverse-conditii-calitate-inalta-/pd/DHKDDVYBM/) | | [LM2596](https://www.ti.com/lit/ds/symlink/lm2596.pdf) | Buck Converter 12V - 5V | [10 RON](https://www.emag.ro/modul-dc-dc-step-down-lm2596-765464701237/pd/DWHHRGBBM/) | -| [TB6612FNG](https://cdn.sparkfun.com/datasheets/Robotics/TB6612FNG.pdf) | Dual Motor Driver | [26 RON](https://www.emag.ro/driver-motor-tb6612fng-punte-h-dubla-control-pwm-1-2a-bmx474/pd/DSMDW83BM/) | -| [JGA25-371](https://people.ece.ubc.ca/~eng-services/files/courses/elec391-data_sheets/MOT4-info.pdf) | Encoder Disk Gear Motor 12v | [2 x 31 RON](https://www.aliexpress.com/item/1005007889281285.html) | +| [DRV8825](https://www.ti.com/lit/ds/symlink/drv8825.pdf) | Stepper Motor Driver | [2 x 12 RON](https://sigmanortec.ro/Driver-Stepper-DRV8825-p125423334) | +| [NEMA17](https://components101.com/motors/nema17-stepper-motor) | Stepper Motor | [2 x 100 RON](https://sigmanortec.ro/motor-pas-cu-pas-nema17-18-grade-42x42x48mm) | +| [Bracket](https://sigmanortec.ro/Suport-motor-Nema17-p135681865) | Nema17 mounting bracket | [2 x 64 RON](https://www.emag.ro/suport-prindere-motor-nema17-set-1-suport-4-suruburi-4-piulite-kqrexd-nema17-mounting-bracket/pd/D5DMPD2BM/) | ## Software @@ -51,7 +75,11 @@ TBD | Library | Description | Usage | |---------|-------------|-------| | [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Interface | Base library for project. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | For Motor Driver Tasks | +| [defmt](https://github.com/knurling-rs/defmt) | Deferred formatting logger | Logging for the tuning of the PID | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Displaying panic messages | ## Links 1. https://www.youtube.com/watch?v=IYOxj6VyC8s&pp=ygUXaW52ZXJ0ZWQgcGVuZHVsdW0gcm9ib3Q%3D +2. https://projecthub.arduino.cc/zjor/self-balancing-robot-with-arduino-nano-and-steppers-47e00e diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/architecture.svg new file mode 100644 index 00000000000..931bf553c51 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/architecture.svg @@ -0,0 +1,4 @@ + + + +
PVC tube + 6mm orifice
MPXV7002DP
differential pressure
STM32 + ADC + firmware
DS3231
RTC - I2C
Screen
Waveform + menu
MicroSD
CSV log via SPI
Bluetooth 4.0
Data - Phone - USART
RGB LED
Green / Yellow / Red 
Androdid phone
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/index.md b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/index.md new file mode 100644 index 00000000000..56b93eddcc3 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/index.md @@ -0,0 +1,113 @@ +# Portable Peak Flow Meter with Asthma Journal +A portable medical device that measures lung function and tracks asthma evolution over time. + +:::info + +**Author**: Mardaloescu Ana \ +**GitHub Project Link**: [UPB-PMRust-Students/acs-project-2026-anamardaloescu2802](https://github.com/UPB-PMRust-Students/acs-project-2026-anamardaloescu2802) + +::: + + + +## Description + +A handheld peak flow meter built around the STM32U545 microcontroller that measures PEF (Peak Expiratory Flow) and FEV1 by analyzing differential pressure generated when the user exhales forcefully into a calibrated tube. Results are displayed in real time as a waveform graph on a 2.4" touchscreen TFT display, compared against the user's personal best and color-coded via an RGB LED, timestamped using a DS3231 real-time clock module, logged to a microSD card, and transmitted via Bluetooth to a mobile device for long-term trend visualization. + +## Motivation + +What motivated me specifically to chose this project was the gap between what exists and what patients actually need. Clinical spirometers are accurate but expensive and confined to hospitals. Cheap plastic peak flow meters give a single number with no history and no connectivity. I wanted to design something in between: a portable device that logs every measurement with an accurate timestamp, visualizes trends over time, and lets the patient share real data with their doctor at the next appointment instead of trying to describe how they have been feeling from memory. + +## Architecture + +- **Pressure sensor** (**MPXV7002DP**) measures the pressure difference generated when the user exhales through a **PVC tube** with a **calibrated 6mm orifice**. The output voltage is stepped down from **5V to 3.3V** via a **resistive voltage divider** before reaching the microcontroller. + +- **STM32U545** samples the sensor at **~1kHz**, applies **Bernoulli's equation** to convert pressure into airflow **(L/min)**, detects the **PEF peak**, and computes **FEV1** by numerically integrating the **first second** of the flow curve. + +- **TFT touchscreen** displays the **exhalation waveform** in real time and shows the final **PEF** and **FEV1** values at the end of each measurement. It also handles all **user input**, replacing physical buttons entirely. + +- **RGB LED** provides an immediate **visual zone indicator** — **green**, **yellow**, or **red** — based on how the current **PEF** compares to the user's stored **personal best**. + +- **MicroSD card** logs every measurement as a **timestamped CSV entry**, with accurate date and time provided by the **DS3231** real-time clock module. + +- **Bluetooth module** transmits measurement data wirelessly to an **Android device** for **long-term trend visualization**. + +![Architecture diagram](architecture.svg) + +## Log + + + +### Week 5 - 11 May +Defined the concept of a portable respiratory monitoring device (peak flow meter). +Chosen STM32 as the main microcontroller. +Outlined system architecture and main hardware components. + +### Week 12 - 18 May +Selected main hardware components: pressure sensor, TFT display, RTC, microSD, Bluetooth module. +Designed initial schematic and defined communication interfaces (SPI, I2C, UART, ADC). +Completed STM32 pin mapping. +Finalized system architecture and data flow (sensing, processing, display, logging, communication). +Prepared system for firmware implementation and hardware testing. + +### Week 19 - 25 May + +## Hardware + +- The heart of the device is the STM32U545 microcontroller, which handles all ADC sampling, signal processing, display rendering, and peripheral communication. +- The MPXV7002DP differential pressure sensor is the most critical component — it measures the pressure drop across a 6mm calibrated orifice in the exhalation tube and converts it into a voltage that the STM32 reads through a resistive voltage divider, since the sensor outputs up to 5V while the STM32 ADC accepts a maximum of 3.3V. +- The 2.4 inch TFT shield combines the ILI9341 display and an XPT2046 resistive touchscreen controller on a single board, handling both waveform visualization and all user input without the need for physical buttons. +- The microSD module connects over the same SPI bus as the display using a dedicated chip select line and stores every measurement as a CSV file. +- The DS3231 real-time clock module communicates over I2C and ensures every log entry carries an accurate date and time even after the device is powered off and back on. +- The Bluetooth module handles wireless data transfer to an Android phone over a USART serial link. +- The RGB LED is driven directly from three GPIO pins through current-limiting resistors and lights up green, yellow, or red depending on how the current measurement compares to the stored personal best. + +### Schematics + +![Full system schematic](schematic.svg) + + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| STM32U545 Development Board | Main microcontroller | - | +| [MPXV7002DP Pressure Sensor Module](https://www.optimusdigital.ro/ro/senzori-senzori-de-presiune/1163-modul-senzor-de-presiune-mpxv7002dp.html) | Differential pressure measurement | 279.00 RON | +| [DS3231 Real Time Clock Module](https://www.optimusdigital.ro/ro/altele/12432-modul-cu-ceas-in-timp-real-ds3231-fara-baterie.html) | Accurate timestamping for CSV log | 15.98 RON | +| [Assorted LED Kit 310pcs + Resistors](https://www.optimusdigital.ro/ro/kituri-optimus-digital/9517-set-de-led-uri-asortate-de-5-mm-si-3-mm-310-buc-cu-rezistoare-bonus.html) | RGB LED indicator + current limiting resistors + voltage divider resistors | 26.99 RON | +| [Bluetooth 4.0 Module with Adapter](https://www.optimusdigital.ro/ro/wireless-bluetooth/635-modul-cu-bluetooth-40-si-adaptor-compatibil-33v-si-5v.html) | Wireless data transmission to Android phone | 29.99 RON | +| [4x Breadboard Combo SYB-500](https://www.optimusdigital.ro/ro/kituri/12463-set-4-breadboard-uri-combo-syb-500.html) | Prototyping | 49.99 RON | +| [2.4" TFT Touchscreen Shield](https://www.optimusdigital.ro/ro/lcd-uri/3544-shield-cu-display-tft-cu-touchscreen-de-24.html) | Real-time waveform display and touch menu navigation | 65.44 RON | +| [MicroSD Card Slot Module](https://www.optimusdigital.ro/ro/memorii/1516-modul-slot-card-compatibil-cu-microsd.html) | CSV measurement logging | 4.39 RON | +| [Jumper Wires M-M 20cm (x10)](https://www.optimusdigital.ro/ro/fire-fire-cu-mufe/880-set-10-fire-colorate-separate-tata-tata-de-20-cm.html) | Breadboard connections | 5.95 RON | +| [Jumper Wires F-M 20cm (x10)](https://www.optimusdigital.ro/ro/fire-fire-cu-mufe/879-fire-colorate-mama-tata-10p-20-cm.html) | Breadboard connections | 15.96 RON | +| [Jumper Wires F-F 20cm (x10)](https://www.optimusdigital.ro/ro/fire-fire-cu-mufe/881-set-10-fire-colorate-separate-mama-mama-de-20-cm.html) | Breadboard connections | 9.90 RON | +| [100nF Capacitors](https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/27-capacitor-100nf50-pcs-set.html) | Sensor power supply decoupling | ~5 RON | +| PVC tube 20mm + silicone tubing | Exhalation channel and sensor port connection | ~10 RON | + +**Total: 519 RON** + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | + +## Links + + + +1. [MPXV7002DP Datasheet - NXP](https://www.nxp.com/docs/en/data-sheet/MPXV7002.pdf) +2. [How a peak flow meter works - Asthma UK](https://www.asthma.org.uk/advice/manage-your-asthma/peak-flow/) +3. [Bernoulli equation for flow measurement](https://www.engineeringtoolbox.com/bernoulli-equation-d_183.html) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/schematic.svg new file mode 100644 index 00000000000..48c2600eae9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ana.mardaloescu2802/schematic.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:Peak Flow MeterREV:1.0Date:2026-05-13Sheet:1/1Drawn By:ana.mardaloescuCompany:Mardaloescu Ana 332CCNUCLEO-F401RE_CN5-10U1IOREFCN6_2RESETCN6_3+3V3CN6_4+5VCN6_5GNDCN6_6VINCN6_8GNDCN6_7PC9CN10_1NCCN10_38PB8CN10_3NCCN10_36PB9CN10_5PC4CN10_34AVDDCN10_7AGNDCN10_32GND_S2CN10_9PB13CN10_30PA5CN10_11PB14CN10_28PA6CN10_13PB15CN10_26PA7CN10_15PB1CN10_24PB6CN10_17PB2CN10_22PC7CN10_19GND_S2CN10_20PA9CN10_21NCCN10_18PA8CN10_23PB12CN10_16PB10CN10_25PA11CN10_14PB4CN10_27PA12CN10_12PB5CN10_29NCCN10_10PB3CN10_31U5VCN10_8PA10CN10_33PC5CN10_6PA2CN10_35PC6CN10_4PA3CN10_37PC8CN10_2D0CN9_1D1CN9_2D2CN9_3D3CN9_4D4CN9_5D5CN9_6D6CN9_7D7CN9_8A0CN8_1A1CN8_2A2CN8_3A3CN8_4A4CN8_5A5CN8_6D8CN5_1D9CN5_2D10CN5_3D11CN5_4D12CN5_5D13CN5_6GND_S6CN5_7AREFCN5_8D14CN5_9D15CN5_10PC10CN7_1PC0/PB8CN7_38PC12CN7_3PC1/PB9CN7_36VDDCN7_5PB0CN7_34BOOT0CN7_7PA4CN7_32NCCN7_9PA1CN7_30NCCN7_11PA0CN7_28PA13CN7_13NCCN7_26PA14CN7_15VIN_S1CN7_24PA15CN7_17GND_S1CN7_22GND_S1CN7_19GND_S1CN7_20PB7CN7_21+5V_S1CN7_18PC13CN7_23+3V3_S1CN7_16PC14CN7_25RESET_S1CN7_14PC15CN7_27IOREF_S1CN7_12PH0CN7_29NCCN7_10PH1CN7_31GNDCN7_8VBATCN7_33E5VCN7_6PC2CN7_35PD2CN7_4PC3CN7_37PC11CN7_2MPXV7002DP_PegAzulsU2MPXV7002DPANLG3VCC2GND1LCD 2.4 240*320 TFT ST7789VU3GND1RST2SCL3D/C4CS5SDA6SDO7VCC8LEDA9LEDK10REDD1A1K2YELLOWD2A1K2GREEND3A1K2DS3231U4GND1VCC2SDA3SCL4SQW532K6DS3231HC-051STATE1RX2TX3GND4+5V5EN6220kR12211220KR22211220kR32211VCCGNDGNDGNDVCCVCCAdafruit SPI Micro SD ReaderSD1CD1CS2MOSI3MISO4CLK5GND63V375V8SDGNDVCCGNDGNDGNDGND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/images/schematic.webp new file mode 100644 index 00000000000..828237af579 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/index.md b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/index.md new file mode 100644 index 00000000000..413bb3351cd --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.lupu1304/index.md @@ -0,0 +1,150 @@ +# Self-Balancing Cube + +A self-balancing cube controlled by an STM32 microcontroller, using IMU feedback and internal reaction wheels to balance on an edge or corner. + +:::info + +**Author**: Ana-Maria-Raluca Lupu \ +**GitHub Project Link**: [acs-project-2026-lupuana](https://github.com/UPB-PMRust-Students/acs-project-2026-lupuana) + +::: + + + +## Description + +This project implements a self-balancing cube based on reaction-wheel control. The system reads motion and orientation data from an IMU sensor, estimates the cube state, and computes corrective motor commands in real time. Three internal motors spin reaction wheels to generate stabilizing torques, allowing the cube to recover balance and remain upright on an edge or corner. + +## Motivation + +I chose this project because it combines embedded programming, control systems, electronics, mechanical design, and real-time testing in a single system. It is a good practical challenge because it requires both hardware integration and software development, especially sensor processing, feedback control, and actuator coordination on an STM32 platform. + +## Architecture + +The main architecture components of the project are: + +- **Sensing layer** + Reads acceleration and angular velocity data from the MPU6050 IMU and, in the final system, wheel-speed feedback from the motor encoder signals. + +- **State estimation layer** + Processes raw sensor data and computes the current orientation and angular motion of the cube. + +- **Control layer** + Runs the balancing algorithm and computes correction commands for each reaction-wheel axis. + +- **Actuation layer** + Sends PWM and direction control signals to the three Nidec reaction-wheel motors. + +- **Communication and tuning layer** + Supports calibration and parameter adjustment, initially through USB/debug output during development and later through a Bluetooth serial connection using the HC-05 module. + +### Architecture Diagram + +```mermaid +flowchart LR + subgraph SENS["Sensing Layer"] + IMU["MPU6050 IMU"] + ENC["Motor Feedback / Encoders"] + end + + subgraph PROC["Processing and Control"] + STM["STM32 Microcontroller"] + STATE["State Estimation"] + CTRL["Control Algorithm"] + CAL["Calibration and Parameter Tuning"] + end + + subgraph COMM["Communication Layer"] + BT["HC-05 Bluetooth Module"] + USER["User / Serial Commands"] + end + + subgraph ACT["Actuation Layer"] + MOT["3x Brushless Motors / Reaction Wheels"] + end + + subgraph PHY["Physical System"] + CUBE["Self-Balancing Cube"] + end + + IMU -->|Acceleration and angular velocity| STM + ENC -->|Wheel speed feedback| STM + + STM --> STATE + STATE --> CTRL + CTRL -->|PWM and direction commands| MOT + + MOT -->|Stabilizing torque| CUBE + CUBE -->|Motion / orientation changes| IMU + + MOT -->|Rotation feedback| ENC + + USER -->|Calibration and tuning commands| BT + BT --> CAL + CAL --> STM + +``` + +## Log + +### Week 14 - 29 April + +- Finalized the project theme and received approval. +- Researched the reference project, selected the main components, and placed the orders. + +### Week 4 - 10 May + +- Received the ordered components. +- Reviewed the hardware setup. + +### Week 11 - 17 May + +- Set up the Rust embedded project. +- Verified firmware flashing and debugging on the STM32 board. +- Tested one Nidec motor in both rotation directions using PWM and direction control. +- Tested the MPU6050 IMU over I2C and verified gyroscope and accelerometer readings. +- Implemented initial tilt estimation tests using roll and pitch angles. +- Started integrating IMU input with motor response. + +### Week 18 - 24 May + +- Continue hardware integration of sensing and actuation. +- Investigate encoder feedback from the motors. +- Refine motor control behavior for smoother directional changes. +- Continue toward full cube assembly, calibration, and balancing experiments. + +## Hardware + +The hardware platform is built around an STM32 microcontroller, an MPU6050 IMU for motion sensing, and three Nidec brushless motors used as reaction wheels. The motors include feedback lines that are intended to be used for wheel-speed sensing during control. A Bluetooth module is planned for calibration and parameter tuning, while a buzzer will provide status feedback. + +## Schematics + +![Schematics](./images/schematic.webp) + +## Bill of Materials + +| Device | Usage | Price | Link | +|---|---|---:|---| +| Dupont wire kit | Prototyping and signal wiring | 24.39 RON | [AliExpress](https://www.aliexpress.com/item/4000203371860.html?spm=a2g0o.order_list.order_list_main.5.b7a61802PaQuli) | +| 2x MPU6050 GY-521 | IMU sensing | 48.84 RON | [AliExpress](https://www.aliexpress.com/item/1005008796700745.html?spm=a2g0o.order_list.order_list_main.11.b7a61802PaQuli) | +| 3x Nidec 24H brushless servo motors | Reaction-wheel actuation | 138.57 RON | [AliExpress](https://www.aliexpress.com/item/1005005779471604.html?spm=a2g0o.order_list.order_list_main.17.b7a61802PaQuli) | +| HC-05 Bluetooth module | Wireless tuning and calibration | 24.35 RON | [AliExpress](https://www.aliexpress.com/item/32582656795.html?spm=a2g0o.order_list.order_list_main.23.b7a61802PaQuli) | +| 3S LiPo 11.1V 500mAh battery | Main power source | 85.33 RON | [AliExpress](https://www.aliexpress.com/item/1005006702079264.html?spm=a2g0o.order_list.order_list_main.29.b7a61802PaQuli) | +| Active 5V buzzer | Audio feedback / status signal | 15.72 RON | [AliExpress](https://www.aliexpress.com/item/1005010321957502.html?spm=a2g0o.order_list.order_list_main.35.b7a61802PaQuli) | +| LM7805 5V regulator module | Logic power regulation | 16.72 RON | [AliExpress](https://www.aliexpress.com/item/1005005382976127.html?spm=a2g0o.order_list.order_list_main.41.b7a61802PaQuli) | +| 3S LiPo balance charger | Battery charging | 28.24 RON | [AliExpress](https://www.aliexpress.com/item/1005007620618797.html?spm=a2g0o.order_list.order_list_main.47.b7a61802PaQuli) | +| ON/OFF switch | Main power control | 21.29 RON | [AliExpress](https://www.aliexpress.com/item/1005009232308550.html?spm=a2g0o.order_list.order_list_main.53.b7a61802PaQuli) | + +## Software + +| Library | Description | Usage | +|---|---|---| +| `embassy-stm32` | STM32 hardware abstraction layer for the Embassy ecosystem | Used for GPIO control, I2C communication with the MPU6050, UART/Bluetooth communication, timers, PWM generation, and encoder input handling | +| `embassy-executor` | Async task executor for embedded systems | Runs the main firmware tasks and coordinates sensing, control, communication, and actuation logic | +| `embassy-time` | Timing and delay utilities | Used for periodic sensor sampling, control-loop timing, calibration delays, and scheduled motor updates | +| `libm` | Mathematical functions for `no_std` environments | Used for trigonometric and square-root operations in orientation estimation and tilt-angle computation | +| `defmt` | Lightweight embedded logging framework | Used for runtime diagnostics, sensor debugging, motor-control validation, and calibration feedback | +| `defmt-rtt` | RTT transport backend for `defmt` logs | Sends debug messages from the STM32 board to the development PC through the ST-LINK interface | +| `panic-probe` | Panic handler for embedded Rust applications | Provides useful crash information during firmware debugging | +| `cortex-m` | Low-level ARM Cortex-M support crate | Provides architecture-specific utilities and interrupt-safe embedded primitives | +| `cortex-m-rt` | Runtime support for Cortex-M microcontrollers | Defines startup behavior and memory initialization for the STM32 firmware | diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/board.webp b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/board.webp new file mode 100644 index 00000000000..3725f1fbbf3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/board.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/diagram.svg index 255a6e4ae23..548ff3d24de 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/diagram.svg +++ b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/diagram.svg @@ -1,10 +1,10 @@ - - - + + + - + diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/front_view.webp b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/front_view.webp new file mode 100644 index 00000000000..da435789399 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/front_view.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/schematic.svg new file mode 100644 index 00000000000..6d6cd4e0a04 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/schematic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/side_view.webp b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/side_view.webp new file mode 100644 index 00000000000..4badf7e417a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/images/side_view.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/index.md index e2b0c5737fe..b9f6095a368 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/ana_maria.ripeanu/index.md @@ -34,15 +34,33 @@ Explored multiple project ideas and decided on the concept to be developed. Ordered the hardware components. +### Week 27 April - 3 May + +Assembled the project and did the wiring. + +### Week 4 - 10 May + +Finished the hardware. + +### Week 11 - 17 May + +Finished the software. I had a few issues communicating throught the bluetooth module, but I found out it was a hardware issue. + ## Hardware The project uses a STM32 Nucleo-U545RE board as the main microcontroller. A motor driver shield (L293D-based) is used to control four DC motors for the platform. The robotic arm is actuated using multiple servo motors (MG995 and SG90), while an electromagnet module is used for object manipulation. A Bluetooth module (HC-05) enables wireless control, and an RC522 RFID module is used for NFC-based user authorization. An RGB LED provides visual feedback. The system is powered by a 5V supply and assembled on a custom 3D-printed structure. - + ### Bill of Materials @@ -95,6 +113,7 @@ The format is 1. https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab +2. https://www.emcu-homeautomation.org/how-to-use-the-adafruit-motor-shield-on-stm32-nucleo/ + + + STM32 Nucleo + + + + + + + + + Breadboard + + + + + + Senzor + HC-SR04 + + + + + + + NFC + RC522 + + + + + + + Servo + SG90 + + + + + + + Difuzor + KY-006 + + + + + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/index.md b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/index.md new file mode 100644 index 00000000000..099975def7a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/index.md @@ -0,0 +1,79 @@ +# Robotic Hand + +A robotic hand that imitates the movement of a person's hand wearing a glove that has flex sensors on it. + +:::info + +**Author:** STANCIU Anastasia-Steliana \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-anastasiilinca + +::: + +## Description +The project is a robotic, 3D printed hand, that is actiond through some basic wires and servo-motors, that imitate the signals from a control glove. The glove has flex sensors, one on each finger, sending continuos signals to the board and servo-motors. The hand shall have 2 features: copy gestures of the glove and play rock paper scissors with a huamn player wearing the glove. + +## Motivation +This idea fits perfectly in the medical field. The main two innovations branching from my project are: + +* It can be upgraded into a prosthetic hand that uses signals from an **EMG Muscle Sensor**, rather than from flex sensors. +* It can be used in **Kinetotherapy** to track the progress of patients and collect data and metrics, leading to both more customizable treatments and research data. +* It is a fun project, offering a great opportunity to discover hardware and human abilities in parallel, finding similarities and differences while learning how to model complex human movement. + +This project is about using hardware and technology to consolidate inclusion and break the boundaries of disabilities, creating a world of possibilities. + +## Arhitecture + +In this section we will discuss components and the interconnections between them. + +1. STM Board +Acționează ca unitatea de control de înaltă performanță. Procesează intrările analogice prin ADC-ul său de 12 biți (oferind o precizie mult mai mare decât Arduino) și generează semnale PWM pentru controlul celor 5 servomotoare. Funcționează la logică de 3.3V. +2. Servo-Motoare + Convertesc semnalele PWM în mișcare unghiulară. Fiecare servo controlează un deget al mâinii robotice. Deși primesc semnal de control de la STM32, necesită o sursă de alimentare separată de 5V pentru a susține consumul de curent. + +4. Flex Sensors + Senzori rezistivi plasați pe mănușă. Aceștia fac parte dintr-un circuit de divizor de tensiune. Tensiunea variabilă rezultată este trimisă către pinii analogici ai STM32 pentru a detecta gradul de închidere a fiecărui deget. + +6. Sursa de alimentare (baterii reincarcabile) + + ![Schematic](schematic_mana_robotica.webp) + +## Schematic in Fusion 360 +![Schematic_FUSION](schematic_robotic_hand_anastasia_stanciu.svg) + +## Log +### Week 14-20 april +Finalized project idea, name, details and features, including code and hardware concepts. +### Week 20-27 april +Ordered hardware components. +### Week 27-1 may +Realized the documentation and sent 3D hand model to print. + +## Hardware + +### Bill Of Materials +| Componentă | Pret | Cantitate | +| :--- | :--- | :---: | +| STM32 | Din dotarea facultatii | 1 | +| Servomotor SG90 | 13.00 | 5 | +| Flex Sensor | 35.00 | 5 | +| Fire mama-tata | 10.00 | 10 | +| Fire tata-tata | 10.00 | 10 | +| 10k Resitors | 1.23 | 10 | +| Breadboard | 9.99 | 1 | +| 3D model | - | - | +| (optional) EMG sensor | 100.00 | 1 | + +## Software +## Software Stack + +| Library / Module | Description | Usage | +| :--- | :--- | :--- | +| **embassy-stm32** | Hardware Abstraction Layer (HAL) | Provides async support for handling I2C, SPI, ADC, and PWM peripherals. | +| **HAL / LL Drivers** | Low-Level Drivers | Direct hardware access for managing ADC (flex sensors) and PWM (servos). | +| **Servo Control Logic** | Custom PWM Mapper | Algorithmic mapping of flex sensor resistance values to 0°-180° servo angles. | +| **Median Filter** | Signal Processing Module | Digital filtering to remove noise and jitter from analog signals for smooth movement. | +| **Embassy Executor** | Real-time Task Scheduler | Handling concurrent asynchronous tasks for sensor polling and motor updates. | + + +## Link to 3D model +https://www.thingiverse.com/thing:1294517 diff --git a/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_mana_robotica.webp b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_mana_robotica.webp new file mode 100644 index 00000000000..e7c56a9550e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_mana_robotica.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_robotic_hand_anastasia_stanciu.svg b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_robotic_hand_anastasia_stanciu.svg new file mode 100644 index 00000000000..0631d1dcc42 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anastasia.stanciu/schematic_robotic_hand_anastasia_stanciu.svg @@ -0,0 +1 @@ + diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_maria.stanciu/index.md b/website/versioned_docs/version-acs_cc/project/2026/anca_maria.stanciu/index.md index 7eedf05ae56..9420d039f5a 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/anca_maria.stanciu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/anca_maria.stanciu/index.md @@ -11,9 +11,9 @@ An arcade claw machine that lets players grab prizes using a custom claw. ## Description -The project is an interactive **Claw Machine** designed to grab and move objects. The claw is controlled by the user and can move in three directions: left-right (OX axis), front-back (OY axis) and up-down (OZ axis). +The project is an interactive **Claw Machine** designed to grab and move objects. The claw is controlled by the user and can move in three directions: left-right (OX), front-back (OY) and up-down (OZ). -Using a set of buttons, the player moves the claw over a prize, lowers it to grab the object, and then moves it to a special drop area. The player also has full control over the claw's grip, opening and closing it at the right moment to secure a win. To make the machine reliable and safe, it is designed to recognize its own limits, so it knows exactly when to stop at the edges of the frame. It's a project focused on building a fun, manual experience where the player's skill and timing are the main attractions. +Players use buttons to move the claw over a prize, lower it, grip the object, and transport it to the drop area. The machine recognizes positional limits for safe and reliable operation, focusing on skill and timing for fun gameplay. ## Motivation @@ -24,11 +24,11 @@ The idea for this project started during a brainstorming session with a colleagu The project is divided into a few main parts that work together to make the claw machine move and grab prizes. Main Components: -* **The Controller**: The 'brain' of the machine (the STM32 board). It processes the logic of the arcade game and coordinates all other parts. -* **The Movement System**: Three motors responsible for movement. They ensure the claw reaches the exact position above the prize and handle the up-and-down movement. -* **The Grip System**: The claw is powered by a SG90 servo motor that opens and closes it. This part is responsible for picking up the prize. -* **The Buttons**: A set of buttons mounted on a breadboard. These allow the player to move the claw on the OX, OY, and OZ axes and operate the grip. -* **Boundaries**: Small switches placed at the ends of the axes (OX and OY). They tell the STM32 to stop the motors if the claw reaches the edge of the frame. +* **The Controller**: The main part of the machine (the STM32 board). It handles the arcade game's logic and coordinates all other parts. +* **The Movement System**: Three motors are responsible for movement. They ensure the claw reaches the exact position above the prize and handle the up-and-down movement. +* **The Grip System**: The claw is powered by an SG90 servo motor that opens and closes it. This part is responsible for picking up the prize. +* **The Buttons**: A set of buttons integrated on a breadboard. These allow the player to move the claw on the OX, OY, and OZ axes and operate the grip. +* **Boundaries**: Small switches placed at the end of the axes (OX and OY). They signal the STM32 to stop the motors if the claw reaches the edge of the frame. ![Diagram](images/diagrama.svg) ![Schematic](images/poza1.webp) @@ -40,14 +40,14 @@ Main Components: ### Week 16 - 20 March -Defined the concept of the project and the list of the components.\ +Defined the project concept and the list of components.\ Analyzed the movement logic for the OX, OY, and OZ axes.\ Researched the necessary limit switches for boundaries. ### Week 23 - 27 March Researched and selected the stepper motors to ensure the movement of the claw.\ -Selected the appropriate servo motor for the claw's opening and closing mechanism.\ +Selected the servo motor for the claw's opening and closing mechanism.\ Chose a button-based interface instead of a joystick to avoid misalignment and ensure precise directional control. ### Week 30 March - 3 April @@ -69,14 +69,14 @@ allowfullscreen> ## Hardware -The project is built around the **STM32 Nucleo** board, which acts as the main controller. It manages everything from reading button presses to moving the motors in the right direction. +The project centers on the STM32 Nucleo board, the main controller. It processes button inputs and controls motor direction. Main parts: -1. **STM32 Nucleo Board**: This is the 'brain' of the machine. It receives signals from the buttons and tells the motors exactly how many steps to move. It also makes sure the claw doesn't hit the walls by checking the limit switches. -2. **28byj-48 Stepper Motors and ULN2003 Drivers**: I used three stepper motors for movement. These motors are great because they move in small, precise steps. Each motor has a driver (ULN2003) that acts as a bridge, providing the power needed for the motors to spin. One motor moves the claw left/right, one moves it forward/backward, and the last one moves it up/down. -3. **SG90 Servo Motor**: This small motor is located on the claw. Unlike the stepper motors, the servo is used only for opening and closing the claw. When you press the 'grab' button, the servo turns to a specific angle to pick up the prize. -4. **Buttons**: These are the manual controls. The player uses them to navigate the claw to the desired position. -5. **Limit Switches**: These are very important for safety. If the claw reaches the end of the frame, it hits a switch. The switch sends a signal to the STM32 to stop the motor immediately so the machine doesn't break. +1. **STM32 Nucleo Board**: This is the center of the machine. It receives signals from the buttons and tells the motors exactly how many steps to move. It also makes sure the claw doesn't hit the walls by checking the limit switches. +2. **28byj-48 Stepper Motors and ULN2003 Drivers**: I used three stepper motors for movement. These motors are great because they move in small, precise steps. Each motor has a driver (ULN2003) that acts as a bridge, supplying the power needed for the motors to spin. One motor moves the claw left/right, one moves it forward/backward, and the last one moves it up/down. +3. **SG90 Servo Motor**: This small motor is located on the claw. Unlike the stepper motors, the servo is used only to open and close the claw. When you press the grab button, the servo turns to a specific angle to pick up the prize. +4. **Buttons**: The player uses them to navigate the claw to the desired position. +5. **Limit Switches**: These are very important for safety. If the claw reaches the end of the frame, it hits a switch. The switch sends a signal to the STM32 to stop the motor so the machine doesn't break. 6. **Power Supply**: The stepper motors need more power than a simple USB cable from the laptop can provide. To solve this, I used a power adapter that connects to a wall outlet. This adapter converts the high voltage from the wall outlet to a safe 5V DC. This power goes directly to the stepper motors, ensuring they have enough strength to move the claw smoothly without overloading the STM32 board. ### Schematics @@ -93,7 +93,7 @@ Main parts: | GT2 Timing Pulley - 20 Teeth, 5mm Bore | Connected to the motors to move the cords for each axis. | [4.67 RON](https://sigmanortec.ro/Fulie-dintata-GT2-20-dinti-ax-5mm-p125814315) x 3 | | Breadboard | Used for organizing and connecting all electronic parts and power lines. | [11.30 RON](https://sigmanortec.ro/Breadboard-830-puncte-MB-102-p125923983) | | Plexiglass | Used to build the walls. | 70 RON | -| Polycarbonate Sheets | Used to build the floor and the structural system for the axis movement. | 20 RON | +| Polycarbonate Sheets | Used to build the floor and the system for the axis movement. | 20 RON | | | Total | 311.13 RON | ## Software @@ -101,7 +101,7 @@ Main parts: | Library | Description | Usage | | -------------------------------------------------------------- | ------------------------------ | ---------------------------------------------- | | [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Interface | Acts as a bridge between the Rust code and the physical pins (GPIO, PWM). | -| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Time Management | Provides precise delays to control the speed of the motors. | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Time Management | Provides precise timing to control motor speed. | | [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Task Manager | Allows the system to run the main loop and handle inputs simultaneously. | | [defmt](https://github.com/knurling-rs/defmt) | Debug Logging | Used to send status messages to the computer for debugging. | | [panic-probe](https://github.com/knurling-rs/probe-run/tree/main) | Error Handling | Ensures that if the code crashes, the error is reported via the debug probe. | @@ -109,9 +109,9 @@ Main parts: ![Diagrama_s](images/diagrama_s.webp) Key Implementation Details: -* **Custom Stepper Driver**: Instead of using a generic library, I implemented a custom StepperMotor struct. This gives me direct control over the 8-step sequence of the motors, ensuring high precision. +* **Stepper Driver**: Rather than using a generic library, I implemented a StepperMotor struct. This gives me direct control over the 8-step motor sequence, ensuring high precision. * **Movement Boundaries**: Every movement command for the OX and OY axes is wrapped in a safety check. The motor only moves if the Limit Switch for that direction is not triggered. -* **Servo Precision**: The claw is controlled using Pulse Width Modulation (PWM). The software limits the servo's movement between specific angles (25 to 125) to prevent mechanical strain on the claw. +* **Servo Precision**: The claw is controlled using PWM. The software limits the servo's movement between specific angles (25 to 125) to prevent mechanical strain on the claw. ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/index.md b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/index.md new file mode 100644 index 00000000000..7ff077e7ff0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/index.md @@ -0,0 +1,173 @@ +# AutoNav +Autonomous Robot with Mapping and Simplified SLAM + +:::info + +**Author**: Anca Stefania Maxim \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-ancamaxim + +::: + +## Description + +AutoNav is an autonomous mobile robot that explores an unknown space, builds a 2D obstacle map in real time, and makes navigation decisions independently, without human intervention. The project implements a simplified SLAM (Simultaneous Localization and Mapping) system, adapted to the hardware constraints of an STM32 microcontroller. + +The robot uses a ultrasonic sensor and a scanning servo to detect surrounding obstacles, wheel encoders for odometry, and an IMU for heading error correction. From this data, it builds a probabilistic occupancy grid, a 2D map where each cell has an associated probability of containing an obstacle. + +The map is displayed live on a color LCD mounted on the robot, updated at 1.3 Hz. + +## Motivation + +This project was chosen because it covers all peripherals and protocols studied in the lab (SPI, I2C, PWM, GPIO, ADC, TIM input capture) demonstrated simultaneously in a functional integrated system. It implements algorithms relevant to real-world applications: odometry, sensor fusion, probabilistic mapping — all in Rust without an operating system. Similar SLAM systems are used in industrial robots (Amazon warehouses), autonomous vacuum cleaners (Roomba), exploration drones, and autonomous vehicles. + +## Architecture + +**1. MCU (STM32 Nucleo-U545RE-Q)** +The central unit running all Embassy-rs async tasks. ` +Coordinates all subsystems and shared state variables (Pose, Occupancy Grid, and Visited Cells Matrix), avoiding data races and enforcing correctness by using asynchronous Mutexes (`ThreadModeRawMutex`). + +**2. Motor Subsystem** +The L298N dual H-bridge receives 1 kHz PWM signals from TIM3 (CH1 on PC6, CH2 on PC7) and drives two DC motors (left/right). Direction is controlled via four GPIO output pins (PA1, PA4, PB0, PC1 — the IN1–IN4 lines of the L298N). Two Hall encoder discs are read via GPIO EXTI interrupts (PB14 for left, PB15 for right): each rising or falling edge increments or decrements a signed tick counter in `RobotState`, with sign determined by the current commanded motor direction. + +**3. Sensing Subsystem** +- **HC-SR04 ultrasonic sensor** (GPIO trigger on PB4, EXTI echo on PB10): distance is measured by busy-polling the echo line (no `async` awaits inside the timing loops, guaranteeing both edges are captured without executor preemption; I of course first tried to make this task run async using .wait_for_* functions wherever I could, but this resulted in low responsiveness and delayed robot reaction). The sensor is swept by an SG90 servo to three positions (far-left ≈ 0.105, center ≈ 0.075, far-right ≈ 0.045 duty cycle on TIM2 CH4, PA3 at 50 Hz) to collect left, center, and right scan distances. +- **MPU-6050 IMU** (I2C1 on PB6/PB7, address `0x68`): supplies raw gyroscope Z-axis data at ±250°/s full-scale. On startup, 100 samples are averaged to compute and store a static gyro bias before navigation begins. + +**4. Localization Subsystem** +Pose estimation combines two independent angle sources through a complementary filter (\alpha = 0.98 gyro, 0.02 odometry): + +- `imu_task` integrates bias-corrected (motors are asymmetrical, unfortunately and calibration had to be done) gyro Z at ~100 Hz to maintain `gyro_theta`, zeroing out readings below a 0.005 rad/s deadband to suppress drift at rest. +- `odometry_task` derives `theta_odom` from differential encoder ticks every 20 ms using the wheel geometry (radius = 3.4 cm, base = 13.5 cm, 38 ticks/rev). Position `(x, y)` is then integrated from the heading `theta`. + +**5. Mapping & Navigation Subsystem** +- `mapping_task` consumes fresh scan readings published by `nav_task` into `STATE` (up to 3 readings per scan cycle: center, left, right). For each fresh reading it calls `integrate_scan`, which uses `ray_cast` (Bresenham's line algorithm) to mark all cells along the ray as free (decrement by 3, floored at 0) and the endpoint cell as occupied (increment by 20, capped at 255) in the 32×32 `GRID`. Each cell starts at `UNKNOWN = 128`; cells below 100 are considered free, above 155 occupied. +- `visit_marker_task` increments the `VISITED` counter for the robot's current grid cell at ~3 Hz, building a heatmap of explored areas. +- `nav_task` implements reactive obstacle avoidance with visit-aware turn selection: it drives forward with a PID heading-hold loop (Kp = 0.4, Ki = 0.0, Kd = 0.05, real-time dt measurement), stops on obstacle detection at 18 cm, applies a 120 ms active brake pulse, scans left and right with the servo, then picks the clearer direction, breaking ties by comparing 3×3 neighborhood visit counts from `VISITED` to prefer less-explored areas. + +**6. Display Subsystem** +`display_task` drives an ST7735S 128×160 color LCD over SPI1 at 4 MHz (SCK PA5, MOSI PA7, CS PB5, DC PB3, RST PC2). The top 128×128 px renders the 32×32 occupancy grid at 4×4 px per cell. A dirty-tracking mechanism repaints only cells whose color index changed since the last frame, reducing SPI traffic. The robot is overlaid as a yellow triangle with a green heading line. A status bar at the bottom changes color to reflect the current navigation state. The display refreshes at ~1.3 Hz (750 ms sleep per frame), fast enough to observe map growth, slow enough to leave CPU budget for sensor tasks. + +![Block Scheme](schema_bloc_hardware.svg) + +## Log + +### Week 5 - 11 May + +Decided upon hardware components and designed a block scheme with the hardware architecture I will build. Settled on a reactive SLAM approach (no global path planner) with a 32×32 probabilistic occupancy grid updated by Bresenham ray casting and a complementary filter for heading fusion. + +### Week 12 - 18 May + +Assembled hardware components. Tested each component individually: verified HC-SR04 ultrasonic echo timing, SG90 servo sweep range, MPU-6050 gyro output over I2C, Hall encoder edge counting on EXTI interrupts, and ST7735S display init over SPI. Finalized wiring and hardware integration. + +### Week 19 - 25 May + +Implemented and integrated the full software stack. Key challenges resolved during this week: + +**Ultrasonic timing**: The initial async implementation using `wait_for_rising_edge` / `wait_for_falling_edge` from `ExtiInput` produced frequent fall-timeout errors. The Embassy executor was yielding between arming the rising-edge wait and the falling-edge wait, allowing other tasks to run and causing the echo's falling edge to be missed entirely. Replaced with a busy-poll approach — tight loops on `echo.is_high()` with no `.await` — which blocks the executor for the duration of the pulse (~1 ms typical, 25 ms max) and reliably captures both edges. + +**PID heading hold**: The first version used a hard-coded `dt = 5 ms` matching the `FORWARD_LOOP_MS` constant. In practice the loop period is dominated by `get_dist` execution (~70–90 ms per call), causing the derivative term to be scaled by ~14×, making the robot snake aggressively. Fixed by measuring real elapsed time with `Instant::now()` each iteration and clamping dt to [20 ms, 200 ms]. + +**Obstacle threshold tuning**: Initial threshold of 15 cm gave insufficient braking distance — motors coast after speed = 0, and the scan-and-turn sequence adds >1.3 s of forward drift. Tried 22 cm, which caused the robot to get stuck rotating in any corridor where an occasional reading fell in the 15–22 cm band. Settled on 18 cm combined with an active 120 ms brake pulse (reverse at 0.30 speed) applied immediately on obstacle detection. + +**Visit-aware exploration**: Without a turn bias, the robot would repeatedly re-enter already-explored corridors. Implemented `visit_marker_task` (3 Hz cell counter) and `visit_score_in_direction` (3×3 neighborhood sum), used by `nav_task` to break clearance ties in favor of less-visited directions. + +## Hardware + +The robot is built on a 2WD chassis powered by two DC motors with Hall encoders, driven by an L298N dual H-bridge. A single HC-SR04 ultrasonic sensor mounted on an SG90 scanning servo provides obstacle detection in three directions (front, left, right) without requiring multiple sensors. An MPU-6050 IMU provides gyroscope data for heading correction. An ST7735S 128×160 color LCD displays the live occupancy grid map, robot pose, and navigation state. The system is powered by a 7.4V 2000mAh LiPo battery with an LM2596 voltage regulator stepping down to 5V for logic. + +![Hardware](masina-slam.webp) + +[Video](https://drive.google.com/file/d/1XOovrqZ5_l_vMKnRxfIBl36JoMaDF0Ii/view?usp=sharing) + +### Schematics + +![Project Schematic](project_schematic.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | provided | +| [2WD Robot Chassis](https://www.optimusdigital.ro/en/robot-chassis/2-robot-chassis.html) | Physical robot structure | [30 RON](https://www.optimusdigital.ro/en/robot-chassis/2-robot-chassis.html) | +| [DC Motors with Hall Encoders x2](https://www.optimusdigital.ro/en/dc-motors/1804-motor-with-encoder.html) | Propulsion + precise odometry | [40 RON](https://www.optimusdigital.ro/en/dc-motors/1804-motor-with-encoder.html) | +| [L298N Motor Driver](https://www.optimusdigital.ro/en/motor-drivers/145-l298n-dual-motor-driver.html) | Dual H-bridge motor control | [15 RON](https://www.optimusdigital.ro/en/motor-drivers/145-l298n-dual-motor-driver.html) | +| [HC-SR04 Ultrasonic Sensor x3](https://www.optimusdigital.ro/en/ultrasonic-sensors/9-hc-sr04-ultrasonic-sensor.html) | Distance measurement front + left + right | [20 RON](https://www.optimusdigital.ro/en/ultrasonic-sensors/9-hc-sr04-ultrasonic-sensor.html) | +| [SG90 Servo Motor](https://www.optimusdigital.ro/en/servomotors/26-sg90-micro-servo-motor.html) | Front sensor 180° rotation scanning | [15 RON](https://www.optimusdigital.ro/en/servomotors/26-sg90-micro-servo-motor.html) | +| [MPU-6050 IMU](https://www.optimusdigital.ro/en/inertial-sensors/96-mpu-6050-imu.html) | Gyroscope heading + accelerometer | [15 RON](https://www.optimusdigital.ro/en/inertial-sensors/96-mpu-6050-imu.html) | +| [IR Sensors x2](https://www.optimusdigital.ro/en/optical-sensors/4-ir-obstacle-sensor.html) | Floor edge / table edge detection | [10 RON](https://www.optimusdigital.ro/en/optical-sensors/4-ir-obstacle-sensor.html) | +| [ST7735 LCD 128x160](https://www.optimusdigital.ro/en/lcds/3-18-inch-tft-lcd.html) | Live 2D map + robot status display | [20 RON](https://www.optimusdigital.ro/en/lcds/3-18-inch-tft-lcd.html) | +| LiPo Battery 7.4V 2000mAh | Autonomous power supply (~45min) | 35 RON | +| Breadboard + Jumper Wires | Prototype circuit | 30 RON | + +## Software + +The entire program is `#![no_std]` and `#![no_main]` (no heap, no operating system, no RTOS scheduler). All concurrency is cooperative and driven by `async`/`await` under the Embassy executor. + +### Concurrency Model + +Embassy runs a single-threaded cooperative executor. Every task is a Rust `async fn` marked with `#[embassy_executor::task]`. Because only one task runs at a time and tasks yield at every `.await` point, shared state is safely exchanged through three `Mutex` globals: `STATE` (the main `RobotState` struct), `GRID` (the 32x32 occupancy grid), and `VISITED` (the visit heatmap). Mutex guards are held for the minimum duration possible, tasks snapshot the fields they need and drop the guard immediately - to avoid blocking time-sensitive tasks such as `encoder_*_task`. + +One deliberate exception to async discipline is the echo measurement in `get_dist`: the timing loops are busy-polls with no `.await`, blocking the executor for up to ~25 ms. This is intentional, since yielding between arming the rising-edge wait and the falling-edge wait caused the executor to miss the echo's falling edge entirely (fall-timeout errors). The busy-poll trades a short CPU window for measurement correctness. + +### Embassy-rs Async Tasks + +| Task | Frequency | Responsibility | +|------|-----------|----------------| +| `encoder_left_task` / `encoder_right_task` | Interrupt-driven (EXTI) | Waits for any edge on encoder pins PB14/PB15; increments or decrements `left_ticks` / `right_ticks` in `STATE` based on the current commanded motor direction. | +| `imu_task` | ~100 Hz | Initializes MPU-6050 over I2C, calibrates gyro bias from 100 startup samples, then continuously reads raw gyro Z, integrates to `gyro_theta` (with 0.005 rad/s deadband), applies complementary filter with `theta_odom`, and writes fused `theta` to `STATE`. Sets `gyro_calibrated = true` once done, unblocking `nav_task`. | +| `odometry_task` | 50 Hz (20 ms) | Drains and resets `left_ticks` / `right_ticks` from `STATE`, computes per-wheel arc length (wheel radius 3.4 cm, 38 ticks/rev), updates `theta_odom` and integrates `(x, y)` from the derived `theta`. Clamps position to [0, 160) cm. | +| `mapping_task` | 20 Hz (50 ms) | Reads and clears `last_scan_fresh[3]` from `STATE`. For each fresh slot, converts the sensor-relative angle to world frame using `theta`, then calls `integrate_scan` -> `ray_cast` to update `GRID`. | +| `visit_marker_task` | ~3 Hz (300 ms) | Reads `(x, y)` from `STATE`, converts to grid coordinates, and saturating-increments the corresponding cell in `VISITED`. | +| `nav_task` | ~10-15 Hz (sensor-paced) | Waits for `gyro_calibrated && display_initialized`. Then loops: measures front distance with PID heading hold (Kp=0.4, Ki=0.0, Kd=0.05, real-time dt); on obstacle, applies brake pulse, sweeps servo left/right, picks turn direction by clearance and visit score, executes timed in-place rotation. Publishes all scan readings to `STATE.last_scan_*`. | +| `motor_task` | 50 Hz (20 ms) | Reads `motor_left_speed` / `motor_right_speed` from `STATE` and drives L298N PWM duty cycle and direction pins. | +| `display_task` | ~1.3 Hz (750 ms) | Snapshots `GRID`, `VISITED`, and pose from `STATE`. Dirty-repaints only changed cells on the ST7735S (4x4 px per cell, 128x128 px grid area). Overlays robot as a yellow triangle with green heading line. Updates a color-coded nav-state status bar. Sets `display_initialized = true` after init, unblocking `nav_task`. | +| `log_task` | 2 Hz (500 ms) | Emits pose `(x, y, theta)`, raw gyro, scan distances, motor speeds, nav state, and ultrasonic diagnostic counters (ok / out-of-range / rise-timeout / fall-timeout) over RTT via `defmt`. | + +### Global Shared State + +**`RobotState` struct — protected by `Mutex`:** + +| Field | Type | Writer | Readers | Meaning | +|-------|------|--------|---------|---------| +| `x`, `y` | `f32` | `odometry_task` | `mapping_task`, `nav_task`, `visit_marker_task`, `display_task` | Robot world position (cm) | +| `theta` | `f32` | `imu_task` | `odometry_task`, `nav_task`, `mapping_task`, `display_task` | Derived heading (rad) from complementary filter | +| `theta_odom` | `f32` | `odometry_task` | `imu_task` | Pure encoder-derived heading, fed into complementary filter | +| `gyro_bias` | `f32` | `imu_task` (startup) | `imu_task` | Static gyro Z offset (rad/s) | +| `gyro_calibrated` | `bool` | `imu_task` | `nav_task` | Startup gate: nav waits until IMU calibration completes | +| `display_initialized` | `bool` | `display_task` | `nav_task` | Startup gate: nav waits until display init finishes | +| `last_gyro_raw`, `last_omega` | `i16`, `f32` | `imu_task` | `log_task` | Latest raw gyro reading and deadband-filtered angular velocity | +| `left_ticks`, `right_ticks` | `i32` | `encoder_left/right_task` | `odometry_task` (drains to 0) | Signed encoder edge counts since last odometry cycle | +| `last_scan_dist[3]` | `[f32; 3]` | `nav_task` | `mapping_task`, `log_task` | Ultrasonic distances for center [0], left [1], right [2] (cm) | +| `last_scan_angle[3]` | `[f32; 3]` | `nav_task` | `mapping_task` | Sensor-relative ray angles: 0.0, +pi/2, -pi/2 | +| `last_scan_fresh[3]` | `[bool; 3]` | `nav_task` (sets) | `mapping_task` (reads and clears) | Indicates which scan slots hold unprocessed readings | +| `motor_left_speed`, `motor_right_speed` | `f32` | `nav_task` | `motor_task`, `encoder_left/right_task` | Commanded speeds in [-1.0, 1.0]; sign encodes direction | +| `nav_state` | `u8` | `nav_task` | `display_task`, `log_task` | FORWARD(0) / STOPPED(1) / SCAN_LEFT(2) / SCAN_RIGHT(3) / TURN_LEFT(4) / TURN_RIGHT(5) / TURN_AROUND(6) | +| `i2c_errors` | `u32` | `imu_task` | `log_task` | Cumulative I2C read failure count | + +**Grid globals:** + +| Static | Type | Writer | Readers | Meaning | +|--------|------|--------|---------|---------| +| `GRID` | `Mutex<_, [[u8; 32]; 32]>` | `mapping_task` | `display_task` | Occupancy probabilities; 128 = unknown, \<100 = free, >155 = occupied | +| `VISITED` | `Mutex<_, [[u8; 32]; 32]>` | `visit_marker_task` | `nav_task` (turn decision) | Per-cell visit count; used to prefer unexplored directions | + +![Software](schema_bloc_software.svg) + + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Used as the main async runtime and hardware abstraction layer for STM32U5 | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor without OS | Used for concurrent task scheduling (sensor, odometry, SLAM, display, WiFi tasks) | +| [embassy-time](https://github.com/embassy-rs/embassy) | Precision timers | Used for microsecond-precision timing for sensor readings and task scheduling | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for rendering the 2D occupancy grid map on the LCD | +| [st7735-lcd](https://github.com/sajattack/st7735-lcd-rs) | Display driver for ST7735 | Used to drive the ST7735 128x160 color LCD via SPI | +| [heapless](https://github.com/rust-embedded/heapless) | Static data structures | Used for Vec and Queue without heap allocation | +| [libm](https://github.com/rust-lang/libm) | Math functions in no_std | Used for sin, cos, sqrt calculations in odometry and SLAM | + +## Links + +1. [Embassy-rs Documentation](https://embassy.dev/) +2. [Occupancy Grid Mapping - Wikipedia](https://en.wikipedia.org/wiki/Occupancy_grid_mapping) +3. [Frontier-Based Exploration](https://en.wikipedia.org/wiki/Frontier-based_exploration) +4. [Bresenham's Line Algorithm](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) +5. [PID Controller](https://en.wikipedia.org/wiki/PID_controller) diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/masina-slam.webp b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/masina-slam.webp new file mode 100644 index 00000000000..577de357b00 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/masina-slam.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/project_schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/project_schematic.svg new file mode 100755 index 00000000000..16042777fed --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/project_schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-13-2026KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title: Schematic Proiect PMFile: project_schematic.kicad_schSheet: /Maxim Anca-Stefania12345678LCD_128x160GND+1-2M2Motor_DC+5V+1-2M1Motor_DC1234J6Encoder_LM393VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQBT1BatterySENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U3L298N1234J5Encoder_LM393+3.3VGNDCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050GNDGND123SG90Servo9gGND1234J3HC-SR04+3.3VGND+3.3V+5VGND+5VBLCSDCSDASCLRESLCD_128x16012345678GNDJ6Encoder_LM3931234U3L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15J5Encoder_LM3931234+3.3VGNDU2MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24GNDGNDGNDJ3HC-SR041234+3.3VGND+3.3V+5VGND+5VSG90Servo9g123 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_hardware.svg b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_hardware.svg new file mode 100644 index 00000000000..596eecff3b6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_hardware.svg @@ -0,0 +1,276 @@ + + + + + + + + + + + STM Nucleo-U545RE-Q + + + + + + HC-SR04 + senzori + de distanta + + + + + + Servo SG90 + + + + + + + + + PWM + + + + + + + + + + + + + + + + + + + + + PWM + + + + + + + + + + + + + + + + + + MPU-6050 + IMU + (acc + giro) + + + + + + Encoder Hall + x 2 + + + + + + Senzor IR x 2 + + + + + + + + + + + + + + + + + + + + + I2C + + + + + + + + + + + + + + + + + + + + + GPIO + + + + + + + + + ADC + + + + + + + + + + + + + + + + + + Driver L298N + + + + + + LCD ST7735 + + + + + + Baterie LiPo + 7.4V + + + + + + Stabilizator + LM2596 5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Motor DC x 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PWM + + + SPI + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_software.svg b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_software.svg new file mode 100644 index 00000000000..87991d95d3a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anca_stefania.maxim/schema_bloc_software.svg @@ -0,0 +1,4 @@ + + +Hall EncodersEXTI PB14/PB15MPU-6050I2C1 PB6/PB7HC-SR04GPIO PB4/PB10SG90 servoTIM2 CH4 PA3encoder_leftencoder_rightEXTI interruptimu_task~100 Hz nav_taskPID heading hold (Kp=0.4 Kd=0.05)obstacle detect - stop - scan - turn toavailable direction, using VISITED matrixPWMleft / right ticksthetanav_statethetaSTATE - Mutex<RobotState>x, y - robot position (cm)theta - derived angle (rad)theta_odom - pure headingleft_ticks, right_tickslast_scan_dist[3],scan_fresh[3]motor_left/right_speednav_state (0-6)gyro_calibrateddisplay_initializedticksx,y,theta_odomscan_freshx,ymotor speedsodometry_task50 Hzintegreaza x,ymapping_task20 Hzraycast Bresenheimvisit_marker3 Hzincrementeaza celulamotor_task50 Hzcomanda L298Ndisplay_task1.3 Hzgrid+position+nav_stateGRID32x32VISITED32x32log_task2 Hzlog pose, scan,stateL298NTIM3 PWM + GPIOwrite cellsincrement cellPWM + directieposenav_stateread GRIDreads VISITEDdisplay initialized -> robot can startvisit score \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/index.md b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/index.md new file mode 100644 index 00000000000..d305ec41b7f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/index.md @@ -0,0 +1,117 @@ +# Mini Smart Home +A miniature smart home model featuring automated security, climate control, emergency hazard detection. + +:::info + +**Author**: Badea Andreea-Bianca \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-badeabianca) + +::: + + + +## Description + +This project is a miniature smart home prototype designed to demonstrate practical home automation and safety features. It integrates an RFID-based security system for door access, alongside a climate control module that automatically adjusts windows based on real-time temperature and rain detection. For safety, it features an emergency hazard protocol that triggers an alarm and opens windows if smoke or gas is detected. Additionally, the system includes a built-in LCD screen for monitoring environmental data and a RGB lighting system, creating a complete, interactive model of modern smart living. + +## Motivation + +I chose this project because I wanted to build something highly interactive that you can see working in real life. It is fascinating to learn how data from sensors can control physical movements, like unlocking a door with a card or automatically closing the windows when it rains. I also wanted to create a system that reacts to dangers, such as turning on an alarm and opening windows if it detects smoke or gas. Building this model is a great and simple way to learn how to connect sensors, motors, and lights together. + +## Architecture + +The final system will include modules for: +Environment sensing: + +- Digital temperature and humidity sensor (DHT11). + +- Rain sensor (detects precipitation to trigger window and awning control). + +- Gas and smoke sensor (MQ2) for safety monitoring. + +Output feedback: LCD 1602 display with an I2C interface, for showing system status (e.g., temperature, humidity, "Emergency Mode", system alerts). + +Motorized components: Two SG90 servo motors: one for door access, one for window control. + +Input system: RC522 RFID module for scanning the access card. + +Indicators: RGB LED module and an active buzzer (for alarms). + +![SchemaBlock](./schemabloc.svg) + +## Log + + + +### Week 23 - 29 March +Decided on the project idea. + +### Week 13 - 19 April +I researched ideas for implementing the project and made a list of necessary materials. + +### Week 20 - 26 April +I wrote the initial documentation. + +### Week 27 April - 3 May +I ordered the components. + +### Week 4 - 10 May +I tested the components and assembled the hardware part of the project. + +### Week 11 - 17 May +I worked on the project's software. + +## Hardware + +The system is built around the STM32 Nucleo-U545RE-Q microcontroller. The sensory hardware includes a LM35 temperature sensor , a rain sensor , an MQ2 gas/smoke sensor for safety , and an RC522 RFID module for secure access. Outputs and physical movements are driven by SG90 servomotors , an active buzzer , an RGB LED module , and an I2C-enabled LCD1602 screen for displaying system data. + +### Schematics + +![Schematics](./smarthome_schema.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | Lab Provided +| [SG90 Servo Motor](https://www.bitmi.ro/componente-electronice/servomotor-sg90-180-grade-9g-10496.html) | Controls door/window | [9.99 RON](https://www.bitmi.ro/componente-electronice/servomotor-sg90-180-grade-9g-10496.html) | +| [RC522 RFID Module](https://www.bitmi.ro/module-electronice/modul-rfid-rc522-13-59mhz-cu-card-si-tag-10468.html) | Access control | [14.99 RON](https://www.bitmi.ro/module-electronice/modul-rfid-rc522-13-59mhz-cu-card-si-tag-10468.html) | +| [LM35 Temperature Sensor](https://www.bitmi.ro/senzori-electronici/modul-senzor-de-temperatura-lm35-compatibil-arduino-10392.html) | Indoor climate monitor | [9.99 RON](https://www.bitmi.ro/senzori-electronici/modul-senzor-de-temperatura-lm35-compatibil-arduino-10392.html) | +| [MQ2 Gas Sensor Module](https://www.bitmi.ro/senzori-electronici/modul-senzor-de-gaze-mq2-11214.html) | Hazard and smoke detector | [11.99 RON](https://www.bitmi.ro/senzori-electronici/modul-senzor-de-gaze-mq2-11214.html) | +| [RGB LED Module](https://www.bitmi.ro/module-electronice/modul-led-rgb-3-culori-10401.html) | Visual status indicator | [2.13 RON](https://www.bitmi.ro/module-electronice/modul-led-rgb-3-culori-10401.html) | +| [LCD1602 Display with I2C/IIC Module](https://www.bitmi.ro/componente-electronice/ecran-lcd1602-cu-modul-i2c-iic-10487.html) | System data screen | [24.99 RON](https://www.bitmi.ro/componente-electronice/ecran-lcd1602-cu-modul-i2c-iic-10487.html) | +| [Rain sensor](https://www.bitmi.ro/electronica/modul-senzor-de-ploaie-10455.html) | Rain sensor | [6.99 RON](https://www.bitmi.ro/electronica/modul-senzor-de-ploaie-10455.html) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| cortex-m | Low-level ARM Cortex-M core access | Used for core processor control and critical sections | +| cortex-m-rt | Startup runtime for Cortex-M | Used for system initialization and reset vector handling | +| cortex-m-semihosting | Host PC debug communication | Used for sending debug messages during development | +| defmt | High-efficiency embedded logging | Used for formatting system logs and error outputs | +| defmt-rtt | RTT logging transport driver | Used for transmitting logs to the host PC in real-time | +| panic-probe | Panic handler for probe-rs | Used to catch runtime panics and print call stacks | +| embassy-stm32 | Async HAL for STM32 microcontrollers | Used to configure and control GPIO, ADC, I2C, and SPI | +| embassy-executor | Async/await task scheduler | Used to drive the main asynchronous execution loop | +| embassy-time | Timekeeping and delay utilities | Used for non-blocking sensor pooling and state timing | +| embedded-hal | Standardized hardware abstraction traits | Used as a unified interface for peripheral drivers | +| embedded-hal-bus | SPI/I2C bus sharing utilities | Used to manage peripheral access on shared buses safely | +| mfrc522 | MFRC522 RFID reader driver | Used to scan and read access cards at the entrance | +| hd44780-driver | Character LCD display driver | Used to print system status, temperature, and alerts to the screen | + +## Links + + + +1. [DIY Smart Home](https://youtu.be/Ohjlj0z85hQ?is=nvKfke6AahJwSeIl) diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/schemabloc.svg b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/schemabloc.svg new file mode 100644 index 00000000000..76030605c91 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/schemabloc.svg @@ -0,0 +1,4 @@ + + + +
Sensors
Sensors
DHT11 Temp/Humidity
Sensor 
DHT11 Temp/Humidity...
MQ2 
Gas/Smoke 
Sensor
MQ2...
Rain Sensor
Rain Sensor

STM32 Nucleo-U545RE-Q

STM32 Nucleo-U545RE-Q...
Control
Control
ADC
ADC
User input
User input
RC522 RFID Module
RC522 RFID Mo...
Interface & Alerts

Interface & Alerts
LCD1602 Display with I2C interface
LCD1602 Display with...
RGB LED Module
RGB LED Module
Active Buzzer 
(alarm)
Active Buzzer...
Motorized Components
Motorized Components
SG90 Servo Motor Door Control
SG90 Servo Motor Door...
SG90 Servo Motor Window Control
SG90 Servo Motor Wind...
Digital
Digital
ADC
ADC
SPI
SPI
I2C
I2C
PWM
PWM
Digital
Digital
PWM
PWM
PWM
PWM
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/smarthome_schema.svg b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/smarthome_schema.svg new file mode 100644 index 00000000000..f68ee67aace --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea.badea2805/smarthome_schema.svg @@ -0,0 +1 @@ +SVG Image created as smartHome_schema.svg date 2026-05-12T13:55:27 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: smartHome_schema.kicad_schSheet: /+5VPWM1+2-3M1Motor_ServoGNDSCLSDAVCCJ6Ecran LCD 1602 I2CGNDSVCCJ2Senzor Temp LM35GNDBGGNDRJ5Led RGB+5V+5V+5VGNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQAODOGNDVCCJ1Senzor Gaz MQ2GND+5VGNDSVCCJ4BuzzerAODOGNDVCCJ3Senzor Ploaie+3V33V3GNDIRQMISOMOSIRSTSCKSDAJ7Modul RFID RC522GNDGND+5V+5VGNDGNDGNDGNDPWM1+2-3M2Motor_ServoLED_GTemp_A1Temp_A1SPI_CSSCL_LCDSDA_LCDGaz_AOPloaie_A4LED_RSPI_CSBuzzer_PC0RFID_RSTRFID_RSTSPI_MOSISPI_MISOSPI_SCKPWM_USAPWM_GEAMSPI_MISOLED_GLED_RBuzzer_PC0Gaz_AOSPI_SCKSPI_MOSIPWM_USAPWM_GEAMSDA_LCDSCL_LCDPloaie_A4+3V3J7Modul RFID RC5223V3GNDIRQMISOMOSIRSTSCKSDAGND+5V+5VGNDGNDGNDM2Motor_ServoPWM1+2-3+5VM1Motor_ServoPWM1+2-3J6Ecran LCD 1602 I2CGNDSCLSDAVCCGND+5VJ2Senzor Temp LM35GNDSVCCJ5Led RGBBGGNDRGND+5VGNDJ3Senzor PloaieAODOGNDVCCJ4BuzzerGNDSVCC+5VGNDGND+5VJ1Senzor Gaz MQ2AODOGNDVCC \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/architectural.svg b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/architectural.svg new file mode 100644 index 00000000000..ebfb225a973 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/architectural.svg @@ -0,0 +1,4 @@ + + + +
STM32 Nucleo
MCU principal

Nucleo-U545RE-Q
STM32 Nucleo...
I2C
I2C
PCA9685
Driver PWM
PCA9685...
MG996R
x4
MG996R...
SG90
x4
SG90...
PWM
PWM
PWM
PWM
DFPlayer Mini
+ MicroSD card
DFPlayer Mini...
UART
UART
Red LED 10mm
(heartbeat effect)
Red LED 10mm...
PWM
PWM
Wired Console
(for teddy bear control)
Wired Console...
GPIO
GPIO
Power Supply
Powerbank 5V
USB output
Power Supply...
5V
5V
USB-C / PC
Flash + Debug
ST-LINK/V3
USB-C / PC...
USB
USB
5V (servo power)
5V (servo power)
Difuzor 8Ω 1W
Difuzor 8Ω 1W
SPK+/-
SPK+/-
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/hardware_test.webp b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/hardware_test.webp new file mode 100644 index 00000000000..d1cfde280f3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/hardware_test.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/index.md b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/index.md new file mode 100644 index 00000000000..a3cbf534ae1 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/index.md @@ -0,0 +1,128 @@ +# TeddyBot +A wired animatronic toy that translates console commands into synchronized movements, audio and a pulsing LED heartbeat. + +**Author**: Ivașcu Andreea-Daria \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Daria-Ivascu + + + + +## Description + +This project consists of an interactive animatronic system designed to demonstrate embedded hardware control through multi-sensory outputs. The physical structure is built around a 40 cm plush teddy bear, laid flat on a backing panel where the development board and breadboards are mounted for stability. Rather than modifying the bear's structure, each limb is actuated through an external string-pull mechanism: individual servo motors are mounted on the panel and connected via thin strings to +the skelet of the shoulders, elbows, hips and knees of the bear, pulling each joint into position when the corresponding servo rotates. +The input stage utilizes a wired console where user commands are captured through tactile button presses. Each button corresponds to a specific limb, sounds or predefined animation routine, allowing the user to trigger individual movements. These routines can also incorporate synchronized audio playback, combining mechanical motion and sound into cohesive, expressive animations. +During the processing stage, the STM32 Nucleo-U545RE-Q microcontroller translates these digital signals to evaluate logic, initiate specific motor actuation routines and fetch stored audio files. The output stage is multi-sensory: it produces precise mechanical limb articulation through the string-pull servo system, outputs pre-recorded audio playback and uses light modulation to create a glowing, pulsating "heartbeat" effect in the toy's chest. + +## Motivation + +The inspiration for this project stems from the desire to create technology that feels organic and approachable. Animatronics are widely used in entertainment, education and even therapeutic settings because of their ability to mimic life. The motivation here is to engineer a lifelike, interactive toy controlled via a wired interface. By programming the microcontroller to handle multiple routines simultaneously—triggering specific mechanical motions, playing contextual audio and modulating a glowing "heartbeat" - the project demonstrates how engineering and programming can be combined to build empathetic, interactive machines. + +## Architecture + +The *hardware system* is centered around the STM32 microcontroller, which processes user inputs to drive physical actuators and generate audio-visual feedback. + +**Processing**: The STM32 Nucleo-U545RE-Q handles all logic and signal generation. It connects to a PC via USB-C for flashing and debugging using ST-LINK/V3. + +**Power Management**: A 5V powerbank serves as the primary power source, directly supplying the 5V rail for the servo motors through the PCA9685 driver. The STM32 microcontroller is also powered by the same source, utilizing its onboard voltage regulator to convert the 5V input into a stable 3.3V for the digital logic. + +**Communications**: +- *I2C*: Used between the STM32 and the PCA9685 PWM driver for servo control commands. +- *UART*: Used between the STM32 and the DFPlayer Mini for audio playback commands. +- *PWM*: Generated by the PCA9685 for servo positioning and directly by the STM32 for LED modulation. +- *GPIO*: Used to read button inputs from the wired console. + +**Inputs**: + - A wired console with tactile buttons connects to the STM32 via GPIO, allowing the user to trigger individual limb movements, predefined animation routines or audio files from the SD card through the DFPlayerMini. + +**Outputs**: + - *PCA9685 PWM Driver*: Receives commands from the STM32 via I2C and generates PWM signals for all 8 servos simultaneously. + - *MG996R Servos ×4*: Control shoulder and hip joints via PWM. + - *SG90 Servos ×4*: Control elbow and knee joints via PWM. + - *DFPlayer Mini*: Receives UART commands from the STM32 and plays pre-recorded audio files stored on a MicroSD card through an 8Ω 1W speaker. + - *Red LED 10mm*: Driven by a PWM signal to simulate a heartbeat pulse effect in the chest of the teddy bear. + + ![Diagrama](architectural.svg) + +## Log + + + +### Week 14 - 20 April +- Finalized project theme and received approval +- Researched all hardware components + +### Week 27 April - 4 May +- Ordered all hardware components + +### Week 4 - 8 May +- Tested all the components to ensure they are working +- Created first drafts for the TeddyBot + +### Week 12 - 18 May +- Implemented the asynchronous control logic for the heartbeat light +- Configured and successfully integrated all 8 servo motors into the system through buttons +- Initialized the DFPlayer Mini module via UART and prepared the SD card with multiple audio tracks + +### Week 19 - 25 May +- Developed synchronized, choreographed animation routines ("The Hug" and "Happy Dance") combining parallel multi-servo actuation with contextual audio feedback +- Reorganized the PCA9685 PWM channel mapping to physically isolate the left and right hemisphere wiring, significantly optimizing Teddy's cable management + +## Hardware + +The hardware centers on an STM32 microcontroller that orchestrates servo motors via an I2C PWM for movement, an MP3 module for audio, an LED for a heartbeat effect and a wired button console for user control. + +![Hardware](hardware_test.webp) + +### Schematics +![Schematics](schematics_pm.webp) + + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo Board](https://www.st.com/) | Main Controller | Lab provided | +| [8x SG90 Servomotor](https://www.optimusdigital.ro/ro/motoare-servomotoare/26-micro-servomotor-sg90.html?search_query=servomotoare&results=97) | Main limb actuators | 13.99 RON each| +| [PCA9685 PWM Board 16 channels](https://www.emag.ro/placa-dezvoltare-general-pca9685-16-canale-pwm-12-biti-interfata-iic-alimentare-dc5-10v-gd-0015/pd/DDPYV8YBM/?ref=history-shopping_486605053_190386_1) | 16-channel I2C PWM driver for all servos | 37.51 RON | +| [DFPlayer Mini](https://www.emag.ro/modul-tf-16p-dfplayer-mini-player-audio-24-biti-32-gb-negru-auriu-5904162801930/pd/D8B8KLMBM/?ref=history-shopping_486605053_116388_1) | UART-controlled MP3 player module | 18.03 RON | +| [MicroSD Card](https://www.emag.ro/card-de-memorie-mediarange-micro-sdhc-4gb-clasa-10-cu-adaptor-sd-mr956/pd/DHJWRLMBM/) | Audio file storage | 24 RON | +| [10mm Red LED](https://sigmanortec.ro/led-rgb-10mm-catod-comun) | Heartbeat visual effect | 2.23 RON | +| [3W 8-Ohm Speaker](https://www.conexelectronic.ro/difuzoare/17459-DIFUZOR-3-W-8-OHMI-70X30MM.html?_gl=1*hv9gqd*_up*MQ..*_ga*MTk5Mjg4NTI2OC4xNzc3NDUwOTQ0*_ga_VNJZ3KSYZX*czE3Nzc0NTA5NDMkbzEkZzAkdDE3Nzc0NTA5NDMkajYwJGwwJGg5MjA3MDQxMw) | Audio output for DFPlayer Mini | 30.50 RON | +| [13x Tactile Push Buttons](https://sigmanortec.ro/Buton-12x12x7-3-p160373654) | Wired console input for limb control | 1.33 RON each| +| [Powerbank 5V 20000mAh](https://www.emag.ro/baterie-externa-nuodwell-power-bank-20000mah-pd-22-5w-quickcharge-3-0-display-led-compatibil-cu-cabluri-tip-type-c-lightning-micro-usb-2-x-usb-incorporate-2-x-led-flash-abs-pc-mov-cxf047/pd/D70J6DYBM/) | Main power source for all components | 63.04 RON | +| [2x MB-102 Breadboard 200x630 points](https://www.emag.ro/breadboard-h-hct-tronic-830-puncte-de-conectare-abs-200x630-puncte-034-066/pd/DBNQ7R3BM/?ref=history-shopping_486605053_1558_1) | Prototyping platform for all connections | 10 RON each | +| [MB-102 Breadboard 400 points](https://sigmanortec.ro/Breadboard-400-puncte-p129872825) | Secondary prototyping board for the audio module and auxiliary mini-circuits | 6.62 RON | +| [Breadboard Power Supply](https://www.optimusdigital.ro/en/linear-regulators/61-breadboard-source-power.html?srsltid=AfmBOoqlQHNAoC4v6awvvkiXtXCXTNmnI55AzQYZUKZm0con7M3yU4R7) | Power rail for breadboard | 4.69 RON | +| [20m Polymer-Coated Metal Wire](https://carrefour.ro/produse/franghie-rufe-20-m-metalica-19-31003679?srsltid=AfmBOopitDsjGte9fJsZudlIpfryQozfsu4lMLAeh88DVTkvehqwudn6) | Custom endoskeleton providing lightweight structural support and high malleability | 10 RON | +| [50 cm Teddy Bear](https://www.emag.ro/jucarie-de-plus-urs-wepzsxo-50cm-cu-papion-maro-deschis-pentru-baieti-casas00572/pd/DFV9XN3BM/) | Main body and physical casing of the robot | 64.41 RON | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer | Manages the GPIO pins (buttons), I2C (motor driver), UART (DFPlayer) and Timers (for the LED heartbeat) | +| [embassy-time](https://crates.io/crates/embassy-time) | Time and Delay Management | Used for asynchronous delays and hardware debounce filtering for the buttons | +| [embassy-executor](https://crates.io/crates/embassy-executor) | Async/Await Executor | Runs the main logic and enables concurrent multitasking | +| [pwm-pca9685](https://crates.io/crates/pwm-pca9685) | PCA9685 I2C Driver | Handles the PWM signals to accurately control the angles of the 8 servo motors on the teddy's skeleton | +| [defmt](https://crates.io/crates/defmt) | Logging Framework | Sends text messages from the microcontroller to the PC console for debugging purposes | + +## Links + + + +1. [The Embedded Rust Book](https://docs.rust-embedded.org/book/) +2. [Embassy Framework Docs](https://embassy.dev/) +3. [MPU6050 Technical Documentation](https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf) + diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/schematics_pm.webp b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/schematics_pm.webp new file mode 100644 index 00000000000..0f7b996f1e3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andreea.ivascu/schematics_pm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/hardware.webp new file mode 100644 index 00000000000..700ca01ddce Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/index.md b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/index.md new file mode 100644 index 00000000000..462bb390ff0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/index.md @@ -0,0 +1,163 @@ +# Embedded Audio Recognition System + +Real-time audio fingerprint recognition on an STM32 Nucleo microcontroller. + +:::info + +**Author**: Andreea-Maria Pascu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-andreeaa-10.git + +::: + +## Description + +The system captures audio through a microphone triggered by a button press. The analog signal is amplified by a MAX9814 module before being digitized by the STM32's ADC. Each fixed-length audio window is processed with FFT to extract frequency-domain features, which are then compared against precomputed fingerprints stored on the device. The closest match is displayed on the TFT screen in real time. + +## Motivation + +I chose this project because it combines signal processing and embedded programming in a way that felt more challenging than a typical sensor project. Through university coursework I have worked with algorithms and low-level programming, and this project is a natural next step (applying those concepts under real hardware constraints). I also listen to a lot of music, so building something that can actually recognize songs made it a more personal goal. + +## Architecture + +```mermaid + +graph TD + MIC["Microphone
(analog signal)"] + AMP["MAX9814 Amplifier
(AGC)"] + BTN["Button
(trigger)"] + MCU["STM32 Nucleo-U545RE-Q"] + ADC["ADC Sampling
(fixed time windows)"] + FFT["FFT Processing
(frequency features)"] + MATCH["Fingerprint Matching
(reference comparison)"] + FP["Precomputed Fingerprints
(flash / SD card)"] + TFT["ST7735 TFT Display
(result output)"] + SD["SD Card
(optional feature log)"] + + MIC --> AMP + AMP --> ADC + BTN --> ADC + ADC --> FFT + FFT --> MATCH + FP --> MATCH + MATCH --> TFT + MATCH --> SD + + MCU --> TFT + MCU --> SD +``` + +- **Audio Capture Module** - reads the microphone signal through the MAX9814 amplifier (with automatic gain control), then samples the amplified analog signal via the ADC in fixed-length windows triggered by a button press. +- **FFT Module** - applies a fast Fourier transform (FFT) on each sampled window to extract frequency-domain features. +- **Matching Module** - compares extracted frequency-domain features against precomputed fingerprints of reference songs stored in flash or on the SD card. +- **Display Module** - shows the identified song (or a no-match result) on the ST7735 TFT over SPI. +- **Logging Module (optional)** - writes captured feature vectors to the SD card for offline analysis. + +## Log + +### Week 6 - 12 April +Defined project scope: audio fingerprinting on STM32 Nucleo-U545RE-Q using Rust and Embassy. Identified main components and risks. + +### Week 20 - 26 April +Performed initial research on required libraries and reviewed Embassy STM32 ADC examples. + +### Week 27 - 3 May +Completed initial documentation. Hardware components ordered and received. + +### Week 4 - 10 May +Connected all hardware components on the breadboard. Verified that each component powers up correctly and tested basic communication (SPI bus with the display and SD card module, ADC input from the microphone amplifier). + +### Week 11 - 17 May +Implemented basic ADC sampling and verified signal integrity using the MAX9814 module. Encountered issues related to sampling frequency versus signal bandwidth, which affected FFT stability and required further tuning of acquisition parameters. + +### Week 18 - 24 May +Continued integration and refinement of the firmware and host-side tooling. Stabilized ADC acquisition after previous sampling issues and validated consistent FFT. + +Completed full system implementation including ADC sampling pipeline, FFT + peak extraction, fingerprint generation and matching, UI state machine, and Python host scripts for audio capture, WAV conversion, and SD card flashing. + +## Hardware + +- **STM32 Nucleo-U545RE-Q** - main microcontroller running firmware in Rust with the Embassy async framework. +- **MAX9814 Microphone Amplifier Module** - amplifies the microphone signal and provides automatic gain control (AGC) before feeding it into the MCU ADC. +- **ST7735 TFT Display (1.8")** - shows recognition result over SPI. +- **SD Card Module** - optional storage for feature data, connected over SPI. +- **Push Buttons (x4)** - triggers recording session and menu navigation (up/down/select). +- **Breadboard** - solderless prototyping platform. +- **Jumper Wires (M-M, F-M, F-F)** - electrical interconnections between components. +- **Resistors** - used for biasing, current limiting, and voltage division. +- **Ceramic Capacitors** - used for decoupling, filtering, and signal stabilization. + +![Hardware](./hardware.webp) + +### Schematics + +![Schematic](./schematic_final.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller | Provided by university | +| [MAX9814 amplifier module](https://www.emag.ro/amplificator-microfon-max9814-ai1095/pd/DJGRKFMBM/) | Microphone amplifier | ~24 RON | +| [ST7735 TFT Display (1.8")](https://sigmanortec.ro/Display-Color-1-8-TFT-LCD-p130546947) | Result display | ~41 RON | +| [MicroSD Card module](https://sigmanortec.ro/Modul-MicroSD-p126079625) | Feature logging | ~5 RON | +| [Push button (x4)](https://sigmanortec.ro/Buton-Mini-6x6x5-p134585482) | Recording trigger and menu navigation | ~8 RON | +| [Breadboard](https://www.emag.ro/breadboard-h-hct-tronic-830-puncte-de-conectare-abs-200x630-puncte-034-066/pd/DBNQ7R3BM/) | Prototyping | ~10 RON | +| [Jumper wires M-M](https://sigmanortec.ro/40-Fire-Dupont-30cm-Tata-Tata-p210849599) | Component interconnections | ~7 RON | +| [Jumper wires M-F](https://sigmanortec.ro/40-Fire-Dupont-30cm-Tata-Mama-p210854349) | Component interconnections | ~7 RON | +| [Jumper wires F-F](https://sigmanortec.ro/40-Fire-Dupont-30cm-Mama-Mama-p126421578) | Component interconnections | ~7 RON | +| [Ceramic Capacitor Kit](https://sigmanortec.ro/Set-condensatori-ceramici-300-bucati-p136306101) | Decoupling, filtering, and signal stabilization | ~13 RON | +| [Resistor Kit](https://sigmanortec.ro/kit-rezistori-30-valori-20-bucati) | Biasing, current limiting, and voltage division | ~15 RON | + +**Estimated total**: ~137 RON + +## Software + +The firmware runs on the STM32 Nucleo-U545RE-Q using Rust and Embassy. Host-side tooling is in Python. + +### Processing pipeline + +1. **Audio is captured** from the MAX9814 microphone using the STM32 ADC in fixed-size windows. Each window is **preprocessed** by removing DC offset to stabilize the signal before analysis. + +2. The signal is **converted into the frequency domain** using a 512-point FFT. A windowing function is applied to reduce spectral leakage and improve peak stability. + +3. The resulting spectrum is reduced to a **compact set of dominant frequency** peaks, which serve as the main features of each audio window. + +4. These features are combined across short time intervals to form robust audio fingerprints that capture consistent frequency relationships. + +5. The generated fingerprints are **compared against a precomputed database** loaded from the SD card at startup, and a similarity score is computed for each reference song. + +6. The song with the **highest stable matching score** above a predefined threshold is selected as the final result and displayed on the TFT screen. + +### Database loading + +At startup, the device loads precomputed audio fingerprints from multiple binary files stored on the SD card. Each file corresponds to a reference song and is processed into an in-memory database used for real-time matching during execution. + +### Host tooling + +| Script | Purpose | +|---|---| +| `wav_to_bin.py` | Converts a WAV file into the binary format used by the embedded system. It also resamples audio to 6590 Hz and encodes it as 8-bit unsigned data. | +| `check_bin.py` | Performs a quick validation of processed `.BIN` files by printing dominant frequency bands per window, used for sanity checking before deployment. | +| `flash_songs.py` | Transfers prepared `.BIN` audio files to the STM32 device over UART, ensuring reliable transmission using chunk-based acknowledgements. | +| `capture_audio.py` | Receives live ADC audio data from the microcontroller over UART and saves it as a WAV file for offline analysis and debugging. | + +### Libraries + +| Library | Purpose | Usage | +|---|---|---| +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Embedded runtime for STM32 | Hardware abstraction (ADC, SPI, GPIO, timers) | +| [microfft](https://crates.io/crates/microfft) | Lightweight FFT library for `no_std` systems | Audio signal processing | +| [mipidsi](https://crates.io/crates/mipidsi) | Display driver for SPI screens | TFT display control | +| [embedded-graphics](https://crates.io/crates/embedded-graphics) | Graphics library for embedded devices | Rendering UI elements on the display | +| [embedded-sdmmc](https://crates.io/crates/embedded-sdmmc) | SD card + FAT filesystem support | Loading audio data from storage | +| [heapless](https://crates.io/crates/heapless) | Fixed-capacity data structures | Memory-safe buffers for embedded constraints | +| [embedded-hal-bus](https://crates.io/crates/embedded-hal-bus) | Shared peripheral access | SPI bus sharing between devices | +| [libm](https://crates.io/crates/libm) | Math functions for `no_std` environments | Basic signal processing math (e.g. windowing) | + +### Links + +1. [Shazam algorithm overview](https://www.toptal.com/algorithms/shazam-it-music-processing-fingerprinting-and-recognition) +2. [Microphone module datasheet](https://www.analog.com/media/en/technical-documentation/data-sheets/MAX9814.pdf) +3. [Documentation for using ADC on the STM32U5](https://www.st.com/content/ccc/resource/training/technical/product_training/group1/2a/84/42/de/d3/72/44/87/STM32U5-Analog-ADC-DAC_ADC-DAC/files/STM32U5-Analog-ADC-DAC_ADC-DAC.pdf/_jcr_content/translations/en.STM32U5-Analog-ADC-DAC_ADC-DAC.pdf) +4. [Documentation crate for FFT in Rust (microfft)](https://docs.rs/microfft/latest/microfft/) +5. [Embassy-rs Documentation](https://embassy.dev/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/schematic_final.svg b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/schematic_final.svg new file mode 100644 index 00000000000..8b0955a6582 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andreea_maria.pascu/schematic_final.svg @@ -0,0 +1 @@ +SVG Image created as audio_recognition_system.svg date 2026-05-24T19:47:04 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: audio_recognition_system.kicad_schSheet: /12345678J1ST7735+3V3GNDGND+3V3+3V3GND12SW3Button_downGNDGNDGND12345J4MAX9814_Module+3V3VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQGND12SW1Button_record+3V3123456J3SD_Card12SW4Button_select12SW2Button_upGNDGND+3V3+3V3RESDCSCLVCCBLCSSDACSGAINAROUTVCCVDDGNDGNDMOSISCKGNDMISOAndreea-Maria Pascu333CCU1STM32U545RETxQVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64+3V3+3V3+3V3GND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_1.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_1.webp new file mode 100644 index 00000000000..444b42720e0 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_2.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_2.webp new file mode 100644 index 00000000000..cd8a3d00d3c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/images/poza_proiect_2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/index.md new file mode 100644 index 00000000000..8079365bfca --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/index.md @@ -0,0 +1,379 @@ +# RustMed Locker + +A smart medication locker with four independent compartments, controlled by an STM32 NUCLEO board and written in Rust. + +:::info + +**Author**: Andrei Alexandrescu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-AlexandrescuAndrei + +::: + +## Description + +RustMed Locker is a small embedded system that works like a medication locker with four separate compartments. Each compartment is assigned to one dose from a daily schedule: + +* **C1 - Morning Dose** +* **C2 - Noon Dose** +* **C3 - Evening Dose** +* **C4 - Night Dose** + +The idea is simple: when a dose becomes active, only the corresponding compartment is unlocked. The user opens the drawer, takes the medication, closes the drawer, and then the system locks it again. If the user does not open the drawer in time, or if the drawer is left open, the system detects the problem and signals it using the buzzer, the onboard LED and terminal logs. + +Each compartment has: + +* one servo motor for locking and unlocking; +* one microswitch for detecting if the drawer is open or closed. + +The project is controlled by an STM32 NUCLEO board. The firmware is written in Rust and uses PWM for the servo motors, GPIO inputs for the microswitches, and GPIO outputs for the buzzer and onboard LED. + +The final version is built as a 4-drawer organizer. The servos are mounted so that each one can physically block or release a drawer, and the microswitches are positioned so that a closed drawer presses the switch. This makes it possible for the firmware to know when a drawer is closed and when it was opened. + +## Motivation + +I chose this project because I wanted something with both visible hardware movement and enough software logic to make it more than a simple component test. A medication locker was a good fit because it has a clear use case: organizing doses and making sure the user interacts with the correct compartment. + +From the hardware side, the project uses several different components: servo motors, microswitches, a buzzer, an external power supply and the STM32 board. From the software side, it uses a state machine, timeouts, reminders, alarms, recovery logic and statistics. + +I also liked that the project could be developed step by step. I first tested a single servo, then all four servos, then the microswitches, then the buzzer, and finally the full firmware. This made debugging easier because each part could be verified separately before combining everything into the final locker. + +## Architecture + +The STM32 NUCLEO board is the central controller of the project. It runs the Rust firmware and coordinates the whole locker. The firmware decides which compartment is active, controls the servos, reads the microswitches and generates feedback through the buzzer and LED. + +The main architecture components are: + +* **Medication schedule logic** - activates the compartments in the order Morning, Noon, Evening and Night. +* **Compartment state machine** - controls the lifecycle of each compartment. +* **Servo control** - sends PWM signals to the four servo motors. +* **Door sensing** - reads the four microswitches and converts their values into OPEN or CLOSED drawer states. +* **Feedback system** - controls the buzzer and LED for reminders, confirmations and alarms. +* **Statistics and logging** - keeps track of completed doses, missed doses, alarms and other events. + +The high-level architecture is: + +```text ++----------------------------------+ +| STM32 NUCLEO | +| Rust Firmware | ++----------------+-----------------+ + | + v ++----------------------------------+ +| Medication Schedule | +| Morning -> Noon -> Evening -> | +| Night | ++----------------+-----------------+ + | + v ++----------------------------------+ +| Compartment State Machine | +| scheduled / reminder / unlock / | +| monitor / lock | ++----------+-----------------------+ + | + +---------------------------+ + | | + v v ++----------------------+ +----------------------+ +| Servo Motors | | Microswitches | +| Lock / Unlock | | Open / Closed | +| C1 C2 C3 C4 | | C1 C2 C3 C4 | ++----------+-----------+ +----------+-----------+ + | | + v v ++----------------------------------+ +| Physical Compartments | +| Morning / Noon / Evening / | +| Night | ++----------------------------------+ + | + v ++----------------------------------+ +| LED + Buzzer | +| reminders / alarms / status | ++----------------------------------+ +``` + +A normal interaction with one compartment is: + +```text +1. The dose becomes active. +2. The buzzer and LED signal a reminder. +3. The servo unlocks the compartment. +4. The firmware waits for the drawer to be opened. +5. The firmware waits for the drawer to be closed. +6. The servo locks the compartment again. +7. The firmware stores the final result. +``` + +The firmware also handles abnormal situations. If the drawer is not opened in time, the dose is marked as missed. If the drawer is opened but not closed, the system enters an alarm state and then a recovery state. If a drawer that is not currently active is opened, the system treats it as an unauthorized access attempt. + +## Log + +### Week 4 - 10 May + +I started by choosing the project idea and deciding the main components. I wanted a project that uses both sensors and actuators, so I chose a medication locker with four compartments. I planned the first version around an STM32 NUCLEO board, four servo motors and four microswitches. + +The first tests were done with servo motors. I tested PWM control and checked how different duty cycle values change the servo position. This helped me understand how the locking mechanism could work in the final build. + +I also decided the role of each compartment: + +* C1 for the morning dose; +* C2 for the noon dose; +* C3 for the evening dose; +* C4 for the night dose. + +### Week 11 - 17 May + +During this week I connected and tested the main hardware setup. I connected all four servo motors and all four microswitches. The servo motors are powered from an external battery pack, because they can draw more current than the development board should provide. The ground of the battery pack is connected to the ground of the STM32 board, so the servo control signals have the correct reference. + +I tested the microswitches using the internal pull-up configuration. In this wiring, the logic is: + +* pressed switch = CLOSED drawer; +* released switch = OPEN drawer. + +After testing, all four switches correctly reported OPEN and CLOSED, and all four servos moved independently. I also created the hardware schematic in EasyEDA and exported it for the documentation. The schematic includes the STM32 board, the servo signal lines, the switch inputs, the buzzer, the external servo power supply and the common ground. + +I also added a buzzer to the circuit. The buzzer is used by the firmware for reminders, success signals and alarms. + +### Week 18 - 24 May + +This week I worked mainly on the software milestone. I replaced the basic hardware test code with the final firmware structure. The new firmware is based on a state machine and controls the locker as a complete system, not only as separate hardware components. + +The implemented firmware includes: + +* safe boot; +* startup diagnostics; +* four named medication compartments; +* servo lock/unlock control; +* drawer open/closed detection; +* switch debouncing; +* progressive reminders; +* missed dose detection; +* left-open drawer detection; +* recovery after alarm; +* tamper detection; +* buzzer and LED feedback; +* event logs; +* usage statistics; +* adherence score; +* separate servo calibration values for each compartment. + +After this stage, I integrated the firmware with the hardware setup and used the switches and servos to test the main flows: completed dose, missed dose, left-open drawer and recovery. + +## Hardware + +The hardware is based on an STM32 NUCLEO development board. The board runs the Rust firmware and controls all inputs and outputs. + +The final build uses: + +* STM32 NUCLEO development board; +* 4 micro servo motors; +* 4 microswitches; +* 1 active buzzer; +* external battery pack for the servo motors; +* mini breadboard / wiring area; +* jumper wires; +* 4-drawer organizer used as the physical locker frame; +* mounting materials for fixing the servos, switches and wires. + +The servo motors are used as the locking mechanism. Each servo has two useful positions: + +* **LOCKED** - the servo arm blocks the drawer; +* **UNLOCKED** - the servo arm releases the drawer. + +The microswitches are used as drawer sensors. In the final build, each drawer presses its switch when it is closed. When the drawer is opened, the switch is released. + +```text +Switch pressed -> drawer CLOSED +Switch released -> drawer OPEN +``` + +The buzzer is used for sound feedback. It signals reminders, success and alarms. The onboard LED is used together with the buzzer so the user also gets visual feedback. + +### Prototype photos + +The following photos show the assembled RustMed Locker prototype and the hardware setup used for testing. + +![RustMed Locker hardware setup](./images/poza_proiect_1.webp) + +![RustMed Locker final prototype](./images/poza_proiect_2.webp) + +### Pin mapping + +| Function | Board pin | STM32 pin | Usage | +| ----------- | --------- | --------- | ----------------------------- | +| Servo 1 | D3 | PB3 | Lock/unlock C1 - Morning Dose | +| Servo 2 | D6 | PB10 | Lock/unlock C2 - Noon Dose | +| Servo 3 | D5 | PB4 | Lock/unlock C3 - Evening Dose | +| Servo 4 | D11 | PA7 | Lock/unlock C4 - Night Dose | +| Switch 1 | D2 | PC8 | Detect OPEN/CLOSED for C1 | +| Switch 2 | D4 | PB5 | Detect OPEN/CLOSED for C2 | +| Switch 3 | D7 | PA8 | Detect OPEN/CLOSED for C3 | +| Switch 4 | D8 | PC7 | Detect OPEN/CLOSED for C4 | +| Buzzer | D12 | PA6 | Audio feedback and alarms | +| Onboard LED | LED pin | PA5 | Visual feedback | + +The servo motors are powered from the external battery pack. The STM32 board only provides the PWM control signals. The external battery ground and the STM32 ground are connected together. + +### Schematics + +The schematic was created in EasyEDA. + +![RustMed Locker schematic](./schematics/rustmed_schematic.svg) + +The schematic contains: + +* the STM32 NUCLEO board; +* the four servo signal connections; +* the four microswitch inputs; +* the buzzer connection; +* the external power supply for the servos; +* the common ground connection. + +### Bill of Materials + +| Device | Usage | Price | +| ------------------------------- | ------------------------------------------------------------------- | ---------------------- | +| STM32 NUCLEO board | Main board used to run the Rust firmware and control the components | Provided | +| 4 x micro servo motors | Used to lock and unlock the four compartments | Already owned | +| 4 x microswitches | Used to detect if each drawer is open or closed | Already owned | +| Active buzzer | Used for reminders, confirmations and alarms | Already owned | +| External battery pack | Powers the servo motors separately from the board | Already owned | +| Jumper wires | Used for all prototype connections | Already owned | +| Mini breadboard | Used for wiring and prototyping | Already owned | +| 4-drawer organizer | Physical frame of the locker | Bought for the project | +| Double-sided tape / Velcro tape | Used for mounting servos, switches and wires | Bought for the project | +| Basic cutting tools | Used for adjusting mounting materials | Bought for the project | + +## Software + +| Library | Description | Usage | +| --------------------------------------------------------- | -------------------------------------------- | -------------------------------------- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 hardware abstraction layer for Embassy | GPIO, PWM timers and peripheral access | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded Rust | Runs the async firmware entry point | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timing library for Embassy | Delays, reminders and timeouts | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework for embedded Rust | Structured logs in the firmware | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt logs | Shows logs in the terminal | +| [panic-probe](https://github.com/knurling-rs/panic-probe) | Panic handler for embedded Rust | Debugging panics | + +The firmware is written in Rust and runs directly on the STM32 NUCLEO board. The main software design is based on a state machine. This made the firmware easier to organize because each compartment has clear states and clear transitions. + +The four logical compartments are: + +```text +C1 - Morning Dose +C2 - Noon Dose +C3 - Evening Dose +C4 - Night Dose +``` + +Each compartment can be in one of these states: + +```text +LOCKED +SCHEDULED +REMINDER_ACTIVE +UNLOCKING +WAITING_FOR_OPEN +DOOR_OPEN +WAITING_FOR_CLOSE +LOCKING +COMPLETED +MISSED +LEFT_OPEN +TAMPER_DETECTED +ALARM +RECOVERY +``` + +For a normal dose, the flow is: + +```text +LOCKED + | + v +SCHEDULED + | + v +REMINDER_ACTIVE + | + v +UNLOCKING + | + v +WAITING_FOR_OPEN + | + v +DOOR_OPEN + | + v +WAITING_FOR_CLOSE + | + v +LOCKING + | + v +COMPLETED +``` + +This means the firmware does not mark a dose as completed only because the servo moved. The dose is completed only if the drawer was opened and then closed. + +The firmware also handles error cases. + +If the drawer is not opened in time: + +```text +WAITING_FOR_OPEN + | + +-- timeout --> MISSED --> ALARM --> LOCKING +``` + +If the drawer is opened but not closed in time: + +```text +WAITING_FOR_CLOSE + | + +-- timeout --> LEFT_OPEN --> ALARM --> RECOVERY + | + +-- drawer closed --> COMPLETED_AFTER_RECOVERY + | + +-- timeout --> LEFT_OPEN_UNRESOLVED +``` + +If another drawer is opened while it is not active: + +```text +Inactive drawer OPEN --> TAMPER_DETECTED --> ALARM +``` + +The main software features are: + +* **Safe boot** - all servos are moved to the locked position when the firmware starts. +* **Startup diagnostics** - the firmware tests the buzzer and LED and reads all switch states. +* **Medication schedule** - the firmware goes through Morning, Noon, Evening and Night doses. +* **Progressive reminders** - before marking a dose as missed, the firmware gives several reminders. +* **Automatic unlock and lock** - the active compartment is unlocked and then locked again after the interaction. +* **Completed dose detection** - the drawer must be opened and closed for the dose to count as completed. +* **Missed dose detection** - if the drawer is not opened in time, the dose is marked as missed. +* **Left-open detection** - if the drawer stays open too long, the firmware starts an alarm. +* **Recovery logic** - after a left-open alarm, the system waits again for the drawer to close. +* **Tamper detection** - if an inactive drawer is opened, the firmware detects unauthorized access. +* **Debouncing** - switch readings are filtered to avoid false changes. +* **Fail-safe locking** - after every compartment flow, the servo is returned to the locked position. +* **Audio and visual feedback** - buzzer and LED patterns are used for reminders, success and alarms. +* **Event log** - important actions are printed in the terminal with event numbers. +* **Statistics** - the firmware tracks completed doses, missed doses and alarms. +* **Adherence score** - the firmware computes the percentage of completed doses. +* **Servo calibration** - every compartment has separate locked and unlocked servo values. + +The firmware prints logs in the terminal using `defmt`. This helped a lot during testing because I could see the exact current state, the active compartment, the drawer state and the final result for each dose. + +## Links + +1. [Embassy embedded Rust framework](https://embassy.dev/) +2. [Embassy GitHub repository](https://github.com/embassy-rs/embassy) +3. [Rust Embedded Book](https://docs.rust-embedded.org/book/) +4. [STM32 NUCLEO boards](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) +5. [EasyEDA](https://easyeda.com/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/schematics/rustmed_schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/schematics/rustmed_schematic.svg new file mode 100644 index 00000000000..de07d93d790 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.alexandrescu/schematics/rustmed_schematic.svg @@ -0,0 +1 @@ +AABBCCDD1122334455TITLE:Sheet_1REV:1.0Date:2026-05-13Sheet:1/1Drawn By:alexandrescuandrei42Company:Your CompanyPC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC138 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/diagram.webp new file mode 100644 index 00000000000..d7e4c8ee79c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/index.md b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/index.md new file mode 100644 index 00000000000..edd2a50e305 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/index.md @@ -0,0 +1,85 @@ +# SmartBike: Cyclometer and Smart Anti-Theft System + +A bicycle speed monitoring system and anti-theft alarm, developed on an STM32 platform. + +:::info + +**Author**: Nicolae Andrei \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-nikoeu.git + +::: + +## Description + +The project consists of developing a "dashboard computer" for a bicycle, featuring two main functionalities: a cyclometer and an anti-theft system. The cyclometer function uses a magnetic sensor (Reed switch) mounted on the fork and a magnet on the spoke to calculate the speed and distance traveled, displaying the data on a small screen. The anti-theft function uses a gyroscope/accelerometer module to detect unauthorized movements or shocks when the bicycle is "armed". In case of suspicious movement, the system sends a notification to the user's phone via a Bluetooth Low Energy (BLE) connection, compatible with iPhone. + +## Motivation + +Cycling is a useful and relaxing activity, but securing the bike and monitoring performance can often require the purchase of expensive commercial equipment. I chose this project to combine my passion for cycling with electronics and embedded programming. It represents an excellent challenge to learn how to manage hardware interrupts for the speed sensor, I2C communication for the gyroscope, and serial communication for the Bluetooth module. + +## Architecture + +The system is centralized around the STM32 development board, which receives and processes signals from the sensors, updates the display, and manages wireless communication. + +**Components and Connections:** +- **Microcontroller (STM32):** The brain of the project. It manages the state logic (Armed/Disarmed/Riding). +- **Speed Sensor (Magnetic Contact / Reed):** Connected to a digital pin on the STM32 acting as an interrupt (EXTI). With each wheel rotation, the sensor sends a signal that helps calculate the speed based on the wheel's circumference. +- **Motion Sensor (MPU6050):** Connected via the I2C protocol to the STM32. It detects the acceleration and tilt of the bicycle for the alarm function. +- **0.96" OLED Display:** Also connected via I2C, used to display the current speed, alarm status, and distance. +- **Bluetooth Module (HM-10 / BLE):** Connected via UART (TX/RX) to the STM32. It transmits data and alerts to a Bluetooth terminal application on iOS. + +![Architecture diagram](diagram.webp) + +## Log + +### [Week 27 April - 1 May] +Defined the project architecture, selected the final components, and ordered the necessary hardware parts (development board, sensors, Bluetooth module). + +## Hardware + +The project requires components that are energy-efficient and small enough to be mounted on the bicycle's handlebars/fork. + +* **STM32 Development Board:** The central processor executing the code. +* **Magnetic Sensor (Reed Switch):** A magnetically actuated switch, essential for counting wheel rotations. +* **MPU6050 Gyroscope/Accelerometer:** Used to detect sudden changes in position (anti-theft). +* **HM-10 Bluetooth Module (BLE):** Enables communication with iOS devices, which support the Bluetooth Low Energy standard. +* **0.96" OLED Display:** For the visual interface on the handlebars. +* **Power Module and Li-Ion Battery:** To provide portability to the system. + +### Schematics + +![Schematic diagram](schema.webp) + +### Photos + +![Hardware](poza_hardware.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The main microcontroller | [129 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396?CMP=e-email-sys-orderack-GLB) | +| [HM-10 BLE Bluetooth Module](https://components101.com/sites/default/files/component_datasheet/HM10%20Bluetooth%20Module%20Datasheet.pdf) | iOS compatible wireless communication | [27 RON](https://www.emag.ro/modul-bluetooth-4-0-ble-at-09-hm-10-msalamon-conectivitate-rapida-mic-si-eficient-ideal-pentru-proiecte-iot-economiseste-energie-fiabil-usor-de-montat-functioneaza-in-diverse-conditii-calitate-inalta-/pd/DHKDDVYBM/) | +| [MPU6050 Accelerometer Module](https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/RM-MPU-6000A.pdf) | Motion detection for the alarm | [16 RON](https://www.emag.ro/modul-accelerometru-si-giroscop-mpu6050-ai382-s321/pd/DB606JBBM/) | +| [Magnetic Sensor / Reed Switch](https://components101.com/sensors/mc38-magnetic-switch-sensor-pinout-features-datasheet-working-alternative-application) | Wheel rotation detection | [14 RON](https://www.emag.ro/senzor-magnetic-pentru-deschiderea-usilor-ferestrelor-mc-38-200v-28x14-mm-alb-5904162802746/pd/D0G5KLMBM/) | +| [0.96" OLED Display I2C](https://www.raystar-optronics.com/oled-graphic-display-module/i2c-oled.html) | Displaying speed and status | [25 RON](https://www.emag.ro/afisaj-grafic-oled-128x64-0-96-inch-galben-albastru-3874784221572/pd/DGTRPXYBM/) | +| [Battery and TP4056 charging module](https://www.watelectronics.com/tp4056-ic/) | Powering the system | [~25 RON](https://www.emag.ro/incarcator-li-ion-li-pol-cu-buffer-usb-c-tp4056-1a-multicolor-tp4056-18650-usbc/pd/DNW798MBM/) | +| [Wires, Breadboard, Misc](https://en.wikipedia.org/wiki/Breadboard) | Connecting the components | [17 RON](https://www.emag.ro/breadboard-400-puncte-ai059-s69/pd/DRJ66JBBM/?ref=sponsored_products_search_f_b_1_1&recid=recads_1_8684ac9f2906edfe68a0228ea6dcd1b66c67460d7e4d136276e77f11306d5dd0_1777327637&aid=c690b69a-4232-11f1-801c-06eaf0d4245d&oid=50658364&scenario_ID=1) | + +## Software + +Because the project is part of the PMRust course, the main ecosystem relies on the Rust programming language for embedded systems. + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer (HAL) | Pin configuration, UART for Bluetooth, and I2C for sensors | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor | Managing asynchronous tasks (reading sensors and transmitting BLE simultaneously) | +| [mpu6050](https://crates.io/crates/mpu6050) (or similar) | MPU6050 Driver | Interfacing and reading data from the accelerometer | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text (speed) on the OLED display | +| [ssd1306](https://crates.io/crates/ssd1306) | OLED Display Driver | Hardware control of the small screen on the handlebars | + +## Links + +1. [Embassy Guide for STM32](https://embassy.dev/book/dev/getting_started.html) +2. [Recommended iOS App: BLE Serial Terminal](https://apps.apple.com/us/app/hm10-bluetooth-serial-lite/id1030450153) +3. [How a Hall/Reed sensor works on a bicycle](https://www.youtube.com/watch?v=Ex31DqFvDbs) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/poza_hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/poza_hardware.webp new file mode 100644 index 00000000000..b7ad03724a6 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/poza_hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/schema.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/schema.webp new file mode 100644 index 00000000000..408a9e75253 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.nicolae0507/schema.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3536.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3536.webp new file mode 100755 index 00000000000..76095cd087e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3536.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3541.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3541.webp new file mode 100755 index 00000000000..dac64119345 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/IMG_3541.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/PM_PROJECT.svg b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/PM_PROJECT.svg new file mode 100755 index 00000000000..cbb50736c94 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/PM_PROJECT.svg @@ -0,0 +1 @@ +SVG Image created as PM_PROJECT.svg date 2026-05-13T06:31:21 Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-05-04KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Schematic Proiect PMFile: PM_PROJECT.kicad_schSheet: /Rusanescu Andrei-Marian+1-2M2Motor_DCGND+3.3VGND+1-2M4Motor_DC+1-2M3Motor_DCGND1VCC2SCL3SDA4U2ER_OLEDM0.91_1x-I2C+3.3VR3220BT1Battery1234J1HC-06 BluetoothGND12345678910J2MPU_6500R22201234J3HC-SR04SENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U3L298NGNDGNDGNDR12201234J4HC-SR04+5VVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U4STM32U545RETxQGND+3.3V+5V+5VGND1234J6Encoder_LM3931234J5Encoder_LM393+3.3VD1LEDD2LED+1-2M1Motor_DCGNDGNDD3LEDTXRXRXTXSDASCLM4Motor_DC+1-2M3Motor_DC+1-2U3L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15J5Encoder_LM3931234M2Motor_DC+1-2GND+3.3VR3220J1HC-06 Bluetooth1234R2220R1220GNDGNDGNDGNDD3LEDD2LEDD1LED+3.3VJ6Encoder_LM3931234GND+5VGNDGNDJ3HC-SR041234J2MPU_650012345678910GND+3.3VU2ER_OLEDM0.91_1x-I2CGND1VCC2SCL3SDA4+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/cargobot_night.webp b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/cargobot_night.webp new file mode 100755 index 00000000000..133ed7abb8d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/cargobot_night.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/index.md new file mode 100644 index 00000000000..e1d161a5639 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/index.md @@ -0,0 +1,274 @@ +# CargoBot +Remote-controlled cargo robot with Bluetooth telemetry + +:::info + +**Author**: Andrei Rusanescu \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-andreirusanescu) + +::: + + + +## Description + +CargoBot is a remote-controlled four-wheeled robot that carries cargo and navigates surfaces with imperfections. It is controlled from a laptop keyboard via Bluetooth and uses an STM32 Nucleo-U545RE-Q microcontroller programmed in Rust with Embassy-rs. It sends real-time telemetry data to a PC dashboard via Bluetooth, while simultaneously displaying information on an onboard OLED. + +The central idea of the project is measuring and visualizing the impact of cargo load on motor performance: when the robot carries something heavy, the PID controller automatically increases the PWM duty cycle to maintain a constant speed. This compensation is observable live on the robot's OLED, on the PC dashboard, and through 3 LEDs (green/blue/red) that visually indicate the effort level. + +## Motivation + +I am particularly interested in cars and networking. This project combines multiple peripherals studied in the lab (PWM, GPIO, I2C, UART (Bluetooth)) into a functional system. It is a challenge that clearly demonstrates technical effort - the difference in motor effort with and without cargo, and how to compensate for the load. It really excites me because I get to apply what I've learnt in electronics, microprocessor programming in Rust and really build a hardware product. + +## Architecture + +![Hardware diagram](schema_bloc.svg) + +Both the hardware and software diagrams are drawn in `draw.io`. + +The system is organized around five main subsystems: + +**1. MCU (STM32 Nucleo-U545RE-Q)** +The central unit running all Embassy-rs async tasks. Coordinates all subsystems and shared state protected by Mutex. + +**2. Motor Subsystem** +The L298N dual H-bridge receives PWM signals from the STM32 and drives 4 DC motors (2 per channel, left/right side in parallel - skid steering). The two IR LM393 optical sensors read encoder disc pulses on GPIO interrupts and compute RPM per side. + +**3. Sensing Subsystem** +- MPU-6500 (I2C, address 0x68): reads accelerometer + gyroscope data, combined via complementary filter to get a stable tilt angle +- 2x HC-SR04 (GPIO trigger/echo): front and rear obstacle detection +- 2x IR LM393 encoders: RPM feedback for PID + +**4. Communication Subsystem** +HC-06 Bluetooth module connected to STM32 via UART. Bidirectional: laptop sends raw keyboard characters (w, a, s, d, x, p), and the robot streams back high-efficiency text-based CSV telemetry (T,Load,Comp,Ax,Ay,Gz,Slope) at 10Hz to reduce microcontroller overhead. + +**5. Display & Indicators Subsystem** +- OLED SSD1306 128x64 (I2C, address 0x3C, shared bus with IMU): displays active metrics like distance, encoder ticks, load %, slope, and current power mode. +- 3x LEDs (green/blue/red) on GPIO: visual indicator of motor effort based on PWM duty cycle +- PC Dashboard: Tkinter window with embedded real-time Matplotlib animation canvas displaying streaming physics graphs. + +**Embassy-rs Async Tasks:** + +| Task | Frequency | Responsibility | +|------|-----------|----------------| +| encoder_left_task / right | Interrupt-driven | Counts wheel encoder slot edges using GPIO EXTI triggers. | +| distance_task | 16 Hz | Triggers and measures echo responses from front/rear HC-SR04 sensors. | +| imu_task | 50 Hz | Reads raw Accel/Gyro data from MPU-6500 over I2C and stores scaled values. | +| pid_task | 5 Hz | Performs Low-Pass filtering, fast auto-calibration, and runs the PI speed compensation loop. | +| telemetry_task | 10 Hz | Formats data into a CSV string and transmits it wirelessly over UART. | +| display_task | 2 Hz | Refreshes the on-board OLED graphics. | +| bluetooth_task | Async Rx | Listens for incoming control characters from the PC. | + +**Navigation & PI Compensation Logic:** +Instead of basic tilt-triggering, CargoBot uses an intelligent sensor-fusion approach: +1. **Auto-Calibration**: On first throttle, it calibrates the ideal steady-state wheel RPM. +2. **Load Tracking**: A Low-Pass filter smooths out encoder noise. If the filtered RPM drops below the reference value due to cargo weight or friction, the robot calculates the exact `Load %`. +3. **PI Regulation**: A Proporțional-Integral loop dynamically scales up the PWM duty cycle to maintain constant cruise speed, bypassing inertia during start-up via a dedicated blind window. + + +**Peripheral Usage:** + +| Peripheral | Component | Usage | +|-----------|-----------|-------| +| PWM | STM32 -> L298N | Motor speed control (0–100% duty cycle) | +| GPIO Output | STM32 -> HC-SR04 trigger | pulse to trigger ultrasonic | +| GPIO Input Interrupt | HC-SR04 echo -> STM32 | Measure echo duration -> distance | +| GPIO Input Interrupt | LM393 encoders -> STM32 | Count pulses -> compute RPM | +| GPIO Output | STM32 -> LEDs R/G/B | Load indicator: green (ECO mode), blue (DRIVE mode), red (SPEED mode) | +| GPIO Output | STM32 -> L298N IN1-IN4 | Motor direction control | +| I2C (shared bus) | STM32 -> MPU-6500 (0x68) | Accelerometer + gyroscope for tilt angle | +| I2C (shared bus) | STM32 -> SSD1306 (0x3C) | OLED telemetry display | +| UART | STM32 -> HC-06 | Bidirectional Bluetooth: commands in, telemetry out | + +## Log + + + +### Week 6 - 12 Apr +Ordered most of the components needed. + +### Week 13 - 19 Apr +Assembled the mechanical parts (wheels, motors, car platform). + +### Week 20 - 26 Apr +Working on the Schematic in KiCad. +Tested individual components: bluetooth module, display, motors, distance sensors, LM393 speed sensors. + +### Week 27 Apr - 3 May +Ordered Li-Ion Samsung 18650 3.6V 3450mAh 8A batteries, a charger for the batteries, +more male-female and female-female jumpers and a smaller breadboard (400 points). + +### Week 4 - 10 May +Soldered IMU and OLED display in the lab. +Assembled final product. +Started to write the software for the cargobot and tested it carrying another car. +The car automatically stops when it detects an object at less than 15cm distance. + +### Week 11 - 17 May +Wrote even more software. Noticed that with adding more components, the responsiveness of the +bluetooth commands degraded, so I had to debug a lot with the frequencies, which led me to +activate the 16MHz crystal of the board to raise the frequency on i2c (for the display). + +I had problems with the HC-SR04 distance sensors as well. They are placed back-to-back, +which initially caused significant acoustic interference (cross-talk) because they were +attempting to fire and update simultaneously at the same frequency. This ultrasonic overlap +caused one of the sensors to constantly freeze or report false timeouts, as it would accidentally +catch the stray echo generated by the opposite sensor. + +To solve this limitation, I refactored the software into a single, synchronized Embassy async +task (`distance_task`). Instead of running concurrently, the sensors are now triggered sequentially: +the system measures the front distance, waits for a deliberate 30ms gap to let any residual acoustic +noise dissipate, and only then triggers the rear sensor. This simple interleaving completely eliminated +the sensor locking issue. + +### Week 18 - 24 May +Finalized the closed-loop motor control by deploying a tuned PI velocity regulator ($K_P=35, K_I=15$) and locking the noisy derivative term ($K_D$) to zero. +Implemented a $7/8$ exponential moving average Low-Pass filter to smooth out encoder slot jitter, a rapid auto-calibration routine that samples the target cruise RPM during the first seconds of movement and a 1.6-second startup blind window to stop the controller from confusing physical takeoff inertia with cargo load. + +Added another 2 compensation channels: +1. Yaw-rate correction (lateral drift): The gyroscope $G_z$ axis is sampled +at every PI loop tick (5 Hz). When the robot is commanded straight +(`w` / `s`) and a non-zero yaw rate is detected, caused by an +asymmetrically placed load or a difference in motor friction, the +controller applies an asymmetric PWM correction. The yaw mixer is disabled +during deliberate turns (`a` / `d`) via the `IS_TURNING` flag so that it +does not fight the intentional rotation. +It takes a few tries to get the right values. + +2. Slope detection and pre-emptive compensation: The accelerometer $A_y$ +axis (aligned with the driving direction after the IMU mounting orientation +was taken into account) is read each PI tick. The slope compensation is +clamped to +/- 30 % PWM. The result is published to `SLOPE_COMP` and added +**symmetrically** to both wheels in the motor loop, acting as a +feed-forward term that pre-emptively increases the +duty cycle before the PI loop has had time to react to the RPM drop. + +Built the custom companion PC interface using Python Tkinter and Matplotlib +to handle low-latency key debouncing and animate the 10Hz text-based CSV +telemetry streams (`T,Load,Comp,Ax,Ay,Gz,Slope`) in real time. + + +## Hardware design + +The robot is built on a 4WD chassis powered by four DC motors (3–6V) wired in parallel per side (skid steering) and driven by an L298N dual H-bridge. Speed is dynamically regulated via 1kHz PWM signals from the STM32, while directional control is managed through discrete GPIO pins. Two LM393 IR optical sensors read wheel encoder discs to provide real-time RPM feedback, which serves as the primary metric for the PI load-compensation algorithm. + +For environmental and physics telemetry, an MPU-6500 IMU communicates over a shared I2C bus to track linear accelerations ($A_x$, $A_y$, $A_z$) and yaw rate ($G_z$). Spatial awareness is handled by two HC-SR04 ultrasonic sensors placed at the front and rear, utilizing timed GPIO echo interrupts for obstacle detection. Visual feedback is split between an onboard SSD1306 OLED display for standalone diagnostics and an HC-06 Bluetooth module that streams raw, high-frequency CSV telemetry packets to a custom Python dashboard on a PC. + +![Car at night](cargobot_night.webp) +![Car from above](IMG_3541.webp) +![Car from a side](IMG_3536.webp) + +### Schematics + + +KiCad Schematic: +![KiCad Schematic](PM_PROJECT.svg) + + +## Software design +The entire program is `#![no_std]` and `#![no_main]`; +there is no heap, no operating system, and no RTOS scheduler, thus +all concurrency is cooperative and driven by `async`/`await`. + +### Concurrency Model + +Embassy runs a single-threaded cooperative executor. Every task is a Rust +`async fn` marked with `#[embassy_executor::task]`. Because only one task +runs at a time and tasks yield at every `.await` point, shared state can be +safely exchanged through **lock-free atomics** (`AtomicU32`, `AtomicI32`, +`AtomicBool`) for single-value reads/writes, and through an +`embassy_sync::channel::Channel` for the command queue. The I2C bus, which +is shared between the IMU and the OLED, is protected by an +`embassy_sync::mutex::Mutex` stored in a +`StaticCell` so that its `'static` lifetime can be passed to multiple tasks. + +I chose lock-free atomics because they are fast they can be used with ease +in more then 2 functions (if I used a channel instead of atomics it would have gotten +very complicated very fast). Atomics ar fast and simple. + + +### Global Shared State - Atomic Variables + +All inter-task communication goes through a flat set of `static` atomics. +The table below maps each atomic to the task that **writes** it and the tasks that **reads** it. + +| Atomic | Type | Writer | Readers | Meaning | +|--------|------|--------|---------|---------| +| `DIST_FRONT_CM` | `AtomicU32` | `distance_task` | `display_task`, `main` (motor) | Front HC-SR04 distance (cm) | +| `DIST_REAR_CM` | `AtomicU32` | `distance_task` | `display_task`, `main` (motor) | Rear HC-SR04 distance (cm) | +| `EMERGENCY_STOP_FRONT` | `AtomicBool` | `distance_task` | `main` (motor) | True when front obstacle < 15 cm | +| `EMERGENCY_STOP_REAR` | `AtomicBool` | `distance_task` | `main` (motor) | True when rear obstacle < 15 cm | +| `ENC_L_TICKS` | `AtomicU32` | `encoder_left_task` | `pid_task`, `display_task` | Cumulative left encoder ticks (20 per slot) | +| `ENC_R_TICKS` | `AtomicU32` | `encoder_right_task` | `pid_task`, `display_task` | Cumulative right encoder ticks | +| `IMU_AX` | `AtomicI32` | `imu_task` | `pid_task`, `telemetry_task` | Accel X x100 (% of 1 g) | +| `IMU_AY` | `AtomicI32` | `imu_task` | `pid_task`, `telemetry_task` | Accel Y x100, LPF-filtered | +| `IMU_AZ` | `AtomicI32` | `imu_task` | `telemetry_task` | Accel Z x100 | +| `IMU_GZ` | `AtomicI32` | `imu_task` | `pid_task`, `telemetry_task` | Yaw rate x100 (deg/s), LPF-filtered | +| `LOAD_PERCENT` | `AtomicU32` | `pid_task` | `display_task`, `telemetry_task` | Load % (0 = no load, 100 = motor blocked) | +| `PID_COMPENSATION` | `AtomicI32` | `pid_task` | `display_task`, `telemetry_task` | Symmetric PI output (% PWM delta) | +| `PID_COMP_LEFT` | `AtomicI32` | `pid_task` | `main` (motor) | Left wheel comp after yaw mixer | +| `PID_COMP_RIGHT` | `AtomicI32` | `pid_task` | `main` (motor) | Right wheel comp after yaw mixer | +| `SLOPE_COMP` | `AtomicI32` | `pid_task` | `main` (motor), `display_task`, `telemetry_task` | Feed-forward slope compensation (% PWM) | +| `PWM_LEFT_ACTUAL` | `AtomicU8` | `main` (motor) | `pid_task` | Actual left PWM duty sent to L298N | +| `PWM_RIGHT_ACTUAL` | `AtomicU8` | `main` (motor) | `pid_task` | Actual right PWM duty sent to L298N | +| `POWER_MODE` | `AtomicU8` | `main` (motor) | `display_task`, `telemetry_task` | 0=ECO, 1=DRIVE, 2=SPORT | +| `PID_CALIBRATED` | `AtomicBool` | `pid_task` | `display_task`, `telemetry_task`, `pid_task` | True once reference RPM is locked | +| `REFERENCE_RPM_X100` | `AtomicU32` | `pid_task` | `pid_task` | Calibrated cruise RPM x100 | +| `IS_TURNING` | `AtomicBool` | `main` (motor) | `pid_task` | True during `a`/`d` commands | + +The single channel: +| Channel | Type | Sender | Receiver | Meaning | +|---------|------|--------|----------|---------| +| `CMD_CHANNEL` | `Channel<_, u8, 4>` | `bluetooth_task` | `main` (motor) | Raw command bytes: `w s a d x p` | + + +### Software diagram + +![software_diagram](software_diagram_colored.svg) + + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller (Cortex-M33), runs all Embassy-rs tasks | 0 RON (provided by university) | +| [4x DC motors (3-6V), encoder discs, wheels](https://www.bitmi.ro/set-motor-dc-3v-6v-cu-reductor-si-roata-11227.html) | Wheels and motors for the CargoBot | [40 RON](https://www.bitmi.ro/set-motor-dc-3v-6v-cu-reductor-si-roata-11227.html) +| [2x IR Speed Sensor LM393](https://sigmanortec.ro/Senzor-viteza-IR-LM393-p125686023) x2 | Optical encoder reading, counts pulses from encoder discs to compute RPM | [16.22 RON](https://sigmanortec.ro/Senzor-viteza-IR-LM393-p125686023) | +| [L298N Dual H-Bridge](https://sigmanortec.ro/Punte-H-Dubla-L298N-p125423236) | Motor driver, controls speed (PWM) and direction of both motor sides | [8.96 RON](https://sigmanortec.ro/Punte-H-Dubla-L298N-p125423236) | +| [MPU-6500 Accelerometer & Gyroscope](https://sigmanortec.ro/Modul-Accelerometru-Giroscop-I2C-MPU-6500-6-axe-p136248782) | 6-axis IMU, measures tilt angle via complementary filter (I2C, 0x68) | [9.92 RON](https://sigmanortec.ro/Modul-Accelerometru-Giroscop-I2C-MPU-6500-6-axe-p136248782) | +| [HC-06 Bluetooth Module](https://sigmanortec.ro/Modul-bluetooth-HC-06-p125923853) | Bidirectional wireless UART, receives keyboard commands, sends telemetry JSON | [25.13 RON](https://sigmanortec.ro/Modul-bluetooth-HC-06-p125923853) | +| [OLED SSD1306 0.96" I2C](https://sigmanortec.ro/display-oled-096-i2c-iic-alb) | On-board display, shows RPM, tilt, obstacle distance, state, load level (I2C, 0x3C) | [14.01 RON](https://sigmanortec.ro/display-oled-096-i2c-iic-alb) | +| [2x HC-SR04 Ultrasonic Sensor](https://sigmanortec.ro/Senzor-ultrasunete-HC-SR04-p125423514) x2 | Obstacle detection, front and rear, GPIO trigger/echo | [18.80 RON](https://sigmanortec.ro/Senzor-ultrasunete-HC-SR04-p125423514) | +| [18650 Battery Holder 2S](https://sigmanortec.ro/suport-acumulatori-18650-2s) | Holds 2x 18650 cells in series, 7.4V output for L298N and STM32 | [5.74 RON](https://sigmanortec.ro/suport-acumulatori-18650-2s) | +| [2x Li-Ion Samsung 18650 3.6V 3450mAh 8A](https://www.emag.ro/acumulator-li-ion-samsung-18650-3-6v-3450mah-8a-cu-borne-joase-si-fara-bms-model-inr18650-35e-3450ma-lincr18650-35e/pd/DWVV74MBM/) | Batteries to provide voltage for the motors and for the board | [63 RON](https://www.emag.ro/acumulator-li-ion-samsung-18650-3-6v-3450mah-8a-cu-borne-joase-si-fara-bms-model-inr18650-35e-3450ma-lincr18650-35e/pd/DWVV74MBM/) | +| [Battery charger](https://www.emag.ro/incarcator-dublu-pentru-acumulator-baterie-reincarcabila-4-2v-1000ma-li-ion-ultrafire-18650-10440-14500-16340-17335-17500-17670-18500-0201/pd/DMG7FVBBM/) | Charges the Li-ion batteries | [35 RON](https://www.emag.ro/incarcator-dublu-pentru-acumulator-baterie-reincarcabila-4-2v-1000ma-li-ion-ultrafire-18650-10440-14500-16340-17335-17500-17670-18500-0201/pd/DMG7FVBBM/) | +| 3x LED (red/yellow/green) + resistors | Visual motor effort indicator | 0 RON (owned) | +| [Female-Female jumper wires](https://sigmanortec.ro/40-fire-Dupont-10cm-Mama-Mama-p129872525) | Wires for connections | [7.73 RON](https://sigmanortec.ro/40-fire-Dupont-10cm-Mama-Mama-p129872525) | +| [Male-Female jumper wires](https://sigmanortec.ro/40-fire-Dupont-10cm-Tata-Mama-p210855157) | Wires for connections | [7.73 RON](https://sigmanortec.ro/40-fire-Dupont-10cm-Tata-Mama-p210855157) | +| Male-Male jumper wires | Wires for connections | 0 RON (owned) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32U5 | PWM, I2C, UART, GPIO, Timer drivers | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Spawning and running concurrent tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers and delays | Task scheduling at fixed frequencies | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives | Mutex and Channel for inter-task shared state | +| [ssd1306](https://github.com/rust-embedded-community/ssd1306) | OLED SSD1306 driver | I2C display rendering | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text and shapes on OLED | +| [heapless](https://github.com/rust-embedded/heapless) | No-alloc data structures | String/Vec without heap allocation | +| [defmt](https://github.com/knurling-rs/defmt) + defmt-rtt | Logging framework | Debug output via probe | +| [libm](https://github.com/rust-lang/libm) | Math functions (no_std) | atan2, sqrt for complementary filter | +| Python pyserial | Serial communication | PC-side script to receive telemetry and send commands over Bluetooth | +| Python matplotlib + tkinter | Desktop GUI & Plotting | Live dashboard with telemetry and PID | + +## Links + +1. [Embassy-rs documentation](https://embassy.dev) +2. [STM32 Nucleo-U545RE-Q user manual](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) +3. [MPU-6500 datasheet](https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6500/) +4. [SSD1306 OLED driver crate](https://github.com/rust-embedded-community/ssd1306) +5. [L298N datasheet](https://www.st.com/resource/en/datasheet/l298.pdf) +6. [HC-SR04 ultrasonic sensor guide](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf) diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/schema_bloc.svg b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/schema_bloc.svg new file mode 100755 index 00000000000..da1a62b7b4d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/schema_bloc.svg @@ -0,0 +1,3 @@ + + +
Baterie 18650 (2S  7.4V)
Baterie 18650...
Driver motoare L298N
Driver motoar...
Alimentare
7.4V
Alimentare...
Putere
Motoare
Putere...
Motoare DC stanga/dreapta
Motoare DC...
Motoare DC stanga/dreapta
Motoare DC...
Putere
Motoare
Putere...
STM32U545 RE-Q
STM32U545 RE...
PWM (viteza) + GPIO (directie)
PWM (viteza) +...
Label
Label
Alimentare 5V
Alimentare 5V
UART TX/RX
UART TX/RX
Modul Bluetooth HC-06
Modul Blue...
Alimentare
5V
Alimentare...
GPIO
TRIG/ECHO
GPIO...
Senzori ultrasonici HC-SR04 (x2)
Senzori ultra...
Alim 5V
Alim 5V
Encoder LM393 (x2)
Encoder LM3...
GPIO EXTI/PULSE
GPIO EXTI/...
Alim 3.3V
Alim 3.3V
IMU
MPU-6500
IMU...
I2C (SDA/SCL)
I2C (SDA/S...
Display OLED SSD1306
Display OL...
I2C (SDA/SCL)
I2C (SDA/S...
3.3V
3.3V
3.3V
3.3V
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/software_diagram_colored.svg b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/software_diagram_colored.svg new file mode 100755 index 00000000000..27a2026cb55 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/andrei.rusanescu/software_diagram_colored.svg @@ -0,0 +1,3 @@ + + +
enocder_left
encoder_right
enocder_left...
pid_task (5Hz)

1. LPF encoder -> filtered_rpm
2. Slope feed-forward(Ay)
3. Auto-calibration
4. PI control -> PID comp
5. Yaw mixer (Gz):
  • PID_COMP_LEFT
  • PID_COMP_RIGHT
6. Publishes SLOPE_COMP_LOAD_PERCENT
pid_task (5Hz)...
EXTI edges
EXTI edges
ENC_L/R_TICKS
ENC_L/R_TICKS
imu_task (50Hz)
imu_task (50Hz)
IMU_AX/AY/AZ 
IMU_GZ, IS_TURNING
IMU_AX/AY/AZ...
display_task (2Hz)

SSD1306 OLED
128x64px
display_task (2Hz)...
I2C (shared)  Bus Mutex
I2C (shared)...
DIST_FRONT/REAR_CM
DIST_FRONT/REAR_CM
ENC_L/R_TICKS
LOAD_PERCENT
ENC_L/R_TICKS...
PID_COMP
SLOPE_COMP
POWER_MODE
PID_COMP...
main - motor loop (50Hz)

CMD_CHANNEL <- BT
ESTOP override
base_speed + comp_L/R + slope

main - motor loop (50Hz)...
PID_COMP_L/R
SLOPE_COMP
PID_COMP_L/R...
L298N
H-Bridge
L298N...
TIM15 PWM GPIO direction
TIM15 PWM GPIO d...
4x DC motors
4x DC moto...
IN1-IN4 GPIO
IN1-IN4 GP...
distance_task (8Hz)

front sensor
30ms gap
rear sensor
distance_task (8Hz)...
DIST_FRONT_CM
ESTOP_FRONT
DIST_FRONT_CM...
DIST_REAR_CM
ESTOP_REAR
DIST_REAR_CM...
bluetooth_task
(async RX)
bluetooth_task...
CMD_CHANNEL
CMD_CHANNEL
IMU_AY | IMU_GZ
IMU_AY | IMU_GZ
telemetry_task (10Hz TX)
CSV over BT
telemetry_task (10Hz...
LOAD_PERCENT
PID_COMPENSATION
IMU_AX/AY/GZ
SLOPE_COMP
LOAD_PERCENT...
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/arhitectura.webp b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/arhitectura.webp new file mode 100644 index 00000000000..ba16d6e55cf Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/arhitectura.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/index.md new file mode 100644 index 00000000000..aea3945a3a6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/index.md @@ -0,0 +1,53 @@ +# **Unitate de Monitorizare a Mediului cu Autonomie Solara** + +:::info + +*Author:* Anemona Georgia Popescu \ +*GitHub Project Link:* [anemona.popescu/website](https://github.com/UPB-PMRust-Students/acs-project-2026-ds2mon) + +::: + +--- + +## Descriere +Proiectul implementeaza un sistem embedded fiabil pe microcontroller-ul **STM32U545RE-Q**, progrmat in Rust. Sistemul colecteaza date in timp real de la senzori de vant, umiditate, index UV, altitudine, presiune barometrica. Dispozitivul asigura functionare autonoma prin alimentare solara, integrand un circuit de incarcare si acumulator Li-Ion. Datele sunt afisate local pe un display si transmise prin interfata seriala catre PC. Sistemul include un mecanism de siguranta prin alertare sonora PWM, declansat automat la depasirea pragurilor critice de umiditate sau presiune. + +## **Motivatia** +Motivatia mea a constat in dorinta mea de a folosi in cadrul acestui proiect un panou solar. Pornind de la acest aspect, am ajuns la ideea dezvoltarii unei solutii de monitorizare ambientala complet autonome, care sa fie capabila sa functioneze in locatii izolate sau greu accesibile. Alegerea senzorilor si a parametriilor meteorologici a fost facuta astfel incat sa pot sa creez un tablou climatic complex + +## **Arhitectura** +![arhitectura proiectului](./arhitectura.webp) +## **Hardware** +1. Microcontroller si baza + * **STM32U545RE-Q** + * Breadboard + * jumpers +2. Senzori + + Pentru a-mi fi mai usor am incercat sa aleg niste senzori care folosesc I2C pentru a avea deja crates + * **BMP280** - presiune barometrica si altitudine + * **GY-302 BH1750** - Intensitate UV + * **Ventilator PC cu senzor** - Pe post de anemometru +3. Management Energetic + * **Panou Fotovoltaic** - 6V / 3.5W + * **Modul TP4056** - pentru incarcare acumulatori Litiu 5V/1A + * **Li-Ion 18650** - acumulator + * **Modul ridicator de tensiune MT3608** + +4. Interfata si feedback + * **OLED 0.96"** - display local prin I2C + * **Buzzer pasiv** + +## *Schematic* +![schematic](./schematic.webp) + +## **Software** +| Librarie | Rol | Protocol/Funcție | +| :--- | :--- | :--- | +| `embassy-executor` | async executor ightweight pentru embedded | Gestiune GPIO, I2C, PWM | +| `embassy-stm32` | pentru STM32U5 | Gestiune GPIO, I2C, PWM | +| `embassy-time` | async time management | Gestiune intervale de esantionare a datelor si temporizarea semnalelor sonore de alerta | +| `bme280-rs` | Driver Senzor | Citire Umiditate/Presiune | +| `ssd1306` | Driver Ecran | Afisare date pe OLED | +| `embedded-graphics` | Randare Grafica | Desenare text si forme pe display-ul OLED| + diff --git a/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/schematic.webp new file mode 100644 index 00000000000..a84da6befc8 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/anemona.popescu/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/index.md new file mode 100644 index 00000000000..1bd7c8df793 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/index.md @@ -0,0 +1,104 @@ +# Braille Display +A mini e-reader for Braille alphabet + + +:::info + +**Author**: Alexandra Prigoreanu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-aprigoreanu20 + +::: + + + +## Description + +The purpose of the project is to build a Braille display, which loads content from an SD card and outputs the coresponding Braille letters on the display. The goal is to allow visually impaired people to read file contents using a device that has similar functionalities to that of a classic e-reader. + +## Motivation + +Over the last 20 years, E-readers have become a practical solution to encourage reading. Their lightweight design and ease of use made them a convenient alternative to purchasing and storing a large collection of printed books. This is especially relevant for blind people, as they require specially produced books using the Braille alphabet. This process can be both time-consuming, as well as expensive. E-readers offer an efficient solution by providing access to a wide range of books for visually impaired people. + +## Architecture + +![Architecture Diagram](./schematics/pm_diagram.webp) + +### Software achitecture: +Software will be written in Rust, using Embassy. The main logic components are: +- input: read button input (next / previous page logic), read data source (from SD card) +- Braille encoder: convert ASCII characters to Braille letter pattern +- Display: convert Braille pattern to GPIO signals + +## Log + + +### Week 20 - 26 April +Researched mechanical solutions for Braille pins + +### Week 5 - 11 May +- Purchased components +- Built the circuit + +### Week 12 - 18 May +- Tested all components +- Wrote software part of the project + +### Week 19 - 25 May +- Fixed last minute issues +- Finishing touches + +## Hardware + + +### Hardware Components: +- microcontroller: STM32 Nucleo-U545RE-Q with ARM Cortex-M33 core +- input system: SD card (and a SD card module for communication with the MCU), user input buttons (next / previous page) +- LCD display: displays the character currently shown on the Braille display for easy testing +- actuation system: 6 push-pull solenoids per Braille letter +- power system: 12V external supply for powering the solenoids + +### Schematics + +![Schematic Diagram](./schematics/pm_schematics.webp) + +### Bill of Materials + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/resource/en/data_brief/nucleo-c031c6.pdf) | Microcontroller | [Provided by university](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf043yhXebcoAqw1Iff8pYQm8&gclid=CjwKCAjwn4vQBhBsEiwAq3hhN_h0Pu1D5L2QilgHGkEgC0pYCNrOPTKM_4GwgZndlKvavfXNY44vDBoCf8MQAvD_BwE) | +|[12V Push Pull Solenoids](https://www.hobbytronics.co.za/Content/external/1274/D2512640695.pdf) | The actuation system for raising and lowering the Braille pins | [6x24 RON](https://sigmanortec.ro/en/electromagnetic-piston-jf-0530b-with-solenoid-12v-push-pull) | +|[IRLZ44NPBF N-MOSFET TRANSISTOR](https://www.tme.eu/Document/71cf1899624764088671ce6de5d15eb4/irlz44n.pdf) | Acts as a switch between the 12V power system for the solenoids and the logical control from the MCU | [6x4.52 RON](https://www.tme.eu/ro/details/irlz44npbf/tranzistori-canal-n-tht/infineon-technologies/) | +|[1N4007 Flyback Diode](https://www.alldatasheet.com/datasheet-pdf/view/14624/PANJIT/1N4007.html) | Protects the MCU from higher current coming from 12V power supply | [6x4.52 RON](https://www.optimusdigital.ro/en/diodes/7457-dioda-1n4007.html?gad_source=1&gad_campaignid=19615979487&gbraid=0AAAAADv-p3BnFuc6ibFlpEHe_cuA18OsU&gclid=CjwKCAjwn4vQBhBsEiwAq3hhNxS2gEkTvwjruVyPiq5TcYVGZN2fPa5pg4qdPRYverdqT5pWP5pvghoCgqUQAvD_BwE) | +|[External Power Supply](https://www.emag.ro/sursa-alimentare-12v-3a-36w-dc-5-5x2-5mm-jfgtew-psu-12v-3a/pd/DKSWQD2BM/?ref=history-shopping_487342570_156063_1) | Provides external power to the 6 solenoids | [37 RON](https://www.emag.ro/sursa-alimentare-12v-3a-36w-dc-5-5x2-5mm-jfgtew-psu-12v-3a/pd/DKSWQD2BM/?ref=history-shopping_487342570_156063_1) |\ +| [MicroSD Module](https://www.scribd.com/document/713821680/Datasheet-MicroSD-Module) | Bridges communication over I2C between MCU and microSD card | [4.38 RON](https://sigmanortec.ro/en/microsd-module) | +| [LCD Screen](https://www.alldatasheet.com/datasheet-pdf/view/2215051/DFROBOT/LCD1602.html) | Displays the same character on screen for as the one on the Braille display | [≈23 RON](https://www.emag.ro/display-lcd-2-x-16-cu-convertor-i2c-80-x-35-mm-verde-albastru-negru-2-e-001/pd/DHRJ0LMBM/?ref=history-shopping_488462707_116388_1) | +| [Breadboard](https://cdn.sparkfun.com/datasheets/Prototyping/breadboard.pdf) | Links components | [6.68 RON](https://www.emag.ro/placa-test-breadboard-400-ai059-a-s69/pd/D5WBP7MBM/?cmpid=146414&utm_source=google&utm_medium=cpc&utm_campaign=(RO:Whoop!)_3P-Y_%3e_Jucarii_hobby&utm_content=79559830074&gad_source=1&gad_campaignid=2078923891&gbraid=0AAAAACvmxQju_-5kCgI0zuYMG_czWNv7o&gclid=Cj0KCQjwzqXQBhD2ARIsAKrIeU_L4OOHxJEEV4YuFYvaqBnYcNX1SfWxlMkFc0cRrBv4U0NG-aLphYcaAkNfEALw_wcB) | + + + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Abstraction Layer | HAL for bridging interaction between STM32 MCU and Rust software | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor | Schedules and runs async tasks | +| [embassy_time](https://docs.rs/embassy-time/latest/embassy_time/) | Timers and delays | Delays for LCD initialization and SPI device | +| [embassy_sync](https://docs.embassy.dev/embassy-sync/0.8.0/default/index.html) | Synchronization primitives for inter-task communication | Used to coordinate events between tasks | +| [embedded_hal_bus ](https://docs.rs/embedded-hal-bus/latest/embedded_hal_bus/) | Allows bus sharing between devices | Wraps SPI bus so that SD card driver can read it | +| [hd44780_driver ](https://docs.rs/hd44780-driver/latest/hd44780_driver/) | Driver for HD44780 LCD display | Interface to HD44780 LCD | +| [embedded_sdmmc ](https://docs.rs/embedded-sdmmc/latest/embedded_sdmmc/) | SD card filesystem driver | Allows reading from SD card | +| [defmt](https://github.com/knurling-rs/defmt) | Console printing | Allows printing to console for debug purposes | + +## Links + + + +1. [Automatic Braille Display](https://www.sciencebuddies.org/science-fair-projects/project-ideas/Elec_p109/electricity-electronics/refreshable-braille-display) +2. [Braille News Reader](https://medium.com/exploring-android/braillebox-building-a-braille-news-reader-with-android-things-f848fe6de596) diff --git a/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_diagram.webp new file mode 100644 index 00000000000..92d4af6f4e3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_schematics.webp new file mode 100644 index 00000000000..065d3f18693 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/aprigoreanu/schematics/pm_schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/arhitecture_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/arhitecture_schematic.webp new file mode 100644 index 00000000000..05628c04619 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/arhitecture_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/index.md b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/index.md new file mode 100644 index 00000000000..96310f622d9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/index.md @@ -0,0 +1,141 @@ +# Autonomous Vehicle with Dynamic Path Replanning +**An autonomous robotic system capable of navigating along a predefined path and dynamically adapting its route in real time to avoid obstacles.** + +:::info +**Author:** ariana.pelcaru \ +**GitHub Project Link :** https://github.com/UPB-PMRust-Students/acs-project-2026-aryuqq +::: + +## Description + +The Autonomous Vehicle with Dynamic Path Reconfiguration demonstrates intelligent navigation in environments with unpredictable obstacles. Under normal conditions, it follows a predefined path using embedded control logic. + +The vehicle continuously monitors its surroundings with distance sensors to detect obstacles in real time. When an obstacle is detected, the system analyzes the data, recalculates an alternative route, and adjusts its movement to safely avoid collisions while continuing toward its destination. + +## Motivation + +Autonomous vehicles have the potential to significantly improve safety and efficiency in real-world transportation systems. Human error remains one of the main causes of accidents, especially in dynamic and unpredictable environments where quick reactions are required. +This project was inspired by the idea of reducing such risks by enabling a system that can perceive obstacles and react instantly without human intervention. + +## Architecture +The main architectural components of the autonomous vehicle system are: + +- **STM32 Main Controller (Nucleo Board)** – central processing unit that runs the real-time control loop, handles sensor input, decision-making, and actuator control for navigation. + +- **Ultrasonic Sensor (HC-SR04)** – used for real-time obstacle detection in front of the robot; triggers avoidance logic when distance is below a defined threshold. + +- **Motor Driver (L298N) + DC Motors** – provides bidirectional control of the drive system, allowing forward movement, reverse motion, and turning maneuvers based on navigation decisions. + +- **Servo Motor (Steering/Scanning System)** – controls directional scanning of the environment, enabling the system to evaluate left/right paths when obstacles are detected. + +- **ST7735 TFT Display** – visual output module used to render the robot’s map, movement trail, obstacle positions, and system status messages in real time. + +- **Buzzer (Audio Alert System)** – provides immediate acoustic feedback when an obstacle is detected or when avoidance behavior is triggered. + +- **Power Supply (Battery Pack)** – ensures autonomous operation of the system by powering all modules, including motors, sensors, and microcontroller. + + +![alt text](arhitecture_schematic.webp) + +## Project Photos + +![alt text](photo1.webp) + +![alt text](photo2.webp) + +![alt text](photo3.webp) + +## Log + +### Week 20-26 Apr +- This week, I focused on defining the overall architecture of the autonomous vehicle project based on STM32. I worked on shaping the main system modules (sensing, control, actuation, and user interface) and clarified how they interact in a real-time embedded system. +- I also worked on the project documentation, writing the initial structure and describing the main functionalities and expected system behavior. +- In addition, I made a first draft of the required components (HC-SR04 sensor, L298N motor driver, DC motors, servo motors) and researched their roles in the system. +- Connected the Hardware +- Tested the sensors + +### Week 11-17 May +- This week, I started the software development for the autonomous vehicle, implementing the main control logic +- I also improved the hardware structure by redesigning the connections and layout to ensure better compatibility and stable operation of all components together. + +### Week 19 - 27 May + +- Completed the software implementation +- Completed the final design +- Finalized the documentation + + +## Hardware + +- **Microcontroller:** STM32 Nucleo Board +- **Sensor:** HC-SR04 Ultrasonic Sensor +- **Actuators:** DC Motors, Servo Motor +- **Motor Driver:** L298N Motor Driver +- **Display:** ST7735 LCD Display +- **Input:** ON/OFF Button +- **Other:** Breadboard, jumper wires, battery pack, Buzzer + + +## Software Design + +### Description + +#### 1. Design Patterns: + +- **Controller / Manager pattern** (Motor control, Display manager, Sensor handler) +- **State machine navigation logic** for autonomous obstacle avoidance +- **Circular buffer processing** for movement trail visualization +- **Event-driven asynchronous execution** using Embassy runtime + +#### 2. Key Features: + +- **Autonomous obstacle detection and avoidance** using ultrasonic distance sensing +- **Real-time navigation decision making** with left/right path evaluation +- **Graphical map visualization** with robot tracking and obstacle marking +- **Servo-based environmental scanning** for route analysis +- **PWM motor speed and steering control** +- **Audio warning system** using buzzer feedback on obstacle detection +- **Continuous position tracking with trail fading effect** + +## Bill of Materials + +### Hardware + +| Device | Usage | Price | Link | +|--------|------|-------|------| +| STM32 Nucleo Board | Main controller | ~50–120 RON | https://ro.rsdelivers.com/product/stmicroelectronics/nucleo-f030r8/stmicroelectronics-stm32-nucleo-64-mcu-development/8029412??cm_mmc=RO-PLA-DS3A-_-google-_-CSS_PMAX_RO_EN_Catch-All-APRIL26-_--_-&matchtype=&&s_kwcid=AL!14853!3!!!!x!!&gclsrc=aw.ds&gad_source=1&gad_campaignid=23736421110&gbraid=0AAAAADxE2BaCPLsfTln0p4lXSlR_I6PeK&gclid=CjwKCAjw5s_QBhAdEiwADD_gBkeMIJsm4ndLVWnCTqbiwNYLKSDluTfOigp-Ow376m_SSJX9eYVeyBoC86YQAvD_BwE | +| HC-SR04 Ultrasonic Sensor | Obstacle detection | ~15 RON | https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=Senzor+Ultrasonic+de+Distan%C8%9Ba+HC-SR04++%28Compatibil+3.3+V+%C8%99i+5+V%29&results=9 | +| L298N Dual Motor Driver | Motor control | ~15 RON | https://www.optimusdigital.ro/en/brushed-motor-drivers/145-l298n-dual-motor-driver.html | +| DC Motors + Wheels Set (4x) | Robot movement | ~50 RON | https://www.emag.ro/set-motoreductor-cu-roata-4-bucati-3874783591881/pd/DMXQ1DYBM/ | +| SG90 Servo Motor | Steering / scanning | ~27 RON | https://www.conexelectronic.ro/senzori-si-module-pentru-platforme-de-dezvoltare/15482-MINISERVOMOTOR-SG90-9G.html | +| LCD 1.8” TFT Display (optional alternative) | Graphical display | ~61 RON | https://www.emag.ro/display-lcd-1-8-inch-general-128x160-digital-3-3v-pentru-arduino-emag-b-gd-0017/pd/D5XYV8YBM/ | +| ON/OFF Button | System control | ~1–2 RON | https://www.optimusdigital.ro/ro/butoane-i-comutatoare/7377-comutator-kcd10-101.html?search_query=Comutator+KCD10-101&results=1 | +| Breadboard | Prototyping | ~5 RON | (Generic component) | +| Dupont Wires (Male-Female) | Connections | ~5 RON | https://www.emag.ro/10-x-fire-dupont-mama-tata-20cm-ai306-s459/pd/DZJ66JBBM/ | +| Dupont Wires (Male-Male) | Connections | ~5 RON | https://www.emag.ro/10-x-fire-dupont-tata-tata-20cm-ai308-s451/pd/DV8M9WBBM/ | +| Active Buzzer 3V | Audio feedback / alerts | ~5 RON | https://www.optimusdigital.ro/en/buzzers/635-3v-active-buzzer.html | +| Battery x4 | Power supply | ~88 RON | https://www.optimusdigital.ro/ro/acumulatori-li-ion/13662-us18650vtc5c-2600mah-30a.html?search_query=Murata+US18650VTC5C+2600mAh+-+30A&results=1 | +| Battery Support | Battery holder | ~8 RON | https://www.optimusdigital.ro/ro/suporturi-de-baterii/991-suport-de-baterii-4x18650.html?search_query=Suport+de+Baterii+4x18650&results=2 | + +### Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async runtime for embedded systems | Handles concurrent task execution for sensor reading, obstacle detection, motor control, and display updates | +| [embassy-time](https://github.com/embassy-rs/embassy) | Embedded timing utilities | Manages delays for ultrasonic measurements, motor timing, servo positioning, and display refresh cycles | +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32/) | STM32 Hardware Abstraction Layer | Provides access to GPIO, PWM timers, SPI communication, and peripheral initialization | +| [embassy-stm32::gpio](https://docs.embassy.dev/embassy-stm32/) | GPIO control module | Controls motor driver pins, trigger signal, buzzer output, and reads ultrasonic echo input | +| [embassy-stm32::spi](https://docs.embassy.dev/embassy-stm32/) | SPI communication interface | Drives communication with the ST7735 display | +| [embassy-stm32::timer::simple_pwm](https://docs.embassy.dev/embassy-stm32/) | PWM timer control | Generates PWM signals for DC motor speed control and servo positioning | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Embedded hardware abstraction traits | Standardized peripheral access across drivers | +| [embedded-hal-bus](https://github.com/rust-embedded/embedded-hal) | Shared bus abstraction | Provides exclusive SPI device access for display communication | +| [mipidsi](https://github.com/almindor/mipidsi) | TFT display driver | Controls the ST7735s display initialization and rendering | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics rendering library | Draws robot map, obstacle markers, movement trail, countdown screen, and interface graphics | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight embedded logging framework | Logs robot state, distance measurements, obstacle detection, and navigation decisions | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt logs | Sends debugging information to host during execution | +| [panic-probe](https://github.com/knurling-rs/panic-probe) | Panic handler for embedded debugging | Reports runtime crashes and diagnostic errors during development | + +# Links +1. [Lab Materials](https://pmi.acs.pub.ro/) +2. [About Rust](https://docs.rust-embedded.org/book/) +3. [Youtube_Video](https://www.youtube.com/watch?v=kPSBpfUpHt0) diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo1.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo1.webp new file mode 100644 index 00000000000..ca5ff1a21b5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo2.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo2.webp new file mode 100644 index 00000000000..d86a8861224 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo3.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo3.webp new file mode 100644 index 00000000000..08271455ccb Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.pelcaru/photo3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/color_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/color_sensor.webp new file mode 100644 index 00000000000..8238adc989f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/color_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/diagrama_pm.svg b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/diagrama_pm.svg new file mode 100644 index 00000000000..48cc94581cb --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/diagrama_pm.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:Sheet_1REV:1.0Date:2026-05-13Sheet:1/1Drawn By:aryanasadeghif44Company:Your CompanyNUCLEO-F401REU1.1D09_1D19_2D29_3D39_4D49_5D59_6D69_7D79_8NUCLEO-F401REU1.3IOREF6_2RESET6_3+3V36_4+5V6_5GND6_6GND6_7VIN6_8NUCLEO-F401REU1.4D85_1D95_2D105_3D115_4D125_5D135_6GND_S65_7AREF5_8D145_9D155_10NUCLEO-F401REU1.5A08_1A18_2A28_3A38_4A48_5A58_6HX711 LOAD CELL AMPLIFIER HX711 BREAKOUT PIN EDITU2RED/E+1BLK/E-2WHT/A-3GRN/A+4YLW/SD52.7-5/VCC7DAT8CLK9GND10Adafruit TCS34725P1GND1GND2VIN3GND43V35SCL6SDA7INT8LED9DRIVER-ULN2003#MC1IN.1J1.1GNDJ3.1VCC.1J3.2VCC.2J3.3MOT+J3.4OUT.AJ2.1IN.2J1.2IN.3J1.3IN.4J1.4IN.5J1.5IN.6J1.6IN.7J1.7OUT.BJ2.2OUT.CJ2.3OUT.DJ2.4OUT.EJ2.5OUT.FJ2.6OUT.GJ2.7MOT.+P3.5MOT.AP3.4MOT.BP3.3MOT.CP3.2MOT.DP3.1LoadcellConnectorP2E+1E-2A+3A-428BYJ-48MOT_LSRstepper28BYJ-481122334455SG90-SERVOU3D1315v2Gnd3ST7735-IPS-0.96 COPYU4BKL1CS2DC3RST4SDA5SCL6VCC7GND8DAT_CANTARDAT_CANTARVCC#PWR1VCC1VCC#PWR2VCC1VCC#PWR3VCC1VCC#PWR4VCC1VCC#PWR5VCC1VCC#PWR6VCC1VCC#PWR7VCC1VCC#PWR8VCC1GNDPWR#PWR9GNDPWR1GNDPWR#PWR10GNDPWR1GNDPWR#PWR11GNDPWR1GNDPWR#PWR14GNDPWR1GNDPWR#PWR15GNDPWR1GNDPWR#PWR16GNDPWR1GNDPWR#PWR18GNDPWR1CLK_CANTARCLK_CANTARTFT_CSTFT_CSTFT_DCTFT_DCTFT_RSTTFT_RSTTFT_SDATFT_SDATFT_SCLTFT_SCLMOT_1MOT_2MOT_3MOT_4MOT_1MOT_2MOT_3MOT_4SERVO_PWMSERVO_PWMVCC#PWR12VCC1VCC#PWR13VCC1I2C_SDAI2C_SCLI2C_SCLI2C_SDA \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/display.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/display.webp new file mode 100644 index 00000000000..96b4e852efa Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/display.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/index.md b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/index.md new file mode 100644 index 00000000000..c49646d9e34 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/index.md @@ -0,0 +1,113 @@ +# Automated Optical Sorting System +An automated system designed to identify and sort objects based on their optical properties and weight using an STM32 microcontroller and Rust (Embassy). + +:::info +**Author:** Ariana Sadeghi \ +**GitHub Project Link:** [GitHub Repo](https://github.com/UPB-PMRust-Students/acs-project-2026-arianasadeghi) +::: + +## Description +The project consists of an industrial-style sorting line that uses a TCS34725 color sensor to detect the RGB signature of objects and an HX711 load cell for weight validation. Based on the sensor data, a custom calibration algorithm classifies the items. A mechanical arm (SG90 servomotor) acts as the sorting mechanism, while a stepper motor drives the conveyor belt continuously. The system's status and detected colors are visually fed back in real-time through an SPI TFT display. + +## Motivation +I chose this project to explore the integration of multiple digital communication protocols (I2C, SPI) and precise motor control (PWM and Stepper sequences) in a real-time automation scenario using the Embassy async framework in Rust. + +## Architecture +**Main Components** +* **Sensing Module:** TCS34725 Color Sensor (I2C) for optical recognition and HX711 Amplifier with a Load Cell for weight detection. +* **Control Logic:** Continuous polling loop acting as a state machine for detection, classification, and precise timing delays. +* **Actuation Module:** 28BYJ-48 Stepper motor (with ULN2003 driver) for the conveyor belt and an SG90 Servomotor (PWM) for the sorting arm. +* **User Interface:** TFT LCD display controlled via SPI to show current calibration data and detected colors. + +## Log +* **Week 5 - 11 May:** Project idea selection and hardware requirements gathering. Basic component testing (Stepper and Servo motors) and pinout planning. +* **Week 12 - 18 May:** Color sensor (TCS34725) I2C integration, TFT display SPI setup, and writing the initial color calibration logic. +* **Week 19 - 25 May:** Finalizing the state machine integration in Rust, fine-tuning the RGB calibration thresholds for specific object colors, adjusting servo timings to sync with the conveyor belt, and completing GitHub documentation. + +## Hardware +The system is built around an STM32 Nucleo board programmed in Rust. +The main peripherals include: +* **TCS34725:** RGB Color Sensor for object detection. +* **HX711:** Load cell amplifier with a 1kg/5kg load cell. +* **1.8" TFT Display:** SPI-driven screen for visual feedback. +* **28BYJ-48 Stepper Motor & ULN2003:** Drives the conveyor belt. +* **SG90 Servomotor:** Acts as the sorting arm. + +## Schematics +![Schema Hardware](./diagrama_pm.svg) + +## Physical Implementation +Below are the layout views of the fully assembled automated sorting system, showcasing the conveyor alignment, sensor housing, and mechanical integration. + +![Overall System Assembly](./project.webp) +*Figure 1: Overall assembly of the conveyor belt line and electronics integration.* + +![Sensing Zone and Optical Shield](./color_sensor.webp) +*Figure 2: Close-up of the TCS34725 color sensor featuring a custom paper shield to block ambient light reflections.* + +![Sensing Zone with Object](./object_sensor.webp) +*Figure 3: Color sensor actively scanning an object passing underneath on the conveyor belt.* + +![Stepper Motor Drive](./step_motor.webp) +*Figure 4: The 28BYJ-48 stepper motor and mechanical coupling driving the conveyor belt.* + +![Sorting Servo Arm](./servo_in_action.webp) +*Figure 5: SG90 servomotor configured as the sorting arm, positioned to intercept rejected items.* + +![TFT Interface](./object_display_color.webp) +*Figure 6: The 1.8" SPI TFT display providing real-time visual feedback of the detected colors.* + +![TFT Interface Close-up](./display.webp) +*Figure 7: Close-up view of the TFT screen displaying active color recognition.* + +![STM32 Nucleo Wiring](./stm32.webp) +*Figure 8: The STM32 Nucleo board handling all I2C, SPI, and PWM signals asynchronously.* + + +## Bill of Materials + +| Device | Usage | Price | +|---|---|---| +| STM32 Nucleo Board | Main Microcontroller | - | +| TCS34725 Module | Optical/Color Sensing | 22,68 RON | +| HX711 | Weight Sensing | 4,57 RON | +| Load Cell | Weight Sensing | 12,80 RON | +| 1.8" TFT Display | User Interface | 40,62 RON | +| 28BYJ-48 | Conveyor movement | 10,29 RON | +| ULN2003 | Conveyor movement | 4,97 RON | +| SG90 Servomotor | Sorting Arm | 9,49 RON | + +## Software + +**Concurrency & Async Execution** +The software architecture leverages the cooperative multitasking model provided by the Embassy framework in Rust. Since the stepper motor requires precise step impulses every 3ms to maintain constant conveyor speed, a traditional blocking approach (`delay_ms`) would freeze sensor polling and screen updates. By utilizing `async/await` and asynchronous hardware timers (`Timer::after_millis`), the system interleaves the conveyor drive loop, the I2C color polling, and the SPI screen drawing tasks seamlessly. This ensures zero jitter for the motor and deterministic real-time execution without the overhead of a traditional RTOS. + +**System State Machine** +The control loop operates as a finite state machine (FSM) with the following operational transitions: +* **IDLE / SCANNING:** Conveyor belt runs continuously; the system polls the TCS34725 Clear channel waiting for a threshold drop. +* **COLOR_IDENTIFICATION:** Object detected; RGB channels are sampled and evaluated against the software-defined calibration boundaries. +* **WEIGHT_VALIDATION:** The system captures data from the HX711 load cell using a moving average filter to determine and validate the mass. +* **SORTING_ACTION:** A specific PWM duty cycle is sent to the SG90 servomotor after a precise kinematic delay, moving the arm to sort the object. +* **RESET:** The servo returns to its default position (0°), the TFT display resets to idle status, and the FSM returns to the scanning state. + +**High-Level Logic** +Practically, the software follows these stages during a successful sorting cycle: +1. **Movement:** The stepper motor runs continuously using a non-blocking sequence to drive the conveyor belt. +2. **Detection:** Continuous polling of the TCS34725 sensor via I2C to read Clear, Red, Green, and Blue light channels, alongside weight readings from the HX711. +3. **Decision:** Comparing RGB values against preset, fine-tuned thresholds to identify specific colors (e.g., White, Yellow, Pink, Purple, Brown). +4. **Action:** Updating the TFT display with the detected color and triggering a precise PWM sequence to extend and retract the Servo arm at the exact moment the object passes. + +**Libraries and Drivers** + +| Library | Description | Usage | +|---|---|---| +| `embassy-stm32` | Hardware Abstraction (HAL) | Peripheral control (I2C, SPI, PWM, GPIO) | +| `embassy-time` | Time Management | Delay management and timing for the stepper/servo | +| `defmt` / `defmt-rtt` | Logging Framework | Real-time debugging and color calibration output | + + +## Links +* [Embassy Rust Documentation](https://embassy.dev/) +* [TCS34725 Color Sensor Datasheet](https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf) +* [HX711 Datasheet](https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf) +* [Laboratories text](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_display_color.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_display_color.webp new file mode 100644 index 00000000000..4624df42fb2 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_display_color.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_sensor.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_sensor.webp new file mode 100644 index 00000000000..710ce0064bf Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/object_sensor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/project.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/project.webp new file mode 100644 index 00000000000..de6c0a55e96 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/project.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/servo_in_action.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/servo_in_action.webp new file mode 100644 index 00000000000..cae1f825b42 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/servo_in_action.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/step_motor.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/step_motor.webp new file mode 100644 index 00000000000..83f3f3c2bd4 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/step_motor.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/stm32.webp b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/stm32.webp new file mode 100644 index 00000000000..65ee6829014 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ariana.sadeghi/stm32.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp.webp new file mode 100644 index 00000000000..0dea95275b8 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_1.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_1.webp new file mode 100644 index 00000000000..7d1d364dbc7 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_2.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_2.webp new file mode 100644 index 00000000000..b3326d7ad35 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_3.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_3.webp new file mode 100644 index 00000000000..62962b81014 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_4.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_4.webp new file mode 100644 index 00000000000..305aa967659 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_4.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_5.webp b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_5.webp new file mode 100644 index 00000000000..64627cb1c18 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/images/laser_harp_5.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/index.md b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/index.md index bd1618d9458..ef88c3c0055 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/beatrice.salavastru/index.md @@ -12,12 +12,21 @@ A laser-based musical instrument that converts interrupted light beams into soun ## Description -A laser harp system with 8 laser beams acting as strings. When a beam is interrupted, a sensor detects the change and the microcontroller generates the corresponding musical note. The sound can be played through a speaker or sent to a computer for external audio playback. +A laser harp system with 8 laser beams acting as strings. Each beam is aligned with a phototransistor. When the user interrupts one of the beams, the STM32 detects the event and plays the corresponding note through a speaker. ## Motivation As someone interested in both music and technology, I want to build an interactive system that translates physical gestures into sound. This project allows me to explore working with optical sensors, handling real-time input from multiple sources, and generating audio signals on a microcontroller. It also gives me the opportunity to integrate hardware and software into a complete system, while creating a visually engaging and intuitive user experience. +## Demo + + + ## Architecture ![Architecture Diagram](images/laser_harp_architecture.svg) @@ -32,14 +41,37 @@ Designed and built the wooden frame for the laser harp. Planned the layout of la ### Week 12 - 18 April Ordered all hardware components from TME and Sigmanortec. +### Week 4 - 10 May +Built and tested the electronic circuit using a simple test program. The goal of this stage was to verify that the laser modules, phototransistors, STM32 inputs and audio amplifier worked correctly before integrating the final software. + +### Week 11 - 17 May +Implemented the sample-based audio playback system. The project was changed from simple frequency generation to playback of RAW audio samples stored directly in the STM32 Flash memory. The system now works as a standalone instrument: the audio is played directly through the speaker, without depending on a USB connection to the laptop for sound generation. ## Hardware -The project uses an STM32 Nucleo-U545RE-Q as the main microcontroller. Laser modules act as light sources, while phototransistors detect beam interruptions. The signals are processed using ADC inputs. An LM386-based audio module drives a speaker for sound output. A toggle switch selects between local audio and external output, while a rocker switch controls power. The system is powered by a 5V supply and mounted on a custom wooden frame. +The project is built around the **STM32 Nucleo-U545RE-Q**, which reads the sensors and controls the audio output. + +The physical harp uses 8 laser modules, each aligned with a phototransistor. The phototransistors are connected to GPIO pins configured as external interrupt inputs. When a laser beam is interrupted, the corresponding input changes state and the STM32 detects the event as a string trigger. + +For audio output, the STM32 generates a high-frequency PWM signal on `PB3 / TIM2_CH2`. This signal is passed through a simple analog filtering stage and then sent to an **LM386 audio amplifier**, which drives an 8Ω speaker. + +The structure is mounted on a custom wooden frame that keeps the lasers and sensors aligned. + +### Hardware Photos + +![Laser Harp Front View](images/laser_harp_2.webp) + +![Laser Harp Front View - Night](images/laser_harp_1.webp) + +![Laser Alignment](images/laser_harp_5.webp) + +![Internal Circuit](images/laser_harp_4.webp) + +![Internal Circuit](images/laser_harp_3.webp) - +![Circuit Schematic](images/laser_harp.webp) ### Bill of Materials @@ -56,7 +88,6 @@ Place your KiCAD or similar schematics here in SVG format. --> | Capacitors 100nF | Noise filtering | 6.47 RON | | Capacitors 0.1µF | Decoupling | 8.16 RON | | Rocker switch | Power ON/OFF | 4.43 RON | -| Toggle switch (SPDT) | Mode selection | 5.58 RON | | Power supply 5V 2A | Power source | 22.61 RON | | DC jack connector | Power connection | 3 RON | @@ -66,13 +97,13 @@ Place your KiCAD or similar schematics here in SVG format. --> | Library | Description | Usage | |---------|-------------|-------| -| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 HAL for Embassy | Used for GPIO, ADC and timers/PWM | -| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs the main application logic | -| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | Used for timing and sensor polling | -| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | Standard interface for peripherals | -| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Used for debugging and logging | -| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT logging transport | Sends logs to the PC | -| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Used for debugging crashes | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 HAL for Embassy | Used for GPIO/EXTI input handling, PWM audio output, timer configuration and clock setup | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs the main application and the separate laser string monitoring tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | Used for sensor cooldowns and precise audio sample timing | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives | Provides the channel used to send triggered note indices from sensor tasks to the audio loop | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Used for debug and status messages | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT logging transport | Sends debug logs from the board to the PC | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Reports crashes through the debug probe | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/diagrama.svg new file mode 100644 index 00000000000..d6496665f48 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/diagrama.svg @@ -0,0 +1,4 @@ + + + +
Laptop
Laptop
HC-05
HC-05
Water Sensor
Water Sensor
STM32
STM32
Battery for STM32
Battery for STM32
7.4v Battery
7.4v Battery
DC/DC
DC/DC
L298N
L298N
SG90 Servo
SG90 Servo
DC Motor
DC Motor
DC Motor 
DC Motor 
Bait Container
Bait Container
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/index.md b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/index.md new file mode 100644 index 00000000000..b2783ed3cc0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/index.md @@ -0,0 +1,85 @@ +# Smart Fishing Boat + +:::info + +**Author**: Bianca Mircea \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-biancaamircea +::: + + +## Description + +This project is a Bluetooth-controlled smart fishing boat built using an STM32 microcontroller programmed in Rust. +The boat can be controlled using a Bluetooth HC-05 module. It uses two independent DC motors for movement and a servo motor to open a bait container and release the fishing bait. + +## Motivation + +I chose this project because I wanted to combine embedded systems with real-world robotics. +A fishing assistant boat is a practical and fun application of microcontrollers, motor control, and mechanical actuation. + +## Architecture + +![Architecture Diagram](./diagrama.svg) + +The system is composed of the following main components: + +- STM32 microcontroller (main control unit) +- Motor driver module (controls 2 DC motors) +- Two DC motors (propulsion system) +- Servo (catapult mechanism) +- Power supply (battery system) + +### How they connect: + +- STM32 sends PWM signals to motor driver → controls movement +- STM32 controls servo signal → triggers catapult +- Battery powers all components through power distribution circuit + +## Log + + + +### Week 5 - 11 May +- Defined project idea +- Chosen STM32 + Rust as platform + +### Week 12 - 18 May +- Designed basic architecture +- Selected motor + servo components + +### Week 19 - 25 May +- Started firmware implementation in Rust +- Testing motor control logic + +## Hardware + +The project uses embedded hardware components for movement and bait delivery. + +### Schematics + +![Hardware Schematic](./proiect-schematic.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|------|------| +| STM32 Microcontroller | Main controller | 0 RON | +| 2x DC Motors | Boat propulsion | ~40 RON | +| Motor Driver (L298N) | Controls motors | ~20 RON | +| Servo Motor | Catapult mechanism | ~15 RON | +| Battery Pack | Power supply | ~60 RON | +| Waterproof chassis | Boat structure | ~100 RON | + +## Software + +| Library | Description | Usage | +|--------|-------------|------| +| embedded-hal | Rust hardware abstraction layer | GPIO and PWM control | +| stm32f4xx-hal | STM32 HAL for Rust | Microcontroller control | +| cortex-m-rt | Runtime for embedded Rust | Boot and execution | + +## Links + +1. https://docs.rust-embedded.org/book/ +2. https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html +3. https://github.com/rust-embedded/embedded-hal diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/proiect-schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/proiect-schematic.svg new file mode 100644 index 00000000000..92f77c133b7 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca.mircea/proiect-schematic.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 1/1Title: File: proiectbun.kicad_schSheet: /SENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298N+5V+3.3VBT1BatteryGND123456HC-05Conn_01x061234J3Conn_01x04GNDBT2Battery+5V+1-2M1Motor_DCVDDA1VDD11A2PH3A3PB6A4PB3A5PD2A6PC10A7VDDA8VBATB1VSSB2PC13B3PB4B4PC11B5PC12B6VDDUSBB8PC14C1PC15C2PB8C3PA15C4PA14C5PA13C6PA12C7PA11C8PH0D1PH1D2PB7D3PB5D4PA10D5PA9D6PA8D7PC9D8NRSTE1PC0E2PC1E3PC2E4PA0E5PB14E6PC7E7PC8E8VSSAF1PC3F2PA1F3PA4F4PA6F5PB10F6PB15F7PC6F8VDDAG1PA2G2PA5G3PB2G4PB1G5VSSSMPSG6PB13G8VDDH1PA3H2PA7H3PB0H4VLXSMPSH5VDDSMPSH6VDD11H7VDDH8U1STM32U545REIxQ+1-2M2Motor_DCGNDGNDGND+5VGND123J2Conn_01x03+5VVCCKEYRXDVIN_STM32GNDTXDSTATE \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/architecture_diagram.svg deleted file mode 100644 index e065786447f..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/architecture_diagram.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - Architecture - - - - - - - - MPU-6050 - (IMU Sensor) - - - - STM32 Nucleo Board - (Processing Unit) - Nucleo-U545RE-Q - - - - SG90 Servo X - (Tilt axis X) - - - - SG90 Servo Y - (Tilt axis Y) - - - - MicroSD Module - (High Score log) - - - - IR Obstacle Sensor - (Finish line detect) - - - - Power Supply (5V) - 6×AA + MB102 - - - - USB-C / PC - (Flash + Debug) - ST-LINK/V3 - - - - - - - - I2C - - - - PWM - - - - PWM - - - - SPI - - - - GPIO - - - - 5V - - - - 5V (servo power) - - - - USB - - - - - - - - - diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/final_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/final_diagram.svg new file mode 100644 index 00000000000..47492520636 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/final_diagram.svg @@ -0,0 +1,3 @@ + + +
STM32 Nucleo-U545RE

STM32 Nucleo-U545RE
5V & GND
5V & GND
MB102 Power Supply
+ 6xAA Batteries
MB102 Power Supply...
MPU-6050
MPU-6050
Servo Motor X (SG90)
Servo Motor X (SG90)
Servo Motor Y (SG90)
Servo Motor Y (SG90)
MicroSD Card
Module
MicroSD Card...
IR Obstacle Sensor
IR Obstacle Sensor
I2C (PB6=SCL, PB7=SDA)
I2C (PB6=SCL, PB7=SDA)
SPI (PA5, PA6, PA7, PC9)
SPI (PA5, PA6, PA7, PC9)
PWM_X (PA0)
PWM_X (PA0)
PWM_Y (PA1)
PWM_Y (PA1)
IR_OUT (PA4)
IR_OUT (PA4)
+3.3V & GND
+3.3V & GND
Common GND
Common GND
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/labyrinth_schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/labyrinth_schematic.svg new file mode 100644 index 00000000000..0dabefe3fee --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/labyrinth_schematic.svg @@ -0,0 +1 @@ +SVG Image created as labyrinth_schematic.svg date 2026/05/17 18:13:46 Image generated by Eeschema-SVG1234567812345678ABCDEFABCDEFDate:KiCad E.D.A. 9.0.3Rev: 1.0Size: A3Id: 1/1Title: Labyrinth gameFile: labyrinth_schematic.kicad_schSheet: /Bianca-Iulia PETREAPWR_FLAGSDA24SCL23AD09FSYNC11CLKIN1VLOGIC8GND18VDD13INT12AUX_DA6AUX_CL7CPOUT20REGOUT10U2MPU-6050PWR_FLAGBT1Battery (6xAA)~{BOOT0}7~{RESET}14PH029PH131PD24PC038PC136PC235PC337PC472PC544PC642PC757PC840PC939PC101PC112PC123PC1323PC1425PC1527VDD5GND8E5V6GND19IOREF12GND20+3V316GND22+5V18GND47VIN24GND58VBAT33GND77U5V46GND78GND79GND80AVDD45AGND70PA028PA130STLINK_UART_TX/PA273STLINK_UART_RX/PA375PA432PA549PA651PA753PA861PA959PA1071PA1152PA1250STLINK_TMS/PA1313STLINK_TCK/PA1415PA1517PB034PB162PB260STLINK_SWO/PB369PB465PB567PB655PB721PB841PB943PB1063PB1254PB1368PB1466PB1564U1STM32 Nucleo-U545RE-Q1234J4IR obstacle sensor123456J5MicroSD Card Module1234J2MB102 Breadboard Power SupplyPWR_FLAGPWM1+2-3M1Servo - X axisPWM1+2-3M2Servo - Y axisSPI_SCKPWM_YSCLGNDV_BATGNDENIR_OUTSPI_CS+5VSDAGNDSPI_CS+5VSPI_MISOV_BATGNDSPI_MOSISPI_MOSI+5V+3V3PWM_XIR_OUTGND+3V3SPI_MISOSPI_SCK \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final1.webp b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final1.webp new file mode 100644 index 00000000000..ee8596634f9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final2.webp b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final2.webp new file mode 100644 index 00000000000..196fec6bb74 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/images/proiect_final2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/index.md b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/index.md index 5f78b627563..d92df1b988f 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/bianca_iulia.petrea/index.md @@ -1,7 +1,7 @@ # Labyrinth game A physical labyrinth platform that mirrors the orientation of a handheld Nucleo board using IMU sensors and servo actuation. -:::info +:::info **Author**: PETREA Bianca-Iulia \ **GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-biancapetrea16 @@ -18,7 +18,7 @@ The project implements a physical 2-axis (X-Y) labyrinth platform driven by two I chose this project to explore the concept of remote motion mirroring. It requires a precise synchronization between the handheld controller (IMU data processing) and the mechanical platform (PWM actuation). -## Architecture +## Architecture The project is built as a motion mirroring system between the controller and the maze: - **Handheld Controller (Nucleo + IMU)**: Detects pitch and roll angles via I2C. @@ -27,7 +27,7 @@ The project is built as a motion mirroring system between the controller and the - **End-of-Game Logic**: An IR sensor triggers the timer stop. - **Persistence Layer**: An SD card module stores the leaderboard via SPI. - ![Architecture Diagram](images/architecture_diagram.svg) + ![Architecture Diagram](images/final_diagram.svg) ## Log @@ -37,23 +37,42 @@ The project is built as a motion mirroring system between the controller and the - Finalized project theme and received approval. - Researched and ordered all hardware components (IMU, servos, SD module, IR sensor). -### Week 4 - 8 May +### Week 4 - 10 May +- Mapped all pin connections between the Nucleo board, sensors, and actuators. ### Week 12 - 18 May +- Started developing the software implementation in Rust. +- Set up the main code structure and began integrating peripheral drivers. -### Week 19 - 25 May +### Week 18 - 24 May +- Implemented the final core control loop featuring asynchronous multitasking powered by Embassy. +- Developed a robust digital signal processing pipeline for the MPU6050: added a digital deadzone filter (800 units threshold) to suppress MEMS noise, and an exponential moving average low-pass filter (0.80/0.20 split) to ensure smooth, organic servo actuation. +- Added a sudden movement detection routine (3000 units threshold) to dynamically trigger game activation and capture the starting timestamp. +- Completed the persistence layer over SPI using a multi-layered abstraction stack ('ExclusiveDevice', 'SdCard', and 'VolumeManager') to safely parse past records and append new scores into 'scor.txt' under a FAT32 file system. +- Finished integration of the hardware IR sensor and spawned an independent background executor task to handle the victory beep sequence via bit-banged PWM square waves (1kHz) on the buzzer pin upon maze completion. +- Conducted final mechanical assembly and wiring, securing a stable, standalone runtime operation. + +### Final Project Setup +![Overhead view of the mechanical labyrinth platform](images/proiect_final2.webp) +*Figure 1: Full assembly showing the mechanical platform and the handheld controller unit.* + +![Detail view of the servo mechanics and electronics](images/proiect_final1.webp) +*Figure 2: Detail of the 2-axis gimbal mechanism powered by SG90 servos.* ## Hardware The project uses the STM32 Nucleo-U545RE-Q board as the brain, connected to sensors for input and motors for output. ### Schematics +The hardware connections are detailed below, routing all components to the STM32 Nucleo board. Power distribution is handled via a breadboard 5V and GND rail supplied by the Nucleo board (for testing) or an MB102 module (for portable use). + +![Schematics](images/labyrinth_schematic.svg) ### Bill of Materials + +
STM32 Nucleo-U545RE-Q
STM32 Nucleo-U545RE-Q
PowerSuply
PowerSuply
Stepper Motor
Stepper Motor
A4988 Driver
A4988 Driver
Stepper Motor
Stepper Motor
A4988 Driver
A4988 Driver
Stepper Motor
Stepper Motor
A4988 Driver
A4988 Driver
Step, 5V
Step, 5V
Display LCD
Display LCD
I2C
I2C
Touch Sensor Module
Touch Sensor Module
Touch Sensor Module
Touch Sensor Module
GPIO
GPIO
GPIO
GPIO
12V, 10A
12V, 10A
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/images/schematic2.svg b/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/images/schematic2.svg new file mode 100644 index 00000000000..a0aa664e430 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/images/schematic2.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 8.0.9Rev: Size: A4Id: 1/1Title: File: T1.kicad_schSheet: /GND1234M2Stepper_Motor_bipolarGND1MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16VDD21B31A42A52B6GND7VMOT8~{ENABLE}9Pololu_Breakout_A49881234M1Stepper_Motor_bipolarGND1MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16VDD21B31A42A52B6GND7VMOT8~{ENABLE}9Pololu_Breakout_A4988+12VVSS1DB310DB411DB512DB613DB714A/VEE15K16VDD2VO3RS4R/~{W}5E6DB07DB18DB29A1A1A2A2K1K1K2K2U2LCD-016N002LVBAT1PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PC132PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29PC143VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC154PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PH05PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH16PH360PB861VDD1162VDD64NRST7PC08PC19U1STM32U545RETxQR1RA01P510P611P712~{INT}13SCL14SDA15VDD16A12A23P04P15P26P37GND8P49U3PCF8574APGND1MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16VDD21B31A42A52B6GND7VMOT8~{ENABLE}9Pololu_Breakout_A49881234M3Stepper_Motor_bipolarDVGNDOUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8VCCTTP226C1Capacitive Touch Sensor ModuleDVGNDOUT1OUT2OUT3OUT4OUT5OUT6OUT7OUT8VCCTTP226CCapacitive Touch Sensor ModuleSiDoGND STMLa#GND STMMusic StartDo_No5V STMLa#Sol#LaSiGND STMSCL_PinSol#GND STMRe#5V STMSDA_PinGND STMSCL_PinGND STMGND STMGND STMMusic StartMi5V STMSolReMiDo#FaLaSol#3V3 STMSolLaGND STMMusic StartDo_No3V3 STMRe#Fa#ReDoDo#GND STMFaSDA_PinFaSolRe#MiReDo#DoFa#SiLa#Do_No3V3 STMFa#Si1k5V10AR1RU2LCD-016N002LVSS1DB310DB411DB512DB613DB714A/VEE15K16VDD2VO3RS4R/~{W}5E6DB07DB18DB29A1A1A2A2K1K1K2K2 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/index.md b/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/index.md new file mode 100644 index 00000000000..7175e1d6424 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bogdan.bobei/index.md @@ -0,0 +1,112 @@ +# Piano motor-synth + +:::info + +**Author**: Bobei Bogdan Dumitru \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-WolfishAtom7515 + +::: + +## Description + +A challenging and highly rewarding embedded Rust project running on an STM32 microcontroller. Instead of a traditional speaker, this project uses three Nema-17 stepper motors as sound synthesizers. By rapidly switching the PWM frequency sent to the motor drivers, the mechanical vibrations are turned into audible musical notes. + +The project functions as an electromechanical piano. It features two capacitive touch sensor modules that act as a simplified keyboard. You can either play it with the system dynamically allocating notes across the three motors to allow for chords playing or press a dedicated input to play an original, pre-composed song. To complete the experience, an LCD screen provides real-time visual feedback, displaying the current note being played. + +## Motivation + +I chose this project out of my passion for both music and programming. I wanted to build something that sits at the intersection of the two, where my music theory knowledge and my low-level embedded Rust experience could work together toward a single, tangible result. There is something incredibly satisfying about forcing industrial hardware (stepper motors) to create delicate art (music).perience could work together toward a single, tangible result. + +## Architecture + +The project is split into three main logical components, working asynchronously to handle inputs, process logic, and drive outputs: + +- **Input Layer — Capacitive Touch Keyboard** +Instead of mechanical buttons, user input is handled by two capacitive touch sensor modules. These represent the piano keys. The input is processed asynchronously via Embassy tasks, detecting both single taps and multiple simultaneous touches. + +- **Control Layer — Polyphonic Note Resolver & Chord Manager** +This is the "brain" of the synth. When touches are detected, the resolver maps them to specific frequencies in Hz (e.g., A4 = 440 Hz, C5 = 523 Hz). Because the system has three independent motors, this layer handles polyphony: it intelligently distributes the pressed notes across the available motors, allowing you to play rich chords. If the "pre-defined song" mode is triggered, this layer overrides the live input and steps through a hardcoded sequence of frequency-duration pairs. + +- **Output Layer — PWM Motor Drivers & Visual Display** +The resolved frequencies are written directly into the STM32 timer registers (ARR and CCR) to dynamically change the PWM frequency for each of the three A4988 stepper drivers. A 50% duty cycle ensures maximum physical vibration (and thus, optimal volume). Concurrently, this layer communicates via I2C with an LCD 1602 display, instantly updating the screen with the name of the most recent note or the root note of the song currently playing. + +This is the logic diagram: + +![alt text](images/logic_diagram_pm.svg) + +## Log + + + +### Week 5 - 11 May + +First week, I set up the Embassy plus STM32 project from scratch. Wrote the basic initial configuration code and acquired the Nema-17 stepper motor. I spent the week experimenting with it, configuring the timer for PWM output, and figuring out the core mechanics of making the stepper tomove at a specific speed in order to vibrate the frequencies to produce distinct pitches. + +### Week 12 - 18 May + +I ordered two additional stepper motors to expand the project's capabilities. I set up and wired the capacitive touch sensor modules, writing the logic to actually play the setup like a musical instrument. I also integrated the new heavy-duty 12V/10A power supply, ensuring the electrical foundation was ready to safely handle the current draw of all three motors simultaneously. + +### Week 19 - 25 May + +The last week, I ordered the 1602 LCD screen and integrated it into the system for real-time visual feedback. On the software side, I focused on the architecture, implementing the asynchronous code required to drive all three motors concurrently, allowing for true polyphony (playing chords however I want). Finally, I coded and fine-tuned the complete pre-composed song that the system can play autonomously. + +## Hardware + +The project uses an STM32U545 Nucleo board as the main microcontroller. For sound output, the system is driven by three Nema-17 stepper motors, each controlled through an individual A4988 driver. Stepper motors were chosen over simple servos for their higher torque, significantly louder acoustic output, and improved tonal clarity. + +Because three motors drawing current simultaneously can cause massive power spikes (especially when playing chords), the entire motor array is powered by an external 12V/10A switching power supply. For user input, the system uses two Capacitive Touch Sensor Modules configured to mimic the keys of a piano, allowing for a natural and interactive live playing experience. Additionally, an I2C 1602 LCD screen is used for real-time visual feedback. + +### Schematics + +![alt text](images/schematic2.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32U545](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) | The microcontroller | [113 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&utm_id=6470900573&utm_source=google&utm_medium=cpc&utm_marketing_tactic=emeacorp&gad_source=1&gad_campaignid=6470900573&gbraid=0AAAAADn_wf1J6XpRotkoYj96_ZbUSaPnH&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV9JETny_HVaRTMCWUsjLF5mX_nrK4cA6P9VX1bEVQVYmCTCGeIwhOAaAlZUEALw_wcB) | +| [Stepper Motor Nema-17 1.5A](https://www.handsontec.com/dataspecs/motor_fan/nema17-42BYGH60.pdf) | Motor that sings, gooad quaity, yet pricy| [67 RON x3](https://sigmanortec.ro/Nema17-1-5A-p125805542) | +| [Driver stepper A4988](https://www.pololu.com/file/0j450/a4988_dmos_microstepping_driver_with_translator.pdf) | The driver dedicated for the stepper motor | [8 RON x3](https://sigmanortec.ro/Driver-stepper-A4988-Radiator-p125711037) | +| [Ecran LCD 1602](https://www.vishay.com/docs/37484/lcd016n002bcfhet.pdf) | LCD Ecran for printing the current note | [21 RON](https://www.emag.ro/ecran-lcd-1602-iic-i2c-albastru-ai848-s815/pd/D0WQLTMBM/) | +| [Capacitive Touch Sensor Module](https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/TTP226-Datasheet.pdf) | Touch sensor for user input | [9.60 RON x2](https://sigmanortec.ro/en/8ch-ttp226-capacitive-touch-sensor-module) | +| [Breadboard 830 points MB-102](https://handsontec.com/dataspecs/accessory/Breadboard-Full.pdf) | For backend connectivity| [11 RON](https://sigmanortec.ro/en/breadboard-830-points-mb-102) | +| Sursa alimentare YDSPS120-1201000 12V 10A| Current source for the motors | [45 RON](https://www.emag.ro/sursa-alimentare-dc-12v-10a-profesionala-carcasa-metalica-2-iesiri-ip20-ydsps120-1201000/pd/DWVK183BM/) | +| Cablu trifazat pentru impamantare | Connect the power supply to a grounded electrical outlet | [25 RON](https://www.bricodepot.ro/cablu-de-schimb-pentru-aparate-cu-impamanatare-diall-h05vv-f-1-5-mmp-x-3-m-alb/cpd/100652891/) | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| **embassy-stm32** | STM32 hardware driver | Controlling pins, timers, and peripherals | +| **embassy-time** | Time and delay management | Handling timeouts and periodic events | +| **embassy-sync** | Async sync primitives | Inter-task communication (Mutex, Channels) | +| **cortex-m** | Core processor access | Managing interrupts and CPU instructions | +| **cortex-m-rt** | Startup/Runtime for ARM | Initializing memory and the entry point | +| **defmt** | Low-overhead logger | Fast logging for embedded systems | +| **defmt-rtt** | RTT transport for logs | Transferring logs through debuggers | +| **embassy-embedded-hal** | HAL helper utilities | Adapting hardware traits for Embassy | +| **embassy-executor** | Async task scheduler | Running and managing async tasks | +| **embassy-futures** | Async helpers | Combining or waiting for multiple futures | +| **embassy-usb** | Async USB stack | Implementing USB device functionality | +| **embedded-hal-async** | Async hardware traits | Standard interface for non-blocking drivers | +| **panic-probe** | Debug panic handler | Reporting crashes via the probe | + +## Links + + + +1. [Instructables](https://www.instructables.com/Music-With-Servo-Motor/) +2. [Instagram](https://www.instagram.com/local_host_audio_/?next=) +3. [Youtube](https://www.youtube.com/watch?v=NOsFIrsdKwY) + diff --git a/website/versioned_docs/version-acs_cc/project/2026/bogdan.grecu2604/index.md b/website/versioned_docs/version-acs_cc/project/2026/bogdan.grecu2604/index.md new file mode 100644 index 00000000000..ecf2e74be93 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/bogdan.grecu2604/index.md @@ -0,0 +1,86 @@ +# Acoustic Material Sorter +A smart environmental sorting device that classifies materials (glass, plastic, metal) by analyzing the acoustic signature of their impact using digital signal processing and machine learning. + +:::info + +**Author**: Bogdan Octavian Grecu \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-grecubog2001](https://github.com/UPB-PMRust-Students/acs-project-2026-grecubog2001) + +::: +## Description + +The Acoustic Material Sorter is a smart classification system that differentiates objects based on the sound they make when dropped. Items slide down a custom-built ramp and hit a hard impact plate. A piezoelectric contact microphone taped beneath the plate captures the raw audio waveform of the impact. The system rapidly processes this audio burst, extracting frequency data to feed into a machine-learning model that predicts whether the material is Glass, Plastic, or Metal. + +A master switch determines whether we are in the data aquisition phase or the inference phase. + +If we are in the data aquisition phase, we collect impact data from our materials. In order to manually label the material, we use a 4x4 keypad. + +If we are in the inference phase, the system checks whether a model exists in our root folder. + +If it doesn't, then it trains the model from scratch using our recorded data. The display shows the iteration number and the loss. + +If it does, or after it trains the model, it waits for impact data, then, using the model, it classifies the material. The predicted material is displayed on the screen. Several SG90 micro servo automatically move a sequence of gates to guide the item into the correct bin. + +## Motivation + +Traditional optical sorting machines used in recycling facilities are expensive, highly complex, and often struggle with transparent materials (like clear glass vs. clear plastic) or dirty surfaces. I chose this project to explore a cost-effective, robust alternative: acoustic sorting. + +Every material has a unique resonant frequency and acoustic "fingerprint." By relying on sound rather than sight, we bypass the limitations of optical sensors. Additionally, this project serves as an excellent sandbox for learning about edge computing, as it perfectly blends hardware actuation, digital signal processing (DSP), and embedded machine learning all in one integrated Rust-based environment. + +## Architecture + +- Acoustic Acquisition Subsystem: A piezoelectric disc acts as a contact microphone, triggering an ADC capture on the microcontroller the exact moment an impact occurs, recording a rapid, 1-second burst of raw audio data. + +- Signal Processing Engine: The raw time-domain audio data is transformed into the frequency domain (a spectrogram representation) using the rustfft library, extracting the distinct acoustic features of the drop. + +- Classification Engine: The extracted frequency features are fed into a trained machine learning model (powered by the smartcore library) which outputs a prediction and a confidence score. + +- Display System: A 1602 I2C character LCD provides real-time feedback, showing the active prediction (e.g., "Metal"). + +- Actuation System: Several SG90 micro servos are attached to a sequence of gates. This physically directs the material to the corresponding collection bin (Glass, Plastic, or Metal). + +## Log + +## Hardware + +The project utilizes a Raspberry Pi Pico 2 as the main microcontroller, leveraging its powerful RP2350 architecture to handle digital signal processing and machine learning inference at the edge. A piezoelectric disc is taped to the impact plate and connected to one of the Pico's ADC pins to measure the vibration and sound of the falling object. A 1602 character LCD module, connected via the I2C interface, serves as the user interface to display the classification results and confidence levels. 4 SG90 micro servos, each controlled via a PWM pin, mechanically routes the objects into their respective bins. A 4x4 numpad facilitate manual data labelling. All electronic components are interfaced using a breadboard and standard jumper wires. + +image +image +image + + +### Schematics + +Screenshot 2026-05-24 151729 + + +### Bill of Materials +| Device | Usage | Price | +|--------|--------|-------| +|Raspberry Pi Pico 2|"Main microcontroller board handling DSP, ML, and hardware control"| 270 ron (kit) +|1602 I2C LCD|Displays the predicted material type and ML confidence score| included in kit +|Piezoelectric Disc|Contact microphone used to capture the impact sound| 25 ron +|4x SG90 Micro Servo|Actuator that rotates the funnel to sort items into bins| 35 ron +|4x4 keypad|Input for manual material classification and disposal| included in kit +|Breadboard & Wires|Prototyping connections| included in kit +|Ramp & Impact Plate|Physical structure for dropping and funneling items| 100 ron + +## Software + +| Library / Interface | Description | Usage | +| --- | --- | --- | +| `cortex-m` | ARM Cortex-M support library for low-level processor access. | Access core peripherals and use `Peripherals::take()` in `src/main.rs`. | +| `cortex-m-rt` | Runtime support crate for Cortex-M microcontrollers. | Provides the entry point and startup/runtime support for the embedded firmware. | +| `embedded-hal` | Hardware abstraction traits for embedded devices. | Provides `InputPin` and `OutputPin` traits used by keypad, LED, and GPIO logic. | +| `embedded-hal-0-2` | Compatibility adapter for older embedded-hal v0.2 traits. | Provides `PwmPin` and `adc::OneShot` traits used by servo and ADC code. | +| `defmt` | Efficient logging framework for `no_std` embedded Rust. | Used for debug logging in firmware and tests. | +| `defmt-rtt` | RTT transport layer for `defmt` logging. | Enables runtime debug output over RTT during development. | +| `usb-device` | USB device stack for embedded targets. | Handles USB polling and device management for serial communication. | +| `usbd-serial` | USB CDC serial implementation. | Provides the virtual serial port used to send and receive waveform and control messages. | +| `heapless` | Fixed-capacity data structures for `no_std` environments. | Uses `heapless::String` for LCD text formatting and serial line buffering. | +| `lcd-lcm1602-i2c` | I2C driver for 16x2 LCD modules. | Drives the display used for mode prompts, instructions, and inference results. | +| `micromath` | Math helpers for `no_std` floating-point computation. | Provides `F32Ext` for CNN inference and training math operations. | +| `panic-probe` | Panic handler that reports panic information via probe. | Used on ARM targets to surface panic messages during development. | +| `rp235x-hal` | HAL for RP2350-based Raspberry Pi Pico 2 boards. | Provides GPIO, ADC, PWM, I2C, timer, and USB support for the RP2350 target. | + diff --git a/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/maze.webp b/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/maze.webp deleted file mode 100644 index 825185e9df7..00000000000 Binary files a/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/maze.webp and /dev/null differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/updated_maze.webp b/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/updated_maze.webp new file mode 100644 index 00000000000..a58757b4904 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/images/updated_maze.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/index.md b/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/index.md index 9cfcb13ec78..cd29956783d 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/calin.avramoniu/index.md @@ -33,7 +33,7 @@ Main Components: ## Maze layout -![Maze Layout](./images/maze.webp) +![Maze Layout](./images/updated_maze.webp) ## Log @@ -53,6 +53,16 @@ Main Components: - Completed 1st version of the documentation ### Week 27 - 03 May + - Assembled the robot + - Tested robot components together + - Met the documentation deadline and presented it during the lab + +### Week 11 - 17 May + - Met the hardware deadline and presented it during the lab + +### Week 18 - 24 May + - Met the software deadline and presented it during the lab + - The robot now completes most of the labyrinth (only fine-tuning needed) ## Hardware @@ -90,10 +100,11 @@ The format is | Library | Description | Usage | |---------|-------------|-------| -| [embassy-stm32](https://github.com/embassy-rs/embassy) | Basic hardware library | Used to set up the input and output pins for the IR and Ultrasonic sensors. | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Basic hardware library | Used to set up the input and output pins for the IR and Ultrasonic sensors, and to generate PWM signals for controlling the motor speeds. | | [embassy-time](https://github.com/embassy-rs/embassy) | Time and delays | Used to measure how long it takes for the ultrasonic echo to come back, and to add small pauses in the code. | | [defmt](https://github.com/knurling-rs/defmt) | Console printing tool | Used to print the distances and sensor status (like "Clear" or "Blocked") to my laptop screen so I could test them. | | [embassy-executor](https://github.com/embassy-rs/embassy) | Code runner | Used to run the main loop of the program without freezing the board. | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler | Used to catch program crashes (panics) and print the trace back to the console, making debugging easier. | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/architecture_diag.webp b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/architecture_diag.webp new file mode 100644 index 00000000000..16440e05888 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/architecture_diag.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project1.webp b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project1.webp new file mode 100644 index 00000000000..acafe23e213 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project2.webp b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project2.webp new file mode 100644 index 00000000000..a418d5a7eed Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/project2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/schematic_pm.webp b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/schematic_pm.webp new file mode 100644 index 00000000000..ed8e67dab51 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/images/schematic_pm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/index.md b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/index.md new file mode 100644 index 00000000000..4219c581e28 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/camelia.istrate/index.md @@ -0,0 +1,123 @@ +# Robotic Arm with Master-Slave Control Mode +A robotic arm controlled via potentiometers with record and playback functionality. + +:::info + +**Author**: Istrate Camelia-Elena \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-camistrate.git + +::: + + + +## Description + +This project implements a robotic arm controlled by an STM32 microcontroller programmed in Rust. The system consists of a master controller with potentiometers and a slave robotic arm driven by multiple servo motors. + +The system supports two operating modes: + +- **Manual Mode**: the master controller (potentiometers) directly controls the slave robotic arm in real time. +- **Record & Playback Mode**: the system records a sequence of movements performed in manual mode (master) and later replays them automatically on the slave robotic arm. + +The STM32 reads analog input values from the master controller, processes them, and sends commands to a PWM servo driver module that controls the robotic arm in real time. + +## Motivation + +The idea for this project originated from a brainstorming session, inspired by a simple robotic arm concept seen on social media. I wanted to improve that concept by building a more refined and reliable system. +To extend the original idea, I added a record and playback feature, enabling the robotic arm to capture and reproduce movements, making the system more advanced and interactive. + +## Architecture + +The system is divided into the following main components: + +- **Master Controller**: consists of potentiometers and a push button, used to generate control inputs and select the operating mode. + +- **Processing Unit (STM32)**: + - reads analog inputs (ADC) and digital inputs (GPIO) + - processes control data + - manages operating modes (manual, record, playback) + - communicates with external modules + +- **Memory Buffer (implemented in STM32 RAM)**: + - stores recorded servo positions over time during record mode + - provides stored data during playback mode + +- **Servo Driver (PCA9685)**: + - receives commands from the STM32 via I2C + - generates PWM signals for controlling multiple servo motors + +- **Slave Robotic Arm (Actuators)**: + - consists of multiple servo motors (base, shoulder, elbow, wrist, gripper) + - executes movements based on PWM signals + +![Architecture Diagram](./images/architecture_diag.webp) + +## Log + + +### Week 6 - 12 April +In this week, I did a brainstorming session and chose the project idea. + +### Week 20 - 24 May +In this period, I researched the hardware requirements for the project, identified the necessary components, and placed orders for them. + +### Week 27 April - 3 May +During this week, I focused on developing the project documentation. + +### Week 4 - 10 May +In this period, I received the first ordered components, printed the 3D parts required for the robotic arm structure, and placed additional orders for the remaining hardware components. + +### Week 11 - 17 May +During this week, the last ordered components arrived. I focused on the hardware part of the project, assembled the main mechanical structure, connected the electronic components, and tested the basic wiring. + +### Week 18 - 24 May +In this week, I implemented the software part of the project in Rust, tested the interaction between the potentiometers, buttons, PCA9685 driver, and servo motors, and verified that the main functionalities worked correctly. I also mounted all components on the final support structure. + +![Image1](./images/project1.webp) +![Image2](./images/project2.webp) + +## Hardware + +The project uses an STM32 development board as the main controller. A set of potentiometers and a push button are used as input devices to control the system. + +The robotic arm is driven by multiple servo motors, controlled through a PCA9685 servo driver module using I2C communication. The servos are powered by an external power supply, while the STM32 handles the control logic. + +All components are connected using standard wires and connectors, and the mechanical structure of the arm is made from 3D printed parts. + +### Schematics + +![Schematic](./images/schematic_pm.webp) + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo Board](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) | Main microcontroller used for processing inputs and controlling the robotic arm | Free (Provided by faculty) | +| [10k Potentiometer](https://sigmanortec.ro/Potentiometru-1K-5K-10K-20K-50K-100K-p136286400) | Used as analog input for controlling servo positions | 4 x 1.31 RON | +| [MG996R Servo Motor](https://sigmanortec.ro/servomotor-mg996r-180-13kg) | High torque servo motors used for main joints (base, shoulder, elbow) | 3 x 29.5 RON | +| [Mini Push Button](https://sigmanortec.ro/buton-mini-6x6x5-4-pini) | Used for switching between operating modes |4 x 0.36 RON | +| [SG90 Micro Servo](https://sigmanortec.ro/Servomotor-SG90-limit-switch-p141662062) | Used for controlling the gripper | 1 x 9.5 RON | +| [XT60 Connector](https://sigmanortec.ro/Conector-XT60-Mama-Tata-p148577270) | Used for power supply connection | 2 x 4.3 RON | +| [Power Switch KCD11](https://sigmanortec.ro/Intrerupator-KCD11-250V-3A-2-pini-p166528374) | Used to turn the system on/off | 1 x 1.19 RON | +| [PCA9685 Servo Driver](https://sigmanortec.ro/Modul-PCA9685-interfata-I2C-16-CH-servo-motor-p126016016) | Generates PWM signals for controlling multiple servo motors via I2C | 1 x 27.27 RON | +| **Total** | | **141.5 RON + Free board** | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware abstraction layer for STM32 microcontrollers | Used for accessing peripherals such as ADC, GPIO, and I2C | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async runtime for embedded systems | Used to manage tasks and timing in the application | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Common hardware abstraction traits for embedded systems | Provides generic interfaces for peripherals like I2C and GPIO | +| PCA9685 driver crate | Driver for controlling the PCA9685 PWM module | Used to control servo motors via I2C | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework for embedded systems | Used for debugging and monitoring values | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler for embedded Rust applications | Used for debugging runtime errors | + +## Links + + + +1. https://www.hackster.io/WolfxPac/simple-and-smart-robotic-arm-using-arduino-1ceda6 + diff --git a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/schematic.webp new file mode 100644 index 00000000000..1797eaa7805 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week1.webp b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week1.webp new file mode 100644 index 00000000000..2215dd21438 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2.webp b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2.webp new file mode 100644 index 00000000000..9c4a9698d49 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2_2.webp b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2_2.webp new file mode 100644 index 00000000000..c918f726444 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/images/week2_2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/index.md index 66959d1298b..a50793cad19 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/carla.popescu/index.md @@ -1,4 +1,5 @@ # Smart Access Control System +A laser-based intrusion detection system. :::info @@ -13,7 +14,7 @@ A laser-based smart access control system built on the Nucleo-STM32U545RE-Q boar ## Motivation -I was inspired by a YouTube video of an analog laser alarm circuit and wanted to recreate it in a more modern, complex, and functional way using embedded Rust. The project gave me the opportunity to explore real-time embedded programming with Rust and Embassy, while building something visually striking for a live presentation. Unlike a simple PIR motion sensor, the laser beam creates a clear, visible security barrier that makes the demo immediately understandable and impressive. The added RFID access control layer transforms a simple alarm into a complete, realistic security system. +I was inspired by a YouTube video of an analog laser alarm circuit and wanted to recreate it in a more modern, complex, and functional way using embedded Rust. The project gave me the opportunity to explore real-time embedded programming with Rust and Embassy, while building something that has real practical value — a low-cost security system suitable for protecting small spaces such as rooms, drawers, or storage areas. Unlike a simple PIR motion sensor, the laser beam creates a clear, visible security barrier that makes the system easy to understand and deploy. The added RFID access control layer transforms a simple alarm into a complete, realistic security system. ## Architecture @@ -36,10 +37,26 @@ The system operates as a state machine with the following states: ## Log ### Week 5 - 11 May +Gathered all the necessary components and set up the development environment +(Rust + Embassy). Started with the basic hardware setup: connected the laser +module and LDR to the breadboard and verified the ADC readings. Implemented +the software baseline calibration for the LDR. + +![Early hardware setup](images/week1.webp) ### Week 12 - 18 May +Integrated the SSD1306 OLED display over I2C and the RC522 RFID module over +SPI. Implemented the access control logic: admin card recognition, grace +period, and wrong attempt counter. Connected the buzzer via PWM. + +![OLED displaying startup message](images/week2.webp) +![Full system on breadboard](images/week2_2.webp) ### Week 19 - 25 May +Finalized and tested all components together. Assembled everything into a box +for the presentation. The laser beam, alarm, RFID access control, and OLED +display all work correctly together. + ## Hardware @@ -49,7 +66,7 @@ The system operates as a state machine with the following states: | KY-008 Laser Module | 1 | Emits the laser beam (650nm, 5V) | | LDR Photoresistor (5528) | 1 | Detects laser beam interruption via ADC | | RC522 RFID Module | 1 | Reads MIFARE cards via SPI | -| MIFARE Classic 1K Cards | 5 | 1 admin + 3 users + 1 invalid test card | +| MIFARE Classic 1K Cards | 2 | 1 admin + 1 invalid test card | | SSD1306 OLED Display (0.96") | 1 | Displays system status via I2C | | Active Buzzer (5V) | 1 | Sounds the alarm | | BC547 NPN Transistor | 1 | Drives the buzzer from 3.3V GPIO | @@ -64,6 +81,8 @@ The system operates as a state machine with the following states: ## Schematics +![Schematic](images/schematic.webp) + ## Bill of Materials | Device | Usage | Price | @@ -94,7 +113,7 @@ The system operates as a state machine with the following states: | [embassy-time](https://docs.embassy.dev) | Async timers | Grace period timing, debounce | | [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware Abstraction Layer | Portable hardware interface traits | | [ssd1306](https://crates.io/crates/ssd1306) | OLED display driver | Rendering text and status messages | -| [mfrc522](https://crates.io/crates/mfrc522) | RFID driver | Reading MIFARE Classic 1K card UIDs | +| rc522 (custom driver) | Custom RC522 SPI driver | Reading MIFARE Classic 1K card UIDs via SPI | | [embedded-graphics](https://crates.io/crates/embedded-graphics) | 2D graphics library | Text rendering on OLED display | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/architecture_diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/architecture_diagram.webp new file mode 100644 index 00000000000..b873ace63c9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/architecture_diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/back_side.webp b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/back_side.webp new file mode 100644 index 00000000000..69cc36e33f9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/back_side.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/front_side.webp b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/front_side.webp new file mode 100644 index 00000000000..13df1850923 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/front_side.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/hardware.webp new file mode 100644 index 00000000000..fa6c72430f3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/index.md b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/index.md new file mode 100644 index 00000000000..b4f4db33a0a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/index.md @@ -0,0 +1,131 @@ +# 3D Printer +An engineered-from-scratch 3D printer powered by a 32-bit STM32 board, featuring custom hand-wired electronics, silent motor operation, and robust thermal management. + +:::info + +**Author**: Bârsan Clara Maria \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-clarabarsan) + +::: + + + +## Description + +This project is a custom-built Cartesian 3D printer based on the classic Prusa i3 architecture. +Its main purpose is to manufacture physical 3D objects by melting and depositing plastic filament layer by layer. +The end-user interacts with the device by providing a digital 3D model that has been sliced into a "G-code" file. +Once started, the machine autonomously coordinates its three axes (X, Y, and Z) and regulates high temperatures to print the object. +It solves the problem of needing an affordable, highly customizable, and easily repairable manufacturing tool for personal DIY projects and prototyping. + +## Motivation + +My primary motivation for building this 3D printer is to create a personal manufacturing hub at home. +I want the independence to design, prototype, and print highly customized components for my other DIY endeavors. +Having a tailor-made machine will give me the freedom to bring complex ideas to life, ensuring my future projects are never limited by off-the-shelf parts. + +## Architecture + +![Sistem arhitecture](architecture_diagram.webp) + +The architecture of this custom 3D printer controller is designed as a standalone, state-machine-driven embedded system. To ensure safety, signal integrity, and a strict separation of concerns, the system is logically divided into distinct architectural subsystems. This design isolates low-voltage processing logic from high-voltage mechanical and thermal actuation. + +**Core Processing Unit (MCU):** The central "brain" of the system is the STM32 Nucleo microcontroller. It is responsible for parsing G-code, executing the internal state machine, and orchestrating asynchronous tasks (Motion, Thermal, and I/O management). + +**Data Storage Subsystem:** A Micro SD Card Module acts as the local repository for G-code files, allowing the printer to operate fully standalone. + +**Sensory & Feedback Subsystem:** The input layer continuously gathers physical data from the machine's environment (temperatures and physical axis limits) and feeds it back to the processing unit to close the control loop. + +**Motion Subsystem:** The kinematic layer translates digital movement commands into physical steps, driving the printer's axes and the extruder mechanism. + +**Thermal Subsystem:** The high-current heating layer manages the rapid heating of the print bed and the hotend nozzle based on PWM duty cycles received from the Core Processing Unit. + +**Cooling Subsystem:** The thermal management layer provides continuous hotend heatsink ventilation — powered permanently by the direct 24V supply — to prevent heat creep and maintain hardware integrity. + +## Log + + + +### Weeks 23 March - 12 April +Chose the project idea, researched components, and ordered the hardware. + +### Weeks 13 - 26 April +Assembled the frame and the Y axis. + +### Weeks 27 April - 10 May +Finished the Z axis and parts of the X axis. + +### Week 11 - 17 May +Structured and organized the hardware schematic in EasyEDA and soldered the physical hardware components using a soldering iron. + +### Week 18 - 24 May +Installed all remaining hardware components, then developed and tested the firmware. + +## Hardware + +This custom 3D printer utilizes an STM32 Nucleo-U545RE-Q microcontroller as the core processing unit. The motion system features NEMA 17 stepper motors driven by ultra-silent TMC2209 modules, with axis limits detected by reliable SS-5GL2 mechanical endstops. Thermal actuation for the MK3 heated bed and MK8 extruder is safely managed by optoisolated external MOSFETs and continuously monitored by NTC 100k thermistors. To ensure signal integrity, the system employs a dual-isolated power architecture—a 5V power bank for logic circuits and a 24V 20A PSU for high-current loads. The entire setup operates independently of a PC using an SPI Micro SD Card module, with all custom signal routing soldered onto a double-sided FR4 prototype PCB. + +![Hardware](hardware.webp) +![Front_side](front_side.webp) +![Back_side](back_side.webp) + +### Schematics + +![Motor Schematic](schematic_3d-printer_1.svg) +![Other elements Schematic](schematic_3d-printer_2.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 NUCLEO-U545RE-Q](https://www.st.com/resource/en/data_brief/nucleo-c031c6.pdf) | Main microcontroller processing G-code and controlling the entire system | [105 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | +| [NEMA 17 Stepper Motor](https://www.alldatasheet.com/datasheet-pdf/pdf/1245674/NINGBO/17HS8401.html) | Stepper motor driving the physical movement of the axes and the extruder | [218 RON](https://www.emag.ro/motor-pas-cu-pas-nema17-pentru-imprimanta-3d-cnc-reprap-42mm-multicolor-1-w-020/pd/D83GKLMBM/?utm_source=email&utm_medium=tranzactional&utm_campaign=cns_confirmation_order&utm_content=cns_product_image&ref_id=2102441991#specification-section) | +| [TMC2209 Motor Driver](https://www.alldatasheet.com/datasheet-pdf/pdf/1180128/TRINAMIC/TMC2209.html) | Ultra-silent stepper driver translating MCU logic signals into motor movement | [157 RON](https://www.emag.ro/modul-driver-motor-pas-cu-pas-tmc2209-v2-0-set-de-5-bucati-2-8-a-pentru-imprimante-3d-ultra-silentios-novamart-k0079-260327-3200/pd/DZTFZ32BM/?utm_source=email&utm_medium=tranzactional&utm_campaign=cns_confirmation_order&utm_content=cns_product_image&ref_id=2116328933) | +| [NTC 100k Thermistor](https://fab.cba.mit.edu/classes/863.18/CBA/people/erik/reference/11_NTC-3950-100K.pdf) | Temperature sensor used to continuously monitor the hotend and heated bed | [9,7 RON](https://sigmanortec.ro/Termistor-NTC-100k-p125162185) | +| [SS-5GL2 Mechanical Endstop](https://omronfs.omron.com/en_US/ecb/products/pdf/en-ss.pdf) | Physical microswitch used to detect the 0-position (home) of the printer's axes | [15,7 RON](https://sigmanortec.ro/Endstop-mecanic-SS-5GL2-p136284192) | +| Micro SD Card Module | SPI storage module allowing the printer to read G-code and work standalone | [4,7 RON](https://sigmanortec.ro/Modul-card-SD-p137611367) | +| External MOSFET Module | High-current solid-state switch used to safely route 24V power to the heaters | [41,2 RON](https://sigmanortec.ro/modul-mosfet-e-switch-control-3-12v-iesire-5-36v-cu-optoizolator) | +| MK3 Heated Print Bed | Aluminum build plate that heats up to ensure first-layer print adhesion | [54 RON](https://www.emag.ro/incalzitor-aluminiu-pentru-imprimanta-3d-elektroweb-mk3-senzor-de-temperatura-214x214x3mm-z-003/pd/DHG9KM2BM/?ref_id=2116328933&utm_campaign=cns_confirmation_order&utm_content=cns_product_image&utm_medium=tranzactional&utm_source=email) | +| 24V 20A Power Supply | Main power supply unit providing high-current 24V for heaters and motors | [111 RON](https://altex.ro/sursa-alimentare-profesionala-yds-24v-20a-in-comutatie-cu-carcasa-metalica-cu-ventilator-480w/cpd/68F7A90A9BF88/) | +| FR4 Prototype PCB (7x9cm) | Double-sided board used to solder and route the custom electronic circuits | [5,8 RON](https://sigmanortec.ro/Placa-PCB-prototipare-fata-dubla-7x9cm-p125747328) | +| MK8 Extruder Components | Mechanical assembly responsible for feeding, melting, and depositing the filament | [211 RON](https://www.skroutz.ro/s/58723451/49041-Manson-din-aluminiu-pentru-mana-stanga-24v-0-4-1-75-Extruder-unic-Mk8-40-Inalt.html) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [defmt](https://github.com/knurling-rs/defmt) | Efficient deferred formatting framework for microcontrollers | Used for low-overhead logging (info!, warn!, trace!) and formatting custom errors (SdError) | +| [defmt_rtt](https://github.com/knurling-rs/defmt) | Debugging backends | Transmits defmt logs over the debug probe | +| [panic_probe](https://github.com/knurling-rs/probe-run/tree/main) | Panic handler | Cleanly handles hardware panics/crashes and exits the debugging session with an error code | +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Abstraction Layer (HAL) for STM32 microcontrollers | Provides the hardware drivers for the SPI bus (Spi), GPIO pins (Output), and blocking modes | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Time and delay abstractions for the Embassy framework | Provides the Delay implementation required by the SD card initialization process | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Standard hardware abstraction (HAL) traits for Rust embedded systems | Provides the Pwm trait required to control the duty cycle and enable the heater signals (Hotend and Bed) | +| [embedded-hal-bus](https://github.com/rust-embedded/embedded-hal) | Bus sharing and management utilities for embedded-hal | Provides ExclusiveDevice to manage the SPI Chip Select (CS) pin automatically during transactions | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | SD/MMC card driver and FAT16/FAT32 file system implementation | Used to initialize the physical SD card, manage volumes, read directories, and read files | +| [core](https://github.com/rust-lang/rust/tree/main/library/core) | The dependency-free foundation of the Rust standard library | Used for primitive types (&[u8], f32), Option, and basic slice manipulation without requiring dynamic memory allocation (no heap/alloc) | +| [libm](https://github.com/rust-lang/libm) | A port of MUSL's math library to pure Rust | Provides essential mathematical functions (like natural logarithm logf) for no_std environments, as microcontrollers lack the standard library's math features | +| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Async runtime for embedded systems | Allows multiple tasks (e.g., heating and printing) to run concurrently on a single CPU core without an OS | +| [embassy-sync](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Synchronization primitives | Provides the async Mutex used to safely share target temperatures between tasks without data races | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Low level access to Cortex-M processors | Required by the runtime to handle critical sections, interrupts, and low-level CPU operations specific to the ARM architecture | + + +## Links + + + +1. [Idea](https://www.youtube.com/watch?v=og1506q67mo) +2. [Printer Hardware](https://www.youtube.com/watch?v=hORwhyP58FE&list=PLyYZUiBHD1QjaYx7eCEW8zXvsgwEbAykY&index=7) +3. [X-Axis Components Installation](https://www.youtube.com/watch?v=MgbjTq3Q-bI&list=PLyYZUiBHD1QjaYx7eCEW8zXvsgwEbAykY&index=2) +4. [Y-Axis Components Installation](https://www.youtube.com/watch?v=nEHKKb_pfoc&list=PLyYZUiBHD1QjaYx7eCEW8zXvsgwEbAykY&index=3) +5. [Z-Axis Components Installation](https://www.youtube.com/watch?v=MSuzXK-uvY8&list=PLyYZUiBHD1QjaYx7eCEW8zXvsgwEbAykY&index=4) +6. [Extruder Assembly Mount](https://www.youtube.com/watch?v=hxFhZji7b7E) diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_1.svg b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_1.svg new file mode 100644 index 00000000000..0a8426dfdfc --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_1.svg @@ -0,0 +1,5 @@ +Sheet_1 +Nucleo STM32U545RE-QU1PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC138TMC2209U2GND1VIO2M1B3M1A4M2A5M2B6GND7VM8Dir9Step10PDN11UART12SPRD13MS214MS115EN16INDEX17DIAG18NEMA17XU7GRN2BLK1RED3BLU4100uF/35VCAPACITOR1+2-1KR5221124V, 20APOWER+1-2100uF/35VCAPACITOR21+2-100uF/35VCAPACITOR31+2-1KR62211NEMA17YU4GRN2BLK1RED3BLU4TMC2209U10GND1VIO2M1B3M1A4M2A5M2B6GND7VM8Dir9Step10PDN11UART12SPRD13MS214MS115EN16INDEX17DIAG18TMC2209U3GND1VIO2M1B3M1A4M2A5M2B6GND7VM8Dir9Step10PDN11UART12SPRD13MS214MS115EN16INDEX17DIAG18NEMA17Z2U5GRN2BLK1RED3BLU41KR72211TMC2209U6GND1VIO2M1B3M1A4M2A5M2B6GND7VM8Dir9Step10PDN11UART12SPRD13MS214MS115EN16INDEX17DIAG18NEMA17EU8GRN2BLK1RED3BLU41KR82211TMC2209U9GND1VIO2M1B3M1A4M2A5M2B6GND7VM8Dir9Step10PDN11UART12SPRD13MS214MS115EN16INDEX17DIAG18NEMA17Z1U11GRN2BLK1RED3BLU41KR92211DirXStepXDirYStepYStepZ1DirZ1DirZ2StepZ2StepEDirEStepXDirXStepZ1DirZ1DirZ2StepZ2DirEStepEALLenALLenALLenALLenALLenALLenUARTUARTUARTUART2UARTThermistorPrintHeadThermistorBedGNDGNDGNDGNDGNDGND100nFC21122100nFC31122100nFC51122100uF/35VCAPACITOR11+2-100nFC41122100uF/35VCAPACITOR41+2-100nFC11122GNDGNDGNDGNDGNDGNDStepYDirY diff --git a/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_2.svg b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_2.svg new file mode 100644 index 00000000000..e7e948eb352 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/clara_maria.barsan/schematic_3d-printer_2.svg @@ -0,0 +1,5 @@ +Sheet_2 +Nucleo STM32U545RE-QU1PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC138SS-5GL2ENDSTOPXCOM1ON2NC3SS-5GL2ENDSTOPYCOM1ON2NC3SS-5GL2ENDSTOPZCOM1ON2NC3AOD4184 MODULE V2U12GNDGNDPWM/TRIMPWMVin-VIN-Vin+VIN+Vout-OUT-Vout+OUT+AOD4184 MODULE V2U13GNDGNDPWM/TRIMPWMVin-VIN-Vin+VIN+Vout-OUT-Vout+OUT+SPI SD CARD MODULEU14GND1VCC2MISO3MOSI4SCK5Micro SDCS6NTC100kR12211NTC100kR22211HOTENDH1A1B224v FanFAN1+1-2M4k7 ResistorR322114k7 ResistorR4221124V, 20APOWER+1-2StepXDirXStepZ1DirZ1DirZ2StepZ2DirEStepEALLenThermistorPrintHeadThermistorBedThermistorPrintHeadThermistorBedGNDGNDGNDGNDGNDGNDGNDGNDGNDHEATERBED24V1GND2StepYDirY diff --git a/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/block_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/block_diagram.svg new file mode 100644 index 00000000000..450d124d593 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/block_diagram.svg @@ -0,0 +1,122 @@ + + Block diagram – Automated Drink Dispenser + Diagrama bloc a sistemului dozator automat de bauturi + + + + + + + + + + + + Sursă alimentare + 12V 2A → LM2596 → 5V + + + + 12V + + + + 5V + + + + MCU + NUCLEO-U545RE-Q + Embassy-rs · Rust · no_std + + + + Interfață UI + + + + OLED 0.96" + I2C · stare + progres + + + + Rotary Encoder + KY-040 · GPIO INT + + + + + I2C / GPIO + + + + Sistem cântărire + + + + Load Cell 1kg + SparkFun · analog + + + + HX711 Amp + DAT + SCK · bit-bang + + + + GPIO + + + + Sistem pompaj + + + + Driver MOSFET #1 + IRLZ44N + 1N4007 + + + + Pompă 1 · 12V + Lichid A · peristaltică + + + + Driver MOSFET #2 + IRLZ44N + 1N4007 + + + + Pompă 2 · 12V + Lichid B · peristaltică + + + + GPIO 3.3V + + + + GPIO 3.3V + + + + + + + + + + + + + Legendă + + + Date / Control (3.3V GPIO / I2C) + + + Alimentare (12V / 5V) + + + Comutare putere (MOSFET → Pompă) + diff --git a/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/schematic.webp new file mode 100644 index 00000000000..075bcfda8ca Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/software_flow.svg b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/software_flow.svg new file mode 100644 index 00000000000..1240dabe4c0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/images/software_flow.svg @@ -0,0 +1,100 @@ + + Software Flow – Automated Drink Dispenser + + + + + + + + + + START / Reset + + + + + + + Stare: IDLE + Afișează meniu pe OLED + + + + + + + Encoder rotit? + (IRQ GPIO) + + + + + + Nu + + + + Da + + + + Stare: SELECTING + Ajustează cantitate (ml) pe OLED + + + + + + + Buton apăsat? + (SW GPIO) + + + + + + Nu + + + + Da + + + + Citește TARA (HX711) + Target = Tara + Cantitate + + + + + + + Stare: POURING + Pompă ON (GPIO HIGH) + Citire continuă HX711 + OLED + + + + + + + Greutate ≥ Target? + (HX711 task async) + + + + + + Nu + + + + + + Da + + + + DONE → Pompă OFF → Reset + diff --git a/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/index.md b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/index.md new file mode 100644 index 00000000000..c339f62cf24 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cmoldoveanu0206/index.md @@ -0,0 +1,80 @@ +# Automated Drink Dispenser + +:::info + +**Author:** Moldoveanu Cătălin-Cristian \ +**GitHub Project Link:** [Link to your repository](https://github.com/UPB-PMRust-Students/acs-project-2026-Dynamate92) + +::: + +An automated liquid mixer based on real-time weighing and sequential control of peristaltic pumps. + +## Description + +The system is an automated dispenser created for the precise mixing of two liquids (e.g., wine and sparkling water for spritz). As inputs, the system takes user commands via a Rotary Encoder (to select the mixing ratio) and continuously reads the weight of a glass placed on a load cell using an HX711 module. + +The central unit (NUCLEO-U545RE-Q) calculates the required target weight for each liquid based on the selection. As outputs, the system sequentially starts and stops two independent 12V peristaltic pumps (driven by MOSFET modules) to pour exactly the calculated amounts. The graphical interface, provided by an I2C OLED display, shows the menu and the filling progress in real time. + +## Motivation + +I chose this project because it practically combines fundamental hardware and low-level software concepts. It represents an interesting challenge to manage sensitive sensor readings (Load Cell) simultaneously with actuating power components (12V pumps), while avoiding interference and code blocking. + +It is also an excellent opportunity to use the Rust programming language (and the Embassy framework) to implement a non-blocking system: the graphical interface must remain responsive while waiting for the glass to fill to the desired weight. Lastly, the final result is a useful and fun device, perfect for the PM Fair live demonstration. + +## Architecture + +The project is divided into four main modules that work together: + +1. **Control Unit (MCU):** + * The NUCLEO-U545RE-Q board acts as the "brain" of the system, running the logic in Rust. It manages interrupts, I2C communication, and GPIO pin control. +2. **Feedback and Input System (I/O):** + * **Rotary Encoder (KY-040):** Used for navigating the screen menu and confirming selections (via the integrated push button). + * **0.96" OLED Display:** Communicates via the I2C protocol to display the current state of the machine. +3. **Weighing System:** + * **1kg Load Cell (SparkFun) + HX711 Module (Soldered):** Reads the weight of the glass and sends the data digitally to the MCU. This component dictates when the pumps should stop. +4. **Pumping System (Power & Output):** + * Two 12V peristaltic pumps, controlled via two IRLZ44N MOSFET transistors (for switching high current from the 3.3V pins of the board) and protected by 1N4007 flyback diodes against reverse voltage. + +*[Here you will add a block diagram drawn in draw.io / diagrams.net]* +![Block Diagram](./images/block_diagram.svg) + +## Log + +* **Week 6 April - 12 April:** Establishing the project theme, researching components, and ordering parts from Mouser and local electronics shops. +* **Week 13 April - 19 April:** [To be updated - e.g., Hardware assembly on the breadboard and load cell calibration] +* **Week 20 April - 26 April:** [To be updated - e.g., Finalizing the Rust code and OLED interface implementation] + +## Hardware + +### Schematics +*[Here you will add the schematic drawn in KiCad EDA]* +![Schematic](./images/schematic.webp) + +### Bill of Materials + +| Component | Quantity | Value/Model | Link | +| :--- | :--- | :--- | :--- | +| MCU Board | 1 | NUCLEO-U545RE-Q | [Mouser](https://mouser.ro) | +| Load Cell | 1 | SparkFun SEN-13329 (1kg) | [Mouser](https://mouser.ro) | +| Load Cell Amp | 1 | Soldered 333005 (HX711) | [Mouser](https://mouser.ro) | +| Peristaltic Pump | 2 | Generic 12V | [Optimus Digital](#) | +| Display | 1 | OLED 0.96" I2C | [Optimus Digital](#) | +| Rotary Encoder | 1 | KY-040 Module | [Optimus Digital](#) | +| MOSFET | 2 | IRLZ44N | [Optimus Digital](#) | +| Diode | 2 | 1N4007 | [Optimus Digital](#) | +| Step-Down Module| 1 | LM2596 (12V to 5V) | [Optimus Digital](#) | +| Power Supply | 1 | 12V 3A (5.5x2.1mm) | [Optimus Digital](#) | + +## Software + +The software logic is created exclusively in **Rust**, using an embedded systems framework (e.g., `embassy-rs`). +* The system will use asynchronous tasks to read the Rotary Encoder without blocking the main execution. +* Data from the HX711 will be polled at regular intervals while the liquid is pumping. +* The I2C interface will be used to update the OLED screen using a state-machine logic (states: Idle, Selecting, Pouring, Done). + +*[Here you will add a flowchart of the software logic]* +![Software Flow](./images/software_flow.svg) + +## Links +* [Rust on ESP/STM32 Book](https://docs.rust-embedded.org/book/) +* [HX711 Datasheet](https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf) diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/archi.svg b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/archi.svg new file mode 100644 index 00000000000..6a875bbf021 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/archi.svg @@ -0,0 +1,4 @@ + + + +A4988 Expansion Board+A4988 Stepper Driver12V 5A Power Adapter12V(Stepper Driver)Nema 17Stepper DriverMotor Phase12VLM2596 Step-DownCoverter12V5V(Expansion Board)STM32 Nucleo-U545RE-Q5VGPIO       3.3VST7789 TFT DisplaySPI3.3VVL53L1X Distance SensorI2C      3.3VMG996R ServomotorPWM      3.3VIRF520 Mosfet ModuleLM2596 Step-DownCoverter6V12V12VRotary Potentiometer3.3VADCGPIO5V12V(Switched)JF-0530B Solenoid Piston \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architect.svg b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architect.svg new file mode 100644 index 00000000000..f3a7d0fd0e9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architect.svg @@ -0,0 +1,4 @@ + + + +A4988 Expansion Board+A4988 Stepper Driver12V 5A Power Adapter12V(Stepper Driver)Nema 17Stepper DriverMotor Phase12VLM2596 Step-DownCoverter12V5V(Expansion Board)STM32 Nucleo-U545RE-Q5VGPIO       3.3VST7789 TFT DisplaySPI3.3VVL53L1X Distance SensorI2C      3.3VMG996R ServomotorPWM      3.3VIRF520 Mosfet Module5V12VRotary Potentiometer3.3VADCGPIO3.3V12V(Switched)JF-0530B Solenoid Piston
YS-27 Sensor Module
YS-27 Sensor Module
3.3V
3.3V
GPIO
GPIO
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architecturediag.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architecturediag.webp deleted file mode 100644 index a575ceb3c46..00000000000 Binary files a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/architecturediag.webp and /dev/null differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_1.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_1.webp new file mode 100644 index 00000000000..f835e899284 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_2.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_2.webp new file mode 100644 index 00000000000..2fac485ff9f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_3.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_3.webp new file mode 100644 index 00000000000..2b6d056d3a1 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_4.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_4.webp new file mode 100644 index 00000000000..371d95ddc61 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/hardware_4.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.svg b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.svg new file mode 100644 index 00000000000..ce454824148 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: project.kicad_schSheet: /AVDDVCSEL1AVSSVCSEL2GND3XSHUT5GPIO17SDA9SCL10AVDD11U2VL53L1CXV0FY1GND1VCC2SCK3SDA4RES5DC6BLK7J1Display TFT ST7789V+3V312J2Power Adapter 12V 5A+3V3GNDGND+5V123RV1R_PotentiometerGND+3.3VPWM1+2-3M1Motor_Servo+3.3VGNDSIG1VCC2GND3J5VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQ+6VGND+5V+3.3VGNDIN+1IN-2Out+3Out-4J3LM2596 6V+6VIN+1IN-2Out+3Out-4J4LM2596 5VGNDGNDGNDGNDGND1234M2Stepper_Motor_bipolar+5V+12VGND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16A1Pololu_Breakout_A4988VIN1GND2J6+12VV+1V-2J8GNDV+1V-2J7PB4PB10PB4PB10GNDVCC(+12V)SolenoidMOSFET IRF520U2VL53L1CXV0FY1AVDDVCSEL1AVSSVCSEL2GND3XSHUT5GPIO17SDA9SCL10AVDD11+3V3+3V3+3.3VJ1Display TFT ST7789VGND1VCC2SCK3SDA4RES5DC6BLK7RV1R_Potentiometer123GND+3.3VM1Motor_ServoPWM1+2-3+6VGNDJ3LM2596 6VIN+1IN-2Out+3Out-4+6VGNDGNDM2Stepper_Motor_bipolar1234+5V+12VA1Pololu_Breakout_A4988GND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16J6VIN1GND2+12VJ8V+1V-2GNDGND+5VJ5SIG1VCC2GND3 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.webp b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.webp new file mode 100644 index 00000000000..f0df83c6b8e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/images/kicad.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/index.md b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/index.md index dde7abf27bd..58e629c86d5 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/constantin.trufas/index.md @@ -11,7 +11,7 @@ A smart defense turret that uses 3D scanning to detect objects and launch a phys ## Description -The project is an **Air Defense Turret** designed for continuous environment scanning and target interaction. The system is built around an STM32 Nucleo microcontroller, coordinating a dual-axis positioning system: a stepper motor that performs a 0° to 359° horizontal sweep and a servomotor for vertical pitch control. +The project is an **Air Defense Turret** designed for continuous environment scanning and target interaction. The system is built around an STM32 Nucleo microcontroller, coordinating a dual-axis positioning system: a stepper motor that performs a 0° to 359° horizontal sweep and a servomotor for vertical pitch control. A YS-27 Hall effect sensor is integrated to precisely detect the position where the rotational sweep must stop. Distance detection is handled by a Time-of-Flight sensor, providing high-precision mapping as the turret pans. The system operates autonomously, identifying targets within its scanning arc and triggering a mechanical solenoid strike upon detection. Real-time system data and target telemetry are displayed on an integrated TFT screen. To ensure stable operation, the turret includes a dedicated power management circuit designed to handle the high-current requirements of the solenoid and drive motors. @@ -28,17 +28,16 @@ The project is built like a team where every part has a specific job, all coordi Main Components: * **The Controller**: An STM32 Nucleo board acts as the central processor. It monitors sensors, processes user input and coordinates all motor movements. -* **Power Supply**: A 12V source is distributed into three specific rails: +* **Power Supply**: A 12V source is distributed into two specific rails: * 12V for the stepper motor; - * 6V for the servo and solenoid; - * 5V for the logic circuits and sensors. -* **The Aiming System**: Enables dual-axis motion using a Stepper Motor for horizontal rotation (Pan) and a Servomotor for vertical positioning (Tilt). -* **The Sensors**: A Distance Sensor provides real-time ranging data, while a Potentiometer allows for manual calibration and fine-tuning. -* **The Trigger**: A Solenoid Piston handles the mechanical firing. It is controlled via a MOSFET, which allows the microcontroller to safely switch the high-current 6V load. -* **The Display**: A TFT Screen provides a real-time interface, showing target distance, system telemetry and operational status. - -![Diagram](images/architecturediag.webp) + * 5V for the logic circuits, servo and sensors. +* **The Aiming System**: Enables dual-axis motion using a Stepper Motor for horizontal rotation (Pan) and a Servomotor for vertical positioning (Tilt), while a Potentiometer allows for manual calibration and fine-tuning. +* **The Sensors**: A Distance Sensor provides real-time ranging data. +* **The Endstop**: A YS-27 Hall effect sensor is used to find the exact position where the rotational sweep must stop. +* **The Trigger**: A Solenoid Piston handles the mechanical firing. It is controlled via a MOSFET, which allows the microcontroller to safely switch the high-current 12V load. +* **The Display**: A TFT Screen provides a real-time interface. +![Diagram](images/architect.svg) ## Log @@ -52,15 +51,33 @@ Main Components: * This week was dedicated to searching for and ordering all the necessary hardware components. * I focused on sourcing the sensors, motors and power management modules required to bring the system to life. +### Week 4 - 10 May + +* This week was dedicated to hardware testing and physical assembly. +* I focused on verifying the functionality of the sensors, motors and power management modules, ensuring all components integrated correctly during the build process. + +### Week 11 - 17 & 18 - 24 May +* I resolved the solenoid issue to ensure the correct launch distance and force for the projectile. +* I integrated the YS-27 Hall effect sensor to precisely detect the stopping position for the rotational movement. + +### Week 25 - 27 May +* I finished the code implementation for the project. + ## Hardware -The project integrates high-performance components to achieve autonomous detection and response. The STM32 Nucleo acts as the brain, processing data from the VL53L1X ToF sensor to map the environment. Motion is handled by a Nema 17 stepper motor for precise horizontal scanning and an MG996R servomotor for manual vertical adjustment via a potentiometer. +The project integrates high-performance components to achieve autonomous detection and response. The STM32 Nucleo acts as the brain, processing data from the VL53L1X ToF sensor to map the environment. Motion is handled by a Nema 17 stepper motor for precise horizontal scanning and an MG996R servomotor for manual vertical adjustment via a potentiometer. A YS-27 Hall effect sensor is integrated to precisely detect the position where the rotational sweep must stop. + +To handle physical action, an IRF520 MOSFET triggers a solenoid piston. The entire system is powered by a 12V 5A source, stabilized by a LM2596 buck converter. Visual feedback is provided by a ST7789 TFT display, showing real-time radar telemetry. + +![Hardware_1](images/hardware_1.webp) +![Hardware_2](images/hardware_2.webp) +![Hardware_3](images/hardware_3.webp) +![Hardware_4](images/hardware_4.webp) -To handle physical action, an IRF520 MOSFET triggers a solenoid piston. The entire system is powered by a 12V 5A source, stabilized by LM2596 buck converters and a 1000µF capacitor to prevent resets during high-current spikes. Visual feedback is provided by a ST7789 TFT display, showing real-time radar telemetry. ### Schematics ---> TODO +![KiCad](images/kicad.webp) ### Bill of Materials @@ -68,21 +85,21 @@ To handle physical action, an IRF520 MOSFET triggers a solenoid piston. The enti |--------|--------|-------| | [STM32 Nucleo-64 Board](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Central processing unit that controls sensors and motors | [112.47 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | | Distance Sensor | ToF sensor used for high-precision object detection | [60 RON](https://sigmanortec.ro/senzor-distanta-vl53l1x-ic-original-tof-3-5v) | +| Hall Sensor Module YS-27 | Hall effect sensor used for precise rotational stop detection | [7 RON](https://www.optimusdigital.ro/en/hall-sensors/596-modul-cu-senzor-hall-ys-27.html?srsltid=AfmBOoo6Y0kpDOf3nXlSHnaXe9iB7Map2UxHYs6Uz77sfkQ2JNDdEwC4) | | Servomotor | Controls the vertical tilting of the turret | [29.51 RON](https://sigmanortec.ro/servomotor-mg996r-180-13kg) | | Stepper Motor | Drives the horizontal 360° rotation of the system | [91.62 RON](https://sigmanortec.ro/motor-pas-cu-pas-nema17-18-grade-42x42x48mm) | -| Stepper Driver | Translates logic signals into power for the stepper motor | [2x 8.09 RON](https://sigmanortec.ro/Driver-stepper-A4988-Radiator-p125711037) | -| Step-down Converter | Steps down 12V to 5V/6V for logic and servo power | [2x 6.69 RON](https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509) | +| Stepper Driver | Translates logic signals into power for the stepper motor | [8.09 RON](https://sigmanortec.ro/Driver-stepper-A4988-Radiator-p125711037) | +| Step-down Converter | Steps down 12V to 5V | [6.69 RON](https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509) | | Stepper Expansion Board | Simplifies wiring between the driver and the motor | [9.97 RON](https://sigmanortec.ro/placa-expansiune-driver-motor-stepper-drv8825-si-a4988-5v) | | TFT Display | Shows real-time radar data and system telemetry | [30.64 RON](https://sigmanortec.ro/display-tft-13-ips-spi-65k-culori-lcd-st7789v-240x240-7p) | -| Solenoid Piston | Provides the mechanical strike when a target is detected | [24.74 RON](https://sigmanortec.ro/piston-electromagnetic-jf-0530b-cu-solenoid-6v-push-pull) | +| Solenoid Piston | Provides the mechanical strike when a target is detected | [24.74 RON](https://sigmanortec.ro/piston-electromagnetic-jf-0530b-cu-solenoid-12v-push-pull) | | Rotary Potentiometer | Allows manual adjustment of the turret's vertical tilt angle | [13.65 RON](https://sigmanortec.ro/modul-potentiometru-rotativ-10k-liniar-3-5v) | -| Breadboard | Used for prototyping and connecting all components | [10 RON](https://www.emag.ro/breadboard-h-hct-tronic-830-puncte-de-conectare-abs-200x630-puncte-034-066/pd/DBNQ7R3BM/) | | 12V 5A Power Adapter | The main power source for the entire turret system | [50.70 RON](https://www.emag.ro/alimentator-12v-5a-cu-mufa-5-5-2-1-mm-cablu-de-alimentare-inclus-ev-5a/pd/DY6PTDBBM/) | | DC Female Jack Adapter | Connects the power adapter to the breadboard wires | [4.14 RON](https://www.emag.ro/mufa-alimentare-mama-cu-surub-201801013096/pd/D9FK8GBBM/) | | IRF520 MOSFET Module | Electronic switch used to trigger the 6V solenoid | [12.60 RON](https://www.emag.ro/modul-bazat-pe-tranzistorul-n-mosfet-irf520-elektroweb-3-5-v-5-a-2-m-114/pd/DSGC35MBM/) | -| Rectifier Diodes | Protect the circuit from solenoid spikes| [15.13 RON](https://www.emag.ro/set-25-diode-redresoare-mic-1n4007-1a-1000v-tme-1n4007/pd/DRGPNRMBM/) | -| Capacitor | Stabilizes voltage and prevents system resets | [2x 5.08 RON](https://www.emag.ro/condensator-electrolitic-1000uf-25v-dc-105-c-jb-capacitors-jrg1e102m05001300210000b-t128542/pd/DJWX2XMBM/) | -| **Total** | - | **504.89 RON** | +| Breadboard 170 points | - | [2x 2.42 RON](https://sigmanortec.ro/Breadboard-170-puncte-diferite-culori-p126177349) | +| Transistor NPN 2n2222 | Used to switch the MOSFET module | - | +| **Total** | - | **466.93 RON** | ## Software @@ -91,10 +108,15 @@ To handle physical action, an IRF520 MOSFET triggers a solenoid piston. The enti | [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Interface | Connects Rust code to physical pins | | [embassy-time](https://crates.io/crates/embassy-time) | Time Management | Handles delays for motor speed and timing | | [embassy-executor](https://crates.io/crates/embassy-executor) | Task Manager | Runs scanning and detection tasks simultaneously | +| [embassy-futures](https://crates.io/crates/embassy-futures) | Async Utilities | Joins asynchronous tasks together | | [defmt](https://crates.io/crates/defmt) | Debug Logging | Sends real-time status messages for debugging | | [panic-probe](https://crates.io/crates/panic-probe) | Error Handling | Reports crashes via the debug interface | -| [vl53l1x](https://crates.io/crates/vl53l1x) | ToF Sensor Driver | Reads distance data from the sensor via I2C | +| [vl53l1x-uld](https://crates.io/crates/vl53l1x-uld) | ToF Sensor Driver | Reads distance data from the sensor via I2C | | [st7789](https://crates.io/crates/st7789) | Display Driver | Controls the TFT screen over SPI | +| [micromath](https://crates.io/crates/micromath) | Math library | Calculate mathematical functions | +| [display-interface-spi](https://crates.io/crates/display-interface-spi) | SPI Interface | Handles SPI communication for the display | +| [embedded-graphics](https://crates.io/crates/embedded-graphics) | Graphics Library | Draws radar lines, circles and detection points | + ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/diagrama.svg new file mode 100644 index 00000000000..2e92cb8650c --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/diagrama.svg @@ -0,0 +1,4 @@ + + + +
STM32

MAIN MICROCONTROLLER
STM32...
3 x Push Buttons for LEDs
3 x Push Buttons for...
3 x Photoresistors (LDRs)
3 x Photoresistors (...
Potentiometer
Potentiometer
Menu Navigation Buttons 
(Next / Select)
Menu Navigation Butt...
GPIO
GPIO
ADC
ADC
ADC
ADC
GPIO
GPIO
INPUTS
(USER RESPONSES)
INPUTS...
Buzzer
(Audio stimuli)
Buzzer...
3 x LEDs
(Visual stimuli)
3 x LEDs...
Servo Motor
(Mechanical stimuli)
Servo Motor...
OUTPUTS
(STIMULI)
OUTPUTS...
LCD Display 
(Menu, Instructions, Statistics)
LCD Display...
Reaction time measurement
Reaction time measur...
Random generation of stimuli
Random generation of...
Error detection
Error detection
PWM
PWM
GPIO
GPIO
PWM
PWM
I2C
I2C
SOFTWARE LOGIC 
(Rust Firmware)
SOFTWARE LOGIC...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/index.md b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/index.md new file mode 100644 index 00000000000..b1153f11860 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/index.md @@ -0,0 +1,152 @@ +# Reaction time trainer +A device that measures and evaluates user reaction time using randomly generated stimuli. + +:::info + +**Author**: Ion Cristina-Gabriela \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-cristinaion0109 + +::: + + + +## Description +The project involves designing and implementing a device based on an STM32 microcontroller that tests user reaction speed using randomly generated visual, auditory and sensor-based stimuli. + +The system measures the time between the appearance of a stimulus and the user’s response, detects incorrect actions, false starts, or delayed reactions, and applies penalties when necessary. After each round, the user receives immediate feedback on their performance, including the reaction time, while at the end of a session, the device displays overall statistics such as the best time, average time and total number of errors. + + +## Motivation +The main source of inspiration was the set of project ideas proposed by the professor, which I found both interesting and suitable for an embedded systems application. Additionally, I was particularly drawn to the concept of measuring reaction time, as I have always been curious to understand, beyond simple numbers, how quickly we can process visual or auditory stimuli. + +This project allows me to work with different types of inputs and outputs, such as LEDs, sensors, and displays, while also implementing timing and user interaction, making it both practical and engaging. + + +## Architecture + +![Schema Block](./diagrama.svg) + +## Log + +### Week 21 - 27 April +I looked for the components I needed + +### Week 28 April - 4 May +I received the components ordered from Drot and Bitmi + + +### Week 5 - 11 May +I completed the full schematic. I have a clear view of the system architecture. + +I connected all hardware components. I verified all electrical connections. + +I tested every module individually. I configured the Rust development environment and I started writing the initial firmware. + +### Week 12 - 18 May +I implemented the core game firmware using the Rust Embassy async framework. + +I integrated all hardware components into asynchronous tasks. This includes LEDs, buttons, photoresistors, the potentiometer, the servo, and the buzzer. + +I added the scoring logic and life tracking system. I implemented precise reaction time measurement for each round. I also configured the display to show real-time stats, rounds and game-over screens. + +I implemented a comprehensive False Start detection system. It monitors all inputs simultaneously during the random waiting phase. + +I have integrated audio feedback using the buzzer. The system now plays distinct sounds for correct and incorrect actions. + +### Week 19 - 25 May + +## Hardware +The system is based on an STM32 Nucleo board, which acts as the main controller. It handles the generation of stimuli, reads user inputs from various sensors and components, and measures the reaction time with high precision + +Main parts: + +- STM32 Nucleo Board - This is the main controller of the device. It generates stimuli, reads inputs from buttons and sensors, measures reaction time, and manages the game logic, including scoring, error detection and game mode selection +- LEDs - These are used as visual stimuli. When a specific LED lights up, the user must press the corresponding button as quickly as possible. They provide a simple and fast way to test reaction to visual signals +- Buttons - These are the main input devices for the user. Each button corresponds to a specific action or stimulus. The system detects button presses and checks whether the response is correct and within the allowed time +- Active Buzzer - This component generates audio stimuli. When a sound is played, the user must respond by rotating the potentiometer +- Passive Buzzer - This component generates audio feedback based on game outcomes +- Potentiometer - This component is used to detect user input. In response to certain stimuli (sound), the user must rotate the potentiometer. The STM32 reads its value and determines whether the action was performed correctly +- Photoresistors - These sensors detect changes in light intensity. The system can display instructions such as covering a specific sensor, and the user must react +- Servo Motor: The servo is used to create a mechanical stimulus by raising a small flag. When the flag is lifted, the user must press a specific button +- Display (LCD): The display is used to show instructions, reaction times and game statistics. It also provides a menu for selecting the game mode and guides the user throughout the session + + + +### Schematics + +![Schematics](./pm_schema.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | Provided by university | +| [LED](https://www.drot.ro/platforma-arduino/1031-led-dioda-ro-ie-5-mm.html) | Stimulus | 0,44 RON | +| [LED](https://www.drot.ro/platforma-arduino/1032-led-dioda-verde-5-mm.html) | Stimulus | 0,44 RON | +| [LED](https://www.drot.ro/platforma-arduino/1035-led-dioda-albastra-5-mm.html) | Stimulus | 0,44 RON | +| [Potentiometer](https://www.drot.ro/platforma-arduino/7597-potentiometru-liniar-10k-ohm.html) | Analog input | 3,92 RON | +| [Servomotor sg90](https://www.bitmi.ro/electronica/servomotor-sg90-180-grade-9g-10496.html#resp-tab2) | Stimulus | 9,99 RON | +| [3 x Photoresistor](https://www.bitmi.ro/electronica/modul-senzor-cu-fotorezistor-ldr-compatibil-arduino-10394.html) | Light-dependent input | 3 x 2,43 RON | +| [Passive buzzer](https://www.bitmi.ro/electronica/modul-buzzer-pasiv-ky-006-10678.html#resp-tab2) | Audio feedback | 2,99 RON | +| [Active buzzer](https://www.bitmi.ro/electronica/modul-buzzer-activ-compatibil-arduino-10397.html) | Stimulus | 3,24 RON | +| [Breadboard](https://www.bitmi.ro/electronica/breadboard-830-puncte-mb-102-10500.html) | For prototyping and power distribution | 13,99 RON | +| [Breadboard](https://www.bitmi.ro/electronica/breadboard-400-puncte-pentru-montaje-electronice-rapide-10633.html) | For prototyping and power distribution | 6,99 RON | +| [LCD Display](https://www.bitmi.ro/electronica/display-lcd1602-hd44780-albastru-iluminat-10486.html) | Human-Machine Interface | 13,99 RON | +| [I2C LCD Interface Module](https://www.bitmi.ro/electronica/modul-interfata-i2c-pentru-lcd1602-10456.html) | I2C converter | 9,99 RON | +| [Bidirectional Logic Level Converter](https://www.bitmi.ro/electronica/convertor-nivel-logic-iic-i2c-bidirectiona-4-canale-10462.html) | Logic level shifter | 2,99 RON | +| [Buttons](https://www.drot.ro/platforma-arduino/1180-mikroswitch-tc-1212t-12-x-12-x-7-3-mm-smd-pcb.html) | Digital inputs | 6 x 0,87 RON | +| [Male-to-Male jumper wires](https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-tata-20cm-10511.html) | For breadboard and peripheral connections | 8,99 RON | +| [Male-to-Female jumper wires](https://www.bitmi.ro/electronica/40-x-fire-dupont-tata-mama-20cm-10512.html) | For breadboard and peripheral connections | 6,99 RON | + + + +## Software + +The firmware is built using Rust and the Embassy async framework, allowing efficient, non-blocking execution of multiple game elements simultaneously. + +1. Centralized Game Management: + + The core game loop operates as a finite state machine that coordinates the entire gameplay experience: + + - It supports two distinct game modes: Normal Mode (a balanced gameplay experience with fixed, comfortable timeout windows for each round, allowing the player to focus on accuracy), Speed Mode (An intense mode where the system automatically reduces the timeout window as the player advances through rounds, demanding faster reaction times) + - Random Round Selection: Dynamically switches between 4 distinct round types (LED, Potentiometer, Photoresistor, or Servo) + - State & Life Tracking: Manages the player's lives, increments scores, and triggers the appropriate game-over or victory transitions + +2. Multi-Peripheral Asynchronous Integration + + - Inputs (Buttons & Servo Trigger): Managed through hardware interrupts (EXTI) and thread-safe signals (Signal) to capture user actions instantly + - Outputs (Display & Buzzer Tasks): Run as independent background tasks that wait for instructions through Channel queues. This prevents screen updates and audio generation from freezing or lagging the main game logic + - Analog Sensors (Potentiometer & Photoresistors): Sampled smoothly via the ADC during specific gameplay windows to accurately read light levels and potentiometer positions + +3. Anti-Cheating - detect false start + + An active monitoring system runs during the random waiting phase ("Get ready..."). It polls all hardware entry points simultaneously (buttons, potentiometer, and all 3 light sensors). By calculating the change of the analog inputs, it securely catches any premature movement or light alterations regardless of environmental conditions, instantly penalizing the player + + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32] | The main library that connects the Rust code to the STM32 hardware | Used to initialize and configure all physical pins and peripherals: ADC (sensors), PWM (servo/buzzer), I2C (display communication), and EXTI (interrupt-based buttons). | +| [embassy-time] | Time management utilities for delays, timestamps, and intervals | Used for the sensor polling loops to catch cheating, enforcing maximum response deadlines (timeouts) for each round, and measuring the player's exact reaction time | +| [embassy-executor] | The runtime task manager for asynchronous execution | Used to launch and run multiple separate tasks (like the game manager, display updates, and buzzer sounds) concurrently | +| [embassy-futures] | Async flow control and concurrency utilities | Uses select and select3 to monitor multiple events at the same time | +| [embassy-sync] | Thread-safe synchronization primitives for communication | Uses Channel and Signal to safely pass data (like button events or display commands) between different running tasks | +| [hd44780_driver] | Hardware driver for the HD44780-compliant character LCD display | Used to initialize the screen mode, control the cursor, and print real-time game text (scores, lives, and states) via the I2C bus | + + +## Links + + + +1. [https://github.com/UPB-PMRust/lab-solutions] +2. [https://github.com/embassy-rs/embassy/tree/main/examples/stm32] +3. [https://docs.rs/hd44780-driver/latest/hd44780_driver/] diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/pm_schema.svg b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/pm_schema.svg new file mode 100644 index 00000000000..8accbbd1622 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cristina.ion0109/pm_schema.svg @@ -0,0 +1 @@ +SVG Image created as pm.svg date 2026-05-11T20:53:34 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: pm.kicad_schSheet: /GNDPWM1+2-3M1Motor_Servo+5V+3.3V123J1Buzzer+3.3VGNDGND+3.3V123J4LDR_GREEN_moduleGNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQD1LED1R1220D3LED3R3220SW4SW_PushGND+3.3VGNDSW5SW_PushGNDGNDD2LED2GNDR2220GND123456J7LVSPICE123Potentiometer+3.3V+3.3V+5VGND123456J8HVGNDSW2SW_PushGNDGNDSW1SW_PushSW3SW_PushGNDGND123J2LDR_RED_module1234J5LCDGND+5V+3.3V123J3LDR_BLUE_moduleGNDLED_REDHV1BUZZERHV2HV1BTN_BLUELED_BLUESIGNAL_SERVOPOTBTN_NEXTBTN_SELECTBTN_GREENSCLLDR_REDLDR_BLUELDR_GREENLED_GREENBTN_REDHV2SDALED_BLUELDR_REDSIGNAL_SERVOSDABTN_BLUELDR_GREENLDR_BLUEBUZZERBTN_GREENBTN_SELECTBTN_REDSCLBTN_NEXTPOTLED_REDLED_GREENLCD + CONVERTORLDRsBUTTONS FOR LEDsLEDsPotentiometer123GND+3.3VJ5LCD1234GND+5VGNDM1Motor_ServoPWM1+2-3+5VJ1Buzzer123+3.3VGNDGNDJ7LV123456+3.3V+5VGNDJ8HV123456GNDGNDJ2LDR_RED_module123+3.3VJ3LDR_BLUE_module123+3.3VGND+3.3VJ4LDR_GREEN_module123GNDU1STM32U545RETxQVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/alimentare.webp b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/alimentare.webp new file mode 100644 index 00000000000..ee29cce3e44 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/alimentare.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/controller.webp b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/controller.webp new file mode 100644 index 00000000000..4db216b9949 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/controller.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/finalarchh.webp b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/finalarchh.webp new file mode 100644 index 00000000000..84bedaaa787 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/finalarchh.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematic.webp new file mode 100644 index 00000000000..e38a1070bce Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematichard.svg b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematichard.svg new file mode 100644 index 00000000000..8167391efb0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/schematichard.svg @@ -0,0 +1 @@ + diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/teren.webp b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/teren.webp new file mode 100644 index 00000000000..49b164ceed8 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/images/teren.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/index.md b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/index.md index 1f95cc56f49..07458f4b5a7 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/cristina.stinga/index.md @@ -13,7 +13,7 @@ A dual-controller foosball game The project is an interactive foosball game designed for a dynamic two-player experience. Each player uses a custom-built remote controller to command their digital striker on the field. The strikers are powered by stepper motors and move along the OX axis to position themselves and execute rapid striking maneuvers to kick the ball. -Using a set of arcade-style buttons, players can move their striker left or right to block shots and trigger a strike action to score a goal. The system features a distributed architecture, where a central STM32 master coordinates the movement while two Raspberry Pi Pico units handle player input and real-time scoring updates on OLED displays. To ensure reliability and precision, the machine is equipped with endstops to recognize its frame boundaries and infrared sensors to automatically detect goals. +Using a set of arcade-style buttons, players can move their striker left or right to block shots and trigger a strike action to score a goal. The system features a distributed architecture, where a central STM32 master coordinates the movement while two Raspberry Pi Pico units handle player input and real-time scoring updates on OLED displays. To ensure reliability and precision, the machine is equipped with infrared sensors to automatically detect goals. This project combines hardware engineering and real-time control into a fun, high-speed test of player coordination. @@ -37,12 +37,11 @@ The project uses a modular design where different parts work together to control * **Sensors & Feedback** * Goal Detection: Infrared sensors are placed in the goals. When the ball passes, the system automatically updates the score. * OLED Displays: Small screens that show the current score. - * Endstops: Limit switches that tell the motors to stop at the edges. * **User Controls** * Arcade Buttons: High-quality buttons that players use to move and shoot. They are designed for fast and repeated use. -![Diagram](images/architecture.svg) +![Diagram](images/finalarchh.webp) ## Log @@ -60,21 +59,43 @@ The project uses a modular design where different parts work together to control * Decided to use buttons instead of joysticks for better control. -### Week 20 - 26 April +### Week 20 April - 26 April * Ordered all the necessary electronic components and hardware parts. * Sent the custom-designed slider parts for 3D printing to begin the mechanical assembly. +### Week 27 April - 3 May + +* Completed the hardware setup for both controllers: mounted the displays, wired the buttons and soldered the USB-C ports. + +* Configured UART communication between the STM32 and both Raspberry Pi Picos. I verified that button signals are received correctly and that the STM32 sends updates to be displayed based on the attack button presses. + +### Week 4 May - 10 May + +* Assembled the game table and worked on its design. + +* Assembled the movement mechanism and connected everything to a 12V power source. + +* Connected IR sensors to each gate so that they would display the correct score on the screens when they detect the ball. + +### Week 11 May - 17 May + +* Completed the attack and movement mechanics. + +### Week 18 May - 24 May + +* Tested and improved the movement and overall gameplay. + ## Hardware The system uses one main controller (STM32 Nucleo-U545RE-Q) and two secondary boards (Raspberry Pi Pico H) to handle the game smoothly. -* **Main Controller (STM32 Nucleo-U545RE-Q)**: This is the brain of the project. It runs the game logic and tells the motors how to move. It communicates with the player boards using Serial communication via USB-C modules and sends signals to the motor drivers. +* **Main Controller (STM32 Nucleo-U545RE-Q)**: This is the brain of the project. It runs the game logic and tells the motors how to move. It communicates with the player boards using UART communication via physical USB-C connectors and sends signals to the motor drivers. * **Player Boards (Raspberry Pi Pico)**: Each player has a Pico board. Its job is to read the Arcade Buttons and show the score on the OLED screens. -* **Motors & Movement:** I use NEMA 17 motors with a GT2 belt system to move the players. Linear bearings and steel rods make the movement smooth, while Endstops stop the motors safely at the edges. +* **Motors & Movement:** I use NEMA 17 motors with a GT2 belt system to move the players. Linear bearings and steel rods make the movement smooth. * **Sensors:** IR Sensors are placed in the goals. When the ball passes through, the sensor sends a signal to the STM32 to increase the score. @@ -82,6 +103,18 @@ The system uses one main controller (STM32 Nucleo-U545RE-Q) and two secondary bo ### Schematics +![STM](images/schematic.webp) + +### Photos + +![STM](images/alimentare.webp) +![Controller](images/controller.webp) +![Teren](images/teren.webp) + +### Demo + +[Click here to watch the game demonstration on YouTube](https://youtube.com/shorts/OHXiuTB1oWg) + ### Bill of Materials | Device | Usage | Price | @@ -93,7 +126,6 @@ The system uses one main controller (STM32 Nucleo-U545RE-Q) and two secondary bo | [A4988 Expansion Board](https://sigmanortec.ro/placa-expansiune-driver-motor-stepper-drv8825-si-a4988-5v?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72PYOVYYJVcWF-co_NlzFjur9&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV-6k3v8b6p63zTdHONLPGIyYjfyJo4oz8hcuQrUugva4Ze6RGrzyyIaAlCVEALw_wcB) | Simplifies wiring and protects drivers from voltage spikes | 9.97 RON x 2| | [OLED Displays (0.96")](https://sigmanortec.ro/display-oled-096-i2c-iic-alb) | Small screens that show the live score to each player | 16.95 RON x 2 | | [Infrared obstacle sensor](https://sigmanortec.ro/Senzor-obstacol-IR-p125423458) | Detect when the ball enters the goal to update the score automatically | 3.12 RON x 2 | -| [Endstops SS-5GL2](https://sigmanortec.ro/Endstop-mecanic-SS-5GL2-p136284192) | Small switches that detect when the slider reaches its physical limit | 5.23 RON x 4 | | [Arcade Buttons](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1852-buton-arcade-iluminat-24mm-galben.html) | Durable buttons used by players to move and shoot | 9.99 RON x 6 | | [LM2596 Step-Down Module](https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509) | Converts 12V to stable 5V output | 6.69 RON | | [GT2 Timing Pulley](https://sigmanortec.ro/Fulie-dintata-GT2-20-dinti-ax-5mm-p125814315) | Used to drive the belt and move the players | 4.67 RON x 2 | @@ -110,14 +142,16 @@ The system uses one main controller (STM32 Nucleo-U545RE-Q) and two secondary bo | [Mini Breadboard (170 pts)](https://sigmanortec.ro/Breadboard-170-puncte-diferite-culori-p126177349?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72PYOVYYJVcWF-co_NlzFjur9&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV9Gx6bAxHp8FiXbmVABCp3OWb9gofa_dZ5HeVo4je3Yepal9UyQ3ssaApKjEALw_wcB) | Provides a stable mounting point for the Pico H and connects arcade buttons/OLEDs | 2.42 RON x 2 | | [Breadboard (830 pts)](https://www.emag.ro/breadboard-h-hct-tronic-830-puncte-de-conectare-abs-200x630-puncte-034-066/pd/DBNQ7R3BM/?ref=history-shopping_485525269_1558_1) | Main hub for STM32 integration | 10.00 RON | | [Electrolytic Capacitor](https://www.emag.ro/condensator-electrolitic-100uf-25v-dc-105-c-aishi-t128297/pd/D911MSMBM/?ref=history-shopping_486202414_7656_1) | Filters power supply noise and protects drivers from voltage spikes | 3.03 RON x 3 | -| **TOTAL** | **Estimated Total Project Cost** | **727.09 RON** | +| [IRF520 MOSFET Module](https://www.emag.ro/modul-bazat-pe-tranzistorul-n-mosfet-irf520-elektroweb-3-5-v-5-a-2-m-114/pd/DSGC35MBM/) | Allows the STM32 to control the 12V solenoid for the attack mechanism | 12.60 RON x 2 | +| [Push-Pull Solenoid](https://sigmanortec.ro/piston-electromagnetic-jf-0530b-cu-solenoid-12v-push-pull) | Used for offensive mechanics| 24.38 RON RON x 2 | +| **TOTAL** | **Estimated Total Project Cost** | **780.13 RON** | ## Software | Library | Description | Usage | |--------|--------|-------| -| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Abstraction Layer for STM32 microcontrollers | Used to control the motor pins, read the IR sensors and handle Serial communication | +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Abstraction Layer for STM32 microcontroller | Used to control the motor pins, read the IR sensors and handle Serial communication | | [embassy-rp](https://crates.io/crates/embassy-rp) | Hardware Abstraction Layer for the Raspberry Pi Pico | Used on the player boards to read the arcade buttons and drive the OLED displays | | [embassy-executor](https://crates.io/crates/embassy-executor) | An async/await executor for embedded systems | Used to run multiple tasks at once, like moving the motor while checking for button presses | | [embedded-graphics](https://crates.io/crates/embedded-graphics) | A 2D graphics library for embedded screens | Used to draw the score on the OLED displays | diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/diagrama.svg new file mode 100644 index 00000000000..4c2c28e8cc7 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/diagrama.svg @@ -0,0 +1,51 @@ + + + + + + + + + + MAINS POWER (AC) + + + 12V 20A PSU + + + REGULATOR LM2596 + (12V to 5V) + + + STM32 BLUE PILL + + + A4988 DRIVER + (1/16 Microstepping) + + + MOTOR NEMA 17 + + + ENCODER + + + OLED 0.96 I2C + + + SUN & STARS + (WS2812B + LED Matrix) + + + RTC DS3231 + + + + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schema.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schema.webp new file mode 100644 index 00000000000..824ed26da24 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schema.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schematics.webp new file mode 100644 index 00000000000..62ea03633dd Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step1.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step1.webp new file mode 100644 index 00000000000..62082608675 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step2.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step2.webp new file mode 100644 index 00000000000..37decac055b Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step4.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step4.webp new file mode 100644 index 00000000000..2e1ac0091d2 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step4.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step5.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step5.webp new file mode 100644 index 00000000000..5be0e088421 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step5.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step6.webp b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step6.webp new file mode 100644 index 00000000000..50a43dbe649 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/images/step6.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/index.md new file mode 100644 index 00000000000..cfbef1dcf6c --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/daria.niculescu/index.md @@ -0,0 +1,124 @@ +# Mini Solar System Simulator +A model depicting the Earth's rotation and revolution movements around the Sun, surrounded by constellations + + +:::info + +**Author**: Daria-Antonia Niculescu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-ifrit18 + +::: + +## Description +This project is a mechanical and electronic simulation of orbital motion, designed as an interactive educational tool. The device uses an STM32 development board to control the rotation of a mechanical arm (representing Earth's orbit) around a light center (the Sun). The project provides real-time information on an OLED screen and envisions constellations through LED light points. + +## Motivation +I chose this project because it allows me to bring together two of my biggest passions: astronomy and hardware. It presents a unique challenge to bridge the gap between abstract celestial mechanics and tangible physical implementation and also give me the opportunity to present a visually stunning scenary. + +## Architecture + +The project is divided into a few main parts that work together. + +**TM32 Control Unit**: The brain that processes encoder inputs, manages orbital timing, and controls the OLED and motor driver. + +**Precision Drive System**: A NEMA 17 motor with an A4988 driver provides micro-stepping for smooth revolution, using a flexible coupling to dampen vibrations. + +**Visual Interface (HMI)**: A 0.96" OLED displays real-time telemetry, while a rotary encoder allows for intuitive speed and menu adjustments. + +**Celestial Lighting**: A central WS2812B RGB Ring represents the Sun, complemented by a 16-LED matrix to illuminate specific star patterns. + +**Power Management**: A 12V supply powers the motor, while an LM2596 Step-Down converter provides stable 5V logic power for the STM32 and LEDs. + +**Rapid-Prototyping Framework**: Uses an MB-102 Breadboard and Kapton tape for a screwless, modular assembly that is easy to modify and repair. + +![Diagram](./images/diagrama.svg) + +## Gallery +**Step 1** +![Photo](./images/step1.webp) + +**Step 2** +![Photo](./images/step2.webp) + +**Step 3** +![Photo](./images/step4.webp) + +**Step 4** +![Photo](./images/step5.webp) + +**Step 5** +![Photo](./images/step6.webp) + +## Video Demonstration +[Watch the project demo here](https://drive.google.com/drive/folders/1OKeiW1OGHsNHTvHbE8E_I3Dv4BRAlutm?usp=drive_link) + +## Log + +### Week 20 - 24 April +Ordered the hardware components. + +### Week 27 - 30 April +Picked up the hardware components and started the documentation process. + +### Week 4 - 10 May +Created the constellation design. Cut up the model for the sky and made the holes for the stars. +Also connected the NEMA Motor to the driver. + +### Week 11 - 17 May +Started working on the electric circuit and sticking the 92 LEDs into the right position. +Grouped the LEDs into 2 groups controlled by four pins. As I was makeing them, I was testing them +one by one. On Sunday night, I short-circuited the microcontroller. + +### Week 18 - 24 May +Got a new microcontroller, then I started redoing the circuit and better isolating the wires. +On Tuesday, it worked!! Added the OLED screen, the motor and started the software part, which was the easiest. + +### Week 25 - 27 May +Completed the documentation. + +## Hardware +**Fastening**: Structural screws were eliminated in favor of hot gun glue for securing modules onto the aluminum arm, ensuring a lightweight and non-conductive mounting solution. + +**Constellations**: The star map is implemented via a manually perforated wood panel, with rear-mounted LEDs aligned to the apertures to create a precise point-source light effect. + +### Bill of Materials + +| Device| Usage | Price | +| :---- | :---- | :---- | +| **STM32 Blue Pill** | Central Processing Unit | free | +| **Motor NEMA 17** | Stepper motor for the orbital motion of the arm | ~70 lei | +| **Driver A4988** | Current and step control for the motor | ~ 8 lei | +| **OLED 0.96" I2C** | Real-time telemetry display and menu | ~ 18 lei | +| **Encoder Rotativ** | User input device (speed, navigation) | ~ 4 lei | +| **Plastic Sun** | Visual representation of the Sun| ~ 15 lei | +| **Sursă 12V 20A** | Main power supply for the entire system | ~ 65 lei | +| **Cuplaj 5x8mm** | Mechanical motor-shaft connection | ~ 10 lei | +| **Glue gun** | Insulating mechanical fastening | borrowed | +| **LED-uri 5mm & 3mm** | Point-source lighting for the constellation map | ~27 lei | + + +### Schematics +![Scheme](./images/schematics.webp) + +### Electric Circuit for one pin + +![Scheme](./images/schema.webp) + +## Software + +My program runs on an STM32 microcontroller using the Embassy async framework and spawns three +concurrent tasks: a stepper motor driver that continuously pulses a STEP pin with precise +microsecond timing, a LED sequencer that cycles through four constellation/season LED groups +on a 2-second base timer, and a main loop that drives a 128×64 SSD1306 OLED display over I2C, +rendering a simple calendar that cycles through the 12 Romanian month abbreviations every 2 seconds. + +| Library | Description | Usage | +| :---- | :---- | :---- | +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32) | Async framework for embedded Rust | Peripheral drivers, I2C, GPIO | +| [embassy-executor](https://docs.embassy.dev/embassy-executor) | Async task executor for embedded | Running 3 parallel async tasks | +| [embassy-time](https://docs.embassy.dev/embassy-time) | Time management in Embassy | Async timers and delays | +| [ssd1306](https://crates.io/crates/ssd1306) | OLED display driver | Real-time data display via I2C | +| [embedded-graphics](https://crates.io/crates/embedded-graphics) | 2D graphics library for embedded | Text rendering on OLED | +| [defmt](https://crates.io/crates/defmt) | Lightweight logging framework | Debug output over RTT | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler for embedded | Debugging and error reporting | + diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.balan/altitude_hold_drone.svg b/website/versioned_docs/version-acs_cc/project/2026/david.balan/altitude_hold_drone.svg new file mode 100644 index 00000000000..689da89c800 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.balan/altitude_hold_drone.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVGMotorA1B2C3M1GNDCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U1MPU-6050+BATTBT1Battery_CellGNDGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico_WGND+5V+3V3GNDGNDESC_30ABAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8J3GND+3V3GND+3V3+BATTGNDGND+BATT+BATT+BATTPWR_FLAG+5VGND1CSB2SDI3SCK4SDO5VDDIO6GND7VDD8U3BMP280AVDDVCSEL1AVSSVCSEL2GND3XSHUT5GPIO17SDA9SCL10AVDD11U2VL53L1CXV0FY1+3V3ESC_30ABAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8J4MotorA1B2C3M4ESC_30ABAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8J1+3V3GNDGNDMotorA1B2C3M3MotorA1B2C3M2GNDESC_30ABAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8J2GNDM1_BM4_CM4_BM4_AM1_CM1_AM1_BM2_CM3_AM2_BM3_BM2_AM1_CM2_AM4_AM4_BM4_CPWM_M4PWM_M2SDAPWM_M3PWM_M4SCLSCLSDAPWM_M1SDASCLSDASCLM3_AM2_BM2_CPWM_M2M3_BM3_CM3_CPWM_M3M1_APWM_M1Balan David-CristianBT1Battery_CellGNDGND+BATT+BATTPWR_FLAGJ4BAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8GNDGNDU1MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24A1RaspberryPi_Pico_WGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40GND+3V3+3V3+5V+3V3+3V3U2VL53L1CXV0FY1AVDDVCSEL1AVSSVCSEL2GND3XSHUT5GPIO17SDA9SCL10AVDD11GNDU3BMP280GND1CSB2SDI3SCK4SDO5VDDIO6GND7VDD8+3V3GNDJ3BAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8GND+BATTGNDJ2BAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8GNDJ1BAT+1BAT-2SIG3BEC_5V4GND_SIG5A6B7C8+5V+BATTGND+BATTGND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.balan/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/david.balan/architecture.svg new file mode 100644 index 00000000000..3a7a2aec339 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.balan/architecture.svg @@ -0,0 +1,4 @@ + + + +
Android phone
Rust app - UDP control
Android phone...
MPU-6050 (GY-521)
3-axis gyroscope
3-axis accelerometer
MPU-6050 (GY-5...
BMP280
Barometric pressure
Absolute altitude
BMP280...
VL53L1X
Laser ToF distance
Range up to 4m
VL53L1X...
WiFi (CYW43439)
Built into Pico 2W
UDP socket
2.4 GHz access point
WiFi (CYW43439...
PID - Altitude
PID - Altit...
PID - Yaw
PID - Yaw
PID - Roll
PID - Roll
PID - Pitch
PID - Pitch
Setpoint Manager
Target: throttle, pitch, roll, yaw, altitude
Lock altitude when throttle released
Setpoint Manager...
Kalman Filter
accel + gyro + baro + ToF
Predict -> Update -> State estimate
Kalman Filter...
Motor Mixer
4 PID outputs -> 4 motor speeds
Motor Mixer...
ESC 1 - 30A BLHeli
ESC 1 - 30A BL...
M1 - CW
Front-left
M1 - CW...
ESC 4 - 30A BLHeli
5V to Pico
ESC 4 - 30A BL...
ESC 3 - 30A BLHeli
ESC 3 - 30A BL...
ESC 2 - 30A BLHeli
ESC 2 - 30A BL...
BEC (in ESC 4)
5V / 2A regulator
Powers Pico + sensors
BEC (in ESC 4)...
PDB
Distributes 11.1V to 4 ESCs
PDB...
3S LiPo battery
11.1V, 2200mAh
3S LiPo battery...
M2 - CCW
Front-right
M2 - CCW...
M3 - CW
Rear-right
M3 - CW...
M1 - CCW
Rear-left
M1 - CCW...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.balan/index.md b/website/versioned_docs/version-acs_cc/project/2026/david.balan/index.md new file mode 100644 index 00000000000..3d57279b204 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.balan/index.md @@ -0,0 +1,100 @@ +# Altitude-Hold Drone + +A WiFi-controlled quadrotor drone that autonomously maintains altitude when no operator input is received. + +:::info + +**Author**: David-Cristian Balan +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-davidbalan05](https://github.com/UPB-PMRust-Students/acs-project-2026-davidbalan05) + +::: + +## Description + +The project is a quadrotor drone designed for indoor flight, controlled from an Android phone over WiFi. It reads orientation data from an IMU and altitude data from an ultrasonic sensor, fuses the IMU readings through a Kalman filter, and uses PID controllers to stabilize attitude and hold altitude. When the operator releases the throttle, the drone locks the last commanded altitude and stays in place. The flight controller firmware and the Android control app are written in Rust. + +## Motivation + +I chose this project because it combines real-time embedded control, sensor fusion, and wireless communication into one system where every component matters. Most flight controllers are written in C/C++ — building one in Rust pushes me to understand every layer of a real cyber-physical system rather than treating any of them as a black box. + +## Architecture + +The system is organized into six layers, with data flowing top-down from the user's command to the spinning motors and power flowing bottom-up from the battery to every component: + +* **Remote control** — an Android phone runs a Rust UDP client that sends target setpoints (throttle, pitch, roll, yaw) over WiFi. +* **Sensors and input** — MPU-6050 reads gyroscope and accelerometer data over I2C at 200 Hz, a BMP280 barometer and a VL53L1X laser time-of-flight sensor both read altitude data over I2C at 50 Hz, and the CYW43439 WiFi chip on the Pico 2W receives setpoints over a UDP socket. +* **Flight controller** (running on the Pico 2W in Rust) — a Kalman filter fuses the IMU readings into stable pitch and roll estimates, a setpoint manager holds the current targets (and locks altitude when the throttle is released), and four independent PID controllers (pitch, roll, yaw, altitude) compute the corrections needed to drive the filtered state toward the setpoints. +* **Motor mixing and drivers** — the motor mixer combines the four PID outputs into individual speed commands for each of the four motors; each command is then sent as a PWM signal to a 30A BLHeli ESC, which converts it into a 3-phase drive signal. +* **Propulsion** — four A2212 1000KV brushless motors with 1045 propellers, arranged on the F450 frame in an X configuration with alternating CW and CCW rotation directions to cancel out the torque around the vertical axis. +* **Power** — a 3S LiPo battery (11.1V, 2200mAh, 30C) connects through an XT60 plug to the PDB integrated in the F450 frame, which distributes 11.1V to the four ESCs. One of the ESC's BEC outputs supplies regulated 5V back to the Pico 2W and the sensors. + +![Architecture Diagram](architecture.svg) + +## Log + +### Week 20 - 26 April + +Defined the project scope and architecture, researched existing Pi Pico-based drone projects for reference, and ordered all the hardware components. + +### Week 27 April - 3 May + +### Week 4 - 10 May + +### Week 11 - 17 May + +### Week 18 - 24 May + +## Hardware + +The drone is built from the following components: + +* **Raspberry Pi Pico 2W** — the flight controller; runs the Rust firmware (Kalman filter, four PID loops, motor mixer) and hosts the WiFi access point that receives commands from the phone. +* **MPU-6050 (GY-521)** — 6-axis IMU containing a 3-axis gyroscope and a 3-axis accelerometer; provides raw orientation data over I2C at 200 Hz, used by the Kalman filter to estimate pitch and roll. +* **BMP280** — barometric pressure sensor; measures atmospheric pressure over I2C at 50 Hz to estimate absolute altitude, providing long-term-stable altitude data for the altitude PID and covering ranges beyond the laser sensor's reach. +* **VL53L1X** — laser time-of-flight distance sensor; measures the distance to the ground over I2C at 50 Hz with a narrow beam (immune to propeller downwash and acoustic noise), providing precise short-range altitude data for the altitude PID, especially during liftoff and landing. +* **F450 frame with integrated PDB and landing gear** — the airframe that holds everything together; the integrated power distribution board distributes 11.1V from the battery to all four ESCs (rated up to 100A), and the landing gear protects the electronics during landings. +* **4× A2212 1000KV brushless motors** — provide the lift; rated for 2-3S LiPo and up to 12A each, paired with 1045 propellers for stable hover on a 3S battery. +* **4× 1045 propellers (2 CW + 2 CCW)** — convert motor rotation into thrust; the alternating rotation directions cancel out torque around the vertical axis so the drone doesn't spin uncontrollably. +* **4× 30A BLHeli ESCs (with 5V/2A BEC)** — convert the PWM signal from the Pico into the 3-phase drive signal for the brushless motors; one of the four BEC outputs is used to supply regulated 5V to the Pico and the sensors, the other three are disconnected to avoid backfeeding between regulators. +* **3S LiPo battery (11.1V, 2200mAh, 30C, XT60 connector)** — the main power source; the 30C rating provides up to 66A continuous current, well above the 4 × 12A peak draw of the motors. +* **SkyRC iMAX B6AC V2 charger** — used off-board to balance-charge the LiPo battery between flights; supports 1-6S LiPo at up to 6A. + +### Schematics +![Schematic](altitude_hold_drone.svg) + +### Bill of Materials + +| Device | Usage | Price | +| --- | --- | --- | +| [Raspberry Pi Pico 2W](https://www.raspberrypi.com/products/raspberry-pi-pico-2/) | Flight controller with WiFi | 40 RON | +| [F450 Frame Kit + Landing Gear](https://www.aliexpress.com/) | Quadrotor airframe with integrated PDB | 127 RON | +| [A2212 1000KV Motor + 30A ESC + 1045 Propeller Set (×4)](https://www.aliexpress.com/) | Propulsion system | 250 RON | +| [3S 2200mAh 30C LiPo Battery (XT60)](https://www.emag.ro/) | Main power source | 120 RON | +| [SkyRC iMAX B6AC V2 Charger](https://www.skyrc.com/) | LiPo balance charger | 213 RON | +| [MPU-6050 (GY-521)](https://www.optimusdigital.ro/) | Gyroscope + accelerometer (I2C) | 32 RON | +| [BMP280] | Barometric pressure / altitude sensor (I2C) | 15 RON | +| [VL53L1X] | Laser time-of-flight distance sensor (I2C) | 40 RON | + +## Software + +| Library | Description | Usage | +| --- | --- | --- | +| [embassy-rp](https://github.com/embassy-rs/embassy) | HAL for RP2040/RP2350 | Abstracts Pico 2W peripherals (PWM, I2C, GPIO) | +| [embassy-net](https://github.com/embassy-rs/embassy) | TCP/UDP network stack | Receives control packets from the Android app | +| [cyw43](https://github.com/embassy-rs/embassy) | Driver for the CYW43439 WiFi chip | Enables WiFi access point and UDP socket | +| [mpu6050](https://crates.io/crates/mpu6050) | MPU-6050 driver | Reads raw accelerometer and gyroscope data | +| [kalman-filter](https://crates.io/crates/kalman_filter) | Kalman filter implementation | Fuses IMU readings into stable pitch/roll estimates | +| [pid](https://crates.io/crates/pid) | Generic PID controller | Implements the four control loops | + +## Links + +1. [Woobu Autonomous Drone (ellenrapps)](https://github.com/ellenrapps/Woobu-Autonomous-Drone) +2. [Scout Flight Controller (Tim Hanewich)](https://timhanewich.medium.com/taking-flight-with-the-raspberry-pi-pico-micropython-diy-quadcopter-drone-61ed4f7ee746) +3. [Building a Raspberry Pi Pico 2 drone from scratch (Raspberry Pi blog)](https://www.raspberrypi.com/news/building-a-raspberry-pi-pico-2-powered-drone-from-scratch/) +4. [PiWings — Pico flight controller controlled from a phone](https://www.hackster.io/news/ravi-butani-shows-off-piwings-a-custom-raspberry-pi-pico-flight-controller-for-educational-drones-cba8420e0189) +5. [Pico Drone — can we build a drone using a Raspberry Pi Pico?](https://www.youtube.com/watch?v=Us0bSUX9UkQ) +6. [Building a Quadcopter — Parts (pythonprogramming.net)](https://www.youtube.com/watch?v=aZltBzPUPKI) +7. [Autonomous drone with payload release (uC9hVyqGvDE)](https://www.youtube.com/watch?v=uC9hVyqGvDE) +8. [Raspberry Pi PICO Drone — Hardware (Robu.in)](https://www.youtube.com/watch?v=bYRzRxEIJiU) +9. [How a Kalman filter works, in pictures (Bzarg)](https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/) +10. [Embassy framework documentation](https://embassy.dev/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/architecture.svg new file mode 100644 index 00000000000..cd821dff62a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/architecture.svg @@ -0,0 +1,4 @@ + + + +
JSON
JSON
I2C
I2C
GPIO
GPIO
STM32
STM32
I2C
I2C
Gas/Env Sensor
Gas/Env Sensor
I2C
I2C
ToF Sensor
ToF Sensor
Analog Signal (ADC)
Analog Signal (ADC)
HX711 + Load Cell
HX711 + Load Cell
Analog GPIO
Analog GPIO
Conductivity Probes
Conductivity Probes
OLED Display
OLED Display
RGB LED
RGB LED
Active Buzzer
Active Buzzer
Laptop
Laptop
Power (USB 5V/3.3V)
Power (USB 5V/3.3V)
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/hardware_photo.webp b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/hardware_photo.webp new file mode 100644 index 00000000000..35431e7e49a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/hardware_photo.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/schematic.svg new file mode 100644 index 00000000000..991899131d1 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.costache/images/schematic.svg @@ -0,0 +1 @@ + diff --git a/website/versioned_docs/version-acs_cc/project/2026/david.costache/index.md b/website/versioned_docs/version-acs_cc/project/2026/david.costache/index.md new file mode 100644 index 00000000000..195a742d4cc --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/david.costache/index.md @@ -0,0 +1,107 @@ +# VERIT-SCAN +A multi-sensor fresh fruit quality analyzer with data fusion from 4 physical domains + +**Author**: Costache David \ +**GitHub Project Link**: [Github](https://github.com/UPB-PMRust-Students/acs-project-2026-david08mihai) + +## Description +VERIT-SCAN is a non-destructive fresh fruit quality analyzer that fuses measurements from four independent physical domains — aroma (VOC + humidity), firmness (elastic deformation under controlled force), apparent density (mass / laser-estimated volume), and electrical conductivity — into a single Overall Quality Score. The results are displayed locally on an OLED screen with RGB LED feedback and streamed via UART to a host PC for logging and plotting. + +## Motivation +Fruit quality assessment is traditionally subjective: we squeeze, sniff, and judge by appearance. These signals are real but hard to quantify, compare across samples, or log over time. VERIT-SCAN replaces subjective judgment with four quantifiable measurements drawn from distinct physical domains — chemistry (VOCs), mechanics (elasticity), geometry + mass (density), and electrochemistry (ionic conductivity). The project is an exercise in multi-sensor data fusion: no single sensor tells the whole story, but together they build a meaningful quality score. It also explores a non-destructive approach to firmness testing, replacing the traditional penetrometer (which damages the sample) with an elastic-deformation measurement that leaves the fruit intact. + +## Architecture +The system is structured around an async embedded runtime (Embassy on STM32U545) with the following architectural components: + +- **Sensor Acquisition Layer** — four concurrent async tasks, one per measurement channel: + - *Aroma Task* — reads BME680 over I²C every 500 ms (VOC resistance + humidity) + - *Firmness Task* — orchestrates the VL53L0X + HX711 interaction (baseline distance → force ramp → final distance) + - *Density Task* — combines HX711 weight reading with VL53L0X height estimation + - *Conductivity Task* — samples the internal ADC (14-bit) on the electrode divider +- **Fusion & Scoring Layer** — a coordinator task that collects readings from the four acquisition tasks via Embassy channels, normalizes each raw value to a 0–100 score based on calibrated per-fruit-type thresholds, and computes the weighted Overall Quality Score. +- **Presentation Layer** — three parallel output tasks: + - *Display Task* — renders scores on the SSD1306 OLED using embedded-graphics + - *Indicator Task* — drives the RGB LED via PWM (green/yellow/red mapping) and the buzzer at measurement completion + - *Telemetry Task* — streams a JSON line per measurement on UART2 (exposed as ST-Link Virtual COM Port) to the host PC +- **Host-side Plotting** — a Python script (pyserial + matplotlib) running on the PC parses the JSON stream and plots all four scores + the overall score in real time. + +Data flow: Sensors → Acquisition Tasks → (Embassy Channel) → Fusion Task → (Embassy Channel) → Display / Indicator / Telemetry Tasks. + +*(Graphical block diagram to be added.)* +### Architecture Diagram + + +![Architecture Diagram](images/architecture.svg) + + +## Log +### Week 5 - 11 May + +I have assembled the hardware components on a breadboard and started prototyping the software architecture. Unfortunattely, the sensors weren't soldered properly, which caused a delay and force me to redo the wiring. + +### Week 12 - 18 May + +I have securely mounted the hardware components onto their dedicated support structure, ensuring a clean, organized, and nice layout. The setup now features proper cable management and perfectly aligned sensors, giving the physical prototype a polished, final look. With the hardware architecture completely stabilized and visually refined, my focus has now shifted to the software development phase. I am currently writing and testing the firmware. + +### Week 19 - 25 May +During this final week, I focused on system stabilization and achieving a polished, professional finish for the prototype. +I completed the core firmware integration, ensuring reliable data acquisition from all sensors (HX711, BME680, and ADC). +Successfully integrated the buzzer and RGB LED logic, creating a clear feedback system for fruit quality assessment. + +![Project image](images/hardware_photo.webp) + + +## Hardware +The core of VERIT-SCAN is a **NUCLEO-U545RE-Q** board, built around the STM32U545RE (ARM Cortex-M33, 160 MHz, 512 KB flash, 272 KB SRAM) with an integrated ST-Link V3 debugger. The board exposes four I²C buses, two UARTs, a 12-bit ADC, and a 14-bit ADC — the latter is used for the DIY conductivity channel, where two stainless-steel electrodes in contact with the fruit flesh form a voltage divider with a 10 kΩ precision reference resistor. + +Three digital sensors share a single I²C bus: **BME680** (VOC + humidity + temperature + pressure), **VL53L0X** (time-of-flight laser distance, used both for firmness-via-deformation and for height/volume estimation), and an **SSD1306 0.96" OLED** for local display. An **HX711** 24-bit ADC interfaces the 1 kg load cell, which is used both for weighing and for monitoring the controlled force applied during the non-destructive firmness test. User feedback comes from a common-cathode **RGB LED** driven by three PWM channels and a passive **buzzer** driven by a timer PWM. Communication with the host PC uses **USART2**, exposed transparently as a Virtual COM Port through the on-board ST-Link, so no external USB-to-UART adapter is needed. + +### Schematics +![Schematic Diagram](images/schematic.svg) + +### Bill of Materials +| Device | Usage | Price | +|--------|-------|-------| +| NUCLEO-U545RE-Q | Main MCU board (STM32U545RE, Cortex-M33 @ 160 MHz, ST-Link V3 onboard) | already owned | +| [BME680 I²C Module](https://sigmanortec.ro/modul-senzor-bme680-i2c-33v) | Aroma measurement (VOC + humidity + temperature + pressure) | 82.62 RON +| [VL53L0X ToF Module](https://sigmanortec.ro/Modul-VL53L0X-timp-de-zbor-p126182383) | Laser distance sensor — baseline + deformation measurement, height/volume estimation | 17.04 RON | +| [Load Cell 1 kg](https://sigmanortec.ro/Senzor-cantar-1Kg-p136259733) | Weight + controlled-force measurement during firmness test | 12.80 RON +| [HX711 24-bit ADC](https://sigmanortec.ro/modul-citire-greutate-hx711-24ad-2-canale-3-5v) | Load cell amplifier and ADC | 4.57 RON +| [SSD1306 OLED 0.96" I²C](https://sigmanortec.ro/Display-OLED-0-96-I2C-IIC-Albastru-p135055705) | Local display of per-channel and overall scores | 16.96 RON | +| [RGB LED 5 mm common cathode](https://sigmanortec.ro/LED-RGB-5mm-4-pini-Catod-comun-p136284849) | Quality indicator (green / yellow / red via PWM) | 1.51 RON × 3 | +| [Passive buzzer 5 V](https://sigmanortec.ro/module/ambjolisearch/jolisearch?s=Buzzer+pasiv+5v%09) | Audible signal at measurement completion | 1.45 RON | +| 2× Stainless steel screws M3/M4 | DIY conductivity electrodes | ~2 RON | +| Resistor 10 kΩ 1% metal film | Voltage divider reference for conductivity ADC channel | 3.20 RON / 20 pcs | +| Resistor 220 Ω 1% metal film | Current limiting for RGB LED | 3.20 RON / 20 pcs | +| Breadboard 400 points | Prototyping | 6.62 RON × 2 | +| Dupont wires 30 cm M-M and M-F | Interconnects | ~16 RON | + +## Software +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 (feature `stm32u545re`) | Core hardware abstraction: GPIO, I²C, ADC, UART, PWM, async timers | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for `no_std` environments | Concurrent sensor acquisition and output tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async time primitives | Timing for sampling periods and force ramps | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Sync primitives (channels, mutexes) | Inter-task communication between acquisition and fusion layers | +| [ssd1306](https://github.com/rust-embedded-community/ssd1306) | Driver for SSD1306 OLED displays | OLED rendering over I²C | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics primitives | Drawing score bars, text, and icons on the OLED | +| [bme680](https://crates.io/crates/bme680) | BME680 sensor driver | Reading VOC resistance + humidity | +| [vl53l0x](https://crates.io/crates/vl53l0x) | VL53L0X ToF sensor driver | Distance / deformation / height measurement | +| [loadcell](https://crates.io/crates/loadcell) | HX711 driver for load cells | Reading force and weight from the 1 kg load cell | +| [defmt](https://github.com/knurling-rs/defmt) + [defmt-rtt](https://github.com/knurling-rs/defmt) | Efficient logging framework | Debug output over RTT during development | +| [probe-rs](https://probe.rs/) | Embedded flashing and debugging | Flashing firmware to NUCLEO-U545RE-Q via ST-Link V3 | +| [heapless](https://crates.io/crates/heapless) | Fixed-capacity collections for `no_std` | Score buffers and telemetry line buffering | +| [serde](https://crates.io/crates/serde) + [serde-json-core](https://crates.io/crates/serde-json-core) | `no_std` JSON serialization | Formatting telemetry lines sent over UART | +| pyserial + matplotlib (host-side Python) | Host-side serial reader and live plotter | Parsing JSON telemetry from UART and plotting the 4 scores + overall in real time | + +## Links +1. [NUCLEO-U545RE-Q Product Page](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) +2. [STM32U545RE Datasheet](https://www.st.com/resource/en/datasheet/stm32u545re.pdf) +3. [STM32U545 Reference Manual (RM0456)](https://www.st.com/resource/en/reference_manual/rm0456-stm32u575585-armbased-32bit-mcus-stmicroelectronics.pdf) +4. [BME680 Datasheet — Bosch Sensortec](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf) +5. [VL53L0X Datasheet — STMicroelectronics](https://www.st.com/resource/en/datasheet/vl53l0x.pdf) +6. [HX711 Datasheet — AVIA Semiconductor](https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf) +7. [SSD1306 Datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) +8. [The Embassy Book](https://embassy.dev/book/) +9. [Rust Workshop UPB — Embassy on STM32U545](https://rust.ipworkshop.ro/docs/embassy/) +10. [embassy-stm32 on crates.io](https://crates.io/crates/embassy-stm32) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/diagrama.svg new file mode 100644 index 00000000000..f4540f1d93f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/diagrama.svg @@ -0,0 +1,4 @@ + + + +
STM Nucleo-U545RE-Q
STM Nucleo-U545RE-Q
L298N
L298N
Modul bluetooth HC-05
Modul bluetooth HC-05
Camera Arducam
Camera Arducam
Baterie 3.7V
Baterie 3.7V
Baterie 7.4V
Baterie 7.4V
4 Motoare
4 Motoare
Laptop
Laptop
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/schematic_pm.svg b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/schematic_pm.svg new file mode 100644 index 00000000000..68696c47376 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/images/schematic_pm.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: bunaziua.kicad_schSheet: /+7.5VPWR_FLAG+3V3+3V3+3V3+1-2M4Motor_DCPWR_FLAG+1-2M1Motor_DCGNDGNDGND+1-2M2Motor_DC+1-2M3Motor_DC+3.3VPWR_FLAGBT2Battery+3.3VPWR_FLAGGND+3.3V12345678J1CameraSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298N+3.3VPWR_FLAGGND+7.5V123456J2HC-05VDDA1VDD11A2PH3A3PB6A4PB3A5PD2A6PC10A7VDDA8VBATB1VSSB2PC13B3PB4B4PC11B5PC12B6VDDUSBB8PC14C1PC15C2PB8C3PA15C4PA14C5PA13C6PA12C7PA11C8PH0D1PH1D2PB7D3PB5D4PA10D5PA9D6PA8D7PC9D8NRSTE1PC0E2PC1E3PC2E4PA0E5PB14E6PC7E7PC8E8VSSAF1PC3F2PA1F3PA4F4PA6F5PB10F6PB15F7PC6F8VDDAG1PA2G2PA5G3PB2G4PB1G5VSSSMPSG6PB13G8VDDH1PA3H2PA7H3PB0H4VLXSMPSH5VDDSMPSH6VDD11H7VDDH8U1STM32U545REIxQGND1GND1BT1BatteryVCCGNDTXDENRXDVCCSDAMISOSCLCSGNDSCKSTATEMOSIU2L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15+7.5VPWR_FLAGPWR_FLAG+7.5VGND1GND1BT1BatteryGNDGNDPWR_FLAG+3V3+3V3+3V3U1STM32U545REIxQVDDA1VDD11A2PH3A3PB6A4PB3A5PD2A6PC10A7VDDA8VBATB1VSSB2PC13B3PB4B4PC11B5PC12B6VDDUSBB8PC14C1PC15C2PB8C3PA15C4PA14C5PA13C6PA12C7PA11C8PH0D1PH1D2PB7D3PB5D4PA10D5PA9D6PA8D7PC9D8NRSTE1PC0E2PC1E3PC2E4PA0E5PB14E6PC7E7PC8E8VSSAF1PC3F2PA1F3PA4F4PA6F5PB10F6PB15F7PC6F8VDDAG1PA2G2PA5G3PB2G4PB1G5VSSSMPSG6PB13G8VDDH1PA3H2PA7H3PB0H4VLXSMPSH5VDDSMPSH6VDD11H7VDDH8J1Camera12345678+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.florea/index.md b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/index.md new file mode 100644 index 00000000000..113b1a6cf53 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia.florea/index.md @@ -0,0 +1,100 @@ +# Spy Photo Car +A remote-controlled smart car with Bluetooth control and onboard photo capture. + +:::info + +Author: Florea Delia Cristina \ +GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-Deliutz + +::: + +## Description + +Spy Photo Car is a remote-controlled smart car built using the STM32 Nucleo-U545RE-Q board and programmed in Rust. The car is controlled wirelessly from a laptop through a custom desktop application that communicates with the STM32 using an HC-05 Bluetooth module. + +The system allows the user to control the movement of the car directly from the laptop application. The L298N motor driver controls the DC motors, allowing the car to move forward, backward, left, right, and stop. The desktop application sends simple movement commands through the Bluetooth connection, and the STM32 interprets these commands to drive the motors. + +The project also includes an ArduCAM Mini Module Camera Shield with OV2640. When the user presses the photo button inside the laptop application, the car stops, the STM32 captures a JPEG image using the camera module, and the image is sent back through the HC-05 Bluetooth connection. The application receives the image, decodes it, and displays the captured photo directly in the same interface. + +The firmware is written using Rust and embassy-rs, focusing on low-level hardware interaction, UART communication, GPIO control, I2C camera configuration, SPI communication with the ArduCAM FIFO, and asynchronous timing. + +## Motivation + +I chose this project to explore embedded programming in Rust and to understand how multiple hardware modules can work together in a real interactive system. The goal was to build a complete remote-controlled car that combines movement, wireless communication, camera capture, and a desktop user interface. + +Additionally, I wanted to create a practical and interactive project where the user can both control the car and receive visual information from it. The photo capture feature makes the car useful as a small “spy” or inspection vehicle, because it can move remotely and take pictures from its surroundings. + +## Architecture + +The project is structured as a modular embedded system where the STM32 acts as the central controller. + +Main Components: +* **The Controller**: The STM32 Nucleo-U545RE-Q board — the main unit that handles motor control, Bluetooth communication, camera control, and data transfer. +* **The Communication System**: The HC-05 Bluetooth module used to send commands from the laptop application to the STM32 and to transmit image data back to the laptop. +* **The Actuation System**: The L298N motor driver controlling the DC motors used for the car movement. +* **The Photo Capture System**: The ArduCAM Mini Module Camera Shield with OV2640, used to capture JPEG images when the user requests a photo. +* **The Desktop Application**: A Rust application built with egui/eframe that provides movement buttons and a photo button, then displays the last received image. +* **The Power System**: A 7.4V Li-ion battery used for the motor driver and motors, and a separate 3.7V battery used for the low-voltage electronics through the required regulated supply. +* **The Mechanical System**: The chassis, wheels, motors, breadboard, and wires used to build the physical car platform. + +![System Diagram](./images/diagrama.svg) + +## Log + +### Week 5 - 11 May +- Project idea definition +- Hardware selection +- Initial setup (Rust + toolchain) + +### Week 12 - 18 May +- STM32 configuration +- Motor driver integration (L298N) +- Movement testing +- Bluetooth (HC-05) communication setup + +### Week 19 - 25 May +- Desktop control application setup +- ArduCAM OV2640 camera integration +- JPEG image capture testing +- Photo transfer from STM32 to the laptop application + +## Hardware + +The system uses an STM32 microcontroller board along with a Bluetooth module, a motor driver, DC motors, a camera module, batteries, and mechanical components for the car platform. + +### Schematics + +![Hardware Schematics](./images/schematic_pm.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller board | ~125 RON | +| L298N | Motor driver for DC motors | ~25 RON | +| HC-05 | Bluetooth serial communication | ~30 RON | +| Li-ion battery 7.4V | Power supply for motors / L298N | ~35 RON | +| DTED Electric 3.7V battery | Power supply for low-voltage electronics | ~25 RON | +| Breadboard | Prototyping and wiring | ~10 RON | +| ArduCAM Mini Module Camera Shield with OV2640 | JPEG photo capture | ~200 RON | +| Wires | Electrical connections | ~10 RON | +| DC motors | Movement | ~15 RON | +| Wheels | Car movement support | ~15 RON | +| Chassis / frame | Mechanical structure of the car | ~30 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32) | STM32 HAL for embassy-rs | GPIO, UART, I2C, SPI, timers | +| [embassy-time](https://docs.embassy.dev/embassy-time) | Async timing | Motor timing, command timeout, camera delays | +| [embedded-hal](https://docs.rs/embedded-hal) | Hardware abstraction | GPIO and peripheral concepts | +| [serialport](https://docs.rs/serialport) | Serial communication | Bluetooth communication on the PC side | +| [egui / eframe](https://github.com/emilk/egui) | GUI framework | Desktop control interface and photo display | +| [image](https://docs.rs/image) | Image decoding library | Decoding received JPEG data in the laptop application | + +## Links + +1. https://embassy.dev +2. https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf +3. https://docs.rs/embedded-hal \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagram_arhitecture.svg b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagram_arhitecture.svg new file mode 100644 index 00000000000..2033e10d562 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagram_arhitecture.svg @@ -0,0 +1 @@ +
I2C
Tilt Data
I2C...
Inertial Measurement Unit
MPU6050
Inertial Measurement Unit...
GPIO
Difficulty/Reset
GPIO...
User Interaction Buttons
User Interaction Buttons
SPI
Graphics Data
SPI...
PWM
Lock Control
PWM...
PWM
Audio Feedback
PWM...
STM32 Processing Unit
STM32 Nucleo-U545RE-Q

















STM32 Processing Unit...
Sensor Task
Sensor Task
Game Engine
Collision Detection Algorithm
Game Engine...
State Manager
State Manager
Visual Interface
LCD ILI9341 2.4''
Visual Interface...
Electromechanical Latch
MG90S Servo Motor
Electromechanical Latch...
Acoustic Feedback
Passive Buzzer
Acoustic Feedback...
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagrama_arhitectura.webp b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagrama_arhitectura.webp new file mode 100644 index 00000000000..abef30fd56c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/diagrama_arhitectura.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/index.md b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/index.md new file mode 100644 index 00000000000..3aa165697fe --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/index.md @@ -0,0 +1,100 @@ +# MazeLock: The Tilting Puzzle Box +A secured box that opens upon solving a tilt-controlled digital maze puzzle. + +:::info + +**Author**: GORGAN Delia \ +**GitHub Project Link**: [UPB-PMRust-Students/acs-project-2026-deliagorgan](https://github.com/UPB-PMRust-Students/acs-project-2026-deliagorgan) + +::: + + + +## Description + +MazeLock is a secure storage box featuring a digital maze-based locking mechanism. Unlike traditional safes, this box unlocks its physical latch only after the user successfully navigates a virtual ball through a maze displayed on a TFT screen. The movement is entirely tilt-controlled, the user must physically rotate and tilt the box, allowing an internal accelerometer to translate these motions into the ball's navigation. Once the finish point is reached, the system triggers a servo-actuated lock to open the lid. + +## Motivation + +The inspiration for MazeLock stems from a cherished childhood memory of a physical maze piggy bank. That original mechanical box required navigating a small ball through a complex 3D path spanning all four sides to unlock the contents. This challenge acted as a barrier that prevented impulsive spending. Because the maze took time and effort to solve, it gave me a few extra minutes to reflect on whether I truly wanted to spend my savings, effectively teaching me the value of delayed gratification. + +Recently, I repurposed that old piggy bank as a unique gift wrap for a friend. The added suspense and the challenge required to reveal the gift were highly appreciated and made the experience memorable. This sparked my desire to modernize the concept. I decided to build a contemporary version from scratch, transitioning from a purely mechanical puzzle to a digital system. By using an STM32 microcontroller and Rust, I aim to recreate that sense of challenge and reward while mastering the complexities of embedded hardware and software integration. + +## Architecture + +![Architecture Diagram](./diagrama_arhitectura.webp) + +## Log + + + +### Week 5 - 11 May +Successfully acquired all necessary hardware components and completed the technical documentation review for each module. Completed the wiring for all components on the breadboard and performed functional tests to ensure signal integrity and proper communication with the STM32 board. Finalized the structural design of the box using balsa wood. Built the technical compartment for the electronics. + +### Week 12 - 18 May +Finalized the core software architecture and integrated the primary control logic, achieving a fully functional Minimum Viable Product with the TFT display and the servo motor. Thought about new software features and logic enhancements, focusing on increasing user interactivity and expanding the project's overall complexity by introducing multiple gameplay levels and designing an algorithm capable of generating a new maze on the screen for each attempt. + +### Week 19 - 25 May +Developed a custom coordinate reading algorithm via the SPI protocol for the touchscreen interface, while also implementing a dedicated exit mechanism to allow users to quit the maze game. Additionally, enhanced the game's hard difficulty setting by configuring a timer-driven passive buzzer to emit a ticking sound effect, successfully increasing gameplay tension and inducing player stress. + +## Hardware + +- **STM32U545RET6Q Microcontroller**: The core of the project that handles sensor data processing, motor control, and graphics rendering. + +- **MPU6050 Accelerometer & Gyroscope**: Used to sense the physical tilt of the box, translating movement into the logic for navigating the on-screen maze. + +- **2.4" TFT SPI Display (ILI9341)**: A high-resolution screen used to visualize the maze and provides a touchscreen interface for difficulty selection. + +- **MG90s Metal Gear Servo**: A high-torque micro servo motor that acts as the physical locking mechanism for the box's side door. + +- **HW-131 Breadboard Power Supply**: Provides a stable, independent power source for the servo motor to prevent voltage drops on the microcontroller. + +- **Passive Buzzer**: Used to provide acoustic feedback, playing victory melodies or alert sounds during gameplay. + +### Schematics + +![Schematic Diagram](./schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32U545RET6Q](https://www.st.com/en/microcontrollers-microprocessors/stm32u545re.html) | The microcontroller | Lab provided | +| [MPU6050](https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/RM-MPU-6000A.pdf) | The accelerometer for sensing the tilt | [15 RON](https://www.optimusdigital.ro/ro/senzori-senzori-inertiali/13611-modul-accelerometru-i-giroscop-cu-3-axe-mpu6050-cu-pini-lipiti.html) | +| [MG90s 0-180](https://www.electronicoscaldas.com/datasheet/MG90S_Tower-Pro.pdf) | The servo motor which locks the door | [27 RON](https://www.emag.ro/servomotor-mg90s-cu-rotatie-180-de-grade-ai0208/pd/D8VLCWYBM) | +| [TFT SPI Display 2.4'' ILI9341](https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf) | The display | [55 RON](https://www.emag.ro/display-tft-spi-2-4-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg178/pd/DXZMBSYBM) | +| [HW131 Breadbord Power Supply](https://www.handsontec.com/dataspecs/mb102-ps.pdf) | The power supply fo servo motor | [5 RON](https://www.optimusdigital.ro/ro/electronica-de-putere-stabilizatoare-liniare/61-sursa-de-alimentare-pentru-breadboard.html) | +| Passive Buzzer | Triggered when the box opens | [1 RON](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html) | +| 400 points Breadboard | Centralizes power rails and distributes electrical connections to all modules | [14 RON](https://sogest.ro/accesorii-multimetre/placa-test-breadboard-400) | +| Wires | Provide point-to-point electrical connections | - | + + + + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| `embassy-stm32` | Async hardware abstraction layer for STM32 | Used to initialize the MCU, clocks (PLL), SPI, I2C, and PWM peripherals. | +| `embassy-time` | Async time utilities | Used for delays and timers (`Timer::after_secs`, `Delay`). | +| `embedded-graphics` | 2D graphics library | Used for drawing the shapes, lines, text, and colors onto the display. | +| `mipidsi` | Display driver for SPI displays | Used to initialize and control the ILI9341 display model. | +| `display-interface-spi` | SPI display interface protocol glue | Connects the display driver with the underlying hardware SPI bus. | +| `embedded-hal-bus` | SPI and I2C sharing utilities | Provides `ExclusiveDevice` to manage SPI bus ownership. | +| `defmt` & `defmt-rtt` | Highly efficient logging framework | Used for real-time terminal debugging (`info!`, `error!`). | +| `panic-probe` | Panic handler for embedded devices | Catches crashes and prints the stack trace via the probe interface. | +| `cortex-m` | Low-level access to Cortex-M processors | Provides core-level utilities and architecture support. | +| `profont` | Custom pixel font library | Provides the `PROFONT_24_POINT` font style for clear on-screen text. | + +## Links + + + +1. [Animated LED send](https://learn.adafruit.com/animated-led-sand): My reference project demonstrating the use of inertial sensors for real-time physics simulation in an embedded environment. diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/schematic.webp new file mode 100644 index 00000000000..15560f6097a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia.gorgan/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/arhitectura1.svg b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/arhitectura1.svg new file mode 100644 index 00000000000..1582d5f1a33 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/arhitectura1.svg @@ -0,0 +1,4 @@ + + + +
STM32 Nucleo-U545RE-Q
STM32 Nucleo-...
4x Push Buttons 
4x Push Butto...
Limit Switch (coin detection)
Limit Switch...
Stepper Driver
(ULN2003)
Stepper Drive...
4x Stepper Motor
(28byj-48)
4x Stepper Mo...
Servo Motor
(SG90)
Servo Motor...
Buzzer
Buzzer
LCD(I2C)
LCD(I2C)
Power Supply
(5V DC)
Power Supply...
RFID 
RFID 
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit1.webp b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit1.webp new file mode 100644 index 00000000000..ccd2cad8077 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit2.webp b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit2.webp new file mode 100644 index 00000000000..afb413eaecb Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit3.webp b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit3.webp new file mode 100644 index 00000000000..9d0600d23f1 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/circuit3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/diagrama_software.webp b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/diagrama_software.webp new file mode 100644 index 00000000000..d3713cd784d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/diagrama_software.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/schematics.webp new file mode 100644 index 00000000000..2a83ecda77e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/images/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/index.md index a85df6cc051..0d9fe793676 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/delia_maria.rizescu/index.md @@ -21,66 +21,140 @@ The project is divided into a few main parts that work together. Main Architectural Components: -1. Payment Processing Unit (Input) -Role: Handles credit validation -Components: RFID RC522 (digital payment) and Limit Switch (physical coin detection) +1. **Payment Processing Unit (Input)** +* **Role:** Handles credit validation. +* **Components:** RFID RC522 (digital payment) and Limit Switch (physical coin detection) -2. User Interface (I/O) -Role: Responsible for user selections and provides feedback. -Components: 4x Push Buttons, LCD, and Passive Buzzer. +2. **User Interface (I/O)** +* **Role:** Responsible for user selections and provides feedback. +* **Components:** 4x Push Buttons, LCD and Passive Buzzer. -3. Dispensing and Change System (Output) -Logic: Manages the mechanical release of products and the return of change. -Components: 4x Stepper Motors and SG90 Servo (coin release). +3. **Dispensing and Change System (Output)** +* **Logic:** Manages the mechanical release of products and the return of change. +* **Components:** 4x Stepper Motors and SG90 Servo (coin release). -![Architecture Diagram](images/diagrama_arhitectura.svg) +![Architecture Diagram](images/arhitectura1.svg) ## Log -### Week 5 - 11 May +### Week 20 - 26 April -### Week 12 - 18 May +* Researche suitable motors for the project, as well as how to implement the coin detection system and the change mechanism. +* Order hardware components. + +### Week 27 April - 3 May + +* Designed and built the vending machine structure, featuring four product compartments, with two compartments on each row. + +### Week 4 - 10 May + +* Assembled the hardware components inside the vending machine structure and completed the breadboard wiring. + +### Week 11 - 17 May + +* Final software implementation. -### Week 19 - 25 May ## Hardware +The vending machine is controlled by an STM32U5 microcontroller that manages all system operations. It integrates an MFRC522 RFID reader and push buttons for inputs, while using an I2C LCD 1602 for the display. The physical dispensing is handled by four stepper motors and the coin-return mechanism is driven by a servo motor. + +* **STM32U545 Nucleo:** The central microcontroller that executes the Rust firmware to process the system logic and coordinate all other parts. +* **MFRC522 RFID Reader:** An SPI-based card scanner used to authorize admin transactions. +* **28BYJ-48 Stepper Motors & ULN2003 Drivers:** Used to rotate the dispensing spirals inside the compartments. +* **LCD 1602 Display with PCF8574 I2C Adapter:** Provides real-time instructions, credit status, and feedback using only two I2C wires. +* **SG90 Servo Motor:** A micro servo used to operate the physical change coin mechanism. +* **Push Buttons & Limit Switch:** Act as the physical user interface for product selection and mechanical coin detection. -Detail in a few words the hardware used. +![circuit](images/circuit1.webp) +![circuit](images/circuit2.webp) +![circuit](images/circuit3.webp) ### Schematics -Place your KiCAD or similar schematics here in SVG format. -### Bill of Materials +### Week 27 April - 3 May + +* Designed and built the vending machine structure, featuring four product compartments, with two compartments on each row. + +### Week 4 - 10 May + +* Assembled the hardware components inside the vending machine structure and completed the breadboard wiring. + + +## Hardware +The vending machine is controlled by an STM32U5 microcontroller that manages all system operations. It integrates an MFRC522 RFID reader and push buttons for inputs, while using an I2C LCD 1602 for the display. The physical dispensing is handled by four stepper motors and the coin-return mechanism is driven by a servo motor. - +* **LCD 1602 Display with PCF8574 I2C Adapter:** Provides real-time instructions, credit status, and feedback using only two I2C wires. + +* **SG90 Servo Motor:** A micro servo used to operate the physical change coin mechanism. + +* **Push Buttons & Limit Switch:** Act as the physical user interface for product selection and mechanical coin detection. + +![circuit](images/circuit1.webp) +![circuit](images/circuit2.webp) +![circuit](images/circuit3.webp) + +### Schematics + +![Schematics](images/schematics.webp) + +### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [STM32](https://www.st.com/resource/en/datasheet/stm32f722ic.pdf) | The microcontroller | 110 RON | +| [STM32](https://www.st.com/resource/en/datasheet/stm32f722ic.pdf) | The microcontroller | Provided by faculty | +| [Endstop limit switch](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=166&bt_gsr_order_id=123878&source_url=account_page) | Used as a coin detector | 5.23 RON | +| [Motor Stepper](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=482&bt_gsr_order_id=123878&source_url=account_page) | Used to rotate the dispensing spirals inside the vending machine | 4 X 10.29 RON | +| [Driver motor stepper](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=151&bt_gsr_order_id=123878&source_url=account_page) | A stepper motor driver boosts STM32 signals to power the motor | 3 X 4.53 RON | +| [RFID](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=267&bt_gsr_order_id=123878&source_url=account_page) | Used to scan admin cards to grant free product | 9.53 RON | +| [Wires](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=8&bt_gsr_order_id=123878&source_url=account_page) | Used to create all electrical connections | 31.96 RON | +| [I2C LCD Interface](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=397&bt_gsr_order_id=123878&source_url=account_page) | An I2C LCD interface changes a parallel connection into a 2-wire serial connection, saving STM32 pins| 5.11 RON | +| [LCD 1602 Display](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=292&bt_gsr_order_id=123878&source_url=account_page) | Used to show user instructions, current credit, product selection | 11.18 RON | +| [Breadoard 400](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=56&bt_gsr_order_id=123878&source_url=account_page) | Used to distribute power and connect components | 2 X 6.62 RON | +| [Servomotor SG90](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=689&bt_gsr_order_id=123878&source_url=account_page) | Used for the change mechanism that dispenses coins back to the user | 9.49 RON | +| [Push Buttons, 12x12x7.3mm](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=62&bt_gsr_order_id=123878&source_url=account_page) | Used as product selection buttons | 4 X 1.33 RON | +| [Buzzer pasiv](https://sigmanortec.ro/product-reviews-add-from-email?bt_gsr_product_id=347&bt_gsr_order_id=123878&source_url=account_page) | Used to generate acoustic feedback | 5.03 RON | +| Total | | 155.37 RON | + + ## Software | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | STM32 driver library | Configures GPIO, I2C, SPI, and PWM. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor | Used for running the async main loop. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async time utilities | Used for non-blocking delays. | +| [defmt](https://github.com/knurling-rs/defmt) | Embedded debugging tool | Used for debug and info. | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Used to transmit defmt logs over the debug probe. | +| [heapless](https://github.com/rust-embedded/heapless) | Static data structures | Allocates text buffers for the LCD display. | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler for debugging | Prints error info. | + + +### Implementation: + +* **Architecture:** Implemented an enum that represents the current state of the machine: Repaus, Livrare, FonduriInsuficiente, Admin. +* **Stepper Motor:** Each of the four motors is used independently and rotates in 4 steps. To prevent overheating, the coils are deactivated after each full rotation. +* **Coin Detection:** The coin_prev variable stores the previous switch state. Credit increments by 0.50 only on the falling edge (HIGH to LOW), which prevents duplicate counts. +* **Servo Precision:** The coin-return servo is controlled via PWM. Movement is bounded between 15° and 165° and the initial angle is set before enabling the PWM output for safety. +* **I2C LCD:** I2C driver sends data to the PCF8574 module using 4-bit mode. To save time, every message is padded to 16 characters with spaces to overwrite previous text. +* **RFID:** The RC522 operates via SPI. It detects the card, extracts its 4-byte UID and compares it to a stored administrator constant to validate access. + +![diagrama_software](images/diagrama_software.webp) ## Links 1. [Hardware Ideas and Design](https://www.youtube.com/watch?v=DO3AciBz_-A&t=5s) 2. [Lab Support](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab) 3. [DIY Coin Dispenser](https://www.youtube.com/watch?v=V7L139xnTR0) -4. [Vending Machine Mechanism](https://www.youtube.com/watch?v=-gdm71P1k9c&t=2s) +4. [Vending Machine Mechanism](https://www.youtube.com/watch?v=-gdm71P1k9c&t=2s) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/images/schematic.svg new file mode 100644 index 00000000000..3077cdc10be --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/images/schematic.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + Battery Pack + Main supply + + + LM2596 Buck + 5V regulated output + + + + STM32 Nucleo-U545RE-Q + PWM / GPIO / ADC / UART + Rust firmware + Motor + pen + calibration control + + + + PC + Image processing + USB Serial commands + + + + Dual Motor Driver + TB6612FNG / DRV8833 + PWM + DIR inputs + + + + Left + DC Motor + + + Right + DC Motor + + + + SG90 Servo + Pen up / pen down + + + + TCRT5000 x2 + Black border sensors + + + Encoders x2 + Optional feedback + + + + VIN + + + 5V logic / servo / sensors + + + Motor supply + + + USB Serial + + + PWM/DIR + + + + + + PWM + + + Digital input + + + GPIO input + + + + + + Common GND between battery, buck converter, STM32, sensors, servo and motor driver + + + + Canvas + White surface + Black border detected by IR + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/index.md b/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/index.md new file mode 100644 index 00000000000..d005e5dc58a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/denis_dumitru.sarca/index.md @@ -0,0 +1,79 @@ +# Mobile Drawing Robot with Automatic Canvas Calibration +A mobile drawing robot that reproduces digital images on a physical canvas using automatic border detection. + +:::info + +**Author**: Denis-Dumitru Sarca \ +**Github Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Denis-bit + +::: +## Description + +This project consists of a mobile robot capable of drawing digital images on a physical surface. The robot receives a processed drawing path from a PC and follows the generated trajectory using a differential drive system. +The drawing area is delimited using a black border placed around the canvas. The robot uses IR reflective sensors to detect this border and estimate the available drawing surface. Based on the detected canvas dimensions, the input image is scaled so that it fits inside the physical workspace. +The robot uses two powered wheels for movement and a third caster wheel for mechanical support. A servo motor controls the pen mechanism, allowing the system to lift or lower the pen while following the drawing path. + +## Motivation + +Thought it would be a fun way to start my journey in embedded development. I also find it useful in different scenarios, since it has the automatic drawing surface detection. + +## Architecture +The system is divided into two main parts: the PC application and the embedded firmware running on the STM32 board. +The PC application is responsible for image processing. It loads the input image, converts it into a simplified drawing path and scales the result according to the canvas dimensions detected by the robot. The generated path is then sent to the microcontroller through a USB serial connection. +The STM32 Nucleo-U545RE-Q board receives movement commands and controls the hardware modules. It drives the two DC motors through a motor driver, reads encoder feedback for position estimation, reads the IR sensors for black border detection and controls the servo motor used for lifting and lowering the pen. + +MAIN ARCHITECTURE COMPONENTS: +PC image processing module +USB serial communication module +STM32 command parser +motor control module +encoder feedback module +encoder feedback module +canvas calibration module +pen control module + +## Log + +## Hardware +STM32 Nucleo-U545RE-Q +2 sau 4 motoare DC cu encodere +driver motoare +roti omnidirectionale +roata caster +servo pentru marker +senzori IR pentru detectarea marginii canvasului +baterie +convertor buck + + +### Schematics +![Schematics](./images/schematic.svg) +### Bill of Materials + +| [Device](https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509) | Used for tension adjustment | [price](7 ron) | +| [Device](https://sigmanortec.ro/Motor-DC-mini-angrenaje-metal-N20-100RPM-p125711198) | The motors | [price](46 ron) | +| [Device](https://sigmanortec.ro/shield-motoare-pentru-wemos-d1-mini-i2c-dual-motor-tb6612fng) | Motor driver | [price](47 ron) | +| [Device](https://sigmanortec.ro/servomotor-sg90-360-continuu) | Servomotor | [price](13 ron) | +| [Device](https://sigmanortec.ro/Senzor-urmarire-linie-IR-p126025109) | IR sensor | [price](12 ron) | +| [Device](https://sigmanortec.ro/Kit-sasiu-masina-2WD-urmaritor-linie-p172447939) | sasiu + roti | [price](41 ron) | + +## Software +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 hardware abstraction layer from the Embassy framework | Used for GPIO, UART, PWM, timers and ADC configuration | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded Rust applications | Used for running concurrent firmware tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time utilities for embedded async applications | Used for delays, timeouts and movement timing | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Standard hardware abstraction traits for embedded systems | Used to keep hardware interfaces modular | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework for embedded systems | Used for debugging firmware behavior | +| [panic-probe](https://github.com/knurling-rs/probe-run/tree/main/panic-probe) | Panic handler for embedded Rust | Used for debugging runtime errors | +| [heapless](https://github.com/rust-embedded/heapless) | Fixed-capacity data structures without dynamic allocation | Used for command buffers and path data | +| [serde](https://github.com/serde-rs/serde) | Serialization framework | Used for encoding and decoding commands | +| [postcard](https://github.com/jamesmunns/postcard) | Compact binary serialization format for embedded systems | Used for sending drawing commands from the PC to the STM32 | +| [image](https://github.com/image-rs/image) | Image processing library for Rust | Used on the PC side for loading and processing input images | +| [serialport](https://github.com/serialport/serialport-rs) | Cross-platform serial communication library | Used on the PC side for USB serial communication with the robot | +| [clap](https://github.com/clap-rs/clap) | Command-line argument parser | Used on the PC side for configuring image input and serial port | + + + +## Links +https://www.youtube.com/watch?v=_SbTXNRn7qA \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/game_screen.svg b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/game_screen.svg new file mode 100644 index 00000000000..d7517aa7cd0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/game_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/index.md b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/index.md new file mode 100644 index 00000000000..e1116e11efb --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/index.md @@ -0,0 +1,128 @@ +# Wordle +A Rust-based embedded implementation of the popular word-guessing game. + + +**Author**: Suliman Edis \ +**GitHub Project Link**:https://github.com/UPB-PMRust-Students/proiect-Edis9955 +::: + +## Description + +The project replicates the popular Wordle game developed by the New York Times, implemented using Rust on embedded hardware. Players must guess a secret 5-letter English word in 6 tries, receiving feedback on each guess through color-coded hints: + +Green: Correct letter in the correct position + +Yellow: Correct letter in the wrong position + +Gray: Letter not in the word + +## Motivation + +This project is a nice first dip into the world of embedded systems. Wordle is a simple but engaging game, making it a great candidate to explore user interaction on low-power hardware while familirizing myself with Rust in an embedded environment. + +## Architecture +The core components of the project architecture include: + +Game Engine (Rust): Handles word selection, guess evaluation, and game logic. + +Input Handler: Receives user input from a connected keypad. + +Display Driver: Outputs the game state on an LCD using color indicators. +Architecture Overview: + +[Keypad/Touch Input] ---> [Input Handler] + | + v + [Game Logic Engine] + | + v + [Display (ILI9341)] + + +## Log + + + +### Week 5 - 11 May +hardware acquisition +debugger wiring and testing +display wiring +keypad wiring +kicad schematic +start implementing game loop in terminal + +### Week 4 - 10 May +finish game loop in terminal +correct display wiring +display dummy test +start using the display in the game loop + +### Week 11 - 18 May +show cursor on screen +show green/tellow feedback on screen +show attempts on screen +win/lose screen + +======= + +### Week 12 - 18 May + +### Week 19 - 25 May + + + +## Hardware +The project is built on a Raspberry Pi Pico platform with peripheral components for input, output, and storage. The display provides visual feedback while the keypad serves as the main input method. +### Schematics + +![KiCAD Schematic](proiect_wordle4.svg) + +lose_screen +![ game_screen](game_screen.svg) +![ lose_screen](lose_screen.svg) +======= + + +### Bill of Materials + +Tastatura matriceala 4x4 + +| Device | Usage | Price | +|--------|--------|-------| +| [2 x Raspberry Pi Pico 2W](https://www.optimusdigital.ro/ro/placi-raspberry-pi/13327-raspberry-pi-pico-2-w.html?search_query=raspberry+pi+pico+2w&results=26) | The microcontroller | [79 RON](https://www.optimusdigital.ro/en/raspberry-pi-boards/12394-raspberry-pi-pico-w.html) | +[Raspberry Pi Ecran LCD ILI9341](https://www.bitmi.ro/module-electronice/ecran-lcd-ili9341-cu-touch-si-slot-pentru-card-sd-2-4-10797-bitmi-ro.html) | Display | [67 RON](https://www.optimusdigital.ro/en/raspberry-pi-boards/12394-raspberry-pi-pico-w.html) | +[Breadboard](https://www.bitmi.ro/module-electronice/ecran-lcd-ili9341-cu-touch-si-slot-pentru-card-sd-2-4-10797-bitmi-ro.html) | 2 x Breadboard | [7 RON](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/13249-breadboard-300-puncte.html?search_query=Breadboard+300+puncte&results=1) | +[4x4 input keypad](https://www.bitmi.ro/module-electronice/ecran-lcd-ili9341-cu-touch-si-slot-pentru-card-sd-2-4-10797-bitmi-ro.html) | keypad | [7 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html?search_query=Tastatura+matriceala+4x4&results=2) | +[wires ](https://www.optimusdigital.ro/ro/fire-fire-mufate/12-set-de-cabluri-pentru-breadboard.html?search_query=fire+breadboard&results=58) | wires for breadboard| [8 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html?search_query=Tastatura+matriceala+4x4&results=2) | +[mother-father wires](https://www.optimusdigital.ro/ro/fire-fire-mufate/878-set-fire-mama-tata-40p-30-cm.html?search_query=fire&results=426) | wires for display | [ RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html?search_query=Tastatura+matriceala+4x4&results=2) | +[usb cable](https://www.bitmi.ro/module-electronice/ecran-lcd-ili9341-cu-touch-si-slot-pentru-card-sd-2-4-10797-bitmi-ro.html) | cable | [7 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html?search_query=Tastatura+matriceala+4x4&results=2) | + + + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [rand](https://crates.io/crates/rand) | Random number generation | Random word selection | +| [colored](https://crates.io/crates/colored) | Terminal color output | Color-coding of letters | +| [display_interface_spi](https://crates.io/crates/display-interface-spi) | Inteface for display | using the display | + +## Links + + + +1. [New York Times Wordle](https://www.nytimes.com/games/wordle/index.html) +3. [ILI9341 Driver Resources](https://docs.cirkitdesigner.com/component/b6591399-68e1-49f4-b5f6-0d512e7af130/ili9341-tft-display) +4. [Raspberry Pi Pico Documentation](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/lose_screen.svg b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/lose_screen.svg new file mode 100644 index 00000000000..7f2d7a33105 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/lose_screen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/proiect_wordle4.svg b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/proiect_wordle4.svg new file mode 100644 index 00000000000..d8d2ef8e3e1 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/edis.suliman/proiect_wordle4.svg @@ -0,0 +1 @@ +SVG Image created as proiect_wordle.svg date 2026/05/12 22:15:46 Image generated by Eeschema-SVGILI9341SPI InterfaceSD Card Slot320x240 LCDSD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14VCC1GND2D/~{C}5~{CS}3MOSI6MISO9SCK7LED8RESET4U2CR2013-MI2120SWCLKD1SWDIOD3RUN303V3_EN37GPIO01GPIO12GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520~{BOOTSEL}TP6VSYS39VBUS40GND33V336USB_GNDTP1USB_DMTP2USB_DPTP3~{SMPS_PS}TP4LED_OUTTP5GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229ADC_VREF35GPIO26_ADC031GPIO27_ADC132GPIO28_ADC234AGND33A2RaspberryPi_Pico_2WGNDPIN_11PIN_22PIN_33PIN_44PIN_55PIN_66PIN_77PIN_884X4 Matrix MembraneSWCLKD1SWDIOD3RUN303V3_EN37GPIO01GPIO12GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520~{BOOTSEL}TP6VSYS39VBUS40GND33V336USB_GNDTP1USB_DMTP2USB_DPTP3~{SMPS_PS}TP4LED_OUTTP5GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229ADC_VREF35GPIO26_ADC031GPIO27_ADC132GPIO28_ADC234AGND33A1RaspberryPi_Pico_2WMISORESETV_OUTMOSIVSYSV_OUTGNDSCKDCGP_22GNDDebug_I2C0_1Debug_I2C0SCKRESETMISOMOSIDCDebug_SWDIOGNDV_OUTGNDVSYSDebug_SWDIODebug_SWCLKDebug_I2C0Debug_I2C0_1GP_26GP_20GP_19GP_17GP_21GP_22GP_18GP_16Debug_SWCLKGP_21GP_26GP_20GP_16GP_17GP_18GP_19 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/diagram.svg new file mode 100644 index 00000000000..5767dd23d03 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/diagram.svg @@ -0,0 +1,4 @@ + + + +
PWM
PWM
Nucleo board
Nucleo board
ESC
ESC
ESC
ESC
ESC
ESC
ESC
ESC
Motor 1
Motor 1
Motor 2
Motor 2
Motor 3
Motor 3
Motor 4
Motor 4
UART
UART
Receiver
Receiver
I2C
I2C
Gyroscope
Gyroscope
Battery
Battery
StepDown
StepDown
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/drone.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/drone.webp new file mode 100644 index 00000000000..10a9c55b919 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/drone.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic.webp new file mode 100644 index 00000000000..214acac4a7b Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic1.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic1.webp new file mode 100644 index 00000000000..ed1d8571954 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/images/schematic1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/index.md b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/index.md index b42306062b2..0fc7522aa30 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/eduard_ionut.rizea/index.md @@ -1,5 +1,5 @@ # Quadcopter -A radio controled drone capable of pith roll and yaw. +A radio controled drone capable of pitch roll and yaw. :::info @@ -29,7 +29,7 @@ These corrections are sent as signals to the four ESCs, which regulate the speed The 3S LiPo battery supplies power to the entire system. -![Architecture Diagram](images/drone.svg) +![Architecture Diagram](images/diagram.svg) ## Log @@ -39,10 +39,20 @@ Got approval and researched the components. Ordered all of the components. ### Week 5 - 11 May +Received all of the components. +Finished the design. +Managed to connect the receiver and remote controller, and modify the signals based on the gyroscope's readings. ### Week 12 - 18 May +Joined the 3D pieces together. +Started soldering the ESCs and Motors. +Started soldering the squid cables that connect the ESC's and Nucleo to the battery. ### Week 19 - 25 May +Finished the squid cables and powered all the motors. +Added independent PWM output to all four ESCs with 1000-2000µs pulses at 50Hz. +Created a rudimetary stabilisation alogrithm using the pid crate. +![Schematic](images/drone.webp) ## Hardware @@ -51,6 +61,7 @@ The project uses the Nucleo board as a flight controller. It receives data from ### Schematics +![Schematic](images/schematic1.webp) ### Bill of Materials @@ -79,6 +90,12 @@ The format is | Library | Description | Usage | |---------|-------------|-------| | [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer | Handling I2C, SPI, and PWM peripherals | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded systems | Running the PWM reader, IMU/PID and mixer tasks concurrently on a single-threaded executor | +| [pid](https://crates.io/crates/pid) | Generic PID controller implementation | Three independent rate-mode PID loops for roll, pitch, and yaw stabilization | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping, delays, and timeouts | Fixed-rate scheduling of the 250 Hz PID loop, the 50 Hz mixer loop, and the 3 ms RC pulse timeout | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy) | Async adapters for embedded-hal traits | Bridging Embassy peripherals to standard embedded-hal interfaces | +| [embedded-hal-async](https://github.com/rust-embedded/embedded-hal) | Async traits for embedded peripherals | Type abstractions used by Embassy drivers | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization primitives | Mutex-protected shared state for throttle and PID corrections between tasks | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/display_photo.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/display_photo.webp new file mode 100644 index 00000000000..9c1486ebe65 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/display_photo.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/edi_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/edi_schematic.webp new file mode 100644 index 00000000000..39fa3aaf54f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/edi_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/project_on_breadboard.webp b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/project_on_breadboard.webp new file mode 100644 index 00000000000..ece9ce79caf Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/images/project_on_breadboard.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/index.md b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/index.md new file mode 100644 index 00000000000..0916379077a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/eduard_stefan.pana/index.md @@ -0,0 +1,139 @@ +# NucleoPod: High-Fidelity Digital Audio Player + +:::info + +**Author:** Eduard-Ștefan Pană \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-editheman + +::: + +--- + +## Description + +NucleoPod is a standalone, portable digital audio player inspired by classic media players. Built around the STM32U545RE microcontroller and programmed entirely in Rust, the device reads audio files from an external MicroSD card, applies software-based Digital Signal Processing (DSP) for a 3-band equalizer, and outputs high-fidelity audio via an I2S DAC. It features a capacitive touch interface (click-wheel style) for navigation and a color TFT display for a hierarchical user interface (UI). The system is fully portable, powered by a rechargeable Li-Po battery circuit. + +## Motivation + +The motivation behind this project is rooted in a childhood dream. Growing up, I always wanted an original iPod, but I never had the opportunity to own one. Now that the iconic device has been officially discontinued, I decided to fulfill that wish by engineering my own functional tribute from scratch. Beyond this personal fulfillment, the project serves as a comprehensive technical challenge. Recreating the seamless experience of a classic media player allows me to dive deep into the embedded Rust ecosystem (specifically the Embassy async framework), master real-time Digital Signal Processing (DSP), and handle complex hardware synchronization (I2S, SPI, I2C) required for high-fidelity audio playback. + +## Architecture + +The software architecture is entirely asynchronous, built on the Embassy executor. It uses several concurrent tasks coordinated through async channels: + +* **Audio Task:** Runs on TIM6 hardware interrupt at the WAV file's sample rate. The interrupt handler reads samples directly from a buffer and writes them to the internal DAC registers via PAC. This provides true hardware-driven audio output independent of CPU scheduling. +* **SD Reader Task:** Reads audio data from `.wav` files via SPI2 in 8KB chunks, using a double-buffering (ping-pong) technique to ensure continuous playback without underruns. +* **UI & Input Task:** Polls the MPR121 capacitive touch sensor via I2C1, detects click-wheel gestures (scroll up/down, select), and updates the menu state machine. Pushes UI updates to the TFT display over SPI1. +* **Haptic Task:** Triggers the vibration motor via GPIO on each scroll event to provide tactile feedback. + +## Block Diagram + +* **Power Subsystem:** External 5V Power Bank ➔ STM32 Nucleo USB-C port (`5V` rail). +* **Processing:** STM32U545RE (Nucleo-64), clocked at 160MHz via PLL. +* **Inputs:** + * MicroSD Card Module ➔ connected via SPI2 (PB13/PB14/PB15, CS on PB5). + * MPR121 Capacitive Touch Sensor ➔ connected via I2C1 (PB6/PB7). + * Tactile push-button (center select) ➔ connected to GPIO PB4. +* **Outputs:** + * Internal 12-bit DAC (DAC1_OUT1 on PA4) ➔ RC filter (100Ω + 100nF) ➔ 3.5mm Audio Jack. + * TFT LCD Display (ILI9341, 320x240) ➔ connected via SPI1 (PA5/PA6/PA7, DC/RST/CS on PC6/PC7/PC9). + * Vibration motor module (haptic feedback) ➔ connected to GPIO PB10. + +## Log + +* **Week Mar 30 - Apr 5:** * Project ideation and initial brainstorming. Evaluated multiple concepts (e.g., smart solar tracker, automated sorter) before settling on the digital audio player (NucleoPod) concept. +* Verified the core capabilities of the STM32U545RE microcontroller to ensure it has the necessary processing power (FPU) and peripherals for audio processing. +* **Week Apr 6 - Apr 12:** * Hardware research and compatibility checks. Investigated the necessary external modules for high-fidelity audio (I2S), storage (SPI), and user input (I2C). +* Made the architectural decision to exclusively use the STM32 Nucleo board, discarding the initially proposed Raspberry Pi Pico to streamline development and focus entirely on the STM32 ecosystem. +* **Week Apr 13 - Apr 19:** * Software architecture planning and scope management. Researched the Rust `embassy-stm32` framework for handling asynchronous tasks and DMA transfers. +* Consulted with the laboratory assistant to refine the project scope. +* **Week Apr 20 - Apr 26:** * Component selection and finalization of the Bill of Materials (BoM). +* Identified specific, compatible breakout boards (PCM5102A DAC, ST7789 TFT display, MPR121 Touch sensor) and designed the theoretical portable power subsystem (Li-Po battery, TP4056 charger, and 5V Boost converter). +* **Week Apr 27 - Present:** * Drafting the official project documentation and Moodle proposal. +* Initializing the GitHub repository and setting up the basic Rust toolchain for the target architecture (`thumbv8m.main-none-eabihf`). Currently preparing to order the hardware components to begin physical prototyping. +* **Week May 4 - May 10:** + * Verified Nucleo board power rails and tested each component individually. + * Successfully integrated and tested the ILI9341 display via SPI1 (with mirror correction via `flip_horizontal`). + * Validated SD card communication on SPI2 and verified FAT32 file listing. + * Tested MPR121 touch sensor on I2C1 — confirmed touch detection by reading raw electrode capacitance values. + * Tested vibration motor on GPIO PB10 for haptic feedback. + * Validated push-button input on PB4 with internal pull-up. +* **Week May 11 - Present:** + * Discovered that SAI/I2S peripheral pins are not exposed on Nucleo-64, blocking the PCM5102A I2S path. Pivoted to using STM32's internal DAC on PA4. + * Resolved DAC clock configuration by routing it through the LSE oscillator and increasing system clock to 160 MHz via PLL. + * Built initial WAV playback prototype using a single-task busy-wait loop. Identified audio glitches caused by SD card read latency interleaved with sample output. + * Implemented double-buffering (ping-pong) between two 8 KB / 16 KB / 32 KB buffers. + * Tested an Embassy async task split (audio task + SD task) with a `Channel`, but confirmed that Embassy's cooperative scheduling on a single core could not eliminate the interruption while `embedded-sdmmc` performs blocking SPI transfers. + * Currently implementing TIM6 hardware interrupt for audio output via PAC, decoupling sample timing from the async executor and allowing the main task to handle SD I/O without affecting audio continuity. + +## Hardware Overview + +The core of the system is the **STM32 Nucleo-64 (STM32U545RE)**, chosen for its ARM Cortex-M33 core with hardware FPU, built-in 12-bit DAC, and good Embassy support. The system clock is configured at 160 MHz using HSI + PLL to provide enough processing headroom for parallel SD reads and audio output. The hardware design is modular: each peripheral (display, SD, touch, motor) is on its own breakout board, connected via standard SPI/I2C/GPIO buses. + +### Schematics + +![Schematic](./images/edi_schematic.webp) + +## Components + +* **STM32U545RE Nucleo-64:** Main microcontroller and development board. +* **Internal 12-bit DAC (PA4):** Generates analog audio signal, AC-coupled via 100Ω + 100nF to the headphone jack. +* **PCM5102A Module (jack reuse only):** Provides the 3.5mm headphone jack and AGND reference; its I2S DAC chip is unused. +* **MicroSD SPI Module:** Mass storage for `.wav` audio files (FAT32 formatted, max 32 GB SDHC). +* **2.4" Color TFT LCD (ILI9341, 320x240):** Displays the menu UI, track list, and playback status. +* **MPR121 Touch Sensor:** Reads capacitive touch on copper-tape electrodes arranged in a circle, simulating a click-wheel. +* **Tactile Push-Button (6x6mm):** Center "Select / Play-Pause" button. +* **Vibration Motor Module:** Provides haptic feedback on scroll events. +* **5V USB Power Bank:** Portable power source. + +![Wireing](./images/project_on_breadboard.webp) + +## Bill of Materials (Hardware) + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32 Nucleo U545RE-Q](https://eu.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | The main microcontroller running the NucleoPod firmware | 110.00 RON | +| [PCM5102A DAC Module](https://www.emag.ro/modul-convertor-dac-pcm5102-2-1-vrms-tehnologie-directpathtm-dimensiuni-compacte-dh000056/pd/DM6QQL3BM/?ref=history-shopping_487416477_255937_1) | Used to decode the audio signal (I2S to Analog) and provide the high-quality 3.5mm jack | 42.00 RON | +| [MicroSD Card Reader Module](https://ardushop.ro/ro/module/1553-groundstudio-microsd-module-6427854023056.html) | SPI module used to read the `.WAV` audio files and `.BMP` album covers | 8.00 RON | +| [MicroSD Card](https://www.emag.ro/search/microsd+16gb) | Formatted to FAT32 to store the uncompressed music and images | 20.00 RON | +| [2.4" TFT LCD Display (ILI9341)](https://ardushop.ro/ro/electronica/1348-modul-lcd-24-cu-spi-controller-ili9341-6427854019523.html) | Used as the graphical user interface for the MP3 Player | 67.00 RON | +| [MPR121 Capacitive Touch Module](https://ardushop.ro/ro/senzori/984-modul-senzor-capacitiv-mpr121-6427854013279.html) | Used to read the 8 copper pads that make up the Haptic Touch Wheel | 10.00 RON | +| [Tactile push-button 6x6mm](https://ardushop.ro/ro/butoane--switch-uri/713-buton-mic-push-button-trough-hole-6427854009050.html) | Used as the physical center Select / Play / Pause button | 0.50 RON | +| [Vibration Motor Module](https://www.emag.ro/comutator-de-vibratii-pwm-pentru-motor-modul-senzor-motor-pentru-jucarii-motor-dc-vibrator-pentru-telefon-mobil-pentru-kitul-diy-arduino-uno-mega2560-r3-741050524275/pd/D69LHM2BM/?ref=history-shopping_487417681_245879_1) | Used to provide physical haptic feedback (clicks) when scrolling the touch wheel | 29.00 RON | +| [Resistors 100Ω](https://www.optimusdigital.ro/en/search?s=100+ohm+resistor) x2 | Used alongside the capacitors for the DAC output audio coupling | 0.10 RON | +| [Capacitors 10nF](https://www.optimusdigital.ro/en/search?s=100nf+capacitor) x2 | Used alongside the resistors for the DAC output audio coupling | 0.20 RON | +| [Breadboard 830 tie-points](https://sigmanortec.ro/Breadboard-830-puncte-p125425574) | Used as the base to safely prototype and wire all electronic components | 12.00 RON | +| [Dupont Jumper Wires](https://ardushop.ro/ro/fire-si-conectori/8-10-x-fire-dupont-mama-tata-20cm-6427854039200.html) | Assorted wires (M-M, M-F) used to connect the modules to the Nucleo board | 10.00 RON | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 microcontrollers | Provides hardware abstraction for peripherals: DAC (audio playback), SPI (Display & SD card), I2C (Touch wheel), GPIO, and Timers. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded | Manages and schedules concurrent asynchronous tasks (e.g., separating the haptic vibration motor task from the main audio playback loop). | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time and delay primitives | Provides precise timing and delays required for display initialization, button debouncing, and haptic feedback duration. | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | ARM Cortex-M core crates | Used for low-level core processor operations, such as unmasking the NVIC interrupts for the audio hardware timer. | +| [defmt-rtt](https://github.com/knurling-rs/defmt) / [panic-probe](https://github.com/knurling-rs/panic-probe) | Debugging & Panic handler | Catches fatal system errors (panics) and safely logs them to the host console via the RTT (Real-Time Transfer) debug interface. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Draws the entire graphical user interface: anti-flicker text rendering, control buttons (rectangles), and the progress bar (circles and lines). | +| [tinybmp](https://github.com/embedded-graphics/tinybmp) | BMP image parser | Performs bit-level decoding of uncompressed `bgr24` images (Album Covers) so they can be rendered on the display. | +| [mipidsi](https://github.com/almindor/mipidsi) | Display driver for MIPI DSI / SPI | Initializes and controls the ILI9341 TFT display, configuring screen orientation, pixel color formats, and SPI communication. | +| [embedded-hal-bus](https://github.com/rust-embedded/embedded-hal) | SPI Bus sharing | Creates an `ExclusiveDevice` for the display, ensuring proper management of the Chip Select (CS) pin on the shared SPI bus. | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc) | SD/MMC file system | Enables navigation of the FAT32 file system on the SD card, directory iteration (handling 8.3 short names), and efficient byte-level reading for WAV and BMP files. | +| [heapless](https://github.com/japaric/heapless) | Data structures without dynamic allocation | Manages fixed-capacity vectors for the playlist and string formatting (such as playback time tracking) directly on the stack, safeguarding the limited RAM. | + +![Software](./images/display_photo.webp) + +## Links + +1. [https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab) +2. [wav files downloader](https://www.cutyt.com/yt-wav) +3. [downloader for album cover](https://spotidownloader.com/en19) +4. [https://github.com/MYaqoobEmbedded/STM32-Tutorials/tree/master/Tutorial%2043%20-%20WAV%20Player](https://github.com/MYaqoobEmbedded/STM32-Tutorials/tree/master/Tutorial%2043%20-%20WAV%20Player) +5. [https://github.com/MabezDev/embedded-fatfs](https://github.com/MabezDev/embedded-fatfs) +6. [online wav conversion tool](https://g711.org/) +7. [ffmpeg - tool for transforming wav file from 16-bit to 8-bit](https://ffmpeg.org/ffmpeg.html) +8. [perfboard soldering](https://www.youtube.com/watch?v=5tydtZl95dE) +9. [DMA for SD with a 12-bit DAC logic](https://www.youtube.com/watch?v=fY4CHt99SuY) +10. [wav player exemple](https://www.youtube.com/watch?v=QPmFvSFyIbs&t=1301s) +11. [audio player exemple](https://www.youtube.com/watch?v=Eki52Y2Ou5s&t=931s) diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitectura_diagrama.webp b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitectura_diagrama.webp deleted file mode 100644 index 543a2783291..00000000000 Binary files a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitectura_diagrama.webp and /dev/null differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitecture_diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitecture_diagram.webp new file mode 100644 index 00000000000..f7d86a73658 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/arhitecture_diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/index.md index 9913450aa53..356c03fa1fd 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/index.md @@ -10,8 +10,8 @@ Hardware Rhythm Game ## Description -Rhythm game follows the standard mechanics of this genre: the player needs to hit the notes at the right time using the buttons on the breadboard. There are multiple types of notes: tap notes, hold notes, and motion notes triggered by moving the breadboard up/down on the table. Visual feedback is provided using LEDs, where the color represents the accuracy. \ -Every hit note fills up the color match progress bar. Once the bar is full, the game enters a special mode called "Color Match". In this mode, the player needs to match the color of the LEDs with those shown on the screen using RGB channels. Failing to finish the game mode successfully will make the player lose one life. The player starts with three lives and can replenish one after completing a song. \ +Rhythm game follows the standard mechanics of this genre: the player needs to hit the notes at the right time using the buttons on the breadboard. There are multiple types of notes: tap notes, hold notes, and motion notes triggered by moving the breadboard up/down on the table. Visual feedback is provided using RGB LEDs, where the color represents the accuracy. \ +The player needs to accumulate a certain number of hit notes within the time limit to trigger the special game mode called "Color Match". Failing to trigger this game mode will make the player lose one life. In this mode, the user needs to match the color of the RGB LEDs with those shown on the screen using RGB channels. Failing to finish the game mode successfully will deduct one life. The player starts with three lives and can replenish one after completing a song. The player wins when all songs in the current playlist are completed successfully. \ The game is accompanied by music, and players can customize which set tracks are playing and in what order. ## Motivation @@ -20,7 +20,7 @@ I chose this project because I like rhythm games. Combining them with hardware w ## Architecture -![](./arhitectura_diagrama.webp) +![](./arhitecture_diagram.webp) Main components: @@ -42,12 +42,12 @@ Main components: - communicates through I2C *Feedback*: -- **LEDs** +- **RGB LEDs** - hit accuracy visual feedback - controlled via PWM pins - **Servomotor** - - color match progress bar visual feedback - - when it reaches 180° it means the bar is full + - color match progress visual feedback + - when it reaches 180° it means the color match progress is 100% - controlled via PWM pins *Music*: @@ -66,7 +66,77 @@ Main components: I wrote the initial documentation. +### Week 20 - 26 April +I tested the functionality of the components. + +### Week 27 April - 3 May + +I implemented the UI interface and the button logic. + +### Week 4 - 10 May + +I wrote the logic for the rhythm game and color match. + +### Week 11 - 17 May + +I integrated the music and sounds effects into the game and wrote the logic for the volume and playlist menu. + +## Week 18 - 24 May + +I made multiple tests to ensure the game is working properly and calibrated game parameters to ensure the gameplay experience is smooth. + +## Hardware + +The project uses the STM32 Nucleo Board as the main controller. An LCD Display is used for rendering the game graphics. User input is taken using push buttons. While in game, visual feedback is given using RGB LEDs for hit accuracy, and a servomotor for color match progress. The music is played using a DFPlayer Mini that has a microSD card and a speaker. A passive buzzer is used for sound effects. The motion notes are detected using a gyroscope. + +![](./poza_cablaj.webp) + +### Schematics +![](./schematics.webp) + +### Bill of Materials + +| Device | Usage | Price | +| ------------------------- | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| STM32 Nucleo-U545RE-Q | The microcontroller | [Provided by faculty](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | +| TFT LCD Display | Displaying the game graphics | [21,60 RON](https://www.emag.ro/display-tactil-tft-lcd-240-x-320-px-cu-cititor-sd-spi-2-4-inch-gri-rosu-tft-24-ili9341-restouch-spi/pd/D49CJMYBM/) | +| Buttons | User input | [1,5 RON X 7](https://www.emag.ro/set-25-butoane-tactile-chucai-12x12x7-3mm-multicolor-a-md390/pd/DRPKD83BM/) | +| Gyroscope MPU 6050 GY-521 | Detecting the breadboard movement | [31,99 RON](https://www.emag.ro/modul-giroscop-mpu-6050-gy-521-accelerometru-arduino-3-axe-2-1-cm-x-1-1-cm-x-0-3-cm-albastru-c7/pd/DL3G1QYBM/) | +| RGB LEDs | Visual feedback | [1,33 RON X 4](https://www.emag.ro/set-10-x-led-rgb-5-mm-se2301081533/pd/D8VDVRMBM/) | +| Servomotor SG90 180° | Visual feedback | [26,14 RON](https://www.emag.ro/servomotor-genelec-sg90-0-180-grade-22x11-5x22-5mm-gd-0228/pd/DGMQ44YBM/) | +| DFPlayer Mini TF-16P | Audio player for the music tracks | [18,03 RON](https://www.emag.ro/modul-tf-16p-dfplayer-mini-player-audio-24-biti-32-gb-negru-auriu-5904162801930/pd/D8B8KLMBM/) | +| Speaker | Audio output for the music tracks | [< 19,68 RON](https://www.emag.ro/modul-inregistrare-redare-audio-isd1820-cu-difuzor-3-5v-3-b-044/pd/DLXDNLMBM/) | +| MicroSD Card | Storing music files | [29,98 RON](https://www.emag.ro/card-de-memorie-microsd-premium-32-gb-hc-i-class-10-qeno-100mb-s-pentru-camera-auto-telefon-aparat-foto-hub-console-negru-card32gb/pd/DBTYN2YBM/) | +| Pasive Buzzer | Sound effects | [12,48 RON](https://www.emag.ro/buzzer-pasiv-pe-pcb-elektroweb-fara-generator-convertor-5-v-3-d-012/pd/DSLMTMYBM/) | + + +## Software + +| Library | Description | Usage | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------- | +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Abstraction Layer for STM32 | Used for control of GPIO, SPI, I2C, UART, and PWM peripherals | +| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Async task executor | Used to manage concurrent tasks | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Used for interacting with peripherals | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework | Used for debugging | +| [panic-probe](https://github.com/knurling-rs/probe-run/tree/main) | Panic handler | Used for monitoring fatal code errors | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Timekeeping, delays and timeouts | Used for calculating game time | +| [embassy-sync](https://github.com/embassy-rs/embassy/tree/main/embassy-sync) | Synchronization primitives and data structures with async support | Used for managing signals and channels | +| [heapless](https://github.com/rust-embedded/heapless) | Data structures that don't require dynamic memory allocation | Used to store game data in vectors | +| [core](https://github.com/rust-lang/rust/tree/main/library/core) | Rust standard library | Used for debug and write operations | +| [mipidsi](https://github.com/almindor/mipidsi) | Display driver for ILI9341 | Used for connecting the screen via SPI | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing the game graphics | + + +![](./software_diagram.webp) + +The game runs in a continuous loop where it checks the current game state: +- *Start Menu*: the user chooses the next game state from the available options +- *Volume Menu*: the user can adjust the volume level of the music and turn on/off the sound effects +- *Playlist menu*: the user can edit the songs and their playback order during the game +- *Rhythm game*: the user is in a game; the game state switches to color mode when the color mode progress reaches 100%, to start menu when a game is won/lost and again to rhythm game when a song, excepting the last one, is completed +- *Color mode*: the user is in color mode; the game state switches to rhythm game after succesful completion or if the player is not out of lives after failing to complete the mode; if the player is out of lives, the game state switches to start menu +- *Exit*: the program stops after the user chooses this option diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/poza_cablaj.webp b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/poza_cablaj.webp new file mode 100644 index 00000000000..632a7556dff Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/poza_cablaj.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/schematics.webp new file mode 100644 index 00000000000..13d3c62fae4 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/software_diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/software_diagram.webp new file mode 100644 index 00000000000..77b7b79855f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/elena_alexia.mocanu/software_diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Exploded_Render.webp b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Exploded_Render.webp new file mode 100644 index 00000000000..06b755b0203 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Exploded_Render.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Render.webp b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Render.webp new file mode 100644 index 00000000000..f4ce55555b7 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/Render.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/architecture.svg new file mode 100644 index 00000000000..aeeaf38f3e9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/architecture.svg @@ -0,0 +1 @@ +
STM32 Nucleo Board
Microcontroller
STM32 Nucleo Board...
Driver 1
Driver 1
Motor 1
PITCH
Motor 1...
Driver 2
Driver 2
Motor 2
ROLL
Motor 2...
Driver 3
Driver 3
Motor 3
YAW
Motor 3...
Joystick
Joystick
MPU-6050
MPU-6050
I2C
I2C
ADC
ADC
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schem.webp b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schem.webp new file mode 100644 index 00000000000..d72114cc3f3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schem.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schematic.webp new file mode 100644 index 00000000000..4bfc5f974b7 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/index.md b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/index.md new file mode 100644 index 00000000000..114ab3c3be9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/eric.pascu/index.md @@ -0,0 +1,98 @@ +# Gimbal Stabilizer + +A 3-axis camera stabilizer controlled by an STM32 Nucleo, with brushless motors and FOC drivers, using an MPU-6050 sensor for real-time stabilization. + +:::info + +**Author**: Pascu Eric \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-PascuEric + +::: + + + +## Description + +The core of this project is a high-performance 3-axis stabilization system designed to turn shaky, handheld movement into cinematic, professional-grade footage. Instead of struggling with blurred or vibrating shots, a user can simply mount their camera and move freely—the gimbal handles the rest. By constantly monitoring its position in space, the device makes invisible, micro-adjustments to the Pitch, Roll, and Yaw axes. This results in a "floating" camera effect that allows creators to capture smooth walking shots, sweeping pans, and dynamic action sequences that would otherwise be impossible to record steadily by hand. + +## Motivation + +Gimbals have become an essential "secret weapon" in modern visual storytelling, bridging the gap between amateur clips and Hollywood-level production. Beyond just stabilizing travel vlogs for YouTubers, this technology is now a cornerstone of multiple industries: it allows drones to capture perfectly level aerial surveys, enables cinematographers to execute complex "one-take" sequences, and even assists in robotic surgery and satellite positioning. + +As a photography and videography enthusiast, I have always been fascinated by how these devices effortlessly defy gravity. Owning a commercial gimbal inspired me to look "under the hood." I took on the challenge of building one from scratch—handling everything from 3D design to the complex math of stabilization algorithms—to truly master the physics and engineering that make modern cinematic magic possible. + +## Architecture + +![Diagram](./images/architecture.svg) + +## Log + +### Week 20 - 26 April + +Initial upload with the description, motivation, BOM and architecture scheme. + +### Week 4 - 10 April + +Added the KiCad schematic with the pinout for the STM32. + +### Week 18 - 24 April + +Uploaded the renders of the gimbal, as well as the link with the STL files for the case. + + +## Hardware + +The gimbal uses an STM32 Nucleo as the main microcontroller, running both the sensor fusion and PID control firmware as well as the FOC algorithms for the motors. Three brushless gimbal motors (one per axis) are driven by three individual FOC driver boards. An MPU-6050 module provides 6-DoF inertial measurements for sensor fusion. A joystick provides manual operator input for orientation control. Power is supplied by a 3S LiPo battery, with a buck converter regulating the logic-level voltages. + +The case for the gimbal and the platform are both inspired by [this website](https://howtomechatronics.com/projects/diy-arduino-gimbal-self-stabilizing-platform/). + +### Schematics + +![Diagram](./images/schem.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-64 | Main microcontroller — sensor fusion, PID and FOC | [115 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396?CMP=e-email-sys-orderack-GLB) | +| Brushless gimbal motor (x3) | One motor per axis (roll, pitch, yaw) | [3 × 50 RON](https://www.aliexpress.com/item/1005002058458786.html?spm=a2g0o.order_list.order_list_main.15.21ef1802e31OeE) | +| FOC driver (x3) | Field-Oriented Control driver board, one per motor | [3 × 34 RON](https://www.aliexpress.com/item/1005007634026470.html?spm=a2g0o.order_list.order_list_main.25.21ef1802e31OeE) | +| MPU-6050 | 6-DoF IMU — accelerometer + gyroscope for angle estimation | [18 RON](https://www.aliexpress.com/item/1005008796700745.html?spm=a2g0o.order_list.order_list_main.30.21ef1802e31OeE) | +| Joystick module (x1) | Manual operator control of target angle | [15 RON](https://www.aliexpress.com/item/1005007846718456.html?spm=a2g0o.order_list.order_list_main.5.21ef1802e31OeE) | +| 3S LiPo battery (x1) | Main power source (~11.1 V) | [90 RON](https://www.aliexpress.com/item/1005007883555706.html?spm=a2g0o.order_list.order_list_main.20.21ef1802e31OeE) | +| Buck converter (x1) | Steps down battery voltage to 5 V / 3.3 V for logic | [14 RON](https://www.aliexpress.com/item/1005009823447391.html?spm=a2g0o.order_list.order_list_main.10.21ef1802e31OeE) | + +## Renders + +![Diagram](./images/Render.webp) +![Diagram](./images/Exploded_Render.webp) + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Embassy HAL for STM32 | Manages low-level hardware abstractions including I2C telemetry, ADC analog pins, GPIO states, and complementary high-speed PWM timers on the Nucleo. | +| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Async runtime executor for Embassy | Handles the main task allocation and spawning architecture (`Spawner`) for asynchronous resource execution. | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Modern time keeping and delay tracking library | Provides the deterministic async `Timer` abstraction to enforce the strict 10ms execution loop. | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient, deferred logging framework for embedded systems | Provides macro definitions (`info!`, `debug!`) to serialize telemetry strings without wasting MCU cycle performance. | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | SEGGER Real-Time Transfer (RTT) logging target | Directs the serialized logging packets through the physical debug probe link to your computer's terminal. | +| [panic-probe](https://github.com/knurling-rs/panic-probe) | Embedded panic handler tailored for hardware debugging | Catches standard execution panics and forces them directly out through the RTT channel alongside accurate stack trace prints. | +| [micromath](https://github.com/tarkah/micromath) | Lightweight, fast `no_std` math library | Empowers the firmware with advanced floating-point trigonometry functions (`atan2`, `sqrt`) required for complementary sensor fusion. | + +## Links + + + +1. [3 Axis Mobile Gimbal](https://techarduinocode.blogspot.com/2024/04/3-axis-mobile-gimbal.html) +2. [DIY Arduino Gimbal](https://howtomechatronics.com/projects/diy-arduino-gimbal-self-stabilizing-platform/) +3. [Reddit Forums](https://www.reddit.com/r/ECE/comments/jj0lgg/3axis_diy_phone_gimbal_bldc_control/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/oxidevault.svg b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/oxidevault.svg new file mode 100644 index 00000000000..82dd3686767 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/oxidevault.svg @@ -0,0 +1,102 @@ +

OxideVault System Architecture

Connectivity

Actuators

User Interface & Feedback

Security & Monitoring

Authentication (Inputs)

SPI

GPIO / Interrupt

I2C / Interrupt

I2C

GPIO

PWM

UART

3.3V

3.3V

3.3V

5V

3.3V

ESP8266 WiFi Module

RC522 RFID Module

STM32 Nucleo-U545RE-Q

4x4 Membrane Keypad

MPU6050 Accelerometer/Gyro

SSD1306 OLED Display

Active Buzzer

SG90 Servo Motor

USB 5V Power

\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/pm_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/pm_schematic.webp new file mode 100644 index 00000000000..22ece331e69 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/pm_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/poza_index.webp b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/poza_index.webp new file mode 100644 index 00000000000..64d66f34e3d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/images/poza_index.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/index.md b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/index.md new file mode 100644 index 00000000000..395e50658e4 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/gabriel.bolborea/index.md @@ -0,0 +1,98 @@ +# OxideVault +IoT-enabled smart vault with multi-factor authentication and tamper detection, powered by Rust. + +:::info + +**Author**: Bolborea Gabriel-Viorel \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Gabr1elBb + +::: + +## Description + +A secure smart vault system that requires a two-step authentication process to unlock: scanning a valid RFID tag followed by entering a correct 4-digit PIN on a membrane keypad. To ensure physical security, the vault is equipped with an MPU6050 accelerometer and gyroscope that monitors for unauthorized movement or forceful impacts. + +If tampering is detected, or if the authentication fails multiple times, the system triggers a local buzzer alarm and locks down. An ESP8266 WiFi module is used to log access events and send alerts remotely, while an OLED display provides clear, real-time feedback to the user throughout the interaction. + +## Motivation + +Security systems are a critical application for embedded devices, where memory leaks or race conditions can lead to severe vulnerabilities. I chose this project to explore how Rust's memory safety and the RTIC (Real-Time Interrupt-driven Concurrency) framework can be leveraged to build a robust state machine. Handling multiple concurrent inputs (I2C sensors, SPI for RFID, GPIO interrupts for the keypad, and UART for WiFi) while maintaining deterministic real-time responses for the tamper alarm is a perfect challenge to understand the true power of Embedded Rust. + +**OxideVault** ensures that race conditions are eliminated at compile time and that high-priority tasks (like the tamper alarm) are always handled with deterministic latency. + +## Architecture + +![Diagram](./images/oxidevault.svg) + +## Log + +### Week 27 April - 3 May +Finalized the hardware Bill of Materials (BOM), designed the system architecture block diagram, wrote the official documentation, and pushed the initial setup to the GitHub repository. +### Week 5 May - 11 May +Finalized the physical breadboard prototyping and completed the detailed electrical schematics in KiCad. Updated the project documentation and synchronized all media assets for the repository. +### Week 12 May - 18 May +Configured the Embedded Rust environment using the `embassy-rs` framework. Implemented communication protocols for all peripherals, including SPI (RC522 RFID), GPIO (membrane keypad matrix), I2C (MPU6050, SSD1306 OLED), and async UART (ESP8266 HTTP server). All software subsystems were successfully unified under a safely shared `VaultState` Mutex. + +### Week 19 May - 25 May +Performed the final physical assembly inside the vault enclosure. Conducted extensive hardware debugging to resolve I2C bus lockups and MCU resets during peak current draws. Resolved the issues by securing physical connections, minimizing wire crosstalk, and optimizing the servo PWM software logic to achieve a stable, continuous runtime. + +## Hardware + +The hardware architecture of OxideVault is centered around the STM32 Nucleo-U545RE-Q. The system is designed to be powered via USB, utilizing the Nucleo's onboard voltage regulators to provide 3.3V for logic-level sensors and 5V for the SG90 Servo motor. + +Given the high-current draw of the servo motor during actuation and the transmission peaks of the ESP8266, power integrity is a priority. To prevent voltage drops that could trigger a system reset, the inductive load (servo) is decoupled from the sensitive digital circuitry. + +The peripherals are organized into four functional subsystems: +1. **Shared I2C Bus:** The SSD1306 OLED display and the MPU6050 IMU share a single I2C interface, differentiated by their unique hardware addresses. +2. **High-Speed SPI Interface:** The MFRC522 RFID module operates on the SPI1 bus, ensuring fast authentication data exchange. +3. **Interrupt-Driven Inputs:** The membrane keypad and the IMU tamper alarm utilize hardware interrupts to ensure immediate CPU response without constant polling. +4. **Asynchronous IoT:** The ESP8266 operates on a dedicated UART channel, allowing the MCU to send logs without blocking the main security control loop. + +![OxideVault Hardware Assembly](./images/poza_index.webp) + +### Schematics + +![OxideVault Electrical Schematic](./images/pm_schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +| :--- | :--- | :--- | +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main Microcontroller - System logic and task scheduling | [129 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396) | +| [RC522 RFID Module](https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf) | Primary Authentication - Reading RFID tags/cards | [20 RON](https://www.optimusdigital.ro/ro/wireless-rfid/32-cititor-rfid-rc522.html) +| [4x4 Membrane Keypad](https://www.parallax.com/package/4x4-matrix-membrane-keypad-datasheet/) | Secondary Authentication - 4-digit PIN entry | [12 RON](https://www.cleste.ro/tastatura-matriceala-tip-membrana-cu-4x4-taste.html) | +| [SSD1306 OLED (0.96")](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) | User Interface - Displaying status and feedback messages | [25 RON](https://www.robofun.ro/display-oled-0-96-i2c-albastru-galben.html) | +| [MPU6050 IMU](https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf) | Tamper Detection - Accelerometer/Gyro for shock sensing | [16 RON](https://www.emag.ro/modul-accelerometru-si-giroscop-mpu6050-ai382-s321/pd/D0Z17DBBM/) | +| [ESP8266 (ESP-01)](https://www.espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf) | WiFi Connectivity - Remote logging and status reporting | [15 RON](https://www.optimusdigital.ro/ro/wireless-wi-fi/12-modul-wifi-esp8266-esp-01.html) | +| [SG90 Servo Motor](http://www.ee.ic.ac.uk/pjs102/projects/Control1/servo.pdf) | Locking Mechanism - Physical bolt actuation | [15 RON](https://www.cleste.ro/servomotor-sg90-9g.html) | +| [Active Buzzer](https://www.farnell.com/datasheets/2171110.pdf) | Audio Feedback - Siren for alarms and key press tones | [5 RON](https://www.optimusdigital.ro/ro/audio-buzzere/125-buzzer-activ-5v.html) | +| [MB102 Breadboard Power Supply](https://www.optimusdigital.ro/en/linear-regulators/61-breadboard-source-power.html) | Dedicated Power - External 5V/3.3V power source for the SG90 servo and ESP8266 | 7 RON | +| **Auxiliary Components** | **Breadboard, Dupont wires, and decoupling capacitors** | **~30 RON** | + +## Software + +| Library | Description | Usage | +|---|---|---| +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32/) | Asynchronous framework | Task scheduling, handling interrupts, and managing I2C, SPI, UART, PWM peripherals. | +| [mfrc522](https://docs.rs/mfrc522/) | RFID Driver | Interface for authenticating master RFID cards via SPI. | +| [ssd1306](https://docs.rs/ssd1306/) | OLED Display Driver | Hardware interface for sending pixel data to the system display. | +| [heapless](https://docs.rs/heapless/) | Static data structures | Manages PIN buffers and HTML packets without dynamic heap memory allocation. | +| [embedded-graphics](https://docs.rs/embedded-graphics/) | 2D Graphics Library | Renders text, fonts, and UI elements on the OLED interface. | +| [embedded-hal](https://docs.rs/embedded-hal/) | Hardware Abstraction | Standardized traits for abstracting GPIO, I2C, and SPI peripherals. | +| [defmt](https://docs.rs/defmt/) | Embedded Logger | Provides efficient debug logging over the RTT interface. | +| [embassy-sync](https://docs.embassy.dev/embassy-sync/) | Synchronization | Implements Mutexes to safely share the VaultState across asynchronous tasks. | + +### Detailed Design + +The software architecture is built upon the `embassy-rs` asynchronous framework, allowing multiple subsystems to run concurrently without blocking the main execution thread. The logic is divided into highly specific, independent tasks: +* **I2C Task:** Continuously polls the MPU6050 accelerometer for physical shocks and updates the SSD1306 OLED UI. +* **PWM Task:** Controls the SG90 servo motor state (locked/unlocked) with optimized actuation to prevent unnecessary current draw. +* **WiFi Task:** Manages the ESP8266 module via UART AT commands, hosting a local HTTP server for remote monitoring and override controls. +* **Main Loop:** Handles the physical authentication layer by scanning for the RFID Master Card via SPI and reading the matrix keypad via GPIO interrupts. + +Inter-Process Communication (IPC) and synchronization between these concurrent tasks are achieved using a globally shared state (`VaultState` enum). This state is safely protected by a `Mutex` (`CriticalSectionRawMutex`), which eliminates data races at compile time and ensures that high-priority events, such as a tamper detection from the IMU, immediately force the entire system into an `Alarm` state. + +## Links + +1. [The Rust Embedded Book](https://docs.rust-embedded.org/book/) +2. https://www.youtube.com/watch?v=kGyQS3B1IwU diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod1.svg b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod1.svg new file mode 100644 index 00000000000..0f0080db14e --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod1.svg @@ -0,0 +1 @@ +SVG Image created as nod1.svg date 2026-05-17T22:05:35 Image generated by Eeschema-SVG12341234ABCABCDate: 2026-04-25KiCad E.D.A. 10.0.2Rev: 1.0Size: A5Id: 1/2Title: Nod Emițător - MorseFile: nod1.kicad_schSheet: /UNSTPBD1LEDGND123Q12N222212BZ1BuzzerC2100nFSW1SW_PushGNDR3220R41kGND+3V3C1100nF123RV1R_PotentiometerGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico2WA1RaspberryPi_Pico2WGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40RV1R_Potentiometer123C1100nFGNDD1LEDR3220GNDSW1SW_PushC2100nFBZ1Buzzer12Q12N2222123GND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod2.svg b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod2.svg new file mode 100644 index 00000000000..b851857be91 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/images/nod2.svg @@ -0,0 +1 @@ +SVG Image created as nod2.svg date 2026-05-18T22:33:06 Image generated by Eeschema-SVG12341234ABCABCDate: 2026-04-25KiCad E.D.A. 10.0.3Rev: 1.0Size: A5Id: 2/2Title: Nod Receptor - MorseFile: nod2.kicad_schSheet: /nod2/UNSTPBVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQ+5VVe15V1GND23V32GPIO213GND3GPIO444GPIO194GPIO435GPIO205GPIO336GPIO06GPIO347GPIO477GPIO358GPIO488GPIO369GPIO269GPIO3710GPIO710GPIO3811GPIO611GPIO3912GPIO512GPIO4013GPIO413GPIO4114RST14GPIO4115GPIO315GPIO4516GPIO216GPIO4617GPIO117U2Heltec_Wireless_Stick_V3GND+3V3+3V312345678J31.44_SPI_LCDGNDRSCSRSCSSCLSDARSTLEDSDARSTSCLGNDJ31.44_SPI_LCD12345678 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/index.md b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/index.md new file mode 100644 index 00000000000..fdaef8ec6b7 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/gabriel_ioan.pavel/index.md @@ -0,0 +1,187 @@ +# Transmițător și traducător de cod Morse +Transmițător care emite un caracter în cod Morse, un nod bridge WiFi/UART și un receptor +ce îl decodifică și îl afișează pe un ecran. + +:::info + +Author: Gabriel-Ioan PAVEL \ +GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-gabrielioanpavel + +::: + + + +## Description + +Ideea proiectului este comunicarea unidirecțională prin cod Morse, implementată la nivel bare-metal. +Arhitectura cuprinde trei noduri interconectate prin WiFi UDP și UART. + +1. Nod emițător - Raspberry Pi Pico 2W: Gestionează interfața cu utilizatorul. Microcontrollerul creează +un punct de acces WiFi și folosește un pin ADC pentru a citi tensiunea unui potențiometru, mapând valoarea +citită pe un index corespunzător unuia din cele 28 de semnale disponibile: SPACE, cele 26 de litere ale +alfabetului englez și semnalul special CLEAR. La apăsarea scurtă a butonului, buzzerul redă codul Morse +al literei selectate. La apăsarea lungă, semnalul este transmis nodului bridge printr-un protocol ARQ +(Automatic Repeat reQuest) stop-and-wait, cu retrimitere automată în cazul pierderii pachetelor. + +2. Nod bridge - Heltec Wireless Stick V3: Asigură puntea de comunicație dintre transmițător și receptor. +Se conectează la rețeaua WiFi creată de Pico 2W, participă la protocolul ARQ (echo al datelor, confirmare +finală) și, la finalizarea cu succes a schimbului, trimite codul Morse prin UART nodului receptor. + +3. Nod receptor - STM32 Nucleo-U545RE-Q: Primește secvențele Morse prin UART pe PA3 (LPUART1_RX), le +decodifică și le afișează pe un ecran LCD de 1.44''. Ecranul este împărțit în trei zone: linia 1 afișează +permanent eticheta „READY", linia 2 afișează ultimul cod Morse primit brut (ex. `.-`), iar de la linia 3 +în jos se acumulează literele decodificate cu reîmpachetare automată. La primirea semnalului SPACE (`/`) +se inserează un spațiu; două SPACE consecutive mută cursorul la începutul liniei următoare. La primirea +semnalului CLEAR, afișajul și bufferul sunt șterse complet. + +Logica este realizată cu ajutorul frameworkului `embassy` pentru a facilita execuția de cod +asincron, permițând procesarea non-blocantă a comunicațiilor și actualizarea ecranului +fără a recurge la un sistem de operare în timp real complex. + +## Motivation + +Am ales acest proiect din interesul pentru comunicațiile wireless implementate la nivel +bare-metal, vizând înțelegerea practică a stivelor de comunicații fără abstracțiile unui +sistem de operare. Am optat pentru WiFi UDP în locul TCP, implementând manual un protocol +de confirmare ARQ (Automatic Repeat reQuest) stop-and-wait cu timeout și retrimitere, cu +scopul de a înțelege mecanismele de bază ale fiabilității în transmisiile de date fără a +recurge la soluții de protocol gata implementate. + +## Architecture + +1. Nod emițător (Raspberry Pi Pico 2W) +- Input: Potențiometru conectat la un pin ADC. Se folosește un filtru trece-jos pentru a reduce +zgomotul electric, facilitând maparea valorilor pe 28 de poziții: SPACE (prima poziție), cele 26 +de litere ale alfabetului englez și CLEAR (ultima poziție). +- Activare: Un task asincron diferențiază apăsarea scurtă (redare Morse local prin buzzer) de +cea lungă (transmisie WiFi). La apăsarea lungă, microcontrollerul intră în secvența ARQ și +blochează orice alt input pe durata ei. +- Transmisie ARQ: Nodul trimite codul Morse prin UDP, așteaptă echo-ul de confirmare de la nodul +bridge (cu timeout de 5s și retrimitere automată). La primirea echo-ului corect, trimite confirmarea +finală „OK", așteaptă „OK" înapoi de la bridge. LED-ul verde rămâne aprins pe toată durata +secvenței ARQ și se stinge la finalizarea transmisiei. + +2. Nod bridge (Heltec Wireless Stick V3) +- Recepție WiFi: Nodul rulează în modul STA, conectat la rețeaua creată de Pico 2W (IP static +169.254.1.2), și ascultă pe portul UDP 5000. +- Protocol ARQ: Implementează o mașină de stări cu două stări (WAITING_DATA / WAITING_OK). La +primirea datelor, trimite echo; la primirea confirmării „OK" de la Pico, trimite codul Morse +prin UART și confirmă înapoi cu „OK". Dacă primește „OK" în starea WAITING_DATA (caz de pierdere +a confirmării), răspunde cu „OK" fără a mai trimite pe UART. +- Transmisie UART: Trimite secvența Morse pe GPIO4, conectat prin cablu la PA3 al STM32. + +3. Nod receptor (STM32 Nucleo-U545RE-Q) +- Recepție UART: Ascultă pe PA3 — LPUART1_RX (AF8) pe STM32U545; pinul D0 de pe conectorul +Nucleo-U545RE-Q. UART blocking cu loop strâns byte-cu-byte pentru a evita Overrun Error. +- Decodificare: Tabel `MORSE_TABLE[28]` indexat pozițional (SPACE la index 0, A–Z la 1–26, +CLR la 27). Semnalul SPACE (`/`) inserează un spațiu în buffer; două SPACE consecutive mută +cursorul la începutul liniei următoare. La primirea „CLR", afișajul și bufferul sunt șterse. +- Afișare: Ecranul este împărțit în trei zone fixe: linia 1 (y=10) afișează permanent „READY", +linia 2 (y=20) afișează ultimul cod Morse primit brut, iar de la linia 3 în jos (y=30–110) +se acumulează literele decodificate cu reîmpachetare automată (FONT_6X10, 21 caractere/linie, +9 linii). La umplerea completă a bufferului, conținutul este derulat în sus cu o linie. + +## Log + + + +### Week 5 - 11 May + +- Am finalizat ideea arhitecturii și funcționalității celor două noduri. +- Am actualizat schema nodului de transmisie. + - (+) LED, rezistență de 220Ohm. + - (+) Buzzer, tranzistor NPN 2N2222. + - (/) Potențiometrul și condensatorul aferent sunt acum conectate la + `AGND`, nu la `GND`. + - (/) Înlocuit antena de 17.3cm cu YAGEO S432. +- Am actualizat schema nodului de recepție + - (/) Înlocuit antena de 17.3cm cu YAGEO S432. +- Am actualizat documentația. +- Am lipit toate componentele pe plăcile de testare. + +### Week 12 - 18 May + +În urma unor teste am conclus că modulul RF de recepție este defect. Având +acasă un Heltec Wireless Stick V3, am decis înlocuirea modulelor RF cu WiFi. +Schimbări: + +- (/) Înlocuit RF cu WiFi. +- (+) Adăugat Heltec Wireless Stick V3 pe schema de recepție. +- (/) Modificat documentație. +- (-) Eliminat componentele neutilizate din scheme și de pe plăcile de testare. +- (+) Scris firmware pentru Pico. +- (+) Scris firmware pentru Heltec. +- (+) Scris firmware pentru STM. + +Altele: + +- Testat transmisie de pachete prin UDP între Pico și Heltec, cu confirmare +hardware (LED și buzzer). + +În urma unor teste pentru a verifica protocolul, am observat că ecranul Heltecului +este defect. Din acest motiv, am făcut următoarele modificări: + +- (/) Mutat logică ecran din Heltec in STM. +- (-) Eliminat logică ecran din firmware Heltec. + +### Week 19 - 25 May + +- (/) Actualizat documentație. +- (+) Adăugat posibilitatea de a scrie spații sau de trecere pe urmatorul rand, folosind + un caracter nou la transmisie. + +## Hardware + +Proiectul folosește trei microcontrollere/module de procesare, un ecran SPI, +un buzzer, un LED, condensatori și rezistori. + +### Schematics + +![nod-tx](./images/nod1.svg) +![nod-rx](./images/nod2.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [Raspberry Pi Pico 2W](https://www.raspberrypi.com/products/raspberry-pi-pico-2/) | Microcontroller emițător, punct de acces WiFi | ~52 RON | +| [Heltec Wireless Stick V3](https://heltec.org/project/wireless-stick-v3/) | Nod bridge WiFi → UART | ~70 RON | +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Microcontroller receptor | ~125 RON | +| [1.44'' SPI LCD](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2167-lcd-de-144-pentru-stc-stm32-i-arduino.html) | Ecran pentru output | 43 RON | +| Potențiometru rotativ | Selectare de litere | ~10 RON | +| [2x Placă de testare 70x90](https://www.optimusdigital.ro/ro/prototipare-cablaje-de-test/232-cablaj-de-test.html) | Plăci pentru componentele externe ale celor două noduri | 2x 3 RON | +| Condensatoare 100nF | Filtre trece-jos | ~0.2 RON / buc. | +| Rezistențe 220Ω, 1kΩ | Rezistență LED + bază tranzistor buzzer | ~0.15 RON / buc. | +| [Tranzistor 2N2222](https://www.optimusdigital.ro/en/transistors/935-transistor-npn-2n2222-to-92.html) | Tranzistor NPN pentru a comanda buzzerul de la un pin GPIO | 0.17 RON | +| [Buzzer](https://www.optimusdigital.ro/en/buzzers/12247-3-v-or-33v-passive-buzzer.html) | Feedback selectare caracter | 1 RON | +| [LED Verde](https://www.optimusdigital.ro/ro/optoelectronice-led-uri/697-led-verde-de-3-mm-cu-lentile-difuze.html) | Feedback confirmare transmisie ARQ | 0.39 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rp](https://github.com/embassy-rs/embassy) | Framework async bare-metal pentru RP2040 | ADC, GPIO, PIO pentru Pico 2W | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Framework async bare-metal pentru STM32 | UART, SPI, GPIO pentru STM32 | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Executor async pentru sisteme embedded | Rularea task-urilor asincrone pe toate nodurile | +| [embassy-time](https://github.com/embassy-rs/embassy) | Ceas async pentru sisteme embedded | Timeout-uri ARQ și temporizări non-blocante | +| [embassy-net](https://github.com/embassy-rs/embassy) | Stack de rețea async pentru sisteme embedded | UDP și gestionare stivă IP pe Pico 2W și Heltec | +| [cyw43 / cyw43-pio](https://github.com/embassy-rs/embassy) | Driver WiFi pentru cipul CYW43439 (Pico 2W) | Inițializare chip WiFi, mod AP | +| [esp-hal](https://github.com/esp-rs/esp-hal) | HAL bare-metal pentru ESP32 | Periferice hardware pentru Heltec: UART, timer | +| [esp-rtos](https://github.com/esp-rs/esp-rtos) | Executor async și runtime pentru ESP32 | Rularea task-urilor Embassy pe Heltec (echivalent embassy-executor pentru ESP) | +| [esp-radio](https://github.com/esp-rs/esp-radio) | Driver WiFi pentru ESP32 | Conectare WiFi în mod STA pe Heltec | +| [esp-alloc](https://github.com/esp-rs/esp-alloc) | Alocator de heap pentru ESP32 | Heap necesar pentru stiva de rețea și drivere WiFi pe Heltec | +| [embedded-io](https://github.com/rust-embedded/embedded-hal) | Trăsături I/O sincrone pentru sisteme embedded | Scrierea pe UART în Heltec bridge (`Write::write_all`) | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | Bibliotecă de grafică 2D pentru sisteme embedded | Randarea textului pe LCD | +| [mipidsi](https://crates.io/crates/mipidsi) | Driver generic pentru display-uri MIPI DSI/SPI | Inițializarea și controlul ecranului ST7735S de 1.44'' | +| [embedded-hal-bus](https://github.com/rust-embedded/embedded-hal) | Utilitar pentru partajarea bus-urilor hardware | Împachetarea bus-ului SPI cu pinul CS pentru driver-ul mipidsi | +| [static_cell](https://github.com/embassy-rs/static-cell) | Alocare statică sigură în Rust | Alocarea resurselor de rețea și display fără heap și fără `static mut` | diff --git a/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_drawio.svg new file mode 100644 index 00000000000..6622af2d1de --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_drawio.svg @@ -0,0 +1,4 @@ + + + +
STM32 Dev Board
STM32 Dev Boa...
Mechanical Keyboard Switches (GPIO)
Mechanical Ke...
ILI9341 Display
(SPI, GPIO)
ILI9341 Displ...
Potentiometers (ADC)
Potentiometer...
Encoder
(Timer)
Encoder(Timer)
PCM5102 DAC module
PCM5102 DAC m...
External speaker(s)
External spea...
3.5mm jack
3.5mm jack
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_schematic.webp new file mode 100644 index 00000000000..f76ac019722 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/images/synth_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/index.md b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/index.md new file mode 100644 index 00000000000..5d6cc765110 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/george.carpinisan/index.md @@ -0,0 +1,116 @@ +# Digital Synthesizer + +Polyphonic synthesizer with DSP effects. + +:::info + +**Author**: Cărpinișan George \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-george17c + +::: + +## Description + +A bare-metal polyphonic synth built with Rust. This project is a 48kHz multi-effect audio engine running on an STM32 NUCLEO-U545RE-Q. It features high-level DSP and a hardware interface for instant feedback. It uses a custom-designed top panel interface to hold the controls for a real-time I2S digital audio stream. + +## Motivation + +I like music and I'm fascinated by the hardware behind it. My goal is to recreate a studio-grade musical instrument, to the best of my ability. +My synth will have some iconic effects and functionalities from a modern synthesizer for a fraction of its price. + +## Architecture + +![Architecture](images/synth_drawio.svg) + +The system is designed around a non-blocking, async pipeline: + +* **Clock Generation:** Used a hardware clock to guarantee a 48 kHz audio sample rate, alongside an 80 MHz CPU clock for DSP overhead. +* **User Interface (EXTI/GPIO/SPI):** Handles asynchronous hardware interrupts from physical components to trigger notes and modify effect parameters. Presets and effects are displayed on an LCD screen. +* **DSP Engine:** Computes multiple oscillators and applies effects in real-time. +* **DMA Controller:** Moves audio blocks from RAM to the audio peripheral without interrupting the CPU. +* **SAI/I2S Peripheral:** Formats the raw data stream into standard I2S frames and sends them to the external DAC. + +## Log + +### Week 13 - 19 April + +* Wrote the initial DSP logic (oscillators, phase modulation, filtering) in a high-level environment ([rodio](https://crates.io/crates/rodio)). +* Started researching components and different top-panel layouts. +* Ordered the first batch of components. + +### Week 20 - 26 April + +* Started the mechanical assembly. +* Configured hardware clocks and initialized the I2S communication with the DAC. Tested its output (a C note from a pulse wave) on my headphones and speaker. Works! + +### Week 27 April - 3 May + +* Finished designing the top panel in AutoCAD. +* Started working on the screen interface for preset selection and effect visualization. + +### Week 4 - 10 May + +* Received the panel. +* Soldered jumper wires on the switches (GPIO pin) and daisy chained their GND pins. +* Soldered wires on the potentiometers. +* Fixed the DAC clock speed, the square wave sounded correctly by chance (it's more tolerant than a sine wave which needs to be sampled more accurately). + +### Week 11 - 17 May + +* Polished the preset logic, made the effect parameters more robust. Only changing their value when a corresponding potentiometer is close to the previous stored value. +* Resoldered some GND pins on the keyboard. + +### Week 18 - 24 May + +* Assembled all the components using a breadboard as a VCC and GND bus. Found out the potentiometers are not properly powered using the breadboard. +* Finished soldering on the proto board. + +## Hardware + +* STM32 NUCLEO-U545RE-Q: processing unit. +* Mechanical keyboard switches, 10k potentiometers, EC11 rotary encoder: to shape the sound. +* 2.8" LCD display: interface for visualizing effects. +* PCM5102 DAC module: for output. +* Power bank: main power supply. +* Wooden box + laser-cut panel. + +### Schematics + +![Schematic](images/synth_schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +|[STM32 NUCLEO-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Microcontroller | [~115 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396?CMP=e-email-sys-orderack-GLB) | +|[Keyboard Switches](https://www.mouser.com/datasheet/2/71/EN_CHERRY_MX_RED-2322150.pdf)|For triggering notes, navigating the display and using the sequencer|[20 x 0.9 RON](https://qwertykey.ro/products/switchuri-outemu-red)| +|[10k potentiometers](https://www.futurlec.com/Potentiometers/POT10K.shtml)|For changing effect parameters|[8 x 1.31 RON](https://sigmanortec.ro/Potentiometru-1K-5K-10K-20K-50K-100K-p136286400)| +|[Rotary Encoder](https://www.farnell.com/datasheets/1837001.pdf)|For navigating the display|[2 x 4.39 RON](https://sigmanortec.ro/Encoder-rotativ-cu-click-20mm-EC11-p128736611)| +|[2.8" LCD display](https://www.lcdwiki.com/res/MSP2807/2.8inch_SPI_Module_MSP2807_User_Manual_EN.pdf)|For visualizing presets and effects|[55.08 RON](https://www.emag.ro/display-lcd-2-8-240x320-pixeli-slot-micro-sd-tactil-4-a-034/pd/DJCT01MBM/)| +|Electronics kit|For wires, breadboard|[39.21 RON](https://www.emag.ro/kit-start-componente-electronice-ai777/pd/DXRJ4TMBM/?ref=history-shopping_484876592_230588_1)| +|[PCM5102 DAC module](https://www.ti.com/lit/ds/symlink/pcm5102-q1.pdf)|For audio output|[37.50 RON](https://www.emag.ro/modul-convertor-audio-digital-analog-dac-pcm5102-calitate-audio-superioara-2-1-vrms-cu-tehnologia-directpathtm-dimensiuni-compacte-perfect-pentru-sisteme-audio-diy-si-placa-de-sunet-externa-7570977565/pd/D1D2W83BM/)| +|10 cm female-female wires|To solder on switches|[1 x 6.99 RON](https://www.optimusdigital.ro/en/wires-with-connectors/652-10-cm-40p-female-female-wire.html)| +|10 cm female-male wires|For the VCC and GND pins of the DAC and display|[2 x 3.99 RON](https://www.optimusdigital.ro/en/wires-with-connectors/650-fire-colorate-mama-tata-10p.html) +|Proto boards|To act as a VCC and GND bus|[2 x 1.28 RON](https://www.optimusdigital.ro/en/protoboards/722-20x80-mm-green-universal-prototyping-board.html)| +|Wooden box|Case for the whole circuitry| [34 RON](https://www.profiart.ro/catalog/q/cutie%20mdf)| +|Laser-cut top panel|For the user controlled knobs and switches| 0 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Main hardware abstraction for GPIO, SAI, DMA, SPI, and Clocks. | +| [mipidsi](https://github.com/almindor/mipidsi) | Multi-display driver | Modern driver for the ILI9341 display, compatible with `embedded-graphics`. | +| [display-interface-spi](https://github.com/almindor/display-interface) | Generic SPI display interface | Provides the communication layer between the SPI peripheral and the display driver. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Core library for drawing shapes, images, and basic text on the display. | +| [micromath](https://github.com/tarcieri/micromath) | Embedded math library | Provides optimized trigonometric and math functions (sin, cos, exp) for the DSP engine. | +| [static_cell](https://github.com/embassy-rs/static-cell) | Statically allocated memory | Allows safe runtime initialization of values with a `'static` lifetime, for sharing resources with async tasks without a heap memory manager. | +| [heapless](https://github.com/japaric/heapless) | Fixed-capacity data structures | Provides structures `String`, or `RingBuffer` with static capacities, preventing runtime allocation panics while handling UI state buffers. | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient logging | Used for debugging | + +## Links + + +1. [ How to create "On the Run" by Pink Floyd pattern on Behringer TD-3 (303) ](https://www.youtube.com/watch?v=mCpNF3-radE&list=PLlWYrAERc9u-2KVlG_TCtRS1XzZzfO4SF&index=7) +2. [ Synthesis Basics: How To Ring Mod, FM, and AM ](https://www.youtube.com/watch?v=p23e7xmL6I4&list=PLlWYrAERc9u-2KVlG_TCtRS1XzZzfO4SF&index=6) +3. [ The Math Behind Music and Sound Synthesis ](https://www.youtube.com/watch?v=Y7TesKMSE74&list=PLlWYrAERc9u-2KVlG_TCtRS1XzZzfO4SF&index=4) diff --git a/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/architecture_diagram.drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/architecture_diagram.drawio.svg new file mode 100644 index 00000000000..689fafb937b --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/architecture_diagram.drawio.svg @@ -0,0 +1,4 @@ + + + +
Breadboard
Breadboard
STM32
STM32
LCD
LCD
Propeller
Engine
Propeller...
Wind Tube
Wind Tube
Distance Sensor
Distance Sens...
5V
5V
3V3
3V3
Ping-Pong
Ball
Ping-Pong...
5V
5V
3V3
3V3
12V Adaptor
12V Adaptor
Potentiometer
Height
Potentiometer...
Potentiometer
Ki
Potentiometer...
Potentiometer
Kd
Potentiometer...
Potentiometer
Kp
Potentiometer...
Switch
Switch
Out
Out
Out
Out
Out
Out
Out
Out
Out
Out
3V3
3V3
3V3
3V3
3V3
3V3
SPI
SPI
I2C
I2C
3V3
3V3
PWM
PWM
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/documentatie.drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/documentatie.drawio.svg new file mode 100644 index 00000000000..3e0c46b23e2 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/documentatie.drawio.svg @@ -0,0 +1,4 @@ + + + +
Potentiometru
Target r(t)
ADC (PA3)
Eroare
e = r(t) - y(t)
PID Controller
(STM32)
PWM (PA6)
REZISTOR 100Ω
Ventilator 12V
Proces fizic P(s)
Mingea se mișcă
VL53L0X
y(t)
1. Citește senzor
2. Citește potențiometru
3. Calculează eroare
4. PID
5. PWM → Ventilator
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/index.md b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/index.md new file mode 100644 index 00000000000..5af8db778f0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/index.md @@ -0,0 +1,108 @@ +# Ping-Pong Ball Levitation — Wind Tube PID Controller + +:::info + +**Author**: Oprea Horatiu Alexandru \ +**Group**: 332CC \ +**GitHub Project Link**: https://github.com/horatiuoprea/website.git + +::: + +## Description + +The project maintains a Ping-Pong ball at a desired height inside a vertical wind tube. A laser distance sensor mounted at the top of the tube continuously measures the position of the ball. This measurement is fed into a PID regulator running on an STM32 microcontroller, which adjusts the speed of a propeller fan at the base of the tube to keep the ball stable at the target height. + +The system supports two interaction modes. In **Auto mode**, the user sets the desired height via a dedicated potentiometer, and the PID controller autonomously stabilizes the ball at that height. In **Manual mode**, the user can adjust the three PID constants (Kp, Ki, Kd) individually using separate potentiometers, observing in real time how each parameter affects the system's behavior. An LCD display shows the current height and, depending on the active mode, the target height or the current PID constant values. + +## Motivation + +Embedded systems and control theory are two domains I wanted to explore simultaneously in a hands-on project. A wind tube ball levitation system is a classic control engineering problem that is visually intuitive, physically tangible, and technically rich. It requires real sensor integration, PWM motor control, I2C communication, and a properly tuned closed-loop PID controller — all implemented in Rust using the Embassy async framework on an STM32 microcontroller. The manual mode adds an educational dimension, allowing direct observation of how each PID term influences system stability, which reinforces the theoretical concepts from control systems courses. + +## Architecture + +The system is structured around 4 main architectural components that form a closed control loop: + +**Sensor** — The VL53L0X laser Time-of-Flight sensor is mounted at the top of the tube and measures the distance to the ball via I2C. This gives the current height y(t). + +**Controller** — The STM32 Nucleo-U545RE-Q runs the PID algorithm in an Embassy async task at a fixed 20ms cycle. It reads the current height from the sensor, computes the error relative to the target, and produces a control output u(t) in the range 0–100%. + +**Actuator** — The Delta PFB0412EN-E fan receives a PWM signal at 25kHz directly on its dedicated blue wire. The duty cycle of this signal determines the fan speed, which controls the airflow and thus the ball's position. + +**User Interface** — Four potentiometers provide analog inputs via ADC: one sets the target height in Auto Mode, and three adjust Kp, Ki, Kd in Manual mode. A ST7920 LCD displays system state using SPI. A toggle switch selects between Auto and Manual mode. + +## Architecture Diagram + +![Architecture Diagram](architecture_diagram.drawio.svg) + +## Log + +### Week 6 - 12 April + **Chose the project task** + +### Week 13 - 19 April + **Initial Documentation** + +### Week 20 - 26 April + **Final Documentation** + +### Week 4 - 10 May + **Tested HW Components** + +### Week 11 - 17 May + **Built HW Part and Startet the SW Part** + +### Week 18 - 24 May + **Finished the SW Part and Final Design** + +## Hardware + +The project uses an STM32 Nucleo-U545RE-Q (Cortex-M33) as the main microcontroller, programmed in Rust with the Embassy async framework. The VL53L0X laser ToF sensor communicates over I2C and provides distance measurements with millimeter precision. The Delta PFB0412EN-E axial fan (40x40x28mm, 12V) features a native PWM control input, allowing direct speed control from the STM32 without a MOSFET driver stage. Four 10kΩ potentiometers provide analog inputs for height target and PID tuning. A 1602 LCD with I2C backpack shares the I2C bus with the sensor. A toggle switch selects the operating mode. The fan is powered by a dedicated 12V DC adapter; the STM32 and all logic components are powered via USB (5V), with the onboard regulator supplying 3.3V to the sensor and potentiometers. All grounds are tied to a common reference on the breadboard. + +### Schematics + +![alt text](pingpong_levitation.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller — runs PID algorithm in Rust/Embassy | already owned | +| [VL53L0X Laser ToF Sensor](https://www.optimusdigital.ro/ro/senzori-senzori-de-distanta/3309-modul-senzor-de-distanta-cu-laser-vl53l0x.html) | Measures ball height inside the tube via I2C | [25 RON](https://www.optimusdigital.ro) | +| [Delta PFB0412EN-E Fan 12V](https://www.digikey.com) | Propeller fan — controls airflow in the tube via PWM | already owned | +| [LCD ST7920](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/2894-lcd-cu-interfata-i2c-si-backlight-albastru.html) | Displays current height and PID constants | [15 RON](https://www.optimusdigital.ro) | +| Potentiometer 10kΩ (x4) | Height target (x1) + Kp, Ki, Kd tuning (x3) | [5 RON x4](https://www.optimusdigital.ro) | +| Toggle Switch | Selects Auto / Manual operating mode | [3 RON](https://www.optimusdigital.ro) | +| Breadboard MB102 - 830 pins | Prototyping platform with integrated power supply | [20 RON](https://www.optimusdigital.ro) | +| DC Jack Module 5.5x2.1mm (breadboard) | Connects 12V adapter to breadboard for fan power | [7 RON](https://www.optimusdigital.ro) | +| Resistor 100Ω | Protects STM32 PWM pin from fan input impedance | [1 RON](https://www.optimusdigital.ro) | +| Jumper Wire Kit (120 pcs) | All signal and power connections on breadboard | [15 RON](https://www.optimusdigital.ro) | +| 12V 1A DC Adapter | Powers the fan independently from STM32 logic | [25 RON](https://www.optimusdigital.ro) | +| PVC Tube 40-45mm inner diameter, ~80cm | Wind tube housing for the ball | [12 RON](https://www.dedeman.ro) | +| Digital Multimeter | Verifying voltages and connections during assembly | [50 RON](https://www.optimusdigital.ro) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 microcontrollers | Peripheral access: PWM, I2C, ADC, GPIO | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for embedded systems | Runs sensor, control and display tasks concurrently | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timers and delays for Embassy | Fixed 20ms control loop timing | +| [embassy-spi](https://github.com/UPB-PMRust/lab-solutions/tree/main/lab05) | Driver for ST7920-based LCD displays | Renders height and PID values | +| [vl53l0x](https://crates.io/crates/vl53l0x) | Driver for VL53L0X ToF sensor | Reads ball distance over I2C | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient logging framework for embedded Rust | Debug output during development via RTT | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Sends log messages to host over USB | +| [panic-probe](https://github.com/knurling-rs/panic-probe) | Panic handler for embedded Rust | Reports panics via defmt | + +## Closed Control Loop + +![Closed Loop Diagram](documentatie.drawio.svg) + +## Links + +1. [Embassy — Async framework for embedded Rust](https://embassy.dev) +2. [VL53L0X — STMicroelectronics ToF sensor datasheet](https://www.st.com/resource/en/datasheet/vl53l0x.pdf) +3. [Delta PFB0412EN-E — Fan datasheet](https://www.delta-fan.com) +4. [PID Controller — Wikipedia](https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller) +5. [Ball in tube levitation — reference project](https://example.com) +6. [STM32U5 Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf) +7. [Source Code Repository](https://github.com/UPB-PMRust-Students/acs-project-2026-horatiuoprea.git) diff --git a/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/pingpong_levitation.webp b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/pingpong_levitation.webp new file mode 100644 index 00000000000..bc5a33a6475 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/horatiu.oprea/pingpong_levitation.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/diagram.webp new file mode 100755 index 00000000000..411456131ec Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/schematics.webp new file mode 100755 index 00000000000..528619e3183 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/img/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/index.md b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/index.md new file mode 100644 index 00000000000..8ee38b717ff --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioan.necula/index.md @@ -0,0 +1,65 @@ +# Automatic A4 Drawer + +An automated system that guides a pen along an A4 sheet of paper in order to draw any image. + +:::info + +Author: Necula Ioan Cristian \ + +GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-nchristiann + +::: + +## Description + +The project aims to be a 2D cartesian plotter designed to reproduce images in an A4 format. The device recieves instructions in G-Code form through serial interface and transforms them into fast, precise movements using 2 stepper motors(1 for the X axis and the other for the Y axis) and a servomotor that controls the pen by lifting it up and down. The control logic is implemented in Rust. + +## Motivation + +I have always been passionate about art and always looked up to artists who could give their vision form. As I do not have that talent myself, this might've been the deciding factor that pushed me to choose this particular project. The other part of it was me thinking how cool it would be to reproduce literally ANY image on the internet. Also, this requires good knowledge of physics, mechanics in particular, which I found to be an interesting challenge for myself + +## Architecture +![diagram](./img/diagram.webp) + +## Log + + + +### Week 5 - 11 May +Pondering. + +### Week 12 - 18 May +More pondering. + +### Week 19 - 25 May +Pondering about getting started. + +## Hardware + +The hardware subsystem implements a cartesian XY architecture, utilizingsteel rods and linear bearings to ensure smooth translation with low. Actuation is provided by two stepper motors , coupled with a GT2 timing belt and 20-tooth pulley transmission system. This configuration allows for high mechanical resolution, further optimized by microstepping managed via A4988 drivers. Power management is handled by a 12V DC supply, with voltage distributed to the motor power stage and simultaneously regulated through abuck converter to 5V for the STM32 microcontroller and the servo motor responsible for the Z-axis (pen-lift) action. + +## Schematics +![schematics](./img/schematics.webp) + +## Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| STM32 Nucleo-64| Main Controller running the Rust firmware |0 RON | +| 2x Nema 17 Steppers | X and Y axis precision movement |113,98 RON | +| 2x A4988 Drivers | Power interface for stepper motors | 15,98 RON| +| Servo SG90 | Pen lift mechanism (Z-axis) | 13,99 RON | +| LM2596 Converter | Voltage regulation (12V to 5V) | 12,99 RON | +| 8mm Linear Rods | Structural guides for X and Y axes | - RON| +| LM8UU Bearings | Low-friction motion on rods | 39,20 RON | +| GT2 Belt & Pulleys | Motion transmission system | - RON | +| 12V 5A Power Supply | Main system power source | 29,99 RON | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32] | Async HAL for STM32 | Main framework for async task management | +| [embedded-hal] | Digital I/O and PWM traits | Generic hardware abstraction | +| [nom] | Parser combinators | Efficient G-code parsing | \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/architecture.webp new file mode 100644 index 00000000000..405cbaa55cb Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final1.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final1.webp new file mode 100644 index 00000000000..d311620a034 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final2.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final2.webp new file mode 100644 index 00000000000..346c02936fa Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/final2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/hardware.webp new file mode 100644 index 00000000000..e1d25cc628c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/schematics.webp new file mode 100644 index 00000000000..934ad23e93a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/images/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/index.md b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/index.md new file mode 100644 index 00000000000..ea0083f3b2d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioan_teodor.pop/index.md @@ -0,0 +1,96 @@ +# BayPanel — PC Remote Management System + +A 2.5" drive bay panel for monitoring and controlling a desktop PC over Ethernet, featuring a high-resolution display for animated system stats. + +:::info + +**Author**: Ioan Teodor Pop \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-tedipop16](https://github.com/UPB-PMRust-Students/acs-project-2026-tedipop16) + +::: + +## Description + +BayPanel is an embedded device that fits into a standard 2.5" HDD bay slot of a desktop PC. It uses an STM32 Nucleo-U545RE-Q connected to a W5500 Ethernet module to join the home network and expose an HTTP API. A companion lightweight agent running on the host PC communicates with the Nucleo over the local network, forwarding system metrics (CPU usage, RAM, temperatures, uptime) and accepting control commands (shutdown, reboot, execute shell commands). A 3.2" ILI9341 TFT display (320×240 px) mounted flush with the drive bay faceplate shows live system stats and animated temperature graphs. Power-on is handled via Wake-on-LAN magic packets sent directly from the Nucleo. + +## Motivation + +I wanted a permanent, always-on control panel for my desktop that doesn't depend on the PC being awake — something physical that sits in the case itself. Existing software solutions require the OS to be running. By putting the management logic on a microcontroller with its own Ethernet connection, the panel stays functional for Wake-on-LAN even when the PC is off, and the display shows status without needing the host to render anything. +## Architecture + +![Architecture Diagram](./images/architecture.webp) + +## Log + +### Week 21 - 27 April + +Finalized project idea, chose components, and had the theme approved. Ordered W5500 module and ILI9341 display. Drafted the architecture and started reading embassy-net documentation. + +### Week 5 - 11 May +Connected the modules, and ran some tests on them. Also did schematics, cleared some issues with connections, +tested and moved every submodule into it's own spi channel( display - spi1, touch - spi2, w5500 - spi3). + +### Week 12 - 18 May +Ran a full round of hardware bring-up tests on the board: ADC + PWM sanity check (joystick on PA0 driving a PWM channel on PB10), W5500 SPI diagnostics, NTP time sync over UDP, and touch/refresh-rate sweeps on the ILI9341. Once the I/O was stable, i started development on the OTP web server + +### Week 19 - 25 May + +Switched the display to a new layout that shows CPU temperature, CPU / RAM / GPU usage as live bars plus the host IP, instead of the previous text-only stats screen. + +Wrote a small Rust agent that runs on the host PC (`telemetry-host`) and pushes telemetry to the Nucleo over UDP on port 9000. It reads CPU temp from `/sys/class/thermal`, CPU usage from `/proc/stat`, RAM from `/proc/meminfo`, and auto-detects the GPU usage source (NVIDIA via `nvidia-smi`, AMD via `gpu_busy_percent`, Intel via `gt_act_freq_mhz`). The same agent also listens on UDP 9001 for commands coming back from the board — it handles `SHUTDOWN` (tries `systemctl poweroff`, `loginctl poweroff`, `shutdown -h now`, `sudo shutdown` in order) and runs any other payload as a shell command via `sh -c`. + +On the board, finished a web management server (`wol_web`) on port 80 with TOTP authentication. +After login you get a page where you set the target MAC address for Wake-on-LAN, fire the magic packet to the broadcast address on UDP/9, and send arbitrary shell commands to the host agent — the board forwards them over UDP/9001 to `telemetry-host`, which executes them with `sh -c`. The live telemetry coming from the host is also rendered on the page next to the WoL controls, with a small weather box. + +[Demo: WOL working](https://drive.google.com/file/d/1UOepdDAg94WhN73oBUqqC3or3rJajF9G/view?usp=sharing) + +## Hardware + +ILI 9341 Display with touch - display info and buttons for controlling PC + +W5500 - connecting to LAN for sendind WOL magic packets and also communicating with PC after turn-on + +![Hardware wiring](./images/hardware.webp) + +### Housing + +I added a 3D-printed housing for the display. I started from the [Housing display 3.2 inch TFT LCD display module ILI9341](https://www.printables.com/model/1435870-housing-display-32-inch-tft-lcd-display-module-ili) model and modified it to fit the Nucleo board and to add a hole for the Ethernet connector. + +![Final assembly front](./images/final1.webp) + +![Final assembly angle](./images/final2.webp) + +### Schematics + +![Architecture Diagram](./images/schematics.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | Free (Faculty) | +| [W5500 Ethernet Module](https://www.emag.ro/modul-retea-ethernet-shield-w5500-cu-suport-tcp-ip-bn484/pd/D010W5YBM/) | Hardware TCP/IP stack, LAN connectivity | ~41 RON | +| [3.2" ILI9341 TFT SPI Display (320×240)](https://www.emag.ro/display-tft-lcd-3-2-inch-320x240-touchscreen-14pini-spi-ili9341-arduino-rx407/pd/D7Q411YBM/) | Live stats display mounted in bay faceplate | ~89 RON | +| [Breadboard 400 points](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/44-breadboard-400-puncte.html) | Prototyping connections | ~10 RON | +| [Jumper Wires M-F 40p 20cm](https://www.optimusdigital.ro/ro/fire-fire-mufate/92-fire-colorate-mama-tata-40p.html) | Component interconnections | ~8 RON | + +**Total estimated cost: ~148 RON** (excluding Nucleo) + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | SPI1 (display), SPI2 (W5500), GPIO, clocks | +| [embassy-net](https://github.com/embassy-rs/embassy/tree/main/embassy-net) | Async TCP/IP networking | HTTP server, DHCP client, UDP for WoL | +| [w5500-dhcp](https://github.com/newAM/w5500-rs) | W5500 driver + DHCP | Drives the Ethernet module over SPI | +| [mipidsi](https://github.com/almindor/mipidsi) | Display driver (ILI9341) | Initializes and writes to the TFT | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Renders text and stats to the display | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs network, display, and WoL tasks concurrently | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers | Periodic display refresh and metric polling intervals | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework | Debug output over RTT | +| [serde-json-core](https://github.com/rust-embedded-community/serde-json-core) | no_std JSON parsing | Parses metric JSON POSTed by the host agent | + +## Links + +1. [Housing display 3.2 inch TFT LCD display module ILI9341](https://www.printables.com/model/1435870-housing-display-32-inch-tft-lcd-display-module-ili) — base model for the 3D-printed housing +2. [Demo: WOL working](https://drive.google.com/file/d/1UOepdDAg94WhN73oBUqqC3or3rJajF9G/view?usp=sharing) — test of Wake-on-LAN powering on the PC diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/diagramacompressedmoisevlad.svg b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/diagramacompressedmoisevlad.svg new file mode 100644 index 00000000000..451bccdb072 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/diagramacompressedmoisevlad.svg @@ -0,0 +1,4 @@ + + + +
Base Station
STM32 Nucleo-UT545RE-Q
Base Station...
OLED Display SSD1306
Showing Distanta in real time - I2C
OLED Display SSD1306...
HM-10 Bluetooth Module
Reads RSSI from STM Bracelet - UART
HM-10 Bluetooth Module...
Passive Buzzer 3-3V
Alam when out of range
Passive Buzzer 3-3V...
Button 1
Reset alarm - GPIO
Button 1...
Button 2
Stop the sensor - GPIO
Button 2...
Bracelet
STM32 Nucleo-UT545RE-Q
Bracelet...
RSSI
BLE 4.0
RSSI...
HM-10 Bluetooth Module
Transmits signal to base - UART
HM-10 Bluetooth Module...
Powerbank USB
5V portable
Powerbank USB...
Logic flow
Base STM32 reads RSSI from STM32 bracelet -> estimate distance -> if (out of range) -> buzzer trigger
Button press on Base Station resets alarm -> OLED Display shows live distance
Logic flow...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/hardwareresized.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/hardwareresized.webp new file mode 100644 index 00000000000..968a4499f64 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/hardwareresized.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/index.md b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/index.md new file mode 100644 index 00000000000..58b0cae8e98 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/index.md @@ -0,0 +1,114 @@ +# Bluetooth Proximity Monitoring System +A two-device embedded system that uses Bluetooth to detect when a wearable bracelet moves too far from a base station and triggers alarms on base device. + +:::info + +**Author**: Ioan-Vlad Moise \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/proiect-ioan_vlad.moise) + +::: + + + +## Description + +The Bluetooth Proximity Monitoring System is a two-device embedded application built in Rust using the Embassy async framework on two STM32 Nucleo-U545RE-Q microcontrollers. One device acts as a fixed base station and the other as a wearable bracelet. + +Each device is paired with an HM-10 BLE 4.0 module communicating over UART. The base station monitors the Bluetooth connection with the bracelet to detect when the bracelet moves out of range or when the connection is lost. The system provides two detection modes: sensitive mode and normal mode. In sensitive mode, the alarm is triggered if the bracelet is missing during a single scan. In normal mode, the bracelet must be missing for three consecutive scans before the alarm is triggered, reducing false alarms and improving reliability. + +When this happens, the base station triggers its passive buzzer as an alarm. The base station displays the current connection status on an SSD1306 OLED display over I2C. A physical button on the base station allows the user to acknowledge and reset the alarm. The bracelet is powered by a portable USB powerbank or phone, making it wearable, while the base station is powered via USB. + + +## Motivation + +I chose this project because it has a concrete real-world application: preventing loss of personal items, children, or pets in crowded environments. It covers multiple embedded communication protocols (UART, I2C, GPIO) and introduces challenges around wireless signal processing and async embedded Rust, making it both technically meaningful and practically useful. + + +## Architecture + +![Architecture Diagram](diagramacompressedmoisevlad.svg) + +The system is divided into two independent embedded devices: + +- **Base station**: scans for the bracelet using BLE through the HM-10 module over UART, drives the OLED display over I2C, triggers the buzzer, and handles button input via GPIO. +- **Bracelet**: advertises a BLE signal through the HM-10 module, allowing the base station to detect its presence. + +Due to the hardware limitations of the BT-05 Bluetooth modules, the system works by detecting BLE availability/presence instead of using RSSI-based distance estimation. + + +## Log + + + +### Week 16 - 26 April +Researched project requirements and finalized the hardware component list. Ordered all hardware components (HM-10 modules, buzzers, OLED display, buttons, breadboards, wires). + +### Week 17 April - 4 May + +### Week 18 - 11 May +I finished the hardware part of the project. + +### Week 19 - 18 May +I continued working on the software implementation and tested the Bluetooth modules. Although I ordered HM-10 BLE modules, the modules I received turned out to be BT-05 clones, which did not fully support the expected HM-10 RSSI commands. Because of this hardware limitation, I decided to drop the RSSI-based distance estimation approach. + +Instead, I adapted the project from an engineering perspective and redesigned the detection logic to rely on BLE presence scanning. The base station now checks whether the bracelet can still be detected during BLE scans. This allowed the system to remain functional even with the limitations of the Bluetooth modules. + +### Week 20 - 25 May +I moved from the breadboard prototype to a more stable hardware setup by soldering the wires and components onto a PCB. This improved the reliability of the connections and made the system more robust for testing and demonstration. + + +## Hardware + +The project uses two STM32 Nucleo-U545RE-Q boards as the main processing units: one for the base station and one for the bracelet. Each board is connected to one HM-10 BLE 4.0 module via UART for Bluetooth communication. One device includes one passive 3.3V buzzer for audio alerts and two physical button for alarm reset and stopping the alarm to get out of the zone, for a total of 1 buzzers and 2 buttons in the full system. The base station additionally drives one SSD1306 OLED display over I2C to show live distance estimates. The bracelet is powered by a USB powerbank/phone for portability. + +![Hardware](hardwareresized.webp) + + +### Schematics + +![Schematic Diagram](schematicresized_moisevlad.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/resource/en/user_manual/um3121-stm32-nucleo144-boards-mb1549-stmicroelectronics.pdf) | Main microcontroller (x2) | provided by lab | +| [HM-10 BLE 4.0 Module](https://people.ece.cornell.edu/land/courses/ece4760/PIC32/uart/HM10/DSD%20TECH%20HM-10%20datasheet.pdf) | Bluetooth communication via UART (x2) | [59.98 RON](https://www.optimusdigital.ro/en/wireless-bluetooth/862-modul-bluetooth-40-cu-adaptor-compatibil-33v-si-5v.html) | +| [OLED Display 0.96" SSD1306](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) | Shows live distance on base station | [30.00 RON](https://www.emag.ro/display-oled-0-96-inch-128x64-lcd-arduino-ssd1306-cu-interfata-iic-i2c-albastru-bn621/pd/D436WM3BM/) | +| [Yellow Button with Round Cover](https://components101.com/switches/push-button) | Alarm reset input — 2 per device | [4 RON](https://www.optimusdigital.ro/en/buttons-and-switches/13604-yellow-button-with-round-cover.html) | +| [Passive Buzzer 3V/3.3V](https://components101.com/sites/default/files/component_datasheet/Buzzer%20Datasheet.pdf) | Audio alarm on device (x1) | [2 RON](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html) | +| [Female-Male Wires 20cm](https://media.digikey.com/pdf/Data%20Sheets/Digi-Key%20PDFs/Jumper_Wire_Kits.pdf) | Component wiring (x2) | [14.90 RON](https://www.optimusdigital.ro/ro/fire-fire-mufate/12466-fire-colorate-mama-tata-40p-40-cm.html) | +| [Breadboard](https://components101.com/sites/default/files/component_datasheet/Breadboard%20Datasheet.pdf) | Prototyping | [5.35 RON](https://www.optimusdigital.ro) | +| USB Powerbank | Portable power for bracelet | ~50.00 RON | +| **Total** | | **~150.15 RON** | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rs](https://github.com/embassy-rs/embassy) | Async embedded framework for STM32 | Task scheduling and async execution | +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | STM32 HAL | UART, I2C, GPIO, and PWM peripheral access | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | OLED display driver over I2C | Displaying the connection status and alarm state | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | Text and graphics rendering on OLED | Drawing text and UI elements on the display | +| [heapless](https://github.com/rust-embedded/heapless) | Fixed-size data structures for embedded systems | UART parsing buffers without dynamic allocation | +| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | Time utilities for Embassy applications | Delays, periodic checks, and task timing | +| [embassy-sync](https://github.com/embassy-rs/embassy/tree/main/embassy-sync) | Synchronization primitives for async embedded tasks | Signaling state between Bluetooth, display, and alarm tasks | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Common embedded hardware abstraction traits | PWM control for the passive buzzer | +| [embedded-io-async](https://github.com/rust-embedded/embedded-hal/tree/master/embedded-io-async) | Async embedded I/O traits | UART read and write operations | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework for embedded Rust | Debug and status messages during execution | + +## Links + + + +1. [embassy-rs documentation](https://embassy.dev/) +2. [labs](https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab) +... \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/schematicresized_moisevlad.webp b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/schematicresized_moisevlad.webp new file mode 100644 index 00000000000..8d2da87cab6 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioan_vlad.moise/schematicresized_moisevlad.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/harta_pm.webp b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/harta_pm.webp new file mode 100644 index 00000000000..e1fd8943aee Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/harta_pm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/index.md b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/index.md new file mode 100644 index 00000000000..6a3045cc515 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/index.md @@ -0,0 +1,110 @@ + +# GPS Fitness Tracker +A fitness tracking device that monitors physical activity by counting steps and recording GPS-based workouts, providing real-time statistics and storing workout data. +:::info + +**Author**: Maraloi Ioana \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Ioana-Maraloi + +::: + + + +## Description + +This project implements a fitness tracking device using a microcontroller programmed in Rust. The system operates in two modes. In daily mode, it detects steps using accelerometer data, estimates distance and calories, and displays real-time information on a screen. In training mode, activated via a button, it uses GPS data to track position, compute distance and speed, and record the route. The recorded data is saved in GPX format for later analysis. + +## Motivation + +I chose this project because it combines several important aspects of embedded systems, including sensor data processing, GPS-based measurements, and real-time data display. It provides a good balance between hardware interaction and software implementation, while also covering topics such as data acquisition, processing, and storage in a practical context. + +## Architecture + + + +The system is centered around a processing module running on the STM32 microcontroller. It receives data from the sensor, GPS, and control modules, processes it, then sends the results to the display and storage modules. + +Main architecture components: +- **Control Module** – handles button input and mode switching +- **Sensor Module** – provides motion data for step detection +- **GPS Module** – provides position, speed, and time data +- **Processing Module** – computes steps, distance, speed, calories, and workout state +- **Display Module** – shows real-time activity information +- **Storage Module** – saves workout data for later analysis + +![alt text](schema_pm_ioana_maraloi.svg) + +## Log +![alt text](pm_final.webp) +![alt text]() + + +### Week 5 - 11 May +Ordered hardware components and finished documentation. + +### Week 12 - 18 May + +Finished hardware assembly and created the KiCad schematic. +Successfully tested LCD display output, GPS communication and verified MPU6050 sensor. + +### Week 19 - 25 May +Created multiple operating states: daily mode, sport mode, and a confirmation state for saving workouts. +Finished software implementation. Integrated SD card support for persistent workout storage(GPX format). Tested gps by walking around campus. + +## Hardware + +The system is built around an STM32 Nucleo development board, which interfaces with multiple peripherals for sensing, display, and storage. + +An MPU6050 accelerometer module is used to detect motion and enable step counting. A NEO-6M GPS module provides location data for tracking distance, speed, and route information. + +A 2.4" display is used to present real-time data to the user, including activity statistics and system status. User input is handled through push buttons, allowing mode switching and interaction. + +Workout data is stored using a microSD card module, enabling later analysis. Additional components such as LEDs are used for status indication, while a breadboard, jumper wires, and resistors are used for prototyping and circuit connections. +### Schematics +![alt text](proiect_pm_kicad_final.svg) +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q ](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | provided by university | +| [ILI9341 2.4 inch display ](https://www.emag.ro/modul-lcd-2-4-240x320-pixeli-spi-controler-ili9341-3-3v-nykhqe-lcd-2-4-spi/pd/DNPYPD2BM/) | display for user interface and real-time data visualization | 80 RON | +| [MPU6050 GY-521 accelerometer module](https://www.emag.ro/modul-giroscop-mpu-6050-gy-521-accelerometru-arduino-3-axe-2-1-cm-x-1-1-cm-x-0-3-cm-albastru-c7/pd/DL3G1QYBM/) | Measures motion and is used for step detection | 32 RON | +| [MicroSD Card Module ](https://www.emag.ro/modul-de-expansiune-micro-sd-card-de-memorie-tf-pentru-arduino-dh000036/pd/DP8QQL3BM/) | Reads and writes data to the microSD card for storing workout logs | 19 RON | +| [GPS Module NEO6MV2 ](https://sigmanortec.ro/Modul-GPS-6MV2-p125423363) | Provides location data for tracking distance, speed, and route | 30 RON | +| microSD Card 8GB | Stores workout data and GPS logs | 40 RON | +|Push button| User input for mode switching and interaction| 5 RON | +| Breadboard + Jumper Wires | prototyping and connecting components | 30 RON | +| SD card reader with usb adaptor| read data from sd card | 36 RON | +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| embassy-rs | Async embedded framework for Rust | Task scheduling and async execution | +| embassy-stm32 | STM32 HAL for embassy | UART, SPI, I2C, GPIO peripheral communication | +| defmt | Embedded logging framework | Debug messages in terminal | +| embedded-graphics | 2D graphics library | Drawing text and interface elements on LCD | +| embedded_sdmmc | SD library | Used for writing gpx data on SD card | +## Links + + + +1. https://embedded-rust-101.wyliodrin.com/docs/acs_cc/category/lab +2. https://docs.embassy.dev/ +3. https://docs.rs/embassy-stm32/latest/embassy_stm32/ +4. https://randomnerdtutorials.com/guide-to-neo-6m-gps-module-with-arduino/ +5. https://docs.rs/embedded-sdmmc/latest/embedded_sdmmc/ + diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/pm_final.webp b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/pm_final.webp new file mode 100644 index 00000000000..8fbce0e45d4 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/pm_final.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/proiect_pm_kicad_final.svg b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/proiect_pm_kicad_final.svg new file mode 100644 index 00000000000..7bc9970be57 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/proiect_pm_kicad_final.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: proiect_pm_kicad.kicad_schSheet: /GNDCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050GND+3V3+3V3VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQ12345678J2Conn_01x08 - ILI9341 LCDGNDGND+3V3+3V3+5V1234J1Conn_01x04 - GY-NEO6MV2GND+3V312345678J3SD card module+3V3+3V3txgndclkmosiresvccblkmisogndvccmosisckrxdcmiso3v3cs5vgnd12.05.2026GPS Fitness Tracker Maraloi IoanaU1STM32U545RETxQVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64GNDU2MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24GND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/schema_pm_ioana_maraloi.svg b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/schema_pm_ioana_maraloi.svg new file mode 100644 index 00000000000..80576fe733f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ioana.maraloi/schema_pm_ioana_maraloi.svg @@ -0,0 +1,4 @@ + + + +
Processing Module
Processing Module
Control Module
Control Module
Sensor Module
Sensor Module
GPS Module
GPS Module
Display Module
Display Module
Storage Module
Storage Module
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/architecture.webp new file mode 100644 index 00000000000..cfbe57e2060 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/index.md b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/index.md new file mode 100644 index 00000000000..8ddb0318645 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/index.md @@ -0,0 +1,87 @@ +# Multi-Factor Authentication Safe Lock System + +A multi-layered physical access control system that requires NFC card scanning, PIN entry, and fingerprint verification before unlocking a safe via a servo motor. + +:::info + +**Author**: Popescu Ionut-Teodor \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-Waffle20) + +::: + +## Description + +The Multi-Factor Authentication Safe Lock is an embedded security device built around the STM32 Nucleo-U545RE-Q microcontroller. It enforces three successive authentication levels before actuating the locking mechanism: an NFC card scan using the PN532 module over SPI, a 4-digit PIN entered on a 4x4 matrix keypad via GPIO, and a fingerprint scan using the AS608 optical sensor over UART. Each step's result is shown on a 16x2 LCD display connected via I2C. Upon successful completion of all three levels, an SG90 servo motor rotates to release the safe latch. Acoustic feedback is provided by a passive buzzer and visual feedback by three LEDs (red, green, yellow). + +## Motivation + +Standard single-factor physical security — a PIN pad or a key alone — presents a single point of failure. If the PIN is observed or the key is stolen, access is compromised. A multi-factor approach eliminates this by requiring an attacker to simultaneously possess the authorized NFC card, know the correct PIN, and have the registered fingerprint — a combination that is practically impossible to obtain. + +Beyond the security aspect, this project offered a challenging opportunity to integrate five different hardware interfaces (SPI, UART, I2C, GPIO, PWM) on a single STM32 microcontroller, and to structure the firmware using Embassy's asynchronous task model in Rust, which provides a clean and safe concurrency model without an operating system. + +## Architecture + +- **NFC Task**: Runs on SPI1 and continuously polls for a MIFARE card. When a card is detected, it extracts the 4-byte UID and sends it to the authentication state machine via a message channel. +- **Keypad Task**: Scans the 4x4 matrix over 8 GPIO pins (PC0–PC7) using a row-column sweep with async debounce. It collects 4 digit presses and forwards the PIN to the authentication channel. +- **Fingerprint Task**: Communicates with the AS608 sensor over UART2 at 57600 bps using Embassy's interrupt-driven reception. It sends the binary verification result to the authentication channel. +- **Display Task**: Listens on a dedicated display command channel and updates the LCD 16x2 over I2C1 to show the current step, success, or failure messages. +- **Authentication FSM Task**: The central coordinator. It consumes events from the NFC, keypad, and fingerprint tasks in order. Each level has a configurable timeout; failure or timeout at any level resets the system to the idle state. On full success it drives the servo to the open position, waits 10 seconds, then closes and returns to idle. It also controls the buzzer and LEDs for acoustic and visual feedback. +### Architecture Diagram + +![Architecture Diagram](./architecture.webp) + +## Log + +### Week 4 - 10 May +The components arrived and I spent the first week familiarizing myself with the datasheets and documentation for the STM32U545, PN532, AS608, and the LCD. +### Week 11 - 17 May +I assembled the hardware on a breadboard, connecting the Nucleo board to the NFC module, fingerprint sensor, keypad, LCD, servo, buzzer, and LEDs according to the planned pinout. I also set up the power supply to provide 3.3V and 5V rails as needed. +### Week 18 - 24 May +I finalized the software architecture and implemented most of it. +## Hardware + +The project is built around the STM32 Nucleo-U545RE-Q (ARM Cortex-M33, 160 MHz) with its integrated ST-LINK/V3E debugger. The PN532 NFC module is connected over SPI1 on pins PA5 (SCK), PA6 (MISO), PA7 (MOSI), and PB6 (CS); it reads MIFARE Classic 1K cards and tags. The AS608 optical fingerprint sensor connects over UART2 on PA2 (TX) and PA3 (RX) for biometric enrollment and verification. The 4x4 membrane keypad uses 8 GPIO lines on PC0–PC7, with rows as push-pull outputs and columns as inputs with internal pull-ups. The LCD 16x2 display uses a PCF8574 I2C backpack at address 0x27, connected on PB8 (SCL) and PB9 (SDA). The SG90 servo motor is driven by a 50 Hz PWM signal from TIM2 Channel 1 on PA0, with a pulse width between 1 ms and 2 ms controlling the 0° to 90° range. A passive buzzer on PB0 generates different tone patterns for success and failure events. Three 5 mm LEDs (red on PB2, green on PB1, yellow on PB3) with 220-ohm series resistors provide per-step visual status. An MB102 breadboard power supply provides a regulated 5V rail for the AS608 sensor and LCD backlight, and 3.3V for the NFC module, with a common ground shared with the Nucleo board. + +### Schematics + ![Schematics Diagram](./schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +| --- | --- | --- | +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | Provided by university | +| [PN532 NFC Module](https://www.nxp.com/docs/en/user-guide/141520.pdf) | NFC card reading — Level 1 | ~40 RON | +| MIFARE Classic 1K Card | NFC access token | ~5 RON | +| [AS608 Optical Fingerprint Sensor](https://cdn-learn.adafruit.com/assets/assets/000/083/513/original/Optical_Fingerprint_Sensor_-_User_Manual.pdf) | Biometric verification — Level 3 | ~50 RON | +| [4x4 Membrane Keypad](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/470-tastatura-matriceala-4x4-cu-conector-pin-de-tip-mama.html) | PIN entry — Level 2 | ~12 RON | +| [LCD 16x2 with I2C Module PCF8574](https://www.handsontec.com/dataspecs/module/I2C_1602_LCD.pdf) | User interface display | ~18 RON | +| [Servo SG90](http://www.towerpro.com.tw/product/sg90-7/) | Safe latch actuator | ~15 RON | +| [Passive Buzzer 5V](https://www.handsontec.com/dataspecs/module/passive%20buzzer.pdf) | Acoustic feedback | ~5 RON | +| Red, Green, Yellow LEDs + 220 ohm resistors | Visual step indicators | ~5 RON | +| [MB102 Breadboard Power Supply](https://www.optimusdigital.ro/ro/surse-de-alimentare/61-sursa-de-alimentare-pentru-breadboard.html) | 3.3V / 5V regulated power | ~12 RON | +| Breadboard 830 points | Prototyping | ~15 RON | +| Jumper wire set M-M and M-F | Wiring | ~15 RON | + +## Software + +| Library | Description | Usage | +| --- | --- | --- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 microcontrollers | SPI, UART, I2C, GPIO, PWM peripheral drivers | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for bare-metal Rust | Runs all concurrent tasks without an OS | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization primitives | `Channel` and `Mutex` for inter-task communication | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers and delays | Timeouts per authentication level, keypad debounce | +| [hd44780-driver](https://github.com/JohnDoneth/hd44780-driver) | HD44780 LCD driver | Sending text commands to the 16x2 LCD over I2C | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient logging framework for embedded Rust | Debug output via RTT during development | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for defmt | Streams log output through the ST-LINK debugger | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler for embedded targets | Reports panics via defmt over RTT | + +## Links + +1. [Embassy — Async Embedded Rust](https://embassy.dev/book/) +2. [STM32U545 Datasheet](https://www.st.com/resource/en/datasheet/stm32u545re.pdf) +3. [Nucleo-U545RE-Q User Manual (UM3062)](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) +4. [PN532 User Manual — NXP](https://www.nxp.com/docs/en/user-guide/141520.pdf) +5. [AS608 Fingerprint Sensor Manual](https://cdn-learn.adafruit.com/assets/assets/000/083/513/original/Optical_Fingerprint_Sensor_-_User_Manual.pdf) +6. [Rust on STM32 Workshop — IP Workshop](https://rust.ipworkshop.ro/docs/embassy/) +7. [embassy-stm32 API Documentation](https://docs.embassy.dev/embassy-stm32/) +8. [hd44780-driver crate](https://github.com/JohnDoneth/hd44780-driver) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/schematic.webp new file mode 100644 index 00000000000..ae5bc40422c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ionut.popescu1101/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/1.webp b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/1.webp new file mode 100644 index 00000000000..297fa8abeda Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/2.webp b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/2.webp new file mode 100644 index 00000000000..9af9bf5b9ff Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/architecture_diagram.svg deleted file mode 100644 index 74c785a0ea4..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/architecture_diagram.svg +++ /dev/null @@ -1,92 +0,0 @@ - - Smart Pet Ball Launcher — Architecture - Horizontal architecture diagram: Sensors feed the STM32 MCU, which drives Turret, Launch, Ball Feed modules and a UI layer, all powered by a 12V supply. - - - - - - - - - - 12V 5A power supply - - - - - - - - - STM32 Nucleo-U545RE-Q - - - - - PWM - - - - PWM / ESC - - - - PWM / GPIO - - - - I2C · UART - - - - - Turret control - MG996R servo - PWM - - - - - - Launch module - A2212 brushless - flywheel - - - - - - Ball feed - SG90 gate servo - HC-SR04 detect - - - - - - UI & logging - OLED, buttons - - - - - - PIR sensor - HC-SR501 · EXTI wake - - - - - - Ultrasonic sensor - HC-SR04 · ball detect - - - - - - - - - \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/diagrama.svg new file mode 100644 index 00000000000..6edfc93ecef --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/diagrama.svg @@ -0,0 +1,4 @@ + + + +
12V 5A Power Supply
12V 5A Power Supply
LM2596 Step-Down Module
LM2596 Step-Down Modu...
STM32 Nucleo-U545RE-Q
STM32 Nucleo-U545RE-Q
FVT LittleBee ESC
FVT LittleBee ESC
FVT LittleBee ESC
FVT LittleBee ESC
Dual MOSFET Module 15A
Dual MOSFET Module 1...
MP1584EN Step-Down Module
MP1584EN Step-Down Module
Buttons x3
Buttons x3
Display OLED 128x64
Display OLED 128...
MG996R servo 
Turret Control
MG996R servo...
Solenoid JF-0530 12V
Solenoid JF-0530 12V
A2212 Motor
A2212 Motor
A2212 Motor
A2212 Motor
12V
12V
12V
12V
12V
12V
5V
5V
12V
12V
5V
5V
I2C
I2C
GPIO
GPIO
12V
12V
12V
12V
HC-SR501 PIR senzor
Animal detection
HC-SR501 PIR senzor...
HC-SR04 senzor 
Gate ball detection
HC-SR04 senzor...
GPIO
GPIO
GPIO
GPIO
PWM
PWM
PWM
PWM
PWM
PWM
GPIO
GPIO
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/schema.webp b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/schema.webp new file mode 100644 index 00000000000..58ecf84a97f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/images/schema.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/index.md b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/index.md index b94e6cb8909..31827dd45df 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/irina.munteanu1012/index.md @@ -1,7 +1,6 @@ # Smart Pet Ball Launcher -An autonomous ball launcher for dogs that detects the pet's position using a PIR sensor, -rotates a motorized turret toward it, and launches a tennis ball using a dual-flywheel mechanism. +An autonomous ball launcher for dogs that detects the pet's position using a PIR sensor, rotates a motorized turret toward it, and launches a tennis ball using a dual-flywheel mechanism. :::info @@ -14,112 +13,104 @@ rotates a motorized turret toward it, and launches a tennis ball using a dual-fl ## Description -The Smart Pet Ball Launcher is an embedded device designed to play fetch autonomously with a dog. -The system waits in low-power sleep mode until a PIR motion sensor detects the pet. Once detected, +The Smart Pet Ball Launcher is an embedded device designed to play fetch autonomously with a dog. The system waits in low-power sleep mode until a PIR motion sensor detects the pet. Once detected, the turret (mounted on a 3D-printed rotating base with a bearing) sweeps to locate the animal. -When the dog returns the ball and places it in the loading tube, an HC-SR04 ultrasonic sensor -confirms the ball is present at the launch gate. A SG90 servo then lifts the gate, releasing the -ball between two counter-rotating brushless motor flywheels which propel it toward the pet. A OLED display shows the current system state and game mode. Three game modes are stored in the STM32U5 Flash memory: Random, Training, and a failure-detection sleep mode. Session statistics (number of throws, average return time) are logged and exposed via UART. +When the dog returns the ball and places it in the loading tube, an HC-SR04 ultrasonic sensor confirms the ball is present at the launch gate. A dual MOSFET module then triggers an electromagnetic solenoid piston (JF-0530B) that releases a spring-loaded arm, allowing the ball to drop between two counter-rotating brushless motor flywheels which propel it toward the pet. +An OLED display shows the current system state and game mode. Three game modes are available: Random, Training, and a failure-detection sleep mode. Session statistics (number of throws, average return time) are logged via UART using defmt. ## Motivation -Pets need regular physical activity, but owners are not always available to play with them. -Existing commercial ball launchers use fixed angles and have no awareness of where the animal -actually is. This project builds a device that actively tracks the pet using a PIR sensor, -adapts its aim using a servo turret, and features intelligent game modes that grow with the -animal's ability. +Pets need regular physical activity, but owners are not always available to play with them. Existing commercial ball launchers use fixed angles and have no awareness of where the animal +actually is. This project builds a device that actively tracks the pet using a PIR sensor, adapts its aim using a servo turret, and features intelligent game modes that grow with the animal's ability. ## Architecture -![Architecture Diagram](images/architecture_diagram.svg) - -- **Detection Module** — The HC-SR501 PIR sensor wakes the MCU from STOP mode via an external - interrupt (EXTI) when motion is detected. It acts as the entry trigger for the entire launch - cycle. The HC-SR04 ultrasonic sensor is positioned at the end of the loading tube and confirms - ball presence before initiating a launch sequence. -- **Turret Control Module** — An MG996R servo motor rotates the 3D-printed turret base - (mounted on a bearing) horizontally via PWM. The turret aligns toward the direction the PIR - last detected motion. The launch tube is fixed to this rotating base. -- **Launch Module** — Two brushless motors (A2212/13T 1000KV) spin two 3D-printed flywheel - wheels in opposite directions. When the ball is released by the gate servo, it passes between - the two spinning wheels and is propelled through the tube. Motor speed is regulated by the - LM2596 DC-DC step-down regulator and controlled via ESC PWM signals from the STM32. -- **Ball Feed Module** — An SG90 micro servo acts as a gate at the base of the loading tube. - When the ultrasonic sensor confirms ball presence and a launch is authorized, the servo lifts - the gate and the ball drops into the flywheel zone. -- **UI & Logging Module** — A 128x64 I2C OLED display shows the current state (Idle, Searching, - Ready, Launching, Error/Sleep). Buttons allow mode selection. Statistics (throw count, average - return time) are stored in STM32U5 Flash and streamed over UART using defmt . - +![Architecture Diagram](images/diagrama.svg) ## Log - - ### Week 14 - 20 April - Finalized project theme and received approval. -- Researched and ordered all hardware components from EMAG and Optimus Digital. +- Researched and ordered all hardware components from EMAG AliExpress and Optimus Digital. ### Week 4 - 8 May +- Set up the Embassy Rust development environment for STM32U545RE-Q. +- Implemented and tested PIR sensor detection via EXTI on PA0. +- Implemented HC-SR04 ultrasonic distance measurement. +- Tested SG90 servo gate control via PWM (TIM3_CH1). +- Integrated SH1106 OLED driver (custom, no external crate) with real-time state display ### Week 12 - 18 May +- 3D printed supports for both servo motors, one glued to the tube, the other to the project support, for better resistance. +- Changed the infrastructure of the wheels, placing them with a spring between them to adapt to the ball and for better ball-wheel adhesion. +- Implemented MG996R turret sweep logic and PIR-based angle locking. +- Integrated ESC arming sequence and brushless motor control (TIM1_CH1, TIM8_CH2). ### Week 19 - 25 May +- Encountered a problem with the servo motors: connecting them directly from the STM32 board caused them to burn out due to insufficient current. Solution: powered each servo separately +through a dedicated MP1584EN DC-DC step-down module from the 12V supply. +- Replaced the SG90 gate servo with a dual MOSFET module + electromagnetic solenoid piston (JF-0530B, 12V) for more reliable and faster ball release. The MOSFET gate is controlled via a GPIO output on PB4 — no PWM required. +- Implemented the complete state machine: Stopped, WarmUp, WaitBall, WaitDog, Launching ,Cooldown, Sleeping. +- Implemented all three game modes (Random, Training, Sleep) with session statistics logging. ## Hardware -The main controller is the **STM32 Nucleo-U545RE-Q**, chosen for its low-power STOP mode, -Flash memory for statistics logging, and strong Embassy async support. +The main controller is the **STM32 Nucleo-U545RE-Q**, chosen for its low-power STOP mode, and strong Embassy async support. + +Two **A2212/13T 1000KV brushless motor** spin 3D-printed flywheel wheels in opposite directions to propel the tennis ball through the launch tube. They are powered by a 12V 5A switched-mode power supply and controlled via two FVT LittleBee 30A-S ESC speed controllers connected to PWM outputs of the STM32. -Two **A2212/13T 1000KV brushless motors** spin 3D-printed flywheel wheels in opposite directions -to propel the tennis ball through the launch tube. Their speed is powered through a **12V 5A -switched-mode power supply** and regulated down where needed by an **LM2596 DC-DC step-down -module (1.25–35V, 3A)**. +The turret assembly rotates on a **3D-printed base with a bearing**, driven by an MG996R servo via PWM (TIM2_CH3, PB10). The servo is powered through an **MP1584EN step-down module** (12V,6V) to avoid overloading the STM32 board. -The turret assembly rotates on a **3D-printed base with a bearing**, driven by an **MG996R -servo** via PWM. An **SG90 servo** controls the ball release gate at the tube entrance. +Ball release is handled by a **dual MOSFET power module** (15A, 400W) driving an **electromagnetic solenoid piston JF-0530B**(12V, push-pull). A single GPIO HIGH signal on PB4 energizes the solenoid, retracting a spring-loaded arm and releasing the ball. The arm +returns automatically via the spring. The solenoid is powered from the 12V supply through the MOSFET, and the MOSFET signal pin is connected directly to the STM32 GPIO (3.3V logic compatible). -An **HC-SR501 PIR sensor** triggers the MCU wake-up via external interrupt. An **HC-SR04 -ultrasonic sensor** is placed at the tube entrance to confirm ball presence before launch. -A **128x64 I2C OLED display** shows system state and mode. Physical **buttons** allow the user -to select between game modes (Random, Training) and start/stop the system. +An **HC-SR501 PIR sensor** triggers MCU wake-up via external interrupt (EXTI0, PA0). An HC-SR04 ultrasonic sensor is placed at the tube entrance (TRIG=PA1, ECHO=PA4) to confirm ball presence. A **128x64 I2C OLED display** (SH1106, 1.3") shows system state and mode(SCL=PB6, SDA=PB7). **Three tactile buttons** allow mode selection and manual control. - +![Images](images/1.webp) +![Images](images/2.webp) - +### Schematics + +![Schematics Diagram](images/schema.webp) ### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | ~85 RON | -| [A2212/13T 1000KV Brushless Motor x2](https://hobbymarket.ro/motor-brushless-1000kv-a2212-13t-pentru-drone-si-aeromodele.html) | Dual flywheel ball propulsion | ~120 RON | -| 3D Printed Flywheel Wheels x2 | Grip and propel the ball | ~0 RON (printed) | -| 3D Printed Turret Base + Bearing | Rotating turret platform | ~0 RON (printed) | -| [MG996R Servo Motor](https://www.emag.ro/servomotor-towerpro-mg-996r-180-55g-cuplu-pana-la-10-kg-cablu-30-cm-3-pini-multicolor-2-c-038/pd/DTHLKLMBM/) | Turret horizontal rotation | ~35 RON | -| [SG90 Micro Servo](https://www.emag.ro/servomotor-sg90-180-de-grade-ai156-s297/pd/D33V1GMBM/) | Ball release gate | ~15 RON | -| [HC-SR501 PIR Sensor](https://www.emag.ro/senzor-de-miscare-detector-pir-hc-sr501-sensibilitate-reglabila-33-x-23-x-30-mm-multicolor-2-a-020/pd/DZLTKLMBM/) | Pet presence detection + MCU wake-up | ~10 RON | -| [HC-SR04 Ultrasonic Sensor](https://www.emag.ro/modul-senzor-ultrasonic-detector-distanta-hc-sr04-xbaxah-ultrasonic/pd/D5HMPD2BM/) | Ball presence detection at tube | ~7 RON | -| [LM2596 DC-DC Step-Down Module](https://www.bitmi.ro/electronica/modul-coborator-de-tensiune-lm2596-dc-3a-10017.html) | Voltage regulation for logic components | ~12 RON | -| [12V 5A Switched-Mode Power Supply](https://www.optimusdigital.ro/en/12-v-ac-dc-power-supplies/5067-12v-5a-60-w-switched-mode-power-supply.html) | Main power source | ~60 RON | -| [OLED Display 128x64 I2C 1.3"](https://www.emag.ro/display-oled-rezolutie-128-x-64-1-3-inchi-comunicare-i2c-27-x-27-mm-multicolor-5904162806386/pd/D7RP0LMBM/) | System state and mode display | ~25 RON | -| [Buttons x5](https://www.emag.ro/set-5-bucati-buton-microintrerupator-smd-tactil-6x6x3-1mm-4-pini-cupru-rosu-setmswitch/pd/DT9XRK3BM/) | Mode selection and start/stop | ~8 RON | -| Breadboard + Jumper Wires | Prototyping connections | ~15 RON | -| **Total** | | **~392 RON** | +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | 85 RON | +| [A2212/13T 1000KV Brushless Motor x2](https://hobbymarket.ro/motor-brushless-1000kv-a2212-13t-pentru-drone-si-aeromodele.html) | Dual flywheel ball propulsion | 120 RON | +| [FVT LittleBee 30A-S 30A ESC BLHeli_S Motor Speed Controller x2](https://de.aliexpress.com/item/32738195790.html?gatewayAdapt=glo2deu)| Brushless motor speed control | 45 RON | +| 3D Printed Flywheel Wheels x2 | Grip and propel the ball | 0 RON (printed) | +| 3D Printed Turret Base + Bearing | Rotating turret platform | 0 RON (printed) | +| [MP1584EN Mini DC-DC Step Down Module](https://www.optimusdigital.ro/en/adjustable-step-down-power-supplies/166-mp1584en-mini-dc-dc-step-down-module.html) | Tension regulatory | 6 RON | +| [MG996R Servo Motor](https://www.emag.ro/servomotor-towerpro-mg-996r-180-55g-cuplu-pana-la-10-kg-cablu-30-cm-3-pini-multicolor-2-c-038/pd/DTHLKLMBM/) | Turret horizontal rotation | 35 RON | +| [Dual MOSFET Power Module 15A, 400W](https://sigmanortec.ro/Modul-dual-MOSFET-de-putere-15A-400W-p187778881) | C Control ball release gate | 3 RON | +| [Electromagnetic Solenoid Piston JF-0530B 12V, push-pull](https://sigmanortec.ro/piston-electromagnetic-jf-0530b-cu-solenoid-12v-push-pull) | Ball release gate | 24 RON | +| [HC-SR501 PIR Sensor](https://www.emag.ro/senzor-de-miscare-detector-pir-hc-sr501-sensibilitate-reglabila-33-x-23-x-30-mm-multicolor-2-a-020/pd/DZLTKLMBM/) | Pet presence detection + MCU wake-up | 10 RON | +| [HC-SR04 Ultrasonic Sensor](https://www.emag.ro/modul-senzor-ultrasonic-detector-distanta-hc-sr04-xbaxah-ultrasonic/pd/D5HMPD2BM/) | Ball presence detection at tube | 7 RON | +| [LM2596 DC-DC Step-Down Module](https://www.bitmi.ro/electronica/modul-coborator-de-tensiune-lm2596-dc-3a-10017.html) | Voltage regulation for logic components | 12 RON | +| [12V 5A Switched-Mode Power Supply](https://www.optimusdigital.ro/en/12-v-ac-dc-power-supplies/5067-12v-5a-60-w-switched-mode-power-supply.html) | Main power source | 60 RON | +| [OLED Display 128x64 I2C 1.3"](https://www.emag.ro/display-oled-rezolutie-128-x-64-1-3-inchi-comunicare-i2c-27-x-27-mm-multicolor-5904162806386/pd/D7RP0LMBM/) | System state and mode display | 25 RON | +| [Buttons x3](https://www.emag.ro/set-5-bucati-buton-microintrerupator-smd-tactil-6x6x3-1mm-4-pini-cupru-rosu-setmswitch/pd/DT9XRK3BM/) | Mode selection and start/stop | 8 RON | +| Breadboard + Jumper Wires | Prototyping connections | 15 RON | +| **Total** | | **455 RON** | ## Software | Library | Description | Usage | -|---------|-------------|-------| -| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | GPIO, PWM, I2C, UART, EXTI, timers | -| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Concurrent detection, turret, launch, UI tasks | -| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | HC-SR04 pulse timing, servo sweeps, timeouts | -| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Unified interface for all peripherals | -| [ssd1306](https://github.com/rust-embedded-community/ssd1306) | OLED display driver (I2C) | Rendering system state and mode on display | +|-------|-------------|-------| +|[embassy-stm32](https://github.com/embassy-rs/embassy)| Async HAL for STM32 | GPIO, PWM, I2C, UART, EXTI, timers | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Main event loop and state machine | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | HC-SR04 timing, servo sweep, ESC arming | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives | Shared state between modules | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Unified interface for peripherals | +| [embedded-hal-async](https://github.com/rust-embedded/embedded-hal) | Async HAL traits | Async I2C for OLED Driver | +| [sh1106](https://github.com/rust-embedded-community/sh1106) | OLED display driver (I2C) | Rendering system state and mode on display | | [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text and icons on OLED | | [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Structured debug output and statistics | | [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT logging transport | Streams defmt logs to PC over debug probe | -| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Debugging crashes via probe | + +**Note on OLED driver**: The SH1106 controller used in the 1.3" display is not compatible with the ssd1306 crate. A minimal custom driver was implemented directly in src/sh1106.rs using raw I2C commands and an embedded 5×7 font, without any external display crate dependency. ## Links @@ -127,6 +118,6 @@ to select between game modes (Random, Training) and start/stop the system. 2. [STM32U5 Low Power Modes — Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-advanced-armbased-32-bit-mcus-stmicroelectronics.pdf) 3. [A2212 Brushless Motor datasheet](https://hobbymarket.ro/motor-brushless-1000kv-a2212-13t-pentru-drone-si-aeromodele.html) 4. [HC-SR501 PIR Sensor datasheet](https://www.mpja.com/download/31227sc.pdf) -5. [SSD1306 OLED Rust driver](https://github.com/rust-embedded-community/ssd1306) +5. [SH1106 OLED Rust driver](https://github.com/rust-embedded-community/sh1106) 6. [defmt logging framework](https://defmt.ferrous-systems.com) 7. [Inspiration](https://www.youtube.com/shorts/AUyqmwbT5Vc) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/architecture_diagram.svg new file mode 100644 index 00000000000..44795371f6a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/architecture_diagram.svg @@ -0,0 +1,3 @@ + + +
SENSORS
SENSORS
MAX30102
I2C1 0X57
MAX30102...
MQ-3 sensor
ADC PA4
MQ-3 sensor...
BME280
I2C1 0X76
BME280...
STM32 NUCLEO U545RE-Q
EMBASSY-RS
STM32 NUCLEO U545RE-Q...
MCU
MCU
OUTPUTS
OUTPUTS
SSD1306
OLED
12C1 0X3C
SSD1306...
Passive buzzer
PWM PA8
Passive buzzer...
LEDs
Green / Yellow
/ Red
LEDs...
POWER
POWER
temp / humidity / pressure
temp / humi...
alcohol value
alcohol val...
BMP / SpO2
BMP / SpO2
display data
display...
status
status
sound alert
sound a...
finger
finger
breath
breath
USB power 
USB pow...
diff --git a/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/hw_img.webp b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/hw_img.webp new file mode 100644 index 00000000000..719931a4a5b Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/hw_img.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/schematic.svg new file mode 100644 index 00000000000..22149b0fb50 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/images/schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: breathecheck.kicad_schSheet: /+3.3VGND+3.3V+3.3V+3.3VD2LEDD1LEDR3220D3LEDR2220VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETxR12201234J2BME2801234J1MAX30102GND12BZ1BuzzerGNDGNDGND+3.3V+3.3VPWR_FLAGGNDGNDGNDPWR_FLAGGND+5VPWR_FLAG1234J3SSD1306+3.3VGND1234J4MQ-3BZ1Buzzer12GND+3.3VPWR_FLAG+5VJ4MQ-31234+3.3V+3.3V+3.3VU1STM32U545RETxVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64GNDGND+3.3V+3.3VJ3SSD13061234+3.3VJ1MAX301021234J2BME2801234 diff --git a/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/index.md b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/index.md new file mode 100644 index 00000000000..025e2622903 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/luciana_ioana.toma/index.md @@ -0,0 +1,130 @@ +# BreatheCheck +A breath and environment monitoring device that estimates alcohol-related gas concentration, heart rate, SpO2, temperature, humidity, and pressure. + +:::info + +**Author:** Luciana-Ioana Toma \ +**GitHub Project Link:** [https://github.com/UPB-PMRust-Students/acs-project-2026-lucianatoma8](https://github.com/UPB-PMRust-Students/acs-project-2026-lucianatoma8) + +::: + +## Description + +BreatheCheck is an embedded monitoring device built on the STM32 Nucleo-U545RE-Q board. The project combines gas sensing, environmental sensing, and optical heart rate and SpO2 sensing in order to provide a broader view of the air being breathed and the user's basic physiological indicators. + +For gas detection, the device uses an MQ-3 sensor. Its analog output is read through the STM32 ADC and compared to a baseline measured during startup calibration. The firmware estimates an alcohol-related gas concentration in mg/L based on how much the MQ-3 value rises above the clean-air baseline. A deadband is used so that normal breath humidity and temperature do not immediately trigger a false alcohol reading. + +The BME280 sensor measures ambient temperature, humidity, and atmospheric pressure. These values are displayed together with the MQ-3 reading in order to provide environmental context, since gas sensor behavior can be influenced by surrounding air conditions. + +For heart rate and SpO2 monitoring, the MAX30102 optical sensor measures reflected red and infrared light from a fingertip. The firmware processes the raw samples using a simple peak detection algorithm to estimate heart rate in BPM, and uses the red/infrared signal ratio to estimate SpO2. + +All values are shown on a 0.96" SSD1306 OLED display. Three LEDs provide quick feedback for the MQ-3 alcohol-related level: green for normal, yellow for caution, and red for exceeded threshold. A passive buzzer is activated when the red threshold is reached. + +The prototype is powered through the STM32 Nucleo USB connector. The firmware is written in Rust using embassy-rs. + +:::danger +The alcohol, BPM, and SpO2 values are estimated for educational and demonstration purposes. The device is not intended for medical, legal, or safety-critical use. +::: + +## Motivation + +I chose this project because I wanted to work with multiple sensors at the same time and learn how to handle analog, digital, and I2C peripherals in Rust using embassy-rs. + +Instead of building only a simple breath alcohol detector, I wanted the device to monitor several values related to breathing and air conditions: alcohol-related gas concentration, temperature, humidity, pressure, heart rate, and SpO2. This made the project more interesting because it combines environmental sensing with basic biometric sensing. + +The project was also useful for learning how to combine several sensor readings into one embedded application, display live values on an OLED screen, and provide immediate visual and audio feedback through LEDs and a buzzer. + +## Architecture + +The project is divided into several sensing, processing, and feedback blocks that work together to monitor breath-related gas concentration, environmental conditions, and biometric values. + +![Architecture diagram](images/architecture_diagram.svg) + +Main Components: +* **The Controller**: The STM32 Nucleo-U545RE-Q board — the brain of the device. It reads all sensors, processes the data, updates the display, and controls the LEDs and buzzer. +* **The Gas Sensing System**: The MQ-3 gas sensor is connected to the ADC and is used to detect alcohol-related volatile compounds in exhaled air. The firmware calibrates the sensor against the surrounding air at startup. +* **The Environmental Sensing System**: The BME280 sensor measures temperature, humidity, and pressure. These values describe the surrounding air conditions and provide context for the MQ-3 reading. +* **The Optical Sensing System**: The MAX30102 sensor is connected over I2C and estimates heart rate and SpO2 from a fingertip using red and infrared light. +* **The Display and Feedback System**: The SSD1306 OLED displays the live measurements. Three LEDs and a passive buzzer provide immediate feedback based on the MQ-3 alcohol-related threshold. +* **The Power System**: The prototype is powered through the STM32 Nucleo USB connector during operation and debugging. + +## Log + +### Week 5 - 11 May + +- Defined the initial project idea and chose the main functionality of the device. +- Selected the main components: MQ-3, BME280, MAX30102, SSD1306 OLED, LEDs, and passive buzzer. +- Ordered the required hardware components. +- Started the first hardware tests by connecting and testing the OLED display and the status LEDs. + +### Week 12 - 18 May + +- Built the main hardware connections on the breadboard. +- Connected the remaining sensors and output components: MQ-3, BME280, MAX30102 and buzzer. +- Tested each component separately to make sure it worked correctly. +- Verified the I2C bus using an I2C scanner and confirmed that the OLED, BME280, and MAX30102 were detected. + +### Week 19 - 25 May + +- Implemented the full firmware in Rust using embassy-rs. +- Added MQ-3 startup calibration and alcohol-related gas estimation based on the clean-air baseline. +- Added BME280 temperature, humidity, and pressure readings. +- Added MAX30102 heart rate and SpO2 estimation. +- Integrated the OLED display, LED feedback, and passive buzzer alert into the final firmware. + +## Hardware + +| Component | Role | Interface | +|---|---|---| +| STM32 Nucleo-U545RE-Q | Main microcontroller | — | +| MQ-3 alcohol gas sensor | Detects alcohol-related volatile compounds in exhaled air | ADC (PA4 / A2) | +| MAX30102 | Estimates heart rate (BPM) and SpO2 (%) | I2C1 (0x57) | +| BME280 | Measures temperature, humidity, and pressure | I2C1 (0x76) | +| SSD1306 OLED 0.96" | Displays live measurements | I2C1 (0x3C) | +| LED Green | Normal MQ-3 level | GPIO (PC0) | +| LED Yellow | Caution MQ-3 level | GPIO (PC1) | +| LED Red | Exceeded MQ-3 threshold | GPIO (PC2) | +| Passive buzzer | Beeps when the MQ-3 threshold is exceeded | GPIO (PA8) | +| Breadboard + jumper wires | Prototyping connections | — | + +![HardwareImage](images/hw_img.webp) + +### Schematics + +![Schematic](images/schematic.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller | — RON | +| MQ-3 Alcohol Sensor | Alcohol-related volatile gas detection | [13.00 RON](https://www.bitmi.ro/electronica/modul-senzor-de-gaze-mq3-10421.html) | +| MAX30102 | Heart rate and SpO2 | [11.98 RON](https://www.bitmi.ro/electronica/senzor-ritm-cardiac-si-spo2-max30102-12117.html) | +| BME280 | Temperature, humidity and pressure measurement | [32.67 RON](https://www.emag.ro/modul-senzor-temperatura-umiditate-presiune-bme280-ai0002-s34/pd/DR7HCZBBM/?ref=history-shopping_485342338_50435_1) | +| SSD1306 OLED 0.96" | Display | [16.96 RON](https://sigmanortec.ro/Display-OLED-0-96-I2C-IIC-Albastru-p135055705) | +| LEDs (x3) + Resistors | Visual feedback | 26.20 RON | +| Passive Buzzer | Audio feedback | [1.45 RON](https://sigmanortec.ro/Buzzer-pasiv-5v-p172425809) | +| Breadboard + Wires | Prototyping | [34.58 RON](https://www.emag.ro/kit-breadboard-830-gauri-65-fire-modul-tensiune-alimentare-mb102-jh027/pd/DY1YP6BBM/?ref=history-shopping_485342338_227191_1) | +| | **Total** | **136.84 RON** | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32) | STM32 HAL for embassy-rs | ADC, I2C1, GPIO, and peripheral access | +| [embassy-executor](https://docs.embassy.dev/embassy-executor) | Async executor for embedded Rust | Runs the main firmware loop | +| [embassy-time](https://docs.embassy.dev/embassy-time) | Timing utilities | MQ-3 calibration timing, display refresh, and sensor sampling | +| [embedded-graphics](https://docs.rs/embedded-graphics/latest/embedded_graphics/) | Graphics primitives for embedded displays | Draws text on the OLED screen | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | OLED display driver | Controls the SSD1306 OLED over I2C | +| [embedded-hal-bus](https://docs.rs/embedded-hal-bus/latest/embedded_hal_bus/) | Shared bus utilities | Allows multiple I2C devices to share the same bus | +| [defmt](https://defmt.ferrous-systems.com/) and [defmt-rtt](https://docs.rs/defmt-rtt/latest/defmt_rtt/) | Embedded logging | Debug output through probe-rs | + +## Links + +1. [MQ-3 Datasheet](https://www.sparkfun.com/datasheets/Sensors/MQ-3.pdf) +2. [MAX30102 Datasheet](https://datasheets.maximintegrated.com/en/ds/MAX30102.pdf) +3. [BME280 Datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf) +4. [SSD1306 Datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) +5. [embassy-rs documentation](https://embassy.dev) +6. [embassy-rs STM32 HAL](https://docs.embassy.dev/embassy-stm32) +7. [STM32U545RE Reference Manual](https://www.st.com/en/microcontrollers-microprocessors/stm32u545re.html) diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/architecture.webp new file mode 100644 index 00000000000..ce3973c1e97 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/index.md b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/index.md index e8aab2406ed..c48b00c3055 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/index.md @@ -10,7 +10,7 @@ ## Description -This arcade game is built on STM32 using bare-metal Rust. It polls four buttons for real-time movement on a TFT LCD. The system tracks gameplay logic, including collision detection and scoring. Feedback is provided via three LEDs for lives and a PWM buzzer for sound effects. The project demonstrates full hardware-software integration—combining digital inputs, visual rendering, and sensory feedback in a memory-safe environment. +This arcade game is built on STM32 using bare-metal Rust. It polls four buttons for real-time movement on a LCD module. The system tracks gameplay logic, including collision detection and scoring. Feedback is provided via three LEDs for lives and a PWM buzzer for sound effects. The project combines two arcade games (Snake and Dodge), real-time SPI display rendering, GPIO button input with debouncing, PWM music playback via passive buzzer with melodies stored on a microSD card, LED-based lives indicator, and flash memory persistence for high scores. ## Motivation @@ -19,30 +19,37 @@ The motivation behind this project stems from a nostalgic passion for classic ar ## Architecture - -The STM32 microcontroller serves as the central control unit, directing and managing all hardware components and executing the game logic developed in Rust. -The four directional buttons are tactile switches connected directly to the STM32 GPIO pins to control the player's movement (Up, Down, Left, Right). -OLED Display (SSD1306) is connected via SPI (or I2C) for real-time rendering of the game world, player character, and status messages. -Life Indicator LEDs show the remaining player lives. -Passive Buzzer: Connected to a pin for dynamic tone generation. It provides auditory cues for game events, such as losing a life. - +The STM microcontroller serves as the central control unit, directing and managing all hardware components and executing the game logic developed in Rust. +The four directional buttons are tactile switches connected to STM32 GPIO pins with hardware pull-up resistors and software debouncing to control player movement (Up, Down, Left, Right). Two additional buttons handle game selection (Snake or Dodge) and reset. +The LCD display is connected via SPI for real-time rendering of the game world, player character, score, and status messages. +Three LEDs indicate the remaining player lives, turning off one by one as lives are lost. +A passive buzzer connected to a GPIO pin provides PWM-driven audio feedback, playing melodies loaded from a microSD card connected via a secondary SPI bus. +A microSD card module connected via SPI2 stores the game music, allowing melodies to be swapped without reflashing the firmware. +Flash memory on the STM32 is used for persistent high score storage across power cycles. +![Project Architecture](./architecture.webp) ## Log ### Week 5 - 11 May +Connected hardware components and written initial project documentation ### Week 12 - 18 May +Implemented the snake game logic ### Week 19 - 25 May +Finished dodge game logic and 3D printed the console ## Hardware The system is powered by an STM32 microcontroller (ARM Cortex-M), utilizing its SPI, GPIO, and PWM peripherals to interface with external components. +![Project hardware1](./poza3.webp) +![Project hardware1](./poza1.webp) +![Project hardware2](./poza2.webp) ### Schematics -![Project Schematic](./schematics.svg) +![Project Schematic](./schematica.webp) ### Bill of Materials @@ -65,10 +72,15 @@ The system is powered by an STM32 microcontroller (ARM Cortex-M), utilizing its | [st7735-lcd](https://github.com/almindor/st7735-lcd) | Display driver for ST7735 | Used for the 1.77" TFT display | | [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing sprites and text | | [cortex-m-rt](https://crates.io/crates/cortex-m-rt) | Startup code and runtime | Bare-metal execution for STM32 | +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware abstraction layer for STM32 microcontrollers | GPIO, SPI, Flash peripherals | +| [embassy-executor](https://crates.io/crates/embassy-executor) | Async task executor for embedded systems | Running game loop, music and button tasks concurrently | +| [embassy-time](https://crates.io/crates/embassy-time) | Async timers and delays | Game tick timing, PWM note duration, debouncing | +| [mipidsi](https://crates.io/crates/mipidsi) | Display driver for MIPI-compatible displays | ST7735S TFT LCD initialization and rendering | ## Links 1. [The Embedded Rust Book](https://docs.rust-embedded.org/book/) 2. [Cortex-M Guide](https://ferrous-systems.com/blog/rust-on-stm32/) +3. [Super Mario melody code](https://github.com/robsoncouto/arduino-songs/blob/master/supermariobros/supermariobros.ino) diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza1.webp b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza1.webp new file mode 100644 index 00000000000..7bd02447b91 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza2.webp b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza2.webp new file mode 100644 index 00000000000..7cd1ccaa7b9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza3.webp b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza3.webp new file mode 100644 index 00000000000..675ea51e563 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/poza3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematica.webp b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematica.webp new file mode 100644 index 00000000000..aa7004caf25 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematica.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematics.svg b/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematics.svg deleted file mode 100644 index 48bd43c9584..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/mara_andreea.damoc/schematics.svg +++ /dev/null @@ -1,178 +0,0 @@ - - STM32 Nucleo Game Console Schematic - Schema de circuit pentru o mini consolă de jocuri bazată pe STM32 Nucleo. - - - - - - - - - - STM32 Nucleo - ARM Cortex-M - - - SPI1_SCK - SPI1_MOSI - SPI1_CS - SPI2_SCK - SPI2_MOSI - SPI2_MISO - SPI2_CS - - PA0 GPIO - PA1 GPIO - PA2 GPIO - PA3 GPIO - PA4 GPIO - PB0 PWM - NRST - 3.3V / GND / 5V - - - - - OLED SSD1306 - 128×64px - SPI / I2C - - VCC - GND - SCK - MOSI - CS - - - - - - - - - SPI1 (OLED) - - - - - SD Card - FAT32 - SPI mode - - VCC 3.3V - GND - SCK - MOSI - MISO - CS - - - - - - - - - - SPI2 (SD) - - - LED Vieți - - - - LED1 - - 220Ω - - - - - LED2 - - 220Ω - - - - - LED3 - - 220Ω - - - - - GPIO output - - - - - Buzzer pasiv - PWM TIM - - PWM - - - - - PWM output - - - Butoane - - - - UP ▲ - - - - - - DOWN ▼ - - - - - - LEFT ◄ - - - - - - RIGHT ► - - - - - - RESET - - - - - - GAME SEL - - - - 10kΩ pull-down - - - - GPIO input - - - - - Power: USB 5V → 3.3V LDO - - - - - - - 100nF decoupling caps pe fiecare VCC pin - - \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/architecture_diagram.svg new file mode 100644 index 00000000000..88c57815d96 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/architecture_diagram.svg @@ -0,0 +1,4 @@ + + + +

Game Engine

Game Engine

Input Management

Input Management

Audio

Audio

Graphics & Display

Graphics & Display

- Touch Screen

- Buttons

- Camera
- Touch Screen...
- Display
- Display
- Acoustic buzzer
- Acoustic buzzer
PWM
PWM
- STM32U5 microcontroller
- STM32U5 microcontroller
SPI
SPI
SPI
GPIO

SPI...
SCCB
SCCB
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/electrical_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/electrical_diagram.svg new file mode 100644 index 00000000000..dd042c288bb --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/electrical_diagram.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG1234567812345678ABCDEFABCDEFDate: 2026-05-10KiCad E.D.A. 10.0.2Rev:Size: A3Id: 1/1Title: 8-Puzzle Touch Console with CameraFile: schema.kicad_schSheet: /SW1SW_PushJ1OV7670SW5SW_PushVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQSW4SW_PushJ3BuzzerJ2TFT ILI9488SW3SW_PushSW2SW_PushPWDN3.3VVCCSCLLEDSDOSCKVSXLKSDAD0HSPLKGNDGNDD6RESETD1D3D4D2D7D5GNDI/OVCCSDIDC/RSCSRESETT_IRQT_DOT_DINT_CLKT_CS \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/index.md b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/index.md index 25119623f99..fba1c16edff 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/index.md @@ -16,26 +16,25 @@ This project is a laptop-like mini-console equipped with an attached camera. Whe ## Motivation -I chose this project because it is based on a console I had when I was little. I could take a picture and instantly play it as a sliding puzzle, and I wanted to recreate that fun experience. +I chose this project because it is based on a console I had when I was little. I could take a picture and instantly play it as a sliding puzzle and I wanted to recreate that fun experience. ## Architecture - - The software architecture of the console is modular, divided into distinct layers that separate the core game logic from direct hardware interaction. The main components are: - **Game Engine**: This is the software "brain" of the application. It manages the internal state of the 8-puzzle game (a 3x3 matrix), tracks the position of the empty space and validates allowed moves. It also evaluates the win condition (checking if the tiles are in the correct order) and keeps track of the move count or elapsed time. - **Input Management Subsystem**: It is responsible for capturing and processing user input (buttons pressed, movements made on screen). -- **Graphics & Display Subsystem**: It is responsible for rendering the visual representation of the game state to the screen. This includes drawing the 3x3 grid, updating the positions of the numbered tiles, and rendering user interface elements (such as the move counter or timer). +- **Graphics & Display Subsystem**: It is responsible for rendering the visual representation of the game state to the screen. This includes drawing the 3x3 grid, updating the positions of the numbered tiles and rendering user interface elements (such as the move counter or timer). - **Audio Subsystem**: It translates specific game events triggered by the Game Engine into corresponding sound effects, such as a mechanical click when a tile successfully slides, an error tone for invalid moves, or a victory jingle when the puzzle is solved. + +### Architecture Diagram +![Architecture Diagram](./architecture_diagram.svg) + + ## Log @@ -44,10 +43,27 @@ The software architecture of the console is modular, divided into distinct layer Ordered the hardware components. ### Week 20 - 26 April +Initialized the ILI9488 display and verified the SPI interface communication. Performed screen tests by rendering examples from https://crates.io/crates/ili9488-rs. ### Week 27 - 03 May +Integrated the OV7670 camera module and established the video capture routine ### Week 04 - 10 May +Finalized peripheral integration: connected and configured the touch controller, buzzer and buttons. Implemented external interrupts (EXTI) for the hardware buttons to ensure responsive input handling. + +### Week 11 - 17 May +Developed the game software, including the game logic, screen display and button controls. + + +### Week 18 - 24 May +- Video: https://youtube.com/shorts/Yu7dfRNBbo0 + +Main menu +Settings +Take picture +Puzzle +Win + ## Hardware @@ -58,18 +74,19 @@ Ordered the hardware components. - **VGA Camera OV7670 640 x 480px**: Captures images input for the system - **Microswitches TC-1212T (12x12x7.3mm):** Mechanical tactile switches used for the directional pad and user action buttons - **Acoustic buzzer for microcontrollers:** Provides auditory feedback and sound effects for various game events -- **DC-DC Step-up Module 1-5V to 5V:** A voltage regulator that boosts the fluctuating battery power to provide a stable 5V output for the microcontroller and display + ### Schematics - +![Electrical Diagram](./electrical_diagram.svg) + ### Bill of Materials | Device | Usage | Price | |--------|-------|-------| | [3.5" Touch Screen 480x320 SPI TFT ILI9488 (1x)](http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520) | Main display and visual output | [80.43 RON](https://www.drot.ro/platforma-arduino/149154-ecran-tactil-3-5-480x320-spi-tft-ili9488.html) | -| [VGA Camera OV7670 640 x 480px (2x)](https://web.mit.edu/6.111/www/f2016/tools/OV7670_2006.pdf) | Capturing images/video input | [23.10 RON](https://www.drot.ro/platforma-arduino/900-camera-vga-ov7670-640-x-480px.html) | +| [VGA Camera OV7670 640 x 480px (1x)](https://web.mit.edu/6.111/www/f2016/tools/OV7670_2006.pdf) | Capturing images/video input | [11.55 RON](https://www.drot.ro/platforma-arduino/900-camera-vga-ov7670-640-x-480px.html) | | [Acoustic buzzer for microcontrollers (1x)](https://components101.com/misc/buzzer-pinout-working-datasheet) | Audio feedback and sound effects | [4.21 RON](https://www.drot.ro/platforma-arduino/849-buzzer-acustic-pentru-microcontrolere.html) | | [Microswitch TC-1212T - 12x12x7.3mm SMD PCB (5x)](https://docs.rs-online.com/1b59/0900766b81126ccb.pdf) | Mechanical switches for user input/controls | [10.44 RON](https://www.drot.ro/platforma-arduino/1180-mikroswitch-tc-1212t-12-x-12-x-7-3-mm-smd-pcb.html) | | [Button cap for microswitch - Red (1x)](https://www.drot.ro/platforma-arduino/1181-buton-pentru-mikroswitch-ro-u-12-x-12-x-7-3-mm.html) | Plastic cap for microswitch (Red) | [1.30 RON](https://www.drot.ro/platforma-arduino/1181-buton-pentru-mikroswitch-ro-u-12-x-12-x-7-3-mm.html) | @@ -77,17 +94,23 @@ Ordered the hardware components. | [Button cap for microswitch - Green (1x)](https://www.drot.ro/platforma-arduino/1183-buton-pentru-mikroswitch-verde-12-x-12-x-7-3-mm.html) | Plastic cap for microswitch (Green) | [1.30 RON](https://www.drot.ro/platforma-arduino/1183-buton-pentru-mikroswitch-verde-12-x-12-x-7-3-mm.html) | | [Button cap for microswitch - Yellow (1x)](https://www.drot.ro/platforma-arduino/1184-buton-pentru-mikroswitch-galben-12-x-12-x-7-3-mm.html) | Plastic cap for microswitch (Yellow) | [1.30 RON](https://www.drot.ro/platforma-arduino/1184-buton-pentru-mikroswitch-galben-12-x-12-x-7-3-mm.html) | | [Button cap for microswitch - White (1x)](https://www.drot.ro/platforma-arduino/1185-buton-pentru-mikroswitch-alb-12-x-12-x-7-3-mm.html) | Plastic cap for microswitch (White) | [1.30 RON](https://www.drot.ro/platforma-arduino/1185-buton-pentru-mikroswitch-alb-12-x-12-x-7-3-mm.html) | -| [4x AA Battery Holder SBH-341-2A (1x)](https://www.comf-hk.com/storage/SBH-341-2A-Data-Sheet.pdf) | Power supply holder for 4x AA batteries | [8.72 RON](https://www.drot.ro/platforma-arduino/1436-suport-pentru-patru-baterii-aa-sbh-341-2a.html) | -| [DC-DC Step-up Module 1-5V to 5V 500mA (1x)](https://www.ti.com/product/TPS61241) | Voltage regulator to provide stable 5V | [7.19 RON](https://www.drot.ro/platforma-arduino/1699-modul-step-up-dc-dc-de-la-1-5v-la-5v-500ma.html) | -| [Plexiglass mount for OV7670 camera module (2x)](https://www.drot.ro/platforma-arduino/123946-suport-pentru-modulul-de-camera-ov7670-plexiglas.html) | Physical mount for the camera module | [7.42 RON](https://www.drot.ro/platforma-arduino/123946-suport-pentru-modulul-de-camera-ov7670-plexiglas.html) | ## Software | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | +| [ili9488](https://github.com/DashCampbell/ili9488-rs) | Display driver for ILI9488 | Used for initializing the display | | [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-time](https://github.com/embassy-rs/embassy)| Time library | Used for measuring the game time and for adding small delays | +| [embassy_executor](https://github.com/embassy-rs/embassy) | Task manager | Used for reading user input and updating the screen at the same time | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization | Used for communicating between the display task and buttons/touch task | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Standard hardware rules | Defines standard interfaces | +| [panic-probe](https://github.com/knurling-rs/probe-run/tree/main) | Error handling | Stops the program if the code crashes | +| [defmt]() | Logging library | Used for printing debug messages to the computer | +| [rand]() | Random number generator | Used for shuffling the puzzle board pieces | + + ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/main_menu.webp b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/main_menu.webp new file mode 100644 index 00000000000..b918a77f628 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/main_menu.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/puzzle.webp b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/puzzle.webp new file mode 100644 index 00000000000..cb51c99f34f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/puzzle.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/settings.webp b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/settings.webp new file mode 100644 index 00000000000..37dc6ad5561 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/settings.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/take_picture.webp b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/take_picture.webp new file mode 100644 index 00000000000..5ca9acc1c49 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/take_picture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/win.webp b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/win.webp new file mode 100644 index 00000000000..b92c2338451 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/maria.alexandru2109/win.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mario.david/comp.webp b/website/versioned_docs/version-acs_cc/project/2026/mario.david/comp.webp new file mode 100644 index 00000000000..dca0ed6447c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mario.david/comp.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/mario.david/index.md b/website/versioned_docs/version-acs_cc/project/2026/mario.david/index.md new file mode 100644 index 00000000000..602c163cdf8 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/mario.david/index.md @@ -0,0 +1,114 @@ +# SmartCash - Intelligent Cash Register System + +A smart cash register with product scanning, real-time alerts, and business monitoring features. + +:::info + +**Author:** David Adrian-Mario \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-mariodavid3 + +::: + +## Description + +SmartCash is an intelligent cash register system designed to modernize small retail operations by integrating product scanning, real-time alerts, and smart monitoring features. + +The system runs on a microcontroller platform and connects to a barcode scanner, display interface, and alert modules. It allows fast product identification, automatic price calculation, and detection of unusual events such as suspicious transactions, missing products, or system errors. + +The device features a display interface that provides clear and real-time information to the user, including product name, price, and total cost. Additionally, the system includes a buzzer and LED-based alert mechanism that notifies the operator in case of errors, invalid scans, or unusual activities. + +To enhance functionality, SmartCash can optionally communicate with a computer, allowing storage of transaction logs and management of product databases. This makes the system scalable and adaptable for more advanced retail applications. + +Overall, SmartCash improves efficiency, reduces human error, and provides a more reliable and user-friendly solution for handling transactions in small retail environments. + +## Motivation + +I chose this project because I am familiar with how markets and small shops operate, and I noticed that many systems are outdated and rely heavily on manual work. This leads to mistakes, slow service, and lack of control. + +The goal is to build a smarter cash register that improves efficiency, reduces errors, and provides real-time alerts. Additionally, this project allowed me to explore the practical side of embedded systems development by integrating both hardware and software components into a single functional system. + +Working with peripherals such as barcode scanners, displays, and communication interfaces helped me better understand how real-world devices operate. + +Another important motivation was the possibility to design a system that can be extended in the future. SmartCash can evolve into a more complex solution by adding features such as inventory management, cloud connectivity, or mobile integration. + +Overall, this project combines a real-world problem with a technical challenge, making it both useful and educational. + +## Architecture + +The system is composed of the following main components: + +- **Main Controller:** handles product processing, scanning logic, and alerts. +- **Scanning Module:** reads barcode data and sends it to the controller. +- **Display Module:** shows product information and total price. +- **Alert Module:** uses a buzzer and LEDs for notifications. +- **Power Module:** provides power to the controller and connected peripherals. + +All components communicate through the microcontroller, which acts as the central processing unit. + +## Project Log + +### Week 1 - 11 May + +Defined the project idea and the overall system architecture. The main components were selected and the basic functionality of the intelligent cash register was planned. + +### Week 2 - 18 May + +Started the hardware setup and tested the barcode scanner and display module. The connections between the controller, display, and external modules were planned and partially assembled. + +### Week 3 - 25 May + +Implemented the scanning logic and alert system. The buzzer and LED feedback were added for invalid scans, system errors, and user notifications. + +## Hardware + +The project uses the following hardware components: + +- Microcontroller board +- Barcode scanner +- LCD / TFT display +- Passive buzzer +- LEDs +- Buttons +- Breadboard +- Jumper wires +- Battery / external power source + +![Hardware Assembly](./comp.webp) + +## Schematics + +The electrical schematic was created in EasyEDA and includes the main controller, display, scanner interface, buzzer, connectors, and power connections. + +![SmartCash schematic](./schematic.webp) + +## Bill of Materials + +| Device | Usage | Price | +| :--- | :--- | :--- | +| Microcontroller | Main processing unit | ~50 RON | +| Barcode scanner | Product scanning | ~70 RON | +| LCD / TFT display | User interface | ~80 RON | +| Passive buzzer | Audio alerts | ~10 RON | +| LEDs | Visual alerts | ~10 RON | +| Buttons | User interaction | ~5 RON | +| Jumper wires | Connections between components | ~20 RON | +| Breadboard | Prototyping connections | ~10 RON | +| USB cable | Power and communication with PC | ~15 RON | + +## Software + +The software is responsible for reading scanned product data, processing product information, updating the display, and triggering alerts when needed. + +| Library / Module | Description | Usage | +| :--- | :--- | :--- | +| embedded-hal | Hardware abstraction layer | Communication with peripherals | +| Display driver | Display control | UI rendering | +| UART / Serial | Serial communication | Barcode scanner input | +| GPIO | Digital input/output control | Buttons and LEDs | +| PWM | Pulse-width modulation | Buzzer control | +| SPI | Serial Peripheral Interface | Communication with display | +| I2C | Inter-integrated circuit | Future extensions | + +## Links + +- [GitHub Project Repository](https://github.com/UPB-PMRust-Students/acs-project-2026-mariodavid3) diff --git a/website/versioned_docs/version-acs_cc/project/2026/mario.david/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/mario.david/schematic.webp new file mode 100644 index 00000000000..5e698acf858 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/mario.david/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/architecture_diagram.svg new file mode 100644 index 00000000000..91dace6a5ee --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/architecture_diagram.svg @@ -0,0 +1,77 @@ + + + + + + + + + + PC / Laptop + Python Script + + + STM32 Nucleo + U545RE-Q + (Embassy Rust) + Bresenham + Timers + + + A4988 Driver + X-Axis + + + A4988 Driver + Y-Axis + + + SG90 Servo + Toolhead (Z-Axis) + + + NEMA 17 Motor + X-Axis Movement + + + NEMA 17 Motor + Y-Axis Movement + + + Power Supply + 12V / 2A + + + USB / UART + + + STEP/DIR + + + STEP/DIR + + + PWM + + + Coils A/B + + + Coils A/B + + + + +12V + +12V + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/diagram.svg new file mode 100644 index 00000000000..9bf93c47f8b --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/diagram.svg @@ -0,0 +1,82 @@ + + + + + + + + + + PC / Laptop + Python Script + + + STM32 Nucleo + U545RE-Q + (Embassy Rust) + Bresenham + Timers + + + ULN2003 Driver + X-Axis + + + ULN2003 Driver + Y-Axis + + + ULN2003 Driver + Z-Axis + + + 28BYJ-48 Motor + X-Axis Movement + + + 28BYJ-48 Motor + Y-Axis Movement + + + 28BYJ-48 Motor + Z-Axis Movement + + + Power Supply + 5V / 2A + + + USB / UART + + + GPIO + + + GPIO + + + GPIO + + + + + + + + + + + + +5V + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hardware_1.webp b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hardware_1.webp new file mode 100644 index 00000000000..168acb4ab4a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hardware_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hw2.webp b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hw2.webp new file mode 100644 index 00000000000..1568a5a779b Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/hw2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/schema_electrica.webp b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/schema_electrica.webp new file mode 100644 index 00000000000..04fbabb753d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/images/schema_electrica.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/index.md new file mode 100644 index 00000000000..f363d16253d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/matei.lazarescu/index.md @@ -0,0 +1,93 @@ +# CNC Pen Plotter + +An autonomous 2D plotting machine that translates digital coordinates into physical drawings on paper using a synchronized triple-stepper Cartesian mechanism for all axes (X, Y, and Z). + +:::info + +**Author**: [Lazarescu Matei-Cristian] \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-matei1608) + +::: + +## Description + +The CNC Pen Plotter is an embedded real-time device designed to physically draw graphics onto a sheet of paper. The system acts as a precise executor for coordinate data sent from a PC via USB (UART). Instead of relying on a high-level operating system, the STM32 Nucleo-U545RE-Q microcontroller uses DMA to receive a continuous stream of coordinates without blocking the CPU. + +Once the data is parsed, the firmware utilizes Bresenham's line algorithm to calculate the exact interpolation needed to draw straight lines. All three axes (X, Y, and Z) are driven by **28BYJ-48 unipolar stepper motors**, controlled via **ULN2003 drivers**. The Z-axis motor rotates a mechanism to lower the pen when drawing or lift it when moving between shapes. The entire motion system is strictly synchronized using asynchronous Embassy tasks and hardware timers to generate specific step sequences, preventing step loss and maintaining smooth kinematics. + +## Motivation + +Translating digital graphics into physical reality requires a deep understanding of hardware-software synchronization. While commercial plotters or 3D printers handle this using advanced, pre-built frameworks, building one from scratch entirely in bare-metal Rust (`no_std`) represents a significant engineering challenge. This project was chosen to demonstrate the capability of handling asynchronous real-time communications, software-defined stepping sequences (Half-Step/Full-Step) for geared motors, and mathematical motion control (linear interpolation) on a highly resource-constrained embedded system. + +## Architecture + +![Architecture Diagram](images/diagram.svg) + +- **Communication Module** — Handles the asynchronous serial communication (UART over USB) between the PC and the STM32 microcontroller. It uses DMA and ring buffers (via `heapless`) to safely store incoming coordinate commands without risking memory overflow or dynamic allocation crashes. +- **Motion Control Module** — The core logical component. It reads the target coordinates and applies Bresenham's line algorithm to determine the exact sequence of steps for the X and Y motors. Since 28BYJ-48 motors require sequential coil activation, this module cycles through a defined boolean matrix (step sequence) and sets the appropriate STM32 GPIO pins HIGH/LOW to drive the ULN2003 inputs. +- **Toolhead Module** — Controls the Z-axis actuation. It reuses the stepper motor task logic to drive a third 28BYJ-48 motor, effectively turning a mechanical gear to lift or drop the pen onto the paper at the start or end of a drawing path. +- **Power & Drive Module** — A 5V 2A power supply feeds the ULN2003 stepper drivers and motors directly, connected via a screw-terminal DC barrel jack adapter on a 400-point breadboard. The MCU logic runs safely isolated at 3.3V/5V via USB, sharing only the common ground (GND) with the power circuit. + +## Log + +### April 14 - 20 +- Finalized project theme and received approval. +- Researched kinematics and ordered the stepper motors, drivers, and mechanical components. + +### May 4 - 10 +- All the hardware components finally arrived. +- Started researching datasheets and figuring out how to correctly wire the STM32, the ULN2003 drivers, and the power supply on the breadboard. + +### May 11 - 17 +- Finished the physical hardware assembly and all the electronic wiring. +- Wrote the initial testing code and successfully got all three stepper motors spinning. + +### May 18 - 24 +- Finished the software. + + +## Hardware + +![Electric Scheme](images/schema_electrica.webp) + +The main controller is the **STM32 Nucleo-U545RE-Q**, chosen for its hardware FPU (useful for kinematic math), advanced hardware timers, and robust support within the Rust Embassy async ecosystem. + +The physical movement is achieved using three **28BYJ-48 Stepper Motors**. These are 5V geared unipolar stepper motors known for their high precision (due to the internal 1:64 gear ratio). They are driven by three **ULN2003 Motor Drivers**, which act as high-current switches, translating the 3.3V logic signals from the STM32 into the 5V high-current pulses required by the motor coils. + +Power is managed separately to protect the microcontroller: the motors are powered by a dedicated **5V 2A Power Supply**, connected to the circuit using a **screw-terminal DC barrel jack adapter**. The power distribution and driver logic connections are routed on a **400-point breadboard** using standard **jumper wires**. The STM32 shares a common GND with the motor circuit but draws its own logic power via USB. + +![Hardware_1](images/hardware_1.webp) +![Hardware_2](images/hw2.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller | From Faculty | +| [3x 28BYJ-48 Stepper Motors + ULN2003 Drivers](https://www.emag.ro/search/motor+pas+cu+pas+28byj-48+uln2003) | X, Y, and Z axis movement & switching | ~60 RON | +| [5V 2A Power Supply](https://www.emag.ro/search/alimentator+5v+2a) | Powering the ULN2003 drivers & motors | ~25 RON | +| [DC Barrel Jack Adapter (Female)](https://www.emag.ro/search/mufa+alimentare+mama+surub) | Connecting the power supply to the breadboard | ~5 RON | +| [Breadboard 400 points](https://www.emag.ro/search/breadboard+400) | Prototyping electronic connections | ~10 RON | +| [Jumper Wires (M-M / M-F)](https://www.emag.ro/search/set+fire+jumper+arduino) | Routing signals between MCU, drivers, and power | ~15 RON | +| **Total** | | **~120 RON** | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Managing UART (DMA), Timers, and Standard GPIO pins | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Running concurrent tasks (e.g., listening to UART while stepping all 3 motors) | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping | Managing microsecond delays between motor steps to control speed | +| [heapless](https://github.com/japaric/heapless) | `no_std` data structures | Creating ring buffers for storing incoming coordinates without dynamic allocation | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Structured debug output (e.g., coordinate parsing status) | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT logging transport | Streaming logs to the PC via the debug probe | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Catching errors and safely halting the motors via probe | + +## Links + +1. [Embassy-rs documentation](https://embassy.dev) +2. [STM32U5 Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-advanced-armbased-32-bit-mcus-stmicroelectronics.pdf) +3. [Bresenham's Line Algorithm Explanation](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) +4. [28BYJ-48 Stepper Motor Datasheet](https://components101.com/motors/28byj-48-stepper-motor) +5. [ULN2003 Driver Datasheet](https://www.st.com/resource/en/datasheet/uln2001.pdf) +6. [defmt logging framework](https://defmt.ferrous-systems.com) diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/index.md index 1a06fa853b9..506fe091b63 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/index.md @@ -34,6 +34,7 @@ Main Components: Created documentation and bill of materials ### Week 5 - 11 May +Created Schematic and assembled breadboard and hardware components ### Week 12 - 18 May @@ -51,7 +52,7 @@ Hardware used: ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Schematic](ping_pong.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/ping_pong.svg b/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/ping_pong.svg new file mode 100644 index 00000000000..00fe5e1bd6d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/matei_florin.roescu/ping_pong.svg @@ -0,0 +1,16728 @@ + + + +SVG Image created as ping_pong.svg date 2026-05-11T22:49:48 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.1 +KiCad E.D.A. 10.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: ping_pong.kicad_sch +File: ping_pong.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++6V ++6V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++6V ++6V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCL/D15 +SCL/D15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SDA/D14 +SDA/D14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +AVDD +AVDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCK/D13 +SCK/D13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MISO/D12 +MISO/D12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/MOSI/D11 +PWM/MOSI/D11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/CS/D10 +PWM/CS/D10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D9 +PWM/D9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D8 +IO/D8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D7 +IO/D7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D6 +PWM/D6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D5 +PWM/D5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D4 +IO/D4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D3 +PWM/D3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D2 +IO/D2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TX/D1 +TX/D1 + + + + + + + + + + + + + + + + + + + + + + + + + + + +RX/D0 +RX/D0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3V3 ++3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CN7_5 +CN7_5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U1A +U1A + + + + + + + + + + + + + + + + + +NUCLEO-U545RE-Q +NUCLEO-U545RE-Q + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ + ++ + + + + + +1 + +1 + + + + + + + + + + + +- + +- + + + + +2 + +2 + + + + + + + + + + + + +M1 +M1 + + + + + + + + + +Motor_DC +Motor_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++ + ++ + + + + + +1 + +1 + + + + + + + + + + + +- + +- + + + + +2 + +2 + + + + + + + + + + + + +M2 +M2 + + + + + + + + + + + + + + +Motor_DC +Motor_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LED +LED + + + + + + + + + + + + + + + + + + +L9110 +L9110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +L9110 +L9110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VCC + +VCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + +1 + + + + + + + + + + + +GND + +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 + +2 + + + + + + + + + + + + + + + +IB1 +IB1 + + + + + + + + + + + + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +IA1 +IA1 + + + + + + + + + + + +4 +4 + + + + + + + + +IB2 +IB2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +IA2 +IA2 + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +OA1 +OA1 + + + + + + + + + + + + + + + + + + + + + + + + + + +P1 +P1 + + + + + + + + + + + + + + + + + + + + +OB1 +OB1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P2 +P2 + + + + + + + + + + + + + + + + + + + + + + + + + +OA2 +OA2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P3 +P3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +OB2 +OB2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P4 +P4 + + + + + + + + + + + + + + + +L9110_Dual_Motor_Module +L9110_Dual_Motor_Module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM +PWM + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + ++ ++ + + + + +2 +2 + + + + + + + + + + + + + + + +- +- + + + +3 +3 + + + + + + + + + + + + + + + +M3 +M3 + + + + + + + + + + + + + + + + + +Motor_Servo +Motor_Servo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW2 +SW2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW1 +SW1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Roescu Matei Florin +Roescu Matei Florin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U1A +U1A + + + + + + + + + + + + + + + + + +NUCLEO-U545RE-Q +NUCLEO-U545RE-Q + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCL/D15 +SCL/D15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SDA/D14 +SDA/D14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +AVDD +AVDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCK/D13 +SCK/D13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MISO/D12 +MISO/D12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/MOSI/D11 +PWM/MOSI/D11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/CS/D10 +PWM/CS/D10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D9 +PWM/D9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D8 +IO/D8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D7 +IO/D7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D6 +PWM/D6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D5 +PWM/D5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D4 +IO/D4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM/D3 +PWM/D3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO/D2 +IO/D2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TX/D1 +TX/D1 + + + + + + + + + + + + + + + + + + + + + + + + + + + +RX/D0 +RX/D0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3V3 ++3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CN7_5 +CN7_5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/diagrama.svg new file mode 100644 index 00000000000..4fc0aef72c6 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/diagrama.svg @@ -0,0 +1,3 @@ + + +
Microcontroller
(STM32 Nucleo)
Microcontroller...
Triggers L2/R2 (ADC)
Triggers L2/R2 (ADC)
Buttons x18 (GPIO)
Buttons x18 (GPIO)
PC/Laptop (USB-C HID)
PC/Laptop (USB-C HID)
Vibration Motor (PWM)
Vibration Motor (PWM)
Power Supply (USB-C 5v)
Power Supply (USB-C 5v)
Joysticks x2 (ADC)
Joysticks x2 (ADC)
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/index.md b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/index.md new file mode 100644 index 00000000000..7156331385a --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/index.md @@ -0,0 +1,235 @@ +# Game Controller + +A custom wired game controller inspired by Xbox/PlayStation designs, built on STM32 Nucleo-U545RE-Q, connected to the host via USB-C. + +:::info + +**Author**: Țopa Mihai-Sebastian \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-topa-mihai-sebastian + +::: + +--- + +## Description + +This project is a **wired game controller** that connects to a computer via **USB-C**, presenting itself as a standard **HID (Human Interface Device)** — natively recognized by any modern operating system, no extra drivers needed. + +The controller features: +- **2 analog joysticks** (left/right), each with a clickable button (L3/R3) +- **2 analog triggers** (L2/R2), each with its own linear potentiometer +- **4 face buttons** (A, B, X, Y) +- **D-Pad** (4 directions) +- **Shoulder buttons** (L1, R1) +- **Vibration motor** for haptic feedback, PWM-controlled +- USB-C powered — no batteries needed +- Fully recognized by **Steam** (Steam Input) — all axes, buttons, and triggers work correctly + +I initially planned a two-microcontroller architecture (STM32 + ESP32-C3) communicating over Bluetooth LE, but decided against it — coordinating BLE HID between two microcontrollers turned out to be quite complex. The final design uses a **single STM32 Nucleo-U545RE-Q** that reads all inputs and connects directly to the host as a USB HID gamepad. + +--- + +## Motivation + +As an avid gamer, I wanted to understand how a controller works from the ground up — from analog signal acquisition to OS-level communication. This project lets me work with ADC, GPIO, PWM, and USB HID all in one practical device. + +--- + +## Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ INPUT LAYER │ +│ [Joystick L] [Joystick R] [Trigger L] [Trigger R] │ +│ [Buttons x12] [Vibration Motor] │ +└───────────────────────┬─────────────────────────────────────┘ + │ ADC / GPIO / PWM + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ STM32 Nucleo-U545RE-Q │ +│ - Reads ADC: 4 joystick axes + 2 triggers │ +│ - Reads GPIO: 12 buttons │ +│ - Controls vibration motor via PWM │ +│ - Acts as USB HID Gamepad │ +└───────────────────────┬─────────────────────────────────────┘ + │ USB-C + ▼ + [ PC / Laptop ] +``` + +--- + +## Log + +### Week 1 +- Defined the architecture and component list. +- Researched the USB HID protocol for gamepads. + +### Week 2 +- Wired the joysticks and verified ADC readings on all 4 axes. +- Wired all buttons and verified GPIO readings. + +### Week 3 +- Implemented USB HID on the STM32 using the Embassy USB stack. +- Tested controller recognition by the operating system. + +### Week 4 +- Wired the potentiometers for the analog triggers. +- Wired the vibration motor and tested PWM control. +- Full integration test. +- Added the controller to Steam and configured it using Steam Input. Steam correctly detects all axes, buttons, and triggers. The controller is fully functional in Steam. + +--- + +## Hardware + +### Main Components + +#### 1. STM32 Nucleo-U545RE-Q +The only microcontroller in the project. Reads all inputs, controls the vibration motor, and communicates with the host via USB HID. + +- 6 ADC channels: Joystick L (X, Y), Joystick R (X, Y), Trigger L, Trigger R +- 12 GPIO pins for buttons +- 1 PWM output for the vibration motor (TIM3 CH1) +- USB Full Speed via USB-C (PA11/PA12) to the host +- Powered via USB-C; provides 3.3V on Morpho pins (CN7) for peripherals + +#### 2. Analog Joysticks PS2 Module (×2) +Standard XY joystick modules with integrated push-button (L3/R3). Each module: VCC, GND, VRx, VRy, SW. + +- VRx/VRy → 2 ADC channels per joystick +- SW → GPIO with internal pull-up + +#### 3. Tactile Buttons 12×12mm (×12) +A, B, X, Y, L1, R1, D-Pad ×4, L3, R3. + +- Wired between GPIO and GND, internal pull-up enabled in firmware + +#### 4. Analog Triggers — Linear Potentiometers 10K (×2) +One potentiometer per trigger (L2 and R2). + +- Wiper → ADC channel on STM32 +- 0–3.3V range mapped to the trigger axis value + +#### 5. Vibration Motor (PWM, DC, 3–5V) +ERM coin-type motor, driven by an NPN transistor (S8050 or BC337) and a flyback diode (1N4148). + +``` +STM32 GPIO (PWM) → Transistor base → Motor → 3.3V + 1N4148 in parallel with motor +``` + +#### 6. Power Supply + +The board is powered via USB-C (5V from the USB bus). The Nucleo's onboard regulator provides 3.3V on the Morpho pins (CN7) for all peripherals. No external regulator is needed. + +--- + +### Schematics + +![Diagrama controller](./diagrama.svg) + +![Schematic](./schematic.svg) + +The schematic covers the following connections: + +**Joysticks (×2)** +| Signal | STM32 Pin | +|--------|-----------| +| Joystick L — VRx | PA0 (ADC1) | +| Joystick L — VRy | PA1 (ADC1) | +| Joystick L — SW (L3) | PB13 | +| Joystick R — VRx | PA4 (ADC1) | +| Joystick R — VRy | PB0 (ADC1) | +| Joystick R — SW (R3) | PB14 | + +**Triggers (×2)** +| Signal | STM32 Pin | +|--------|-----------| +| Trigger L2 — wiper | PC1 (ADC1) | +| Trigger R2 — wiper | PC0 (ADC1) | + +**Buttons (×12)** +| Button | STM32 Pin | +|--------|-----------| +| A | PA3 | +| B | PA2 | +| X | PC6 | +| Y | PB10 | +| L1 | PC9 | +| R1 | PC10 | +| D-Up | PB8 | +| D-Down | PA8 | +| D-Left | PC8 | +| D-Right | PC7 | +| L3 | PB13 | +| R3 | PB14 | + +**Vibration Motor** +| Signal | STM32 Pin | +|--------|-----------| +| PWM control | PB4 (TIM3 CH1) | + +**USB** +| Signal | STM32 Pin | +|--------|-----------| +| USB D- | PA11 | +| USB D+ | PA12 | + +--- + +### Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| STM32 Nucleo-U545RE-Q | Main microcontroller + USB HID | ~110 RON *(owned)* | +| Joystick Module 2-Axis XY ×2 | Left + right joystick with L3/R3 | 5.45 RON × 2 | +| Tactile Button PCB 12×12×7.3mm ×12 | A, B, X, Y, D-Pad ×4, L1, R1, L3, R3 | 1.33 RON × 12 | +| Linear Potentiometer Module 10K ×2 | Analog triggers L2 and R2 | 12.52 RON × 2 | +| Vibration Motor Module DC PWM 3–5V | Haptic feedback | 5.36 RON | +| Breadboard 800p ×1 | Prototyping base | ~14 RON | +| Dupont Wire 30cm M-M ×2 (40pcs/set) | Breadboard connections | 8.39 RON × 2 | +| Dupont Wire 30cm M-F ×1 (40pcs/set) | Module connections | 7.59 RON | +| Ceramic Capacitor Set 300pcs | VCC / ADC decoupling | 12.55 RON | +| Resistor Kit 30 values 600pcs | Pull-up / protection | 15.16 RON | +| | Subtotal (components) | 123.34 RON | +| | Delivery | 15.15 RON | +| | **Total (cart incl. VAT)** | **138.49 RON** | +| | **Grand Total (incl. Nucleo)** | **~248 RON** | + +--- + +## Software + +Firmware is written in **Rust** using the **Embassy** async framework for STM32. + +### Key components + +- **USB HID** — `embassy-usb` with a custom 8-byte gamepad report descriptor (12 buttons + 4 axes + 2 triggers). The device presents itself as a Game Pad (Usage Page 0x01, Usage 0x05) for maximum OS compatibility. +- **ADC** — `embassy-stm32` ADC1, blocking reads at ~19.5 cycles sample time. Raw 14-bit values mapped to signed 8-bit axis values via `adc_to_axis()`. +- **GPIO** — 12 buttons, active-low with internal pull-up. Press events detected on falling edge (bit was 0, now 1). +- **PWM** — TIM3 CH1 on PB4 drives the vibration motor. Duty cycle: 100% when R2 trigger is maxed out, 70% for 500 ms every 10 seconds otherwise. +- **Clocks** — HSI @ 16 MHz for the CPU; HSI48 (synced from USB SOF) for the USB peripheral; SYS clock routed to ADC. + +### HID report layout (8 bytes) + +| Byte | Content | +|------|---------| +| 0 | Buttons 0–7 (A, B, X, Y, L1, R1, D-Up, D-Down) | +| 1 | Buttons 8–11 (D-Left, D-Right, L3, R3) + 4-bit padding | +| 2 | LX axis (i8) | +| 3 | LY axis (i8) | +| 4 | RX axis (i8) | +| 5 | RY axis (i8) | +| 6 | L2 trigger (u8, 0–255) | +| 7 | R2 trigger (u8, 0–255) | + +The main loop runs at ~200 Hz (5 ms `Timer::after`). USB HID and USB stack are joined as two concurrent async tasks via `embassy-futures::join`. + +--- + +## Links + +1. [Embassy Async Embedded Framework (Rust)](https://embassy.dev/) +2. [USB HID Usage Tables (Gamepad)](https://usb.org/sites/default/files/hut1_21.pdf) +3. [STM32 Nucleo-U545RE-Q User Manual (UM3062)](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-board-mb1841-stmicroelectronics.pdf) diff --git a/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/schematic.svg new file mode 100644 index 00000000000..ac749a1cedc --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/mihai.topa/schematic.svg @@ -0,0 +1 @@ +SVG Image created as Schematic.svg date 2026-05-17T13:53:06 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: schematic.kicad_schSheet: /SW3XPWR_FLAGGND+3V3+3V3+3V3+3V3+3V3+3V3SW7D-UpGNDGNDGNDSW12R3VBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETxGNDGNDPWR_FLAG123J5Vibration_Motor+3V3SW4YGNDGNDSW1B+3V3GNDGNDSW11L3GNDGND+3V3123J3Trigger_L2123J4Trigger_R2SW9D-LeftGNDSW2ASW8D-DownGNDGNDSW10D-Right+3V3+3V3GND12345J2Joystick_Right12345J1Joystick_LeftGNDSW6R1GNDSW5L1GNDSW1B+3V3GNDGNDSW2ASW8D-DownGNDGND+3V3J2Joystick_Right12345J1Joystick_Left12345GNDSW3XGNDSW5L1GNDSW6R1GND+3V3GNDSW10D-RightGNDSW9D-LeftJ4Trigger_R2123J3Trigger_L2123+3V3GNDGNDSW11L3GNDGNDSW4Y+3V3J5Vibration_Motor123PWR_FLAGGNDGNDU1STM32U545RETxVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64SW12R3GNDGNDGNDSW7D-Up+3V3+3V3+3V3+3V3+3V3+3V3PWR_FLAG diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/architecture_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/architecture_diagram.svg deleted file mode 100644 index 458e81de02a..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/architecture_diagram.svg +++ /dev/null @@ -1,133 +0,0 @@ - -Bluetooth Car & Remote Controller – system architecture -Two-unit system: Remote Controller on the left with joystick, Nucleo master, HC-05 Bluetooth master; Mobile Car on the right with HC-05 slave, Nucleo slave, motor driver, DC motors, OLED display, and Servo with ToF sensor. Connected via a Bluetooth wireless link. - - - - - - - - - -Remote controller - - - - - Joystick - Analog X/Y input - - - -ADC - - - - - Nucleo (master) - ADC · packet TX - - - -UART - - - - - HC-05 module - BT master, TX - - - - -Bluetooth - - - -Mobile car - - - - - HC-05 module - BT slave, RX - - - -UART - - - - - Nucleo (slave) - UART · PWM · I2C - - - - - - - - - - -I2C - - - - - Motor driver - L298N H-Bridge - - - - - - - - DC motors ×2 - Drive wheels - - - - - - OLED display - SSD1306, I2C - - - - - - Servo + ToF - VL53L0X radar - - diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/arhitectura.svg b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/arhitectura.svg new file mode 100644 index 00000000000..32b4f50d6a0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/arhitectura.svg @@ -0,0 +1,4 @@ + + + +
UART (PA2=TX, PA3=RX)  3.3V
UART (PA2=TX, PA3=RX)  3.3V
GPIO (PB3, PB5, PB4, PB10)
GPIO (PB3, PB5, PB4, PB10)
I2C (PB6=SCL, PB7=SDA)   3.3 V
I2C (PB6=SCL, PB7=SDA)   3.3 V
  • PWM (PC6)  5V

PWM (PC6)  5V
STM32 Nucleo 
MCU
STM32 Nucleo...
Sursa Alimentare
(USB Power Bank)
Sursa Alimentare...
Modul Bluetooth HC-05
Modul Bluetooth...
OUT1/2
OUT1/2
OUT3/4
OUT3/4
Motor Driver L298N
Motor Driver...
Motor DC Stanga
Motor DC Stan...
Motor DC Dreapta
Motor DC Drea...
Senzor Distanta ToF
(VL53L0X)
Senzor Distan...
Servomotor 
(SG90)
Servomotor...
UART (PA2=TX, PA3=RX)   3.3V
UART (PA2=TX, PA3=RX)   3.3V
I2C (PB6=SCL, PB7=SDA)  3.3 V
I2C (PB6=SCL, PB7=SDA)  3.3 V
DC (PA0=X, PA1=Y) & GPIO (PA8=Btn)   3.3V
DC (PA0=X, PA1=Y) & GPIO (PA8=Btn)   3.3V
STM32 Nucleo 
MCU
STM32 Nucleo...
Sursa Alimentare
(USB Power Bank)
Sursa Alimentare...
Modul Bluetooth
HC-05
Modul Bluetooth...
Display OLED 0.96
(SSID1306)
Display OLED 0.96...
Modul Joystick Analogic
Modul Joystick An...
Baterie Motoare (6V
Baterie Motoare (...
GND
GND
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/hardware.webp b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/hardware.webp new file mode 100644 index 00000000000..d173bff3b4d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/hardware.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/index.md b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/index.md index 5e4a1d96850..5a839fd7b02 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/index.md @@ -12,7 +12,7 @@ A dual-unit system featuring wireless control and real-time telemetry. ## Description -The project is a Bluetooth-based robotic system consisting of a 2-wheeled mobile car and a dedicated handheld remote. Both units utilize STM32 Nucleo-64 microcontrollers. The remote reads joystick inputs to transmit directional data, while the car processes these signals to drive two DC motors. The system also integrates a ToF sensor for distance monitoring and an OLED display for real-time telemetry. +The project is a Bluetooth-based robotic system consisting of a 2-wheeled mobile car and a dedicated handheld remote. Both units utilize STM32 Nucleo-U545RE-Q microcontrollers. The remote reads joystick inputs to transmit directional data, while the car processes these signals to drive two DC motors. The system also integrates a ToF sensor for distance monitoring and an OLED display for real-time telemetry. ## Motivation @@ -32,6 +32,8 @@ The system architecture is divided into two main hardware-software modules: - **Processing**: Movement logic and motor speed calculation. - **Output**: PWM for Motor Driver, I2C for OLED and ToF Sensor. +![System Architecture](./arhitectura.svg) + ## Log ### Week 13 - 19 April @@ -42,22 +44,34 @@ The system architecture is divided into two main hardware-software modules: ### Week 20 - 26 April - Soldered header pins for the motor driver, OLED, and ToF sensor. - Verified power delivery from the 4xAA battery pack. -- Completed 1st version of the documentation +- Completed 1st version of the documentation. ### Week 27 - 03 May +- Configured GPIO pins and basic PWM channels for driving the L298N motor controller. + +### Week 04 - 10 May +- Connected the SSD1306 OLED display via I2C using the `embedded-graphics` library. +- Integrated the VL53L0X Time-of-Flight (ToF) sensor. + +### Week 11 - 17 May +- Developed the async UART communication tasks for the HC-05 modules. ## Hardware -The hardware architecture features two STM32F401RE Nucleo-64 boards configured in a Master-Slave setup for synchronized control. The Remote Controller acts as the Master, reading analog joystick positions via ADC and transmitting serial commands through an HC-05 Bluetooth module. The Mobile Car serves as the Slave, parsing UART strings to drive two DC motors via an L298N H-Bridge using PWM signals. Additionally, the system integrates an SG90 servomotor to sweep a VL53L0X ToF sensor for distance monitoring, providing real-time visual feedback on an SSD1306 OLED display via the I2C bus. +The hardware architecture features two STM32 Nucleo-U545RE-Q boards configured in a Master-Slave setup for synchronized control. The Remote Controller acts as the Master, reading analog joystick positions via ADC and transmitting serial commands through an HC-05 Bluetooth module. The Mobile Car serves as the Slave, parsing UART strings to drive two DC motors via an L298N H-Bridge using PWM signals. Additionally, the system integrates an SG90 servomotor to sweep a VL53L0X ToF sensor for distance monitoring, providing real-time visual feedback on an SSD1306 OLED display via the I2C bus. ### Schematics -![System Architecture](./architecture_diagram.svg) +#### Mobile Car Unit (Slave) Schematic +![Mobile Car Schematic](./masina.webp) +#### Remote Controller (Master) Schematic +![Remote Controller Schematic](./telecomanda.webp) +![Assembled Robot](./hardware.webp) ### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [2x STM32 Nucleo-64 (F401RE)](https://www.st.com/en/evaluation-tools/nucleo-f401re.html) | Microcontrollers (Car & Remote) | [~240 RON](https://www.st.com/en/evaluation-tools/nucleo-f401re.html) | +| 2x STM32 Nucleo-U545RE-Q| Microcontrollers (Car & Remote) | Lab Provided| | [2x HC-05 Bluetooth Module](https://www.emag.ro/modul-bluetooth-master-slave-hc-05-cu-adaptor-compatibil-3-3-v-si-5-v-6-pini-ai123-s113/pd/DQG1TWBBM/?ref=history-shopping_482799714_38837_1) | Wireless communication link | [60 RON](https://www.optimusdigital.ro/ro/wireless-bluetooth/12-modul-bluetooth-hc-05.html) | | [Joystick Module](https://www.emag.ro/modul-joystick-pentru-arduino-keyestudio-3-3-5v-analogic-x2-digital-x1-negru-galben-86560/pd/D6VMVFYBM/) | Remote control steering | [35 RON](https://www.optimusdigital.ro/ro/senzori-senzori-pozitie/166-modul-joystick-ps2.html) | | [SSD1306 OLED Display](https://www.emag.ro/afisaj-oled-0-96-i2c-iic-ssd1306-128x64px-3-5v-e498/pd/DX0LYDYBM/?ref=history-shopping_482799714_164433_1) | On-board telemetry display | [18 RON](https://www.optimusdigital.ro/ro/optoelectronica-lcd-uri/161-display-oled-096-cu-interfaa-i2c-albastru-galben.html) | diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/masina.webp b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/masina.webp new file mode 100644 index 00000000000..8fbdca2921d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/masina.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/telecomanda.webp b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/telecomanda.webp new file mode 100644 index 00000000000..a9c2d364eea Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/miruna.oncioiu/telecomanda.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/architecture.svg new file mode 100644 index 00000000000..89e33c08465 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/architecture.svg @@ -0,0 +1 @@ +Storage and CommunicationSensors (3V3 from Nucleo onboard LDO)I2CI2CI2CUART1UART2SPIUART3 JSONWiFi / REST5V rail PMS5003,STM32 E5V, XIAO 5VPower ChainSolar Panel9V / 2WMP1584Buck 9V → 5.5VCN3065Solar ChargerLi-Ion 18650NCR18650B Protected3.7VMT3608Boost → 5VSingle RailBME280Temp / RH / PSGP40VOC IndexMiCS-4514CO / NO2 / NH3 / VOCPMS5003PM2.5 / PM10(5V fan)NEO-6MGPSSTM32 Nucleo U545RE-QCortex-M33 @ 160MHzE5V → onboard LDO U15→ 3V3 rail (max 500mA)microSDFAT32 (SPI)XIAO ESP32-C6WiFi 6 / BLE 5.35V → onboard LDO → 3V3REST: /api/current/api/history/api/battery/api/locationMobile AppGraphs · Map · Battery · Alerts \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/index.md b/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/index.md index a696d1844d2..dd7cd7ac9af 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/ovidiu.defta/index.md @@ -1,7 +1,8 @@ # AeroGuard -Monitor Solar de Poluare Atmosferica cu GPS -:::info +Solar-powered air quality monitor with GPS. + +:::info **Author**: Defta Ovidiu 344C2 \ **GitHub Project Link**: [UPB-PMRust-Students/acs-project-2026-odefta](https://github.com/UPB-PMRust-Students/acs-project-2026-odefta) @@ -10,69 +11,99 @@ Monitor Solar de Poluare Atmosferica cu GPS ## Description -Sistem portabil de monitorizare a calitatii aerului, alimentat solar. Achizitioneaza periodic date de la senzori de particule in suspensie (PM2.5/PM10), gaze (NOx, CO, VOC), temperatura si umiditate, corelate cu coordonate GPS si timestamp. Datele sunt stocate local pe card microSD in format JSON si expuse printr-un server web embedded via WiFi, prin endpoint-uri REST. O aplicatie mobila consuma API-ul si afiseaza grafice de poluare, pozitia pe harta si nivelul bateriei. Sistemul functioneaza autonom prin alimentare solara cu modul de incarcare si baterie Li-Ion. +Portable air quality station running off a solar panel and an 18650 cell. An STM32 reads particulate matter (PM2.5 / PM10), gases (CO, NO₂, NH₃, VOCs), temperature, humidity, and pressure, and tags every sample with GPS coordinates plus a timestamp. Readings are logged as JSON on a microSD card and served over Wi-Fi by a XIAO ESP32-C6 co-processor that runs a small REST server. A companion mobile app pulls the API and renders charts, the location on a map, and the battery state. ## Motivation -Statiile de monitorizare a calitatii aerului sunt rare si costisitoare, iar datele publice au granularitate scazuta. AeroGuard propune o solutie portabila, autonoma energetic, care permite monitorizarea locala a poluarii si vizualizarea datelor in timp real printr-o aplicatie mobila. +Professional air quality stations are lab-accurate but cost tens of thousands of euros each, so they end up sparse — only a handful per city — and the data they publish online is averaged over an entire district. AeroGuard takes the opposite trade-off: a solar-powered monitor built from off-the-shelf modules, for a small fraction of the price of a real station, that pulls in particulate matter (PM1.0 / PM2.5 / PM10), common pollutant gases (CO, NO₂, NH₃), a VOC index, temperature, humidity, atmospheric pressure, and GPS coordinates with an accurate UTC timestamp — and logs all of it every few seconds. The numbers are not lab-grade, but the device runs unattended for days on the balcony, can be moved wherever I want to measure, and gives me a far richer picture of what is actually in the air around it than any public source. ## Architecture - +![AeroGuard architecture](architecture.svg) + +Battery monitoring uses a 2 × 100 kΩ divider into an STM32 ADC pin and is exposed through `/api/battery`. Reverse-polarity protection on the SOLAR+ and BATT+ rails is done with 1N5819 Schottky diodes. Overcurrent / overcharge / overdischarge protection is taken care of by the Seiko S-8261 PCB built into the protected NCR18650B cell — no external polyfuse needed (a 1 A polyfuse would have nuisance-tripped on the Wi-Fi TX bursts anyway). A 470 µF bulk cap sits on the MP1584 output to keep the buck converter stable under PMS5003 fan inrush. ## Log -### Week 5 - 11 May +### Week 14 — 20 April -### Week 12 - 18 May +Picked the MCU stack: STM32 Nucleo U545RE-Q + XIAO ESP32-C6 as a Wi-Fi co-processor, both in Rust with embassy, talking to each other over UART with JSON. Checked drivers on crates.io — most sensors are covered, the MiCS-4514 is not, so I'll port the DFRobot Arduino library by hand. Sketched the power chain (panel → buck → charger → 18650 → boost) and made a buy list. -### Week 19 - 25 May +### Week 21 — 27 April + +Ordered everything on April 22 from eMag, Optimus Digital, depozitulcubaterii, sigmanortec, DigiKey and Robofun. All parts arrived by the end of the week. Wrote most of this documentation page and put together the architecture diagram. ## Hardware -Microcontrolerul **STM32** citeste date de la senzorii de calitate a aerului prin **I2C** (BME280, SGP40), **UART** (PMS5003, NEO-6M) si **ADC** (MICS-4514). Datele sunt stocate pe **card microSD** via **SPI**. Comunicatia WiFi se realizeaza printr-un modul **ESP** conectat prin UART. +The STM32 talks to all sensors over standard buses: **I2C** for BME280, SGP40 and MiCS-4514, **UART** for PMS5003 and NEO-6M GPS, **SPI** for the microSD card. The XIAO ESP32-C6 sits on another UART and handles Wi-Fi and the REST API. + +Power flows like this: a 9V / 2W polycrystalline panel feeds an MP1584 buck converter trimmed to 5.5 V (the upper limit on the CN3065 input). The CN3065 is a solar-optimised single-cell Li-Ion charger — unlike a TP4056, it does not collapse the panel under low light, which matters when the sun is behind a cloud. It charges a Panasonic NCR18650B Protected cell (3.7 V, 3400 mAh, with the Seiko S-8261 PCB built into the cell). A MT3608 boost converter lifts the battery voltage to a clean 5 V rail that feeds three loads: the PMS5003 fan, the STM32 Nucleo via its E5V pin, and the XIAO ESP32-C6 via its 5V pin. The Nucleo's onboard LDO (U15, LD39050PU33R, max 500 mA) generates the 3.3 V rail that powers every I2C / UART sensor and the SD module — no external AMS1117 needed. -Alimentarea se face printr-un **panou solar 5V/1W** conectat la un modul de incarcare **TP4056**, care incarca o **baterie Li-Ion 18650**. Nivelul bateriei este monitorizat prin ADC. +The two trimmer-based switching modules (MP1584 and MT3608) ship from the factory at unpredictable output voltages (the MT3608 in particular can be set to 28 V out of the box). Both get calibrated against a multimeter **before** anything else is connected to them. ### Schematics - + ### Bill of Materials -| Device | Usage | Price | -|--------|-------|-------| -| STM32 (TBD) | Microcontroler principal | TBD | -| ESP module (TBD) | Comunicatie WiFi | TBD | -| [PMS5003](https://www.aqmd.gov/docs/default-source/aq-spec/resources-page/plantower-pms5003-manual_v2-3.pdf) | Senzor particule PM2.5/PM10 | TBD | -| [MICS-4514](https://www.sgxsensortech.com/content/uploads/2023/03/MiCS-4514-rev-16.pdf) | Senzor NOx/CO | TBD | -| [SGP40](https://sensirion.com/products/catalog/SGP40/) | Senzor VOC | TBD | -| [BME280](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/) | Senzor temperatura/umiditate | TBD | -| [NEO-6M](https://www.u-blox.com/en/product/neo-6-series) | Modul GPS | TBD | -| Card microSD + cititor SPI | Stocare date | TBD | -| Panou solar 5V/1W | Alimentare | TBD | -| TP4056 | Modul incarcare | TBD | -| Baterie Li-Ion 18650 | Stocare energie | TBD | +Unit prices in RON (VAT included), at the quantity actually needed for one AeroGuard. I bought a few extras (one or two spares on the modules that are most likely to fail at first power-up), but those are not counted here. + +| Device | Usage | Price (RON) | +|--------|-------|-------------| +| [STM32 Nucleo U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main MCU (Cortex-M33 @ 160 MHz, 512 KB flash, ultra-low-power U5) | lab provided | +| [Seeed XIAO ESP32-C6](https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/) | Wi-Fi 6 / BLE 5.3 co-processor | 110 | +| [DFRobot SEN0377 (MiCS-4514)](https://www.dfrobot.com/product-2417.html) | CO / NO₂ / NH₃ via I2C | 175 | +| [Plantower PMS5003](https://github.com/m2mlorawan/datasheet/blob/master/plantower-pms5003-manual_v2-3.pdf) | PM1.0 / PM2.5 / PM10 via UART (5 V fan + laser) | 90 | +| [Sensirion SGP40](https://sensirion.com/products/catalog/SGP40/) (Gravity module) | VOC index via I2C | 50 | +| [Bosch BME280](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/) breakout | Temperature / humidity / pressure via I2C | 15 | +| [u-blox NEO-6M GPS](https://www.u-blox.com/en/product/neo-6-series) module + antenna | GPS over UART (NMEA) | 20 | +| microSD module (SPI) + 16 GB card | JSON log storage (FAT32) | 40 | +| 9V / 2W polycrystalline solar panel (130 × 200 mm) | Energy harvesting | 25 | +| [MP1584](https://www.monolithicpower.com/en/mp1584.html) buck module | 9 V → 5.5 V (panel → CN3065 input) | 7 | +| [CN3065](https://content.instructables.com/FGJ/QXX8/MH9I7U1D/FGJQXX8MH9I7U1D.pdf) solar charger | Single-cell Li-Ion charging (4.2 V out, 4.4–6 V in) | 10 | +| [Panasonic NCR18650B Protected](https://depozitulcubaterii.ro/home/1767-acumulator-li-ion-panasonic-ncr18650b-3400mah-3-7v-made-in-japan-1767.html) | 3400 mAh Li-Ion with Seiko S-8261 PCB | 75 | +| 18650 holder with leads | Battery mount | 15 | +| [MT3608](https://www.olimex.com/Products/Breadboarding/BB-PWR-3608/resources/MT3608.pdf) boost module | 3.7 V → 5 V single rail | 25 | +| 1N5819 Schottky diodes ×2 | Reverse-polarity protection on SOLAR+ and BATT+ | 10 | +| 470 µF / 25 V electrolytic | Bulk cap on MP1584 output | 5 | +| JST-PH 2.0 mm 2-pin pigtails ×3 | CN3065 solar / battery / system connectors | 6 | +| Hookup wire (22 AWG, ~3 m) | Wiring | 5 | ## Software | Library | Description | Usage | |---------|-------------|-------| -| `embassy-rs` | Framework async pentru microcontrolere | Runtime si task-uri async | -| `embassy-stm32` | Suport Embassy pentru STM32 | Acces hardware low-level | -| `embassy-time` | Functionalitati de timp | Timere si delay-uri | -| `embassy-net` | Stack de retea | Comunicatie TCP/IP | -| `embedded-hal` | Abstractizari hardware | Interfete I2C, SPI, UART, ADC | -| `serde` / `serde_json_core` | Serializare/deserializare | Format JSON pentru date si API | -| `embedded-sdmmc` | Suport card microSD | Stocare fisiere FAT32 | -| `bme280` | Driver BME280 | Citire temperatura/umiditate | -| `nmea0183` | Parser date GPS | Parsare coordonate NMEA | -| `defmt` | Logging embedded | Debug si logging | -| `heapless` | Structuri de date fara alocare dinamica | Buffere si colectii no_std | +| [embassy-executor](https://docs.embassy.dev/embassy-executor/) | Async task executor | Runs the main loop on both MCUs | +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32/) | STM32 async HAL | Peripheral access on the Nucleo (feature `stm32u545re`) | +| [embassy-time](https://docs.embassy.dev/embassy-time/) | Async timers and delays | Sensor polling intervals, debouncing | +| [embassy-net](https://docs.embassy.dev/embassy-net/) | Async TCP/IP stack | Network layer on the ESP32-C6 side | +| [embassy-sync](https://docs.embassy.dev/embassy-sync/) | Async sync primitives | Channels and signals between tasks | +| [esp-hal](https://github.com/esp-rs/esp-hal) | ESP32-Cx HAL | XIAO ESP32-C6 peripherals, target `riscv32imac-unknown-none-elf` | +| [esp-hal-embassy](https://docs.rs/esp-hal-embassy) | Embassy time driver | Glues Embassy executor to esp-hal | +| [esp-wifi](https://github.com/esp-rs/esp-wifi) | Wi-Fi / BLE driver | Wi-Fi connection on the ESP32-C6 | +| [picoserve](https://docs.rs/picoserve) | Embassy-native HTTP server | Serves the REST API to the mobile app | +| [bme280-rs](https://docs.rs/bme280-rs) | BME280 async driver | Reading temperature / humidity / pressure | +| [sgp40](https://docs.rs/sgp40) | SGP40 VOC sensor driver | Reading the VOC index | +| [pmsx003](https://docs.rs/pmsx003) | PMS5003 frame parser | Decoding the 32-byte particulate matter packets | +| [nmea](https://docs.rs/nmea) | NMEA-0183 parser | Parsing GPS sentences from the NEO-6M | +| [embedded-sdmmc](https://docs.rs/embedded-sdmmc) | FAT32 over SPI | Writing JSON log lines to the microSD card | +| [serde](https://docs.rs/serde) + [serde-json-core](https://docs.rs/serde-json-core) | `no_std` JSON serializer | Encoding REST responses and SD log lines | +| [heapless](https://docs.rs/heapless) | `no_std` collections | Fixed-capacity buffers and string types | +| [defmt](https://docs.rs/defmt) | Embedded logger | Debug logs streamed via [probe-rs](https://probe.rs/) | + +For the MiCS-4514 there is no Rust crate, so I'm porting [DFRobot's Arduino library](https://github.com/DFRobot/DFRobot_MICS). The chip exposes its readings over I2C through a simple register interface, so the port is mostly translating a handful of read/write helpers and the calibration math. ## Links -1. [Embassy-rs Documentation](https://embassy.dev/) -2. [PMS5003 Datasheet](https://www.aqmd.gov/docs/default-source/aq-spec/resources-page/plantower-pms5003-manual_v2-3.pdf) -3. [BME280 Datasheet](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/) -4. [SGP40 Datasheet](https://sensirion.com/products/catalog/SGP40/) +1. [Embassy book](https://embassy.dev/) +2. [esp-rs book](https://docs.esp-rs.org/book/) +3. [STM32U5 reference manual (RM0456)](https://www.st.com/resource/en/reference_manual/rm0456-stm32u575585-armbased-32bit-mcus-stmicroelectronics.pdf) +4. [Nucleo-64 user manual UM3062 (MB1841)](https://www.st.com/resource/en/user_manual/um3062-stm32u5-series-nucleo64-board-stmicroelectronics.pdf) +5. [XIAO ESP32-C6 wiki](https://wiki.seeedstudio.com/xiao_esp32c6_getting_started/) +6. [PMS5003 datasheet](https://github.com/m2mlorawan/datasheet/blob/master/plantower-pms5003-manual_v2-3.pdf) +7. [MiCS-4514 datasheet](https://www.sgxsensortech.com/content/uploads/2023/03/MiCS-4514-rev-16.pdf) +8. [SGP40 datasheet](https://sensirion.com/products/catalog/SGP40/) +9. [BME280 datasheet](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/) +10. [DFRobot SEN0377 product page](https://www.dfrobot.com/product-2417.html) +11. [DFRobot_MICS Arduino driver (source for the Rust port)](https://github.com/DFRobot/DFRobot_MICS) diff --git a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto1.webp b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto1.webp new file mode 100644 index 00000000000..78982d2c9b5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto2.webp b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto2.webp new file mode 100644 index 00000000000..555f2f3f545 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto3.webp b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto3.webp new file mode 100644 index 00000000000..a762cb8ed08 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/foto3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/image.webp b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/image.webp new file mode 100644 index 00000000000..a2a5a628441 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/image.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/index.md b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/index.md index b47692a999a..d9bd98c2231 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/petru.ruse/index.md @@ -25,6 +25,9 @@ Am ales acest proiect pentru a explora provocările controlului fizic de precizi ## Log * **Săptămâna 20 - 26 Aprilie:** Cercetare componente, definirea arhitecturii software/hardware și completarea formularului de proiect pe Moodle. Am finalizat și plasat comenzile pentru toate componentele fizice. +* **Săptămâna 27 Aprilie - 3 Mai:** Asamblarea hardware inițială (conectarea STM32 cu CNC Shield) și dezvoltarea primei versiuni de software pentru testarea mișcării de bază. +* **Săptămâna 4 - 10 Mai:** Construcția mecanică a pistei adusă aproape de finalizare (montarea axelor liniare T8) și scrierea versiunii finale de software (implementarea mediului asincron). +* **Săptămâna 11 - 18 Mai:** Finalizarea mecanică și electrică a sistemului, depanarea ultimelor erori hardware/software și redactarea documentației finale. ## Hardware & Bill of Materials (BOM) Sistemul utilizează componente electromecanice solide pentru axele liniare, controlate de drivere dedicate pentru a asigura o mișcare fluidă. Logica este izolată electric de circuitul de forță prin folosirea CNC Shield-ului. @@ -52,6 +55,14 @@ Sistemul utilizează componente electromecanice solide pentru axele liniare, con | **embassy-time** | Timer asincron | Generarea delay-urilor non-blocante pentru profilul de viteză. | | **defmt** | Logging framework | Depanarea stărilor sistemului și a datelor de pe senzorul ADC. | +## Schematics +![Schema Electrica a Proiectului](image.webp) + +## Photos +![Pista Cursa](./foto1.webp) +![Shield si Sursa](./foto2.webp) +![Placa, Breadboard si Ecran](./foto3.webp) + ## Links * [Embassy Rust Documentation](https://embassy.dev/) * [A4988 Stepper Motor Driver Datasheet](https://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pdf) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_architecture_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_architecture_schematic.webp new file mode 100644 index 00000000000..29cda6c3d53 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_architecture_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_kicad_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_kicad_schematic.webp new file mode 100644 index 00000000000..daa6177b80c Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/final_kicad_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/index.md b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/index.md new file mode 100644 index 00000000000..342c0633935 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/radu.vasilescu0510/index.md @@ -0,0 +1,95 @@ +# Randomness-audited Wheel-of-Fortune +A motorized wheel that randomly chooses its output and also proves how fair it is. + +:::info  + +**Author**: Radu-Alexandru Vasilescu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-vasilescuradu + +::: + +## Description + +The Randomness-audited Wheel-of-Fortune is an arcade-like +product, designed to be fun and interesting. The user chooses the number of full rotations, +presses the “start game” button and the wheel begins to rotate. When it stops, the result is displayed on the LCD screen, +along with fairness statistics. The project uses an entropy source - the jitter from an +unconnected analog pin – to create a carnival experience. At the same time, +fairness is guaranteed by the chi-square test and the distribution of the results is +logged on an SD card for external audit. + +## Motivation + +I am interested in how mathematics can be +used in practical contexts and the wheel-of-fortune shows exactly that. +Probabilities and statistics have applications in domains such as economics, +physics, gambling, etc. Therefore, they are one of the most straightforward +ways to show that mathematics is not only about theory, but also about +real-life situations. + +## Architecture +![Project architecture](final_architecture_schematic.webp) + +## Log + +### Week 27 April - 3 May + +I created the documentation, containing a lot of details about the +project. +### Week 10 - 17 May + +I created the motorized wheel and presented a spin demo +for the hardware milestone. Also, I wired the pot and the button. + +### Week 18 - 24 May + +I wired the SD card reader, the EEPROM and the LEDs. +I implemented most of the required software and presented a demo for the software milestone. + +### Week 25 - 31 May + +I replaced the DC gear motor and VNH2SP30 driver with a 28BYJ-48 stepper motor and ULN2003 driver, which lets the wheel land exactly on the target slot without speed/brake calibration. I added a 16x2 LCD (4-bit mode) that shows the result and the chi-square fairness verdict after each spin, moved the start button to an analog input, and repurposed the potentiometer to select the number of full rotations. + + +## Hardware + +The hardware architecture revolves around the STM32 microcontroller. The physical rotation of the wheel is powered by a 28BYJ-48 stepper motor controlled via a ULN2003 driver, which gives exact, repeatable positioning on the target slot without any speed or brake calibration. The system is powered via a 5V USB connection. User inputs are handled by a 50k potentiometer to configure the number of full rotations and a physical push button (read as an analog voltage level) to start the game. A 16x2 LCD displays the resulting slot and the fairness verdict after each spin. The AT24C256 I2C EEPROM is used for stats logging. The MicroSDHC 8GB card and the SD card reader nano module are used for external audit. All components are prototyped and connected using a standard 830-point breadboard and a dedicated jumper wire set. + +### Schematics + +![KiCAD Schematic](final_kicad_schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo Board](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html) | The main microcontroller running the logic | ~ 100.00 RON | +| [28BYJ-48 5V Stepper Motor and Blue ULN2003 Driver Set](https://www.optimusdigital.ro/ro/motoare-motoare-pas-cu-pas/101-driver-uln2003-motor-pas-cu-pas-de-5-v-.html?srsltid=AfmBOoo7z2oDRYsy1MbzxaFBLjm9ummjQTLPcTV45-iWbfMgyH3tTVms) | Physically rotates the wheel | 16.97 RON | +| [50k Mono Potentiometer](https://www.optimusdigital.ro/ro/componente-electronice-potentiometre/1885-potentiometru-mono-50k.html?srsltid=AfmBOopsy_OdVFuYxkBoo1D9JZx9zzn1B3piJ1i7kABN3P_O6AsyTs_w) | Analog input to select the number of rotations | 1.49 RON | +| [White Round Cap Push Button](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1115-buton-cu-capac-rotund-alb.html?srsltid=AfmBOorTSdiSNy5lCZLD_elUSRuKveDm7G4lwfxWsktSIJ8Z76j-wwe5) | Analog input to trigger the spin event | 1.99 RON | +| [830 Tie-Point Breadboard and Jumper Wire Kit](https://sogest.ro/accesorii-multimetre/set-placa-test-breadboard-830-165x55x085cm-set-cabluri-breadboard-si-alimentat) | Prototyping and interconnecting all electronic modules | 39.00 RON | +| [SD card reader nano module](https://sogest.ro/module-diverse/modul-nano-cititor-de-card-sd) | Interfaces with the SD card for data logging | 16.00 RON | +| [AT24C256 I2C EEPROM Module](https://www.optimusdigital.ro/en/memories/632-modul-eeprom-at24c256.html?search_query=EEPROM&results=64) | Persistent storage for statistics across reboots | 9 RON | +| [MicroSDHC 8GB card](https://sogest.ro/carduri-microsd/card-microsdhc-8gb-clasa10-maxell-cu-adaptor-sd-x-series-micro-sdhc-8gb-ad-class10) | Physical storage medium for the external audit logs | 38 RON | +| [Display LCD1602 HD44780](https://www.bitmi.ro/display-lcd1602-hd44780-albastru-iluminat-10486.html?gad_source=1&gad_campaignid=21312430054&gbraid=0AAAAADLag-l9Mrse7Pa8BnYa5ZS0HyDMY&gclid=CjwKCAjwrNrQBhBjEiwAoR4VO28wxRhXikjyxuW3njLUfpud9TIIGEJrlRJMqJKEM_28ANK_kKp9whoCWFsQAvD_BwE) | Used for displaying results and statistics | 14 RON | + +## Software + +The software architecture is written entirely in **Rust**, utilizing the **Embassy** asynchronous execution framework. This allows the microcontroller to handle multiple concurrent tasks—such as driving the stepper motor, managing user inputs, and logging data to the SD card—without blocking the CPU. + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL | Hardware abstraction (GPIO, ADC, I2C, SPI). The EEPROM (raw I2C) and the 16x2 LCD (4-bit GPIO bit-banging) are driven directly through this HAL, without a dedicated driver crate. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs the main loop and the SD logger as concurrent async tasks. | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization primitives | Signal that passes the latest stats snapshot to the SD logger task. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping, delays and timeouts | Stepper step timing, button debounce, LCD timing. | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Standard hardware traits | SPI/GPIO traits for the SD card interface. | +| [embedded-hal-bus](https://github.com/rust-embedded/embedded-hal) | SPI/I2C bus-sharing helpers | ExclusiveDevice wrapper for the SD card on the SPI bus. | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | FAT filesystem & SD card driver | Writing CSV audit logs to the SD card. | +| [defmt](https://github.com/knurling-rs/defmt) | Efficient logging framework | Debug/info logging over RTT during development. | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Cortex-M core access | Cycle-accurate short delays (asm::delay) for the LCD enable pulse. | + +## Links + +1. [Embassy Book](https://embassy.dev/book/) - Official documentation for the Embassy async Rust framework. +2. [STM32 Rust Ecosystem](https://github.com/stm32-rs) - Repositories and Hardware Abstraction Layers for STM32 microcontrollers. \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/arhitecture.svg b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/arhitecture.svg deleted file mode 100644 index 457d3ef5124..00000000000 --- a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/arhitecture.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -

LDR Sensor Array (x4) 
 (Light Detection)

LDR Sensor Array (x4...
ADC
ADC
STM32 Nucleo Board
(Processing Unit)
STM32 Nucleo Board...
GPIO
GPIO
Status LED Indicator
Status LED Indicator
POWER
POWER
 USB Power Supply
(5V for STM32)
USB Power Supply...
GPIO
GPIO
User Button(UI)
User Button(UI)
PWM
PWM
PWM
PWM
Pan Servo Motor
(Horizontal Axis)
Pan Servo Motor...
Tilt Servo Motor
(Vertical Axis)
Tilt Servo Motor...
Ext. Power Source
Ext. Power Source
POWER(5V)
POWER(5V)
POWER(5V)
POWER(5V)
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/diagrama.svg b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/diagrama.svg new file mode 100644 index 00000000000..5118b9e4a64 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/diagrama.svg @@ -0,0 +1,4 @@ + + + +
STM32 Nucleo Board
STM32 Nucleo Board
LDR Seszor Array x4
LDR Seszor Array x4
Pan Servo Motor
Pan Servo Motor
Tilt Servo Motor
Tilt Servo Motor
Bluetooth Module
Bluetooth Module
USB Power Supply
USB Power Supply
POWER
POWER
PWM/POWER
PWM/POWER
PWM/POWER
PWM/POWER
UART
UART
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/index.md b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/index.md index 40fcc52af3a..7958eee102d 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/index.md @@ -12,7 +12,7 @@ Active dual-axis light tracking system using STM32 and embedded Rust. ## Description -The Dual-Axis Solar Tracker is a hardware and software system that automatically orients a central platform towards the strongest light source in a given environment. It uses four light-dependent resistors (LDRs) to measure ambient light intensity across four quadrants. A microcontroller processes these inputs to calculate light differentials and drives two servo motors to adjust the platform's horizontal (pan) and vertical (tilt) alignment, ensuring it remains perpendicular to the light source. +The Dual-Axis Solar Tracker is a hardware and software system that automatically orients a central platform towards the strongest light source in a given environment. It uses four light-dependent resistors (LDRs) to measure ambient light intensity across four quadrants. A microcontroller processes these inputs to calculate light differentials and drives two servo motors to adjust the platform's horizontal (pan) and vertical (tilt) alignment, ensuring it remains perpendicular to the light source. Telemetry data is transmitted via Bluetooth to a mobile application for real-time monitoring. ## Motivation @@ -20,34 +20,35 @@ My main motivation was to build an autonomous system, and a dual-axis solar trac ## Architecture -![System Architecture Diagram](./arhitecture.svg) +![System Architecture Diagram](./diagrama.svg) -The project is divided into 4 main components: Input, Processing, Output, and Power. +The project is divided into 4 main components: Input, Processing, Output, and Telemetry. **Main Components:** -* **Input:** The four Light Dependent Resistors (LDRs) send analog voltage signals to the processing unit via the ADC (Analog-to-Digital Converter), and the UI Button sends calibration or reset signals via GPIO. +* **Input:** The four Light Dependent Resistors (LDRs) send analog voltage signals to the processing unit via the ADC (Analog-to-Digital Converter). * **Processing:** The STM32 Nucleo board reads these signals asynchronously, calculates the horizontal and vertical light differentials, and determines the necessary angle adjustments. It then translates these actions into control signals (PWM) and sends them directly to the servo motors. -* **Output:** The Pan and Tilt servo motors receive the PWM commands and execute the mechanical motion to physically align the solar tracker. Additionally, a Status LED receives GPIO signals to provide visual feedback on the system's state. -* **Power:** There is a 5V power supply for the Processing Unit and the sensor array, and an external power source to safely provide the higher current required by the servo motors. +* **Output:** The Pan and Tilt servo motors receive the PWM commands and execute the mechanical motion to physically align the solar tracker. +* **Telemetry & UI:** The microcontroller packages the calculated solar data and motor angles, transmitting them via a UART interface to a Bluetooth module. A paired mobile application receives this data stream, allowing the user to monitor the tracker's status wirelessly. ## Log -### Week 20 - 26 April - -* Researched project requirements and finalized the hardware component list. -* Ordered the Pan-Tilt bracket, SG90 servos, LDRs, and required electronic components. -* Finalized documentation draft. - ### Week 27 April - 4 May +I researched the hardware requirements and ordered the necessary electronic components for the project. \ ### Week 5 - 11 May +I started writing the initial draft of the documentation and structured the main sections. \ +Afterwards, I created the system architecture diagram and updated the final bill of materials. ### Week 12 - 18 May +I assembled the mechanical pan-tilt bracket and wired the voltage dividers on the breadboard. \ +I also connected the servo motors and the Bluetooth module to the STM32 board. ### Week 19 - 25 May +I configured the ADC and PWM pins using the embedded Rust framework for control. \ +Finally, I implemented the UART data transmission. \ ## Hardware @@ -55,7 +56,7 @@ The project relies on the STM32 Nucleo-U545RE-Q as the core controller. The mech ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Circuit Schematic](./schematic.svg) ### Bill of Materials @@ -73,8 +74,11 @@ Place your KiCAD or similar schematics here in SVG format. | Library | Description | Usage | |---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Basic hardware library | Used to set up the ADC input pins for the LDR sensors, the PWM output pins for the servo motors, and the UART serial port for the Bluetooth module. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Code runner | Used to run the main asynchronous loop of the program without freezing the board. | +| [defmt](https://github.com/knurling-rs/defmt) | Console printing tool | Used to print the motor angles and raw sensor light values to the laptop screen for debugging and calibration. | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | CPU utilities and delays | Used to add hardware-level pauses in the code to give the physical servo motors enough time to reach their target angles. | +| [heapless](https://github.com/rust-embedded/heapless) | Data structures | Used to create fixed-capacity strings for packaging the angle and sensor telemetry data before transmitting it over Bluetooth. | ## Links diff --git a/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/schematic.svg new file mode 100644 index 00000000000..f32ec0de9f8 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/radu_andrei.marcea/schematic.svg @@ -0,0 +1,12453 @@ + + + +SVG Image created as Pm.svg date 2026-05-25T22:19:13 + Image generated by Eeschema-SVG + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.3 +KiCad E.D.A. 10.0.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A5 +Size: A5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: Pm.kicad_sch +File: Pm.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A0 +A0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A1 +A1 + + + + + + + + + + + + + +A2 +A2 + + + + + + + + + + + + + + + + + + +A3 +A3 + + + + + + + + + + + + + + + + + + +AIN +AIN + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 2 +Fotorezistor 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +R2 +R2 + + + + + + + + + + + + + + + + + + + + + +10k +10k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 1 +Fotorezistor 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D0 +D0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D1 +D1 + + + + + + + + + + + + + + + + + + + + + + + + + + +R1 +R1 + + + + + + + + + + + + + + + + +10k +10k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +R3 +R3 + + + + + + + + + + + + + + + + + + + + + + + + +10k +10k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3v3 +3v3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5v +5v + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VIN +VIN + + + + + + + + +POWER +POWER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + +R4 +R4 + + + + + + + + + + + + + + +10k +10k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D9 +D9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D10 +D10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3V3 ++3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3V3 ++3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +RX +RX + + + + + + + + + + + + + + + + + + +STAT +STAT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TX +TX + + + + + + + + + +VCC +VCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BLUETOOTH +BLUETOOTH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 4 +Fotorezistor 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DATE +DATE + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VCC +VCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SERVO_TILT +SERVO_TILT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +DATE +DATE + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VCC +VCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SERVO_PAN +SERVO_PAN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 3 +Fotorezistor 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +STM32 NUCLEO-U545RE +STM32 NUCLEO-U545RE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +R1 +R1 + + + + + + + + + + + + + + + + +10k +10k + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3V3 ++3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 3 +Fotorezistor 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 2 +Fotorezistor 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 1 +Fotorezistor 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Fotorezistor 4 +Fotorezistor 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/SCH_Schematic1_1-P1_2026-05-27.webp b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/SCH_Schematic1_1-P1_2026-05-27.webp new file mode 100644 index 00000000000..b575cfe4a41 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/SCH_Schematic1_1-P1_2026-05-27.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/index.md b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/index.md new file mode 100644 index 00000000000..1c46d85747d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/index.md @@ -0,0 +1,88 @@ +# IoT Weather-Station: Meteo and Air Quality Monitor +A smart IoT station for monitoring weather and air quality, featuring acoustic alerts and a live cloud dashboard. + +**Author**: Mitran Ramona Luminița \ +**GitHub Project Link**: [UPB-PMRust-Students/acs-project-2026-mnoramona](https://github.com/UPB-PMRust-Students/acs-project-2026-mnoramona) + +## Description + +This project consists of an IoT station capable of measuring environmental parameters and displaying them in real-time on an online dashboard (Adafruit IO). The system reads temperature and atmospheric pressure (via I2C), measures UV ray intensity (via ADC), and monitors air quality by detecting CO2, ammonia, benzene, and smoke using an MQ-135 sensor. When safety thresholds are exceeded, a buzzer triggers distinct acoustic alarms depending on the specific hazard. + +Additionally, two physical push-buttons are integrated into the system using software debouncing algorithms (polling). The primary button features dual functionality: a short press toggles a continuous data upload mode (every 15 seconds), while a long press (3 seconds) calibrates the gas sensor by setting a new clean-air reference zero. The second button acts as a "Mute/Snooze" switch, silencing the acoustic alarms for 1 minute if the user acknowledges the hazard. + +## Motivation + +I chose this project because it offers a highly practical and relevant application (environmental health monitoring) while elegantly integrating multiple fundamental concepts of electronics and embedded programming. The project natively covers a wide range of hardware communication protocols - I2C for digital sensors, ADC for analog signals, and software polling (debouncing) for asynchronous events - and bridges the gap to the Internet of Things (IoT) by transmitting data over Wi-Fi via the MQTT protocol. + +## Architecture + +The system is built around a central microcontroller that interfaces with various input and output modules: +* **Processing Unit (ESP32):** Reads sensor data, applies digital filters and business logic (mapping ADC voltages for the UV and MQ-135 sensors), and manages the Wi-Fi connection. +* **Digital Input Module (I2C):** The BME280 sensor communicates bidirectionally over the I2C bus (SDA/SCL) to provide precise temperature, humidity, and pressure data. +* **Analog Input Module (ADC):** The ML8511 (UV) and MQ-135 (Air Quality) sensors output a variable voltage that is read by the ESP32's ADC pins. +* **Digital Input Module (Buttons & Polling):** Two push-buttons are connected to digital pins with internal pull-up resistors. The system uses a non-blocking polling method (millis()): + * *Button 1:* Short press toggles continuous 15-second data upload; Long press (3s) calibrates the MQ-135 zero baseline. + * *Button 2:* Triggers a 1-minute alarm snooze. +* **Local Output Module:** A buzzer provides immediate acoustic feedback, generating specific patterns: + * *Gas Alarm (Siren):* Continuous long beeps when dangerous gas levels are detected (MQ-135 raw > 1000). + * *Temperature Alarm:* 3 rapid, sharp beeps when ambient temperature exceeds 28°C. + * *Status Beep:* Short beeps for upload toggle confirmation, and a rapid burst pattern for successful gas sensor calibration. +* **Cloud Module:** Adafruit IO receives JSON/MQTT payloads and visualizes the data on live charts. + +## Log + +### Week 27 April - 3 May +* Created documentation and bill of materials. + +### Week 4 - 10 May +* Wired and tested the I2C (BME280) and ADC (MQ-135, ML8511) sensors. +* Calibrated the ADC mapping for the UV sensor to calculate the UV Index. + +### Week 11 - 17 May +* Configured Adafruit IO feeds and implemented the Wi-Fi & MQTT connection. +* Added the buzzer and dual-button logic. Replaced hardware interrupts with a `millis()`-based debounce polling architecture for stability. +* Implemented distinct buzzer alarm patterns and the 5-minute snooze logic. + +### Week 18 - 24 May +* Finalized code logic, cleaned up the project structure, and completed the final testing. + +### Week 25 - 27 May +* Implemented short/long press logic for continuous MQTT upload toggling and real-time MQ-135 gas sensor zeroing. +* Added 1-minute snooze functionality and aggressive buzzer patterns for noisy environments. + +## Hardware +The project utilizes an ESP32 microcontroller due to its native Wi-Fi capabilities and generous pinout. The selected sensors cover both digital communication (BME280) and analog voltage reading (ML8511 and MQ-135). Two push-buttons serve as input triggers for cloud uploads and alarms, and a buzzer adds a layer of local user interaction. + +### Schematics + +![Schematics](./schematics.webp) + +![Schematics](./SCH_Schematic1_1-P1_2026-05-27.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| ESP32 DevKit V1 | Main microcontroller for processing and Wi-Fi connectivity. | [30 RON](https://www.optimusdigital.ro/ro/placi-cu-esp32/12933-placa-de-dezvoltare-plusivo-wireless-compatibila-cu-esp32-si-ble.html?search_query=esp32+si+ble&results=11) | +| BME280 Sensor Module | Measures temperature, humidity, and atmospheric pressure (I2C). | [34 RON](https://www.emag.ro/modul-senzor-temperatura-umiditate-presiune-bme280-ai0002-s34/pd/DR7HCZBBM) | +| ML8511 UV Sensor | Detects ultraviolet light intensity (ADC). | [33 RON](https://www.optimusdigital.ro/ro/senzori-senzori-optici/2944-senzor-de-lumina-uv-ml8511.html?search_query=ML8511&results=1) | +| MQ-135 Air Quality Sensor | Detects gas levels (CO2, ammonia, benzene, smoke) (ADC/Digital). | [22 RON](https://www.emag.ro/mq-135-modul-senzor-calitate-aer-haxmya-mq-135/pd/D7HMPD2BM/) | +| 5V Passive/Active Buzzer | Acoustic warning module for exceeded safety thresholds. | [2 RON](https://www.optimusdigital.ro/ro/audio-buzzere/634-buzzer-pasiv-de-5-v.html?search_query=buzzer&results=44) | +| 2x Push-Buttons | One for forcing MQTT data upload, one for the 5-minute Alarm Snooze/Mute feature. | 4 RON | +| Breadboard & Jumper Wires | For rapid prototyping and circuit connections. | 20 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| `WiFi.h` | Standard ESP32 library for wireless networking. | Used to connect the microcontroller to the local internet router. | +| `Adafruit MQTT Library` | Robust MQTT client for Arduino/ESP. | Used to package and transmit data to the Adafruit IO dashboard. | +| `Wire.h` | I2C communication library. | Used to initiate and read data from the I2C bus (SDA/SCL pins). | +| `Adafruit_BME280` | Software driver for the BME280 sensor. | Used to extract temperature, humidity, and pressure data. | + +## Links + +1. [ESP32 Pinout Reference](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/) +2. [Adafruit IO Example](https://learn.adafruit.com/esp8266-temperature-slash-humidity-webserver) +3. [MQ-135 Gas Sensor Calibration with Arduino](https://components101.com/sensors/mq135-gas-sensor-for-air-quality) +4. [Debounce on a Pushbutton (Non-blocking)](https://docs.arduino.cc/built-in-examples/digital/Debounce) diff --git a/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/schematics.webp new file mode 100644 index 00000000000..c3893859b66 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/ramona.mitran/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/architecture.svg new file mode 100644 index 00000000000..b9ce7295977 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/architecture.svg @@ -0,0 +1,3 @@ + + +
System Power Supply
System Power Supply
STM32 Microcontroller
STM32 Microcontroller
User Input Button
User Input Button
RFbeam K-LC7
RFbeam K-LC7
Analog Front-End
Analog Front-End
OLED Display
OLED Display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/front-view.webp b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/front-view.webp new file mode 100644 index 00000000000..3b17cc210d9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/front-view.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/frontend.webp b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/frontend.webp new file mode 100644 index 00000000000..c09e3bce5b0 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/frontend.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/schematics.webp b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/schematics.webp new file mode 100644 index 00000000000..00768412e38 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/schematics.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/topdown-view.webp b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/topdown-view.webp new file mode 100644 index 00000000000..5e70d367659 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/images/topdown-view.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/rares.banila/index.md b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/index.md new file mode 100644 index 00000000000..19ae71192aa --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/rares.banila/index.md @@ -0,0 +1,124 @@ +# Phase-Correlated Doppler Velocity Sensor +A custom 24GHz continuous-wave radar system for velocity tracking (speed and orientation) using STM32, Embassy Rust, and Digital Signal Processing. + +:::info + +**Author**: Banila Rares-Sebastian \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-rares567 + +::: + + + +## Description + +The system detects and tracks the movement of walking targets (humans) in its field of view, determining both their speed and their spatial orientation (Angle of Arrival). It achieves this by emitting a 24GHz microwave signal and capturing the reflections using a dual-antenna receiver. The microvolt-level phase-shifted signals are filtered and amplified by a custom 4-channel analog front-end (~1000x gain) built to strict low-noise tolerances. An STM32 microcontroller samples these 4 channels simultaneously via a hardware-triggered ADC and DMA to preserve phase correlation. Finally, the MCU runs a Fast Fourier Transform (FFT) algorithm to calculate the velocity vectors and displays the target's speed and angle on a digital screen. + +## Motivation + +I chose this project as it provides a challenging combination of analog electronics (through working on a protoboard and soldering components manually) and embedded programming (through working on a STM32 MCU for digital signal processing). This makes it a great learning experience and a wonderful and precise sensor with utility in any human-related tracking or statistics. + +## Architecture + +![Diagram](./images/architecture.svg) + +## Log + + + +### Week 7 - 13 April + +Ordered components for the hardware from Sigmanortec and DigiKey. + +### Week 14 - 20 April + +Started work on soldering components on the protoboard (op-amps, voltage regulator and adjacent passive components). + +### Week 21 - 27 April + +Completed work on the first stage signal amplifier and successfully tested one channel. + +### Week 5 - 11 May + +Successfully completed and tested the entire front-end circuit and finished building the hardware. Designed the schematic of the entire circuit. + +### Week 12 - 18 May + +Created the software for reading the amplified signals using the ADC, processing the signal and displaying the relevant values on the I2C display. + +### Week 19 - 25 May + +Created mounts/stands for each hardware component. + +## Hardware + +The hardware features a custom Analog Front-End (AFE) bridging the 24GHz K-LC7 sensor and the STM32. Because the raw radar signals are in the microvolt range, the AFE utilizes LMV772 low-noise op-amps in a two-stage active amplifier configuration. +By placing precision passives (1% resistors and C0G capacitors) in the negative feedback loops, the circuit forms an active low-pass filter. This actively suppresses high-frequency environmental noise while applying a massive 73 dB (~4,467x) voltage gain, boosting microscopic reflections to a readable 0–3.3V range. To guarantee signal integrity, an LT1763 ultra-low-noise LDO provides clean 3.3V power, driving a voltage divider that establishes a 1.65V virtual ground. This biases the op-amps so the AC radar waves can swing symmetrically without clipping above 3.3V and below GND. + +![Frontend](./images/frontend.webp) +![Topdown-view](./images/topdown-view.webp) +![Front-view](./images/front-view.webp) + +### Schematics + +![Schematics](./images/schematics.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [Nucleo-U545-RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Microcontroller | Lab provided| +| [RFbeam-K-LC7](https://rfbeam.ch/product/k-lc7-radar-transceiver/) | 24GHz dual-receiver radar sensor | [233.6 RON](https://www.digikey.ro/en/products/detail/rfbeam-microwave-gmbh/K-LC7-RFB-00H/10638901)| +| [4x LMV772MA/NOPB](https://www.ti.com/product/LMV772/part-details/LMV772MA/NOPB) | Low-noise operational amplifiers | [40.76 RON](https://www.digikey.ro/en/products/detail/texas-instruments/LMV772MA-NOPB/665715)| +| [LT1763CS8-3.3](https://www.analog.com/media/en/technical-documentation/data-sheets/1763fh.pdf) | Low-noise LDO linear voltage regulator | [33.08 RON](https://www.digikey.ro/en/products/detail/analog-devices-inc/LT1763CS8-3-3-TRPBF/958589) +| [Display OLED 0.96" I2C](https://sigmanortec.ro/Display-OLED-0-96-I2C-IIC-Albastru-p135055705) | I2C OLED screen for displaying output | 16.96 RON| +| [Protoboard 7x9cm FR4](https://sigmanortec.ro/Placa-PCB-prototipare-fata-dubla-7x9cm-p125747328) | Protoboard for creating the custom amplifier | 5.76 RON| +| [5x SOIC-8 to DIP-8 adapter](https://sigmanortec.ro/adaptor-smd-la-dip-8-pini-sop8) | Adapter for converting SOIC-8 to protoboard-compatible DIP-8 | 4.95 RON| +| [8x MFR-25FTE52-1M](https://www.digikey.ro/en/products/detail/yageo/MFR-25FTE52-1M/9139874) | 1M OHM 1% resistors | 1.32 RON| +| [4x MFR-25FTF52-100R](https://www.digikey.ro/en/products/detail/yageo/MFR-25FTF52-100R/9140477) | 100 OHM 1% resistors | 0.66 RON| +| [4x MFR-25FRF52-10K](https://www.digikey.ro/en/products/detail/yageo/MFR-25FRF52-10K/14626) | 10K OHM 1% resistors | 0.69 RON| +| [2x MFR-25FTE52-470K](https://www.digikey.ro/en/products/detail/yageo/MFR-25FTE52-470K/9140222) | 470K OHM 1% resistors | 0.33 RON| +| [5x C320C104J5R5TA7301](https://www.digikey.ro/en/products/detail/kemet/C320C104J5R5TA7301/3726081) | 100nF X7R capacitors | 6.04 RON| +| [9x ECE-A1EN4R7U](https://www.digikey.ro/en/products/detail/panasonic-industry/ECE-A1EN4R7U/227616) | 4.7uF 20% capacitors | 10.18 RON| +| [8x C317C101J1G5TA7301](https://www.digikey.ro/en/products/detail/kemet/C317C101J1G5TA7301/6562461) | 100pF C0G capacitors | 8.84 RON| +| [4x MFR-25FRF52-22K](https://www.digikey.ro/en/products/detail/yageo/MFR-25FRF52-22K/9138943) | 22K OHM 1% resistors | 0.69 RON| +| [105BPS100M](https://www.digikey.ro/en/products/detail/cornell-dubilier-knowles/105BPS100M/5410521) | 1uF 20% capacitor | 0.99 RON| +| [C322C103J1R5TA7301](https://www.digikey.ro/en/products/detail/kemet/C322C103J1R5TA7301/12700464) | 10nF X7R capacitor | 1.86 RON| +| [ECE-A1VN100UB](https://www.digikey.ro/en/products/detail/panasonic-industry/ECE-A1VN100UB/2689190) | 10uF 20% capacitor | 1.86 RON| + + +## Software + +The software is written in Rust using the embassy bare-metal asynchronous framework. It handles strict real-time data acquisition from the ADC, heavy Digital Signal Processing (DSP) for radar signals, and driving the graphical UI. + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer (HAL) | Used to initialize and control the STM32 MCU peripherals, specifically the hardware ADC for reading radar pins and the I2C bus. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async RTOS Executor | Used to run the main execution loop for the embedded application. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping library | Used to create the 300µs Ticker for timing gaps between ADC radar samples. | +| [microfft](https://crates.io/crates/microfft) | Fast Fourier Transform library | Executes the complex 256-bin FFT to transform the time signal into discrete Doppler speed bins. | +| [micromath](https://crates.io/crates/micromath) | Fast embedded math library | Provides fast f32 approximations for trigonometry (cos, atan2, asin, sqrt) required for the cross-spectrum phase analysis and diagonal speed compensation. | +| [num-complex](https://crates.io/crates/num-complex) | Complex number data structures | Required to store the real and imaginary voltage components used during the FFT and Blackman windowing prep. | +| [ssd1306](https://crates.io/crates/ssd1306) | OLED display driver | Used to interface with and flush pixel data to the 0.96" OLED screen over I2C. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing the geometric lines for the UI trajectory arrow and rendering the text fonts. | +| [heapless](https://crates.io/crates/heapless) | Memory-safe data structures | Used for fixed-capacity, stack-allocated String buffers to format the speed and angle text without requiring a dynamic memory allocator. | +| [defmt](https://github.com/knurling-rs/defmt) & [panic-probe](https://crates.io/crates/panic-probe) | Debugging and logging | Standard tooling used to handle panics and print highly efficient debug logs directly to the probe over RTT. | + +## Links + + + +1. [RFbeam K-LC7 datasheet](https://rfbeam.ch/wp-content/uploads/dlm_uploads/2022/11/K-LC7_Datasheet.pdf) +2. [RFbeam K-LC7 typical signal amplifier](https://rfbeam.ch/wp-content/uploads/dlm_uploads/2022/10/AN-04-TypicalSignalAmp.pdf) +3. [RFbeam K-LC7 radome design](https://rfbeam.ch/wp-content/uploads/dlm_uploads/2023/05/AN-03-Radome.pdf) +4. [Embassy Framework Documentation](https://embassy.dev/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/braille_trainer_architecture_v2.svg b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/braille_trainer_architecture_v2.svg new file mode 100644 index 00000000000..8503f275783 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/braille_trainer_architecture_v2.svg @@ -0,0 +1,107 @@ + +Braille Trainer block diagram +STM32 central controller connected to 9 red buttons, relay module, solenoids, OLED display, LED, buzzer, USB-C and 5V PSU + + + + + + + + + +STM32 +NUCLEO-U545RE-Q + + + + + + + +9 red buttons + + + + + +GPIO + + + + +Relay module + + + + + + + +GPIO + + + + +6 solenoids + + + + + + + + +relay + + + + +OLED display + +ABC + + +I2C + + + + +Bicolor LED + + + + +GPIO + + + + +Buzzer + + + + + +PWM + + + + +USB-C + + + + + + + +5V 6A PSU + + + + + + + + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/index.md b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/index.md new file mode 100644 index 00000000000..8456ed65c11 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/index.md @@ -0,0 +1,165 @@ +# Braille Bidirectional Trainer +An interactive system for learning Braille through visual, tactile and auditory feedback. + +:::info + +**Author**: Ciuperca Robert-Mihai \ +**GitHub Project Link**: [Project Repository](https://github.com/UPB-PMRust-Students/acs-project-2026-robert1724) + +::: + + + +## Description + +The Braille Bidirectional Trainer is a dual-mode educational device. +Mode 1 teaches sighted users to write Braille using a 3×3 button matrix, where the second and third columns function as a Braille-style 3×2 input interface based on prompts displayed on the screen. +Mode 2 helps visually impaired users practice reading through a 6-solenoid tactile display, with responses entered using the full 3×3 matrix configured as a T9-style keypad and validated through audio feedback. + +## Motivation + +I chose this project after meeting a visually impaired person and realizing how much a basic knowledge of Braille would have helped our communication. This experience inspired me to create a tool that assists parents and teachers in supporting blind children, while providing young learners with an interactive, fun way to practice their tactile skills. + +## Architecture + +![Project Diagram](./braille_trainer_architecture_v2.svg) + +The system operates in two modes, selected at startup by pressing specific buttons. Each mode has 3 levels of increasing difficulty, and the user must achieve at least 80% accuracy to advance. +### Mode 1 — Learn to Write Braille (Sighted Users) +The OLED display shows a random letter or word. The user encodes it in Braille using the second and third columns of the 3×3 button matrix, which together emulate a standard 3×2 Braille cell. There is no confirmation button; instead, the system waits approximately two seconds for the user to press the buttons they consider to represent the correct Braille character, after which the answer is automatically validated. A green LED lights up for correct answers, while a red LED indicates an incorrect response. +### Mode 2 — Learn to Read Braille (Blind Users) +The STM32 activates solenoids through an 8-channel relay module to physically raise Braille dots on a tactile plate. The user feels the pattern and types the corresponding letter on 9 red buttons arranged as a phone keypad (multi-press input, like old Nokia phones). Feedback is given via buzzer: one beep for correct, two beeps for incorrect. +The STM32 NUCLEO-U545RE-Q acts as the central controller, managing all input/output: +- **Input**: 9 red buttons (GPIO) +- **Display**: 0.91" OLED 128×32 via I2C — shows letters, words and game status +- **Tactile output**: 6 push-pull solenoids (5V 0.7A) driven by an 8-channel relay module +- **Feedback**: Bicolor LED (Mode 1) and passive buzzer via PWM (Mode 2) +- **Power**: USB-C for STM32, separate 5V 6A PSU for solenoids + +## Log + + + +### Week 20 - 26 April + +- Drafted the initial hardware documentation (block structure, component list, wiring notes) +- Ordered all required components from Optimus Digital, eMAG, Farnell, AliExpress and Ground Studio +- Refined the project concept: defined the two operating modes (sighted / blind), the level progression logic, and how the selection screen switches between them + +### Week 27 April - 3 May + +- The majority of the hardware components arrived +- Began learning how to connect and integrate the electronic components +- Studied the datasheets for the STM32, OLED display, relay module, and solenoids + +### Week 4 - 10 May + +- Attended the Support Project Work session +- Received guidance and recommendations from the assistants regarding the hardware implementation + +### Week 11 - 17 May + +- Built the hardware part of the project +- Connected and tested the main electronic components +- Assembled the keypad matrix + +### Week 18 - 24 May + +## Hardware + +**1. STM32 Nucleo-U545RE-Q - Main Microcontroller Unit** + +- Handles: buttons (GPIO), OLED (I2C), LEDs (GPIO), buzzer (PWM) + +**2. 6 Mini Push-Pull Solenoids (5V, 0.7A)** + +- Tactile Braille output: 3×2 dot matrix under the tactile plate +- Powered from external 5V/6A supply switched by the relay module + +**3. 0.91" OLED Display (128×32, I2C)** + +- Visual output for Mode 1: displays random letters, short words and complex words that the user must encode in Braille + +**4. Push Buttons (16 total)** + +- 9 red buttons form a Nokia T9 keypad (3x3) +- All buttons are debounced in software + +**5. Relay Driver Stage (8-Channel Optoisolated Relay Module)** + +- One relay channel per solenoid (6 out of 8 channels used; channels 7 and 8 unused) +- Low-side switching for solenoids via relay contacts +- Jumper between VCC and JD-VCC must be removed when external PSU is connected (failure to do so risks damaging STM32 and laptop USB port) +- No external flyback diodes, gate resistors or pull-downs required (all handled internally by the relay module) + +**6. Feedback Outputs** + +- 1 Bicolor LED (green/red - correct/wrong) working via 220Ω resistor +- 1 passive buzzer for Mode 2 (1 beep = correct, 2 beeps = wrong) + +**7. Power Subsystem** + +- External 5V/6A feeds the solenoids only: solenoids use up to ~4.2A peak (6 * 0.7A) +- MCU powered via USB-C, only GND shared between the two supplies + +**8. Passives & Wiring** + +- Resistors: 220Ω (LED, MOSFET gates), 10kΩ (pull-downs), 1kΩ (buzzer transistor base) +- 1× breadboard 830pt +- M-M, M-F, F-F jumpers; plexiglass tactile plate with 6 holes for solenoid pistons + +**9. Physical Assembly** + +- Plexiglass tactile plate with 6 holes drilled for solenoid pistons +- Solenoids mounted underneath, aligned with the holes +- Buttons arranged on top (T9 keypad) + +### Schematics + +![Kicad Schematic](./webp_kicad_pm_mic.webp) + +![Hardware Picture](./poza_hw_braille_w.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396?gross_price=true&CMP=KNC-GRO-GEN-SHOPPING-PMax_Test_840_Lowmargin&mckv=_dc%7Cpcrid%7C%7Cplid%7C%7Ckword%7C%7Cmatch%7C%7Cslid%7C%7Cproduct%7C4216396%7Cpgrid%7C%7Cptaid%7C%7C&gad_source=1&gad_campaignid=20659611307&gbraid=0AAAAAD8yeHkSK63CAR63cuQ9pFy5lNcjZ&gclid=Cj0KCQjwj47OBhCmARIsAF5wUEH6Kym6sSE14nqDDJKp0NwKgYvIjM8EmyS4uOmAS9zt2HrlzObdZDQaAiu0EALw_wcB) | Main microcontroller | 130 RON | +| [Mini Push-Pull Solenoids](https://www.aliexpress.com/item/1005007163422306.html?spm=a2g0o.productlist.main.1.11c5sxGhsxGhC6&algo_pvid=cb5e2006-7204-416e-9f57-7f2ee3d3e57b&algo_exp_id=cb5e2006-7204-416e-9f57-7f2ee3d3e57b-0&pdp_ext_f=%7B%22order%22%3A%223795%22%2C%22eval%22%3A%221%22%2C%22fromPage%22%3A%22search%22%7D&pdp_npi=6%40dis%21RON%2119.07%2114.62%21%21%2129.26%2122.43%21%40210384b917758799842563173e4715%2112000039662693694%21sea%21RO%210%21ABX%211%210%21n_tag%3A-29910%3Bd%3Aa45a2b33%3Bm03_new_user%3A-29895%3BpisId%3A5000000201130828&curPageLogUid=kN2AjBacVNhk&utparam-url=scene%3Asearch%7Cquery_from%3A%7Cx_object_id%3A1005007163422306%7C_p_origin_prod%3A#nav-specification) | Raises/Lowers Braille dots | 130 RON | +| [OLED Display](https://ro.farnell.com/dfrobot/dfr0648/oled-display-module-0-91-128x32/dp/4308185) | Displays letters/words | 38 RON | +| [9 red buttons](https://www.optimusdigital.ro/en/buttons-and-switches/1114-red-button-with-round-cover.html?search_query=red+round+button+with+cover&results=8) | Nokita T9 keypad (3x3 matrix) | 18 RON | +| [Bicolor LED](https://www.optimusdigital.ro/en/leds/704-led-bicolor-de-3-mm-rosu-si-verde-cu-catod-comun.html?srsltid=AfmBOopGC_xZWFvGLk5QneMtooFGgOLTJCRYcR8LtzcYMZNfwsi9gH_Q) | Visual feedback | 1 RON | +| [5V6A Power Supply](https://www.emag.ro/sursa-in-comutatie-ac-dc-30w-5v-6a-well-143x59x40mm-psup-so-5v30w-wl/pd/DXZ2MJ3BM/) | Powers solenoids | 52 RON | +| [8 Relay Module](https://www.optimusdigital.ro/en/relay-modules/475-blue-optoisolated-8-relay-module.html?srsltid=AfmBOorN0An2FgZarTmFpJI9X43BIgCUwBJchYU4Q6IJ9V9meI9mRPxg) | Controls solenoids activation | 26 RON +| [Breadboard](https://www.emag.ro/breadboard-h-hct-tronic-830-puncte-de-conectare-abs-200x630-puncte-034-066/pd/DBNQ7R3BM/) | Connects all electronic parts | 10 RON| +| [Buzzer](https://www.optimusdigital.ro/en/buzzers/12247-3-v-or-33v-passive-buzzer.html?search_query=buzzer+5v&results=62) | Audio feedback | 1 RON | +| Resistors, capacitors, diodes, wires | Support the main components | ~30 RON | +| Perforated board | Solenoids mounted underneath raise through the holes | ~10RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://docs.embassy.dev/embassy-stm32/) | Hardware Interface | Acts as a bridge between the Rust code and the physical pins (GPIO, I2C, PWM) | +| [defmt](https://defmt.ferrous-systems.com/) | Debug Logging | Sends status messages to the computer for debugging via probe | +| [panic-probe](https://docs.rs/panic-probe/) | Error Handling | Reports crashes and errors through the debug probe | + +The rest will be added as I develop the code + +## Links + + + +1. [The Braille Alphabet](https://www.pharmabraille.com/pharmaceutical-braille/the-braille-alphabet/) +2. [Interactive Braille Trainer](https://www.michalpaszkiewicz.co.uk/brailletraining/) +3. [People's opinion on learning Braille](https://www.reddit.com/r/Blind/comments/1lehwx9/the_importance_of_braille_in_todays_technology/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/poza_hw_braille_w.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/poza_hw_braille_w.webp new file mode 100644 index 00000000000..39dd5aebace Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/poza_hw_braille_w.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/webp_kicad_pm_mic.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/webp_kicad_pm_mic.webp new file mode 100644 index 00000000000..a8121600ca5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.ciuperca/webp_kicad_pm_mic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/images/newschematic.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/images/newschematic.webp new file mode 100644 index 00000000000..85a36d1c203 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/images/newschematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/index.md b/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/index.md index d5ac25bb6f0..c5b4dcec28d 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.petcu0204/index.md @@ -44,7 +44,7 @@ flowchart TB Power[9V / 3A Power Supply] Buck[LM2596 Buck Converter] - Rail[5V / 6V Servo Rail] + Rail[5V Servo Rail] Phone -->|Bluetooth| HC05 HC05 -->|UART| STM32 @@ -76,7 +76,7 @@ flowchart TB - Researched multiple project ideas. - Chose the Bluetooth Nerf Turret as my project idea. -### Week 7 - 20 April +### Weeks 7 - 20 April - Researched the hardware components needed for the project. - Estimated the total cost of the electronic components. @@ -86,6 +86,11 @@ flowchart TB - Ordered the hardware components. +### Weeks 29 April - 12 May + +- Tested the main hardware components individually, including the DC motor, servomotor, UART communication and the Bluetooth communication setup. +- Connected and tested multiple components together to validate the power distribution and the interaction between the STM32 board, the servo motor and the HC-05 module. + ## Hardware 1. STM32 board - the main microcontroller board of the project. It receives commands from the Bluetooth module and controls the servomotors and firing system. @@ -95,13 +100,17 @@ flowchart TB 5. Logic-level MOSFET - an electronic switch used to control the DC motors. 6. Flyback diode - a protection diode used in the motor circuit. 7. LM2596 buck converter - a step-down voltage regulator. -8. External 9V / 2.5A+ power supply - the main power source for the motors and servos. +8. External 9V / 3A power supply - the main power source for the motors and servos. 9. 3D printed turret structure - the mechanical frame of the project. 10. Foam darts - the projectiles launched by the turret. 11. Wires, connectors, screws and rubber bands - assembly and connection materials. ### Schematics +The following schematic shows the electrical connections between the STM32 control unit, the HC-05 Bluetooth module, the servomotors, the DC motors, the MOSFET driver and the LM2596 power converter. + +![Bluetooth Nerf Turret schematic](./images/newschematic.webp) + ### Bill of Materials | Device | Usage | Price | Link | diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/arhitecture_final.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/arhitecture_final.webp new file mode 100644 index 00000000000..c77a72effe2 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/arhitecture_final.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/index.md b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/index.md new file mode 100644 index 00000000000..eb27738e505 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/index.md @@ -0,0 +1,124 @@ +# Smart Bin + +:::info + +**Author:** Robert Postolache \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-RobertP1021 + +::: + +## Description + +Smart Bin is a trash bin that automatically sorts waste without any user intervention. When it detects a hand nearby, it opens a flap and lets the object fall onto an internal analysis platform. There, humidity, metal, and weight sensors analyze the object and classify it into one of three categories: wet, dry, or metal. A motor then rotates the container platform until the correct one is in position, after which the object is released. If a container is full, the system refuses to accept new waste for that category. + +## Motivation + +My motivation to tackle this project came from my daily commute to work. Every day, before getting on the metro, I would buy a coffee cup and something to eat. Sometimes, if the metro was in the station, I hurriedly threw the cup and the food wrapper in the nearest trash bin, without looking for the correct label. So while I was searching for a project idea, I remembered that it would be nice to have a trash bin that could automatically sort the waste, without me having to worry about it. + +## Architecture + +Smart Bin is built around an STM32U545RE-Q Nucleo board that coordinates all sensors and actuators through firmware written in Rust with Embassy. + +**Main flow:** + +1. The proximity sensor detects a hand at the entry and the first servo opens the entry flap +2. The object falls onto the analysis platform where the following are read simultaneously: + - humidity sensor + - metal sensor +3. Based on the readings, the microcontroller classifies the object as WET / DRY / METAL +4. If the container is available: the stepper motor rotates the turntable to the correct position, the second servo releases the object +5. The display shows feedback to the user about the classification result and if a container is full or not +6. The fill level of the containers is checked (one infrared sensor per container) + + +**Interfaces used:** +- SPI: ST7735 LCD Display +- PWM: servo × 2 +- GPIO: stepper motor, metal sensor, infrared reflective sensors × 3 +- ADC: humidity sensor + +![Architecture Diagram](./arhitecture_final.webp) + +## Log + +### Week 5 - 11 May +I bought the hardware components, and mapped out the pin connections. I started testing each component with simple and minimal code. + +### Week 12 - 18 May +I completed the initial testing for each component, and presented them to the lab assistant. + +### Week 19 - 25 May +I started integrating the components, and writing the main logic for the project. I also assembled the final version for PM Fair. + +## Hardware + +### Schematics + +![Hardware Schematic](./pm_proiect_schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32U545RE-Q Nucleo](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Microcontroller | 90 RON | +| [Servo Motor SG90 × 2](https://www.optimusdigital.ro/en/servomotors/26-sg90-micro-servo-motor.html?search_query=SG90&results=5) | Entry flap + platform trapdoor | 13,99 RON × 2 | +| [TCRT5000 Infrared Line Sensor Module with Adjustable Sensitivity x 3](https://www.optimusdigital.ro/en/optical-sensors/2415-modul-senzor-infrarou-de-linie-cu-sensibilitate-reglabila.html?search_query=TCRT5000&results=4) | Container fill level detection | 3.87 RON × 3 | +| [ULN2003 Stepper Driver + 5V Stepper Motor](https://www.optimusdigital.ro/en/stepper-motors/101-stepper-motor-with-uln2003-driver.html?search_query=stepper&results=97) | Stepper motor control for turntable | 16.97 RON | + [Rain Sensor Module](https://www.optimusdigital.ro/en/humidity-sensors/5775-rain-sensor-module.html?search_query=rain+sensor&results=46) | Humidity sensor for wet/dry | 9.99 RON | +| [Senzor inductiv de proximitate - LJ12A3-4-Z/BX](https://ardushop.ro/ro/senzori/2182-senzor-inductiv-de-proximitate-lj12a3-4-z-bx-6427854033659.html) | Inductive proximity sensor for metal detection | 15.57 RON | +| [Senzor Ultrasonic de Distanță HC-SR04+](https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=HC+SR04&results=15) | Ultrasonic sensor for hand detection | 14.99 RON | +| [1.8 Inch 128 x 160 SPI TFT LCD Display Module ST7735 51/AVR/STM32/ARM 8/16 Bit ](https://www.amazon.de/-/en/Inch-Display-Module-ST7735-STM32/dp/B0B5RVX9BJ/ref=sr_1_5?crid=3OK9OD7CNSDQD&dib=eyJ2IjoiMSJ9.3_7bMaePwHiqT1VxJiDDYqMcf3MEYLs08db-A_noB2P4Km6v76rcO_IJ4UkdW2pKzx1nqF7hgj7hQwZO4oEUuQME23v1ycsK3XGmjYy8MhmZR3uXl4h4CjTXwQsQCQTv8zN5mkAJJkTlzr5h6mszg0E6Sb5RWU9VKmjLE18jA_CcQnokLxzeciWPpmBwJ2cjKuT4iVTUluNs2XoKtIuE8sIS5NBn381Fxy5ooGhK3CQ.FA72fIsMv7lud416DvWnN5Qno7Ko7FT2j4F5Fz0FYQE&dib_tag=se&keywords=ST7735+LCD+Display&qid=1776722780&sprefix=st7735+lcd+display%2Caps%2C199&sr=8-5) | Display for user feedback | 45.86 RON | +| Breadboard + Jumper Wires | Connections | 15 RON | +| Resistors assorted | Pull-ups, current limiting | 5 RON | + +## Software + +### **Embassy framework** +- embassy-executor +- embassy-stm32 +- embassy-time +- embassy-embedded-hal +- embassy-sync + +### **Display** +- mipidsi +- display-interface-spi +- embedded-graphics + +### **Hardware** +- embedded-hal + +### Software Diagram +![Software Diagram](software_diagram.svg) + + + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Pin control, PWM, SPI, ADC | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async executor for embedded | Running concurrent tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timers and delays | Timing for sensors and motors | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy) | Embedded HAL adapters for Embassy | SPI bus sharing for display | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library for embedded | Rendering text on the display | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer traits | PWM control for servo motors | +| [mipidsi](https://github.com/almindor/mipidsi) | Display driver for MIPI displays | ST7735 display driver | +| [display-interface-spi](https://github.com/therealprof/display-interface) | SPI display interface | SPI communication with ST7735 | + +## Project Photos + +![photo1](photo1.webp) + +![photo2](photo2.webp) + +![photo3](photo3.webp) + +![photo4](photo4.webp) + +![photo5](photo5.webp) + +## Links + +1. [Embassy - Async framework for embedded Rust](https://embassy.dev/) +2. [STM32U545RE-Q Nucleo Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) +3. [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) +4. [PM Course Website](https://embedded-rust-101.wyliodrin.com/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo1.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo1.webp new file mode 100644 index 00000000000..8ce5d78b4dc Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo2.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo2.webp new file mode 100644 index 00000000000..be53e9d2b83 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo3.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo3.webp new file mode 100644 index 00000000000..22cb0eda4ca Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo4.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo4.webp new file mode 100644 index 00000000000..463f5ca71ae Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo4.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo5.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo5.webp new file mode 100644 index 00000000000..927282714b7 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/photo5.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/pm_proiect_schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/pm_proiect_schematic.webp new file mode 100644 index 00000000000..c4e9aa6f4af Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/pm_proiect_schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/software_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/software_diagram.svg new file mode 100644 index 00000000000..b7d85adcc32 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.postolache/software_diagram.svg @@ -0,0 +1,4 @@ + + + +
Power ON
Power ON
No
No
Bins level full
Bins level fu...
Yes
Yes
Yes
Yes
Hand detected
Hand detected
No
No
No
No
Yes
Yes
Wet verification
Wet verificat...
No
No
Yes
Yes
Metal Verification
Metal Verific...
Yes
Yes
Dry Verification
Dry Verificat...
Stepper rotation
Stepper rotat...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/diagram.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/diagram.webp new file mode 100644 index 00000000000..554c7ecc524 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/diagram.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/schematic.webp new file mode 100644 index 00000000000..0b0c410149e Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/index.md new file mode 100644 index 00000000000..33ddb1c2797 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert.radulescu/index.md @@ -0,0 +1,82 @@ +# TermoTrack 9000 +Sistem de monitorizare termica cu interpolare si urmarire automata prin laser + + + +**Author**: Radulescu Robert-Stefan 331CC \ +**GitHub Project Link**: [UPB-PMRust-Students/acs-project-2026-robsterad](https://github.com/UPB-PMRust-Students/acs-project-2026-robsterad) + + + +## Description + +TermoTrack 9000 este un sistem avansat de imagistica termica bazat pe microcontrolerul STM32. Dispozitivul captureaza date de temperatura in infrarosu folosind un senzor matriceal AMG8833 (8*8 pixeli) si le proceseaza in timp real pentru a genera o imagine fluida pe un ecran TFT color. + +Sistemul implementeaza un algoritm de **interpolare biliniara** pentru a transforma matricea bruta de 64 de puncte intr-o harta termica de inalta rezolutie (320x240). Utilizatorul poate interactiona cu sistemul prin intermediul unui **encoder rotativ** pentru a ajusta dinamic plaja de temperaturi monitorizata (scaling), permitand optimizarea imaginii atat pentru circuite electronice (diferente mici de temperatura), cat si pentru detectia prezentei umane. + +O caracteristica distinctiva a proiectului este **subsistemul de urmarire automata (tracking)**. Microcontrolerul identifica in timp real punctul cu temperatura maxima si actioneaza un mecanism pan-tilt cu **doua servomotoare** pentru a indrepta un **indicator laser** exact catre sursa de caldura detectata. Suplimentar, un buton dedicat permite realizarea unui "screenshot" prin trimiterea matricei de date catre un PC via **UART**. + +## Motivation + +Am ales acest proiect deoarece combina procesarea complexa de semnal (DSP) cu controlul actuatorilor mecanici. Termoviziunea are aplicatii practice vaste, de la diagnoza circuitelor electronice pana la sisteme de securitate, iar implementarea pe o arhitectura ARM Cortex-M ofera oportunitatea de a utiliza periferice avansate precum DMA, Timere hardware si FPU. + +## Architecture + +Sistemul este organizat in jurul unitatii centrale de procesare (STM32) care coordoneaza urmatoarele blocuri: +- **Unitatea de achizitie**: Senzorul AMG8833 conectat prin I2C Fast Mode. +- **Unitatea de procesare**: Algoritmi de interpolare si cautare a extremelor locale (Max Tracking). +- **Unitatea de afisare**: Display TFT ILI9341 controlat prin SPI cu suport DMA. +- **Unitatea de actionare**: Doua servomotoare controlate prin PWM pentru orientarea laserului. +- **Interfata utilizator**: Encoder rotativ (Timer Hardware) si buton de captura (EXTI). + +![Diagram](images/diagram.webp) + +## Log + +### Week 20 - 26 April + +Am redactat documentatia initiala a proiectului si am definit structura arhitecturala. + +## Hardware + +Sistemul utilizeaza microcontrolerul **STM32** pentru a gestiona protocoalele de comunicatie si calculul matematic. Senzorul termic comunica prin **I2C**, in timp ce ecranul utilizeaza **SPI** de mare viteza. Servomotoarele sunt controlate prin semnale **PWM**, iar laserul este actionat digital prin **GPIO**. + +### Bill of Materials + +| Device | Usage | Price (Est. RON) | +|--------|-------|------------------| +| Placa de dezvoltare STM32 Nucleo-64 | Microcontrolerul principal, procesare date si rulare task-uri asincrone. | FREE | +| Modul AMG8833 (8x8 pixeli) | Senzor termic IR (matrice 64 puncte). Comunica prin I2C. Baza pentru interpolarea la 320x240. | 205 RON | +| Display TFT LCD 3.2" ILI9341 | Afisarea interfetei grafice si a hartii termice. Controlat rapid prin magistrala SPI. | 88 RON | +| Modul Encoder Rotativ KY-040 | Interactiunea utilizatorului pentru ajustarea pragurilor de temperatura (zoom/scaling termic). | 5 RON | +| 2x Micro Servomotoare SG90 | Actionarea mecanismului Pan-Tilt (axa X si axa Y) pentru urmarirea fizica a sursei de caldura. | 30 RON | +| Modul Dioda Laser 650nm KY-008 | Indicator vizual montat pe mecanismul Pan-Tilt; indica cel mai cald punct detectat. | 3 RON | +| Breadboard 830 puncte MB-102 | Platforma principala pentru realizarea conexiunilor electrice rapide (fara lipire). | 14 RON | +| Set Fire DuPont (Tata-Tata, Tata-Mama) | Realizarea legaturilor electrice intre pinii STM32 si periferice. | 15 RON | + + +## Software + +Sistemul este dezvoltat in ecosistemul **Rust Embedded (`no_std`)**. Proiectul se bazeaza puternic pe framework-ul `embassy` pentru multitasking cooperativ bazat pe `async/await`, permitand senzorului, ecranului si encoderului sa ruleze simultan fara sa se blocheze reciproc. + +| Library (Crate) | Description | Usage in Project | +|---------|-------------|-------| +| `embassy-rs` | Framework asincron pentru microcontrolere | Baza de executie (Runtime). Gestioneaza task-urile concurente (citire I2C, afisare ecran, monitorizare EXTI encoder). | +| `embassy-stm32` | Hardware Abstraction Layer (HAL) | Configurarea la nivel de registri a pinilor GPIO, SPI, I2C, PWM si a intreruperilor externe (EXTI) pentru STM32. | +| `embassy-time` | Gestionarea timpului hardware | Functii non-blocante de `Delay` si `Timer` necesare pentru debounce-ul encoderului si initializarea ecranului. | +| `mipidsi` | Driver modern pentru ecrane TFT | Comunicarea cu controller-ul ILI9341 al display-ului, configurarea orientarii (Landscape) si trimiterea pixelilor. | +| `embedded-graphics` | Biblioteca grafica 2D `no_std` | Randarea formelor, a textului si afisarea dreptunghiurilor/gradientilor ce formeaza imaginea termica pe ecran. | +| `amg88xx` | Driver pentru senzorul termic | Preluarea matricelor de temperatura (8x8) via I2C direct de la senzorul termic AMG8833. | +| `defmt` / `probe-rs` | Sistem de logging si debugging | Flash-uirea rapida a codului pe placa si transmiterea log-urilor structurate via RTT (fara a folosi un port serial clasic). | + + +### Schematics + +![Circuit](images/schematic.webp) + +## Links + +1. [Embassy-rs Documentation](https://embassy.dev/) +2. [MLX90640 Datasheet](https://www.melexis.com/-/media/files/documents/datasheets/mlx90640-datasheet-melexis.pdf) +3. [Embedded Graphics Documentation](https://docs.rs/embedded-graphics/latest/embedded_graphics/) +4. [Rust Embedded Book](https://docs.rust-embedded.org/book/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/images/schema_kicad.svg b/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/images/schema_kicad.svg new file mode 100755 index 00000000000..04903786489 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/images/schema_kicad.svg @@ -0,0 +1 @@ +SVG Image created as schema_kicad.svg date 2026-05-10T20:53:14 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: schema_kicad.kicad_schSheet: /GNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQ+5VA0D0GNDVCCJ3Rain Senzor 3GNDA0D0GNDVCCJ1Rain Senzor 1GND+3V3+5V+3V3GNDPWM1+2-3M4Motor_Servo+5V+3V3A0D0GNDVCCJ2Rain Senzor 2GNDPWM1+2-3M3Motor_ServoGNDGND+5VPWM1+2-3M1Motor_ServoPWM1+2-3M2Motor_ServoGND+3V312J4Barrel_Jack+5VGND+3V3GND+3V3GND+3V3J2Rain Senzor 2A0D0GNDVCCJ3Rain Senzor 3A0D0GNDVCCGNDJ1Rain Senzor 1A0D0GNDVCC+5VM4Motor_ServoPWM1+2-3+5VGNDM3Motor_ServoPWM1+2-3GNDGND+5V+5VM1Motor_ServoPWM1+2-3M2Motor_ServoPWM1+2-3GNDJ4Barrel_Jack12+5VGND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/index.md b/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/index.md index 618c00ba61e..201b70e8ea2 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/robert_mario.coman/index.md @@ -45,7 +45,7 @@ Based on the system diagram, the architecture is divided into the following logi ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![System Architecture Diagram](./images/schema_kicad.svg ) ### Bill of Materials diff --git a/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/images/parking_sensor_architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/images/parking_sensor_architecture.svg new file mode 100644 index 00000000000..be7e98b07b1 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/images/parking_sensor_architecture.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + Smart Parking Sensor Architecture + + + + Ultrasonic + Sensor + + + STM32 + Board + + + LEDs + + + Buzzer + + + User + + + Echo time + + + Visual feedback + + + Audio feedback + + + Warning + + + Trigger pulse + diff --git a/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/index.md b/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/index.md new file mode 100644 index 00000000000..c58cdfc9624 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/sebastian.marcu/index.md @@ -0,0 +1,107 @@ + +# Smart Parking Sensor + +An embedded parking assistance system that measures the distance to nearby obstacles and provides real-time visual and audio feedback. + +:::info + +**Author:** Sebastian Marcu \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-SebastianMarcu27 + +::: + +--- + +## Description + +This project implements a smart parking sensor using an STM32 development board and an ultrasonic distance sensor. The system periodically measures the distance between the sensor and a nearby obstacle. Based on this distance, the microcontroller controls multiple LEDs and a buzzer to warn the user. As the obstacle gets closer, the warning level increases through different LED states and faster or continuous buzzer signals. + +--- + +## Motivation + +Parking in tight spaces can be difficult without a clear estimation of the distance to obstacles. Modern cars often use parking sensors to help the driver avoid collisions. This project recreates a simplified version of such a system and provides a practical way to work with sensors, GPIO control, timing, distance computation, and real-time embedded feedback. + +--- + +## Architecture + +![Architecture](./images/parking_sensor_architecture.svg) + +The system is built around the STM32 microcontroller, which coordinates all modules. + +- **Input:** ultrasonic sensor used for distance measurement +- **Processing:** STM32 microcontroller computes distance and decides the warning level +- **Output:** LEDs and buzzer provide visual and audio feedback + +The ultrasonic sensor is triggered by the microcontroller. The echo response is measured using timing logic, then converted into distance. Depending on the result, the system selects one of several warning states: safe, attention, close, or stop. + +--- + +## Hardware + +The hardware part of the project consists of an STM32 development board connected to an ultrasonic distance sensor, several LEDs, and a buzzer. The LEDs indicate the warning level visually, while the buzzer provides audio feedback. The system will be assembled on a breadboard using jumper wires and current-limiting resistors for the LEDs. + +--- + +## Bill of Materials + +| Device | Usage | Estimated Price | +|---|---|---| +| STM32 development board | Main microcontroller | Provided | +| HC-SR04 ultrasonic sensor | Distance measurement | ~10 RON | +| Green LED | Safe distance indicator | ~1 RON | +| Yellow LED | Medium distance indicator | ~1 RON | +| Red LED | Close obstacle indicator | ~1 RON | +| Active buzzer | Audio warning signal | ~5 RON | +| Resistors 220Ω / 330Ω | LED current limiting | ~3 RON | +| Breadboard | Circuit prototyping | ~10 RON | +| Jumper wires | Electrical connections | ~5 RON | +| USB cable | Programming and power | Already available | + +Optional components, if time allows: + +| Device | Usage | Estimated Price | +|---|---|---| +| LCD 16x2 with I2C module | Display exact distance | ~20 RON | +| Potentiometer | Adjustable sensitivity threshold | ~5 RON | + +--- + +## Software + +The software periodically sends a trigger pulse to the ultrasonic sensor and measures the duration of the echo signal. This duration is converted into distance. The measured distance is then compared with predefined thresholds. + +Possible states: +- **Safe:** obstacle is far away, green LED active, buzzer off +- **Attention:** obstacle is at medium distance, yellow LED active, slow buzzer beeps +- **Close:** obstacle is near, red LED active, fast buzzer beeps +- **Stop:** obstacle is very close, red LED active, continuous buzzer signal + +The implementation will use GPIO pins for LEDs and buzzer control, and timing mechanisms for measuring the ultrasonic echo signal. + +--- + +## Log + +**Week 1** +- Project idea selected and approved +- Initial documentation created +- Basic architecture and component list defined + +--- + +## Future Improvements + +- Add LCD display for showing the measured distance +- Add filtering to reduce unstable sensor readings +- Add adjustable thresholds using a potentiometer +- Design a small enclosure for a cleaner final prototype +- Add serial logging for debugging and testing + +--- + +## Links + +- Project repository: https://github.com/UPB-PMRust-Students/acs-project-2026-SebastianMarcu27 + diff --git a/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/index.md new file mode 100644 index 00000000000..37c84660fd8 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/index.md @@ -0,0 +1,138 @@ +# Ferris Goes Vroom + +A fast autonomous line-following car + +:::info + + +**Author:** Sorana-Ioana Ulmeanu \ + +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/acs-project-2026-soranaulm + + +::: + +## Description + +Ferris Goes Vroom is an autonomous line-following car that tracks a black line on a white surface. The car uses a 5-channel IR sensor module mounted under the chassis to detect the line position, and adjusts the two DC motors to stay on track. A small OLED display shows real-time information such as line detection state and speed. An MPU6050 accelerometer estimates the current speed by integrating acceleration over time. +What sets this project apart is the use of **Rust** with the **Embassy** async framework on an STM32 microcontroller — an uncommon choice in the embedded world, but one that brings memory safety and high performance. A set of colored LEDs provides real-time visual feedback about the system state: line detected, line lost, or maximum speed reached. + +## Motivation + +Growing up, I always wanted a remote control car. I loved watching them speed around and dreamed of having one +of my own. So when this project came along, I saw the perfect opportunity to finally get my car, just built by my own hands this time. + +What makes this project special to me is how interactive and alive it feels. Watching a small car zoom along +a track on its own, reacting to the world around it in real time, feels almost like it has a personality. +There is something deeply satisfying about building something that moves, that responds, that feels human in +its own little way. + +## Architecture + +The system is organized into four main modules that run concurrently as Embassy async tasks: + +**Sensor Subsystem:** A TCRT5000 5-channel IR sensor module is put in front of the chassis. Each channel reads surface reflectivity — black surfaces absorb IR (digital LOW) and white surfaces reflect it (digital HIGH). The combined pattern of S1–S5 readings determines the line position relative to the car center. + +**PID Control Engine:** The control engine receives the error value from the sensor subsystem every few milliseconds and computes a correction using proportional, integral, and derivative terms. This correction is applied differentially to the two motors: if the car drifts right, the left motor speeds up and the right motor slows down, and vice versa. The three PID constants (Kp, Ki, Kd) are tuned experimentally on the real track. + +**Motor Drive Subsystem:** An L298N dual H-bridge driver receives PWM signals from two STM32 timer channels (TIM2_CH3 and TIM3_CH1) and independently drives the two DC motors. Speed is controlled differentially — when turning, the outer motor runs at 100% duty cycle while the inner motor runs at 50%, allowing smooth cornering. For sharp corrections, one motor stops completely. + +**LED Feedback Module:** Three 5mm LEDs indicate the current system state: red lights when no line is detected and the car is stopped, blue lights when the line is detected and tracking is active, and green lights when the car is moving forward on the line. + +**Display & Speed Module:** A 0.96 SSD1306 OLED display connected via I2C shows real-time line detection state. An MPU6050 accelerometer, also connected via I2C, estimates speed by integrating the X-axis acceleration (ax) over time with dt = 50ms. + +#### Block Diagram +![Block Diagram](schema_bloc.svg) + +### Communication Protocols + +| Protocol | Usage | +|----------|-------| +| **GPIO Input** | Reading IR sensors, computing line position | +| **GPIO Output** | Controlling LEDs | +| **PWM (TIM)** | Controlling motor speed via L298N ENA/ENB | +| **ADC** | Reading analog IR sensor values for precise line position | +| **PWM (TIM)** | Controlling motor speed via L298N | + +## Log + +### Week 1 +Defined the project concept and architecture. Researched and selected the hardware components needed for the build. Started working on the project documentation. + +### Week 2 +Verified each component one by one. Assembled the hardware — mounted the chassis, connected the TCRT5000 sensor module, L298N motor driver, OLED display, MPU6050, LEDs, and LiPo battery. + +### Week 3 +Wrote test code to verify all components working together — sensor readings, motor control, LED feedback, OLED display, and MPU6050 speed estimation. + +### Week 4 +Finalized the project software with complete line-following logic. Finalized documentation and assembled all components in their final positions on the car. + +## Hardware + +The project is built around the **STM32 Nucleo-U545RE-Q**, featuring an ARM Cortex-M33 core running at 160MHz with 256KB of SRAM and 2MB of Flash, and an integrated ST-LINK/V3E debugger for easy flashing and RTT logging from Rust. + +**A TCRT5000 5-channel IR sensor module** is mounted under the front of the chassis is mounted in a row under the front of the chassis. Each sensor emits infrared light and reads back the reflection — black surfaces absorb IR (digital LOW) and white surfaces reflect it (digital HIGH). The combined pattern of readings is used to compute the signed error of the line position relative to the car center. + +A **L298N dual H-bridge motor driver** receives PWM signals from two STM32 timer channels and independently drives the two **DC motors with gearboxes**. The speed difference between the motors is the steering mechanism — no servo is needed. + +Three 5mm LEDs (green, red, blue) with 220Ω current-limiting resistors are connected to GPIO output pins: red lights when no line is detected and the car stops, blue lights when the center sensors are aligned on the line, and green lights when the motors are running. + +A **0.96" SSD1306 OLED display** is connected via I2C and shows real-time data: current speed, system state, and lap time. + +A LiPo 7.4V battery powers the system autonomously. A HW-286 step-down regulator converts the 7.4V battery voltage to 5V to power the STM32 Nucleo, while the motors are driven directly from the battery voltage through the L298N. + +The car chassis is either a commercial kit that holds all components in a compact and balanced layout. All components are connected on a breadboard with jumper wires. + +![](photo_1.webp) +![](photo_2.webp) + +[Demo](https://drive.google.com/file/d/15pEPNW_HupW3DtSfVHj9SexEdzAc97Xa/view?usp=sharing) + +## Schematics + +![Schematic](schematic.webp) + +## Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | Provided by university | +| [TCRT5000 5-channel IR module](https://www.bitmi.ro/senzori-electronici/senzor-tcrt5000-cu-5-canale-pentru-urmarirea-liniei-10796.html) | Line detection | 16.99 RON | +| [L298N Motor Driver](https://www.bitmi.ro/module-electronice/modul-driver-l298n-cu-punte-h-dubla-pentru-motoare-dc-stepper-10400.html) | Dual DC motor control | 11.99 RON | +| [OLED Display SSD1306 0.96](https://www.bitmi.ro/electronica/ecran-oled-0-96-cu-interfata-iic-i2c-10488.html) | Real-time info display | 18.98 RON | +| [LED 5mm x3 (green, red, blue)](https://sigmanortec.ro/led-5mm-galben?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72MHJfsM4OIBiavb31HceLdF0&gclid=Cj0KCQjww8rQBhDjARIsAE43KPPO91ZgWIrvTmxOFl-4Ef-DNobrKq3cDYaIEEjsULWql3iUzyc6cKkaAs_6EALw_wcB) | Visual feedback | 0.9 RON | +| [Resistors 220Ω x3 (kit)](https://sigmanortec.ro/kit-rezistori-30-valori-20-bucati?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72MHJfsM4OIBiavb31HceLdF0&gclid=Cj0KCQjww8rQBhDjARIsAE43KPOJp4UTmhwNo1vMdQtHna5V_TJA_fCljqShhdf_jti3jHOmUQJVbQcaAoqzEALw_wcB) | LED current limiting | 15.16 RON | +| [LiPo Battery 7.4V](https://www.emag.ro/baterie-gens-ace-g-tech-soaring-1000mah-7-4v-30c-2s1p-xt60-kxg0060208/pd/D5RNQWMBM/?utm_medium=ios&utm_campaign=share%20product&utm_source=mobile%20app) | Autonomous power supply | 61.35 RON | +| [2WD Car chassis kit](https://sigmanortec.ro/Kit-sasiu-masina-2WD-urmaritor-linie-p172447939?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72MHJfsM4OIBiavb31HceLdF0&gclid=Cj0KCQjww8rQBhDjARIsAE43KPOyOr5N7Gfx9LmCz1uGRrUwDUqEOnw8INjrzhQ2fKjxNQONSaTV7eAaAsCHEALw_wcB) | Mechanical strcuture | 41.21 RON | +| [Breadboard 400](https://www.bitmi.ro/componente-electronice/breadboard-400-puncte-pentru-montaje-electronice-rapide-10633.html) | Prototyping connections | 6.99 RON | +| [Jumper wires](https://www.bitmi.ro/electronica/40-fire-dupont-mama-mama-30cm-10503.html) | Prototyping connections(M-M, T-T, M-T) | 22.97 RON | +| [XT60 pigtail cable, male-female, 20cm](https://www.emag.ro/set-2-bucati-mufa-xt60-tata-mama-cablu-siliconic-lungime-20-cm-36073-36173/pd/D6J19QMBM/?utm_source=mobile%20app&utm_medium=ios&utm_campaign=share%20product) | Battery connector | 27.39 RON | +| [Black electrical tape](https://www.leroymerlin.ro/produse/banda-izolatoare-emos-19-mm-x-20-m-neagra-12085101.html?gclsrc=aw.ds&gad_source=1&gad_campaignid=22336169660&gbraid=0AAAAADwsS17jrlpcrXuL23b_yI2DmuFCj&gclid=Cj0KCQjww8rQBhDjARIsAE43KPO4Wb-Vk0dmpN3WlYYbxvbQjEA4Wd0Gpz1hDJzQXPEn98giooNR63UaAraTEALw_wcB) | Track line for car | 6.49 RON | +| [M3 screws + nuts set](https://www.leroymerlin.ro/produse/suruburi-metrice-cu-cap-inecat-otel-m3-x-16-mm-10721620.html) | Chassis assembly | ~2 RON | +| [Double-sided adhesive tape](https://www.leroymerlin.ro/produse/banda-dublu-adeziva-moment-power-fix-rezistenta-pana-120-kg-19-mm-x-1-5-m-alb-10575495.html?utm_source=google&utm_medium=cpc&utm_campaign=pmax&utm_content=materiale-constructii-vopsea&gad_source=1&gad_campaignid=22294857356&gbraid=0AAAAADwsS15SufdSsaTf_GoXFaVDVDdK6&gclid=Cj0KCQjww8rQBhDjARIsAE43KPM1ds0XzksdQLlTxEfcRNbOyKP_eLKT_-IymxFJXnC3-K9lwMZFNCYaAoT_EALw_wcB) | Component mounting | 19.98 RON | +| [HW-286 Step-down regulator](https://www.emag.ro/modul-convertor-coborator-dc-4v-38v-5a-reglabil-1-25v-36v-eficienta-96-putere-75w-protectie-scurtcircuit-pentru-sisteme-diy-si-alimentare-electronica-an7/pd/D19FC1YBM/?cmpid=145971&utm_source=google&utm_medium=cpc&utm_campaign=(RO:Whoop!)_3P-Y_%3e_Jucarii_hobby&utm_content=79559831474&gad_source=1&gad_campaignid=2078923891&gbraid=0AAAAACvmxQihs2WnLDXuriZW-vXAynmTp&gclid=Cj0KCQjww8rQBhDjARIsAE43KPP-zRUIV2l8rovl47pTQG0Q9itRJF-HGXpiUrw259kevNvRdie3-iwaAtLBEALw_wcB) | Voltage regulation 7.4V to 5V | 28.29 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| `embassy` | Async runtime for embedded Rust | Task management and async executor | +| `embassy-stm32` | Embassy HAL for STM32 | GPIO, PWM (TIM), I2C control | +| `embassy-time` | Timer abstractions | Delays and PID loop timing | +| `embassy-sync` | Async synchronization primitives | Coordinating sensor, PID, display and LED tasks | +| `embedded-hal` | Hardware Abstraction Layer | Generic hardware interfaces | +| `ssd1306` | OLED display driver | Drawing text and graphics on the SSD1306 via I2C | +| `embedded-graphics` | 2D graphics library | Rendering text and shapes on the OLED display | +| `defmt` | Efficient embedded logging | Debugging via RTT | +| `cortex-m` | Low-level ARM Cortex-M utilities | Low-level control | +| `cortex-m-rt` | Runtime for ARM Cortex-M | Entry point and interrupt setup | + +## Links + +- [STM32 Nucleo-U545RE-Q Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) +- [Nucleo-U545RE-Q User Manual](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) +- [SSD1306 Driver Documentation](https://docs.arduino.cc/libraries/ssd1306/) +- [TCRT5000 Datasheet](https://www.vishay.com/docs/83760/tcrt5000.pdf) +- [L298N Datasheet](https://www.st.com/resource/en/datasheet/l298.pdf) +- [HW-286 Datasheet](https://www.mantech.co.za/ProductInfo.aspx?Item=15M7625&srsltid=AfmBOopv679_kLveY5yQmN0XXcmfyDvMhncTeTYx8qqII-04p-BZZxNV) diff --git a/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_1.webp b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_1.webp new file mode 100644 index 00000000000..e0c4ff0844d Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_2.webp b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_2.webp new file mode 100644 index 00000000000..c64b0513f05 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/photo_2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schema_bloc.svg b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schema_bloc.svg new file mode 100644 index 00000000000..4a6b9acbb8f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schema_bloc.svg @@ -0,0 +1,4 @@ + + +Left MotorRight MotorL298N DriverSTM32 Nucleo U545REQHW-286 Step-downLiPo Battery 7.4VTCRT5000 5-channelOLED SSD1306 MPU6050LED X3I2CI2CGPIOGPIO7.4V7.4VGPIO5V \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schematic.webp new file mode 100644 index 00000000000..bd4d8d51bcf Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/sorana.ulmeanu/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/arch_diagram.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/arch_diagram.svg new file mode 100644 index 00000000000..40fe6e340ff --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/arch_diagram.svg @@ -0,0 +1,102 @@ +

Digital GPIO

Digital GPIO

Digital GPIO

I2C

SPI

Digital GPIO

Digital GPIO

USB HID

Power (USB 5V/3.3V)

Mini Switch
(Selectare Mod)

6x Butoane
(Stream Deck)

9x Butoane
(Whack-a-Mole)

STM32U545RE Nucleo

Display OLED 1.3

Matrice LED 8x8
(MAX7219)

9x LED-uri 5mm
(Joc)

Buzzer Activ

PC / Laptop
(Host)

\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/index.md new file mode 100644 index 00000000000..7cd6eaada6c --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/index.md @@ -0,0 +1,82 @@ +# Stream Deck and Fun +A hybrid USB HID controller and standalone reflex game for streamers and gamers. + +:::info + +**Author**: Anghelina Stefan-Emilian \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-Atackator](https://github.com/UPB-PMRust-Students/acs-project-2026-Atackator) + +::: + +## Description + +**Stream Deck and Fun** is a dual-mode hardware peripheral designed to enhance the streaming and gaming experience. The device operates in two distinct modes, toggleable via a physical switch: +1. **Stream Deck Mode (Control):** Acts as a customizable HID interface that sends macro commands to the PC. It features a bi-directional data flow, receiving real-time system feedback such as audio levels, microphone mute status, or live stream alerts. +2. **"Loading Screen" Mode (Physical Game):** A standalone reflex-based game ("Whack-a-Button") that runs 100% on the local hardware. It is designed to keep the user engaged during long matchmaking queues or lobby wait times without needing to alt-tab from the game. + +## Motivation + +I chose this project to explore the idea of building an embedded project that could also be linked to areas that i have an interest in like streaming. + +## Architecture + +![Project Architecture](./arch_diagram.svg) + +Main components: + +**Microcontroller** (STM32 Nucleo): The central processor running Rust Embassy to manage asynchronous tasks, power distribution, and real-time logic routing. + +**Inputs** (Tactile Buttons & Mini Switch): Physical triggers for stream macros and game actions, including a toggle to switch between operating modes. + +**Low-Level Drivers** (GPIO, SPI, I2C): The hardware abstraction layer that handles EXTI interrupts, software debouncing, and precise digital communication protocols. + +**Visual Outputs** (OLED & LED Matrix): A 1.3" screen and 8x8 matrix that display stream alerts, game targets, and live player scores. + +**Feedback Actuators** (LEDs & Buzzer): Provides immediate visual and auditory cues for game hits, alerts, and system status. + +## Log + +### Week 5 - 11 May + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +The project utilizes the **STM32 Nucleo-U545RE-Q**, a powerful ARM Cortex-M33 microcontroller. This board was chosen for its native USB support and advanced hardware timers, which are essential for driving addressable LEDs and handling HID reports efficiently. + +### Schematics + +![Project Schematic](./sdaf_schematic.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | Main Microcontroller (Cortex-M33) | ~165 RON | +| [Display OLED 1.3" Alb 128x64](https://sigmanortec.ro/Display-OLED-1-3-Alb-128x64-p136081872) | Dashboard and Score Display | 36 RON | +| [Modul matrice led 8x8, MAX7219, 5V](https://sigmanortec.ro/modul-matrice-led-8x8-max7219-5v) | Volume Visualizer and Status LED | 12 RON| +| [Tactile Buttons 12x12mm](https://sigmanortec.ro/Buton-12x12x7-3-p160373654) | Inputs for Deck and Game (15 pcs) | 15 RON | +| [Buzzer activ 5v](https://sigmanortec.ro/Buzzer-activ-5v-p126421597) | Audio feedback for game events | 2 RON | +| [LEDS](https://sigmanortec.ro/led-5mm-rosu) | LED (9>) | ~10 RON | +| [Passive Components Set](https://www.optimusdigital.ro/) | Resistors, Capacitors, Cables, Breadboards | ~35 RON | + +## Software + +The firmware is developed in **Rust** using the Embassy framework for modern, asynchronous embedded development. + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Low-level peripheral control and task scheduling | +| [usbd-hid](https://crates.io/crates/usbd-hid) | USB HID class device | Emulating keyboard/media keys for PC control | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing the UI, icons, and text for the OLED | +| [ssd1306](https://crates.io/crates/ssd1306) | I2C display driver | Interfacing with the OLED panel | +| [smart-leds](https://crates.io/crates/smart-leds) | WS2812B driver | Managing RGB animations and visualizer colors | + +## Links + +1. [STM32U5 Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-32bit-arm-cortexm33-mcus-stmicroelectronics.pdf) +2. [The Rust Embedded Book](https://docs.rust-embedded.org/book/) +3. [Embassy Project Documentation](https://embassy.dev/) +4. [WS2812B Timing and DMA Implementation](https://controllerstech.com/ws2812-led-with-stm32/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/sdaf_schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/sdaf_schematic.svg new file mode 100644 index 00000000000..4d9716affc8 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.anghelina/sdaf_schematic.svg @@ -0,0 +1,1117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 of 2 +2 of 2 +STM32U545REI6UFBGA64_5X5MM_STM +STM32U545REI6UFBGA64_5X5MM_STM +MAX7219CNG +2.2uf +GND +GNDGND +GND +GND +GND +GND +GND +GND +GND +OLED +U1A +PA0 +G2 +PA1 +H2 +PA2 +F3 +PA3 +G3 +PA4 +H3 +PA5 +F4 +PA6 +G4 +PA7 +H4 +PA8 +D7 +PA9 +C7 +PA10 +C6 +PA11 +C8 +PA12 +B8 +PA13 +A8 +PA14 +A7 +PA15 +A6 +PB0 +F5 +PB1 +G5 +PB2 +G6 +PB3 +A5 +PB4 +A4 +PB5 +C4 +PB6 +D3 +PB7 +C3 +PB8 +B3 +PB9 +A3 +PB10 +G7 +PB12 +H8 +PB13 +G8 +PB14 +F8 +PB15 +F7 +PC0 +E3 +PC1 +E2 +PC2 +F2 +PC3 +G1 +PC4 +H5 +PC5 +H6 +PC6 +F6 +PC7 +E7 +PC8 +E8 +PC9 +D8 +PC10 +B7 +PC11 +B6 +PC12 +C5 +PC13 +A2 +PC14-OSC32_IN +A1 +PC15-OSC32_OUT +B1 +PD2 +B5 +PH0-OSC_IN +C1 +PH1-OSC_OUT +D1 +PH3-BOOT0 +B4 +NRST +E1 +U1B +VSS_2 +C2 +VSS_3 +D4 +VSS_4 +D5 +VSS +D6 +VSSA +F1 +VBAT +B2 +VDD_2 +D2 +VDD_3 +E4 +VDD +E6 +VDDA +H1 +VDDUSB +E5 +VCAP +H7 +S1 +12 +S2 +12 +S3 +12 +S4 +12 +S5 +12 +S6 +12 +S7 +12 +S8 +12 +S9 +12 +IC1 +DIG2 +6 +DIG3 +7 +DIG4 +3 +DIG5 +10 +DIG6 +5 +DIG7 +8 +SEGA +14 +SEGB +16 +SEGC +20 +SEGD +23 +SEGE +21 +SEGF +15 +SEGG +17 +SEGDP +22 +DIG1 +11 +DIG0 +2 +DIN +1 +DOUT +24 +LOAD +12 +CLK +13 +ISET +18 +GND +9 +GND +4 +VCC +19 +S10 +12 +S11 +12 +S12 +12 +S13 +12 +S14 +12 +S15 +12 +D1 +D2 +D3 +D4 +D5 +D6 +D7 +D8 +D9 +1 +1 +2 +2 +C1 +S16 +1 +3 +C +J1 +VCC +1 +RST + + + +2 +IC3_VDD +3 +VDD +4 +IC1_VDDL +5 +IC2_VDDL +6 +GND +7*2 +SCL +8 +SDA +9 + + + + + + + +5V + + + + + + + +5V + + + + + + + +3V3 + + + + + + + +3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCHEMATIC_PM_SDAF +1/1 + + + + + + + + + + + + + + + + + + + + + +Sheet: + + + + + +A + + + +B + + + +C + + + +D +E + + + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +78 + + + + + +A + + + +B + + + +C + + + +D +E + + + + + +1 + + + +2 + + + +3 + + + +4 + + + +5 + + + +6 + + + +78 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/architecture.webp new file mode 100644 index 00000000000..c37677c9381 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/schematic.webp new file mode 100644 index 00000000000..249e354dd83 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/index.md new file mode 100644 index 00000000000..4069d98cb27 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.calmac/index.md @@ -0,0 +1,95 @@ +# Two-Wheeled Self-Balancing Robot + +:::info + +**Author**: Calmac Stefan \ +**GitHub Project Link**: [link_to_project](https://github.com/UPB-PMRust-Students/acs-project-2026-Stefan1627) + +::: + +## Description + +The system maintains an upright position on two wheels by continuously adjusting the speed of the motor. It receives data on the angle of inclination and angular velocity from an inertial measurement unit as inputs. A microcontroller processes this data using a PID control algorithm to calculate the necessary corrective forces. The output consists of PWM signals sent to the motor drivers, which actuate the wheels to move forward or backward, counteracting the inclination and keeping the system balanced in real time. The robot will also be controllable from a phone. + +## Motivation + +I’ve been itching to bridge the gap between my software-heavy coursework and hands-on hardware, and a self-balancing robot is the perfect "final boss" to start with. It’s a great way to finally dive into **Control Systems** and PID algorithms, moving beyond theory to see my code actually fight gravity in real time. Plus, adding smartphone control gives it that extra bit of polish and functionality that makes the whole engineering challenge even more rewarding. + +## Architecture + +![Diagram](./images/architecture.webp) + +## Log + +### Week 20 - 24 April +Made initial documentation and ordered hardware parts. + +### Week 27 - 30 April +Tested all components + +### Week 4 - 8 April +Assembled first prototype + +### Week 11 - 15 April +Implemented basic control loop and tested balancing. + +### Week 18 - 22 April +Added smartphone control and refined LQR parameters. + +## Hardware + +- Microcontroller: The central logic unit (likely an Arduino, ESP32, or similar) that processes sensor data and controls the motor drivers. + +- MPU6050 IMU: A 6-axis motion tracking device combining a 3-axis gyroscope and a 3-axis accelerometer to measure orientation and acceleration. + +- 42BYGHW609 Stepper Motors (x2): High-torque NEMA 17 stepper motors used for precise positioning or movement. + +- Motor Drivers: (Inferred) Interfaces like the A4988 or DRV8825 used to translate logic signals from the microcontroller into high-current power for the stepper motors. + +- Power Supply: A dedicated DC source (such as a LiPo battery or 12V adapter) to provide sufficient current for the motors and logic circuits. + +### Schematics + +![Schematic](./images/schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Microcontroller | [129 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396?CMP=e-email-sys-orderack-GLB) | +| [MPU6050](https://cdn.sparkfun.com/datasheets/Sensors/Accelerometers/RM-MPU-6000A.pdf) | IMU (Gyroscope + Accelerometer) | [14.68 RON](https://www.optimusdigital.ro/en/inertial-sensors/13611-mpu6050-accelerometer-and-gyroscope-module-soldered-pins.html) +| [HC-06](https://www.rajguruelectronics.com/Product/707/HC-06%20core%20bluetooth%20module.pdf) | Bluetooth Module | [30.40 RON](https://www.optimusdigital.ro/en/wireless-bluetooth/9629-hc-06-slave-module-with-adapter-33v-and-5v-compatible.html?search_query=0104110000063557&results=1) | +| [7805CV](https://www.alldatasheet.com/datasheet-pdf/view/22634/STMICROELECTRONICS/L7805CV.html) | Voltage Regulator | [2.29 RON](https://www.tme.eu/ro/details/l7805cv/regulatoare-de-tensiune-neregulata/stmicroelectronics/?brutto=1¤cy=RON&utm_source=google&utm_medium=cpc&utm_campaign=RUMUNIA%20%5BPLA%5D%20CSS&utm_content=&campaign_id=10591401989&gad_source=1&gad_campaignid=10591401989&gclid=Cj0KCQjww8rQBhDjARIsAE43KPNMQx9BcwCRkYgH--lNO9846eYcD11bwCDiKmXQAqxLTKGlnEeu9BgaAp3-EALw_wcB) | +| [2 X DRV8825](https://www.tme.eu/Document/1dd18faf1196df48619105e397146fdf/POLOLU-2133.pdf) | Stepper Motor Driver | [14.49 RON](https://www.optimusdigital.ro/ro/drivere-de-motoare-pas-cu-pas/154-driver-pentru-motoare-pas-cu-pas-drv8825.html) | +| [2 X 42BYGHW609](https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/42BYGHW609-Stepper-Motor-Datasheet1.pdf) | Stepper Motor | [2 x 55 RON](https://www.optimusdigital.ro/en/stepper-motors/1968-motor-pas-cu-pas-42byghw609.html) | +| Hubs | Coupling Hubs | [12 RON](https://www.optimusdigital.ro/en/coupling-hubs/227-hexagonal-motor-coupling-hub-5-mm.html) | +| [3 X 18650](https://www.tme.eu/Document/b0696c4f778ad42c714b01b76e452497/XTAR+18650+3500.pdf) | Battery | [44 RON](https://www.tme.eu/ro/details/xtar-18650-3.5ah10/acumulatori/xtar/18650-350pcm/?brutto=1¤cy=RON) | +| Wheels | Moving | [34 RON](https://sigmanortec.ro/roata-65mm-cu-cauciuc) | +| [2sc3399](https://www.alldatasheet.com/datasheet-pdf/view/108623/SANYO/2SC3399.html) | Transistor | [2.50 RON](https://www.digikey.lt/en/products/detail/rochester-electronics-llc/2SC3399-AC/12098102) | +|Capacitor 1000uF/16V | Filtering | [0.59 RON](https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/7822-condensator-electrolitic-1000-uf-16-v.html) | +|Capacitor 1000uF/25V | Filtering | [0.59 RON](https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/3005-condensator-electrolitic-de-1000-uf-la-25-v.html) | +|Capacitor 470uF/25V | Filtering | [0.49 RON](https://www.optimusdigital.ro/ro/componente-electronice-condensatoare/3007-condensator-electrolitic-de-470-uf-la-25-v.html) | + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Interface | Base library for project. | +| [defmt](https://crates.io/crates/defmt) | Compact logging framework | Debug and runtime status messages. | +| [defmt-rtt](https://crates.io/crates/defmt-rtt) | Real-Time Transfer | Logging backend. | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler for embedded Rust | Reports useful diagnostic information | +| [embassy-executor](https://crates.io/crates/embassy-executor) | Async task executor used by the Embassy embedded framework. | Structure async tasks. | +| [embassy-futures](https://crates.io/crates/embassy-futures) | Provides async utilities for embedded systems| join4 runs four async operations concurrently and waits for all of them. | +| [embassy-time](https://crates.io/crates/embassy-time) | Provides timing primitives for Embassy-based embedded firmware. | Used where a blocking-style delay object is required by a driver, especially sensor initialization. | +| [embedded-hal](https://crates.io/crates/embedded-hal) | Defines generic traits for embedded hardware interfaces. | Used the PWM trait abstraction for controlling PWM behavior generically. | +| [mpu6050-dmp](https://crates.io/crates/mpu6050-dmp) | Rust driver crate for the MPU6050 IMU. | Used to: initialize the MPU6050,configure accelerometer range, configure gyroscope range, read motion data. | + +## Links + +1. https://www.youtube.com/watch?v=I6z26LVu5y0 +2. https://zenn.dev/tana_ash +3. https://github.com/tana/balance-robot2 + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/photo3.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/photo3.webp new file mode 100644 index 00000000000..3221ecea987 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/photo3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week1.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week1.webp new file mode 100644 index 00000000000..66f89b26cf9 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week2.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week2.webp new file mode 100644 index 00000000000..7a56126eaf8 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/progress_week2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_datalogger_all.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_datalogger_all.svg new file mode 100644 index 00000000000..1c99f6351d9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_datalogger_all.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:GPS DataloggerREV:1.0Date:2026-05-13Sheet:1/1Drawn By:Stefan DorneanuCompany:BUZZER_C9900021864U611+2GPS_NEO-6M-V2B1VCC4RX3TX2GND1MPU6050-THU2AD01INT2SCL3SDA4GND53V36BMP280U33.3V7SCL5SDA4GND6Nucleo STM32F401RE saeU1PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC1380.96OLED_4P_MODULE_JXOLED1IIC-ConnectorSDA4SCL3VCC2GND1SMD_RGB_LED_BreakoutL1B3G2GND4R1Analog JoystickU4GND1+3.3V2VRx3VRy4SW5SD-READERSD1GND1MISO2SCK3MOSI4CS53V36 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_proiectpm-dataloggergps_2026-05-13.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_proiectpm-dataloggergps_2026-05-13.svg new file mode 100644 index 00000000000..11fc6fc9144 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/images/schematic_proiectpm-dataloggergps_2026-05-13.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:Sheet_1REV:1.0Date:2026-05-13Sheet:1/1Drawn By:cdmail2012.cdCompany:Your CompanyBUZZER_C9900021864U611+2GPS_NEO-6M-V2B1VCC4RX3TX2GND1MPU6050-THU2AD01INT2SCL3SDA4GND53V36BMP280U33.3V7SCL5SDA4GND6Nucleo STM32F401RE saeU1PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC1380.96OLED_4P_MODULE_JXOLED1IIC-ConnectorSDA4SCL3VCC2GND1SMD_RGB_LED_BreakoutL1B3G2GND4R1 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/index.md new file mode 100644 index 00000000000..e05f669ccde --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/index.md @@ -0,0 +1,101 @@ +# GPS Datalogger for Bicycle + +A embedded system for recording and monitoring bicycle ride data, with real-time display and event detection. + +:::info + +**Author**: Dorneanu Stefan Cristian \ +**GitHub Project Link**: [Project Link](https://github.com/UPB-PMRust-Students/acs-project-2026-stefandorneanu) + +::: + + + +## Description + +The system acquires data from a GPS module (position, speed, altitude), an accelerometer and gyroscope (sudden braking and cornering detection) and a barometric sensor (precise altitude). Data is displayed in real time on a display and saved persistently on an SD card in CSV format. The software runs multiple parallel async tasks: GPS acquisition with data decoding, event detection from the accelerometer and gyroscope with filtering on the magnitude of the acceleration vector, live display and SD card writing. Sensor fusion combines GPS altitude with barometric altitude for improved accuracy. + +## Motivation + +I have been cycling regularly for the past few years and always wanted a deeper understanding of my rides beyond what a simple phone app can offer. Most commercial solutions are either too expensive or too closed to customize. Building this system from scratch on a microcontroller gives me full control over what data is collected and how it is processed. I also wanted to explore how sudden braking and cornering events can be detected in real time using an IMU, which has practical applications in cyclist safety. The project strikes a good balance between hardware integration and software complexity, making it an ideal fit for this project. + +## Architecture + +The system is structured around 6 main async tasks running in parallel: + +- **GPS Task** — reads NMEA sentences from the NEO-6M module via UART, parses $GPRMC and $GPGGA sentences to extract position, speed, altitude and time +- **IMU Task** — reads the MPU-6050 accelerometer via I2C and detects sudden braking events, classifying them as moderate (yellow alert) or severe/accident (red alert + buzzer) +- **Input Task** — reads the KY-023 joystick ADC axes and button, generates navigation events for screen switching and race control +- **Navigation Task** — processes joystick events to switch between the 4 OLED screens and trigger race start/stop +- **Display Task** — updates the OLED screen at 5Hz with the currently selected view: environment data, GPS status, speed and altitude, or race control +- **SD Task** — monitors race recording state and writes GPS trackpoints (timestamp, latitude, longitude) to a CSV file on the SD card when a race is active + +All tasks communicate through atomic variables for sensor data and Embassy Signal primitives for events, avoiding data conflicts without blocking. + +## Log + + + +### Week 5 - 11 May + +Ordered all hardware components (GPS module, accelerometer/gyroscope MPU-6050, barometric sensor AHT20+BMP280, OLED display, SD card module, RGB LED, passive buzzer, LiPo battery, TP4056 charger, wires and breadboard). Set up the Rust embedded development environment with Embassy framework. Created individual test projects for each component. Successfully tested the buzzer (PWM signal generation), RGB LED (common anode, color cycling), OLED display (I2C communication, text rendering) and accelerometer/gyroscope (I2C data reading). Started testing the GPS module — UART communication works and NMEA sentences are being received. + +### Week 12 - 18 May + +Completed testing of all remaining individual components. Successfully obtained the first GPS fix outdoors after tuning the UART communication and analyzing NMEA sentences in real time. Tested the SD card module (SPI communication, FAT32 initialization, file write and read-back verification). Added a KY-023 analog joystick to the project for OLED screen navigation, tested ADC reading on both axes and button input. Reallocated several GPIO pins to avoid conflicts between the SD card SPI bus and the joystick ADC inputs. Started development of the main integrated project combining all components into 6 parallel async Embassy tasks. + +![progress_pic](images/progress_week1.webp) + +### Week 19 - 25 May + +3D printed a custom enclosure for the system, housing the NUCLEO board, display, GPS module and all connected components. Completed the full software implementation — all tasks are running in parallel and fully integrated. The OLED navigation with the joystick is functional across all 4 screens. The system is now fully operational as a standalone bicycle GPS datalogger. + +![progress_pic2](images/progress_week2.webp) +![progress_pic3](images/photo3.webp) + +## Hardware + +The system uses the NUCLEO-U545RE-Q board as the main microcontroller. The GPS module provides position and speed data via UART. The accelerometer and gyroscope (IMU) are connected via I2C and detect sudden movements. The barometric sensor, also on I2C, measures atmospheric pressure to calculate altitude. An OLED display shows data in real time, while an SD card module saves all data in CSV format. The RGB LED and buzzer signal detected events such as sudden braking and sharp cornering. + +### Schematics + +![schematici proiect](images/schematic_datalogger_all.svg) + +### Bill of Materials + +| Device | Usage | Price | +| -------- | -------- | ------- | +| [NUCLEO-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | 130 RON | +| [GPS Module NEO-6M](https://www.optimusdigital.ro/en/gps/2137-gyneo6mvgps-module-with-miniature-antenna.html) | Position, speed, GPS altitude | 69.99 RON | +| [Accelerometer and Gyroscope MPU-6050](https://www.optimusdigital.ro/en/inertial-sensors/96-mpu6050-accelerometer-and-gyroscope-module.html) | Sudden braking and cornering detection | 14.68 RON | +| [Barometric Sensor AHT20 + BMP280](https://www.optimusdigital.ro/en/pressure-sensors/1777-bmp280-barometric-pressure-sensor-module.html) | Temperature and barometric altitude | 12.00 RON | +| [OLED Display 0.96" I2C](https://www.optimusdigital.ro/en/lcds/2894-096-i2c-oled-module.html) | Real-time data display | 18.98 RON | +| [MicroSD Card Module SPI](https://www.optimusdigital.ro/en/memories/1516-microsd-card-slot-module.html) | Data logging in CSV format via SPI | 4.99 RON | +| MicroSD Card 16GB Class 10 | CSV file storage | 43 RON | +| [Analog Joystick KY-023](https://www.optimusdigital.ro/en/joysticks/12-ps2-joystick-module.html) | OLED screen navigation and race control | 4.99 RON | +| RGB LED Module | Visual event indicator | 6.39 RON | +| Passive Buzzer | Audio alert for sudden braking | 2.97 RON | +| LiPo Battery 3.7V + TP4056 module | Mobile power supply and charging | 34.67 RON | +| Wires and Breadboard | Component connections | 38.96 RON | + +## Software + +| Library | Description | Usage | +| --------- | ------------- | ------- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async framework for embedded Rust | Parallel tasks, peripheral drivers, I2C, SPI, UART, ADC, GPIO | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for embedded | Running 6 parallel async tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time management in Embassy | Async timers and delays | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives | Signal and Mutex for inter-task communication | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy) | Embedded HAL adapters for Embassy | Shared I2C bus between MPU6050, BMP280 and OLED | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | FAT32 file system for SD | CSV writing on SD card via SPI | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | SPI device trait implementation for SD card | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | OLED display driver | Real-time data display via I2C | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library for embedded | Text rendering on OLED | +| [heapless](https://github.com/rust-embedded/heapless) | Stack-allocated data structures | String formatting without heap | +| [libm](https://github.com/rust-lang/libm) | Math functions for no_std | Haversine formula, sqrt | + +## Links + +1. [Embassy Rust Framework](https://embassy.dev) +2. [STM32U545 Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-armbased-32bit-mcus-stmicroelectronics.pdf) +3. [Embedded Rust Programming](https://docs.rust-embedded.org/book/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/schematic_proiectpm-dataloggergps_2026-05-13.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/schematic_proiectpm-dataloggergps_2026-05-13.svg new file mode 100644 index 00000000000..11fc6fc9144 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.dorneanu/schematic_proiectpm-dataloggergps_2026-05-13.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:Sheet_1REV:1.0Date:2026-05-13Sheet:1/1Drawn By:cdmail2012.cdCompany:Your CompanyBUZZER_C9900021864U611+2GPS_NEO-6M-V2B1VCC4RX3TX2GND1MPU6050-THU2AD01INT2SCL3SDA4GND53V36BMP280U33.3V7SCL5SDA4GND6Nucleo STM32F401RE saeU1PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC1380.96OLED_4P_MODULE_JXOLED1IIC-ConnectorSDA4SCL3VCC2GND1SMD_RGB_LED_BreakoutL1B3G2GND4R1 \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/architecture.svg new file mode 100755 index 00000000000..6f99e06714f --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/architecture.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + DJ Controller — Architecture + + + + SD Card + WAV files + + + + STM32U5 + + + + Input Handler + User controls + + + Audio Engine + DSP · Mixing · Playback + (Internal DAC out) + + + Display Driver + UI + + + + + + + + + + + + SPI + + + + Rotary Encoders + 2× jog wheels + + + Potentiometers + EQ · Filters · Vol · XF + + + Push Buttons + Play · Cue · Loop · Sync + + + + GPIO + + + ADC + + + GPIO + + + + ILI9341 + 1× TFT Display + + + SPI + + + + + 3.5mm AUX + (internal DAC) + + + + cue out + (internal DAC) + + + + Marshall Middleton + Built-in 50W Amp + + AUX input + + + + TPA6132 Amp + Headphone driver + + + + Speakers + + + + Headphones + + \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj.webp new file mode 100755 index 00000000000..cd0b7b02bbd Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_controller.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_controller.webp new file mode 100755 index 00000000000..484db88673a Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_controller.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_full.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_full.webp new file mode 100755 index 00000000000..4af43b5a7fa Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/images/dj_full.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/index.md new file mode 100644 index 00000000000..794a8224491 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan.raileanu/index.md @@ -0,0 +1,105 @@ +# DJ Controller + +A standalone two-deck DJ controller running on the STM32U5, written in Rust. + +:::info + +**Author**: Stefan Răileanu \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/acs-project-2026-raylaj23) + +::: + +## Description + +A fully standalone two-deck DJ controller built on the STM32U5 microcontroller, written in Rust using the Embassy framework. The board reads WAV audio files from an SD card and performs real-time mixing between two decks. + +Each deck has its own jog wheel (a rotary encoder), three EQ knobs (bass, mid, high), a volume knob, and dedicated buttons for Play/Pause, Cue, Loop, Sync, and Headphone Cue Select. One shared TFT display shows track name, position, BPM, and loop state in play mode, or a scrollable file list in browse mode. + +Audio leaves the STM32U5 through its internal DAC: the main mix goes via a 3.5mm AUX jack into a Marshall Middleton speaker, and the cued deck is routed through a TPA headphone amplifier to the headphone output. + +## Motivation + +I'm a techno enthusiast and wanted a project that combines the technical skills I'm learning with a hobby I already love. + +## Architecture + +The system is organized around three main components: an **Input Handler**, an **Audio Engine**, and a **Display Driver**. + +* **Input Handler** — reads rotary encoders (jog wheel seek and track browse), potentiometers (EQ bass/mid/high per deck, volume per deck), and buttons (Play/Pause, Cue, Loop, Sync, Headphone Cue). + +* **Audio Engine** — streams two WAV files from SD card over SPI. Each deck runs an independent DSP chain (3-band biquad EQ: low-shelf bass at 200Hz, peaking mid at 1000Hz, high-shelf at 3000Hz), plus loop, cue, sync, and headphone cue routing logic. The internal DAC outputs the main mix on CH1 (Marshall) and the cued deck on CH2 (headphones). + +* **Display Driver** — one ILI9341 2.4" TFT display shows per-deck state. In browse mode: scrollable WAV file list with highlighted selection. In play mode: track name, BPM, progress bar, cue point marker, loop region overlay, and status indicators (SYNC, HP, LOOP, PAUSED). + +![Architecture](images/architecture.svg) + +## Log + +### Week 21 - 27 April +* Completed the documentation and ordered the hardware parts + +### Week 28 April - 4 May +* Connected all the parts to STM32 + +### Week 5 - 11 May +* Got basic WAV playback working over SPI + DAC +* Added volumes per deck + +### Week 12 - 18 May +* Implemented dual-deck streaming with ping-pong buffer architecture +* Added 3-band biquad EQ (bass/mid/high) per deck + +### Week 19 - 25 May +* Implemented browse mode with rotary encoder track selection +* Added Play/Pause, Cue, Loop, Sync buttons +* Added headphone cue routing +* Added display with play mode and browse mode UI +* Finalized hardware connections (design) + +## Hardware + +The controller is built around the **STM32U545RE Nucleo board**. Two WAV streams are read from a microSD card over SPI. Audio is generated by the **STM32U545RE's internal DAC**. The main mix goes through a **3.5mm AUX jack** into a **Marshall Middleton** speaker. The cue channel goes through a **TPA headphone amplifier** to the headphones. + +Each deck has a rotary encoder used as jog wheel (seek in track) and browse wheel (select track). Six potentiometers per deck: Bass EQ, Mid EQ, High EQ, and Volume. Five buttons per deck: Play/Pause, Cue, Loop, Sync, Headphone Cue Select. One shared **ILI9341 2.4" TFT display** (split into two halves, one per deck) connects over SPI1. + +### Schematics + +![Schematics](images/dj_controller.webp) + +![dj_full](images/dj_full.webp) + +![dj](images/dj.webp) + + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| STM32U545RE Nucleo Board | Main microcontroller | — | +| TPA Headphone Amplifier module | Headphone cue output | 24 RON | +| 3.5mm Stereo Audio Jack (female) ×2 | AUX output (Marshall) + headphone output | 4 RON | +| Marshall Middleton | Main speaker via built-in amplifier (AUX in) | — | +| Rotary Encoders ×2 | Jog wheel — seek in track, browse tracks | 10 RON | +| Potentiometers 10kΩ ×8 | EQ Bass/Mid/High ×6, Volume ×2 | 10.48 RON | +| Push Buttons ×10 | Play/Pause ×2, Cue ×2, Loop ×2, Sync ×2, HP Cue ×2 | 8.30 RON | +| ILI9341 2.4" TFT Display ×1 | Track info, BPM, position, browse file list | 34 RON | +| MicroSD card | Storing WAV audio files and BPM metadata | 40 RON | +| Wires, breadboard, capacitors | Wiring and decoupling | 50 RON | +| | | **Total: ~180 RON** | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rs](https://github.com/embassy-rs/embassy) | Async embedded framework for Rust | Main async runtime — drives SPI, DAC, ADC, DMA, GPIO EXTI concurrently | +| [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | SD card FAT filesystem driver | Reads WAV files and companion BPM `.txt` files from SD card | +| [mipidsi](https://crates.io/crates/mipidsi) | Display driver (ILI9341/ST7789) | Drives the TFT display over SPI1 | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Renders track name, BPM, progress bar, cue/loop markers, browse list | +| [libm](https://crates.io/crates/libm) | Math functions for no_std | Biquad EQ coefficient calculations (sin, cos, pow, sqrt) | + +## Links + +1. [STM32U545RE Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-armbased-32bit-mcus-stmicroelectronics.pdf) +2. [Embassy — Async Embedded Rust](https://embassy.dev/) +3. [WAV file format specification](http://soundfile.sapp.org/doc/WaveFormat/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/architecture.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/architecture.webp new file mode 100644 index 00000000000..f436bdf90f3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/architecture.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/index.md new file mode 100644 index 00000000000..f8fb4e7b762 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/index.md @@ -0,0 +1,112 @@ +# Microfon Parabolic Digital: Beamforming Audio în Timp Real +Sistem de captură audio direcțională bazat pe un array de microfoane PDM și procesare digitală pe STM32U5. + +:::info + +**Author**: Manda Stefan-Eduard \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-N1mbusul + +::: + +## Description + +Ideea proiectului este să fac un microfon care "vede" doar într-o singură direcție. Mai exact, folosesc 4 microfoane mici lipite pe o riglă la distanțe egale. Toate cele 4 captează sunetul în același timp, iar placa mea Nucleo adună semnalele lor folosind beamforming. Dacă cineva vorbește fix din față, vocea lui se aude clar și tare. Dacă vine zgomot din lateral, placa îl "anulează" prin software. La final, poți să bagi căștile în montaj și să auzi rezultatul filtrat, iar pe un ecran OLED mic pun un grafic care arată nivelul volumului si mesaje de eroare daca exista. + +## Motivation + +Am ales proiectul acesta pentru că mi s-a părut super interesant cum poți să "rotești" sau să focusezi un microfon doar din cod, fără să-l miști fizic. Mi se pare o metodă foarte tare de a scăpa de zgomotul de fundal si sincer am văzut-o ca o provocare. +În plus, am vrut să testez placa asta Nucleo U5 care e destul de nouă și am vazut ca are cateva functii speciale pentru audio (perifericul mdf). Totodată, e o ocazie bună să învăț Rust mai serios pe sisteme embedded, pentru că tot aud că e mult mai sigur și mai rapid decât C-ul clasic. + +## Architecture + +![Diagrama Arhitectura](./architecture.webp) + +Proiectul este structurat pe un flux de date continuu, împărțit în patru etape principale: + +1. **Captura Analogică și Digitalizarea (Input)**: + Cele 4 microfoane PDM sunt legate în paralel la același semnal de ceas generat de placa Nucleo. Ele trimit fluxuri de biți (0 și 1) către pinii procesorului. + +2. **Filtrarea Hardware (MDF)**: + Semnalul brut de la microfoane intră în perifericul **MDF** (Multi-function Digital Filter). Totul se întâmplă hardware, deci procesorul nu stă ocupat cu asta. + +3. **Logica de Procesare (Rust + DMA)**: + Datele filtrate sunt mutate automat în memoria RAM prin **DMA**. + - Iau eșantioanele de la cele 4 microfoane. + - Le adun și fac media lor (algoritmul **Delay-and-Sum**). + - Acest proces anulează zgomotul care vine din lateral și păstrează doar ce vine din față. + +4. **Ieșirea Audio și Vizuală (Output)**: + - Sunetul procesat este trimis prin protocolul **I2S** către DAC-ul extern, unde pot conecta căștile. + - În paralel, calculez intensitatea sunetului și trimit datele prin **I2C** către ecranul OLED pentru a avea un feedback vizual (un VU-meter). + +![Prototip Real](./poza_proiect_pm.webp) + + +## Log + +### Week 5 + +Am stabilit ideea de proiect și am primit aprobarea că este ok. + +### Week 7-8 + +Am dat comanda de piese de pe AliExpress și am început să caut documentația embassy-rs. + +### Week 9 + +Mi-au venit piesele și m am apucat să scriu documentația. + +### Week 11 + +Am termiant circuitul si am facut schema in KiCad (microfoane, DAC, Oled). + +### Week 12-13 + +Am scris cod de test in Rust: mai intai un singur microfon + casti, apoi OLED, apoi 2 microfoane. Inca lucrez la al treilea/al patrulea canal ca sa ajung la array ul complet de 4. + +## Hardware + +Sistemul se bazează pe placa de dezvoltare Nucleo-U545RE-Q. + +Configuratia fizica include: +- **Array-ul de captură**: 4 microfoane digitale PDM, montate liniar la o distanță fixă de 2 cm între ele. Am ales această distanță pentru a optimiza focalizarea pe frecvențele vocii umane și pentru a evita erorile de fază. +- **Sistemul de ieșire**: Un modul DAC I2S dotat cu mufă jack de 3.5mm, care îmi permite să ascult în timp real sunetul procesat prin orice pereche de căști standard. +- **Interfața vizuală**: Un ecran OLED de 0.96" pe bus-ul I2C, pe care voi afișa starea filtrelor și un indicator vizual pentru intensitatea sunetului captat. + +## Schematics + +Schematica electrica a sistemului include conexiunile pentru bus-ul de date PDM(microfoane), interfata I2S(DAC audio) si magistrala I2C pentru ecranul OLED + +![Schematica KiCad](./schematica_kicad.webp) + +## Bill of Materials + +| Device | Price | +|--------|--------| +| [Nucleo-U545RE-Q] | Primita de la facultate +| [4x PDM MEMS Mic (MP34DT01)](https://a.aliexpress.com/_EIQWrs6) | ~ 120 de lei | +| [I2S DAC PCM5102](https://a.aliexpress.com/_EHXVHhy) | ~ 30 de lei | +| [OLED 0.96" I2C](https://a.aliexpress.com/_EygJIYq) | ~ 20 de lei | +| [Breadboard & Jumpers] | ~ 30 de lei | + +## Software + +Tot codul e in Rust, cu embassy pentru partea de harware. + +Am mai multe programe de test: + +'mic_listen' - un microfon + casti - verific ca aud ceva clar +'mic_test' - acelasi microfon, dar cu VU pe OLED +'casti_oled' - 2 microfoane + casti + ecran + +Pe scurt: microfoanele dau PCM la 16kHz, il trimit la DAC pt casti, iar in paralel calculez nivelul pentru oled. Beamforming-ul complet pe toate cele 4 canale e inca in dezvoltare - acum merge bine lantul de baza si varianta cu 2 microfoane. + +## Links + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer pentru Rust | Gestiune periferice (I2C, I2S, MDF, DMA) | +| [cmsis-dsp](https://crates.io/crates/cmsis-dsp) | ARM CMSIS-DSP bindings | Procesare matematică optimizată pentru Cortex-M | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Randare VU-meter și text pe OLED | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | Display driver pentru OLED | Controlerul ecranului prin I2C | + diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/poza_proiect_pm.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/poza_proiect_pm.webp new file mode 100644 index 00000000000..9a0b611bc41 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/poza_proiect_pm.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/schematica_kicad.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/schematica_kicad.webp new file mode 100644 index 00000000000..271f1ae85c4 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_eduard.manda/schematica_kicad.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/collage.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/collage.webp new file mode 100644 index 00000000000..8669c951f11 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/collage.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/fusion_project.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/fusion_project.webp new file mode 100644 index 00000000000..34d6fe423eb Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/fusion_project.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/kikad-deskcal.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/kikad-deskcal.webp new file mode 100644 index 00000000000..1da590ceb06 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/kikad-deskcal.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/project-pm-diagram.drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/project-pm-diagram.drawio.svg index a53d1a75d0e..e8e759f3284 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/project-pm-diagram.drawio.svg +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/project-pm-diagram.drawio.svg @@ -1,4 +1,4 @@ -
Laptop - Python script 
Google Calendar + OpenWeartherMap -> JSON
STM32 NUCLEO-U545RE-Q - embassy-rs








shared state - embassy Mutex
uart_task
parse JSON
sensor_task
I2C - BME280
display_task
SPI-ILI9341
alert_task
SPI + PWM
ILI9341 display

SPI + potentiometer (ADC)
Buzzer + button

PWM + GPIO interrupt
BME280 sensor

I2C - temp, humidity, pressure
WS2812B ring light

SPI - 16RGB LEDs
\ No newline at end of file +
Laptop (WEB APP --> Python Script --> UART)
OpenWeatherMap API + NewsAPI (JSON) 
STM32 NUCLEO - embassy RS













UART task

parse JSON data
SENSOR task

ISC - BME280
Air Quality Sensor
DISPLAY & TOUCHSCREEN

SPI - ILI9341
ALERTS task

SPI (ring light) + PWM (buzzer)
shared state - embassy Mutex
ILI9341 
DISPLAY
& TOUCHSCREEN
BME280 SENSOR

I2C - temperature, humidity, pressure
WS2812B 16 LEDs Ring Light (SPI)
Buzzer + Button

PWM + GPIO Interrupt
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/wires_project.webp b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/wires_project.webp new file mode 100644 index 00000000000..baa677521b5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/images/wires_project.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/index.md b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/index.md index 2bb4fe681d7..6ddd4106301 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/stefan_vasile.badea/index.md @@ -1,7 +1,7 @@ # DeskCal - Smart Desk Calendar -A smart desk calendar that displays weather, local sensor data, and Google -Calendar events on a TFT screen, with animated LED ring alerts for upcoming -meetings. +A smart desk calendar that displays weather, news, local sensor data, and +calendar events from a dedicated web app on a TFT touch screen, with animated +LED ring alerts for upcoming meetings. :::info @@ -14,16 +14,24 @@ meetings. ## Description -DeskCal is a smart desk calendar running on an STM32 Nucleo-U545RE-Q -microcontroller. It receives weather data and Google Calendar events from a -laptop via USB-UART, processed by a Python script. A BME280 sensor provides -local temperature, humidity, and atmospheric pressure. A TFT color display shows -four navigable pages: current clock and date, weather conditions, local sensor -data with historical temperature graph, and upcoming calendar events. A -WS2812B RGB LED ring displays animated color patterns indicating meeting -proximity. A passive buzzer emits timed audio alerts before events. A physical -button snoozes active reminders. The device is housed in a custom 3D-printed -enclosure. +DeskCal is a smart desk calendar running on an STM32 Nucleo-U545RE-Q +microcontroller. It receives real-time data from a laptop via USB-UART — +including current time, weather conditions, Calendar events, and live +news headlines — all serialized as JSON by a companion Python script. + +A BME280 sensor measures local temperature, humidity, and atmospheric pressure. +A 2.8" ILI9341 TFT touchscreen display renders five navigable screens: a +summary overview, a full-screen clock with upcoming meetings, a local air +quality dashboard, an outdoor weather page, and a live news feed. Navigation +between screens is done via swipe gestures on the touchscreen. + +A WS2812B RGB LED ring displays animated color patterns — configurable via a +companion web application — with a dedicated alert mode when a meeting is +approaching. A passive buzzer emits an audio alert before events start. + +The system supports multiple visual themes, selectable in real time from the +companion web app which communicates with the Python bridge over HTTP. The +device is housed in a custom 3D-printed enclosure. ## Motivation @@ -46,6 +54,38 @@ include: ![System Architecture Diagram](./images/project-pm-diagram.drawio.svg) +**DeskCal Controller (Web App)** — a local web application running in the +browser that allows the user to select visual themes, configure LED ring +behavior, adjust brightness, and push quick meetings to the device. Communicates +with the Python bridge over HTTP at localhost:5000. + +**Python Bridge Script** — runs on the laptop and acts as the central data +aggregator. Fetches weather data from OpenWeatherMap, events from +Calendar, and news headlines from an RSS feed using an open-source NewsAPI. +Receives theme and configuration changes from the web app and forwards +everything to the STM32 as JSON packets over USB-UART. Sends time +synchronization packets every second and full data updates every 60 seconds. + +**STM32 Nucleo-U545RE-Q** — main controller running embassy-rs. Contains a +dedicated async UART task that receives and parses incoming JSON packets and +dispatches them to the main loop via a channel. + +**Display Subsystem** — ILI9341 2.8" TFT touchscreen over SPI renders five +screens: Summary (screen 0), Clock + Meetings (screen 1), Air Quality (screen +2), Weather (screen 3), News (screen 4), and a pomodoro timer (screen 5). +Navigation between screens is performed via swipe gestures detected on the +XPT2046 touchscreen controller. When a meeting is within 5 minutes, a +full-screen alert overlay appears with a dismiss button on the touchscreen. + +**Alert Subsystem** — WS2812B LED ring driven via one-wire protocol (using SPI +peripheral for timing) displays eight configurable animation modes: +Off, Dim, Solid, Breathe, Pulse, Fast, Strobe, and Chase. + +The ring switches to a dedicated alert animation mode when a meeting is +approaching. A buzzer driven by PWM emits a tone. Both the normal ring +color/animation and the alert color/animation are configurable in real time +from the web app. + The system is organized around four main components: **Host Python Script** — runs on the laptop, fetches weather from OpenWeatherMap @@ -63,7 +103,6 @@ visual and audio alerts based on meeting proximity; tactile button handles snooze via GPIO interrupt. - ## Log @@ -72,28 +111,65 @@ snooze via GPIO interrupt. Finalized project idea and had the theme approved by the lab coordinator. ### Week 7 -Ordered all hardware components from Optimus Digital and eMAG. Started reading -embassy-rs documentation and experimenting with basic GPIO and UART on the +Ordered all hardware components from Optimus Digital and eMAG. Started reading +embassy-rs documentation and experimenting with basic GPIO and UART on the Nucleo board. Started enclosure design in Fusion 360. -### Week 8 +### Week 8 & 9 +Completed project documentation page. Set up embassy-rs project skeleton for +STM32U545. Verified all components arrived and functional. + +### Week 11 - Hardware Milestone +Connected and tested all hardware components: ILI9341 display via SPI, +BME280 sensor via I2C, WS2812B LED ring via SPI, passive buzzer via PWM, +XPT2046 touchscreen, potentiometer via ADC. Designed and 3D printed enclosure. +Implemented basic firmware with display rendering, sensor reading, touch input, +buzzer alerts and LED ring animations. + +![Project Wired](./images/wires_project.webp) +![Fusion Enclosure Project](./images/fusion_project.webp) -Stating writing the documentation page. +### Week 12 - Software Milestone +Implemented UART communication with the Python bridge, JSON parsing, and +data handling. Developed the five main display pages with embedded-graphics. +Implemented swipe gesture detection for page navigation. Developed LED ring +animation modes and alert logic based on meeting proximity. Integrated buzzer +alerts. Tested the complete end-to-end system with the Python bridge sending +real-time data updates and theme changes from the web app. Enclosure design +finalized and printed. + +![Collage](./images/collage.webp) ## Hardware -The project uses an STM32 Nucleo-U545RE-Q as the main microcontroller. -A 2.8" ILI9341 TFT display connected via SPI renders the user interface across -four pages. A BME280 sensor connected via I2C measures local temperature, -humidity, and atmospheric pressure. A WS2812B 16-LED ring connected via SPI -provides animated RGB visual alerts. A passive buzzer driven by PWM emits -audio alerts. A 50kΩ potentiometer on an ADC pin handles page navigation. -A tactile button on GPIO pins handle snooze and interaction. -All components are housed in a custom 3D-printed PLA enclosure. +The project uses an STM32 Nucleo-U545RE-Q as the main microcontroller, running +at 160MHz via PLL configured in firmware. + +A 2.8" ILI9341 TFT display with integrated XPT2046 touchscreen controller is +connected via SPI1 (PA5=SCK, PA7=MOSI, PA6=MISO). The display uses a dedicated +SPI chip select (PC9) and control pins for data/command (PC8) and reset (PC6). +The touchscreen controller shares the SPI bus with a separate chip select (PB4) +and an interrupt line (PC13) for touch detection. + +A BME280 barometric sensor is connected via I2C1 (PB6=SCL, PB7=SDA) and +provides local temperature, humidity, and atmospheric pressure readings. + +A WS2812B 16-LED RGB ring is driven via one-wire protocol using the SPI2 +peripheral (PC3=MOSI, PB13=SCK) at 6.4MHz for precise signal timing. Each bit +is encoded as a single SPI byte (0xC0 for logical 0, 0xF8 for logical 1). + +A passive buzzer is driven via PWM on TIM1 channel 1 (PA8), producing +configurable frequency tones for meeting alerts. + +All components are interconnected via jumper wires on a mini breadboard and +housed in a custom 3D-printed PLA enclosure designed in Fusion 360. +Ordered all hardware components from Optimus Digital and eMAG. Started reading +embassy-rs documentation and experimenting with basic GPIO and UART on the +Nucleo board. Started enclosure design in Fusion 360. ### Schematics -* TODO: KiCad schematic to be added at Hardware Milestone (Week 11) +![KiCad schematic](./images/kikad-deskcal.webp) ### Bill of Materials @@ -114,31 +190,39 @@ The format is | [BME280 Barometric Sensor Module](https://www.optimusdigital.ro/en/pressure-sensors/1354-modul-senzor-barometric-de-presiune-bme280.html) | Measures local temperature, humidity and pressure | ~34 RON | | [WS2812B RGB LED Ring (16 LEDs)](https://www.optimusdigital.ro/en/others/749-inel-de-led-uri-rgb-ws2812-cu-16-led-uri.html) | Visual meeting alerts with animated color patterns | ~20 RON| | [Passive Buzzer 3.3V](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html) | Audio alerts before and during meetings | ~13 RON| -| Potentiometer Mono 50kΩ | Page navigation via ADC | ~7 RON| | [Tactile Button 6x6x6mm](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1119-buton-6x6x6.html) (x2) | Snooze reminder and UI interaction | ~3 RON| | [Jumper Wires M-F 40p 20cm](https://www.optimusdigital.ro/ro/fire-fire-mufate/92-fire-colorate-mama-tata-40p.html) | Component interconnections | ~10 RON| | [Jumper Wires F-F 10p 20cm](https://www.optimusdigital.ro/ro/fire-fire-mufate/91-fire-colorate-mama-mama-10p.html) (x2) | Component interconnections | ~10 RON| | [Breadboard 170 points](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/246-mini-breadboard-colorat.html) | Prototyping connections | ~3 RON| -| 3D-printed PLA enclosure | Houses all components | TBD | - +| 3D-printed PLA enclosure | Houses all components | provided by faculty | ## Software -* TODO: the rest will be added as I develop the code - | Library | Description | Usage | -|---------|-------------|-------| -| [st7789](https://github.com/almindor/st7789) | Display driver for ST7789 | Used for the display for the Pico Explorer Base | -| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| --- | --- | --- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | Peripheral drivers: SPI1, SPI2, I2C1, USART1, GPIOs, and TIM1 PWM for the buzzer. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Running concurrent tasks (`#[embassy_executor::main]` and the asynchronous `uart_task`). | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Sync primitives | `Channel` for inter-task packet communication and `Mutex` for safe SPI bus sharing. | +| [embassy-embedded-hal](https://github.com/embassy-rs/embassy) | Embedded HAL bridge | `SpiDevice` wrapper to share SPI1 between the ILI9341 display and the touch controller. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async time management | Global timers (`Timer::after_millis`) and `Delay` provider for display/sensor initialization. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library for embedded systems | Drawing primitives (rectangles, circles, boxes) and handling the `Rgb565` color palette. | +| [mipidsi](https://github.com/almindor/mipidsi) | MIPI Display Interface driver | Initializing and controlling the ILI9341 TFT display orientation and reset routines. | +| [display-interface-spi](https://www.google.com/search?q=https://github.com/rust-embedded/rust-spid%E9%81%8B%E8%BC%B8) | SPI display interface abstraction | Command/Data (DC) and SPI wrapper layer for the display driver. | +| [u8g2-fonts](https://www.google.com/search?q=https://github.com/oriansln/u8g2-fonts) | U8g2 font renderer for embedded-graphics | Rendering high-quality standalone text (e.g., the `logisoso38` font for the clock/Pomodoro digits). | +| [bme280](https://www.google.com/search?q=https://github.com/mcauser/rust-bme280) | BME280 sensor driver | Reading local temperature, humidity, and atmospheric pressure over I2C1. | +| [embedded-hal / embedded-io-async](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Core traits used for hardware interoperability, specifically `SpiDevice` and asynchronous UART streams (`AsyncRead`). | +| [defmt](https://github.com/knurling-rs/defmt) | Ultra-efficient logging framework | Logging runtime debug information (`info!`) such as touchscreen coordinates and sensor data. | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | Real-Time Transfer transport layer | Pushing `defmt` logs directly through the SWD debugger interface without using physical serial pins. | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler for microcontrollers | Catching runtime panics and safely streaming crash details over the debug probe. | ## Links - 1. [embassy-rs documentation](https://embassy.dev) 2. [ILI9341 datasheet](https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf) 3. [WS2812B datasheet](https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf) 4. [BME280 datasheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf) -5. [Google Calendar API Python quickstart](https://developers.google.com/calendar/api/quickstart/python) +5. [News API documentation](https://newsapi.org/docs) 6. [OpenWeatherMap API](https://openweathermap.org/api) 7. [embedded-graphics examples](https://github.com/embedded-graphics/examples) +8. [KiCad EDA for schematics](https://www.kicad.org) diff --git a/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/architecture.drawio.svg b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/architecture.drawio.svg new file mode 100644 index 00000000000..dadf1d541e5 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/architecture.drawio.svg @@ -0,0 +1,4 @@ + + + +
STM32 Nucleo-U545RE
Main Controller
STM32 Nucleo-U545RE...
Input Subsystem
- Finger Buttons
- MPU6050 IMU
(GPIO + I2C)
Input Subsystem...
Output Subsystem
- Passive Buzzer (PWM)
- Status LEDs
Output Subsystem...
Storage Subsystem
- microSD Card
(SPI Interface)
Storage Subsystem...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/schematic.svg new file mode 100644 index 00000000000..7b05d4b8697 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/images/schematic.svg @@ -0,0 +1,20615 @@ + + + +SVG Image created as Untitled.svg date 2026-05-15T23:10:29 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.2 +KiCad E.D.A. 10.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: Untitled.kicad_sch +File: Untitled.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + +2 +2 + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + +4 +4 + + + + +5 +5 + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + +MICRO_SD_MODULE +MICRO_SD_MODULE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Conn_01x06 +Conn_01x06 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VBAT + +VBAT + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + +1 + + + + + + + + +PC13 +PC13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + +PC14 +PC14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + +PC15 +PC15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + +PH0 +PH0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + +PH1 +PH1 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +NRST +NRST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + +PC0 +PC0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC1 +PC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + + +PC2 +PC2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC3 +PC3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + + +VSSA + +VSSA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 + +12 + + + + + + + + + + + + + + + + + + + +VDDA + +VDDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +13 + +13 + + + + + + + + + + + + + + + + + + + + + +PA0 +PA0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +14 +14 + + + + + + + + + + + +PA1 +PA1 + + + + + + + + + + + + + + + + + + + + +15 +15 + + + + + + + + + + + + + + + + + + + + + + + +PA2 +PA2 + + + + + + + + + + + + + + + + + + + + + + + + + +16 +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA3 +PA3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +17 +17 + + + + + + + + + + + +VSS + +VSS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 + +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 + +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA4 +PA4 + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA5 +PA5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 +21 + + + + + + + + + + + + + + + + + + +PA6 +PA6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 +22 + + + + + + + + + + + + + + + + + + + + + + + +PA7 +PA7 + + + + + + + + + + + + + + + + + +23 +23 + + + + + + + + + + + + + + + + + + + + + + + + + + +PC4 +PC4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + + +PC5 +PC5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB0 +PB0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB1 +PB1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 +27 + + + + + + + + + + + + + + + +PB2 +PB2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +28 +28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB10 +PB10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VCAP +VCAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +30 +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 + +32 + + + + + + + + + + + + + + + + + + + + + + + + + + +PB12 +PB12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +33 +33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB13 +PB13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +34 +34 + + + + + + + + + + + + + + + + + + + +PB14 +PB14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +35 +35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB15 +PB15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +36 +36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC6 +PC6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +37 +37 + + + + + + + + + + + + + + + + + + +PC7 +PC7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +38 +38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC8 +PC8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +39 +39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC9 +PC9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40 +40 + + + + + + + + + + + + + + + + + + + + + + + + + + +PA8 +PA8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +41 +41 + + + + + + + + + + + +PA9 +PA9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +42 +42 + + + + + + + + + + + + + + + + +PA10 +PA10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +43 +43 + + + + + + + + + + + + + + + + + + + +PA11 +PA11 + + + + + + + + + + + + + + + + + + + + + + + + + +44 +44 + + + + + + + + + +PA12 +PA12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +45 +45 + + + + + + + + + + + + + + + + + + + + + +PA13 +PA13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +46 +46 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDDUSB + +VDDUSB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +48 + +48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA14 +PA14 + + + + + + + + + + + + + + + + + + + + + + + +49 +49 + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA15 +PA15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +50 +50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC10 +PC10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +51 +51 + + + + + + + + + + + + + + + + + + + + + + + +PC11 +PC11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +52 +52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC12 +PC12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +53 +53 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PD2 +PD2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +54 +54 + + + + + + + + + + + + + + + + + + + + + +PB3 +PB3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +55 +55 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB4 +PB4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +56 +56 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB5 +PB5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +57 +57 + + + + + + + + + + + + + + + + + + + + +PB6 +PB6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +58 +58 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB7 +PB7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +59 +59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PH3 +PH3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +60 +60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB8 +PB8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +61 +61 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB9 +PB9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +62 +62 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +64 + +64 + + + + + + + + + + + + + + + + + + + + + + + + + + +U1 +U1 + + + + + + + + + + + + + + +STM32U545RETx +STM32U545RETx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW1 +SW1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + +2 +2 + + + + + + + + + + + + +BZ1 +BZ1 + + + + + + + + + + + + + + + + + + + + + + + + + + +Buzzer +Buzzer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW4 +SW4 + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW2 +SW2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CLKIN +CLKIN + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + +AUX_DA +AUX_DA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + +AUX_CL +AUX_CL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + +VLOGIC + +VLOGIC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 + +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +AD0 +AD0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + + +REGOUT +REGOUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FSYNC +FSYNC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + +INT +INT + + + + + + + + +12 +12 + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +13 + +13 + + + + + + + + + + + + + + + + + + + + + + +GND + +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 + +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CPOUT +CPOUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SCL +SCL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +23 +23 + + + + + + + + + + + + + + + + + + + + + + + + + + +SDA +SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + +U2 +U2 + + + + + + + + + + + + + + + + + + + +MPU-6050 +MPU-6050 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW3 +SW3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_Push +SW_Push + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/index.md b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/index.md new file mode 100644 index 00000000000..81060d565f9 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/tatiana.pirvu/index.md @@ -0,0 +1,108 @@ +# SonicGlove - Interactive Musical Glove +A portable, interactive glove-based sound system that generates and modulates audio in real-time based on finger gestures and tactile input. + +:::info + +**Author**: Pirvu Tatiana Andreea Daria \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-tanioara + +::: + + + +## Description + +SonicGlove is a gesture-driven sound system running on an STM32 Nucleo-U545RE microcontroller. The system utilizes an event-based architecture to read the state of four tactile buttons mounted on the user's fingers, triggering the generation of audio frequencies through a passive buzzer driven by PWM signals. For real-time sound modulation, the device integrates an MPU6050 inertial measurement unit (IMU) communicating via I2C, which dynamically alters pitch and intensity based on the spatial orientation of the hand. The project features a microSD storage module connected over an SPI interface, allowing for structured logging of input events and the playback of recorded sessions. System states (idle, recording, playback) are visually indicated via three discrete LEDs connected to standard GPIO pins. The components are mounted on a wearable textile glove. + +## Motivation + +As a student interested in real-time signal processing and hardware integration, I wanted to build a device that goes beyond simple button presses and explores dynamic, physical gesture control. I wanted a project that consolidates sensor fusion and audio generation into a single wearable system. This project gives me the opportunity to develop a modular software architecture, work with multiple hardware peripherals simultaneously (I2C, SPI, PWM Timers), and design a complete end-to-end event-based system from data acquisition to non-volatile memory storage. + +## Architecture + + + +**Input Subsystem** — handles tactile buttons and the MPU6050 IMU. It captures physical finger presses and hand orientation data, sending it to the microcontroller via GPIO and I2C. + +**STM32 Nucleo-U545RE** — the main controller running the core firmware: reads inputs, calculates notes and modulations, manages the state machine, and orchestrates the recording and playback systems. + +**Output Subsystem** — a passive buzzer driven by a hardware timer (PWM) to generate audio tones, alongside status LEDs that provide visual feedback on the current system state. + +**Storage Subsystem** — a microSD card adapter module communicating via SPI to save and retrieve structured event logs of the recorded gesture sessions. + +![System Architecture Diagram](./images/architecture.drawio.svg) + +## Log + + + +### Week 5 +Solidified the core architectural concept and received approval from the lab coordinator. + +### Week 7 +Ordered all hardware components. + +### Week 9 + +Started writing the documentation page. + +### Week 11 + +Finished testing and connecting all hardware modules. Added schematic to documentation. + +## Hardware + +The project uses an STM32 Nucleo-U545RE as the main microcontroller. +User interaction is captured via four 6x6mm tactile push buttons configured as digital inputs. An MPU6050 6-axis IMU module connected via I2C measures spatial orientation and movement. Audio output is generated by a passive buzzer, driven by a variable-frequency PWM signal from the microcontroller. Three 5mm LEDs provide visual feedback regarding the system's operational state. A microSD card adapter module, communicating via the SPI bus, handles data storage. The physical assembly involves mounting the buttons and the IMU onto a textile glove using flexible jumper wires. + +### Schematics + +![Schematic](./images/schematic.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | - | +| [MPU6050 IMU Module](https://www.optimusdigital.ro/ro/senzori-senzori-inerciali/12-modul-senzor-inercial-mpu-6050.html) | Measures acceleration and rotation | ~25 RON | +| [MicroSD SPI Module](https://www.optimusdigital.ro/ro/memorii/155-modul-cititor-de-carduri-microsd.html) | Interface for reading/writing logs | ~20 RON | +| MicroSD Card | Data storage medium for gesture logs | ~25 RON | +| [Passive Buzzer 3.3V](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html) | Generates audio frequencies | ~12 RON | +| [Tactile Button 6x6x6mm](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1119-buton-6x6x6.html) (x4) | User input for triggering notes | ~8 RON | +| 5mm LEDs (x3) + Resistors | State indicators (Idle/Record/Playback) | ~5 RON | +| [Jumper Wires M-F 40p 20cm](https://www.optimusdigital.ro/ro/fire-fire-mufate/92-fire-colorate-mama-tata-40p.html) | Component interconnections | ~10 RON | +| [Jumper Wires M-M 40p 20cm](https://www.optimusdigital.ro/ro/fire-fire-mufate/90-fire-colorate-tata-tata-40p.html) | Component interconnections | ~10 RON | +| [Breadboard 170 points](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/246-mini-breadboard-colorat.html) | Prototyping connections | ~3 RON | +| Textile Glove | Physical mounting support | ~2 RON | + +## Software + +* TODO: the rest will be added as I develop the code + +| Library | Description | Usage | +|---------|-------------|-------| +| [FatFs](http://elm-chan.org/fsw/ff/00index_e.html) | Generic FAT Filesystem Module | Used for reading and writing structured log files to the microSD card | +| MPU6050 Driver | I2C sensor library/driver | Used for extracting and filtering raw accelerometer and gyroscope data | + +## Links + + + +1. [STM32U545RE Datasheet & Reference Manual](https://www.st.com/en/microcontrollers-microprocessors/stm32u545re.html) +2. [MPU-6050 Datasheet](https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf) +3. [Interfacing SD Card with STM32 via SPI](https://controllerstech.com/sd-card-using-spi-in-stm32/) +4. [FatFs - Generic FAT Filesystem Module](http://elm-chan.org/fsw/ff/00index_e.html) + diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodor_adrian.miron/index.md b/website/versioned_docs/version-acs_cc/project/2026/teodor_adrian.miron/index.md new file mode 100644 index 00000000000..97573971bd4 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/teodor_adrian.miron/index.md @@ -0,0 +1,100 @@ +# Slot Machine +A mini slot machine that accepts real coins, spins three physical reels, and dispenses a payout on win. + +:::info + +**Author**: Teodor Adrian Miron \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-teodoradriann](https://github.com/UPB-PMRust-Students/acs-project-2026-teodoradriann) + +::: + + + +## Description + +My project consists in building a mini Slot Machine where you can insert coins and bet X amount of credited money. The system uses a load cell to count coins and three stepper motors to physically roll the reels. The game is initiated via a dedicated Spin button, and if the player wins, the amount is dispensed physically using a servo-driven payout mechanism. + +## Motivation + +I wanted to do something fun and help students control their gambling addiction with tiny amounts of money. + +## Architecture + +The software architecture is based on a Finite State Machine (FSM) managing the game flow, implemented in Rust using the Embassy framework for async multitasking. + + - The main components (architecture components, not hardware components): + - **Core Logic / State Machine**: manages game states (`IDLE`, `WAITING_FOR_BET`, `SPINNING`, `PAYOUT`) and coordinates all modules. + - **Input / Sensor Manager**: handles debouncing for the Spin and Bet buttons and interprets weight signals from the load cell. + - **Random Number Generator (RNG)**: responsible for the fair generation of the spin outcome. + - **Motor / Actuator Controller**: translates the RNG result into steps for the 3 stepper motors and PWM signals for the payout servo. + - **Display / UI Controller**: manages the ST7735 LCD, displaying credit balance and bet amount. + - **Payout Manager**: commands the servo motor to eject the coins. + - How they connect with each other: + - The Input Manager detects a coin (weight increase) or a button press and sends an event to the Core Logic. + - Core Logic updates the credit and instructs the Display Controller to refresh. + - When the Spin button is pressed, Core Logic switches to the `SPINNING` state and requests a value from the RNG. + - The Motor Controller starts the 3 stepper motors and stops them sequentially based on the RNG result. + - If a win is detected, the Payout Manager activates the servo to slide coins out of the storage tube. + +## Log + + + +### Week 5 - 11 May + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +The build uses a microcontroller board driving a small TFT display, an HX711 + load cell pair for detecting inserted coins by weight, three 28BYJ-48 stepper motors with ULN2003 drivers for the physical reels, a continuous-rotation servo for the payout mechanism, arcade buttons for player input, and a 5 V stabilized power supply to handle motor peak currents. + +### Schematics + +Place your KiCAD or similar schematics here in SVG format. + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|-------|-------| +| [DS04-NFC Continous Rotation Servo](https://www.optimusdigital.ro/en/servomotors/1161-ds04-nfc-continous-rotation-servo.html) | Drives the coin payout mechanism | [39 RON](https://www.optimusdigital.ro/en/servomotors/1161-ds04-nfc-continous-rotation-servo.html) | +| [5 V 5000 mA Stabilized Power Supply](https://www.optimusdigital.ro/en/wall-socket-power-supplies/2890-5-v-5000-ma-stabilized-power-supply.html) | Powers the motors and the rest of the system | [30 RON](https://www.optimusdigital.ro/en/wall-socket-power-supplies/2890-5-v-5000-ma-stabilized-power-supply.html) | +| [1.44" SPI LCD Module with ST7735 Controller (128x128 px)](https://www.optimusdigital.ro/en/lcds/3552-modul-lcd-de-144-cu-spi-i-controller-st7735-128x128-px.html) | Displays credit balance, bet amount and reel animation | [30 RON](https://www.optimusdigital.ro/en/lcds/3552-modul-lcd-de-144-cu-spi-i-controller-st7735-128x128-px.html) | +| [ULN2003 Stepper Driver + 5V Stepper Motor](https://www.optimusdigital.ro/en/stepper-motors/101-stepper-motor-with-uln2003-driver.html) (x3) | Physically rolls the three reels | [17 RON](https://www.optimusdigital.ro/en/stepper-motors/101-stepper-motor-with-uln2003-driver.html) | +| [Arcade Button 24 mm - Green](https://www.optimusdigital.ro/en/buttons-and-switches/1851-buton-arcade-iluminat-24mm-verde.html) | Spin / bet input from the player | [10 RON](https://www.optimusdigital.ro/en/buttons-and-switches/1851-buton-arcade-iluminat-24mm-verde.html) | +| [HX711 GroundStudio Load Cell Amplifier](https://ardushop.ro/ro/groundstudio/2207-modul-citire-senzor-greutate-hx711-groundstudio-6427854000040.html) | Reads digital weight values from the load cell | [11 RON](https://ardushop.ro/ro/groundstudio/2207-modul-citire-senzor-greutate-hx711-groundstudio-6427854000040.html) | +| [Load Cell (max. 1 Kg)](https://ardushop.ro/ro/electronica/2418-1349-senzor-greutate.html#/246-greutate_maxima-1_kg) | Detects inserted coins by weight | [10 RON](https://ardushop.ro/ro/electronica/2418-1349-senzor-greutate.html#/246-greutate_maxima-1_kg) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 hardware driver | Controlling pins, timers (PWM for the servo) and SPI for the LCD | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time and delay management | Non-blocking delays for stepper motor steps and animations | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task scheduler | Running multiple tasks (motors, UI, sensors) concurrently | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async sync primitives | Inter-task communication (e.g. sending coin weight data to the UI) | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Core processor access | Managing interrupts and CPU-specific instructions | +| [cortex-m-rt](https://github.com/rust-embedded/cortex-m) | Startup/Runtime for ARM | Initializing memory and the program entry point | +| [defmt](https://github.com/knurling-rs/defmt) | Low-overhead logger | Fast logging for debugging sensor data and game states | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT transport for logs | Viewing logs in real-time through the debugger | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing fruit icons, text and shapes on the screen | +| [st7735-lcd](https://crates.io/crates/st7735-lcd) | Display driver for ST7735 | Managing the command set for the 1.44" color TFT screen | +| [hx711](https://crates.io/crates/hx711) | Load cell driver | Reading digital weight values from the load cell amplifier | +| [panic-probe](https://github.com/knurling-rs/defmt) | Debug panic handler | Reporting and stopping the CPU safely if a runtime crash occurs | + +## Links + + + +1. [Slot machine reference video](https://youtu.be/ihVHIpEZ-Pw) diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta1.webp b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta1.webp new file mode 100644 index 00000000000..46d259808f0 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta2.webp b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta2.webp new file mode 100644 index 00000000000..7c6bc4dc796 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta2.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta3.webp b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta3.webp new file mode 100644 index 00000000000..16ca363aad3 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/imagine_macheta3.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_arhitectura.svg b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_arhitectura.svg new file mode 100644 index 00000000000..b07f2f6baa8 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_arhitectura.svg @@ -0,0 +1,3 @@ + + +
STM32-Nucleo-U545RE-Q
STM32-Nucleo-U545RE-Q
Buttons
Buttons
LCD
LCD
Servo Coffee
Servo Coffee
Servo Sugar
Servo Sugar
Servo Platform
Servo Platform
Servo Mix Motor
Servo Mix Motor
Water Pump
Water Pump
Mix Motor
Mix Motor
Distance Sensor for cup
Distance Sensor for...
PWM
PWM
PWM
PWM
PWM
PWM
PWM
PWM
PWM
PWM
I2C
I2C
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_hardware_kicad_1.webp b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_hardware_kicad_1.webp new file mode 100644 index 00000000000..b418ef7e8ec Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_hardware_kicad_1.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_software.svg b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_software.svg new file mode 100644 index 00000000000..69a9299f1c3 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/images/schema_software.svg @@ -0,0 +1,3 @@ + + +
Select quantity sugar
Select quantity sugar
Select quantity coffee
Select quantity coff...
Waiting for the cup
Waiting for the cup
Measure the distance so that the cup is on the wheel
Measure the distan...
Put the sugar
Put the sugar
Put the coffee
Put the coffee
Put the water
Put the water
The cup is at the start position
The cup is at the st...
Lowering the mixer
Lowering the mixer
Mixing
Mixing
Raising the mixer
Raising the mixer
Waiting for the cup
Waiting for the cup
Cleaning the
 mixer?
Cleaning the...
Waiting for the cup
Waiting for the cup
Putting clean water
Putting clean water
The cup is at the start poz
The cup is at the st...
Mixing with the clean water
Mixing with the clea...
Waiting for the cup
Waiting for the cup
Measure the distance so that the cup is NOT on the wheel
Measure the distan...
Measure the distance so that the cup is on the wheel
Measure the distan...
Measure the distance so that the cup is NOT on the wheel
Measure the distan...
NO
NO
YES
YES
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/index.md b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/index.md index b4d4b9b1b67..2e336473ba0 100644 --- a/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/index.md +++ b/website/versioned_docs/version-acs_cc/project/2026/teodora.dumitrescu/index.md @@ -1,5 +1,5 @@ # Automated Coffee Maker -A machine for iced coffee +A machine for coffee :::info @@ -9,14 +9,15 @@ A machine for iced coffee ::: + ## Description -The project is an automated coffee machine that allows the user to choose exactly how much sugar and coffee they want. The process is simple: you turn on the device with a button, select your desired quantities from the menu, and then press a start button. The system then pours the sugar, coffee, and water in the correct order and mixes them together. The result is a finished iced coffee, ready to be served. +The project is an automated coffee machine that allows the user to choose exactly how much sugar and coffee they want. The process is simple: you turn on the device with a button, select your desired quantities from the menu, and then press a start button. The system then pours the sugar, coffee, and water in the correct order and mixes them together. The result is a finished coffee. ## Motivation -I chose this project because I wanted to build something functional that I can actually use at home after the course is finished. I also find it very interesting to take a common object that you can normally buy in a store and try to recreate it from scratch. This helps me understand the mechanics and logic behind everyday appliances. +I chose this project because I wanted to build something functional that I can actually use at home after the course is finished. I also find it very interesting to take a common object that you can normally buy in a store and try to recreate it from scratch. ## Architecture @@ -24,33 +25,51 @@ I chose this project because I wanted to build something functional that I can a - what are the main components (architecture components, not hardware components) - how they connect with each other --> -Input Consists of push-buttons used to select the desired quantities of coffee and sugar, and an LCD display that provides real-time feedback to the user. +Input: Consists of push-buttons used to select the quantities of coffee and sugar, and an LCD display that provides feedback to the user. Additionally, the user must place the cup in the designated spot for the machine to start. -Processing : The STM32 Nucleo acts as the central controller. It processes the signals from the buttons and coordinates the other components, managing the timing and quantities needed for the recipe. +Processing: The STM32 Nucleo processes the signals from the buttons and coordinates the other components, managing the timing and quantities required for the recipe through the SG90 servo motors. It also verifies that the cup is properly placed with the help of the distance sensor and resets the system once the process is finished. With the help of the water pump and the mixer, the coffee is ready. -Output : The water pump, servo dispenser and mixer work together to prepare and deliver the final mixed iced coffee. +![Architecture Diagram](./images/schema_arhitectura.svg) ## Log +### Week 20 - 26 April +Preparing the project documentation and finalizing the structural layout. Purchasing the components. -### Week 5 - 11 May +### Week 27 April - 3 May +Finishing the documentation and starting to experiment with the hardware components. Making the arhitectural scheme. -### Week 12 - 18 May +### Week 4 - 10 May +Making some snippets of code separately for the components. Trying out different design ideas for the dispensers. + +### Week 11 - 17 May +Assembled the box for the automate. Completed the wiring for the project. Testing the coffee quantities. + +### Week 18 - 23 May +Assembled the mixer and upgraded the box. Sorted the wires and incorporated the distance sensor. Improved the overall appearance of the box. -### Week 19 - 25 May ## Hardware +Major Components Used +The servo motors: they disperse the quantities of sugar and coffee and also rotate the platform; also, one is helping the mixer move up and down. + +The buttons: they help us select the quantities. + +The LCD: it displays the feedback of the buttons. -Detail in a few words the hardware used. +The pump: it uses a transistor in order to function for an amount of time. + +The mixer: it is a motor that mixes the ingredients in the final stage. ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![KiCad Diagram](./images/schema_hardware_kicad_1.webp) + ### Bill of Materials - -1. [link](https://example.com) -2. [link](https://example3.com) +1. [embassy](https://github.com/embassy-rs/embassy) +2. [lcd1602](https://controllerstech.com/i2c-lcd-in-stm32/) +3. [HD44780_convertor_configuration](https://cdn.sparkfun.com/assets/9/5/f/7/b/HD44780.pdf) + ... diff --git a/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/architecture.svg new file mode 100644 index 00000000000..627096293a7 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/architecture.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + Push Buttons + + + Potentiometer + + + LDR Module + + + STM32 Nucleo + + + 12V/7.4V Power + + + LCD 1602 Display + + + TB6612FNG Motor Driver + + + DC Gear Motors + + + Servo Motor SG90 + + + Digital PIN + + + Analog Value + + + Analog Value + + + I2C Data + + + Motor Directions (PWM) + + + PWM Signal + + + Power + + + Motor Power + + diff --git a/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/schematic.webp b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/schematic.webp new file mode 100644 index 00000000000..73c67dd4024 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/images/schematic.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/index.md b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/index.md new file mode 100644 index 00000000000..4b0a53bdc3b --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/tudor_andrei.calciu/index.md @@ -0,0 +1,89 @@ +# Interactive Mobile Safe +Multi-factor authentication puzzle box with automatic evasion + +:::info + +**Author**: Calciu Tudor Andrei \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/acs-project-2026-TudorAndreiCalciu](https://github.com/UPB-PMRust-Students/acs-project-2026-TudorAndreiCalciu) + +::: + +## Description +This project presents an interactive mobile safe that acts as an "escape room" style puzzle box. The system protects its contents and requires the user to successfully pass three consecutive validation stages to unlock: entering a digital PIN via push buttons, calibrating an analog potentiometer to a specific threshold, and blocking light from reaching an LDR sensor. + +To prevent brute-force attacks, the safe features an active evasion mechanism. If the user fails the puzzle stages three times, the system triggers two DC motors that physically drive the safe away from the user to a safe distance, temporarily locking all inputs. + +## Motivation +The main idea for this project was inspired by puzzle boxes and escape room mechanics. I wanted to build a security system that isn't just a static box but interacts physically with its environment. Combining standard sensory inputs (digital and analog) with a mobile robotics platform felt like a great engineering challenge, blending logic state machines with physical movement and anti-tampering behaviors. + +## Architecture +![Diagram](images/architecture.svg) + +Main Components: +- **Microcontroller (STM32 Nucleo)**: The brain of the project, managing the state machine and processing inputs/outputs. +- **Display (LCD 1602 I2C)**: Guides the user through the puzzle stages and displays warnings. +- **Sensors (Potentiometer & LDR)**: Used for the analog calibration and environmental light puzzles. +- **Buttons**: Used to input the digital PIN code and navigate the interface. +- **Servo Motor**: Used to actuate the physical locking mechanism (latch) of the safe. +- **DC Motors & Motor Driver**: Used to spin the wheels and drive the safe away during the evasion state. +- **Power Supply**: Separate batteries for the motors to prevent voltage drops and noise on the logic board. + +## Log + +### Week 27 April - 1 May +Created documentation, finalized the logic state machine concept, and defined the Bill of Materials. + +### Week 5 - 11 May +Acquired all the necessary components. + +### Week 12 - 18 May +Hardware deadline. + +### Week 19 - 25 May +Software deadline. + +## Hardware + +Hardware used: +- **Microcontroller (STM32 Nucleo)**: Controls all the other components. +- **Display**: LCD 1602 with I2C module for user interface. +- **Buttons**: 4x Push buttons for entering the PIN and interacting with the menu. +- **Analog Sensors**: 10k Potentiometer and an LDR (Light Dependent Resistor) module. +- **DC Motors & Wheels**: 3V-6V DC Motors with a 2WD robot chassis. +- **Motor Driver**: TB6612FNG dual motor driver module controls the speed and direction of the two DC motors. +- **Servo Motor**: SG90 90-degree motor used for releasing the latch. +- **Power Supply**: 2x 18650 Li-Ion batteries to power the TB6612FNG driver and motors. + +### Schematics +Electronic design in Autodesk Fusion; pins indicated by labels. +![Schematic](images/schematic.webp) + +### Bill of Materials + +| Device | Usage | Price | +| ------------------------------------------ | -------------------------------------------------------- | ----------------| +| STM32 Nucleo-U545RE-Q | Microcontroller | [114.76 RON](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396) | +| Motor driver TB6612FNG | Controls DC Motors direction and speed | [13.27 RON](https://sigmanortec.ro/punte-h-dubla-driver-motor-tb6612fng-15v-1a-27-55v-logic) | +| 2WD Robot Car Chassis Kit | Mechanical platform, wheels, and DC motors | [48.40 RON](https://sigmanortec.ro/Kit-sasiu-masina-2WD-urmaritor-linie-p172447939) | +| LCD 1602 Display with I2C | Displays puzzle instructions and status | [24.20 RON](https://ardushop.ro/ro/display-uri-si-led-uri/2348-lcd-display-1602-verde-adaptor-i2c-6427854000996.html?gad_source=1&gad_campaignid=22058879462&gbraid=0AAAAADlKU-6DWqqRb1pFWG_2JFxC5XHy8&gclid=Cj0KCQjwkrzPBhCqARIsAJN460lQu8oDhC8rjvNPywRlIUqaMfLK2Nm0T-dX5h7RIm3_chVEMz8v0zQaAnr_EALw_wcB) | +| Micro Servomotor SG90 | Unlocks the physical latch | [9.50 RON](https://sigmanortec.ro/Servomotor-SG90-limit-switch-p141662062?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72Okq9Nrnwsu4_ykIJCkGAPA8&gclid=Cj0KCQjwkrzPBhCqARIsAJN460lMq9jFqtZwJ0JriYhuUAXx6i20zws4fVgK2csO3WHhHg3Dq2AXKgUaAqyFEALw_wcB) | +| Potentiometer 10k | Analog input for the calibration puzzle | [13.65 RON](https://sigmanortec.ro/modul-potentiometru-rotativ-10k-liniar-3-5v?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72Okq9Nrnwsu4_ykIJCkGAPA8&gclid=Cj0KCQjwkrzPBhCqARIsAJN460nR9i8yTdcC_fzbGDp5Be7-FZYNX5r4DQanP1FZm_5xu4lMI4W2CRoaAlX5EALw_wcB) | +| LDR Light Sensor Module | Detects shadow for the third puzzle | [3.42 RON](https://sigmanortec.ro/Senzor-lumina-fotorezistor-p125423559?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72Okq9Nrnwsu4_ykIJCkGAPA8&gclid=Cj0KCQjwkrzPBhCqARIsAJN460nKTSKHE29bexAtdlbGSRPPKF4cznd8ReaMnvbvTHNgwq9iRahxjZIaAh0DEALw_wcB) | +| Push Buttons | PIN input buttons | [2.00 RON](https://vectro.ro/produs/push-buton-fara-retinere-10x25mm/?utm_source=Google%20Shopping&utm_campaign=Vectro%20-%20Toate%20Produsele&utm_medium=cpc&utm_term=37393&gad_source=1&gad_campaignid=17091351278&gbraid=0AAAAAohTOtZfVyTu0DwpRsMGRwFri7Wo1&gclid=Cj0KCQjwkrzPBhCqARIsAJN460nQE4EabWMaePPcGzGUv2FquVXa5lZoUaTcv-mGjXSfCgI3DrCB2c4aAh4AEALw_wcB) | +| 2x 18650 Batteries + Holder | Power supply for the TB6612FNG and motors | [36.00 RON](https://sigmanortec.ro/en/battery-holder-18650-2s) | + + +## Software + +| Library | Description | Usage | +|---------------------------|-----------------------------------------------------------------------------|-----------------------------------------------------------------------| +| [embassy-executor](https://docs.rs/embassy-executor/latest/embassy_executor/) | Lightweight async executor for embedded tasks | Runs concurrent tasks for motor control, UI updates, and sensor polling. | +| [embassy-time](https://docs.embassy.dev/embassy-time/) | Time management and delays | Manages timing for the evasion sequence and button debouncing. | +| [embassy-stm32::timer::simple_pwm](https://docs.embassy.dev/embassy-stm32/git/stm32c011d6/timer/simple_pwm/index.html) | PWM module for motor/servo control | Controls DC motor speed and sets the servo angle for the latch. | +| [embassy-stm32::adc](https://docs.embassy.dev/embassy-stm32/git/stm32c011d6/adc/index.html) | Analog-to-Digital Converter module | Reads values from the potentiometer and LDR sensor. | +| [embassy-stm32::i2c](https://docs.embassy.dev/embassy-stm32/git/stm32c011d6/i2c/index.html) | I2C communication protocol | Handles data transmission to the 1602 LCD display. | + +## Links + +1. [TB6612FNG Motor Driver Technical Tutorial](https://www.instructables.com/Driving-Small-Motors-With-the-TB6612FNG/) +2. [Embassy-rs Documentation](https://embassy.dev/book/) diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/ansamblu-lansator-cos.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/ansamblu-lansator-cos.webp new file mode 100644 index 00000000000..f95a30e2346 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/ansamblu-lansator-cos.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/cos-panou.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/cos-panou.webp new file mode 100644 index 00000000000..f4ba3651045 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/cos-panou.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/index.md b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/index.md new file mode 100644 index 00000000000..b7db0c6ce8d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/index.md @@ -0,0 +1,198 @@ +# Lansator Automat de Basket (Miniatură) + +Un sistem mecatronic destinat aruncării mingilor de ping-pong către un coș de basket în miniatură. + +:::info + +**Author**: Raris Vlad-Cristian \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-duduvlad + +::: + +## Descriere + +Acest proiect implementează un lansator automat pentru basket în miniatură. Sistemul folosește o catapultă pentru mingi de ping-pong, montată pe o bază rotativă. Lansatorul detectează panoul coșului cu ajutorul unui senzor ultrasonic HC-SR04, se orientează pe axa orizontală și apoi declanșează mecanismul de aruncare. + +Controlul este realizat cu o placă NUCLEO-U545RE-Q, iar codul proiectului este scris în Rust. Coșul este construit separat și are un panou gri în spate, folosit ca suprafață de detecție pentru senzor. Pentru a simplifica problema de poziționare, lansatorul este deplasat pe un cerc în jurul coșului, iar sistemul trebuie să determine unghiul potrivit de orientare către panou. + +## Motivație + +Alegerea acestui proiect a fost determinată de dorința de a combina controlul mecanic, măsurarea distanței și programarea embedded în Rust într-un sistem vizibil și ușor de testat. + +* **Control embedded:** Proiectul folosește semnale PWM pentru servomotoare și semnale GPIO pentru senzorul de distanță. +* **Rust în sisteme embedded:** Implementarea urmărește folosirea Rust pentru controlul sigur și predictibil al perifericelor. +* **Integrare hardware-software:** Sistemul combină partea mecanică a catapultei cu detecția panoului și controlul mișcării. +* **Prototipare practică:** Coșul, panoul și mecanismul de lansare permit testarea rapidă a comportamentului real al sistemului. + +## Arhitectură + +### Schema Bloc + +```mermaid +flowchart LR + subgraph Cos ["Coș"] + Panou[Panou gri] + Inel[Inel metalic] + end + + subgraph Lansator ["Unitate Lansator"] + Senzor[HC-SR04] -->|TRIG / ECHO| MCU[NUCLEO-U545RE-Q] + Buton[Buton] -->|GPIO| MCU + MCU -->|GPIO| LED[LED RGB] + MCU -->|PWM| S1[Servo MG995 Bază] + MCU -->|PWM| S2[Servo SG90 Trăgaci] + Alimentare[Sursă laborator / XL4005] --> S1 + Alimentare --> S2 + Catapulta[Catapultă printată 3D] --> Minge[Minge ping-pong] + S2 --> Catapulta + S1 --> Catapulta + end + + Senzor -.->|măsoară distanța până la panou| Panou + Minge -.->|aruncare| Inel +``` + +**Conexiunile Componentelor:** +Senzorul HC-SR04 este conectat la placa NUCLEO-U545RE-Q prin doi pini GPIO: unul pentru impulsul de declanșare (`TRIG`) și unul pentru citirea impulsului de răspuns (`ECHO`). Servo-ul MG995 rotește baza lansatorului, iar servo-ul SG90 acționează mecanismul de declanșare al catapultei. Butonul este folosit pentru comandă, iar LED-ul RGB oferă feedback vizual pentru stările sistemului. + +Servomotoarele sunt alimentate separat, folosind sursa de laborator în timpul testelor și modulul XL4005 pentru o alimentare stabilizată la 5-6V. Masa sursei pentru servomotoare este comună cu masa plăcii Nucleo, însă tensiunea `+5V_SERVO` nu este conectată la pinul de 5V al plăcii. + +### Schema Electrică + +Schema electrică a fost realizată în EasyEDA și arată conexiunile dintre placa NUCLEO-U545RE-Q, senzorul de distanță, servomotoare, buton, LED RGB și alimentarea externă a servourilor. Varianta curentă folosește HC-SR04 pentru detecție, conectat prin `TRIG` și `ECHO`. + +![Schema electrică](./schema-electrica.webp) + +### Conexiuni Curente + +| Componentă | Pin componentă | Pin Nucleo | Pin STM32 | Rol | +| :--- | :--- | :--- | :--- | :--- | +| HC-SR04 | VCC | 5V extern | - | Alimentare senzor | +| HC-SR04 | GND | GND comun | - | Masă comună | +| HC-SR04 | TRIG | D14 | PB7 | Impuls de declanșare | +| HC-SR04 | ECHO | D15 | PB6 | Citire durată ecou | +| Servo MG995 | Signal | D6 | PB10 / TIM2_CH3 | Rotire bază | +| Servo SG90 | Signal | D5 | PB4 / TIM3_CH1 | Declanșare catapultă | +| Buton | Signal | D7 | PA8 | Pornire ciclu | +| LED RGB | R | D3 | PB3 | Feedback vizual | +| LED RGB | G | D9 | PC6 | Feedback vizual | +| LED RGB | B | D10 | PC9 | Feedback vizual | + +Servomotoarele sunt alimentate dintr-o sursă externă de 5V. Masa sursei externe este comună cu masa plăcii Nucleo, dar alimentarea de 5V a servourilor nu este conectată la pinul de 5V al plăcii. + +## Galerie și demonstrații + +### Fotografii + +![Lansator - vedere de sus](./lansator-vedere-sus.webp) + +![Lansator - vedere laterală](./lansator-lateral.webp) + +![Ansamblu lansator și coș](./ansamblu-lansator-cos.webp) + +![Coș cu panou gri](./cos-panou.webp) + +### Video-uri Demonstrative + +* ["Servo 180° - for fun"](https://drive.google.com/file/d/13tZFudmJhNiFWu0m0lhWfMDMGThURpQ5/view?usp=drivesdk) +* [Demonstrație reușită](https://drive.google.com/file/d/14ZFsCu5ksannp7YFIYeAPAVJ2f8IaCr6/view?usp=drivesdk) +* [Demonstrație reușită - variantă secundară](https://drive.google.com/file/d/1i56UOJDGOkpOpUaxo5dSThQmxMWrgyWk/view?usp=sharing) +* [FAIL](https://drive.google.com/file/d/1GY5G6cucbEqx1XnDZaNeN2WKPweZJbyK/view?usp=sharing) + +## Jurnal de Proiect + +### Săptămâna 1 + +Am realizat documentația inițială a proiectului și am stabilit ideea generală: un lansator automat pentru mingi de ping-pong, orientat către un coș de basket în miniatură. În această etapă am descris obiectivul proiectului, motivația, arhitectura inițială și principalele componente hardware/software. + +### Săptămâna 2 + +Am simplificat arhitectura sistemului. În loc să pun electronică pe coș, am decis ca senzorul să fie montat pe lansator, iar coșul să rămână o țintă pasivă. Lansatorul este deplasat pe un cerc în jurul coșului, iar sistemul trebuie să determine unghiul potrivit de orientare către panou. Pentru detecție am ales inițial senzorul VL53L0X, care măsoară distanța până la panoul gri din spatele coșului. + +### Săptămâna 3 + +Am ales și cumpărat componentele principale: senzorul VL53L0X, servomotorul MG995 pentru orientarea bazei, servomotorul SG90 pentru declanșare, modulul XL4005 pentru alimentarea servomotoarelor, breadboard-ul, modulul de buton și modulul LED RGB. Tot în această etapă am stabilit că alimentarea servourilor va fi separată de placa Nucleo, folosind sursa de laborator în timpul testelor. + +### Săptămâna 4 + +Am construit coșul fizic, format din bază, suport vertical, panou gri și inel metalic. Am ales panoul gri ca suprafață de detecție pentru senzor, deoarece este mai ușor de identificat decât inelul propriu-zis. De asemenea, am ales modelul de catapultă printată 3D pentru mingi de ping-pong și am pregătit fișierele necesare pentru printare. + +### Săptămâna 5 + +Am realizat schema electrică în EasyEDA și am asamblat partea hardware principală a proiectului. Schema include placa NUCLEO-U545RE-Q, senzorul VL53L0X, servomotoarele MG995 și SG90, butonul, LED-ul RGB, condensatorul de filtrare și alimentarea externă pentru servouri. Am documentat explicit faptul că `+5V_SERVO` este alimentare externă și nu trebuie conectată la pinul de 5V sau 3V3 al plăcii Nucleo, iar masa este comună între alimentarea servourilor și placa de dezvoltare. + +### Săptămâna 6 + +Am trecut de la senzorul VL53L0X la senzorul ultrasonic HC-SR04, deoarece în teste senzorul ToF nu oferea citiri stabile pentru panoul coșului. Am actualizat firmware-ul în Rust pentru citirea distanței prin `TRIG` și `ECHO`, am adăugat loguri RTT pentru fiecare citire și am integrat scanarea bazei cu servomotorul MG995. În această etapă am testat și mecanismul de declanșare cu SG90, alimentarea externă pentru servouri și primele aruncări ale catapultei. + +### Săptămâna 7 + +Am asamblat varianta curentă a prototipului: catapulta printată 3D este montată pe baza rotativă, senzorul HC-SR04 este montat frontal pe lansator, iar coșul cu panou gri este folosit ca țintă. Am realizat fotografii și video-uri cu montajul, testele de servo și demonstrațiile de lansare, pe care le-am adăugat în documentație. + +## Hardware + +Sistemul utilizează următoarele componente hardware principale: + +* **NUCLEO-U545RE-Q:** Placa de dezvoltare folosită pentru controlul sistemului. +* **HC-SR04:** Senzor ultrasonic folosit în varianta curentă pentru măsurarea distanței până la panoul coșului. +* **VL53L0X:** Senzor ToF testat inițial pentru detecția panoului. +* **Servo MG995:** Servomotor pentru rotirea bazei lansatorului. +* **Servo SG90:** Servomotor pentru mecanismul de declanșare. +* **XL4005 Step-Down:** Modul coborâtor de tensiune pentru alimentarea servomotoarelor. +* **Buton:** Element de control pentru pornirea scanării sau declanșare. +* **LED RGB:** Element de feedback vizual. +* **Catapultă printată 3D:** Mecanismul de lansare pentru mingea de ping-pong. +* **Coș cu panou gri:** Ținta fizică folosită pentru testare și detecție. + +Protocoale și semnale utilizate: + +* **GPIO TRIG/ECHO:** Citirea senzorului ultrasonic HC-SR04. +* **PWM:** Controlul servomotoarelor MG995 și SG90. +* **GPIO:** Citirea butonului și controlul LED-ului RGB. + +## Listă de materiale + +| Dispozitiv | Utilizare | Preț Estimativ | +| :--- | :--- | :--- | +| NUCLEO-U545RE-Q | Unitatea centrală de control | disponibilă | +| Senzor HC-SR04 | Detectarea panoului coșului în varianta curentă | disponibil | +| Senzor VL53L0X | Test inițial pentru detecția panoului | ~30 RON | +| Servo MG995 | Orientarea orizontală a lansatorului | ~30 RON | +| Servo SG90 | Mecanismul de declanșare | ~10 RON | +| XL4005 Step-Down | Alimentarea stabilizată a servomotoarelor | ~14 RON | +| Breadboard | Prototipare conexiuni | ~7 RON | +| Modul LED RGB | Feedback vizual | ~2 RON | +| Modul buton | Control utilizator | ~4 RON | +| Fire, rezistențe, condensator | Conexiuni și stabilizare alimentare | disponibile | +| Catapultă printată 3D | Mecanism de aruncare | realizată | +| Coș și panou | Țintă pentru lansator | realizat | +| **Total cumpărat estimativ** | **-** | **~97 RON** | + +## Software + +### Prezentare Generală + +Implementarea software folosește Rust pe placa NUCLEO-U545RE-Q. Aplicația controlează servomotoarele prin PWM, citește senzorul HC-SR04 prin semnale GPIO `TRIG`/`ECHO` și gestionează stările sistemului în funcție de buton și de distanțele măsurate. + +### Design Detaliat + +Codul este structurat pe patru module logice: + +1. **Gestionarea stărilor:** Controlează succesiunea operațiunilor: IDLE, SCANARE, ALINIERE, AȘTEPTARE și DECLANȘARE. +2. **Scanarea panoului:** Rotește baza lansatorului pe un interval de unghiuri și citește distanța măsurată de HC-SR04. +3. **Controlul motoarelor:** Generează semnalele PWM pentru MG995 și SG90. +4. **Interfața utilizator:** Citește butonul și controlează LED-ul RGB pentru feedback. + +### Diagramă Funcțională + +```mermaid +flowchart TD + A([Start Sistem]) --> B[Așteptare comandă] + B -->|Apăsare buton| C[Scanare cu HC-SR04] + C --> D[Determinare direcție panou] + D --> E[Rotire MG995 către țintă] + E --> F[Așteptare 3 secunde] + F --> G[Declanșare SG90] + G --> H([Resetare stare]) + H -.-> B +``` diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-lateral.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-lateral.webp new file mode 100644 index 00000000000..7686dc03e99 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-lateral.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-vedere-sus.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-vedere-sus.webp new file mode 100644 index 00000000000..fd5246e5ede Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/lansator-vedere-sus.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/schema-electrica.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/schema-electrica.webp new file mode 100644 index 00000000000..c9b420b0f2f Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad.raris/schema-electrica.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/controller.webp b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/controller.webp new file mode 100644 index 00000000000..5a254f2d8d5 Binary files /dev/null and b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/controller.webp differ diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/index.md b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/index.md new file mode 100644 index 00000000000..5cd54e01631 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/index.md @@ -0,0 +1,125 @@ +# Wireless Arcade Controller +A wireless arcade game controller built with Rust and Embassy on STM32 Nucleo-U545RE-Q. + +:::info + +**Author:** Ene Vlad-Mihnea +**GitHub Project Link:** [RustPad](https://github.com/UPB-PMRust-Students/acs-project-2026-enevlad) + +::: + +## Description + +RustPad is a wireless game controller based on the STM32 Nucleo-U545RE-Q microcontroller, +programmed in Rust using the Embassy async framework. It features an analog joystick, four +digital action buttons, an SSD1306 OLED display showing Bluetooth connection status, +rumble feedback via a PWM vibration motor module, and wireless communication over Bluetooth +(HC-05). The controller is recognised by any game on Linux through a virtual gamepad created +with uinput, bridged by a companion Rust application running on the host PC. + +## Motivation + +My motivation for this project stems directly from my passion for gaming. Building a controller +from scratch in Rust provides hands-on experience with ADC sampling, GPIO interrupts, +UART-based wireless protocols, and async embedded programming — all within a single cohesive +project. Rust's ownership model makes it especially suitable for embedded development: memory +safety without a runtime and strong type guarantees that catch peripheral misconfigurations at +compile time. + +## Architecture + +The system is split into two main parts: **firmware** running on the Nucleo and a **bridge +application** running on the host PC. + +**Input Layer** — The KY-023 analog joystick is sampled via ADC on PA0 and PA1. Four tactile +buttons are read via GPIO with internal pull-ups on PB0–PB3. Input state is collected every +20 ms in the main Embassy loop. + +**Communication Layer** — The HC-05 Bluetooth module communicates with the MCU over USART1 at +115200 baud. Controller frames (`X:50 Y:-30 BTN:0101`) are sent to the host PC every 20 ms. +The HC-05 STATE pin on PC0 is used to detect Bluetooth connection status. + +**Output Layer** — An SSD1306 OLED display shows connection status over I²C (updated only on +BT status change). A PWM vibration motor module on PA8 provides haptic feedback, triggered +either by button press or by a rumble command (`V`) received from the host. + +**Host Bridge** — A Rust application on the PC connects to the HC-05 via Bluetooth RFCOMM, +parses controller frames and forwards them to a uinput virtual gamepad, making the controller +recognised by any Linux game. + +## Log + +### Week 5 - 11 May + +Selected project components and ordered hardware. Set up the Rust/Embassy development +environment with the correct toolchain (1.90) and probe-rs for flashing. Tested basic +project compilation for the STM32 Nucleo-U545RE-Q target. + +### Week 12 - 18 May + +Tested all hardware components individually: analog joystick (ADC), tactile buttons (GPIO), +SSD1306 OLED display (I2C), HC-05 Bluetooth module (USART), and vibration motor (PWM). +All components confirmed working. Created EasyEDA schematic with all connections. + +### Week 19 - 25 May + +Integrated all components into the main controller firmware. Implemented Bluetooth communication +at 115200 baud (after AT command reconfiguration of HC-05). Developed the host bridge +application in Rust using bluer and evdev. Tested full controller functionality in SuperTuxKart +on Linux. Implemented haptic feedback via vibration motor triggered by button press. + +## Hardware + +The controller is built around the **STM32 Nucleo-U545RE-Q** (ARM Cortex-M33, 160 MHz). Input +comes from a **KY-023 analog joystick module** connected to two ADC channels (PA0, PA1) and +four **tactile push buttons** on GPIO pins PB0–PB3 with internal pull-ups. Wireless +communication is handled by an **HC-05 Bluetooth module** over USART1 (PA9/PA10) at 115200 +baud. An **SSD1306 OLED 128×64** display is connected via I²C (PB6/PB7) and shows Bluetooth +connection status. A **PWM vibration motor module** (3–5V, integrated driver) on PA8 provides +haptic feedback. + +## Schematics + +![KiCad Schematic](schematic.svg) + +## Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller | ~60 RON | +| [KY-023 Analog Joystick](https://www.optimusdigital.ro) | Analog axis input (X/Y) | ~5 RON | +| [HC-05 Bluetooth Module](https://www.optimusdigital.ro) | Wireless UART communication | ~18 RON | +| [SSD1306 OLED 128×64 I²C](https://www.optimusdigital.ro) | BT status display | ~15 RON | +| [Tactile push buttons](https://www.optimusdigital.ro) × 4 | Action buttons | ~2 RON | +| [Modul motor vibratii PWM 3-5V](https://sigmanortec.ro/modul-motor-vibratii-dc-control-pwm-3-5v) | Rumble / haptic feedback | ~10 RON | +| Breadboard + wires | Wiring and assembly | ~10 RON | + +## Software + +### Firmware (STM32 Nucleo) + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for STM32 | ADC, GPIO, USART, I²C, PWM peripherals | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for embedded | Main async loop on the MCU | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time abstractions for embedded | Timers and delays | +| [ssd1306](https://github.com/jamwaffles/ssd1306) | Display driver for SSD1306 OLED | Rendering BT status on the display | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text to the OLED | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | PWM control for vibration motor | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework for embedded Rust | Debug output via probe-rs | +| [heapless](https://github.com/rust-embedded/heapless) | Static data structures | String formatting without heap | + +### Host Bridge (Linux PC) + +| Library | Description | Usage | +|---------|-------------|-------| +| [bluer](https://github.com/bluez/bluer) | Bluetooth library for Rust | RFCOMM connection to HC-05 | +| [evdev](https://github.com/emberian/evdev) | Linux input device library | Creating virtual gamepad via uinput | +| [tokio](https://tokio.rs) | Async runtime for Rust | Async Bluetooth I/O on the host | + +## Links + +1. [Embassy Framework](https://embassy.dev) +2. [STM32 Nucleo-U545RE-Q User Manual](https://www.st.com/resource/en/user_manual/um3062-stm32u3u5-nucleo64-boards-mb1841-stmicroelectronics.pdf) +3. [SSD1306 Datasheet](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) +4. [HC-05 AT Commands Reference](https://www.instructables.com/AT-command-mode-of-HC-05-Bluetooth-module/) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/schematic.svg new file mode 100644 index 00000000000..953456769f0 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad_mihnea.ene/schematic.svg @@ -0,0 +1,5 @@ +Sheet_1 +AAAABBCCDD1122334455TITLE:Sheet_1REV:1.0Date:2026-05-13Sheet:1/1Drawn By:Ene Vlad-MihneaCompany:Your CompanyKY-023_TLMD1GND1VCC2VRX3VRY4SW5KY-023WIRELESS-BLUETOOTH-HC-051STATE1RX2TX3GND4+5V5EN6Vibration MotorM1IN3VCC2GND1VIBRATION MOTORSSD1306U2SDA1SCL2VCC3GND4button2C3A1button3C3A1button4C3A1button5C3A1button6C3A1Nucleo STM32F401REU3PC10001PC12003VDD005BOOT0007NC009NC011PA13013PA14015PA15017GND019PB7021PC13023PC14025PC15027PH0029PH1031VBAT033PC2035PC3037PC11002PD2004E5V006GND008NC010IOREF012RESET0143V30165V018GND020GND022VIN024NC026PA0028PA1030PA4032PB0034PC1036PC0038PC9101PB8103PB9105AVDD107GND109PA5111PA6113PA7115PB6117PC7119PA9121PA8123PB10125PB4127PB5129PB3131PA10133PA2135PA3137PC8102PC6104PC5106U5V108NC110PA12112PA11114PB12116NC118GND120PB2122PB1124PB15126PB14128PB13130AGND132PC4134NC136NC138 diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/architecture.svg b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/architecture.svg new file mode 100644 index 00000000000..9909306c39d --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/architecture.svg @@ -0,0 +1,3 @@ + + +
STM32 Nucleo
STM32 Nucleo
MG996R Servomotors
MG996R Servomotors
Power and control
Power and control
L298N Motor Driver
L298N Motor Driver
DC motors

DC motors
HC-SR04 Sensor
HC-SR04 Sensor
7.4V
7.4V
7.4V
7.4V
LiPo Battery 
7.4V Power Source
LiPo Battery...
5V
5V
LM2596 Step-Down
7.4V to 5V
LM2596 Step-Down...
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/schematic.svg new file mode 100644 index 00000000000..7af61ac48ba --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/images/schematic.svg @@ -0,0 +1 @@ +SVG Image created as schematic.svg date 2026/05/17 02:16:40 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. kicad 7.0.11+dfsg-1build4Rev:Size: A4Id: 1/1Title:File: schematic.kicad_schSheet: /+GNDechotriggerS1HC-SR04 Ultrasonic SensorGNDVCCBT1Baterie Lipo 7.4VGNDPWM1+2-3M2Motor_ServoPWM1+2-3M1Motor_Servo+1-2M3Motor_DC+1-2M4Motor_DCSENSE_A1IN310EnB11IN412OUT313OUT414SENSE_B15OUT12OUT23Vs4IN15EnA6IN27GND8Vss9U2L298NGNDGNDGNDVBAT1PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PC132PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29PC143VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC154PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PH05PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH16PH360PB861VDD1162VDD64NRST7PC08PC19U1STM32U545RETxQin+in-out+out-U3modul step-down 5VGNDS1HC-SR04 Ultrasonic Sensor+GNDechotriggerU1STM32U545RETxQVBAT1PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PC132PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29PC143VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC154PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PH05PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH16PH360PB861VDD1162VDD64NRST7PC08PC19GNDGNDGND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/index.md b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/index.md new file mode 100644 index 00000000000..948f983d549 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vlad_stefan.condrea/index.md @@ -0,0 +1,118 @@ +# Mini air defense system +A robotic pan-tilt turret capable of detecting targets and launching projectiles using a flywheel mechanism. + +:::info + +**Author**: Condrea Vlad-Stefan \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Ionidis + + +::: + +## Description + +A smart robotic turret made using a STM32 NUCLEO board that acts as the main controller. The system uses a pan-tilt mechanical bracket driven by two MG996R servo motors to aim. An HC-SR04 ultrasonic sensor is mounted on the moving arm to detect the distance to a target. Once the target is within range, the Nucleo board triggers the flywheel launcher, which consists of two high-speed DC motors with rubber wheels that shoot the projectile. +The entire system is powered by a LiPo battery, using an LM2596 step-down module to safely provide 5V to the servos and sensor. +Added a joystick to the project so now I can manually control the turret and shoot the projectile by pressing the joystick button + +## Motivation + +I believe that it would be a fun and challenging experience. I find robotics fascinating, and this project perfectly combines mechanical assembly, sensor data acquisition, and motor control using Rust. It acts as a great introduction to tracking systems and automated defense mechanisms. + +## Architecture + +The system starts with the HC-SR04 ultrasonic sensor, which constantly sends distance data to the STM32 Nucleo controller. + +The Nucleo board processes the sensor data to determine if a target is present. Based on the logic, it generates PWM signals sent directly to the two MG996R servo motors to adjust the Pan (horizontal) and Tilt (vertical) angles. When the target is locked, the Nucleo sends digital signals to a motor driver, which spins up the two DC motors of the flywheel launcher. + +Power management is critical: a 7.4V LiPo battery supplies raw power to the motor driver for the DC motors. In parallel, the battery connects to an LM2596 Step-Down converter, which drops the voltage to a stable 5V to safely power the STM32 board, the HC-SR04 sensor, and the servo motors without frying them. + + +### Main Architectural Components + +#### Target Detection System (Input Data) +* **Role:** Continuously monitors the environment to detect potential targets and measure their exact distance from the turret. +* **Components:** 1x HC-SR04 Ultrasonic Sensor mounted on the moving pan-tilt bracket. +* **Logic:** The STM32 board sends a microsecond trigger pulse to the sensor, which then emits a sound wave. The board measures the duration of the returning echo signal to calculate the distance in real-time, feeding this data to the radar sweep algorithm. + +#### The Central Logic Controller (Processing) +* **Role:** Acts as the brain of the system, executing the core algorithms, managing real-time hardware interrupts, and computing ballistic alignment (e.g., Center of Mass calculations and trigonometric offset compensation). +* **Components:** STM32 Nucleo-U545RE-Q Development Board. +* **Logic:** Uses the `embassy` framework for asynchronous programming. It simultaneously handles spatial data acquisition, updates motor states, and coordinates the precise timing sequence for the firing mechanism without blocking the CPU. + +#### Pan-Tilt Aiming System (Output) +* **Role:** Responsible for the physical orientation of the turret, allowing it to sweep, track, and lock onto targets across both horizontal (X) and vertical (Y) axes. +* **Components:** 2x MG996R High-Torque Servo Motors attached to a metal Pan-Tilt bracket. +* **Logic:** The microcontroller generates precise PWM (Pulse Width Modulation) signals. By altering the duty cycle, the board commands the servos to perform a radar-like scan, adjusting their angles to center perfectly on the detected object. + +#### Flywheel Launcher System (Output) +* **Role:** Engages and accelerates the firing mechanism to launch the projectile at the locked target. +* **Components:** 1x L298N Motor Driver, 2x High-Speed DC Motors, and 2x Rubber Wheels. +* **Logic:** Upon confirming a target lock, the STM32 sends digital control signals to the IN pins of the L298N driver to set the rotation direction (wheels spinning inwards to grip and propel the foam dart). The L298N acts as a heavy-duty switch, delivering the high current required by the DC motors for the firing sequence. + +#### Power Management Network +* **Role:** Distributes safe and stable operating voltages to all logic and mechanical components, preventing system resets under high mechanical loads. +* **Components:** 1x 7.4V LiPo Battery (Gens Ace 2S), 1x LM2596 Step-Down Module, and 1x LiPo Battery Tester/Buzzer. +* **Logic:** The power distribution is split into two branches. The raw 7.4V from the LiPo battery is routed directly to the L298N driver to provide maximum torque to the DC motors. In parallel, the LM2596 module steps down the 7. + +![Architecture Diagram](images/architecture.svg) + +## Schematics + +![](images/schematic.svg) + +## Log + +### Week 20 - 26 April +Got approval and researched the components. +Ordered all the components. + +### Week 5 - 11 May +Assembled the mechanical pan-tilt bracket. Fixed alignment issues with the tilt servo and bearing. +Attached the HC-SR04 sensor. +### Week 12 - 18 May +Managed to power up all components by soldering all the wires needed +to the step down module and the DC motors. The hardware is ready +and can fully function. + +### Week 19 - 25 May +Wrote the code that has 2 modes one for am auto mode which tries to detect an object as precise as possible and a manual mode where I have a joystick to guide the turret. +## Hardware + +The project uses the Nucleo board as the brain. It receives echo pulses from the HC-SR04 sensor. After processing the distance, it sends PWM signals to the Pan and Tilt MG996R servos. It also controls a motor driver (L298N/L293D) to activate the dual DC motors for the launcher. The LM2596 acts as a power regulator. + +### Schematics + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/) | Main Controller | Lab Provided | +| [Metal Pan-Tilt Bracket](https://sigmanortec.ro/montura-servomotor-suport-2-axe-pt-pentru-mg995-si-mg996r?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72P0RBDTzsoYnW7xbtEHmLu-M&gclid=CjwKCAjwq6DQBhBVEiwA4ZD5XGo8ZEvrJrp7pxcddITfEeIV8q1r4CSNJAeO291vYGJuu1YSFt7F8BoCTZ8QAvD_BwE) | Mechanical structure for the arm | 20 RON | +| [2 x MG996R Servo Motor](https://sigmanortec.ro/servomotor-mg996r-360-grade-13kg) | Aiming (Pan and Tilt axis) | 60 RON | +| [2 x DC Motor](https://sigmanortec.ro/Motor-DC-3-6V-p125923622) | Flywheel projectile launcher | 8 RON | +| [HC-SR04 Ultrasonic Sensor](https://www.emag.ro/senzor-de-distanta-cu-ultrasunete-elektroweb-hc-sr04-5v-dc-2-m-039/pd/DZYV7MYBM/?cmpid=146635&utm_source=google&utm_medium=cpc&utm_campaign=(RO:eMAG!)_3P_NO_SALES_%3e_Wearables_and_Gadgeturi&utm_content=82562655248&gad_source=1&gad_campaignid=2088939012&gbraid=0AAAAACvmxQgtjE8CIdP3iXDuTDxjEG6bT&gclid=CjwKCAjwq6DQBhBVEiwA4ZD5XIx8CzobJNMeapqsuDmqoS67Yd2IsWanyQbzr70As2FesWLuL1JPYxoCCJwQAvD_BwE) | Target detection and distance measuring | 14.5 RON | +| [LM2596 Step-Down Module](https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72P0RBDTzsoYnW7xbtEHmLu-M&gclid=CjwKCAjwq6DQBhBVEiwA4ZD5XKNrrhmSm3R1GB8O9yIKvwqtWC4PvtEcek8ielgc6SKG15oek4I2pxoC-zsQAvD_BwE) | Voltage regulator (Drops LiPo 7.4V to 5V) | 7 RON | +| [L298N Motor Driver Module](https://www.optimusdigital.ro/) | Controls the DC motors for the launcher | 20 RON | +| [Baterie Gens Ace G-Tech](https://www.emag.ro/baterie-gens-ace-g-tech-soaring-1000mah-7-4v-30c-2s1p-xt60-kxg0060208/pd/D5RNQWMBM/?ref=history-shopping_486860698_3410_1) | Main power supply | 60 RON | +| [Rotite cauciuc](https://www.optimusdigital.ro/ro/mecanica-roti/347-roata-de-20-mm-cu-cauciuc-pentru-ax-de-2-mm.html) | Rotite care sa propulseze proiectilul din burete | 10 RON | +| [Fire dupont](https://www.emag.ro/set-10-fire-dupont-mama-tata-30cm-pentru-conexiuni-ai0305/pd/DRCXQ83BM/?ref=history-shopping_486860698_38837_2) | Fire pentru conecta componentele | 15 RON | +| [Tester acumulator](https://sigmanortec.ro/tester-acumulatori-1s-8s-afisaj-si-buzzer?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72P0RBDTzsoYnW7xbtEHmLu-M&gclid=CjwKCAjwq6DQBhBVEiwA4ZD5XKXMtJKafM_lrj4lYL3c8VDChiT9p5kb4vToZBVscQi3ZkjAsjl4LRoCA4cQAvD_BwE) | Un buzzer care ma avertizeaza cand bateria este aproape sa se descarce | 10 RON | +| [Incarcator](https://www.emag.ro/incarcator-de-echilibru-pentru-baterii-de-litiu-2s-3s-7-4v-11-1v-b3-lipo-10w-incarcator-compact-b3ac-nafpro-b3-7-4-11-1v-nafpro/pd/DH6R603BM/) | Pentru reincarcarea bateriei | 75 RON | + + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer | Handling GPIOs, EXTI (for sensor echo), and PWM peripherals (for servos) | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Managing concurrent tasks (sensor reading, aiming, shooting) | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction traits | Standard interface for interacting with peripherals | +| [defmt](https://github.com/knurling-rs/defmt) | Logging framework | Used for debugging distance readings and states | + +## Links + +[How a Flywheel Blaster Works](https://www.youtube.com/watch?v=example1) +[STM32 Rust Embassy Tutorial](https://github.com/embassy-rs/embassy) \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/schematic.svg b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/schematic.svg new file mode 100644 index 00000000000..5ca60121165 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/schematic.svg @@ -0,0 +1 @@ +SVG Image created as Proiect.svg date 2026-05-14T22:19:49 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: Proiect.kicad_schSheet: /GND+5VPWM1+2-3M7Motor_ServoGNDPWM1+2-3M11Motor_Servo+5VPWM1+2-3M12Motor_ServoGNDGNDPWM1+2-3M1Motor_Servo+5V+5V+5VGNDPWM1+2-3M6Motor_ServoGND1234U3LM2596 Module 5VPWM1+2-3M10Motor_Servo+5VGNDGNDPC14A1PC13A2PB9A3PB4A4PB3A5PA15A6PA14A7PA13A8PC15B1VBATB2PB8B3PH3B4PD2B5PC11B6PC10B7PA12B8PH0C1VSSC2PB7C3PB5C4PC12C5PA10C6PA9C7PA11C8PH1D1VDDD2PB6D3PA8D7PC9D8NRSTE1PC1E2PC0E3VDDE4VDDUSBE5VDDE6PC7E7PC8E8VSSAF1PC2F2PA2F3PA5F4PB0F5PC6F6PB15F7PB14F8PC3G1PA0G2PA3G3PA6G4PB1G5PB2G6PB10G7PB13G8VDDAH1PA1H2PA4H3PA7H4PC4H5PC5H6VCAPH7PB12H8U1STM32U545REIxGNDPWM1+2-3M4Motor_Servo+5VGND+5V+5VGNDGND+5VPWM1+2-3M3Motor_ServoGNDGNDPWM1+2-3M9Motor_Servo+5V+5VPWM1+2-3M2Motor_ServoPWM1+2-3M8Motor_ServoPWM1+2-3M5Motor_ServoCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050+5VVBATTProiect PM+5VM2Motor_ServoPWM1+2-3GND+5VM3Motor_ServoPWM1+2-3GND+5VM5Motor_ServoPWM1+2-3GNDGNDM11Motor_ServoPWM1+2-3+5VM12Motor_ServoPWM1+2-3GND+5VM6Motor_ServoPWM1+2-3GNDM10Motor_ServoPWM1+2-3M4Motor_ServoPWM1+2-3+5VGNDGNDGND+5VU3LM2596 Module 5V1234GND+5V+5VM1Motor_ServoPWM1+2-3GNDM7Motor_ServoPWM1+2-3+5V+5VM9Motor_ServoPWM1+2-3GND+5V+5VGNDM8Motor_ServoPWM1+2-3GND \ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/spider_robot.svg b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/spider_robot.svg new file mode 100644 index 00000000000..b31ed3b5cf2 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/images/spider_robot.svg @@ -0,0 +1,3 @@ + + +
Bluetooth

Bluetooth
Phone
(BT Controller App)
Phone...
UART

UART
HC-05
(Bluetooth Module)
HC-05...
STM 32
Gait FSM | Sensor Fusion | Safety
STM 32...
PCA9685
16-ch PWM DRiver
PCA9685...
VL53L0X
ToF Distance Sensor
VL53L0X...
MPU6050
6-axis IMU
MPU6050...
7.4V

7.4V
2S LiPo
7.4V - 2200 mAh
2S LiPo...
5V (Servo Rail)
5V (Servo Rail)
2S LiPo
7.4V - 2200 mAh
2S LiPo...
12 x MG90S
Leg Servos
6 legs x 2 DOF
12 x MG90S...
\ No newline at end of file diff --git a/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/index.md b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/index.md new file mode 100644 index 00000000000..c1530d84094 --- /dev/null +++ b/website/versioned_docs/version-acs_cc/project/2026/vladimir.olteanu05/index.md @@ -0,0 +1,65 @@ +# Hexapod +A six-legged walking robot with Bluetooth control, ToF obstacle detection, and IMU-based stability monitoring. + +:::info + +**Author**: Vladimir-Nicolae Olteanu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/acs-project-2026-Vldd28 + +::: + +## Description + +A six-legged "spider" robot built around the STM32 Nucleo-U545RE-Q. It walks using a tripod gait. Three legs always in contact with the ground — driven by twelve MG90S servos (two per leg: one for hip swing, one for leg lift). The robot accepts movement commands over Bluetooth from a phone, continuously samples a forward-facing time-of-flight sensor for obstacles, and reads an IMU to detect dangerous tilt angles. When obstacles are detected it stops or autonomously reroutes; when tilt exceeds a safe threshold it parks itself. + +## Motivation + +I wanted a project that combined embedded systems, real-time control, and mechanical design without falling into the "blink an LED" or "Arduino tutorial" category. A hexapod is a sweet spot: the tripod gait makes the locomotion problem tractable on an STM32 (no dynamic balancing required), but coordinating twelve servos against sensor feedback, designing the leg geometry, and managing power delivery for high transient currents are all genuine engineering challenges. It also gives me hands-on experience with I2C, UART, sensor fusion, and PWM fundamentals that transfer to almost any embedded role. + +## Architecture + +![Diagram](./images/spider_robot.svg) + +## Log + + + +### Week 27 April - 1 May +Started modeling the 3D parts and ordered the necessary hardware parts. + +## Hardware + +The robot is built around an STM32 Nucleo-U545RE-Q (Cortex-M33 @ 160 MHz, 512 KB flash, 272 KB RAM, hardware FPU + DSP) with a 2S LiPo power system. Twelve MG90S metal-gear servos drive the six legs (two degrees of freedom per leg: coxa for swing, femur for lift). A PCA9685 16-channel I2C PWM driver handles all servo signals to keep the MCU's timers and CPU free for the gait state machine and sensor fusion. + +For sensing, an MPU6050 6-axis IMU provides accelerometer + gyroscope data for tilt detection, and a VL53L0X time-of-flight laser distance sensor handles forward obstacle detection. Both share an I2C bus with the PCA9685. An HC-05 Bluetooth module on a UART link receives commands from a phone-based controller app. + +Power flows from a 2S 7.4V 2200mAh LiPo, through a UBEC stepping down to 5V/5A for the servos, to the PCA9685's V+ rail. The Nucleo is powered via its VIN pin from the same 5V rail, with logic and servo grounds tied together. Servos and logic are on separate power paths to prevent servo current spikes from browning out the MCU. + +The chassis and legs are 3D-printed in PLA (body) and PETG (tibias, for some compliance on impact). Body footprint is roughly 20 × 15 cm; standing height ~9 cm. + +### Schematics + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller (Cortex-M33, 160 MHz, FPU+DSP, built-in ST-LINK/V3) | Provided by university | +| [PCA9685 16-channel PWM driver](https://www.bitmi.ro/modul-i2c-pca9685-cu-16-canale-pentru-controlul-servomotoarelor-10559.html) | I2C-controlled PWM generation for all 12 servos | [25 RON](https://www.bitmi.ro/modul-i2c-pca9685-cu-16-canale-pentru-controlul-servomotoarelor-10559.html) | +| [MG90S metal-gear servo × 14](https://sigmanortec.ro/Servomotor-MG90S-angrenaje-metal-p209610310) | Leg actuation (12 in use, 2 spares) | [253 RON](https://sigmanortec.ro/Servomotor-MG90S-angrenaje-metal-p209610310) | +| [GY-521 MPU6050 IMU](https://sigmanortec.ro/Modul-giroscopic-si-accelerometru-3-axe-GY-521-p126016326) | 6-axis accelerometer + gyroscope for tilt detection and stability monitoring | [25 RON](https://sigmanortec.ro/Modul-giroscopic-si-accelerometru-3-axe-GY-521-p126016326) | +| [VL53L0X ToF sensor](https://sigmanortec.ro/Modul-VL53L0X-timp-de-zbor-p126182383) | Forward-facing laser distance sensor for obstacle detection (range up to 2 m) | [17 RON](https://sigmanortec.ro/Modul-VL53L0X-timp-de-zbor-p126182383) | +| [HC-05 Bluetooth module](https://sigmanortec.ro/Modul-Bluetooth-HC-05-p141736971) | Wireless serial link for phone-based command input | [27 RON](https://sigmanortec.ro/Modul-Bluetooth-HC-05-p141736971) | +| [Gens Ace 2S 2200mAh 30C LiPo (XT60)](https://www.emag.ro/) | Main power source (7.4V) | [87 RON](https://www.emag.ro/) | +| [B3AC LiPo balance charger](https://www.emag.ro/) | Safe charging and cell balancing for the LiPo | [74 RON](https://www.emag.ro/) | +| UBEC 5V/5A buck converter | Steps down 7.4V LiPo to a stable 5V rail for servos and logic | [FILL IN — pending purchase] | +| Piezo buzzer + WS2812 LED | Audio + visual status feedback (connect, low battery, obstacle) | ~10 RON | +| Misc. (jumper wires, perfboard, M2/M3 screws, 22 AWG silicone wire, heat-shrink, XT60 connector, switch) | Wiring and mechanical assembly | ~60 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | Hardware Interface | Base library for project. | + +## Links diff --git a/website/versioned_docs/version-fils_en/exam/lab_test.md b/website/versioned_docs/version-fils_en/exam/lab_test.md new file mode 100644 index 00000000000..b2b1a844a29 --- /dev/null +++ b/website/versioned_docs/version-fils_en/exam/lab_test.md @@ -0,0 +1,5 @@ +# Lab Test + +- [Lab Solutions](/source/lab-solutions-main.zip) +- [Lab Test Template](/source/lab-test-2026-main.zip) +- diff --git a/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/KICAD.webp b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/KICAD.webp new file mode 100644 index 00000000000..f963d99d595 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/KICAD.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/Prototype.webp b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/Prototype.webp new file mode 100644 index 00000000000..3f27de503be Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/Prototype.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/WE.webp b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/WE.webp new file mode 100644 index 00000000000..97046d18591 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/WE.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/index.md b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/index.md new file mode 100644 index 00000000000..fa61f9d1ba2 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/abdulqader.albaidhani/index.md @@ -0,0 +1,121 @@ +# Sonar using ToF Distance Sensors + +A Sonar using ToF Distance Sensors to detect foreign objects and deliver geographical information + +:::info + +**Author**: Abdulqader Albaidhani \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Albaidany + +::: + + + +## Description + +My Project Idea: A sonar radar using a Time-of-Flight (ToF) distance sensor to detect foreign objects in an area, when an object enters the sonar's radius, an alert sound queue will occur, the sonar measures accross an area with both manual (using buttons) and automatic movements (using a button to switch modes). + +## Motivation + +I chose to make this because I'm very passionate about Intel-gathering gadgets and I wanted to persue many more similar ideas, this is a concept I really found interesting and I wanted to replicate it. + +## Architecture + +Control Layer: NUCLEO-U545RE-Q microcontroller running Rust with Embassy. +Handles servo control (PWM), reads distance data via I2C from the sensor, processes button inputs, manages automatic/manual scanning logic, generates buzzer signals/sound queues, and streams radar data (angle + distance) to the laptop over USB. + +Sensing Layer: VL53L0X Time-of-Flight (ToF) distance sensor mounted on a custom rotating platform. +it measures distance in real time at the current angle using time-of-flight (ToF) technology, providing precise range data for radar visualization via laptop. + +Actuation Layer: SG90 Micro Servo Motor driven by PWM signals from the MCU. +Rotates the sensor across a 0°–180° sweep, allowing spatial scanning of the environment. movement supports both automatic scan and manual directional control via user input using buttons, when in manual mode and inactive for ~3 seconds, the system returns back to automatic sweeping mode. + +## Log + + + +### Week 11 - 11 May + +Parts arrived and some we're faulty, needed time to reorder the parts and also adjusted some changes for what the project will have, costed extra time + +### Week 12 - 18 May + +Ordered parts, displays etc but decided to use a GUI on my laptop, so the project needed some readjustments, I had push buttons for control on the prototype for testing + +![Prototype](./Prototype.webp) + +### Week 14 - 25 May + +Reviewing final issues with my code, the components worked fine but the GUI had trouble recognising the ToF + +## Hardware + +NUCLEO-U545RE-Q +USB cable +VL53L0X Time-of-Flight Distance Sensor Module +SG90 Micro Servo Motor +Passive Buzzer +Green LED +Red LED +Push buttons +Resistors +Breadboard(atm) +Jump wires + + +### Schematics + +![WE schematic](./WE.webp) + +## Hardware Schematic + +![KiCad schematic](./KICAD.webp) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|--------|-------| +| STM32 Development Board | The microcontroller | 105 RON | +| VL53L0X Time-of-Flight Distance Sensor | Distance Sensor | 25 RON | +| USB Cable | Cable for data transfer | 5 RON | +| SG90 Servo Motor | Sensor movement | 15 RON | +| Passive buzzer x3 | Sound queues | 2 RON | +| LEDs x4 | Visual queues | 4 RON | +| Buttons x3 | Manual controls | 5 RON | +| Resistors + Jumpers + breadboards | Supporting the circuit | 30 RON | + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| embassy-stm32 | Embassy HAL for STM32 microcontrollers | GPIO, timers, UART, sensor integration | +| embassy-executor | Async task executor | Running concurrent tasks (sensor read, servo control, USB streaming) | +| embassy-time | Async timers and delays | Servo sweep timing, debounce, 3s timeout logic | +| embassy-sync | Synchronization primitives | Sharing data between tasks (angle, distance, mode) | +| embassy-futures | Async utilities | Task coordination and control flow | +| embassy-usb | USB device stack (CDC ACM) | Sending radar data to laptop via USB | +| embedded-hal | Hardware abstraction traits | Generic interfaces for I2C, PWM, GPIO | +| vl53l0x custom drivers | Driver for VL53L0X sensor | Reading distance measurements over I2C | +| cortex-m | ARM Cortex-M support crate | Low-level MCU access | +| cortex-m-rt | Runtime for Cortex-M devices | Startup, interrupt vectors | +| heapless | Fixed-capacity data structures | Buffers for USB data (angle + distance) | + +## Links + + + +1. [Visual of a Sonar](https://www.teledynemarine.com/products/product-line/sonar) +2. [Different types of Sonars](https://www.deeptrekker.com/news/sonar-systems) + diff --git a/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/hardware.webp new file mode 100644 index 00000000000..42913be04c3 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md b/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md index 691528a598b..8b83aea0264 100644 --- a/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/adelina.cucerave/index.md @@ -4,7 +4,7 @@ A smart reaction-training station that uses lights and sensors to measure hit fo :::info **Author**: Cucerave Adelina-Maria 1222EEB \ -**GitHub Project Link**: (https://github.com/UPB-PMRust-Students/fils-project-2026-AdelinaMariaCucerave) +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-AdelinaMariaCucerave ::: @@ -81,6 +81,14 @@ By building a system that gives instant feedback through lights and sounds, user - Having problems with Windows/Linux environment but fixing them - Received help with soldering some wires to my piezo sensors and RGB LED rings +### Week 11: +- Finished with KiCAD schematic +- Noticed 2 things when testing the protection circuit for the piezoel. sensors: I need a different capacitor ( 100nF instead of 200nF), missing FTF wires +- I also need a different potentiometer because the legs of the one I have right now are too short to reach into the breadboard, ordered it + +### Week 12: +- Will start doing testing of hardware + ## Hardware The main component is the Nucleo STM32U545RE-Q board that acts as the central unit, analyzing real-time vibration data based on signals from three piezoelectric diaphragms taped underneath the training cups. To protect the microcontroller's ADC pins from high-voltage spikes caused by physical "thumps," each piezo is connected through a protection circuit using BAT41 Schottky diodes and high-value resistors. A potentiometer is integrated to provide a variable voltage signal, allowing the user to manually adjust the "Global Sensitivity" threshold for the training session. @@ -93,6 +101,15 @@ For user feedback, the STM32 controls RGB LED rings to provide instant visual cu ![Diagram](diagram.svg) +
+![KiCAD](kicadschematic.svg) +
+ +
+![Hardware](hardware.webp) +
+ + ### Bill of Materials + +
[ Power / USB / WiFi ]
Raspberry Pi Pico 2 W
Central Controller — embassy-rp / Rust
HC-SR04 x6
Ultrasonic sensors
ST7735 TFT
1.8'' 128x160 display
SG90 Servo
Barrier control
3x4 Keypad
PIN input
Status LEDs x6
Spot indicators
Web Interface
WiFi / TCP
GPIOSPIPWMGPIO matrixGPIO
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/index.md b/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/index.md new file mode 100644 index 00000000000..a1507342879 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/index.md @@ -0,0 +1,90 @@ +# Smart Parking System + +A smart parking system with real-time spot monitoring and web-based reservation. + +:::info + +**Author**: Dragomirescu Alexandru \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-alexdragomirescu06 + +::: + +## Description + +The Smart Parking System monitors parking spots in real time using ultrasonic sensors. A servo motor controls a barrier that opens automatically when there are open spots in the parking lot, or when a valid PIN is entered via a keypad in the case of a reserved spot. A display shows the current status of the parking lot and prompts you to enter the reservation code via a keypad, and a web interface hosted on the Raspberry Pi Pico W allows users to reserve spots remotely over WiFi. + +## Motivation + +I chose this project because it combines multiple hardware components and communication protocols into a single practical system. It covers areas like sensor reading, motor control, display output, network communication, and user input — making it a comprehensive project that reflects everything learned throughout the semester. + +## Architecture + +![Architecture Diagram](architecture.svg) + +The system is built around the Raspberry Pi Pico W as the central controller, running software written in Rust using the embassy-rp async framework. + +Main components: + +* **Raspberry Pi Pico 2 W** — main microcontroller, handles all logic and WiFi +* **Ultrasonic Sensors (HC-SR04 x6)** — detect whether each parking spot is occupied +* **Servo Motor (SG90)** — controls the entry/exit barrier +* **ST7735 TFT Display (1.8" 128x160)** — shows parking spot availability and system status +* **3x4 Keypad** — allows users to enter a PIN to open the barrier +* **Status LEDs (x6)** — one per spot, give instant visual feedback on occupancy +* **Web Interface** — hosted on the Pico 2 W, accessible over WiFi for remote reservation + +All components communicate with the Pico 2 W directly: ultrasonic sensors via GPIO, servo via PWM, TFT display via SPI, keypad via GPIO matrix scanning, LEDs via GPIO, and the web interface via the onboard WiFi stack. + +## Log + +### Week 4-5 + +After going through multiple possible projects, finally landed on the basic idea of a smart parking system and started researching exactly what hardware components would be needed. + +### Week 5-6 + +Expanded on the original idea by adding the web interface for online reservations. + +### Week 7-8 + +Ordered all necessary components, currently waiting on their delivery. + +## Hardware + +The hardware is based on the Raspberry Pi Pico 2 W microcontroller. Six HC-SR04 ultrasonic sensors detect the presence of a vehicle in each parking spot. An SG90 servo motor acts as a barrier gate. An ST7735 1.8" TFT display shows real-time status over SPI. A 3x4 matrix keypad is used for PIN input, and six status LEDs provide instant visual feedback on spot occupancy. + +### Schematics + +![Schematic](smart_parking.svg) + +### Bill of Materials + +| Device | Usage | Price | +| ------ | ----- | ----- | +| [Raspberry Pi Pico 2 W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) | The microcontroller | 52.18 RON | +| [HC-SR04 Ultrasonic Sensor](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf) | Parking spot detection (x6) | 12.80 RON each | +| [SG90 Servo Motor](http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf) | Barrier control | 15.29 RON | +| [ST7735 TFT 1.8" 128x160 SPI Display](https://www.displayfuture.com/Display/datasheet/controller/ST7735.pdf) | Status display | 53.48 RON | +| [3x4 Matrix Keypad](https://www.optimusdigital.ro/en/keypads/470-4x4-matrix-keypad.html) | PIN input | 8.91 RON | +| Breadboard 830 points (x3) | Prototyping | 12.42 RON each | +| LED Kit 3mm 100pcs | Status indicators | 10.53 RON | +| Male-Male Jumper Wires 20cm (x40) | Connections | 17.93 RON | +| Jumper Wires | Connections | 16.15 RON | +| 330Ω Resistors Kit (200pcs) | Current limiting for LEDs | 32.41 RON | + + +## Software + +| Library | Description | Usage | +| ------- | ----------- | ----- | +| [embassy-rp](https://github.com/embassy-rs/embassy) | Async embedded framework for RP2040 | Main async runtime and peripheral drivers | +| [embassy-net](https://github.com/embassy-rs/embassy) | Networking stack for embassy | WiFi and TCP/IP for the web interface | +| [st7735s](https://github.com/sajattack/st7735-lcd-rs) | TFT display driver | Driving the ST7735 display over SPI | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing text and shapes to the display | +| [heapless](https://github.com/rust-embedded/heapless) | Static data structures | Used for fixed-size buffers without heap allocation | + +## Links + +1. [Embassy-rs documentation](https://embassy.dev) +2. [Raspberry Pi Pico W datasheet](https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf) +3. [HC-SR04 datasheet](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf) diff --git a/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/smart_parking.svg b/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/smart_parking.svg new file mode 100755 index 00000000000..84d690bbe8b --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/adragomirescu2802/smart_parking.svg @@ -0,0 +1 @@ +SVG Image created as smart_parking.svg date 2026-05-06T22:09:51 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Smart Parking SystemFile: smart_parking.kicad_schSheet: /+5V1234J6HC-SR04+5VGND+3.3V1234J5HC-SR04+5VGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico_2WGND+5VGNDGNDGNDGND1234J4HC-SR041234J1HC-SR0412345678J7ST7735 TFT12345678J94x4 Keypad+5VGNDGNDGND123J8SG90 Servo+5V+5V1234J3HC-SR041234J2HC-SR04+5V+5V+3.3VGNDHC_ECHO5KP_C3HC_TRIGHC_TRIGHC_ECHO1KP_R3KP_R4KP_C1KP_C2KP_C3KP_C4SERVO_PWMSPIO_TXSPIO_SCKHC_TRIGHC_ECHO6KP_R3HC_TRIGHC_ECHO3KP_R2KP_R1KP_R4HC_ECHO4TFT_RESKP_C4KP_C2KP_C1TFT_DCTFT_BLTFT_CSHC_TRIGHC_ECHO2HC_ECHO6SPIO_SCKHC_ECHO5SPIO_TXTFT_CSTFT_DCTFT_RESTFT_BLSERVO_PWMKP_R2KP_R1HC_TRIGHC_ECHO3HC_ECHO4HC_ECHO2HC_TRIGHC_ECHO1Sensor 4 - Spot 4Sensor 5 - Spot 5Sensor 1 - Spot 1Sensor 6 - Spot 6Sensor 2 - Spot 2Sensor 3 - Spot 3GNDJ5HC-SR041234GND+5VGNDJ6HC-SR041234+5VGNDJ4HC-SR041234J7ST7735 TFT12345678GNDJ8SG90 Servo123GND+3.3V+5VGND+5VGNDJ1HC-SR041234GND+5VJ3HC-SR041234J2HC-SR041234+5V+3.3V+5V+5VA1RaspberryPi_Pico_2WGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/hardware.webp new file mode 100644 index 00000000000..df5f2ac09bb Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/index.md b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/index.md index 003705685f1..860cb3f28a4 100644 --- a/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/index.md @@ -95,16 +95,16 @@ Got the project approved. Planned the architecture, chose the components and researched thermal printer communication protocols (ESC/POS) and Rust crates. ### Week 13 – 19 April -Ordered all the required components. +Components arrived. ### Week 20 – 26 April -(Work in progress) +Working on the hardware and software. ### Week 27 April – 3 May -(Work in progress) +Working on the hardware and software. ### Week 4 – 10 May -(Work in progress) +Started assembling the hardware and connecting the components. ### Week 11 – 17 May (Work in progress) @@ -116,9 +116,13 @@ Ordered all the required components. ## Hardware -_Schematic to be added (KiCad)._ +### Schematics -_Photos to be added when components arrive._ +![KiCad Schematic](mangu_adrian.svg) + +### Photos + +![Hardware Setup](hardware.webp) --- @@ -144,7 +148,6 @@ _Photos to be added when components arrive._ | serde-json-core | JSON parsing (no_std) | Parsing incoming order data | | thermal-print | Thermal printer ESC/POS commands | Controlling the printer | - ## Links 1. [Embassy-rs Framework](https://embassy.dev) diff --git a/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/mangu_adrian.svg b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/mangu_adrian.svg new file mode 100644 index 00000000000..be5feb0acdf --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/adrian.mangu/mangu_adrian.svg @@ -0,0 +1,13853 @@ + + + +SVG Image created as mangu adrian.svg date 2026-05-09T21:05:39 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.1 +KiCad E.D.A. 10.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: mangu adrian.kicad_sch +File: mangu adrian.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP0 +GP0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + +GP1 +GP1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + +GP2 +GP2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + +GP3 +GP3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + +GP4 +GP4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +GP5 +GP5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP6 +GP6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + + +GP7 +GP7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP8 +GP8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + +GP9 +GP9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 +12 + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +13 +13 + + + + + + + + + + + + + + + + + + + + + +GP10 +GP10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +14 +14 + + + + + + + + + + + +GP11 +GP11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +15 +15 + + + + + + + + + + + + + + + + + + + + + + + +GP12 +GP12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +16 +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP13 +GP13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +17 +17 + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP14 +GP14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP15 +GP15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP16 +GP16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 +21 + + + + + + + + + + + + + + + + + + +GP17 +GP17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 +22 + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +23 +23 + + + + + + + + + + + + + + + + + + + + + + + + + + +GP18 +GP18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + + +GP19 +GP19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP20 +GP20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP21 +GP21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 +27 + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +28 +28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP22 +GP22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +RUN +RUN + + + + + + + + + + + + + + + + + + + + + + + + + +30 +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP26 +GP26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +31 +31 + + + + + + + + + + + + + + + + + + + + + +GP27 +GP27 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 +32 + + + + + + + + + + + + + + + + + + + + + + + + + + +AGND +AGND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +33 +33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GP28 +GP28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +34 +34 + + + + + + + + + + + + + + + + + + + +ADC_VREF +ADC_VREF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +35 +35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3_OUT +3V3_OUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +36 +36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3_EN +3V3_EN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +37 +37 + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +38 +38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VSYS +VSYS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +39 +39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VBUS +VBUS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40 +40 + + + + + + + + + + + + + + + + + + + + + + + + + +A1 +A1 + + + + + + + + +SC0918 +SC0918 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Raspberry Pi:MODULE_SC0918 +Raspberry Pi:MODULE_SC0918 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Raspberry Pi +Raspberry Pi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + +2 +2 + + + + + + + + + + + + +J2 +J2 + + + + + + + + + + + + + + + +printer power +printer power + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + +2 +2 + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J1 +J1 + + + + + + + + + + +Printer TTL +Printer TTL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware1.webp b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware1.webp new file mode 100644 index 00000000000..ff122438a03 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware2.webp b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware2.webp new file mode 100644 index 00000000000..09edd352652 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/hardware2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/index.md b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/index.md index ee8d404181d..8f47a3daf50 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/index.md @@ -47,6 +47,12 @@ After the feedback received, I chose my final idea, to which I added more featur ### Weeks 7 - 8 I continued my research for hardware components, eventually making the final order of my parts. +### Weeks 9 - 11 +I waited a while for my components to arrive, so until they did, I tried to find a suitable case for my digital clock. I wanted something that looked like a house, but that wasn't very expensive. In the end, I found a simple wooden birds' house, perfect for what I need. I then began with the testing phase, ensuring my components work well. + +![Hardware 1](hardware1.webp) +![Hardware 2](hardware2.webp) + ## Hardware The system is centered around an STM32 NUCLEO-U545RE-Q microcontroller. For user interaction, a 2.8” TFT touchscreen display (ILI9341) is used, communicating via SPI. Environmental data is collected using a DHT11 temperature and humidity sensor, an air quality sensor, and a light sensor, connected through digital and analog inputs. diff --git a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/schematic.svg index 6710bad6fd7..13a2c20c5a2 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/schematic.svg +++ b/website/versioned_docs/version-fils_en/project/2026/alesia_ana.burlacu/schematic.svg @@ -1 +1 @@ -Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-04-23KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Digital Cuckoo Clock SchematicFile: cuckoo schematic.kicad_schSheet: /R51KILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U2KMRTM28028-SPIR110K+3.3VGNDANTANTGNDGNDLOUTLNC3NC3NC4NC4NC9NC9ROUTRSCLSCLSDASDAVCCVCCU6RDA5807MGND+5VGNDC51µF12LS2SpeakerAOUTGNDVCCU8MQ-135GNDVDD1DATA2GND4U3DHT11GND+5VR41KSDA1INT2LDR3LED_K4LED_A5GND6SCL7VDD8U7APDS-9960+3.3VGNDPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U5ANUCLEO-U545RE-QGNDGND_(audio)L_OUTR_OUTVCCU9VHM-314GND+5VC31µFC41µFR31K1KRGNDGNDOUT-1GND2IN3~{SD}4VDD5OUT+6U1PAM8301R21KC2100nFGND+3.3VGND~{RST}1A02D03SCK/D54MISO/D65MOSI/D76CS/D873V385V9GND10D411D312SDA/D213SCL/D114RX15TX16U4WEMOS_D1_mini+5V+3.3V+5VCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U5BNUCLEO-U545RE-QGND+3.3V123RV1R_Potentiometer12LS1SpeakerPWM1+2-3M1Motor_Servo+5V+5VGNDC11000µFR110K+3.3VGNDU3DHT11VDD1DATA2GND4GNDC51µFLS2Speaker12U6RDA5807MANTANTGNDGNDLOUTLNC3NC3NC4NC4NC9NC9ROUTRSCLSCLSDASDAVCCVCCGNDU7APDS-9960SDA1INT2LDR3LED_K4LED_A5GND6SCL7VDD8+3.3V+5VU2KMRTM28028-SPIVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U9VHM-314GNDGND_(audio)L_OUTR_OUTVCCR31KGNDU1PAM8301OUT-1GND2IN3~{SD}4VDD5OUT+6R21KC2100nFGND+3.3VGNDU4WEMOS_D1_mini~{RST}1A02D03SCK/D54MISO/D65MOSI/D76CS/D873V385V9GND10D411D312SDA/D213SCL/D114RX15TX16+5V+3.3V+5VU5BNUCLEO-U545RE-QCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2GND+3.3VRV1R_Potentiometer123+5VGNDC11000µF \ No newline at end of file +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-04-23KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Digital Cuckoo Clock SchematicFile: cuckoo schematic.kicad_schSheet: /+3.3VPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U5ANUCLEO-U545RE-Q12LS1Speaker+3.3VC41µFSDA1INT2LDR3LED_K4LED_A5GND6SCL7VDD8U7APDS-9960+3.3VGNDILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U2KMRTM28028-SPI+5V+3.3VC11000µF+5V123RV1R_PotentiometerR51KR41KPWM1+2-3M1Motor_ServoGNDGNDGNDANTANTGNDGNDLOUTLNC3NC3NC4NC4NC9NC9ROUTRSCLSCLSDASDAVCCVCCU6RDA5807M+5VGND1KRR31K+5VGNDGNDGND_(audio)L_OUTR_OUTVCCU9VHM-314C31µFGNDGNDOUT-1GND2IN3~{SD}4VDD5OUT+6U1PAM8301C2100nF+3.3V12LS2SpeakerR21KC51µFR110KGNDGND+5VAOUTGNDVCCU8MQ-135GNDVDD1DATA2GND4U3DHT11GND+5VCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U5BNUCLEO-U545RE-Q+3.3VGND~{RST}1A02D03SCK/D54MISO/D65MOSI/D76CS/D873V385V9GND10D411D312SDA/D213SCL/D114RX15TX16U4WEMOS_D1_mini+5VU2KMRTM28028-SPIVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14+5V+3.3VGNDU6RDA5807MANTANTGNDGNDLOUTLNC3NC3NC4NC4NC9NC9ROUTRSCLSCLSDASDAVCCVCCU7APDS-9960SDA1INT2LDR3LED_K4LED_A5GND6SCL7VDD8+3.3VC11000µF+5VRV1R_Potentiometer123GND+3.3VGNDGNDR31KU9VHM-314GNDGND_(audio)L_OUTR_OUTVCCGNDU1PAM8301OUT-1GND2IN3~{SD}4VDD5OUT+6C2100nF+3.3VLS2Speaker12R21KC51µFR110KGNDGND+3.3VU3DHT11VDD1DATA2GND4+5VU5BNUCLEO-U545RE-QCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2+3.3VGNDU4WEMOS_D1_mini~{RST}1A02D03SCK/D54MISO/D65MOSI/D76CS/D873V385V9GND10D411D312SDA/D213SCL/D114RX15TX16+5V diff --git a/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/hardware1.webp b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/hardware1.webp new file mode 100644 index 00000000000..42d58d061ed Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/hardware1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/index.md b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/index.md index 89f7e5771c7..ca828bb46ff 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/index.md @@ -3,54 +3,70 @@ A web-managed, dual-architecture smart clock that features asynchronous timekeep :::info -**Student:** Stuparu Alessia-Ștefania \ -**GitHub Repository:** [https://github.com/UPB-PMRust-Students/fils-project-2026-alessiastuparu](https://github.com/UPB-PMRust-Students/fils-project-2026-alessiastuparu) +**Author**: Stuparu Alessia-Ștefania \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/fils-project-2026-alessiastuparu](https://github.com/UPB-PMRust-Students/fils-project-2026-alessiastuparu) ::: -## 1. Project Description +## Description **I am implementing an internet-connected alarm that features a dashboard for management, an internal asynchronous software RTC and a hardware interface that handles tactile button inputs while triggering a LED ring, a buzzer, and an MP3 audio module.** The system is split into 2 parts: a Wi-Fi-enabled chip that handles networking and UI, while an ARM-Cortex-M33 manages hardware tasks such as turning on the LED ring, sensors and audio outputs. -## 2. Motivation +## Motivation I chose to do this project because I wanted to build a practical, daily-use tool while learning about cross-architecture communication and asynchronous embedded Rust. By using the RP2350 and STM32U5, I can better grasp the concepts of memory safety, state synchronization and custom protocol design. -## 3. Architecture +## Architecture The system relies on two microcontrollers that work at the same time and communicate via a hardware UART bridge: -* **The Raspberry Pi Pico 2W:** Represents the networking layer as it hosts an Embassy-based web server to receive user commands via HTTP. +* **The Raspberry Pi Pico 2W:** Represents the networking layer as it hosts a MicroPython HTTP web server to receive user commands via HTTP. * **STM32:** Represents the control layer as it manages alarm state, local timekeeping, physical button inputs, and peripheral driving. -* **Communication Protocol:** To keep the two chips in sync, I am using the postcard serialization format so that commands sent from the Pico 2W to the STM32 are interpreted without data corruption or memory errors. +* **Communication Protocol:** To keep the two chips in sync, I am using a plain-text, newline-terminated UART protocol. The Pico 2W sends commands such as `SA:HH:MM` (set alarm), `SN` (snooze), `DA` (disable) and `ST:HH:MM:SS` (sync time). The STM32 sends telemetry back every 5 seconds in the format `T:{temp},AH:{hh},AM:{mm},AE:{0|1},AR:{0|1},CH:{hh},CM:{mm},CS:{ss}`. ![Architecture Diagram](./architecture.drawio.svg) -## 4. Log +## Log ### Weeks 1-7 * Came up with the idea for the project and did needed research. * Finished the project proposal and selected hardware components. * Made final changes to the hardware part and ordered components. -### Week 8 +### Week 8 * Set up the Cargo workspace for both of the architectures so it handles cross-compiling. * Designed the behavior of the chips and what each of them handles. * Created a shared directory library so that specific commands are understood by both chips. ### Week 9 -* Programmed the Pico 2W so that it acts like a Wi-Fi server and created the HTML/JS website. -* Established the UART serial connection so the Pico W can send data to the STM32. -* Programmed the STM32 to multitask. It ticks a clock in the background while listening for new commands, all while using a Mutex to share memory between tasks. -* Completed the Documentation Milestone. +* Implemented Pico 2W Wi-Fi connection logic, HTML/JS web server and dashboard. +* Implemented STM32 UART listener, time sync and alarm setting from the dashboard. +* Implemented internal software RTC and alarm state management on STM32. -## 5. Hardware +### Week 10 +* Implemented bidirectional UART telemetry between STM32 and Pico 2W. +* Added buzzer driver with escalating alarm pattern and physical snooze/cancel buttons with EXTI interrupts. +* Added ST7735 SPI display showing live clock, alarm status and temperature. +* Configured STM32 PLL to 80MHz, added WS2812B LED ring sunrise simulation and full peripheral integration. +* Set up minimal Wi-Fi AP server on Pico 2W. + +### Week 11 +* Switched Pico 2W firmware to MicroPython and implemented plain-text UART protocol. +* Verified full system integration: UART bridge, live dashboard with real BME280 temperature, all peripherals working together. + +## Hardware The system uses a Nucleo STM32U545RE-Q as the main controller, a Raspberry Pi Pico 2W for Wi-Fi networking and web hosting, a 1.8" TFT LCD for time and temperature visualization, a BME280 sensor for environmental monitoring, a WS2812B LED ring for sunrise simulation, an active buzzer and a DFPlayer Mini with a 3W speaker for audible alarms and tactile buttons for manual hardware control. -## 6. Bill of Materials +![Hardware overview](./hardware1.webp) + +### Schematics + +![KiCad Schematic](./sunrisealarm.webp) + +### Bill of Materials | Device | Usage | Price | |--------|-------|-------| @@ -69,24 +85,29 @@ The system uses a Nucleo STM32U545RE-Q as the main controller, a Raspberry Pi Pi | [Dupont Wires (M-M & M-F)](https://www.optimusdigital.ro/ro/fire-fire-mufate/214-fire-colorate-mama-mama-10p.html?search_query=Fire+Colorate+Mama-Tata+%2810p%29+20+cm&results=6) | Hardware interconnections | 19.24 RON | | [Nucleo STM32U545RE-Q](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&srsltid=AfmBOoqXGPqxB13PvgWCZHddM_5qXjGqEcsqiVKHqEcfBJFRI1cYmjSH&_gl=1*1q1geh*_ga*dW5kZWZpbmVk*_ga_15W4STQT4T*dW5kZWZpbmVk*_ga_1KQLCYKRX3*dW5kZWZpbmVk) | Main logic and peripheral controller | 140 RON | -## 7. Software +## Software | Library | Description | Usage | |---------|-------------|-------| | [embassy-stm32](https://docs.embassy.dev/embassy-stm32/0.6.0/stm32u545re/index.html) | Hardware abstraction for STM32 | Used for configuring SPI, I2C, UART, and GPIO (for the tactile buttons) on the Nucleo | -| [embassy-rp](https://docs.embassy.dev/embassy-rp/0.9.0/rp235xa/index.html) | Hardware abstraction for Pico 2W | Used for configuring the RP2350 peripherals | -| [postcard](https://docs.rs/postcard-bytes/latest/postcard/) | no_std message serialization | Used to safely pack and unpack UART network commands between the two chips | -| [cyw43](https://docs.rs/cyw43/latest/cyw43/) | Pico W Wi-Fi driver | Used to establish the wireless network connection | -| [embassy-net](https://docs.rs/embassy-net/latest/embassy_net/index.html) | Asynchronous network stack | Used to serve the HTTP dashboard to the user | -| [st7735-lcd](https://docs.rs/st7735-lcd/latest/st7735_lcd/) | SPI display driver | Used for drawing the clock UI and temperature to the 1.8" TFT screen | -| [bme280-rs](https://docs.rs/bme280-rs/latest/bme280_rs/) | I2C sensor driver | Used to read room temperature and humidity | -| [smart-leds](https://docs.rs/smart-leds/latest/smart_leds/) | Addressable LED API | Used to control the WS2812B ring for the sunrise simulation | -| [dfplayer](https://docs.rs/dfplayer-async/latest/dfplayer_async/) | UART driver for DFPlayer Mini | Used to trigger MP3 audio playback for the alarm | - -## 8. Links - -1. [Embassy Framework Documentation](https://embassy.dev/book/) -2. [Postcard Protocol Specification](https://docs.rs/postcard/0.6.0/postcard/) -3. [The Rust on Embedded Devices Book](https://docs.rust-embedded.org/book/) -4. [DFPlayer Mini Manual & AT Commands](https://picaxe.com/docs/spe033.pdf) -5. [ST7735 Display Datasheet](https://www.alldatasheet.com/datasheet-pdf/pdf/326213/SITRONIX/ST7735.html) \ No newline at end of file +| [embassy-executor](https://docs.embassy.dev/embassy-executor/0.10.0/cortex-m/index.html) | Async task executor | Runs all concurrent tasks on STM32 | +| [embassy-time](https://docs.embassy.dev/embassy-time/0.5.1/default/index.html) | Async timekeeping | `Timer::after` and `with_timeout` for delays and I2C scan timeouts | +| [embassy-sync](https://docs.embassy.dev/embassy-sync/0.5.0/default/index.html) | Sync primitives | `Mutex` for shared `ClockState` between all tasks | +| [embedded-graphics](https://docs.rs/embedded-graphics/0.8.1/embedded_graphics/) | 2D graphics library | Text and shapes on the ST7735 display | +| [st7735-lcd](https://docs.rs/st7735-lcd/0.9.0/st7735_lcd/#) | SPI display driver | ST7735 initialization and rendering | +| [heapless](https://docs.rs/heapless/0.8.0/heapless/) | Fixed-capacity collections | `String` for UART message formatting without heap allocation | +| [cortex-m](https://docs.rs/cortex-m/latest/cortex_m/) | Cortex-M architecture utilities | `interrupt::free` for WS2812B bit-bang timing | +| [defmt](https://docs.rs/defmt/0.3.5/defmt/) | Efficient embedded logging | Real-time debug output via RTT | +| [defmt-rtt](https://docs.rs/defmt-rtt/0.4.0/defmt_rtt/) | RTT transport for defmt | Sends defmt logs over debug probe | +| [panic-probe](https://docs.rs/panic-probe/0.3.1/panic_probe/) | Panic handler | Prints panic messages via probe | +| [MicroPython network](https://docs.micropython.org/en/latest/library/network.html) | Wi-Fi management | Creates the `SunriseAlarm` access point on Pico 2W | +| [MicroPython socket](https://docs.micropython.org/en/latest/library/socket.html) | TCP socket server | Serves the HTTP dashboard on port 80 | + +## Links + +1. [Embassy Framework Book](https://embassy.dev/book/) +2. [STM32U5 Series Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u5-series-armbased-32bit-mcus-stmicroelectronics.pdf) +3. [BME280 Datasheet](https://www.alldatasheet.com/html-pdf/1132060/BOSCH/BME280/7373/41/BME280.html) +4. [WS2812B Datasheet](https://www.alldatasheet.com/html-pdf/1179113/WORLDSEMI/WS2812B/566/1/WS2812B.html) +5. [MicroPython Documentation](https://docs.micropython.org/en/latest/) +6. [Raspberry Pi Pico 2W Documentation](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico2) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/sunrisealarm.webp b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/sunrisealarm.webp new file mode 100644 index 00000000000..f09adc13ecb Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alessia.stuparu/sunrisealarm.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/arhitecture.svg b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/arhitecture.svg new file mode 100644 index 00000000000..689c7898d48 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/arhitecture.svg @@ -0,0 +1,1083 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/components_early.svg b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/components_early.svg new file mode 100644 index 00000000000..d08bd5a176a --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/components_early.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/index.md b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/index.md index 10f66fb5a5e..272ba49563c 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/index.md @@ -20,9 +20,9 @@ My hobby is music production. I have been doing ambiental, metal and digicore or ## Architecture -Add here the schematics with the architecture of your project. Make sure to include: - - what are the main components (architecture components, not hardware components) - - how they connect with each other +
+![Arhitecture](arhitecture.svg) +
## Log @@ -34,10 +34,22 @@ The STM32 arrived. Played with it and everything worked fine. I also messed arou ### Week 20 - 26 April -I ordered my own sensors and an LED display. Plan to make a working skeleton next week. +I ordered my own sensors and an LED display. Plan to make a working skeleton. + +## Week 27 April - 3 May + +Spent my weekend celebrating May Day. Glory to all workers whose blood was shed fighting for our rights. ### Week 4 - 10 May +It seems one of the HC-SR04+ sensors I have ordered is faulty (plan to check in with my colleagues, see if a replacement helps). Glad I spent an entire weekend evening not knowing what part of my code doesn't work. Did the KiCad schematic and got a WCMCU-1334 DAC from one of my colleagues. + +
+![Early Hardware](components_early.svg) +
+ +Only made the sensors work thus far, but I did figure out all the connections I need by KiCad and reading the documentation. + ### Week 11 - 17 May ### Week 18 - 24 May @@ -47,11 +59,15 @@ I ordered my own sensors and an LED display. Plan to make a working skeleton nex - STM32U545 - 2 x HC-SR04+ - sensors to detect distance to hands - "ST7735" LCD Display - used to show current effect and how much % it is applied to the wave. Also mine is most likely a knockoff. +- WCMCU-1334 - DAC to convert the read data into an interpretation of a signal. ### Schematics -Place your KiCAD or similar schematics here in SVG format. +
+![KiCad Schematic](theremin.svg) +
+ ### Bill of Materials @@ -70,6 +86,7 @@ The format is | [STM32U545](https://www.st.com/en/microcontrollers-microprocessors/stm32u535-545.html) | Microcontroller | [106 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | | [2 x HC-SR04+](https://web.eece.maine.edu/~zhu/book/lab/HC-SR04%20User%20Manual.pdf) | Ultrasonic Sensors | [2 x 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) | | ["ST7735 LCD"](https://www.displayfuture.com/Display/datasheet/controller/ST7735.pdf) | Displaying effect information | [35 RON](https://www.optimusdigital.ro/en/lcds/8589-144-lcd-for-stc-stm32-and-arduino-boards-5-v.html?search_query=LCD&results=197) | +| [WCMCU-1334 DAC](https://cdn-learn.adafruit.com/downloads/pdf/adafruit-i2s-stereo-decoder-uda1334a.pdf) | Converting data to audio | [23 RON](https://www.aliexpress.com/i/1005001993192815.html) | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/theremin.svg b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/theremin.svg new file mode 100644 index 00000000000..c02f2c8c489 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alex.dogarescu/theremin.svg @@ -0,0 +1 @@ +SVG Image created as theremin.svg date 2026-05-10T22:28:30 Image generated by Eeschema-SVGButton+BATTCN5_D8_PA95_1CN5_D9_PC7_PWM5_2CN5_D10_PB6_CS_PWM5_3CN5_D11_MOSI_PWM5_4CN5_D12_MISO5_5CN5_D13_SCK5_6CN5_GND5_7CN5_AVDD5_8CN5_D14_PB9_SDA5_9CN5_D15_PB8_SCL5_10CN6_NC6_1CN6_3V36_2CN6_NRST6_3CN6_3V36_4CN6_5V6_5CN6_GND6_6CN6_GND6_7CN6_VIN6_8CN8_A0_PA08_1CN8_A1_PA18_2CN8_A2_PA48_3CN8_A3_PB08_4CN8_A4_PC1_PB88_5CN8_A5_PC0_PB98_6CN9_D0_PA3_RX9_1CN9_D1_PA2_TX9_2CN9_D2_PA109_3CN9_D3_PB3_PWM9_4CN9_D4_PB59_5CN9_D5_PB4_PWM9_6CN9_D6_PB10_PWM9_7CN9_D7_PA89_8U6STM32_Nucleo_64_arduinoHC-SR04Vcc1Trig2Echo3Gnd4HC-SR04Vcc1Trig2Echo3Gnd4GND+5VGND+3V31234567891011121314151617181920212223242526272829303132333435363738J1CN7VDDGNDGNDGNDA128*128 LCD SPILED1SCK2SDA3AO4RESET5CS6GND7VCC8GNDVDDA1234567891011121314151617181920212223242526272829303132333435363738J2CN10WCMCU-1334 DACVIN13VO2GND3WCEL4DIN5BCLK6LOUT7IOREF~{RST}E5VVIN5V_USB_CHGR \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/imghardware.webp b/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/imghardware.webp new file mode 100644 index 00000000000..6ef9b4f4d31 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/imghardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/index.md b/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/index.md index c989bd5b72c..daf20ae3c1a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexandra.petrescu/index.md @@ -30,6 +30,7 @@ with a Raspberry Pi Pico and see for myself the way it performs and can handle a ### Week 5 - 11 May +This week I was able to work on most of my hardware, successfully managing to test all of the components and visualize the final outline of the project. I also finally managed to connect the Pico 2W to my code, as I had struggled for a few days to get it to flash. Half of the software is done, and so far nothing has gone wrong, except for the fact that I am thinking about replacing some hardware components, such as my keypad and LED ring. ### Week 12 - 18 May @@ -37,6 +38,8 @@ with a Raspberry Pi Pico and see for myself the way it performs and can handle a ## Hardware +![Hardware Picture](./imghardware.webp) + 1. Raspberry Pi Pico 2W: The main microcontroller unit running the asynchronous rust firmware; 2. PIR Motion Sensor: Used to detect human movement in the monitored area; 3. IR Proximity Snesor: Acts as a secondary close-range trigger, detecting any objects passing directly in front of it; diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/index.md b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/index.md index 03bfee0be39..f2a6eb8a493 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/index.md @@ -11,21 +11,19 @@ An embedded project that simulates a real-life parking, using a barrier to allow ::: ## Description -This project is designed to be a model of a real-life parking; it uses two ultrasonic sensor to detect cars approaching a barrier (operated by a SG90 servomotor), both entering and exiting the parking, opening the barrier for exiting cars and opening the barrier for entering cars if they are authorized to enter, witch is ascertained by an ESP32-CAM. If the parking is full, the barrier will not open for any cars attempting to enter. The computations and processing are all done by the microcontroller (STM32-NUCLEO-U545RE-Q). +This project is designed to be a model of a real-life parking; it uses two ultrasonic sensor to detect cars approaching a barrier (operated by a SG90 servomotor), both entering and exiting the parking, opening the barrier for exiting cars and opening the barrier for entering cars. If the parking is full or blocked (entry can be temporarly blocked via a button), the barrier will not open for any cars attempting to enter. A buzzer will play a sound effect when a car tries to enter/exit. The number of available parking slots is shown by 4 LEDs that will be lit for free spaces and unlit for occupied spaces. The computations and processing are all done by the microcontroller (STM32-NUCLEO-U545RE-Q). ## Motivation I chose this project because it is a real-life application witch can help me learn rust better, as it help me understand subjects such as real-time sensor integration; it was also suggested to me by a coleague as beeing a reliable project idea. ## Architecture -![System Architecture](./maarchbun.svg) +![System Architecture](./maarchupdated.svg) Input: *HC-SRO4* ultrasonic sensor will receive signals to see the ditance of a car from the sensor and will send the signals through a GPIO pin -*ESP32-CAM* will detect authorized vehicles trying to enter and send a signal when one is seen - Processing: *STM32-NUCLEO-U545RE-Q* will do computations and signal processing and send data to the laptop via USB. @@ -34,7 +32,9 @@ Output: *SG90 servomotor* will receive signals to open/close a barrier when a car enters/exits -*LED* will be used to see that the system works properly +*status LEDs* a green and a red led will be set high/low depending on whether the barrier is open or closed + +*parking space LEDs* 4 yellow LEDs will be set high/low depending on the number of available parking spots. ## Log @@ -44,11 +44,29 @@ I got the components (except the ESP32-CAM) and set up the start of my project ( ### Week 20 April - 26 April -I got the rest of the components (the ESP32-CAM, some wires and a battery holder) and started assembling the project, starting with the servomotor; I wired the servomotor and wrote some code to test it, worked mostly fine, but each time would stop working after a while; suspected it was because of insuficient power so I decided to get some batteries for power. Afterwards wired the first sensor and started testing; had errors, as sensor would get stuck on high - did a lot of debugging to narrow down the problem (this log unfinished) +I got the rest of the components (the ESP32-CAM, some wires and a battery holder) and started assembling the project, starting with the servomotor; I wired the servomotor and wrote some code to test it, worked mostly fine, but each time would stop working after a while; suspected it was because of insuficient power so I decided to get some batteries for power. Afterwards wired the first sensor and started testing; had errors, as sensor would not correctly detect distance - did a lot of debugging to narrow down the problem. + +### Week 27 April - 3 May + +The problem with the servomotor got fixed after I got some batteries to power it with. I wasted a lot of time on the sensor problem and failed fixing it even after several attemps, because I had incorrectly identified the problem's source as beeing a faulty connection; in the meantime, I added a green and a red led, with the green led lighting up when the barrier was supposed to open and the red led beeing lit for the rest of the time (will probably change in future); also worked on writing code for more tests with the sensor and did more research on how it worked; work stalled for a few days as I was trying to figure out the actual problem with the sensor; + +### Week 4 May - 10 May + +After more debugging I finally found the problem with the sensor and fixed it; I added the second sensor and transitioned from the testing code to the code for the final parking system - spent some time doing research on how to write the code, and more time debugging/fixing errors and unexpected problems + +### Week 11 May - 17 May +More software - base form of the project was completed; also rearanged things on the breadboard, as it was a bit messy. Towards the week's end, I started looking into implementing authorization via an ESP-CAM. After some hours, it became clear that I would not be able to finish such a feature in time, due to forgetting an important hardware component neccesary for the implementation, but mostly due to a lack of time as next week I had to focus on other projects/examinations. + +### Week 18 May - 24 May +Not much done during the week due to a lack of time because of other projects/examinations; I got some cardboard for the actual parking lot and started adding some extra things - a buzzer that would play tunes for succesful entry/exit, 4 LED's to show parking availability and a button to block the barrier from opening. Rearranged stuff again due to lack of space on the breadboard, also attached servo to make the barrier stationary. + +### Week 25 May - Pm fair +Started week by revising code - to be continued ## Hardware -picture coming soon +picture will be updated soonly +![Hardware picture](./mahardware.webp) *STM32-NUCLEO-U545RE-Q* will do computatiosn, signals processing and transmit data to the laptop @@ -56,22 +74,24 @@ picture coming soon *SG90 servo motor* will open/close the barrier -*ESP32-CAM* will scan incoming vehicles and check for authorization - *LED* will provide visual feedback during testing +*Buzzer* will play different chimes for succesful entry/exit and for failed entry + +*Button* will temporarly block the barrier from beeing opened + ## Schematics -coming soon +to be updated +![KiCAD Schematics](./kicadmabun2.svg) ## Bill of Materials | Device | Usage | Price | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------ -| [STM32-NUCLEO-U545RE-Q] | microcontroller | borrowed from politehnica +| STM32-NUCLEO-U545RE-Q | microcontroller | borrowed from politehnica | [HC-SRO4 ultrasonic sensor x 2](https://www.emag.ro/set-2-senzori-distanta-ultrasonic-digital-3-3-5v-45x20x15mm-multicolor-9344435370736/pd/DCPK2H3BM/?ref=history-shopping_484549223_232871_1) | measuring distance from barrier | 36 Lei | [SG90 servo motor x 4](https://www.emag.ro/set-servomotor-sg90-unghi-de-lucru-180-grade-4-bucati-3874783591898/pd/DLHDYTYBM/?ref=history-shopping_484549223_157633_1) | moving the barrier | 48 Lei -| [ESP32-CAM](https://www.emag.ro/microcontroler-esp32-cam-cu-ov2640-wi-fi-si-camera-bluetooth-5v-5904162804207/pd/DSTDNLMBM/?ref=history-shopping_485848746_38837_1) | checks vehicles for authorization | 67 Lei | [Breadboard kit](https://www.emag.ro/kit-electronica-pentru-incepatori-cu-modul-esp8266-si-placa-d1-compatibil-cu-arduino-ideal-pentru-proiecte-diy-be000116/pd/D15YQF3BM/?ref=history-shopping_484549223_206277_1) | Connecting components | 124 Lei | [female-male wires](https://www.emag.ro/10-x-fire-dupont-mama-tata-20cm-ai306-s459/pd/DZJ66JBBM/?ref=history-shopping_485848746_38837_2) | connecting components | 1 Leu | [female-female wires](https://www.emag.ro/10-x-fire-dupont-mama-mama-10cm-ai310-s450/pd/DWF66JBBM/?ref=history-shopping_485848746_38837_3) | connectign components | 2 Lei @@ -96,4 +116,17 @@ coming soon ## Links -coming soon +[Sensor documentation](https://web.eece.maine.edu/~zhu/book/lab/HC-SR04%20User%20Manual.pdf) +[Sensor tutorial](https://projecthub.arduino.cc/Isaac100/getting-started-with-the-hc-sr04-ultrasonic-sensor-7cabe1) +[Sensor tutorial](https://controllerstech.com/hcsr04-ultrasonic-sensor-and-stm32/) +[Servomotor documentation](http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf) +[STM documentation](https://www.st.com/en/evaluation-tools/stm32-nucleo-boards/documentation.html) +[Servomotor tutorial](https://www.electronics-lab.com/project/using-sg90-servo-motor-arduino/) +[Buzzer tutorial](https://controllerstech.com/interface-passive-buzzer-with-stm32/) +[Buzzer help](https://www.omnicalculator.com/other/note-frequency) +[Rust Book](https://docs.rust-embedded.org/book/) +[Embassy Intro](https://embassy.dev/) +[PullUp resistors](https://learn.sparkfun.com/tutorials/pull-up-resistors) +[Pin Map](https://embedded-rust-101.wyliodrin.com/docs/fils_en/lab/02) +[Other](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lab) + diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/kicadmabun2.svg b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/kicadmabun2.svg new file mode 100644 index 00000000000..40da2160ab7 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/kicadmabun2.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: kicad ma bun.kicad_schSheet: /STM VCC (+5V)BT14xAA Battery (6V)Battery VCC(+6V)H3MountingHoleH2MountingHoleH1MountingHoleR2220ΩVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQGNDGNDGNDGNDR1220Ω1234J5HC-SR04 ExitGND1234J3HC-SR04 EntryD1Green LedDeRed LEDGNDSTM VCC (+5V)GNDBattery VCC(+6V)123J4SG90 servoTRIGECHOGNDPWMVCCTRIGGNDGNDECHOVCCVCCMechanical \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchbun.svg b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchbun.svg deleted file mode 100644 index d227cdd5359..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchbun.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
SG90 micro servomotor
SG90 micro servomotor
LED(status)
LED(status)
ESP32-CAM (authorization)
ESP32-CAM (authorizat...
NUCLEO-STM-U545RE-Q
NUCLEO-STM-U545RE-Q
Laptop
Laptop
ultrasonic sensor HC-SRO4
ultrasonic sensor HC-...
USB
USB
UART 
UART 
GPIO
GPIO
GPIO Trigger/Echo
GPIO Trigger/Echo
PWM
PWM
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchupdated.svg b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchupdated.svg new file mode 100644 index 00000000000..aa24ca76e36 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/maarchupdated.svg @@ -0,0 +1,4 @@ + + + +
SG90 micro servomotor
SG90 micro servomotor
LED(status)
LED(status)
Buzzer
Buzzer
NUCLEO-STM-U545RE-Q
NUCLEO-STM-U545RE-Q
Laptop
Laptop
ultrasonic sensors HC-SRO4
ultrasonic sensors HC-S...
USB
USB
GPIO/PWM
GPIO/PWM
GPIO
GPIO
GPIO Trigger/Echo
GPIO Trigger/Echo
PWM
PWM
LED(parking availability)
LED(parking availabil...
Block button
Block button
GPIO
GPIO
GPIO
GPIO
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/mahardware.webp b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/mahardware.webp new file mode 100644 index 00000000000..1c1ad7ea9a0 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandros.tzikas/mahardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/hard.webp b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/hard.webp new file mode 100644 index 00000000000..250dd0e7451 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/hard.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/index.md b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/index.md index f72a440057e..4dacb44be26 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/index.md @@ -56,7 +56,13 @@ The project is based on the STM32U575RE-Q (Nucleo-64), an ultra-low-power ARM Co ### Schematics -TODO +### Electrical Schematic(KiCad) +Detailed electrical schematic designed in KiCad, showing pin-to-pin connections between the STM32 MCU and peripheral modules (I2C, UART, and Digital interfaces): +![Electrical Schematic](./schema.webp) + +### Physical Implementation +The final hardware prototype, fully assembled with all sensors and modules integrated onto the frame: +![Physical Prototype](./hard.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/schema.webp b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/schema.webp new file mode 100644 index 00000000000..a1b6b6b5c39 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandru.banu2709/schema.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/index.md b/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/index.md index edafaa26b0e..a2f29960d82 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/index.md @@ -61,21 +61,21 @@ The system architecture revolves around the STM32U545RE microcontroller: ## Log * **Week 1 - 9:** Finalized component list, established architecture using the internal DAC to avoid I2S complexity, and set up the documentation website. -* **Week 9 - ...:** (soon...) -* **Week ... - ...:** (...) +* **Week 9 - 11:** Assembling the hardware circuit. Initializing the code on the board and verifying the components. Making the KiCad schematics. +* **Week 11 - ...:** (...) ## Hardware The project uses a mix of digital sensors and analog amplification to achieve audio playback. ### Schematics -*(KiCAD schematic here later)* +![Schematics](./kicad.svg) ### Bill of Materials | Device | Usage | Price | | ----------- | ----------- | ----------- | | STM32 Nucleo-U545RE | Main microcontroller (Brain) | 126 RON | | PAM8403 Amplifier | Amplifies the analog signal from the STM32 DAC | ~6 RON | -| 52mm 4 Ohm Speaker | Audio output | ~20 RON | +| 4 Ohm Speaker | Audio output | ~8 RON | | MicroSD Card Module | SPI storage for music files | ~5 RON | | 0.96" OLED Display | I2C UI Display | ~17 RON | | IR Receiver & Remote | Wireless user interface control | ~7 RON | @@ -86,10 +86,16 @@ The project is built entirely in Rust (no_std) utilizing the asynchronous Embass | Library | Description | Usage | | ----------- | ----------- | ----------- | -| `embassy-stm32` | Hardware Abstraction Layer | Controls peripherals (SPI, I2C, DAC, DMA, Timers, GPIO) | -| `embedded-sdmmc` | FAT32 File System | Reading WAV files from the SD Card | -| `ssd1306` | Display Driver | Controlling the OLED screen | -| `embedded-graphics` | 2D Graphics | Rendering text and the audio visualizer UI | +| [`embassy-stm32`](https://docs.embassy.dev/embassy-stm32/0.6.0/stm32c011d6/index.html) | Hardware Abstraction Layer | Controls peripherals (SPI, I2C, DAC, DMA, Timers, GPIO) | +| [`embassy-executor`](https://crates.io/crates/embassy-executor) | Async Execution Environment | Manages asynchronous tasks and threads | +| [`embassy-time`](https://crates.io/crates/embassy-time) | Time Management | Handles delays and timing (e.g., `Timer::after_millis`) | +| [`embedded-sdmmc`](https://docs.rs/embedded-sdmmc/latest/embedded_sdmmc/) | FAT32 File System | Reading WAV files from the SD Card | +| [`ssd1306`](https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf) | Display Driver | Controlling the OLED screen | +| [`embedded-graphics`](https://crates.io/crates/embedded-graphics) | Graphics Library | Renders text and UI elements on the display | +| [`defmt`](https://crates.io/crates/defmt) | Logging Framework | Sends fast, low-overhead debug messages via USB | +| [`panic-probe`](https://crates.io/crates/panic-probe) | Debugging Utility | Captures and reports critical errors (panics) | +| [`infrared`](https://crates.io/crates/infrared) | IR Decoding | Decodes NEC protocol pulses from the remote control | + ## Links 1. [Rust Embassy Documentation](https://embassy.dev/) diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/kicad.svg new file mode 100644 index 00000000000..b7590a7f5d2 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru.marioara/kicad.svg @@ -0,0 +1 @@ +SVG Image created as player_muzica.svg date 2026-05-07T23:27:08 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Music PlayerFile: player_muzica.kicad_schSheet: /GND1-1+SpeakerSpeakON_NL2GNDAH3MountingHoleH2MountingHoleH1MountingHole1234567891011121314151617181920212223242526272829303132333435363738J1CN7VDD+5V+3V3GND123Remote_ControlConn_01x03GND12345Encoder_ModuleConn_01x05+5V+3V31234567891011121314151617181920212223242526272829303132333435363738J2CN10GNDGND1234OLED-DisplayConn_01x04GND+3V3GNDVDDAGND123456MicroSDConn_01x06123456789Audio_AmplifierConn_01x09GND+3V3+5VGND+BATTPB4_CLKRout-PB6_SCLPA11_CSPA6_MISOPA5_SCKPB7_SDAPB5_DTLout+Lout-PA4_DACPA7_MOSIPB10_BTNPB6_SCLPB7_SDAIOREFPA11_CSPB5_DTVINPA4_DAC5V_USB_CHGR~{RST}E5VPA10PA8_IRPA8_IRPB4_CLKPB10_BTNRout+PA5_SCKPA7_MOSIPA6_MISOMechanical+3V3Remote_ControlConn_01x03123 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md index bf98a337975..98d3df887d2 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/index.md @@ -27,6 +27,12 @@ This is the initial diagram, subject to change as I develop the project, regardi ![Architecture diagram](./steadyframe.svg) +These are the current KiCAD diagrams for the project depicting the power distribution and the different protocols used for communication inbetween the STM32 board and the separate peripherals (The motor driver & encoder combos, the IMU, the joystick control, the screen and an additional vibration motor) + +![KiCAD diagram first](./kicad_first.svg) + +![KiCAD diagram second](./kicad_second.svg) + ## Main components: ## Log @@ -44,10 +50,29 @@ Conceptual stage, thinking how I would want my gimbal project to work, coming up Ordering a big part of components (motors, drivers+encoders, STM32 board). More research. -### Week 9: 19 - 25 May +### Week 9: 19 - 25 April Ordering next batch of components (IMU, battery and charger). More research x2. Changed to attempting CAN connection (lord have mercy). +### Week 10: 26 April - 2 May + +Arrival of most components. Realised I need for the CAN bus a twisted pair insulated wire, had lots of trouble finding some available in Romania till I found some and ordered. Started working on the 3D printed components, the motor magnet couplings, the driver cages and the arms, alongside prototyping ways for cable management in Fusion 360. + +### Week 11: 3 - 9 May + +Finished designing the driver cages, still working on the rest of the components. Cable arrived. Realised my drivers have small can cables which I need to further connect to perfboards to fulfill CAN Bus conditions. Starting thinking about the KiCAD schematic and the different communication protocols required for pin connections between the board and the peripherals. + +![photo_first](./motors.webp) + +![photo_second](./some_wires.webp) + +![photo_third](./peripherals.webp) + + +### Week 12: 10 - 16 May + +Finished the KiCAD schematic and submitted to Git branch for review by lab assistants. Worked on setting up motor drivers and motors with USB-C connection and integrated ODrive Python programs developed for MKS XDRive Mini. Still working on 3D design for arms and rails for coupling the 3 axis components. + ## Hardware Hardware used for creating this project (list currently WIP): STM32 NUCLEO-U545RE-Q, GM5208-24 motors, MKS XDRIVE MINI drivers with AS5047P on board, ICM-20948 IMU, LiPo GENS ACE G-Tech Soaring 4S 14.8 V 2200mA battery with appropriate charger and 2 Axis Joystick. Photos of components will be added after they arrive (currently still being delivered). @@ -79,10 +104,9 @@ The format is | [LM2596S](https://www.ti.com/lit/ds/symlink/lm2596.pdf) | DC-DC Buck Step Down Convertor LM2596S 4.0~40V to 1.25-37V - for supplying correct voltage to STM32 board| [48 RON](https://www.emag.ro/modul-dc-dc-buck-step-down-lm2596s-dc-dc-4-0-40v-la-1-25-37v-regulator-de-tensiune-reglabil-cu-voltmetru-led-stlxy-741050522578/pd/DKNQT83BM/?ref=sponsored_products_search_f_b_1_5&recid=recads_1_b90d01a332c40f582acfccf6bf3bca72edcfc042cd11701d2d49ef94121cef69_1777211422&aid=549a3d7e-f438-11f0-801c-06eaf0d4245d&oid=302862900&scenario_ID=1) | | [Gens Ace iMars mini G-Tech](https://gensace.de/products/gens-ace-imars-mini-g-tech-usb-c-2-4s-60w-rc-battery-charger-with-power-supply-adapter-and-adpter-cable-eu) | The battery charger - charges the battery when needed | [245 RON](https://www.autorc.ro/incarcatoare-acumulatori/10560-incarcator-acumulatori-gens-ace-imars-mini-g-tech-usb-c-2-4s-60w.html) | | [2 Axis Joystick](https://www.laskakit.cz/user/related_files/joystick_module.pdf) | The joystick - human input to "move" (point) the camera in a specified direction | [6 RON](https://sigmanortec.ro/Modul-joystick-doua-axe-XY-p126458908#) | -| []() | Total: | [~1850 RON]() | -NOT CONFIRMED YET: -| [ILI9341](https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf) | The LCD 3.2 inch touch display - would be used for observing information displayed by the microcontroller regarding position and rotation, plus would help navigate a menu for parameters - lots of stuff to do here, not all figured out *yet* | [117 RON](https://sigmanortec.ro/display-lcd-32-inch-240x320-touch-ili9341-sd-mega) | +| [ST7789V](https://newhavendisplay.com/content/datasheets/ST7789V.pdf) | The LCD display - used for observing information displayed by the microcontroller regarding position and rotation, plus would help navigate a menu for parameters - lots of stuff to do here, not all figured out *yet* | [31 RON](https://sigmanortec.ro/display-tft-13-ips-spi-65k-culori-lcd-st7789v-240x240-7p) | | [Wires]() | No exact count, still figuring out | []() | +| []() | Total: | [~1850 RON]() | diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_first.svg b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_first.svg new file mode 100644 index 00000000000..866d8b97d6a --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_first.svg @@ -0,0 +1 @@ +SVG Image created as SteadyFrame1.svg date 2026-05-14T02:54:08 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/2Title:File: SteadyFrame1.kicad_schSheet: /GNDGNDGNDGNDGNDPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U1ANUCLEO-G0B1REIN+IN-OUT+OUT-Buck_Converter1GNDIN+IN-OUT1+OUT1-OUT2+OUT2-OUT3+OUT3-OUT4+OUT4-OUT5+OUT5-OUT6+OUT6-Power_Distribution_Plate1CN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U1BNUCLEO-G0B1REJOY_YLCD_CSJOY_X5VVBAT_14V8FDCAN_RXVBAT_14V8SPI_MOSILCD_DCLCD_RSTLCD_BLVIB_PWMIMU_INT3V3 RAILFDCAN_TXI2C_SDAI2C_SCLJOY_SW5VSPI_SCKVBAT_14V8VBAT_14V8STM CONNECTIONSPOWER DISTRIBUTIONGNDBuck_Converter1IN+IN-OUT+OUT-GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_second.svg b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_second.svg new file mode 100644 index 00000000000..038be71f772 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/kicad_second.svg @@ -0,0 +1 @@ +SVG Image created as Schematic.svg date 2026-05-14T02:54:08 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 2/2Title:File: untitled.kicad_schSheet: /GNDGND+3V3GNDGND+3V3GNDVRxVRySWJoystick1CANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CRoll_Driver_EncoderGNDGND+3V3VIB_PWM3V3GNDU3GNDGNDSPI_SCKSPI_MOSILCD_CSLCD_DCLCD_RSTLCD_BL+3V3GNDST7789V2GNDAUX_CL7VDDIO8SDO/AD09REGOUT10FSYNC11INT112VDD13GND18AUX_DA21~{CS}22SCL/SCLK23SDA/SDI24U4ICM-20948+3V3R1120R+3V3D1GND2VCC3R4Vref5CANL6CANH7Rs8U2SN65HVD230MOTOR_AMOTOR_BMOTOR_CRoll_Motor+3V3CANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CYaw_Driver_EncoderMOTOR_AMOTOR_BMOTOR_CYaw_MotorCANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CPitch_Driver_EncoderMOTOR_AMOTOR_BMOTOR_CPitch_MotorR2120RPB8PB9PA10PA1PCBPA9FDCAN_TXFDCAN_RXVBAT_14V8VBAT_14V8VBAT_14V8PB4PB10PC7PA0PB6PA5PA7CAN TRANSCEIVER, DRIVER & ENCODER AND MOTOR CONNECTIONSDISPLAYIMUJOYSTICKVIBRATION MOTORJoystick1+3V3GNDVRxVRySW+3V3Roll_Driver_EncoderCANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CRoll_MotorMOTOR_AMOTOR_BMOTOR_CGNDGNDYaw_Driver_EncoderCANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CYaw_MotorMOTOR_AMOTOR_BMOTOR_CPitch_Driver_EncoderCANHCANLVBAT_14V8GNDMOTOR_AMOTOR_BMOTOR_CPitch_MotorMOTOR_AMOTOR_BMOTOR_CR2120RGND+3V3U3VIB_PWM3V3GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/motors.webp b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/motors.webp new file mode 100644 index 00000000000..66728dba446 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/motors.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/peripherals.webp b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/peripherals.webp new file mode 100644 index 00000000000..fd72a935084 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/peripherals.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/some_wires.webp b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/some_wires.webp new file mode 100644 index 00000000000..66aebfac8e7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexandru_florin.neagu/some_wires.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/index.md b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/index.md index bde5a3a9ae9..a30de64612c 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/index.md @@ -50,7 +50,12 @@ LEDs will also be connected to GPIO pins through resistors and be used for debug ## Schematics -Place your KiCAD schematics here. +![Hardware Schematic](schematic.svg) + +![Image 1](webp1.webp) + +![Image 2](webp2.webp) + ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/schematic.svg new file mode 100644 index 00000000000..6ece6918011 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/schematic.svg @@ -0,0 +1 @@ +SVG Image created as project schematic.svg date 2026-05-09T23:36:25 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: project schematic.kicad_schSheet: /GNDGND+3.3VGND+3.3V+3.3V123J2BUZZER+3.3V+3.3V+3.3V+3.3VGNDGND1VCC2SCL3SDA4U1OLED SSD1306GNDRESV_VDDIO1AUX_CL7VDDIO8AD0/MISO9REGOUT10FSYNC11INT12VDD13GND18RESV_GND20AUX_DA21~{CS}22SCL/SCLK23SDA/MOSI24U3MPU-9250GNDBTN_NAVIGATE1DOWNSW_PushGNDGNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U2STM32U545RETxQBTN_NAVIGATE2UPSW_PushBTN_BACK1SW_Push+3.3VBTN_SELECT1SW_Push+3.3VGND+3.3V1234567J1TFT DISPLAYGNDSCLSDAGNDRESVCCSDC-BLKPROJECT SCHEMATICCOJAN ALEXIA-RAMONA 1222EEAGND+3.3VGNDGNDBTN_NAVIGATE1DOWNSW_PushGNDU3MPU-9250RESV_VDDIO1AUX_CL7VDDIO8AD0/MISO9REGOUT10FSYNC11INT12VDD13GND18RESV_GND20AUX_DA21~{CS}22SCL/SCLK23SDA/MOSI24J2BUZZER123+3.3V+3.3V+3.3V+3.3V+3.3VGNDJ1TFT DISPLAY1234567+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp1.webp b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp1.webp new file mode 100644 index 00000000000..60d838a0d4e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp2.webp b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp2.webp new file mode 100644 index 00000000000..e907b4c032c Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alexia_ramona.cojan/webp2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.svg b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.svg deleted file mode 100755 index 3fc7aa56585..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
Push Buttons
(Sound Effect control panel)
Push Buttons...
4x
4x
INMP441 Module
(digital microphone)
INMP441 Modul...
STM32
(DSP and UI core)

STM32...
I2S
I2S
UDA1334A DAC
UDA1334A DAC
Headphones/Speakers
Headphones/Sp...
SPI TFT LCD Display
(Audio Wave visualiser)
SPI TFT LCD Display...
SPI

SPI
I2S

I2S
3.5mm jack

3.5mm jack
GPIO
GPIO
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.webp new file mode 100644 index 00000000000..6b23bae9302 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/architecture.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_failed.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_failed.webp new file mode 100644 index 00000000000..13c042a52d5 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_failed.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_one.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_one.webp new file mode 100644 index 00000000000..04e621d623b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_one.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_three.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_three.webp new file mode 100644 index 00000000000..91800f6a161 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_three.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_two.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_two.webp new file mode 100644 index 00000000000..6f490229bef Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_final_two.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_one.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_one.webp new file mode 100644 index 00000000000..5753593e172 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/hardware_one.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/index.md b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/index.md index 54c3dfe6378..28e64f51027 100644 --- a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/index.md @@ -1,5 +1,5 @@ # OxiNMP -Digital Signal Processing on a INMP microphone, having multiple voice effects chosen by the user. +A visualiser of your voice and a game where you can also use your voice as a controller :::info @@ -12,90 +12,108 @@ Digital Signal Processing on a INMP microphone, having multiple voice effects ch ## Description -My project's purpose is to have multiple integrated DSP algorithms (aiming to implement 4) that transform the captured audio into audio with multiple effects, kind of like a Voice Changer. I aim to have an 8-bit Retro audio effect, a high pitch effect, a low pitch effect and a sci-fi sounding effect (kind of like Dalke). +My project's purpose is to use my voice to control different stuff. My first Idea was a waveform analyzer, but then as I procrastinated (like everyone, on short-form content) I came across another one of those type of filter-game videos( the one with flappy birds controlled by your voice), so.... another state to my loop was added: FlappyApp! ## Motivation -Choosing this project was a mix of my interest in mathematics and wanting to learn DMA more in-depth. +Choosing this project was because of a mix of my interest in mathematics, signals and wanting to learn DMA (used for audio input/output and SPI, leaving the processor more power to render the states of the display) more in-depth. ## Architecture -- **4x Buttons:** This acts as a control panel for all the audio effects. They are connected to the GPIO pins on the STM32 configured as hardware interrupts. - **INMP441 Module:** It sends clean digital audio arryas straight to the STM32 via I2S -- **STM32:** Calculates FFT to draw on the screen and the algorithms for the audio effects. -- **UDA1334A:** Takes the I2S output from the STM32 and outputs it into a 3.5mm Jack where you connect speakers or headphones. +- **STM32U545REQ:** Provides the User Button, computing power, and a (quite helpful for my waveform analyzer) FPU for my project. - **SPI TFT LCD Display:** Chose an SPI screen over a I2C screen because it handles video better than I2C. I2C is too slow for smooth video. -![Architecture Diagram](./architecture.svg) +![Architecture Diagram](./architecture.webp) ## Log -### Week 5 - 11 May +### The 3 Week Sprint (*week 12,13,14*) -### Week 12 - 18 May +**Disclaimer: This project was partailly changed as you probably saw (previously, a DSP and sound visualiser) because of my AMAZING soldering skills and AMAZING electronics knowledge (I burnt my first DAC and couldn't get the 2nd one to work properly...) I suspected many things, including low impedance headphones, but none of my fixes quite worked and reached a good conclusion. So I did what an engineer would and found another way to use the components I already had in Week 2** +#### Week I +This week was a week of just learning stuff, understanding and, well headaches with the clock tree diagram from the official stm datasheet... I needed to understand the MSIS and Master Clock and PLL math so I can run my board at 160Mhz for the purpose of running the Screen at a smoother 20Mhz. +I configured the PLL by the end of the week, set up the Mic and read a lot about buffers (ring buffers, DMA) +#### Week II +Week 2 I thought about my project (this was the week where I realised I couldn't possibly get my DAC work and I tried a lot of DMA fixes and everything I could find online...) +After pivoting to this Visualiser and Game Idea I mapped out a state machine and how the display would work and the game logic for optimizing SPI so It doesn't run at 2 frames per second. I thought about how the pipes of the game would appear/dissapear so I don't update the display at every game event(moving forward, pipes appearing on-screen, dying, etc) +#### Week III +Final week(this was a packed week): +Added DC Cut Off filter. Layered out my files and directories to be easy to access and read. Soldered everything together on a perfboard again and actually got better audio. Added game logic and Visualiser logic (optimized for the SPI display). Final polishes and good luck to me! -### Week 19 - 25 May ## Hardware -Microcontroller: STM32U545RE Nucleo (Core logic) +Microcontroller: STM32U545RE Nucleo (Core logic + User Button) Input: INMP441 I2S Microphone (Captures audio) -Output: UDA1334A I2S DAC (Plays audio) +Display: SPI TFT LCD (Shows States: Menu -> Flappy -> Visualiser) -Display: SPI TFT LCD (Shows visualizer) +**First Iteration (MVP):** -Interface: 4x Tactile Buttons (Changes effects) +![hardware_phase_one](./hardware_one.webp) -### Schematics +*My amazing Soldering Skills(failed attempt):* -Not available right now. +![hardware_phase_two](./hardware_failed.webp) -### Bill of Materials +**My final iteration of this project's hardware** + +I used a star point for 3V3 and GND. I tried keeping wires as short as possible (4-10cm) because of the SPI and I2S connection as these can be really skewed from the electromagnetic fields generated by the current (wires act as antennas). +I could have also soldered a capacitor between 3V3 and GND but didn't have any at my disposal and the electrical noise was quite manageable, so I was satisfied. + +![hardware_phase_three](./hardware_final_one.webp) + +![hardware_phase_three](./hardware_final_two.webp) - +### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -|[STM32 Nucleo-U545RE](https://www.st.com/en/evaluation-tools/nucleo-u545re.html) | The microcontroller | [Borrowed]() | -| [INMP441 I2S Microphone](https://invensense.tdk.com/products/inmp441/) | Captures ambient audio digitally via I2S, bypassing analog ADC noise. | [21 RON](https://www.bitmi.ro/module-electronice/modul-microfon-omnidirectional-interfata-i2s-mems-inmp441-11003.html) | -| [UDA1334A I2S DAC Module](https://learn.adafruit.com/adafruit-i2s-stereo-decoder-uda1334a) | Decodes processed digital audio to an analog signal via a 3.5mm jack. | [37 RON](https://www.emag.ro/decodor-dac-stereo-uda1334a-convertor-digital-analogic-i2s-3-3-v-5-v-s-038/pd/D9WPHR3BM) | -| [Starting Electronics Kit](https://www.emag.ro/kit-start-componente-electronice-ai777/pd/DXRJ4TMBM/) | Contains Miscellaneous components like resistors,breadboard,etc | [51 RON](https://www.emag.ro/kit-start-componente-electronice-ai777/pd/DXRJ4TMBM/) | +|[STM32 Nucleo-U545RE](__https://www.st.com/en/evaluation-tools/nucleo-u545re.html__) | The microcontroller | [Borrowed]() | +| [INMP441 I2S Microphone](__https://invensense.tdk.com/products/inmp441/__) | Captures ambient audio digitally via I2S, bypassing analog ADC noise. | [21 RON](__https://www.bitmi.ro/module-electronice/modul-microfon-omnidirectional-interfata-i2s-mems-inmp441-11003.html__) | +| [ILI9341 3.2" TFT LCD Touchscreen](__https://www.adafruit.com/product/1743__) | Displays UI, audio visualizations, and status information; touch input via SPI. | [84 RON](__https://www.emag.ro/display-tft-lcd-3-2-inch-320x240-touchscreen-14pini-spi-ili9341-arduino-rx407/pd/D7Q411YBM/__) | +| [Starting Electronics Kit](__https://www.emag.ro/kit-start-componente-electronice-ai777/pd/DXRJ4TMBM/__) | Contains Miscellaneous components like resistors,breadboard,etc | [51 RON](__https://www.emag.ro/kit-start-componente-electronice-ai777/pd/DXRJ4TMBM/__) | ## Software | Library | Description | Usage | |---------|-------------|-------| -| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Abstraction Layer for STM32 | Used for accessing I2S, SPI, DMA, and GPIO peripherals asynchronously. | -| [embassy-executor](https://crates.io/crates/embassy-executor) | Async runtime for embedded systems | Used for managing and scheduling concurrent tasks (audio pipeline, UI, buttons). | -| [embassy-sync](https://crates.io/crates/embassy-sync) | Synchronization primitives for async | Used for safely passing audio data buffers between async tasks via channels. | -| [embedded-graphics](https://crates.io/crates/embedded-graphics) | `no_std` 2D graphics library | Used for drawing the real-time audio waveforms and frequency bars on the display. | -| [mipidsi](https://crates.io/crates/mipidsi) | Display driver for MIPI DSI displays | Used as the hardware driver for the ILI9341 or ST7789 SPI TFT LCD. | -| [microfft](https://crates.io/crates/microfft) | Fast Fourier Transform library for `no_std` | Used for calculating the frequency spectrum for the audio visualizer. | - - +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware Abstraction Layer (HAL) for STM32 microcontrollers | Async Embassy framework for STM32 peripherals | +| [embassy-executor](https://crates.io/crates/embassy-executor) | Lightweight `no_std` async executor | Task scheduling and execution on embedded systems | +| [embassy-sync](https://crates.io/crates/embassy-sync) | Synchronization primitives for Embassy | Signals, channels, and mutexes between async tasks | +| [embassy-time](https://crates.io/crates/embassy-time) | Timekeeping and timer utilities | Delays, timeouts, and periodic timers | +| [embassy-futures](https://crates.io/crates/embassy-futures) | Future extensions and utilities | Combining and managing async futures | +| [embassy-embedded-hal](https://crates.io/crates/embassy-embedded-hal) | Bridge between Embassy and `embedded-hal` traits | Compatibility with standard embedded-hal drivers | +| [embedded-graphics](https://crates.io/crates/embedded-graphics) | 2D graphics library for embedded systems | Drawing primitives, text, and shapes on displays | +| [mipidsi](https://crates.io/crates/mipidsi) | Display driver framework for MIPI DSI/SPI displays | Driving the ILI9341 screen | +| [heapless](https://crates.io/crates/heapless) | Stack-allocated data structures | Strings and Vecs without dynamic memory allocation | +| [defmt](https://crates.io/crates/defmt) & [defmt-rtt](https://crates.io/crates/defmt-rtt) | Efficient deferred formatting framework | Logging over RTT during development | +| [cortex-m](https://crates.io/crates/cortex-m) & [cortex-m-rt](https://crates.io/crates/cortex-m-rt) | Low-level Cortex-M hardware access and startup runtime | Core ARM peripheral access and boot initialization | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler for `defmt` and `probe-run` | Printing panic messages and exiting cleanly | +| [static_cell](https://crates.io/crates/static_cell) | Safe lock-free static variable initialization | Initializing DMA buffers and drivers as statics | +| [embedded-hal-bus](https://crates.io/crates/embedded-hal-bus) | Utilities for sharing SPI/I2C buses | Safely sharing buses among multiple devices | +| [cortex-m-semihosting](https://crates.io/crates/cortex-m-semihosting) | Semihosting support for Cortex-M | Debug I/O via the debug probe connection | ## Links - -1. [Embassy-rs Official Book](https://embassy.dev/book/) -2. [STM32 NUCLEO-U545RE Board Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re.html#documentation) -3. [INMP441 I2S Digital Microphone Official Datasheet](https://invensense.tdk.com/wp-content/uploads/2015/02/INMP441.pdf) -4. [Adafruit UDA1334A I2S DAC Guide](https://learn.adafruit.com/adafruit-i2s-stereo-decoder-uda1334a/overview) -5. [embedded-graphics Rust Crate Documentation](https://docs.rs/embedded-graphics/latest/embedded_graphics/) -6. [mipidsi Rust Crate Documentation](https://docs.rs/mipidsi/latest/mipidsi/) -7. [microfft Rust Crate Documentation](https://docs.rs/microfft/latest/microfft/) -8. [STM32U5 Series Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u575585-armbased-32bit-mcus-stmicroelectronics.pdf) \ No newline at end of file +1. [The best channel ever](https://www.youtube.com/@Rohde-Schwarz) +2. [The I2S implementation that made me understand](https://www.youtube.com/watch?v=qNLvoSQCx60) +3. [Embassy-rs Official Book](https://embassy.dev/book/) +4. [STM32 NUCLEO-U545RE Board Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re.html#documentation) +5. [INMP441 I2S Digital Microphone Official Datasheet](https://invensense.tdk.com/wp-content/uploads/2015/02/INMP441.pdf) +6. [Adafruit UDA1334A I2S DAC Guide](https://learn.adafruit.com/adafruit-i2s-stereo-decoder-uda1334a/overview) +7. [embedded-graphics Rust Crate Documentation](https://docs.rs/embedded-graphics/latest/embedded_graphics/) +8. [mipidsi Rust Crate Documentation](https://docs.rs/mipidsi/latest/mipidsi/) +9. [STM32U5 Series Reference Manual](https://www.st.com/resource/en/reference_manual/rm0456-stm32u575585-armbased-32bit-mcus-stmicroelectronics.pdf) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.svg b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.svg new file mode 100644 index 00000000000..0c19543e10f --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: aaa.kicad_schSheet: /+3V3+BATTVDDGND+5VGNDAGNDGND12345678J9CN6123456J8CN81234567891011121314151617181920212223242526272829303132333435363738J1CN7GNDILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U1CR2013-MI21201234567891011121314151617181920212223242526272829303132333435363738J2CN1012345678910J11CN512345678J10CN9Vin1GND2BCLK3WSEL4DIn5L/R1WS2SCK3GND4VCC5SD6INMP441PA_10PB_3E5VPA_85V_USB_CHGRUDA1334A~{RST}IOREFVINPB_6OxiNMPGND3.3VPC_9PA_7PC_7PA_5PB_10PA_9PB_5 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.webp b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.webp new file mode 100644 index 00000000000..6d18f9e301d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ali.khalghamouz/kicadscheme.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/hardw.webp b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/hardw.webp new file mode 100644 index 00000000000..210f2af8d8b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/hardw.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/index.md b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/index.md index 32e45de3acc..f66887a096e 100644 --- a/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/index.md @@ -61,12 +61,20 @@ Rendering Engine -> 1.3" OLED Screen * Researched about the MQ-3 sensor * Started learning how to 3D model for the casing of the device +### Week 10 +* 3D printed a box to build the project in +* Tested the display for the first time + ## Hardware The system is centered around the **STM32 NUCLEO-U545RE-Q** MCU. For output I am using an 1.3" OLED Display (SSD 1306 controller) using **I2C** for data transmission, a **passive buzzer** that gets a **PWM** signal, and an RGB LED that gets an oscilating **PWM** signal in the form of a 2D vector(since only red and blue are needed). The OLED Display will have animations for the 2 minute waiting time and in the case of alcohol being detected. +# Photos + +![Components wired inside printed case](./hardw.webp) + ## Schematics @@ -95,6 +103,8 @@ The OLED Display will have animations for the 2 minute waiting time and in the c +![KiCad Schematic](./schematic.svg) + ## Bill of Materials | Device | Usage | Price | diff --git a/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/schematic.svg new file mode 100644 index 00000000000..830b6650bb6 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/alin_andrei.iliescu/schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-05-06KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Breathalyzer - Iliescu AlinFile: Schematic.kicad_schSheet: /+5VR2RGND+5VR1R12BZ1BuzzerR3RRGB1234D1LED_ARGBGND1234J3MQ-3 Alcohol Sensor1234J4I2C DisplayGNDGNDGND1234567891011121314J1Conn_01x14123456789101112131415161718J2Conn_01x18+5VAODOPB3PB0PA4NCIOREFPC05V3V3PA1NRSTGNDVCCGNDVINGNDPA0SDASCLPC8PC9PA7AVDDPB7PA6GNDPB6PC7PC6PA8PB10PB4PA3PB5PA2PC1GNDVCCPA5STM32 NUCLEO-U545RE-QR3RD1LED_ARGB1234R2RR1RGND diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/diagram.webp b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/diagram.webp new file mode 100644 index 00000000000..4e3a13fb388 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/diagram.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/index.md b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/index.md new file mode 100644 index 00000000000..ddc4bf9405c --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/index.md @@ -0,0 +1,105 @@ +# PlantaSoteria +A smart plant monitoring system + +:::info + +**Author**: Ana-Maria Adascalitei 1241EA \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/project-AnaAdascalitei + +::: + +## Description + +PlantaSoteria (a mix of Latin and Greek meaning "Plant Salvation") is a smart plant monitoring system designed to simplify and optimize plant care. The system continuously monitors key environmental parameters, including soil moisture, light intensity, ambient temperature, humidity, and environmental disturbances. The collected data is transmitted via Wi-Fi to a server, which processes it and serves a web dashboard. Users can observe real-time plant conditions and receive alerts when environmental parameters fall outside optimal ranges. + +## Motivation + +This project was inspired by my passion for plants and my goal to simplify their care while efficiently monitoring their requirements. Many plants suffer from overwatering, insufficient light, or temperature extremes — all issues that can be avoided with proper data. PlantaSoteria acts as a guardian for your plants, providing real-time insights so you can act before it is too late. + +## Architecture + +The system is built around the Raspberry Pi Pico W as the central hub. It collects data from five sensors over I2C, one-wire, and ADC interfaces, then transmits the readings to a remote server over Wi-Fi using HTTP. The server stores the data and serves a web dashboard for monitoring. + +**Main components:** + +- **Raspberry Pi Pico W** — The microcontroller at the heart of the system. It gathers data from all sensors, processes it, and sends it to the server over Wi-Fi. +- **Server** — Receives data from the microcontroller, stores it, and serves it to the web dashboard. +- **Web Dashboard** — Displays real-time sensor data and sends alerts when conditions require attention (e.g. low soil moisture, insufficient light). +- **DHT22** — Measures ambient temperature and humidity of the environment around the plant. +- **BMP180** — Measures temperature and atmospheric pressure, helping detect weather or room condition changes that could affect plant health. +- **TEMT6000** — Ambient light sensor that evaluates whether the plant is receiving sufficient sunlight during the day. +- **Soil Moisture Sensor (Hygrometer)** — Measures soil water levels to determine whether the plant needs watering. +- **Piezoelectric Vibration Sensor** — Detects unusual vibrations in the soil, which could indicate pest activity or accidental disturbances. + +![Architecture Diagram](diagram.webp) + +## Log + + + +### Week 5 - 11 May + +Ordered and gathered all necessary hardware components to ensure an organized and smooth development process. Started drafting the system architecture and planning the roles of each component. Simultaneously began writing documentation and outlining the project structure. Tested several sensors (including the soil moisture and temperature sensors) to verify correct operation, and began sketching the initial KiCad schematic to visualize the hardware layout. + +### Week 12 - 18 May + +Assembled all hardware components on the breadboard. Connected the DHT22, BMP180, TEMT6000, soil moisture sensor, and piezoelectric vibration sensor to the Raspberry Pi Pico W. Verified all wiring connections and tested each sensor individually to confirm correct readings. Finalized the KiCad schematic. + +### Week 19 - 25 May + +## Hardware + +The hardware component of PlantaSoteria is designed to monitor various environmental parameters crucial to plant health. At the core is the Raspberry Pi Pico W, which collects data from a range of sensors and transmits it to the backend server. Each sensor targets a specific plant care need: + +- **Soil Moisture Sensor (Hygrometer):** Detects soil water levels to inform watering needs. +- **BMP180 Sensor Module:** Measures temperature and air pressure, tracking environmental changes that could affect the plant. +- **Ambient Light Sensor (TEMT6000):** Evaluates light exposure to ensure the plant receives sufficient sunlight. +- **DHT22 Sensor:** Provides additional temperature and humidity readings, offering redundancy and a broader environmental profile. +- **Piezoelectric Vibration Sensor:** Detects unusual movements or disturbances in the soil, such as pest activity or accidental touches. +- **Power Supply:** A stable 5V/3A micro-USB adapter powers the entire system. +- **Wiring & Connectors:** Jumper wires and resistors ensure reliable electrical connections between components. + +All sensors connect to the microcontroller via GPIO pins using I2C and analog input interfaces, enabling real-time monitoring and data collection. + +### Schematics + +![KiCad Schematic](kicad.webp) + +### Photos + +![Plant with soil moisture sensor](part1_hardware.webp) +![Sensors and wiring](part2_hardware.webp) +![Raspberry Pi Pico W on breadboard](part3_hardware.webp) + +### Bill of Materials + +| Device | Usage | Price | +|--------|-------|-------| +| [Raspberry Pi Pico W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) | Microcontroller | [34.50 RON](https://www.optimusdigital.ro/en/raspberry-pi-boards/12394-raspberry-pi-pico-w.html) | +| [Alimentator micro-usb 5V/3A](https://www.emag.ro/alimentator-micro-usb-5v-3a-hs0276/pd/DFJ4THMBM/) | Power supply | [29.00 RON](https://www.emag.ro/alimentator-micro-usb-5v-3a-hs0276/pd/DFJ4THMBM/) | +| [Soil Moisture Sensor, Hygrometer](https://lastminuteengineers.com/soil-moisture-sensor-arduino-tutorial/) | Soil moisture sensor | [7.29 RON](https://www.sigmanortec.ro/Senzor-umiditate-sol-higrometru-p125814620) | +| [Analogue Piezoelectric Vibration Sensor](https://wiki.keyestudio.com/Ks0272_keyestudio_Analog_Piezoelectric_Ceramic_Vibration_Sensor) | Vibration/disturbance detection | [9.39 RON](https://www.optimusdigital.ro/ro/senzori-de-vibraii/8249-senzor-de-vibraii-piezoelectric-analogic.html) | +| [BMP180 Temperature and Pressure Sensor Module](https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf) | Temperature & pressure sensor | [6.98 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-presiune/149-modul-senzor-de-temperatura-si-presiune-bmp180.html) | +| [Ambient Light Sensor TEMT6000](https://www.vishay.com/docs/81579/temt6000.pdf) | Light intensity sensor | [9.54 RON](https://ardushop.ro/ro/home/1290-senzor-lumina-ambientala-temt6000.html) | +| [DHT22 Temperature and Humidity Sensor Module](https://www.waveshare.com/wiki/DHT22_Temperature-Humidity_Sensor) | Temperature & humidity sensor | [23.12 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-temperatura/1449-modul-senzor-de-temperatura-i-umiditate-dht22.html) | +| [Set of 40 Arduino Wires, Male-Male, 30 cm, Multicolor](https://www.circuitrework.com/guides/6-1.html) | Electrical connections | [15.59 RON](https://www.emag.ro/set-40-cabluri-arduino-male-male-30-cm-multicolor-5904162803453/pd/DF8RKLMBM/) | +| [Resistor Kit, 30 Values, 600 Pieces, 1/4W, 10R–1M](https://workforce.libretexts.org/Bookshelves/Electronics_Technology/Book%3A_Electric_Circuits_I_-_Direct_Current_(Kuphaldt)/02%3A_Ohm's_Law/2.05%3A_Resistors) | Pull-up/pull-down & voltage dividers | [22.61 RON](https://www.sigmanortec.ro/kit-rezistori-30-valori-20-bucati) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Abstraction layer for embedded hardware | Provides a unified interface for embedded hardware such as I2C, SPI, ADC | +| [embassy-rp](https://github.com/embassy-rs/embassy) | Embassy HAL for Raspberry Pi Pico (RP2040) | Accesses GPIO pins, I2C, ADC, and other RP2040 peripherals | +| [embassy-net](https://github.com/embassy-rs/embassy) | Async networking stack for embedded systems | Sends sensor data from the Pico W to the server over Wi-Fi | +| [cyw43](https://github.com/embassy-rs/embassy) | Wi-Fi driver for Pico W | Manages the on-board CYW43439 Wi-Fi chip | +| [dht-sensor](https://github.com/michaelbeaumont/dht-sensor) | Driver for DHT family sensors | Reads temperature and humidity from the DHT22 | +| [bmp180](https://github.com/eldruin/bmp180-rs) | Driver for BMP180 sensor | Reads temperature and pressure over I2C | +| [cortex-m-rt](https://github.com/rust-embedded/cortex-m-rt) | Real-time runtime for Cortex-M | Handles startup, interrupt vectors, and memory initialization | + +## Links + +1. [Garduino](https://ocw.cs.pub.ro/courses/pm/prj2023/apredescu/garduino) +2. [Plant Watcher](https://ocw.cs.pub.ro/courses/pm/prj2023/alexau/plantwatcher) +3. [Sistem Monitorizare Plante](https://ocw.cs.pub.ro/courses/pm/prj2023/gpatru/bogdan.brutaru) +4. [Sistem intretinere plante](https://ocw.cs.pub.ro/courses/pm/prj2022/abirlica/sistem_intretinere_plante) diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/kicad.webp b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/kicad.webp new file mode 100644 index 00000000000..98469df1725 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part1_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part1_hardware.webp new file mode 100644 index 00000000000..81078d8eec8 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part1_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part2_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part2_hardware.webp new file mode 100644 index 00000000000..71f6f265a23 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part2_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part3_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part3_hardware.webp new file mode 100644 index 00000000000..9d359b0897a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana.adascalitei/part3_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona1.webp b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona1.webp new file mode 100644 index 00000000000..927e610cffa Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona2.webp b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona2.webp new file mode 100644 index 00000000000..8b6556351fd Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona4.webp b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona4.webp new file mode 100644 index 00000000000..014c8b42e3a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/drona4.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/index.md b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/index.md index 7a7f844fc6b..358c5a43d0f 100644 --- a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/index.md @@ -3,7 +3,7 @@ A compact freestyle drone powered by an STM32 and ESP32 that streams real-time v :::info -**Author**: DUTU Ana-Antonia \ +**Author**: Dutu Ana-Antonia \ **GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-anto987678 ::: @@ -19,11 +19,7 @@ I chose this project because it combines multiple areas that interest me, such a ## Architecture -The system is structured into several main components: the flight control unit, the communication module, the sensing subsystem, and the power management system. The flight control unit, running on the STM32 microcontroller, is responsible for processing sensor data and generating control signals for the motors using a control algorithm. The sensing subsystem includes the IMU and environmental sensors, which provide real-time data (orientation, altitude, temperature) to the flight controller. - -The communication module, implemented using the ESP32, handles both Bluetooth and WiFi connectivity. It receives user input from a PS4/PS5 controller via Bluetooth and transmits video data from the camera to an external device over WiFi. Additionally, telemetry data can be sent back to the user device. - -All components are powered directly from the LiPo battery through the ESC and the step-down voltage regulator, which provides the necessary voltages for the STM32, ESP32, and sensors. The STM32 communicates with sensors via I2C and controls the ESC using PWM signals, while the ESP32 communicates with the STM32 through a serial interface (e.g., UART). +![Architecture schematic](./rusty_drone_architecture.svg) ### Week 1-4 @@ -35,13 +31,22 @@ Started researching how drones work and selecting suitable components, including ### Week 7-8 Started working on the hardware by assembling the drone frame and mounting the motors. Continued by soldering the motors to the ESC and connecting the battery, while integrating the step-down voltage regulator into the power system. Also researched proper soldering techniques and component connections, and began considering different layouts for positioning the battery, STM32, ESP32, sensors, and IMU within the drone frame. +### Week 9-10 +I also started working on the software part of the project, mainly on the communication between the STM32 and the ESC using the DShot protocol for controlling the motors. I researched how the protocol works and how it can be implemented using the STM32 timers and DMA peripherals. At the same time, I began writing the first parts of the code in Rust using the Embassy framework, focusing on generating the DShot signals correctly and understanding how the ESC receives throttle commands + ## Hardware The project uses an STM32 Nucleo U545RE-Q microcontroller for flight control, along with an ESP32-CAM module for WiFi video streaming and Bluetooth communication. It includes brushless motors with a 4-in-1 ESC, an MPU6050 IMU for motion sensing, and BMP280 and MAX6675 sensors for environmental data. Power is provided by a LiPo battery with a step-down converter, all mounted on a 5-inch drone frame with standard supporting components. +### Photos + +![Hardware image](./drona1.webp) +![Hardware image](./drona2.webp) +![Hardware image](./drona4.webp) + ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Kicad Schematic](./rusty_drone_kicad.svg) ### Bill of Materials @@ -96,4 +101,9 @@ The format is 1. [Embassy Book](https://embassy.dev/book/#_what_is_embassy) 2. [STM32 32-bit Arm Cortex MCUs - Documentation](https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/documentation.html) -3. [MPU6050 documentatiom] (https://docs.sunfounder.com/projects/ultimate-sensor-kit/en/latest/components_basic/05-component_mpu6050.html) +3. [MPU6050 documentation](https://docs.sunfounder.com/projects/ultimate-sensor-kit/en/latest/components_basic/05-component_mpu6050.html) + +4. [How To Get Started With FPV Drone](https://oscarliang.com/fpv-drone-guide/) +5. [Dshot Protocol Description](https://betaflight.com/docs/development/API/Dshot) +6. [ESC HGLRC MANUAL](https://storage.dronerion.com/files/ESC_HGLRC_60A_6S_V1_User_Manual_EN-8292.pdf) + diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_architecture.svg b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_architecture.svg new file mode 100644 index 00000000000..494ddb22564 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_architecture.svg @@ -0,0 +1,4 @@ + + + +
STM32 Nucleo U545RE-Q
(Main flight controller}
STM32 Nucleo U545RE-Q...
ESC 4in1
HGLRC 60A V1

ESC 4in1...
Motor 1
EMAX ECO II 2207 1700KV
Motor 1...
Motor 2
EMAX ECO II 2207 1700KV
Motor 2...
Motor 3

EMAX ECO II 2207 1700KV
Motor 3...
Motor 4

EMAX ECO II 2207 1700KV
Motor 4...
Step-down 
LM2596
Step-down...
Battery LiPo 6S 22,2V
Battery LiPo 6S...
ESP32 Cam + WiFi + Bluetooth
ESP32 Cam + WiF...
IMU(Gyroscope and Accelerometer Module)
IMU(Gyroscop...

 MAX6675 Temperature Sensor

MAX667...

BMP280 Barometric Pressure Sensor Module

BMP280...
Power/5V
Power/5V
Dshot 
M1-M4
Dshot...
3-Phase Wires
3-Phase Wir...
3-Phase Wires
3-Phase...
3-Phase Wires
3-Phase Wires
3-Phase Wires
3-Phase W...
VBAT 22.2V
VBAT 22...
UART
UART
VBAT input / 22.2V
VBAT input...
I2C
I2C
SPI
SPI
SPI
SPI
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_kicad.svg b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_kicad.svg new file mode 100644 index 00000000000..40437f551f0 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ana_antonia.dutu/rusty_drone_kicad.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/hardware_scheme.svg b/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/hardware_scheme.svg new file mode 100644 index 00000000000..3921cd38c87 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/hardware_scheme.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 1/1Title: File: hardware_scheme.kicad_schSheet: /R41234567891011121314151617181920212223242526272829303132333435363738J2CN10R5RGBREDCATHODEGREENBLUED4LED_RGBR6+5VCOMMON GROUND+-BZ1Buzzer+-BZ2BuzzerVDDAH1MountingHoleH2MountingHoleH3MountingHoleSWVRyVRx+5VGNDJ3Joystick breakout board+3V3+BATTD1LEDVCCGNDGNDNCNCNCCLKSDARSRSTCSJ4LCD SPI 128x160 Module1234567891011121314151617181920212223242526272829303132333435363738J1CN7VDDD3LEDR3RR1RR2RD2LED5V_USB_CHGRIOREFVIN~{RST}E5VMechanicalCatch the falling apples \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/index.md b/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/index.md index 97149c25d6a..fb3c3473a8e 100644 --- a/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/ana_maria.radu0611/index.md @@ -46,11 +46,17 @@ I did some initial testing to see if the components work. ### Week 20 - 26 April I continued the testing, wrote the page of the website and started writing the actual code of the project. +### Week 27 April - 3 May +I had an issue where my screen would stay white, regardless of the commands written in code. I managed to fix it by using a different crate. Also, I found a way of drawing my objects by importing images modified on a website which created an array of pixels. I had to find a way to remove the white background of the pictures, which turned out to be different shades of white, so I couldn't just manually exclude those pixels. + +### Week 4 - 10 May +I had a problem where the buzzers were not working, but I fixed it. I finished the wiring, which will be slightly changed later on, and I finished the KiCAD schematic. + ## Hardware ### Schematic -*(The KiCAD schematic will be here later)* +![KiCAD schematic](hardware_scheme.svg) ### Bill of materials @@ -83,3 +89,5 @@ I continued the testing, wrote the page of the website and started writing the a 2. [Screen connection documentation](https://emalliab.wordpress.com/2020/10/10/arduino-and-a-cheap-tft-display/) - explains what each pin of the screen is used for and how to connect them. 3. [Joystick Datasheet](https://naylampmechatronics.com/img/cms/Datasheets/000036%20-%20datasheet%20KY-023-Joy-IT.pdf) 4. [Joystick Documentation](https://www.watelectronics.com/ky-023-joystick-module/) - more information about the joystick +5. [KiCAD schematic pins documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html#cad-resources) +6. [image2cpp](https://javl.github.io/image2cpp/) - website where you can turn an image into an array of pixels diff --git a/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/index.md b/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/index.md index 6380077b37a..14fd91be412 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/index.md @@ -124,6 +124,7 @@ Interface: GPIO/I2C ### Schematics +![Schematics](./study_assistant.svg) The KiCad schematic will be added here. ### Bill of Materials @@ -159,3 +160,4 @@ The KiCad schematic will be added here. 3. [SSD1306 OLED Display Driver Documentation](https://docs.rs/ssd1306/latest/ssd1306/) 4. [Embedded Graphics Library](https://github.com/embedded-graphics/embedded-graphics) 5. [Embedded HAL](https://docs.rs/embedded-hal/latest/embedded_hal/) +6. [Embedded HAL](https://docs.rs/embedded-hal/latest/embedded_hal/) diff --git a/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/study_assistant.svg b/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/study_assistant.svg new file mode 100644 index 00000000000..b14b35861be --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andra.scarlat/study_assistant.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 09.05.2026KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Study Assistant with PomodoroFile: Study_assistant.kicad_schSheet: /R4RSW2SW_PushSW1SW_PushGNDD1LEDR2RR1RD2LEDGNDGNDSW3SW_PushGND12BZ1BuzzerGNDD3LEDR3R+3.3V+5V+3.3V3V3J2-1ENJ2-2SENSOR_VPJ2-3SENSOR_VNJ2-4IO34J2-5IO35J2-6IO32J2-7IO33J2-8IO25J2-9IO26J2-10IO27J2-11IO14J2-12IO12J2-13GND1J2-14IO13J2-15SD2J2-16SD3J2-17CMDJ2-18EXT_5VJ2-19GND3J3-1IO23J3-2IO22J3-3TXD0J3-4RXD0J3-5IO21J3-6GND2J3-7IO19J3-8IO18J3-9IO5J3-10IO17J3-11IO16J3-12IO4J3-13IO0J3-14IO2J3-15IO15J3-16SD1J3-17SD0J3-18CLKJ3-19Reference: U1ESP32-DEVKITC-32DGNDGNDGND123LDRConn_01x03GNDR5R+5V1234MQ-135Conn_01x041234OLEDConn_01x04+3.3V+3.3VReference: U1ESP32-DEVKITC-32D3V3J2-1ENJ2-2SENSOR_VPJ2-3SENSOR_VNJ2-4IO34J2-5IO35J2-6IO32J2-7IO33J2-8IO25J2-9IO26J2-10IO27J2-11IO14J2-12IO12J2-13GND1J2-14IO13J2-15SD2J2-16SD3J2-17CMDJ2-18EXT_5VJ2-19GND3J3-1IO23J3-2IO22J3-3TXD0J3-4RXD0J3-5IO21J3-6GND2J3-7IO19J3-8IO18J3-9IO5J3-10IO17J3-11IO16J3-12IO4J3-13IO0J3-14IO2J3-15IO15J3-16SD1J3-17SD0J3-18CLKJ3-19 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/final_fiag.svg b/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/final_fiag.svg new file mode 100644 index 00000000000..793df73f8b8 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/final_fiag.svg @@ -0,0 +1,4 @@ + + + +
3 Cartidges
3 Cartidges
Cartridge Decoder
Cartridge Decoder
Main Controller - STM32
Main Controller - STM32
Melody Manager
Melody Manager
LED Controller
LED Controller
Button Handler
Button Handler
OLED Controller
OLED Controller
Buzzer Controller
Buzzer Controller
Score System
Score System
Buzzer
Buzzer
LEDs
LEDs
Buttons
Buttons
Rhythm Checker
Rhythm Checker
OLED Display
OLED Display
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/index.md b/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/index.md new file mode 100644 index 00000000000..b3d8963d670 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andra_sara.duminica/index.md @@ -0,0 +1,96 @@ +# Embedded Rhythm Music Box Game + +A real-time embedded rhythm game where the user must press buttons in sync with LED cues and music. + +:::info + +**Author:** Andra-Sara-Maria Duminica \ +**Project GitHub Link:** https://github.com/UPB-PMRust-Students/fils-project-2026-Asmd-44 + +::: + +--- + +## Description + +This project implements a real-time embedded rhythm game using an STM32 microcontroller. The system extends a simple music box into an interactive game where the user must follow the rhythm of a melody. + +The device plays an 8-bit melody using a buzzer while LEDs light up in a predefined sequence corresponding to the rhythm. Each LED is mapped to a specific button, and the user must press the correct button at the correct time. + +The system evaluates the user’s input in real time, checking both correctness and timing accuracy. Based on performance, a scoring system calculates metrics such as correct hits, missed inputs, and overall accuracy. At the end of the song, the final score is displayed on an OLED screen. + +The system uses **three interchangeable cartridges**, each corresponding to a different melody, allowing easy switching between songs and future extensibility. + +--- + +## Motivation + +The motivation behind this project is to explore real-time embedded systems through an interactive and engaging application. It combines hardware control, precise timing, and user interaction, making it a practical way to understand synchronization, input processing, and modular system design. + +--- + +## Architecture + +The system is structured as a set of interacting modules: + +- **Main Controller** – coordinates the entire system +- **Cartridge Decoder** – detects which of the three cartridges is inserted +- **Melody Manager** – handles song playback and timing +- **LED Controller** – generates visual rhythm cues +- **Button Handler** – reads and debounces user input +- **Rhythm Checker** – verifies timing accuracy of button presses +- **Score System** – computes performance metrics +- **Buzzer Controller** – generates audio output +- **OLED Controller** – displays feedback and final results + +The modules communicate through the microcontroller, which acts as the central unit coordinating all operations. + +--- + +## Journal + +### Week 5 – 11 May + + +### Week 12 – 18 May + + +### Week 19 – 25 May + + +--- + +## Hardware + +The system uses the following hardware components: + +- STM32 Nucleo board +- Passive buzzer +- LEDs (multiple colors) +- Push buttons (3–4) +- SSD1306 OLED display (I2C) +- Breadboard and jumper wires +- Header pins for cartridge system + +--- + +## Schematics + +![System Diagram](final_fiag.svg) + + +--- + +## Bill of Materials (Estimated Cost) + +- STM32 Nucleo board – ~120–180 RON +- Passive buzzer – ~5–15 RON +- LEDs – ~10–20 RON +- Resistors – ~5–10 RON +- Push buttons – ~10–20 RON +- SSD1306 OLED display – ~30–60 RON +- Breadboard – ~15–30 RON +- Jumper wires – ~10–20 RON +- Header pins (cartridge system) – ~5–10 RON + +**Total estimated cost: ~200–350 RON** diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.codita/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.codita/index.md index 4c290cd6025..ed4523e0bb1 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.codita/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.codita/index.md @@ -84,9 +84,9 @@ I always liked drones, wanted to build one but the classic quadcopter felt a bit 3x Brushless Motors +-----------------------+ +----------------------------+ - | 3x ESC 30A | PWM1 <--+ PA1 - Timer PWM Output | + | 3x ESC 30A | PWM1 <--+ PB1 - Timer PWM Output | | (Signal Controllers) | PWM2 <--+ PB5 - Timer PWM Output | - | | PWM3 <--+ PA6 - Timer PWM Output | + | | PWM3 <--+ PB4 - Timer PWM Output | +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ @@ -95,29 +95,29 @@ I always liked drones, wanted to build one but the classic quadcopter felt a bit +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ - | ICM-20948 | SCK <--+ pin TBD | - | (9-Axis IMU) | MOSI <--+ pin TBD | - | | MISO -->+ pin TBD | - | | CS <--+ pin TBD | + | ICM-20948 | 3V3 <--+ STM 3v3 | + | (9-Axis IMU) | GND <--+ Common GND | + | | SCL -->+ PB13 | + | | SDA <--+ PB14 | +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ - | BMP280 | SCL <---+ pin TBD | - | (Barometer) | SDA <-->+ pin TBD | + | BMP280 | SCL <---+ PC0 | + | (Barometer) | SDA <-->+ PC1 | +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ - | ESP32-C3 FH4 | TX -->+ pin TBD | - | (Wi-Fi/BT) | RX <--+ pin TBD | + | ESP32-C3 FH4 | TX -->+ PA9 | + | (Wi-Fi/BT) | RX <--+ PA10 | +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ - | HC-SR04 | Trig <--+ pin TBD | - | (Ultrasonic) | Echo -->+ pin TBD | + | HC-SR04 | Trig <--+ PC4 | + | (Ultrasonic) | Echo -->+ PC5 | +-----------------------+ +----------------------------+ +-----------------------+ +----------------------------+ - | Buzzer Modules | SIG <--+ pin TBD | + | Buzzer Modules | SIG <--+ PC2/PC3 | | | | | +-----------------------+ +----------------------------+ ``` @@ -132,6 +132,10 @@ I documented about the hardware and software part of the project, chose the comp Took measurements of the hardware, builded the frame from scratch and soldered all the wires I needed, the sensors, voltage dividers. ### Week 8 Connected the motors, servo, sensors to the STM32 to check they are working as intended. +### Week 9-10 +Tried connecting the xbox one controller to the ESP32 and had issues with bluetooth while also checking the motors working along with the servo. +### Week 11 +Completed the schematics and made bluetooth work. ## Hardware The main component is the Nucleo STM32U545RE-Q board that acts as the flight controller with data based from: BMP280 - measures the air pressure and determines how high is it, CM-20948 9 axis to get the acceleration, gyroscope and compass data, HC-SR04 to measure distance at low altitudes. ESP32-C3 FH4 super mini handles the Wi-Fi and Bluetooth connectivity in order to control the drone remotely. Three 30Amps ESCs to control each 2212 1000kV brushless motor. All of them are powered from a 2200mAh 11.1V 30C battery through a Matek Mini Power Hub and a voltage divider is put at the exit of the power distribution board to measure the voltage that comes out of the battery. Two passive buzzers are used to alert when battery is below a certain limit. @@ -142,7 +146,7 @@ The main component is the Nucleo STM32U545RE-Q board that acts as the flight con ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![KiCAD Schematic](./maproject.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.codita/maproject.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.codita/maproject.svg new file mode 100644 index 00000000000..28d2c65266a --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.codita/maproject.svg @@ -0,0 +1 @@ + diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/Circuit.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/Circuit.svg new file mode 100644 index 00000000000..3ce84dd65f9 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/Circuit.svg @@ -0,0 +1 @@ +SVG Image created as Circuit.svg date 2026-05-06T21:37:35 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: Circuit.kicad_schSheet: /1234123412345678J8123123412345678910J7GNDPWR112345678910111212345678910111213123SIG1 → PA0SDA → PB7SCL → PB6VCC → 3.3VGND → GNDPA5 DC1PB12 CSGND → GNDOUT → PC8VCC → 3.3VPB15 MOSI2BL → 3.3VPB3 SCKPA1 PWM2PA0 PWM1PB7 SDAPB6 SCLPC8 GPIOPA10 RX1PA7 MOSISIG → PA1VCC → 5VGND → GNDPC4 RSTPA9 TX1PA4 CS1PB13 SCK2PB2 RST2PA6 RST1PB0 CS2GND → GNDVCC → 3.3VMOSI → PA7VCCDC → PB1RES → PB2GNDCS → PA4 (own CS)CS → PB0PC5 DCGND3.3VGNDGNDSCK → PB35VRES → PA6DC → PA5VCC → 5VVIN → PA7 (SPI1 MOSI)GND → GND (common)CS → PB12DC → PC5SCK → PB13MOSI → PB15RST → PC4TXD → PA10RXD → PA9GND → GNDVCC → 5VPB1 DC2POWER SUPPLYWS2812B LED RING X7SSD1306 OLED X2 (SPI1)OLED #2(R - EYE)OLED #1 (L-EYE)STM32 Nucleo-U545REBME280ILI9341 TFT 3.2" (SPI2)HC-05 BTTTP223 TOUCHSERVO MG90S x24.7kΩ pull-upsNucleo 3.3V → BME280, OLED×2, TFT, TTP223Sursa ext 5V → HC-05, WS2812, Servo×2GND comun: ext GND ↔ Nucleo GND !SPI2 - DIFFERENT THAN OLED!Shares MOSI with OLEDs⚠ div. 1kΩ+2.2kΩ \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/index.md new file mode 100644 index 00000000000..9f5126fcbe1 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.dascalescu/index.md @@ -0,0 +1,82 @@ +# AWARE-GUIN +An interactive companion robot developed on STM32 using Async Rust (Embassy). +:::info +**Author**: [DASCALESCU ANDREI] \ +**GitHub Project Link**: [https://github.com/UPB-PMRust-Students/fils-project-2026-yvcc28s62s-cmd] +::: +## Description +AWARE-GUIN is an intelligent desktop companion designed to react to its environment through visual expressions and light feedback. The "brain" of the project is a state-of-the-art STM32U5 microcontroller, programmed exclusively in Rust. The system runs on the `Embassy` asynchronous framework, concurrently managing an SPI display for the face/UI, a smart LED ring (NeoPixel) for expressing moods, and I2C sensors for gathering environmental data. + +## Motivation +The primary motivation for this project was to transition from classic, sequential embedded programming (C/C++) to the modern, memory-safe, and asynchronous ecosystem provided by Rust. AWARE-GUIN served as the perfect sandbox to explore advanced concepts such as cooperative multitasking on bare-metal hardware, direct hardware abstraction layer (HAL) manipulation, and real-world debugging of communication protocols (high-speed SPI and I2C). + +## Architecture +```text + [ DATA & TIME ] [ VISUAL DISPLAY ] + .-------------. .---------------. + | RTC Module | | Displays (SPI)| + | Real-Time | | Multiple TFT/ | + '-------------' | OLED | + ^ '---------------' + | (I2C) ^ + v | (SPI 1 & 2) +.-------------. .-------------------. v .-------------. +| HC-05 (UART)| | | | WS2812 Ring | +| Bluetooth |<---(RX/TX)----->| AWARE-GUIN Core |<----(SPI @3MHz)>| RGB LEDs | +| Comm Module | | (STM32 Nucleo-U5) | | Expressions | +'-------------' | | '-------------' + '-------------------' + ^ ^ + | (I2C / ADC) | (PWM Signal) + v v + .-------------. .---------------. + | Multiple | | Servo Motors | + | Sensors | | Mechanical | + | (Env/IR) | | Actuation | + '-------------' '---------------' + [ PERCEPTION ] [ ACTION ] + +## Log +### Week 5 - 11 May +* Researched STM32U5 documentation and set up the Rust embedded toolchain (`probe-rs`, `defmt`). +* Configured the Embassy async framework and successfully ran an async Blinky task. +* Conducted initial SPI communication tests and hardware initialization for the TFT display. + +### Week 12 - 18 May +* Performed advanced hardware debugging on the SPI bus (resolving "white screen" issues and adjusting clock polarity - MODE_0 / MODE_3). +* Successfully integrated the `mipidsi` and `embedded-graphics` crates. +* Controlled the WS2812 LED ring via SPI using the `smart-leds` crate and generated non-blocking animations. + +### Week 19 - 25 May +* Wired and tested the I2C environmental sensors. +* Unified all components (Display, LEDs, Sensors) into a single asynchronous `main` execution loop. +* Optimized the codebase for the `release` profile and finalized the hardware schematics. + +## Hardware +The system relies on an STM32 Nucleo board as the central processing unit, expanded with peripheral modules connected directly to the exposed header pins. + +### Schematics +![KiCAD schematic](./Circuit.svg) + +### Bill of Materials +| Device | Usage | Price | +|--------|--------|-------| +| [STM32U545RE Nucleo](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The main microcontroller running the Rust logic | [~110 RON](#) | +| [SPI TFT Display (ST7789/ILI9341)](https://www.optimusdigital.ro/) | The screen used to render the robot's face | [~40 RON](#) | +| [7-LED WS2812 Ring](https://www.optimusdigital.ro/) | Luminous feedback / Mood lighting | [~15 RON](#) | +| [I2C Sensor Module](https://www.optimusdigital.ro/) | Gathering environmental data | [~20 RON](#) | +| Dupont Wires & Breadboard | Physical connections between components | [~25 RON](#) | + +## Software +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async HAL for the STM32 family | Configuring system clocks, I2C, SPI, and GPIO pins. | +| [mipidsi](https://github.com/almindor/mipidsi) | Universal display driver | Low-level communication and hardware initialization for the screen controller. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Hardware-agnostic rendering of text, geometries, and expressions on the screen. | +| [ws2812-spi](https://github.com/smart-leds-rs/ws2812-spi) | WS2812 driver | Driving the smart LED ring directly through SPI pins. | +| [defmt](https://defmt.ferrous-systems.com/) | Ultra-fast logging framework | Printing system logs (Info, Debug, Error) via the debugging probe interface. | + +## Links +1. [Embassy Book - Official Documentation for Rust Async Embedded](https://embassy.dev/book/dev/index.html) +2. [Embedded Graphics - Visual guide and examples](https://docs.rs/embedded-graphics/latest/embedded_graphics/) +3. [Rust on STM32 - The Embedded Rust Book](https://docs.rust-embedded.org/book/) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/index.md index 80896ea1d86..b5fdca337fa 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/index.md @@ -205,79 +205,11 @@ The watering actuator is a 5V mini water pump controlled through a logic-level N ### Schematics - - - STM32 NUCLEO-U545RE-Q - Main Controller - Rust + Embassy - - - Capacitive Soil - Moisture Sensor - - ADC - - - BME280 - Temp / Hum / Pressure - - I2C - - - SSD1306 OLED - Local Display - - I2C - - - Tank Level Sensor - Float Switch - - GPIO IN - - - ESP32 Wi-Fi Module - AP / Station Mode - Web UI / Serial Bridge - - UART TX/RX - - - Phone / Laptop - Browser Interface - - Wi-Fi - - - Status LED + Buzzer - - GPIO OUT - - - Logic-Level - N-MOSFET Driver - - GPIO OUT - - - 5V Mini Water Pump - - switched 5V - - - External 5V PSU - Pump Power - - 5V + GND - - - Flyback diode across pump - - - Local Button Optional - - GPIO IN - +![PlantGuard Node schematic](./plantguardnode.svg) + +### Hardware Pictures + +![PlantGuard Node hardware prototype](./prototip.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/plantguardnode.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/plantguardnode.svg new file mode 100644 index 00000000000..0a8686d37e8 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/plantguardnode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/prototip.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/prototip.webp new file mode 100644 index 00000000000..acc1fcecd31 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.florea2012/prototip.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/assets/thermal_cam_good resolution.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/assets/thermal_cam_good resolution.svg new file mode 100644 index 00000000000..79c56acac33 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/assets/thermal_cam_good resolution.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: thermal_cam.kicad_schSheet: /GND+3.3VGNDGNDGNDGND+3.3VVCC1GND2VRX3VRY4SW5J4J_JOYGNDVCC1GND2SDA3SCL4J1J_MLX+3.3VCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U1BNUCLEO-G0B1RE+3.3V+3.3VPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U1ANUCLEO-G0B1RER1100VCC1GND2SCK3MOSI4MISO5CS6DC7RST8LED9J2J_TFT+3.3VVCC1GND2SCK3MOSI4MISO5CS6J3J_SDVCC1GND2TX3RX4J5J_ESP32 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/index.md index 2c61f293faf..8d9a6d06c05 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.ionescu2605/index.md @@ -56,10 +56,15 @@ UI Controller (Joystick) ### Week 5 - 11 May -- Initial idea was a reflex-based system. -- Pivoted to thermal imaging after feedback. -- Selected MLX90640 as core sensor. -- Studied MLX90640 communication and frame format. +- Got the hardware working on the breadboard. +- Next step is moving to a protoboard with soldering. +- The thermal camera is running, but I am still tuning it to work perfectly. +- The app menu is still buggy, but I will handle that next week. + +
+ Thermal camera prototype 1 + Thermal camera prototype 2 +
### Week 12 - 18 May - Defined system blocks and data flow. @@ -77,28 +82,8 @@ The system uses an STM32 NUCLEO-U545RE-Q for development, an MLX90640 thermal se ### Schematics - - - MLX90640 (I2C) - - - STM32 NUCLEO-U545RE-Q - Main Controller - - - TFT Display (SPI) - - - microSD (SPI) - - - Joystick + WiFi (UART) +![Thermal camera hardware schematic](./assets/thermal_cam_good%20resolution.svg) - - - - - ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/index.md index 27700f34bff..6a36384bae8 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/index.md @@ -111,7 +111,7 @@ Still waiting for my buck converter in order to start testing. # Hardware ---- +![Schematics](./selfbalancingrobot.svg) # Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/selfbalancingrobot.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/selfbalancingrobot.svg new file mode 100644 index 00000000000..341461046ae --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.jidovu/selfbalancingrobot.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: SelfBalancingRobot.kicad_schSheet: /VIN1OUT2GND3FB4~{ON}/OFF5U4LM2596S-5BT1BatteryAO11PGND13AO25BO27PGND29BO111VM213VM314PWMB15BIN216BIN117GND18STBY19VCC20AIN121AIN222PWMA23VM124U3TB6612FNG+1-2M2Motor_DC_ALT+1-2M1Motor_DC_ALTCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050GND1VDD2EN3SENSOR_VP4SENSOR_VN5IO346IO357IO328IO339IO2510IO2611IO2712IO1413IO1214IO1316SHD/SD217SWP/SD318SCS/CMD19SCK/CLK20SDO/SD021SDI/SD122IO1523IO224IO025IO426IO1627IO1728IO529IO1830IO1931IO2133RXD0/IO334TXD0/IO135IO2236IO2337U1ESP32-WROOM-32 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/index.md index c3b974d3bab..f5632bef8ee 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/index.md @@ -80,9 +80,15 @@ The device is powered by two series-connected 18650 lithium-ion cells (~7.4V com All peripheral components communicate with the microcontroller primarily over the shared I2C bus. +### Hardware photos + +![Hardware Photo 1](photo_1.webp) + +![Hardware Photo 2](photo_2.webp) + ### Schematics -KiCAD schematics will be added here as soon as they're done. +![Schematic](schematic.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_1.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_1.webp new file mode 100644 index 00000000000..b2c0c8228d8 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_2.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_2.webp new file mode 100644 index 00000000000..98ec73917b4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/photo_2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/schematic.svg new file mode 100644 index 00000000000..54b34ae5b41 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.mardale0703/schematic.svg @@ -0,0 +1 @@ +SVG Image created as RustKey.svg date 2026-05-10T21:40:43 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title:File: RustKey.kicad_schSheet: /GNDBT2Battery_CellGNDVCC1O2GND3U3TTP223_TOUCH1A01A12A23GND4SDA5SCL6WP7VCC8U4AT24C256+BATTVCC1O2GND3U2TTP223_TOUCH1+5V+3V3H3MountingHoleH1MountingHoleBT1Battery_CellH2MountingHoleGNDVIN1OUT2GND3FB4~{ON}/OFF5U5LM2596S-5GND1GND1VCC2SCL3SDA4U1ER_OLEDM0.91_1x-I2CGND1VCC2SDA3SCL4RTC1RTC_DS3231GNDGNDA1234567891011121314151617181920212223242526272829303132333435363738J2CN10GND12345678J5CN91IOREF2NRST33V345V5GND6GND7VIN8J3CN6PB_61PB_72AVDD3GND4PA_55PA_66PA_77PC_98PC_69PC_710J6CN5GND123456J4CN81234567891011121314151617181920212223242526272829303132333435363738J1CN7VDDVIN+5V186507.4V~{RST}NUCLEO-U545RE-QIOREFE5V5V_USB_CHGR18650MechanicalRustKey - Mardale Andrei-BogdanBT2Battery_CellGNDBT1Battery_CellU5LM2596S-5VIN1OUT2GND3FB4~{ON}/OFF5GND1 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/control_station_schematic.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/control_station_schematic.webp new file mode 100644 index 00000000000..1c6ea11ed82 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/control_station_schematic.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/hardware_pic.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/hardware_pic.webp new file mode 100644 index 00000000000..81876c1ad1b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/hardware_pic.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/index.md index ee08d2770e9..a4a9aa465c4 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/index.md @@ -135,16 +135,17 @@ This separation keeps the system realistic for an embedded student project while ### Week 12 - 18 May -- Finalized the initial hardware list for both units. +- Finalized the hardware list for both units. - Defined the main sensing and feedback modules for the rover: chassis, motor drivers, ultrasonic sensors, servo, OLED, LED strip, and buzzer. - Defined the control station interaction elements: OLED, buttons, and potentiometers for configurable attack simulation. - Documented power regulation constraints, common ground requirements, and safe interconnection rules. +- Exported the KiCad schematics for both embedded nodes and added them to the project documentation. +- Integrated teacher feedback by planning TLS for the dashboard channel between phone and control station. ### Week 19 - 25 May - Defined the embedded software stack in Rust for async tasks, networking, telemetry, and UI rendering. - Refined the resilience model around replay, spoof, delay, loss, and flood simulation. -- Integrated teacher feedback by planning TLS for the dashboard channel between phone and control station. - Clarified the split between secure transport and lightweight rover-side anomaly detection. - Defined the target final demo as a full detection-to-recovery cycle with visible system state transitions. @@ -223,23 +224,25 @@ Functions: ### Schematics -The full schematic will be added here in SVG format, exported from KiCad. Until the KiCad export is ready, this section documents the exact wiring plan used for the build. +The hardware design is split into two KiCad sheets, matching the two physical embedded nodes of the project. Unit A contains the rover electronics, while Unit B contains the control station electronics used for operator input and fault simulation. -#### Rover schematic overview +#### Unit A - Rover KiCad schematic -```text -+5V_EXT ─────────────┬── Pico 2 W VSYS - ├── HC-SR04 Front VCC - ├── HC-SR04 Radar VCC - ├── MG90S Servo V+ - ├── WS2812B +5V - ├── Active Buzzer VCC - └── MOTOR_VM, if using 5V motors - -Pico 2 W 3V3_OUT ─── +3V3 -+3V3 ──────────────── OLED VCC + TB6612 logic VCC -GND ───────────────── common ground everywhere -``` +![Unit A rover KiCad schematic](rover_schematic_kicad.webp) + +The rover schematic connects the Raspberry Pi Pico 2 W to the complete mobile platform: two TB6612FNG motor drivers for the four DC motors, two HC-SR04 ultrasonic sensors, the MG90S radar servo, the SSD1306 OLED display, the WS2812B status LED, the active buzzer, and the external power regulation stage. + +The design keeps the high-current motor supply and the Pico logic supply explicit, while sharing a common ground between the battery pack, LM2596 module, motor drivers, sensors, and controller. The HC-SR04 echo signals are protected with voltage dividers before reaching Pico GPIO pins, and the WS2812B data input uses a series resistor. + +#### Unit B - Control Station KiCad schematic + +![Unit B control station KiCad schematic](control_station_schematic.webp) + +The control station schematic focuses on the user-facing hardware for the simulation controller. A second Raspberry Pi Pico 2 W drives an SSD1306 OLED display, reads the physical attack-mode buttons, and samples two potentiometers that configure packet loss and delay intensity. The buttons are wired to ground and are intended to use internal pull-ups in firmware. + +This separation keeps the rover electronics dedicated to movement, sensing, and fail-safe behavior, while the control station handles the dashboard bridge and all software-only fault injection controls. + +#### Rover pin map | Pico pin | Net | Destination | |---|---|---| @@ -270,7 +273,7 @@ GND ───────────────── common ground everywhere #### HC-SR04 echo protection -Not conecting HC-SR04 `ECHO` directly to the Pico. Each echo line uses this divider: +The HC-SR04 `ECHO` pin gives a 5V signal, so I should not connect it directly to a Pico GPIO. For both ultrasonic sensors I used a simple voltage divider: ```text HC-SR04 ECHO ── 2.0kΩ ── ECHO_DIV ── 3.3kΩ ── GND @@ -278,9 +281,9 @@ HC-SR04 ECHO ── 2.0kΩ ── ECHO_DIV ── 3.3kΩ ── GND └── Pico GPIO input ``` -This reduces the 5V echo signal to about 3.1V. +This brings the echo signal down to about 3.1V, which is safe enough for the Pico input pins. -#### Control station schematic overview +#### Control station pin map | Pico pin | Net | Destination | |---|---|---| @@ -304,6 +307,12 @@ This reduces the 5V echo signal to about 3.1V. Buttons and encoder inputs use internal pull-ups in firmware. Each button shorts its GPIO net to `GND` when pressed. Potentiometer high side connects to `+3V3`, low side to `GND`, and wiper to the ADC GPIO. +### Hardware setup + +![Hardware setup](hardware_pic.webp) + +This is the current hardware setup while I am testing the rover and the control station. The parts are not mounted in the final positions yet, but this setup lets me check the wiring, sensors, motor drivers, displays, and power before assembling everything on the chassis. + ### Bill of Materials Prices are estimated Romanian retail prices and can change. Shipping is not included. diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/rover_schematic_kicad.webp b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/rover_schematic_kicad.webp new file mode 100644 index 00000000000..f6acbd35ac7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei.popescu1202/rover_schematic_kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/KicadScheme.svg b/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/KicadScheme.svg new file mode 100644 index 00000000000..81b4afc87f8 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/KicadScheme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/index.md index b0f814834ba..8c2077150cc 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei.tanase1012/index.md @@ -78,14 +78,16 @@ I studied the technical documentation and datasheets for the PMS5003 UART sensor ### Week 7-8 I began the hardware assembly phase by verifying each component's integrity upon arrival and setting up the initial breadboard prototype. This involved establishing the first communication links between the sensors and the STM32 via I2C and UART, while testing the MOSFET switching logic to ensure the high-power fan could be safely regulated by the microcontroller's PWM signal. +### Week 9-11 +I completed the hardware assembly by integrating all peripherals with the STM32 Nucleo-U545RE-Q into a unified system. This involved interfacing the PMS5003 and AHT20+BMP280 sensors for real-time environmental data collection, connecting the I2C OLED for local status updates, and assembling the IRLZ44N MOSFET circuit to safely control the 12V fan via PWM. By establishing a common ground and stable power distribution through the DC barrel jack, the system is now fully interconnected, with the microcontroller successfully communicating across all sensor and actuator loops to form a functional prototype. + ## Hardware The system is built around an STM32 Nucleo-U545RE-Q microcontroller, which interfaces with a Plantower PMS5003 laser sensor via UART for high-precision PM2.5 monitoring. Environmental context is provided by an AHT20 + BMP280 combo breakout (temperature, humidity, and pressure) and a 0.96" OLED display (SSD1306), both communicating over a shared I2C bus. The filtration is handled by a 12V DC fan and a HEPA filter, controlled through a custom motor drive circuit featuring an IRLZ44N logic level MOSFET, a 1N4007 flyback diode, and a 10kΩ pull-down resistor. The entire setup is powered by a 12V DC adapter and integrated on a standard 830 point breadboard. ## Schematics -(KiCAD or similar schematics will be added here) - +![Schematics](./KicadScheme.svg) ## Bill of Materials @@ -95,7 +97,7 @@ The system is built around an STM32 Nucleo-U545RE-Q microcontroller, which inter | [Plantower PMS5003](https://cdn-shop.adafruit.com/product-files/3686/plantower-pms5003-manual_v2-3.pdf) | PM2.5 air quality sensing (UART) | [~172,83 RON](https://ro.mouser.com/ProductDetail/485-3686) | | [AHT20 + BMP280](https://sigmanortec.ro/modul-senzor-aht20-si-bmp280-temperatura-umiditate-presiune-28-5v) | Temperature, humidity, and pressure (I2C) | [~12,26 RON](https://sigmanortec.ro/modul-senzor-aht20-si-bmp280-temperatura-umiditate-presiune-28-5v) | | [0.96" OLED Display](https://sigmanortec.ro/display-oled-096-i2c-iic-alb) | Visual data interface (I2C) | [~16,95 RON](https://sigmanortec.ro/display-oled-096-i2c-iic-alb) | -| [12V PC Case Fan](https://www.emag.ro/ventilator-12v-80x80x25mm-rulment-long-life-76-4m3-h-ee80251bx-a99/pd/DTBDCBYBM/) | Air circulation and filtration | [~47 RON](https://www.emag.ro/ventilator-12v-80x80x25mm-rulment-long-life-76-4m3-h-ee80251bx-a99/pd/DTBDCBYBM/) | +| 12V PC Case Fan | Air circulation and filtration | Already owned | | [HEPA Filter](https://filtru-aspirator.compari.ro/irobot/roomba-800-900-series-filtru-hepa-p802881633/#) | Particulate removal | [~11 RON](https://filtru-aspirator.compari.ro/irobot/roomba-800-900-series-filtru-hepa-p802881633/#) | | [IRLZ44N MOSFET](https://ro.mouser.com/datasheet/3/70/1/Infineon_IRLZ44N_DataSheet_v01_01_EN.pdf) | PWM fan power control | [~7,65 RON](https://ro.mouser.com/ProductDetail/942-IRLZ44NPBF) | | [1N4007 Diode](https://diotec.com/request/datasheet/1n4001.pdf) | Circuit protection (flyback) | [~0,65 RON](https://ro.mouser.com/ProductDetail/637-1N4007) | diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/index.md index 1b1308e6497..36eab8462c5 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/index.md @@ -112,7 +112,7 @@ +--------------------+ +-------------------------------+ - | Passive Piezo | + -->| GP15 (PWM slice 7B, pin 20) | + | Passive Piezo | + -->| GP21 (PWM slice 7B, pin 27) | | Buzzer | | (via 100 Ohm series R) | | | - -->| GND | +--------------------+ +-------------------------------+ @@ -176,8 +176,13 @@ Connection: internal to the Pico 2 W, driven over the PIO-SPI bus on four dedica USB Power Bank (per console): supplies 5 V into the Pico's VBUS via the USB-C port, powering the MCU, the display (on 5 V), and the 3V3 rail feeding the joystick. -### Schematics -To be added +## Schematics + +### Hardware +![Radar Wars Hardware Setup](proiect_rust_hardware.webp) + +### Kicad Schematic +![Radar Wars Schematic](rust_proiect.svg) ## Bill of Materials @@ -220,4 +225,4 @@ To be added ## Links 1. [Embassy GitHub Repository](https://github.com/embassy-rs/embassy) 2. [Embassy Documentation Book](https://embassy.dev/book/index.html) -3. [crates.io (Rust Package Registry)](https://crates.io/) \ No newline at end of file +3. [crates.io (Rust Package Registry)](https://crates.io/) diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/proiect_rust_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/proiect_rust_hardware.webp new file mode 100644 index 00000000000..5f97f5362dd Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/proiect_rust_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/rust_proiect.svg b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/rust_proiect.svg new file mode 100644 index 00000000000..de37d3220f9 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei_barbu/rust_proiect.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Radar Wars — Embedded Battleship over Wi-FiFile: Rust proiect.kicad_schSheet: /GNDR1100ILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U1CR2013-MI2120+3V3GPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico_2_W+3V312BZ1BuzzerGND1+5V2VRx3VRy4SW5JoystickGNDSince the project uses 2 consoles,the difference is done by the gp15.Host will have it connected to 3v3,while client will have it connected to gndA1RaspberryPi_Pico_2_WGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40R1100 diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/index.md b/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/index.md index 73aa4578412..c72851a2f62 100644 --- a/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/index.md @@ -50,8 +50,10 @@ Main software and system components: The system uses an STM32 Nucleo-U545RE-Q as the central hub. It orchestrates a VL53L0X ToF sensor mounted on a 5V stepper motor for spatial scanning, alongside a suite of security sensors (Doppler radar, vibration, sound, keypad) and environmental sensors (BMP180, photoresistors). Everything is wired on a universal 830-point breadboard. ### Schematics - -*To be added.* +![System Architecture Diagram](./lidarsecurityhub.svg) +

+ Complete system schematic for the Smart 2D LiDAR Security Hub. +

### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/lidarsecurityhub.svg b/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/lidarsecurityhub.svg new file mode 100755 index 00000000000..dd3c707fed1 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/andrei_marian.dulce/lidarsecurityhub.svg @@ -0,0 +1 @@ + diff --git a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/index.md b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/index.md index e5e8dfa895b..14fde2f9ba6 100644 --- a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/index.md @@ -79,10 +79,13 @@ the current balance. the vending machine, simulating a real-world contactless payment terminal. - **Power Supply Module:** A dedicated power regulation unit used to provide stable voltage and current to the servo motors, preventing electrical overload on the microcontroller. - **Battery Holder:** Provides a portable power source for the system. - +![Hardware image](./photo1.webp) +![Hardware image](./photo2.webp) +![Hardware image](./photo3.webp) ## Schematics -Place your KiCAD or similar schematics here in SVG format. +![Kicad schematic](./vending_machine.svg) + ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo1.webp b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo1.webp new file mode 100644 index 00000000000..9eceb51b9d4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo2.webp b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo2.webp new file mode 100644 index 00000000000..0a6dfd1bfd9 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo3.webp b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo3.webp new file mode 100644 index 00000000000..6f25a29d5db Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/photo3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/vending_machine.svg b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/vending_machine.svg new file mode 100644 index 00000000000..f656758c9f6 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/anna_cristina.rusu/vending_machine.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: Project Schematic.kicad_schSheet: /PWM1+2-3SERVO3Motor_ServoPWM1+2-3SERVO4Motor_ServoVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64STM32U545RE-Q123IR_SENSOR112345678910111213141516LCD 2004 soldered to I2C module123IR_SENSOR212345678KEYPAD 4x4PWM1+2-3SERVO5Motor_Servo1234I2C Module9V Battery for MB1021234MB102123IR_SENSORIR_SENSOR3PWM1+2-3SERVO1Motor_ServoPWM1+2-3SERVO2Motor_ServoD0RWD6E3.3VGNDGNDGND3.3V3.3VGNDVORSVDDPB7PB6GND+5VPB53.3VD5D1D4D2D3BLABLKD7+5VGNDPB10GNDPB4+5VPB14PB1PB15PB2+5VPA0PA4GNDGNDPA1PB3+5VGND+5VGNDPA11PA12PA10PA9+5VGNDPA8 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/index.md b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/index.md index 472ac01d4c5..79ab974d2bb 100644 --- a/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/index.md @@ -27,34 +27,10 @@ The system uses a dual-controller architecture supported by an external vision s **Sensing & Input**: The HC-SR04 ultrasonic sensor is connected via GPIO, with a voltage divider on the ECHO pin to bring the 5V signal down to 3.3V for safe Pico operation. Two push buttons handle start and stop commands, also read as GPIO inputs with internal pull-up resistors. -**Feedback**: A red and green LED pair gives immediate visual status: green for a registered plate, red for an unregistered one. A passive buzzer driven by PWM emits distinct tones to differentiate between the two outcomes. An OLED SSD1306 display connected via I2C shows the scanned plate number and its validation result in real time (FOUND OR NOT FOUND). +**Feedback**: A red and green LED pair gives immediate visual status: green for a registered plate, red for an unregistered one. A passive buzzer driven by PWM emits distinct tones to differentiate between the two outcomes. An OLED SSD1306 display connected via SPI shows the scanned plate number and its validation result in real time (FOUND OR NOT FOUND). **Vision & OCR**: The SG90 servo motor, controlled via PWM, continuously rotates the ESP32-CAM to scan the area in front of the robot. Once a license plate is detected, the servo stops and the ESP32-CAM captures a still image. The image is transmitted over Wi-Fi via an HTTP POST request to a Python Flask server running on the development laptop. The server processes the image using EasyOCR and OpenCV, queries a SQLite database of registered vehicles and returns the validation result to the ESP32-CAM. The result is then forwarded to the Pico 2W over UART, which triggers the appropriate LED, buzzer and OLED response. -``` -Laptop <================ USB ================> Picoprobe Debugger - ^ | - | | SWD - | v - | +------------------------------------ Pico 2W (Master) - | | | | | | | | | - | | v v v v v v v - | | HC-SR04 Buttons LEDs OLED SG90 Buzzer ESP32-CAM - | | Sensor (Start/ (Status)Display Servo (Audio) (Camera) - | | (GPIO) Stop) (GPIO) (I2C) (PWM) (PWM) (UART) - | | (GPIO) | - | WiFi | | - +------+--------------------------------------------------+ - | - | GPIO (Control) & VSYS (5V Power) - | - v - L298N Motor Driver <---------- 7.4V ---------- 18650 Batteries x2 - | - v - DC Motors (x4) -``` - ## Log @@ -71,6 +47,14 @@ Laptop <================ USB ================> Picoprobe Debugger * Moved on to integrating the accumulators, the push button, the L298N motor driver module and the HC-SR04 ultrasonic sensor. * By the end of this period the robot was able to move on its own, navigating with the help of the ultrasonic sensor without any manual intervention. +### Week 9 - 10 +* Studied the SSD1306 OLED display, the servo motor and the passive buzzer, looking into their wiring requirements and how to interface them with the Raspberry Pi Pico 2W in Embassy/Rust. +* Integrated all three components, wiring the display via SPI, the servo motor via PWM and the buzzer via PWM and implemented the firmware to drive each of them successfully. + +### Week 11 +* Studied the ESP32-CAM module, looking into its pinout, UART communication with the Raspberry Pi Pico 2W and the image capture workflow. +* Integrated the ESP32-CAM into the system and set up a test Python server on the laptop for receiving and processing the camera feed, with the full pipeline currently under testing and near completion. + ## Hardware **The Prototype Chassis**: The robot is built on a 4WD transparent chassis with DC motors driven by an L298N motor driver. Two Raspberry Pi Pico 2W boards handle control and feedback respectively. An ESP32-CAM with OV2640 2MP camera is used for image capture. An HC-SR04 ultrasonic sensor detects obstacles, while an SG90 servo motor rotates the camera during scanning. @@ -79,7 +63,9 @@ Laptop <================ USB ================> Picoprobe Debugger ### Schematics -![img](diagram.svg) +![img](schematics_scanny.svg) + +![img](kicad_scanny_anastasiu_antonia_maria2.svg) ### Photos of the robot (in progress) @@ -92,13 +78,13 @@ Laptop <================ USB ================> Picoprobe Debugger |-----------|-----------|------------| | HC-SR04 Ultrasonic | GPIO | TRIG: GP20, ECHO: GP22 (voltage divider), VCC: VSYS, GND: GND | | L298N Motor Driver | GPIO x4 | IN1: GP10, IN2: GP11, IN3: GP14, IN4: GP15 | -| SSD1306 OLED | I2C | SDA: GP26, SCL: GP27 | -| SG90 Servo | PWM | GP2 | -| ESP32-CAM | UART | TX: GP4, RX: GP5 | -| Picoprobe | SWD | SWDIO, SWCLK, GND | +| SSD1306 OLED | SPI | GND, VCC, SCL: GP2, SDA: GP3, RST: GP6, D/C: GP7 | +| SG90 Servo | PWM | GND, VCC, PWM: GP22| +| ESP32-CAM | UART | GND, VCC: VBUS, TX: GP0, RX: GP1 | +| Picoprobe | SWD | SWCLK: GP2 (Debugger), GND: GND, SWDIO: GP3 | | Start Button | GPIO input | GP16 | | Stop Button | GPIO input | GP17 | -| Buzzer | PWM | GP3 | +| Buzzer | PWM | GP8 | | Red LED | GPIO | GP13 | | Green LED | GPIO | GP12 | @@ -112,7 +98,7 @@ Laptop <================ USB ================> Picoprobe Debugger | [L298N Dual Motor Driver](https://www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf) | DC motor control | [10,99 RON](https://www.optimusdigital.ro/ro/drivere-de-motoare-cu-perii/145-driver-de-motoare-dual-l298n.html?search_query=Modul+cu+Driver+de+Motoare+Dual+L298N+Rosu&results=1) | | [SG90 Servo Motor](https://handsontec.com/dataspecs/motor_fan/SG90-Servo.pdf) | Camera rotation | [~15 RON](https://www.optimusdigital.ro/ro/motoare-servomotoare/26-micro-servomotor-sg90.html?search_query=SG90+Servo+Motor&results=5) | | [HC-SR04 Ultrasonic Sensor](https://handsontec.com/dataspecs/sensor/SR-04-Ultrasonic.pdf) | Obstacle detection | [~7 RON](https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/2328-senzor-ultrasonic-de-distana-hc-sr04-compatibil-33-v-i-5-v.html?search_query=ultrasonic&results=36) | -| [0.96" OLED Display (I2C)](https://www.mouser.com/datasheet/2/1398/Soldered_333099-3395096.pdf?srsltid=AfmBOorKs2gxh1StNoda1Q6uF6sCrsBklNEA7F3ZPLiksCXMqcZlV74u) | Status messages | [~20 RON](https://www.emag.ro/afisaj-grafic-oled-128x64-0-96-inch-galben-albastru-3874784221572/pd/DGTRPXYBM/) | +| 0.96" OLED Display (SPI) | Status messages | [23,68 lei RON](https://ardushop.ro/ro/display-uri-si-led-uri/1110-display-oled-128x64-096-spi-6427854015433.html?gad_source=1&gad_campaignid=17003133061&gclid=CjwKCAjwzevPBhBaEiwAplAxvmx5c89WB8_0vRTfqLx-0V1fACeIzFfYMkcxp5bNzUsGGoNpiqHJvRoC07IQAvD_BwE) | | LEDs (Red + Green) | Visual feedback | [~2 RON](https://www.optimusdigital.ro/ro/optoelectronice-led-uri/703-led-bicolor-de-3-mm-rosu-si-verde-cu-anod-comun.html?search_query=led&results=647) | | Passive Buzzer | Audio feedback | [~1 RON](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=buzzer&results=44) | | Push Button | Starts the patrol | [~0,40 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1119-buton-6x6x6.html?search_query=butoane&results=154) | diff --git a/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/kicad_scanny_anastasiu_antonia_maria2.svg b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/kicad_scanny_anastasiu_antonia_maria2.svg new file mode 100644 index 00000000000..c5edda3c73e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/kicad_scanny_anastasiu_antonia_maria2.svg @@ -0,0 +1 @@ +SVG Image created as kicad_scanny_anastasiu_antonia_maria.svg date 2026-05-09T01:17:58 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: kicad_scanny_anastasiu_antonia_maria.kicad_schSheet: /GNDGNDGNDGreenLed1LEDR1RGNDStopButton1SW_PushRedLed1LEDR2RGNDVCC1TRIG2ECHO3GND4UltrasonicSensor1HC-SR04GP01GP12GND_13GP24GP35GP46GP57GND_28GP69GP710GP811GP912GND_313GP1014GP1115GP1216GP1317GND_418GP1419GP1520GP1621GP1722GND_523GP1824GP1925GP2026GP2127GND_628GP2229RUN30GP2631GP2732GND_733GP2834ADC_VREF353V3_(OUT)363V3_EN37GND_838VSYS39VBUS40TEST_POINT1TP1TEST_POINT2TP2TEST_POINT3TP3TEST_POINT4TP4TEST_POINT5TP5TEST_POINT6TP6Debugger1RASPBERRY_PI_PICO_2WGND+1-2RightMotor1Motor_DC+1-2RightMotor2Motor_DC+1-2LeftMotor2Motor_DC+1-2LeftMotor1Motor_DCGNDStartButton1SW_PushESP32-CAMGND@1P$1GPIO1P$2GPIO3P$33V3/5VP$4GND@2P$5GPIO0P$6GPIO16P$73V3P$85VP$9GND@3P$10GPIO12P$11GPIO13P$12GPIO15P$13GPIO14P$14GPIO2P$15GPIO4P$16U2ESP32-CAMR3RR4RGNDPWM1+2-3ServoMotor1Motor_ServoGP01GP12GND_13GP24GP35GP46GP57GND_28GP69GP710GP811GP912GND_313GP1014GP1115GP1216GP1317GND_418GP1419GP1520GP1621GP1722GND_523GP1824GP1925GP2026GP2127GND_628GP2229RUN30GP2631GP2732GND_733GP2834ADC_VREF353V3_(OUT)363V3_EN37GND_838VSYS39VBUS40TEST_POINT1TP1TEST_POINT2TP2TEST_POINT3TP3TEST_POINT4TP4TEST_POINT5TP5TEST_POINT6TP6Target1RASPBERRY_PI_PICO_2WGNDSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U1L298N12BZ1BuzzerGNDGND1VCC2SCL3SDA4RST5DC6OLED1OLED_SSD1306_SPIRXTXR4RGNDServoMotor1Motor_ServoPWM1+2-3GNDU2ESP32-CAMGND@1P$1GPIO1P$2GPIO3P$33V3/5VP$4GND@2P$5GPIO0P$6GPIO16P$73V3P$85VP$9GND@3P$10GPIO12P$11GPIO13P$12GPIO15P$13GPIO14P$14GPIO2P$15GPIO4P$16GNDR2RGNDGNDStopButton1SW_PushGNDU1L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15BZ1Buzzer12GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/schematics_scanny.svg b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/schematics_scanny.svg new file mode 100644 index 00000000000..c2eb84669c5 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/antonia_maria.anastasiu/schematics_scanny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/coffee_machine.svg b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/coffee_machine.svg new file mode 100644 index 00000000000..b1fb1906d1f --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/coffee_machine.svg @@ -0,0 +1,18842 @@ + + + +SVG Image created as coffee_machine.svg date 2026-05-07T17:14:51 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.1 +KiCad E.D.A. 10.0.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: coffee_machine.kicad_sch +File: coffee_machine.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5V +5V + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW3 +SW3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Americano +Americano + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J1 +J1 + + + + + + + + + + +Servo SG90 +Servo SG90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D1 +D1 + + + + + + + + + + + + + + + + + +1N4007 +1N4007 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + +R2 +R2 + + + + + + + + + + + + + + + + + + + + + +10K kOhm +10K kOhm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + +1 + + + + + + + + + + + +2 + +2 + + + + + + + + + + + + + +BZ1 + +BZ1 + + + + + + + + + + + + + + + + + + + + + + + + + + + +Buzzer + +Buzzer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12V +12V + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + +SW1 +SW1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Liquid level sensor +Liquid level sensor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3 +3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW4 +SW4 + + + + + + + + + + + + + + + + + + + + + + + + + + +Double espresso +Double espresso + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + + +2 + +2 + + + + + + + + + + + + + + + + +3 + +3 + + + + + + + + + + + + + + + +Q1 +Q1 + + + + + + + + + + + + + + + + + + + + + + + + + + +IRF3205 +IRF3205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + +R1 +R1 + + + + + + + + + + + + + + + + +1kOhm +1kOhm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++3.3V ++3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++5V ++5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + +J2 +J2 + + + + + + + + + + + + + + + +I2C Screen +I2C Screen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EN/RESET +EN/RESET + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +5V +5V + + + + + + + + + + + + + + + + + + + +14 +14 + + + + + + + + + + + + + +3V3 +3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +GPIO4/MTMS +GPIO4/MTMS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +GPIO5/MTDI +GPIO5/MTDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +GPIO6 +GPIO6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +GPIO7 +GPIO7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO0 +GPIO0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + + +GPIO1 +GPIO1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO8/BOOT +GPIO8/BOOT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO10 +GPIO10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO11 +GPIO11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + + + +GPIO2 +GPIO2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 +12 + + + + + + + + + + + + + + + + + + + + +GPIO3 +GPIO3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +13 +13 + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +15 +15 + + + + + + + + + + + + + + + + + + + + + + + + + + + +NC +NC + + + + + + + + + + + + + + + + + + + + +16 +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +NC +NC + + + + + + + + + + + + + + + + + + + + +17 +17 + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO12/USB_D- +GPIO12/USB_D- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO13/USB_D+ +GPIO13/USB_D+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 +21 + + + + + + + + + + + + + + + + + + + + +GPIO9/BOOT +GPIO9/BOOT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 +22 + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO18 +GPIO18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +23 +23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO19 +GPIO19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + + + + +GPIO20 +GPIO20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO21 +GPIO21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO22 +GPIO22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 +27 + + + + + + + + + + + + + + + + + +GPIO23 +GPIO23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +28 +28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO15/JTAG +GPIO15/JTAG + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO17/U0RXD +GPIO17/U0RXD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +30 +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO16/U0TXD +GPIO16/U0TXD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +31 +31 + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 +32 + + + + + + + + + + + + + + + + + + + + + + + + + +U1 +U1 + + + + + + + + + + + + + + +ESP32-C6-DevKitC-1 +ESP32-C6-DevKitC-1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ++12V ++12V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +L1 +L1 + + + + + + + +Solenoid 12V +Solenoid 12V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW2 +SW2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Espresso +Espresso + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/hardware_1.webp b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/hardware_1.webp new file mode 100644 index 00000000000..ea3aef7a447 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/hardware_1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/index.md b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/index.md index 2c70e30bc16..806fbc3fba3 100644 --- a/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/artem.lebedev/index.md @@ -43,6 +43,10 @@ All components share a common ground. The 12V rail powers the solenoid valve and ### Week 5 - 11 May +Awaiting arrival of remaining components, added minor changes in the hardware by replacing 100 Ohm resistor for 1K and 10K ones and IRF540N transistor for IRF3205PBF as well as GPIO's of some devices; also the power supply of solenoid been changed to direct supply from adaptor. + +![Hardware_1](hardware_1.webp) + ### Week 12 - 18 May ### Week 19 - 25 May @@ -59,40 +63,39 @@ Coffee powder is dispensed through a mechanical gate controlled by the SG90 serv | ESP32-C6 GPIO | Function | Connected To | |---|---|---| -| GPIO2 | Button – Espresso | Tactile button → GND | -| GPIO3 | Button – Double Espresso | Tactile button → GND | -| GPIO4 | Button – Americano | Tactile button → GND | -| GPIO5 | Solenoid valve control | IRF540N Gate (via 100Ω) | -| GPIO6 | I2C SCL | SSD1306 SCL | -| GPIO7 | I2C SDA | SSD1306 SDA | -| GPIO8 | Servo PWM (LEDC) | SG90 signal wire | -| GPIO9 | Water level sensor | Float switch → GND | +| GPIO23 | Button – Espresso | Tactile button → GND | +| GPIO22 | Button – Double Espresso | Tactile button → GND | +| GPIO21 | Button – Americano | Tactile button → GND | +| GPIO5 | Solenoid valve control | IRF3205 Gate (via 1KΩ) | +| GPIO20 | I2C SCL | SSD1306 SCL | +| GPIO19 | I2C SDA | SSD1306 SDA | +| GPIO2 | Servo PWM (LEDC) | SG90 signal wire | +| GPIO1 | Water level sensor | Float switch → GND | +| GPIO18 | Buzzer | Active buzzer | | 3.3V | Power | SSD1306 VCC, SG90 VCC, Float switch | | GND | Common ground | All GND rails | ### Schematics - +![KiCAD schematics](coffee_machine.svg) ## Bill of Materials | Device | Usage | Price | |---|---|---| | ESP32-C6 | Main microcontroller | 50 RON | -| Solenoid Valve 12V N/C | Water flow control | 25 RON | -| IRF540N MOSFET | Solenoid valve driver | 2.5 RON | -| Resistor 100Ω | Gate resistor for MOSFET | 0.5 RON | +| Solenoid Valve 12V N/C | Water flow control | 45 RON | +| IRF3205PBF MOSFET | Solenoid valve driver | 6 RON | +| Resistor 1KΩ and 10KΩ | 1 RON | | Servo SG90 | Coffee powder gate control | 13.5 RON | -| OLED SSD1306 0.96" I2C | Status display | 10 RON | -| Float Switch Liquid Level Sensor | Water tank monitoring | 25 RON | +| OLED SSD1306 0.96" I2C | Status display | 15 RON | +| Float Switch Liquid Level Sensor | Water tank monitoring | 30 RON | | Food-grade plastic container 1–2L (×2) | Water and coffee powder tanks | 30 RON | -| Silicone tube (thermoresistant) | Water delivery from tank to cup | 10 RON | -| Hose barb fitting | Tank outlet connector | 5 RON | +| Silicone tube (thermoresistant) | Water delivery from tank to cup | 25 RON | | Tactile push buttons (×3) | Mode selection | 5 RON | | Breadboard 830 points | Prototyping platform | 10 RON | | Dupont jumper wires (M-M, M-F set) | Component connections | 10 RON | -| DC barrel jack 5.5mm | Power supply connector | 2.5 RON | | 12V 2A DC power adapter | Powers solenoid valve | 20 RON | -| **TOTAL** | | **220 RON** | +| **TOTAL** | | **260.5 RON** | *** diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca.minca/index.md b/website/versioned_docs/version-fils_en/project/2026/bianca.minca/index.md index aff5263c2ea..7472b6dafe5 100644 --- a/website/versioned_docs/version-fils_en/project/2026/bianca.minca/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/bianca.minca/index.md @@ -50,12 +50,13 @@ The system architecture revolves around the **STM32 microcontroller (Nucleo boar ``` The system architecture revolves around the STM32 microcontroller (Nucleo board): -1. **Input:*User credentials are captured via a Keypad matrix for secure PIN entry. Vehicle proximity and parking spot occupancy are monitored asynchronously using IR sensors connected via External Interrupts (EXTI) to ensure zero-latency detection. +1. **Input:**User credentials are captured via a Keypad matrix for secure PIN entry. Vehicle proximity and parking spot occupancy are monitored asynchronously using IR sensors connected via External Interrupts (EXTI) to ensure zero-latency detection. 2. **Processing:** The STM32 validates the entered PIN against reservation data and manages the parking state logic. Using the Embassy framework, the system concurrently tracks the barrier's position, processes keypad input, and updates the real-time availability of parking spots. 3. **Output:** Movement is triggered via PWM (Pulse Width Modulation) to the Servomotor, which precisely actuates the barrier arm. Visual feedback is provided through a Multi-LED system: status indicators for the main gate and individual Red/Green LEDs to signal occupancy for each parking spot. ## Shematics -(Will be put here) +**KiCad Schematic** +![SmartPark Schematic](./schematic.svg) ## Hardware The system is centered around an STM32 Nucleo MCU. For input, I am using IR proximity sensors for vehicle detection and a 4x4 Matrix Keypad for secure PIN entry. Outputs consist of an SG90 Servo Motor driven by a PWM signal to actuate the barrier, alongside Red and Green LEDs for real-time status and occupancy feedback via digital GPIO. diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca.minca/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/bianca.minca/schematic.svg new file mode 100644 index 00000000000..f474f01d3d7 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/bianca.minca/schematic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture.webp b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture.webp new file mode 100644 index 00000000000..b7666309eda Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture_auracube.svg b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture_auracube.svg deleted file mode 100644 index f8bd7f56c4e..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/architecture_auracube.svg +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/index.md b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/index.md index 5615b602305..a2d2af4719d 100644 --- a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/index.md @@ -1,10 +1,10 @@ -# Project Name +# Aura Cube An interactive, IoT-enabled smart cube that is inspired by the classic Magic 8-Ball. :::info **Author**: Ilie Bianca-Ioana \ -**GitHub Project Link**: https://github.com/UPB-PMRust/fils-project-2026-biancaioana-ilie +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-biancaioana-ilie ::: @@ -20,7 +20,7 @@ I chose this project because it is a highly interactive and fun way to explore e ## Architecture The architecture is built around a single System-on-Chip that handles both peripheral control and networking. -![Aura Cube Architecture Schematic](./architecture_auracube.svg) +![Aura Cube Architecture Schematic](./architecture.webp) The Central Controller -> Raspberry Pi Pico 2W This is the core of the project. It acts as the central hub that processes all incoming sensor data, manages the power states, drives the display and LEDs, and handles the wireless internet connection. @@ -47,10 +47,7 @@ The Power Management System This isolates the raw battery from the sensitive microcontroller to ensure safe operation. - Batteries: -The raw, mobile energy source for the cube. - -- TP4056 with Protection: -Acts as the middleman. It takes the Battery Power safely in, handles recharging and protects the battery from over-discharging, and outputs a steady line of System Power to run the Pico. +The raw, mobile energy source for the cube. 3 AA Alcaline batteries connected in series which will send 4.5V to the Microcontroller. The External Network - ZenQuotes API: @@ -60,12 +57,14 @@ A remote web server. The Pico uses its onboard Wi-Fi chip to reach out to the in ## Log -### Week 5 - 11 May +### Week 7 - 10 April After my project was approved, I finalized the component list. Initially I was using an STM32 and an ESP32, but after receiving advice from my tutors, I decided to switch to a Raspberry Pi Pico 2W. I ordered everything, and began studying each component. I conducted a few experiments with the components to both test their functionality and learn more through practical exercises. ### Week 12 - 18 May +The KiCAD schematic is completed, featuring an upgraded design with dual 74HC595 shift registers. Both the code and the physical assembly development are currently underway. Furthermore, I've started taking the necessary measurements for the 3D modeling of the cube's exterior design. + ### Week 19 - 25 May ## Hardware @@ -74,11 +73,11 @@ The hardware setup centers around a Raspberry Pi Pico 2W, which serves as the ma To display the output, an OLED screen is wired to the Pico 2W. The OLED display, along with the motion and light sensors, communicate with the microcontroller. The system uses the ambient lux data from the BH1750 to dynamically adjust the OLED's display mode (dark or light contrast) based on the room's current lighting conditions. -Because the cube is a standalone IoT device, it is powered by rechargable batteries rather than a constant USB connection. To ensure stable operation and safe recharging, a TP4056 charging board with built-in protection is utilized. +Because the cube is a standalone IoT device, it is powered by batteries rather than a constant USB connection. ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Schematic](./schematic.webp) ### Bill of Materials @@ -89,8 +88,8 @@ Place your KiCAD or similar schematics here in SVG format. | [BH1750 Digital Light Sensor](https://www.optimusdigital.ro/en/sensors-light/bh1750-digital-light-sensor.html) | Ambient light sensing for display mode | 13 RON | | [0.96" SSD1306 (128x64) I2C](https://www.optimusdigital.ro/en/displays-oled/096-oled-display.html) | Displaying the quotes | 20 RON | | 5mm Clear Blue & Purple LEDs | Visual "thinking" feedback | 5 RON | -| 3.7V 1000mAh LiPo Battery | Mobile power supply | 20 RON | -| TP4056 with Protection | Battery charging board | 10 RON | +| 3xAA Alcaline Batteries | Mobile power supply | 20 RON | +| 74HC595 | IC | 5 RON | | Resistors (220 ohm), Wires, Breadboard | Basic electronic prototyping | 30 RON | @@ -110,3 +109,4 @@ Place your KiCAD or similar schematics here in SVG format. 1. [ZenQuotes API](https://zenquotes.io/) 2. [Embassy Framework Documentation](https://embassy.dev/) 3. [Raspberry Pi Pico W Rust Guide](https://reltech.substack.com/p/getting-started-with-rust-on-a-raspberry) +4. [Guide to Embedded Rust Programming on Raspberry Pi Pico 2 (RP2350)](https://pico.implrust.com/pico2-pinout.html) diff --git a/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/schematic.webp b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/schematic.webp new file mode 100644 index 00000000000..b69ee9276ac Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/bianca_ioana.ilie/schematic.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/box_3d_design.webp b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/box_3d_design.webp new file mode 100644 index 00000000000..3f57e1cf951 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/box_3d_design.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v2.webp b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v2.webp new file mode 100644 index 00000000000..a943d2a4008 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v3.webp b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v3.webp new file mode 100644 index 00000000000..6a7790ec298 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/hardware_v3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/index.md b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/index.md index c74f0f2000e..e8d0cc3ab25 100644 --- a/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/bogdan.micu2009/index.md @@ -129,6 +129,44 @@ The motivation for this project was to create a dedicated, self-contained physic 3. **USB connectivity** - Dropped the USB-C breakout board idea and switched to using the STM32 User USB port for PC - MCU communication. 4. **Firmware testing** - Extended the component testing code. 5. **New issue** - Battery wires need to be soldered before use. + + ### Week 9 (Development) + +- Started the actual development: +1. **Testing** - Wrote test code for the display, RTC Module and Rotary Encoder. +2. **Documentation** - Documented the crates that needed to be added for more security. + +### Week 10 (Development) + +- Continued the development process: +1. **Testing** - Added test modules and helpers for the fingerprint sensor. +2. **App flow** - Designed a State machine (Locked -> MenuBrowse -> ActionMenu -> ShowTotp) for the main use flow. + +### Week 11 (Development) + +- Continued the development process: +1. **Main** - Finalized the first main prototype, a flow that integrates all sensors and is a skeleton for future improvements. +2. **Power** - Removed the external battery (after soldering the cables and testing it) as the main power source. Instead, the device will receive power via USB. +3. **To do** - Improve security, add memory protection and data verification. + +### Week 12 (Development) + +- Continued the development process: +1. **Main** - Implemented memory protection, better security and data verification. Added a host CLI to send data through the terminal to the device. +2. **3D Design** - Created a 3D Box render to store all of the components, making it a true embedded device. +3. **To do** - Create a desktop app with GUI for easier usage. Improve overall app flow. + +### Week 13 (Development) + +- Continued the development process: +1. **Desktop App** - Added the desktop app that uses the host to add and update account details on the device. +2. **3D Print** - Printed the 3D Box and fit the components inside. The middle "floor" had to be removed because the cables did not fit properly. +3. **To do** - Improve the app flow, add UI animations. + +### Week 14 (Finishing touches) + +- Finalized the development process: +1. **In progress** - Updating the main code. ## Hardware @@ -166,10 +204,13 @@ The project centres on a NUCLEO-U545RE-Q development board as the microcontrolle ### Photos ![Hardware setup - NUCLEO-U545RE-Q with OLED display, Rotary Encoder, DS3231 RTC module, and breadboard](hardware.webp) +![Hardware setup V2 - Includes all sensors](hardware_v2.webp) +![Hardware setup V3 - The entire device sitting inside the 3D-printed box](hardware_v3.webp) ### Schematics ![Schematics](./AIO_BiometricHardwareSecurityKey_Micu_Bogdan.svg) +![3D Box Schematic](./box_3d_design.webp) ## Bill of Materials @@ -201,6 +242,14 @@ The project centres on a NUCLEO-U545RE-Q development board as the microcontrolle | [`embedded-hal`](https://crates.io/crates/embedded-hal) | Hardware abstraction traits | Common interface gluing drivers to the Embassy HAL | | [`hmac`](https://crates.io/crates/hmac) | HMAC generic implementation | Computes HMAC-SHA1 as required by the TOTP (RFC 6238) algorithm | | [`sha1-smol`](https://crates.io/crates/sha1-smol) | Minimal SHA-1 implementation (no-std) | SHA-1 digest used inside HMAC for TOTP | +| [`aes`](https://crates.io/crates/aes) | Pure Rust Advanced Encryption Standard (AES) | Encrypts and decrypts the password vault stored in the STM32's flash memory | +| [`cipher`](https://crates.io/crates/cipher) | Traits for cryptographic ciphers | Provides the generic traits required to securely operate the AES cipher | +| [`zeroize`](https://crates.io/crates/zeroize) | Securely zeros memory | Wipes the plaintext passwords and derived keys from RAM immediately after use to prevent memory-dump attacks | +| [`heapless`](https://crates.io/crates/heapless) | no_std data structures without dynamic allocation | Manages fixed-capacity buffers for passwords, account lists, and UI strings without needing a heap allocator | +| [`anyhow`](https://crates.io/crates/anyhow) | Flexible concrete error handling (for desktop app) | Simplifies error propagation and context management across UI events, file operations, and device communication | +| [`eframe`](https://crates.io/crates/eframe) | Official framework for the egui library | Renders the cross-platform immediate-mode desktop interface for adding, editing, and managing vault entries | +| [`serialport`](https://crates.io/crates/serialport) | Cross-platform serial port interface | Establishes a serial connection (UART over USB) to securely communicate and sync vault updates with the STM32 device | +| [`clap`](https://crates.io/crates/clap) | Command Line Argument Parser | Parses arguments, flags, and subcommands for the host CLI tool to manage and sync the hardware vault from the terminal | ## Links diff --git a/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/index.md b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/index.md index d21aeb1820e..7be60dca7ff 100644 --- a/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/index.md @@ -4,7 +4,7 @@ A touchless audio station that equalizes and controls music tracks using hand ge :::info **Author**: Mitrea Briana-Ștefania \ -**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-briana1012 +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-briana1012.git ::: ## Description @@ -33,13 +33,26 @@ The project is built on the STM32 Nucleo U545RE-Q using the Embassy asynchronous * Soldered extension pins to the sensors. * Reseached SAI pins. +### Week 20 - 26 April +* Reserched equilizer logic and perfboards for prototyping +* Re-soldered pins at 90 degrees. + +### Week 4 - 10 May +* Made a fully functioning hardware. +* Made KiCad schematic. +* Tested the sensor creates (they work). + ## Hardware The project uses a modular design with three "Sound Cubes" to separate sensors from the main control unit, preventing interference. +![Theremin Sound Station Hardware](poza_hardware.webp) + ### Schematics -The project was designed in Altium Designer. +The project was designed in KiCad 10.0. + +![Theremin Sound Station Schematic](theremin_sound_station.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/poza_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/poza_hardware.webp new file mode 100644 index 00000000000..5da121771ae Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/poza_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/theremin_sound_station.svg b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/theremin_sound_station.svg new file mode 100644 index 00000000000..86b1c850462 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/briana.mitrea/theremin_sound_station.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.0Rev:Size: A4Id: 1/1Title:File: theremin_sound_station.kicad_schSheet: /123456J3Conn_01x06GND3XSHUT5GPIO17SDA9SCL10VCC11VL53L0XRSTJ4AudioJack3GND123456789101112ST7735+microSDConn_01x12GND+5VVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETx+3V3+3V3GND1234J5Conn_01x04GNDGND+5V123456789J2Conn_01x09+3.3VVi0GND1VCC2SDA3SCL4INT5APDS-9960WSELVinAGNDDINPLLBCLKLoutMUTEUDA1334ASCLKSF1DEEM3V0GNDDi5VSD_MISOSD_CSSD_MOSISF0RESETLEDVCCGNDSD_SCKRoutDoGNDCSSCKSDAA0J2Conn_01x09123456789J3Conn_01x06123456J4AudioJack3RST \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/index.md b/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/index.md index 90977c0f316..1ffd76f13e6 100644 --- a/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/index.md @@ -35,6 +35,11 @@ The STM32 NUCLEO-U545RE-Q and the first batch of components arrived. After check ### Week 20 - 26 April Started putting the project documentation together. Created the architecture diagram showing how all the components connect to the microcontroller. Also began working on the KiCad schematic. +### Week 27 April - 3 May +Received the last order of components and finished the KiCad schematic. + +### Week 4 - 10 May +Started working on hardware. ## Hardware @@ -43,7 +48,7 @@ The hardware is built around the STM32 NUCLEO-U545RE-Q microcontroller, which co ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![img](kicad_rustrescue.svg) ### Bill of Materials @@ -73,8 +78,10 @@ The format is | [Red LED (×2)](https://ardushop.ro/ro/led-uri/293-467-led-5mm.html#/4-culoare-rosu) | Emergency flashing lights | [0.60 RON](https://ardushop.ro/ro/led-uri/293-467-led-5mm.html#/4-culoare-rosu) | | [Transistor NPN 2n2222](https://www.optimusdigital.ro/en/transistors/935-transistor-npn-2n2222-to-92.html) | Switches the water pump circuit | [0.17 RON](https://www.optimusdigital.ro/en/transistors/935-transistor-npn-2n2222-to-92.html) | | [100nF Capacitor](https://ardushop.ro/ro/condensatori-tht/571-948-condensator-ceramic-50v-alege-valoarea.html#/348-capacitate-100_nf) | Filters noise from the water pump | [0.24 RON](https://ardushop.ro/ro/condensatori-tht/571-948-condensator-ceramic-50v-alege-valoarea.html#/348-capacitate-100_nf) | -| [1KΩ Resistor](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | Limits current to transistor base | [0.10 RON](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | +| [1KΩ Resistor (×2)](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | Limits current to transistor base and voltage divider for HC-SR04 ECHO pin | [0.20 RON](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | +| [2KΩ Resistor](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | Voltage divider for HC-SR04 ECHO pin | [0.10 RON](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | | [330Ω Resistor (×2)](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | Limits current to LEDs | [0.20 RON](https://www.optimusdigital.ro/en/resistors/13607-resistor-set-110-resistors.html?search_query=resistor+330&results=21) | +| [Diode 1N4007](https://www.optimusdigital.ro/en/diodes/7457-dioda-1n4007.html) | Flyback protection for water pump transistor | [0.49 RON](https://www.optimusdigital.ro/en/diodes/7457-dioda-1n4007.html) | | [Breadboard](https://www.aliexpress.com/item/1005008788953967.html?spm=a2g0o.order_list.order_list_main.41.c53218027nnulr) | Prototyping connections | [19.47 RON](https://www.aliexpress.com/item/1005008788953967.html?spm=a2g0o.order_list.order_list_main.41.c53218027nnulr) | | [Jumper wires](https://www.optimusdigital.ro/en/wires-with-connectors/93-separated-male-male-wires-20-cm-10-p.html?search_query=Separated+Male-Male+Wires+20+cm+-+10+p&results=18) | Electrical connections | [5.95 RON](https://www.optimusdigital.ro/en/wires-with-connectors/93-separated-male-male-wires-20-cm-10-p.html?search_query=Separated+Male-Male+Wires+20+cm+-+10+p&results=18) | | [18650 Battery (×2)](https://milnik.ro/format-18650/8173292-nk512-m29-lg-lg-inr18650-m29-2850mah-10a-7417940524771.html) | Power source | [20.00 RON](https://milnik.ro/format-18650/8173292-nk512-m29-lg-lg-inr18650-m29-2850mah-10a-7417940524771.html) | diff --git a/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/kicad_rustrescue.svg b/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/kicad_rustrescue.svg new file mode 100644 index 00000000000..5ab5e03a5b1 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/carmen_ana.ionita/kicad_rustrescue.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 1/1Title: File: RustRescue.kicad_schSheet: /GND1VCC2SCL3SDA4U3ER_OLEDM0.91_1x-I2CVCCGNDGNDGNDR52kVCC1GND2DOUT3U7FlameSensor_ModuleC1100nFVCCVCCGNDVCCCBEQ1NPNGNDVCC1GND2DOUT3U6FlameSensor_ModuleGNDGNDR41kVCCVCCVCCGNDGNDVCCVCCVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQGNDVCCVCCVCCVCCVCCVCCGNDVCC1GND2DOUT3U8FlameSensor_ModuleGNDBT17.4VGNDVIN1OUT2GND3FB4ON/OFF5U9LM2596S-5R2330VCCGND12BZ1BuzzerGNDR3330VCCR11kGNDD31N400712J6Water PumpD1LEDGNDD2LEDGNDGNDGNDGND+1-2M2Motor_DC+1-2M1Motor_DCSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298NVCC1GND2AOUT3DOUT4U5MQ2_Module+1-2M4Motor_DCGNDGND+1-2M3Motor_DCGNDVCC1TRIG2ECHO3GND4U4HC-SR04GNDR52kGNDR41kGNDU3ER_OLEDM0.91_1x-I2CGND1VCC2SCL3SDA4GNDU1STM32U545RETxQVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64GNDGNDGNDVCCVCCVCCVCCVCCVCCVCCVCCVCCVCCGNDBT17.4VBZ1Buzzer12GNDR11kD1LEDD2LEDGNDGNDGNDM2Motor_DC+1-2M1Motor_DC+1-2U2L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U5MQ2_ModuleVCC1GND2AOUT3DOUT4M4Motor_DC+1-2GNDGNDM3Motor_DC+1-2GNDGNDGNDGNDGNDC1100nFQ1NPNCBEGNDU6FlameSensor_ModuleVCC1GND2DOUT3GNDVCCVCCGNDVCCGNDU8FlameSensor_ModuleVCC1GND2DOUT3U7FlameSensor_ModuleVCC1GND2DOUT3 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/index.md b/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/index.md index 0ce6fcd31fe..95c3bc86e01 100644 --- a/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/index.md @@ -78,7 +78,7 @@ The hardware setup includes multiple sensors, each covering a different security ## Schematics -Place your KiCad or similar schematics here in SVG format. +![Schematics](./kicad_project.svg) ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/kicad_project.svg b/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/kicad_project.svg new file mode 100644 index 00000000000..45e88a128a5 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/claudia.cranganu/kicad_project.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/imagine.webp b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/imagine.webp new file mode 100644 index 00000000000..7d8820e7c27 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/imagine.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/index.md b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/index.md index 0e3e4366b5d..bca661acf9a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/index.md @@ -41,6 +41,14 @@ Downloaded Fusion, learned how to use it and designed chassis and legs. The system uses a Raspberry Pi Pico W (RP2040) as the main controller and for WiFi, a PCA9685 16-channel as a servo driver, 12 MG90S servos as leg joints, a MPU6050 (GY-521) gyroscope for body orientation sensing and a 7.4V 2S LiPo battery as power source. +### Schematics + +![KiCad Schematic](./spider_robot_design.svg) + +### Photos + +![Photo IRL1](./imagine.webp) + ## Bill of Materials | Device | Usage | Price | diff --git a/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/spider_robot_design.svg b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/spider_robot_design.svg new file mode 100644 index 00000000000..7af94fddfe9 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/cristian.gociu0401/spider_robot_design.svg @@ -0,0 +1 @@ +SVG Image created as spider_robot_design.svg date 2026-05-10T17:20:41 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Spider Robot SchematicFile: spider_robot_design.kicad_schSheet: /BT1BatteryPWM1+2-3M6Motor_ServoPWM1+2-3M2Motor_ServoPWM1+2-3M4Motor_ServoPWR_FLAGVIN1VOUT2FB3~{ON}/OFF4GND8U5GL2576-5.0SF8DRC3100nFPWM1+2-3M7Motor_ServoPWM1+2-3M9Motor_ServoPWM1+2-3M11Motor_ServoC1100nFGPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico_WCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050BT2BatteryPWM1+2-3M3Motor_Servo+5VVCC1GND2SDA3SCL4OE5V+6CH07CH18CH29CH310CH411CH512CH613CH714CH815CH916CH1017CH1118U1C410microF12SW1SW_SPSTGND1VCC2SCL3SDA4U3ER_OLEDM0.91_1x-I2CPWM1+2-3M5Motor_ServoVIN1VOUT2FB3~{ON}/OFF4GND8U4GL2576-5.0SF8DRC2100nFVIN1VOUT2FB3~{ON}/OFF4GND8U6GL2576-5.0SF8DRPWM1+2-3M10Motor_ServoPWM1+2-3M8Motor_ServoPWM1+2-3M12Motor_ServoPWM1+2-3M1Motor_ServoCH8CH11GNDV_ServoCH9CH7V_BatV_Bat3V3V_BatCH8SCLSDAGNDGNDV_ServoCH5CH4CH3CH6GND3V3GNDCH1GNDSCLSDACH0CH2V_LogicGND3V33V3CH11V_ServoSDA3V3V_LogicGNDCH3CH103V3GNDCH4SCLSCL3V3SDACH7GNDGNDV_ServoCH5CH6CH2CH0CH1CH10CH9U5GL2576-5.0SF8DRVIN1VOUT2FB3~{ON}/OFF4GND8U4GL2576-5.0SF8DRVIN1VOUT2FB3~{ON}/OFF4GND8U6GL2576-5.0SF8DRVIN1VOUT2FB3~{ON}/OFF4GND8 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/hardware_smart_garage.webp b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/hardware_smart_garage.webp new file mode 100644 index 00000000000..c0aa3bdf94b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/hardware_smart_garage.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/index.md b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/index.md index f4ddb550826..e7b9330d0b4 100644 --- a/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/index.md @@ -46,14 +46,14 @@ This system is built using the **STM32 NUCLEO-U545RE-Q** development board, whic ## Log - - ### Week 3-5 I researched several possible project ideas and analyzed different concepts before choosing the smart garage system. After deciding on the final direction, I started identifying the hardware components needed for implementation. I looked into sensor modules, networking options, actuator control, user input methods, and visual feedback components compatible with the NUCLEO-U545RE-Q board. ### Week 8 During this week, I received the hardware components and tested them individually. - + +### Week 11 +I assembled all the components on the breadboard, connected them according to the planned circuit, and created the complete circuit schematic in KiCad. ## Hardware @@ -61,7 +61,8 @@ The project is based on the **STM32 NUCLEO-U545RE-Q** development board, used as ### Schematics -To +![Kicad schematics](smart_garage.webp) +![hardware photo](hardware_smart_garage.webp) ### Bill of Materials @@ -75,7 +76,6 @@ To | DC Motor + Fan Blades | Ventilation system simulation | Already owned | | Push Buttons | Manual fan control | Already owned | | LED Kit | Visual system status indicators | [~19 RON](https://www.emag.ro/kit-200-buc-led-3mm-5mm-de-diferite-culori-ai707/pd/D4DJYTMBM/) | -| Limit Switches | Garage door position detection | 10 RON | | Breadboard MB102 | Prototyping and circuit assembly | 17 RON | | Jumper Wire Kit | Electrical connections | [47 RON](https://www.emag.ro/set-cabluri-dupont-trexora-120-piese-20cm-multicolor-pentru-proiecte-electronice-dzme069/pd/DRCFXS3BM/) | | Resistor Kit | LED current limiting and circuits | [38 RON](https://www.emag.ro/set-600-rezistori-sinbinta-set-rezistori-1-4w-10-1m-30-tipuri-toleranta-1-20-de-bucati-pentru-fiecare-valoare-ideal-pentru-proiecte-electronice-si-ingineri-metal-130-22-80mm-multicolor-ww-462/pd/DGZ93K3BM/) | diff --git a/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/smart_garage.webp b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/smart_garage.webp new file mode 100644 index 00000000000..f5f153fe1c2 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/cristiana.manole05/smart_garage.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/hardware.webp new file mode 100644 index 00000000000..ff7dba23b09 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/index.md b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/index.md index 41fc69ef2a2..08bf3423fb5 100644 --- a/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/index.md @@ -38,7 +38,7 @@ The project uses: - **WS2812B LED strip** - **LDR** - **SSD1306 OLED** - +![hardware](./hardware.webp) ## Schematics ![Project Schematic](./schematica.webp) diff --git a/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/schematica.webp b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/schematica.webp index 2102681415f..38235a8b3c1 100644 Binary files a/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/schematica.webp and b/website/versioned_docs/version-fils_en/project/2026/cristina.sandru/schematica.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_2d.svg b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_2d.svg new file mode 100644 index 00000000000..69ee6155f3d --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_2d.svg @@ -0,0 +1 @@ +SVG Image created as RustShips v1.0-F_Fab.svg date 2026-05-10T03:17:12 Image generated by PCBNEWSW8SW12SW1D3SW5SW7SW10SW2D6SW3D2D4D1SW11SW9SW4ST7796SDISP1H1D5SW6Nucleo-641151814C1R3D8KR5D7U1Transceiver 2.4GHzU4VIN-VOUT+BuckBoost to 3V3VIN+VOUT-ENQ3R11J2BZ1U3+Out+5vB+Battery Charger 1AUSBB-GNDOut--J3C5R2R1R10C4R13Q2R4J1C2R9Q1R7R6R14R12R8C3C1R3KD8R5D7U1U4Q3R11CN10J2BZ1J3C5R2R1R10C4R13Q2R4CN7J1C2R9Q1R7R6R14R12R8C3SW8SW12SW1D3SW5SW7SW10SW2D6SW3D2D4D1SW11SW9SW4DISP1J2SD Card SlotJ44" TFT DisplayD5SW6 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_b.webp b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_b.webp new file mode 100644 index 00000000000..4e4edba5e58 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_b.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_f.webp b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_f.webp new file mode 100644 index 00000000000..f66e6e506d4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/pcb_3d_f.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/schematic.svg new file mode 100644 index 00000000000..795e1067998 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/images/schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-05-03KiCad E.D.A. 10.0.1Rev: v.May2026Size: A4Id: 1/1Title: RustShips v1.0File: RustShips v1.0.kicad_schSheet: /MPA - UNSTPBMîrza DanielD7LEDPWR_FLAGGNDGNDD4LEDD81N4007PWR_FLAG+3V3R4220+3V3R3220R1010kD2LEDD1LEDR1220+3V3R2220R1122kR12100k123Q32N2222R13220kR6220D6LEDGNDR7220Micro USBPortIN+1IN-2OUT+3OUT-4B+5B-6U3TP4056_ModuleGND+3V3R1410k123Q1AO3401+3V3GNDGNDGNDR522012J3JST-PH 2.0mmD5LEDGNDGND+5VD3LEDUSB-CPortV1G2D-3D+4U2USB_ModuleGND12BZ1BuzzerVDDBT1LiPo Battery123Q2AO3401GNDC1100nF+3V3C510uFGND1VCC2CE3~{CSN}4SCK5MOSI6MISO7IRQ8U1NRF24L01_SPIC410uFC310uFC21uFGND+3V3+3V3VIN+1VIN-2VOUT+3VOUT-4EN5U4BuckBoost_3V15_to_3V3R910kR810kILI9341SPI InterfaceSD Card Slot480x320 LCDTOUCHVCC1GND2~{CS}3~{RESET}4DC/RS5SDI(MOSI)6SCK7LED8SDO(MISO)9T_CLK10~{T_CS}11T_DIN12T_DO13~{T_IRQ}14~{SD_CS}15SD_MOSI16SD_MISO17SD_SCK18DISP1ST7796S+3V3GNDGNDGNDA1234567891011121314151617181920212223242526272829303132333435363738J2CN10GND1234567891011121314151617181920212223242526272829303132333435363738J1CN7+BATTVDDAGNDSW12BTN_PushGNDSW1BTN_PushGNDGNDSW4BTN_PushSW3BTN_PushSW6BTN_PushSW5BTN_PushGNDGNDGNDGNDSW9BTN_PushSW10BTN_PushGNDSW7BTN_PushSW8BTN_PushGNDGNDSW11BTN_PushSW2BTN_PushGNDSPI1_MOSILED_LOW_BATTLED_POWERLED_SOUNDSPI1_SCKLED_GAME_CTRLBTN_L_LEFTTFT_DCTFT_RSTBTN_L_RIGHT~{RST}BZ_PWMVBAT_RAWTFT_CSSPI1_MOSINRF_CENRF_IRQBTN_R_CRSBTN_R_CIRADC_VBAT_SENSEBTN_R_SQRBTN_POWERMOS_GATESPI1_SCKLED_SOUNDBTN_R_TRITFT_RSTTFT_DCSPI1_MISONRF_CSNVBAT_GNDVBAT_DIVVBAT_RAWTFT_BLPWR_LATCHE5VBTN_R_MAINLED_GAME_CTRLTFT_CSLED_LOW_BATTBTN_SOUNDBTN_POWERUSB_5VPWR_LATCHUSB_GNDBTN_L_MAINVBAT_GNDBTN_L_UPBTN_L_DOWNVBAT_PROTBTN_L_UPBTN_L_LEFTBTN_L_RIGHTBTN_L_DOWNBTN_SOUNDLATCH_BASEBTN_R_CRSBTN_R_TRIVBAT_DIVBTN_R_CIRBTN_R_MAINBTN_R_SQRADC_VBAT_SENSEVIN_REGSPI1_MOSILED_POWERNRF_CETOUCH_CSNRF_CSNTFT_BLNRF_IRQTOUCH_IRQBZ_PWMSD_CSSPI1_SCKSPI1_MISOSPI1_MOSISPI1_MOSITOUCH_IRQSPI1_MISOTOUCH_CSSPI1_MISOIOREFSPI1_MISOSPI1_SCKBTN_L_MAINSPI1_SCKSD_CSVBAT_PROTTransceiverPassive BuzzerLEDsSTM - Morpho PinsButtonsPower ManagementDisplayR6220D6LEDD7LEDR7220+3V3R1410kQ1AO3401123+3V3GNDGNDGNDR5220D5LEDBT1LiPo BatteryR13220kC510uFC410uFC310uFC21uFPWR_FLAGD81N4007PWR_FLAGGND+3V3+3V3D4LED+3V3R4220D2LEDD1LEDR1220R2220D3LEDR3220VDDDISP1ST7796SVCC1GND2~{CS}3~{RESET}4DC/RS5SDI(MOSI)6SCK7LED8SDO(MISO)9T_CLK10~{T_CS}11T_DIN12T_DO13~{T_IRQ}14~{SD_CS}15SD_MOSI16SD_MISO17SD_SCK18+3V3GNDGNDA+BATTVDDA \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/index.md b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/index.md index 0a9905b046a..b7992278dd1 100644 --- a/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/daniel.mirza/index.md @@ -56,20 +56,47 @@ Each game action is serialized into a `NetworkMessage` and sent to the opponent. ```mermaid graph TD - subgraph "Handheld Unit (x2)" - - MCU["STM32U545RE Nucleo"] - DISP["4.0 Inch ST7796S Display"] - TOUCH["XPT2046 Touch"] - RADIO["NRF24L01+ Radio"] - BUZZ["Passive Buzzer"] - BTNS["Action Buttons"] - - MCU -->|SPI Bus| DISP - MCU -->|SPI Bus| TOUCH - MCU -->|SPI Bus| RADIO - MCU -->|PWM| BUZZ - BTNS -->|GPIO Interrupts| MCU + subgraph "Handheld Unit x2" + + subgraph "Power Management" + BATT["3.7V LiPo Battery"] + TP4056["TP4056 Charger USB-C"] + LATCH["P-MOSFET Auto-Power Latch"] + REG["Buck-Boost Converter 3.3V"] + + BATT <--> TP4056 + TP4056 --> LATCH + LATCH --> REG + end + + subgraph "Core & Peripherals" + MCU["STM32U545RE Nucleo"] + DISP["4.0 Inch ST7796S Display"] + TOUCH["XPT2046 Touch"] + RADIO["NRF24L01+ Radio"] + BUZZ["Passive Buzzer"] + BTNS["Action Buttons"] + LEDS["Status & Game LEDs"] + end + + %% Power Routing + REG == +3V3 Power ==> MCU + REG -. +3V3 Power .-> DISP + REG -. +3V3 Power .-> RADIO + + %% Data Routing + MCU -->|SPI Bus| DISP + MCU -->|SPI Bus| TOUCH + MCU -->|SPI Bus| RADIO + + MCU -->|PWM| BUZZ + MCU -->|GPIO| LEDS + BTNS -->|GPIO Interrupts| MCU + + %% The Latch Control + MCU -->|GPIO Keep-Alive| LATCH + BTNS -. Physical Power Button .-> LATCH + end RADIO <-->|2.4GHz Wireless| RADIO2["Opponent Device"] @@ -90,12 +117,21 @@ graph TD - Set up the Cargo workspace with `game-core`, `simulator`, and `embassy-app` crates - Implemented the `grid.rs`, `ship.rs`, and `state.rs` (in `game-core`) - Received the ordered TFT modules -- Ordered two NUCLEO-U545RE-Q boards +- Ordered two NUCLEO-U545RE-Q boards and the NRF24L01+ modules - Passed the Documentation Milestone ### Week 10 - 11 -- _to be continued..._ +- Received the other ordered components +- Learned to use KiCad Software by reading and watching tutorials +- Started to work on KiCAD for the PCB +- Finished the hardware prototype using breadboards and jumpers +- Completed the KiCad schematic +- Assigned and generated new footprints for KiCAD components +- Completed the mecanical placement and layout of the PCB +- Ordered and unpacked the last components needed +- Completed the rouding on the PCB +- Passed the Hardware Milestone ### Week 12 - 13 @@ -114,21 +150,43 @@ Each player's device consists of: ### Schematics -_KiCAD schematic to be uploaded later..._ +#### 1. Schematic Design + +The schematic integrates the STM32 Nucleo, nRF24L01+ transceiver, SPI TFT Display, and a custom P-Channel MOSFET auto-power latch circuit for battery management. + +![System Schematic](./images/schematic.svg) +*Figure 1: Full system schematic including power management, MCU, and peripherals.* + +#### 2. PCB Layout and Routing (2D) + +The board has been floorplanned to accommodate a comfortable handheld form factor. Critical components (like the nRF24 decoupling capacitors) have been placed as close to their target pins as possible. + +![2D PCB Routing](./images/pcb_2d.svg) +*Figure 2: Current 2-layer copper routing (Front: Red, Back: Blue).* + +#### 3. 3D Render + +This is the physical representation of the board, which will be used to design the 3D-printed enclosure. + +![3D PCB Render - Front](./images/pcb_3d_f.webp) +![3D PCB Render - Back](./images/pcb_3d_b.webp) +*Figure 3: 3D visualization of the assembled PCB (front and back).* ### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [STM32U545RE Nucleo-64](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&countryCode=RO¤cyCode=RON) | Main microcontroller board (×2) | 130 RON × 2 | -| [4.0" TFT LCD ST7796S 320×480](https://www.amazon.es/-/en/gp/product/B0CQ87KN3Q/ref=ox_sc_act_title_1?smid=A3E5QOOXTLF93M&th=1) | Touchscreen display (×2) | 130 RON × 2 | -| NRF24L01+ module* | 2.4GHz wireless link (×2) | __ RON × 2 | -| Passive buzzer* | Audio feedback (×2) | __ RON × 2 | -| Tactile push buttons* | Navigation + action input (×2 sets) | __ RON × 2 | -| Jumper wires + breadboard | Prototyping connections | ~30 RON | -| **Total (estimated)** | | **~~ 550 RON** | - -_*to be ordered..._ +| [STM32U545RE Nucleo-64](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html#overview) | Main microcontroller board (×2) | [130 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D&countryCode=RO¤cyCode=RON) × 2 | +| [4.0" TFT LCD ST7796S 320×480](https://www.lcdwiki.com/4.0inch_SPI_Module_ST7796) | Touchscreen display (×2) | [130 RON](https://www.amazon.es/-/en/gp/product/B0CQ87KN3Q/ref=ox_sc_act_title_1?smid=A3E5QOOXTLF93M&th=1) × 2 | +| [NRF24L01+ module](https://www.handsontec.com/dataspecs/module/NRF24L01+.pdf) | 2.4GHz wireless link (×2) | [7 RON](https://www.optimusdigital.ro/ro/ism-24-ghz/48-modul-tranceiver-nrf24l01-24-ghz.html?search_query=NRF24L01++module&results=5) × 2 | +| [TP4056 Charger module]() | Charger module (x2) | [4 Ron](https://www.optimusdigital.ro/ro/electronica-de-putere-incarcatoare/7534-incarcator-tp4056-cu-micro-usb-pt-baterie-lipo-1a-cu-protectie-pentru-circuite.html?search_query=TP4056+&results=4) × 2 | +| [Buck-Boost 3V3]() | Constant and regulated 3.3V voltage (x2) | [15 Ron](https://www.emag.ro/convertor-buck-boost-elektroweb-3v-15v-la-3-3v-rosu-3-h-051/pd/D8HNPBYBM/) × 2 | +| [Tantalum Capacitors]() | Help the radio transmission | [4 RON]() × 6 | +| [LEDs]() | Illumination + feedback | [4 Ron](https://www.optimusdigital.ro/ro/optoelectronice-led-uri/11629-led-portocaliu-0603.html?search_query=0104110000072290&results=1) × 3 | +| [Resisistors]() | Leds and power management | [20 RON](https://www.optimusdigital.ro/ro/componente-electronice-rezistoare/638-set-de-rezistoare-smd-0805.html?search_query=0104110000003560&results=1) | +| [Push buttons]() | Navigation + action input (×2 sets) | [0.36 RON](https://www.optimusdigital.ro/en/buttons-and-switches/1119-6x6x6-push-button.html?search_query=button&results=379) × 20 | +| [Jumper wires]() + [breadboard](https://www.optimusdigital.ro/en/breadboards/13244-breadboard-175-x-67-x-9-mm.html) | Prototyping connections | [~12 RON]() | +| **Total (estimated)** | | **~ 650 RON** | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/hardware_sunstirling.webp b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/hardware_sunstirling.webp new file mode 100644 index 00000000000..feb4e0e7a3c Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/hardware_sunstirling.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/ilustratiefinalgata.webp b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/ilustratiefinalgata.webp new file mode 100644 index 00000000000..bc4e134bb21 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/ilustratiefinalgata.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/index.md b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/index.md new file mode 100644 index 00000000000..f6a0c5ca1e2 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/index.md @@ -0,0 +1,77 @@ + +# Project Name Solar Tracking "Sun Stirling" System +A renewable energy project utilizing adaptive mirrors and a Stirling engine to generate electricity from solar heat. + +:::info +**Author** Deaconescu David Mihai \ + +**GitHub Project Link**: https://github.com/UPB-PMRust/fils-project-2026-david.deaconescu + +::: + +## Description +The project focuses on a renewable energy system where adaptive mirrors focus sunlight onto a Stirling engine. The resulting heat puts the engine in motion, which can then drive an alternator attached to the crankshaft to produce electrical energy. For the current demonstration, the system focuses on the control logic for the mirrors rather than a functioning engine or alternator. + +## Motivation + +As the global demand for electrical energy grows, finding renewable and sustainable supply methods is increasingly vital. This project aims to offer a cost-effective alternative to traditional photovoltaic panels by lowering the cost per kilowatt-hour through solar thermal concentration. ++1 + +## Architecture + +The system architecture relies on two main microcontrollers communicating via UART: + +STM32: Acts as the primary controller for hardware interaction, managing the mirrors and processing data from the directional light sensor. + +ESP32: Serves as the network layer, handling the Wi-Fi connection and fetching weather data. + + +## Log +### Week 5 - 11 May + Discussed the project idea at the lab and started work on the 3d models in Fusion + +### Week 12 - 18 May +Bought components (Servo motors, LCD screen, Joystick, Esp32 and the STM32) + +### Week 19 - 25 May +Started work on the code in rust and assembled the directional light sensor + +## Hardware +![Hardware](hardware_sunstirling.webp) +The hardware setup includes an STM32 for motor and sensor control, an ESP32 for connectivity, and a variety of sensors and actuators to track light and display system status. ++1 + +### Schematics + +![Ilustratie](imagine.webp) +![Schema kicad](kicad.webp) + +### Bill of Materials + +|Device| Usage |Price| +|------|------------|-----| +|STM32 U545RE-Q |Controls the servo motor, takes inputs from the joystick and the photoresistors| 125 lei +|SSD1306 Display |Used to display current processes |18 lei | +|Joystick |Makes the interaction between the user and the Stm32 possible |5 lei| +|Esp32 Devkit |Used as a network layer to access weather data | 42 lei | +|3D printed items |Includes the directional light sensor frame and the servo motor housings |Approx. 25 lei| +|Servo motors (sg90) |Move the mirrors according to lighting conditions |30 lei| +|Photoresistors |Used to detect light from different angles |4 lei | +|Miscellaneous |Wires, buttons and LEDs for connecting components together |10 lei| +|Total| |259 lei | + +## Software +![Software](software_sunstirling) +|Library |Description |Usage| +|___________|_______________|_____| +|Embassy_time |Async tasks and delays |Timers for defining intervals at which tasks will be performed | +|Embassy_executor| Used for concurrent tasks |Used for running concurrent tasks | +|Wi-fi.h |Wifi library for the esp32 |Used to connect to the internet on the Esp32 | +|Ssd1306 |Display driver for the 0.96 inch oled |Used to interact with the ssd1306 display | +|defmt |Structured logging framework |Real time monitoring of processes | +|heapless |Library for vectors of strings |Used to define vectors with a fixed maximum size | +|Embedded-graphics |2D graphics library |Used to create graphics on the oled display | + +## Links + +https://auto.howstuffworks.com/stirling-engine.htm diff --git a/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/kicad.webp b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/kicad.webp new file mode 100644 index 00000000000..cfc8aed6db1 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/software_sunstirling.webp b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/software_sunstirling.webp new file mode 100644 index 00000000000..892d5993395 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/david.deaconescu/software_sunstirling.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/im1.webp b/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/im1.webp new file mode 100644 index 00000000000..c74f069a8c4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/im1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/index.md b/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/index.md new file mode 100644 index 00000000000..48f4ae09a0f --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/david_andrei.dinu/index.md @@ -0,0 +1,71 @@ +# Rust Autonomous Hovercraft +A simple, autonomous hovercraft controlled by a Raspberry Pi Pico 2 and Rust. + +:::info + +**Author**: David-Andrei Dinu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-DinuDavidAndrei + +::: + +## Description + +The project consists of an autonomous hovercraft powered by a Raspberry Pi Pico 2 microcontroller. It uses dual motors—one for lift and one for propulsion/steering. The hovercraft will be able to navigate its environment autonomously, avoiding obstacles using distance sensors. The entire control logic, including motor PWM control and sensor data processing, will be written in Rust using the `embassy-rs` framework. + +## Motivation + +I chose this project because it perfectly combines hardware design, aerodynamics, and embedded programming. Building a hovercraft presents unique control challenges (such as lack of friction and drift), making the development of the control software in Rust an exciting and rewarding learning experience. + +## Architecture + +The system architecture consists of a central Processing Unit (Raspberry Pi Pico 2) that interfaces with input and output components. +- **Processing Unit**: The core controller that runs the Rust firmware. +- **Sensors (Input)**: Ultrasonic distance sensors (e.g., HC-SR04) for obstacle detection. +- **Motor Controllers (Output)**: A dual motor driver module (e.g., L298N or TB6612FNG) that takes PWM signals to control the lift and thrust motors. +- **Power Management**: A battery pack supplying appropriate voltage to both the motors and the logic board. + +### Schematics +![Schematics](./im1.webp) + +## Log + +### Week 5 - 11 May +- Project topic selection and initial component research. +- Placed order for electronic components on Optimus Digital. + +### Week 12 - 18 May +- *To be updated with hardware assembly progress* + + +## Hardware + +The hardware is based on the Raspberry Pi Pico 2 microcontroller. The mechanical structure of the hovercraft will be built using lightweight materials (like foam board). A powerful 2212 brushless motor is used for the lift cushion, alongside a rear-facing motor for thrust and steering (via a servo-controlled rudder or differential thrust). + + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [Raspberry Pi Pico 2](https://www.optimusdigital.ro) | The main microcontroller running Rust | ~30 RON | +| [2212 Brushless Motor & ESC](https://www.optimusdigital.ro) | For lift | ~50 RON | +| [DC Motor & Propeller](https://www.optimusdigital.ro) | For thrust and steering | ~20 RON | +| [Motor Driver (L298N / TB6612FNG)](https://www.optimusdigital.ro) | Controls DC motor speed and direction | ~15 RON | +| [Ultrasonic Sensor HC-SR04](https://www.optimusdigital.ro) | Obstacle detection | ~10 RON | +| [Battery Holder & Batteries](https://www.optimusdigital.ro) | Power supply for motors and Pico | ~25 RON | +| [Foam Board/Chassis Materials](https://www.optimusdigital.ro) | Hovercraft body | ~20 RON | + +## Software + +The software will be written entirely in Rust, utilizing the `embassy-rs` framework for asynchronous execution. + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rs](https://github.com/embassy-rs/embassy) | Async framework for embedded Rust | Main scheduling and execution | +| [embassy-rp](https://github.com/embassy-rs/embassy/tree/main/embassy-rp) | HAL for RP2040/RP2350 | Peripherals access (PWM, GPIO) | + +## Links + +1. [Rust on Raspberry Pi Pico](https://github.com/rp-rs/rp-hal) +2. [Embassy Framework Documentation](https://embassy.dev/) +3. [How to build a simple hovercraft](https://www.youtube.com/results?search_query=diy+hovercraft) 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 7adf60628da..8c391f1f8d2 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 @@ -6,41 +6,34 @@ - - STM32 NUCLEO-F401RE - Main microcontroller + + STM32 NUCLEO-U545RE-Q + Main MCU + Internal RTC - SSD1306 OLED - Display via I2C - - I2C - - - - DS3231 RTC - Offline time tracking - - I2C + SSD1306 OLED + Display via I2C + + I2C - - Push buttons - Feed / Play / Sleep - - EXTI + + Push buttons + Feed / Play / Sleep + + EXTI - - Passive buzzer - Audio via PWM - - PWM + + Passive buzzer + Audio via PWM + + PWM - - USB power - 5V supply - + + USB power + 5V supply + diff --git a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/hardware.webp new file mode 100644 index 00000000000..28de56ffbe6 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/hardware.webp differ 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 978008f686f..7532d2b1d2a 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,20 +10,19 @@ A virtual pet that lives, grows, and misses you when you're away ## Description -A Tamagotchi (digital pet) built on the STM32 NUCLEO-F401RE 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). A key feature is offline progression: using an external RTC (DS3231) over I2C, the pet's state degrades realistically even when the device is unplugged. +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. ## Motivation -I chose this project because it combines several embedded systems concepts (async Rust, I2C, PWM, state machines) in a fun and interactive way. It also presents a real challenge: persisting and simulating state across power cycles using an RTC module. +I chose this project because it combines several embedded systems concepts (async Rust, I2C, PWM, state machines) in a fun and interactive way. It also presents a real challenge: managing time-based state changes using the internal RTC of the microcontroller. ## Architecture ![Architecture Diagram](architecture.svg) The main components of the system are: -- **STM32 NUCLEO-F401RE** — main microcontroller running Embassy/Rust +- **STM32 NUCLEO-U545RE-Q** — main microcontroller with internal RTC running Embassy/Rust - **SSD1306 OLED screen** — displays the pet's current state via I2C -- **DS3231 RTC module** — tracks elapsed time during power-off via I2C - **3 push buttons** — user input (Feed, Play, Sleep) via EXTI interrupts - **Passive buzzer + transistor** — audio feedback via hardware PWM @@ -38,21 +37,25 @@ Project got approved. Ordered the necessary hardware components. ### Week 8 - 9 Set up the development environment and started experimenting with Embassy on the NUCLEO board. +### Week 10 - 11 +Developed the KiCad schematic and assembled the prototype for the project. + ## Hardware -The project uses the STM32 NUCLEO-F401RE as the main microcontroller. An SSD1306 OLED screen and DS3231 RTC module are connected via I2C. Three push buttons handle user input and a passive buzzer driven by a transistor provides audio feedback. +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. + +![Hardware photo](hardware.webp) ## Schematics -Place your KiCAD schematics here in SVG format. +![KiCad Schematic](schematic.webp) ## Bill of Materials | Device | Usage | Price | |--------|-------|-------| -| STM32 NUCLEO-F401RE | Main microcontroller | — | +| STM32 NUCLEO-U545RE-Q | Main microcontroller | — | | SSD1306 OLED screen | Graphical interface | 20 RON | -| DS3231 RTC module + battery | Offline time tracking | 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 | @@ -61,14 +64,14 @@ Place your KiCAD schematics here in SVG format. | Library | Description | Usage | |---------|-------------|-------| -| `embassy-stm32` | Async HAL for STM32 | I2C, EXTI, Timers | +| `embassy-stm32` | Async HAL for STM32 | I2C, EXTI, Timers, RTC | | `embassy-time` | Async time management | Managing concurrent tasks | | `embedded-graphics` | 2D graphics library | Drawing to the OLED display | | `ssd1306` | Display driver for SSD1306 | Used for the OLED screen | -| `ds323x` | RTC driver | Reading time from DS3231 | | `defmt` | Logging framework | Debugging | ## Links -1. [Embassy Documentation](https://embassy.dev/book/) -2. [STM32 NUCLEO-F401RE Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re.html#documentation) +1. [GitHub Project](https://github.com/UPB-PMRust-Students/fils-project-2026-deliavasile) +2. [Embassy Documentation](https://embassy.dev/book/) +3. [STM32 NUCLEO-U545RE-Q Documentation](https://www.st.com/en/evaluation-tools/nucleo-u545re.html#documentation) diff --git a/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/schematic.webp b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/schematic.webp new file mode 100644 index 00000000000..8f2b6c20726 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/delia.vasile1402/schematic.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/index.md b/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/index.md index 20c0d943dd8..3714cf28b82 100644 --- a/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/index.md @@ -41,7 +41,7 @@ The STM32 Nucleo-U545RE-Q acts as the high-performance "brain" managing the game ### Schematics - +![Kicad](kicad.svg) ### Bill of Materials @@ -58,7 +58,7 @@ The format is | Device | Usage | Price | |--------|--------|-------| | [STM32 NUCLEO-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | [125 RON](https://eu.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | -| [SN74LS21DR](https://www.ti.com/lit/ds/symlink/sn74ls21.pdf?ts=1776868308732&ref_url=https%253A%252F%252Feu.mouser.com%252F) | 4:1 And Gate | [2,5 RON](https://eu.mouser.com/ProductDetail/595-SN74LS21DR) | +| [SN74LS20N](https://www.ti.com/general/docs/suppproductinfo.tsp?distId=10&gotoUrl=https%3A%2F%2Fwww.ti.com%2Flit%2Fgpn%2Fsn74ls20) | 4:1 Nand Gate | [10 RON](https://www.digikey.com/en/products/detail/texas-instruments/SN74LS20N/377790) | | [SN74LS04N](https://www.ti.com/lit/ds/symlink/sn74ls04.pdf?ts=1776871706956&ref_url=https%253A%252F%252Fen.wikipedia.org%252F) | Not Gate | [3,5 RON](https://eu.mouser.com/ProductDetail/595-SN74LS04N) | | [Square Buttons]() | Buttons | [0,92 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1117-buton-cu-capac-patrat-negru.html?search_query=butoane&results=154) | | [Led Display TM1637](https://www.datasheetcafe.com/tm1637-datasheet-pdf/) | 7 segment display | [8,99 RON](https://www.optimusdigital.ro/ro/optoelectronice-afisaje-led/1202-modul-display-led-cu-interfata-seriala-chip-tm1637-.html) | diff --git a/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/kicad.svg new file mode 100644 index 00000000000..2f3663609cf --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/denisa_adina.druica/kicad.svg @@ -0,0 +1 @@ +SVG Image created as rust.svg date 2026-05-10T23:16:59 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title: ZhàdànFile: rust.kicad_schSheet: /D7LEDD6LEDSW1SW_PushSW6SW_PushD9LEDR2220SW5SW_PushR4220R1110KGNDR1010KR1220SW2SW_PushSW4SW_PushSW3SW_PushGND1VCC2DIO3CLK4TM1CN5_D8_PA95_1CN5_D9_PC7_PWM5_2CN5_D10_PB6_CS_PWM5_3CN5_D11_MOSI_PWM5_4CN5_D12_MISO5_5CN5_D13_SCK5_6CN5_GND5_7CN5_AVDD5_8CN5_D14_PB9_SDA5_9CN5_D15_PB8_SCL5_10CN6_NC6_1CN6_3V36_2CN6_NRST6_3CN6_3V36_4CN6_5V6_5CN6_GND6_6CN6_GND6_7CN6_VIN6_8CN8_A0_PA08_1CN8_A1_PA18_2CN8_A2_PA48_3CN8_A3_PB08_4CN8_A4_PC1_PB88_5CN8_A5_PC0_PB98_6CN9_D0_PA3_RX9_1CN9_D1_PA2_TX9_2CN9_D2_PA109_3CN9_D3_PB3_PWM9_4CN9_D4_PB59_5CN9_D5_PB4_PWM9_6CN9_D6_PB10_PWM9_7CN9_D7_PA89_8U1STM32_Nucleo_64_arduinoD8LEDR3220R81KR74.7K123Q12N222212BZ1BuzzerD1LEDR6220VDD1DATA2GND4U2DHT111A11Y22A32Y43A53Y6GND74Y84A95Y105A116Y126A13VCC14U3SN74LS04NGNDVCCD10LEDR52201A11B21C41D51Y6GND72Y82A92B102C122D13VCC14U4SN74LS20NR910KVCCR1220D6LEDR2220D7LEDD9LEDR4220D8LEDR3220R74.7KQ12N2222123BZ1Buzzer12D1LEDR6220U2DHT11VDD1DATA2GND4U3SN74LS04N1A11Y22A32Y43A53Y6GND74Y84A95Y105A116Y126A13VCC14VCCD10LEDR5220U4SN74LS20N1A11B21C41D51Y6GND72Y82A92B102C122D13VCC14VCC \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/hardware_diana_oprea.webp b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/hardware_diana_oprea.webp new file mode 100644 index 00000000000..06d37eb74b4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/hardware_diana_oprea.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/index.md b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/index.md index 15dd667fa03..4dfac24e6be 100644 --- a/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/index.md @@ -63,7 +63,10 @@ Overall, this project allows me to explore the intersection between embedded sys - Input Device: PS4 controller (user input via PC) - Connections: Jumper wires, connectors, electrodes (E1, E2) +![Hardware](./hardware_diana_oprea.webp) + ### Schematics +![Schem](./project_diana.oprea1609.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/project_diana.oprea1609.svg b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/project_diana.oprea1609.svg new file mode 100644 index 00000000000..56ae315fa25 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/diana.oprea1609/project_diana.oprea1609.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-05-10KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Gamepad-Controlled GVS SystemFile: project_diana.oprea1609.kicad_schSheet: /R5RQ6Q_NPNQ3Q_PNP123ElectrodesAdaptorConn_01x03Q7Q_NPNQ8Q_NPNR4RQ4Q_PNP1234567891011121314151617181920212223242526272829303132333435363738J2CN10R6RGNDGND1VCC2SCL3SDA4LCDER_OLEDM0.91_1x-I2CR3RQ1Q_PNPR1RQ2Q_PNPR2RQ5Q_NPNGND+28VENENGNDGNDRXDRXDSTATESTATETXDTXDVCCVCCBluetoothHC05CN5_D8_PC75_1CN5_D9_PC6_PWM5_2CN5_D10_PC9_CS_PWM5_3CN5_D11_MOSI_PWM5_4CN5_D12_PA6_MISO5_5CN5_D13_PA5_SCK5_6CN5_GND5_7CN5_AVDD5_8CN5_D14_PB7_SDA5_9CN5_D15_PB6_SCL5_10CN6_NC6_1CN6_IOREF6_2CN6_NRST6_3CN6_3V36_4CN6_5V6_5CN6_GND6_6CN6_GND6_7CN6_VIN6_8CN8_A0_PA08_1CN8_A1_PA18_2CN8_A2_PA48_3CN8_A3_PB08_4CN8_A4_PC1_PB88_5CN8_A5_PC0_PB98_6CN9_D0_PA3_RX9_1CN9_D1_PA2_TX9_2CN9_D2_PC89_3CN9_D3_PB3_PWM9_4CN9_D4_PB59_5CN9_D5_PB4_PWM9_6CN9_D6_PB10_PWM9_7CN9_D7_PA89_8U4STM 32 NUCLEO-U545RE-Q CN6, CN5, CN8, CN91234567891011121314151617181920212223242526272829303132333435363738J1CN7123PulseSensorConn_01x03E1ABE2E2BE1A \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw1.svg b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw1.svg new file mode 100644 index 00000000000..b1cf72d6ae1 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw1.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Musical gloveFile: rust.kicad_schSheet: /12pressure sensor 112pressure sensor 3+3.3VR610kVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U2STM32U545RETx+3.3V+3.3VR310k+3.3VGND12pressure sensor 4GNDR14.7kGND12pressure sensor 2R410k+3.3VGNDGNDR510kGND+3.3VGNDCLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U1MPU-6050+3.3VR24.7kPA1PA2PA3SCLpressure sensor 3PA4pressure sensor 1pressure sensor 4pressure sensor 2SDAPB6PB7Pressure sensorsGNDU1MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24GND+3.3VR24.7k \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw2.webp b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw2.webp new file mode 100644 index 00000000000..726978e907e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/hardw2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/index.md b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/index.md index fe5d64620f5..4182466b60a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/diana_andreea.safta/index.md @@ -63,9 +63,10 @@ This project is heavily inspired by the Mi.Mu gloves developed by Imogen Heap wh Decided on what I wanted to create and did research on what I needed for hardware and software. ### Week 7-8 -Ordered everything and changed the initial plan. I decided that I will make my own pressure sensors; the initial idea was to use pressure sensors and flex sensors, but due to their high price, I started to look for alternatives and found Pressure-Sensitive Conductive Sheet with which I create the sensors. +Ordered everything and changed the initial plan. I decided that I will make my own pressure sensors; the initial idea was to use pressure sensors and flex sensors, but due to their high price, I started to look for alternatives and found the Pressure-Sensitive Conductive Sheet with which I create the sensors. ### Week 9 +Started codeing the mpu6050, still waiting for the pressure sheet. ## Hardware STM32U5 Board: The main microcontroller to process data and handle communication. @@ -76,8 +77,14 @@ MPU-6050 IMU Module: Tracks the orientation and tilt of the hand. Pressure Sensors: Detect gestures like making a fist or pressing two fingers together. +![Hardware Photo](hardw2.webp) + + + ### Schematics +![Hardware Schematics](hardw1.svg) + ### Bill of Materials @@ -96,6 +103,7 @@ The format is | [STM32 Nucleo-64](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | The microcontroller | [126 RON] | | [MPU6050](https://www.optimusdigital.ro/en/inertial-sensors/13611-mpu6050-accelerometer-and-gyroscope-module-soldered-pins.html?search_query=MPU6050&results=5) | Motion Tracker | [16 RON] | | [Pressure sheet](https://robot-italy.com/en/products/1361-pressure-sensitive-conductive-sheet-velostat-linqstat?_pos=1&_psq=pressure&_ss=e&_v=1.0) | DIY pressure sensors | [70 RON] | +| [Copper tape](https://www.emag.ro/banda-de-cupru-cu-adeziv-pe-o-parte-15-mm-x-10-m-ai684/pd/DT904DMBM/) | For the DIY pressure sensors | [29 RON] | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/hardware.webp new file mode 100644 index 00000000000..0682595ad67 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/index.md b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/index.md index be7e4603dbc..7c91f34a145 100644 --- a/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/index.md @@ -1,4 +1,3 @@ - # Automatic Music Player and Advertising System An automated audio solution that blends background music with scheduled announcements using the RP2350 and Rust. @@ -11,7 +10,7 @@ An automated audio solution that blends background music with scheduled announce ## Description -The project consists of an automated audio playback system. It plays a continuous playlist of MP3 files from a microSD card. At predefined intervals (e.g., every 10–15 minutes), the system finishes the current song, switches to a folder for advertisements/announcements, plays one file, and then returns to the music playlist. +The project consists of an automated audio playback system. It plays a continuous playlist of WAV files from a microSD card. At predefined intervals (e.g., every 10–15 minutes), the system finishes the current song, switches to a folder for advertisements/announcements, plays one file, and then returns to the music playlist. ## Motivation @@ -30,8 +29,11 @@ The system follows a producer-consumer architecture managed by the Embassy execu - **I2S Driver (Consumer):** Uses the Pico's **PIO** to stream the PCM data to the PCM5102A DAC. It uses DMA (Direct Memory Access) to ensure playback doesn't stutter while the CPU is busy reading from the SD card. - **Timer Task:** Tracks the 10-15 minute intervals and signals the main task to switch directories. - **User Interface:** Handles GPIO interrupts from push buttons for volume adjustment and track skipping. + ![Design](diagram.drawio.svg) +--- + ## Log ### Week 5 - 11 May @@ -41,20 +43,24 @@ The system follows a producer-consumer architecture managed by the Embassy execu - Decided to switch from MP3 to WAV to focus on high-throughput data handling. ### Week 19 - 25 May -- Ordered components +- Ordered components. + +--- ## Hardware The project uses the **Raspberry Pi Pico 2W** (RP2350), which provides more processing power for audio handling. The **PCM5102A** DAC provides high-quality stereo output via an I2S interface. +### Physical Setup +![Hardware Setup](hardware.webp) + +### Schematics +![Kicad Schematic](nedelcu_diana_kicad.svg) ### Software Data Flow 1. **File System Task:** Reads raw WAV data chunks from the SD card into a shared memory buffer. 2. **Audio Task:** Consumes the buffer and uses **DMA** to stream data to the PIO state machine, ensuring the I2S timing remains perfect. 3. **Manager Task:** An async loop that tracks the 10-15 minute timer for advertisements and handles button interrupts to change the playback state. -### Schematics - -*(To be added)* ### Bill of Materials @@ -66,6 +72,8 @@ The project uses the **Raspberry Pi Pico 2W** (RP2350), which provides more proc | Push Buttons | Volume/Skip Controls | 3.60 lei (10pcs) | | Resistor set | Pull-ups and protection | 7.00 lei | +--- + ## Software | Library | Description | Usage | @@ -75,8 +83,10 @@ The project uses the **Raspberry Pi Pico 2W** (RP2350), which provides more proc | [embedded-sdmmc](https://github.com/rust-embedded-community/embedded-sdmmc-rs) | FAT File System | Reading WAV files from the SD Card | | [pio](https://crates.io/crates/pio) | PIO Assembler | Creating the I2S protocol state machine | +--- + ## Links 1. [PCM5102A Datasheet](https://www.ti.com/product/PCM5102A) 2. [Pico PIO I2S Example](https://github.com/raspberrypi/pico-examples/tree/master/pio/i2s) -3. [Embassy-rs PIO Documentation](https://embassy.dev/book/dev/pio.html) \ No newline at end of file +3. [Embassy-rs PIO Documentation](https://embassy.dev/book/dev/pio.html) diff --git a/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/nedelcu_diana_kicad.svg b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/nedelcu_diana_kicad.svg new file mode 100644 index 00000000000..9cb6480dbdc --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/diana_ioana.nedelcu/nedelcu_diana_kicad.svg @@ -0,0 +1 @@ +SVG Image created as Nedelcu_Diana.svg date 2026-05-09T19:44:13 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: Nedelcu_Diana.kicad_schSheet: /+3.3VGNDGNDDAT21DAT3/CD2CMD3VDD4CLK5VSS6DAT07DAT18SHIELDSHJ1Micro_SD_CardGNDCPVDD1CAPP2CPGND3CAPM4VNEG5OUTL6OUTR7AVDD8AGND9DEMP10FLT11SCK12BCK13DIN14LRCK15FMT16XSMT17LDOO18DGND19DVDD20U1PCM5102D1LEDGNDGP01GP12GND3GP24GP35GP46GP57GND8GP69GP710GP811GP912GND13GP1014GP1115GP1216GP1317GND18GP1419GP1520GP1621GP1722GND23GP1824GP1925GP2026GP2127GND28GP2229RUN30GP2631GP2732AGND33GP2834ADC_VREF353V3_OUT363V3_EN37GND38VSYS39VBUS40A1SC0918Raspberry Pi:MODULE_SC0918Raspberry Pi+3.3VRSTJ3AudioJack3VBUSVBUSSW1SW_Push+3.3VSW2SW_PushGNDR1RGNDR1RVBUSVBUSA1SC0918Raspberry Pi:MODULE_SC0918Raspberry PiGP01GP12GND3GP24GP35GP46GP57GND8GP69GP710GP811GP912GND13GP1014GP1115GP1216GP1317GND18GP1419GP1520GP1621GP1722GND23GP1824GP1925GP2026GP2127GND28GP2229RUN30GP2631GP2732AGND33GP2834ADC_VREF353V3_OUT363V3_EN37GND38VSYS39VBUS40 diff --git a/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/hardware.svg b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/hardware.svg new file mode 100644 index 00000000000..756719ba01c --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/hardware.svg @@ -0,0 +1 @@ +SVG Image created as MA_project_hardware.svg date 2026-05-10T21:54:46 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: MA_project_hardware.kicad_schSheet: /PC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80U1NUCLEO-U545RE-QVDD1SDA2GND3SCL4U3AHT20+BMP280VIN13V32GND3SCL4SDA5CS6SA07OCS8INT29INT110SCX11SDX12U2BMI160VCC1GND2S3U4KY-018 PhotoresistorCS1MOSI2GND3VCC4SCK5MISO6U6MicroSD Card ModuleSDA1SCL2VCC3GND4U50.96-inch SSD1306 OLED DisplayC210uFC10.1uFSmart Package Monitoring System \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/index.md b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/index.md index fa9de7ebd2e..67e7cf035af 100644 --- a/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/index.md @@ -45,6 +45,24 @@ Main layers: - **Architecture Milestone:** Developed a dual-bus I2C architecture. Isolated the OLED display on I2C1 and the sensors on I2C2 to ensure high-speed display updates without interference from sensor polling tasks. - **Software Foundation:** Implemented asynchronous tasks using Embassy, allowing the system to poll light and weather data concurrently while updating the UI. +### Week 10: IMU Integration and I2C Bus Optimization +- **Hardware Expansion:** Integrated the BMI160 (6-axis Accelerometer and Gyroscope) into the sensor cluster. +- **Bus Configuration:** Connected the BMI160 to the existing I2C2 bus alongside the AHT20+BMP280 module. By sharing the SCL and SDA lines, I optimized the pin usage. Verified that both devices operate correctly on the shared bus by addressing them via their unique I2C addresses. +- **Functionality:** Implemented initial motion tracking to detect orientation changes, laying the groundwork for impact detection logic. + +### Week 11: SD Card Integration and Power Stability Troubleshooting +- **Assembly:** Soldered the headers for the MicroSD card adapter using the soldering station to ensure reliable high-speed SPI communication. +- **Technical Challenge:** Encountered system instability during SD card write operations. Heavy peak current consumption by the microSD card caused voltage drops (power sagging), which led to communication errors and "hangs" on the I2C bus shared by the sensors. +- **Hardware Fix:** Resolved the instability by soldering two capacitors in parallel between the VCC and GND pins of the SD module: + - A 0.1 uF ceramic capacitor to filter out high-frequency noise. + - A 10 uF electrolytic capacitor to act as a local energy reservoir for peak current demands. +- **Enclosure & Final Assembly:** To simulate a real-world "black box," I mounted the entire system into a protective enclosure. I precision-cut a dedicated opening in the case to allow the USB Type-C cable to connect directly to the ST-LINK port on the Nucleo board. This provides both stable power and a debugging interface while keeping the internal electronics secure. +- **Result:** After implementing the decoupling capacitors, the I2C bus remained stable during simultaneous data logging and sensor polling, ensuring the reliability of the "black box" recording. + +![Week 11 progress](ma_project_photo1.webp) + +![Smart Package Monitoring System](ma_project_photo2.webp) + ## Hardware Components: @@ -55,14 +73,17 @@ Components: - BMI160 (3-axis Accelerometer & 3-axis Gyroscope - I2C/SPI). - **Display:** 0.96-inch OLED SSD1306 (I2C). - **Storage:** MicroSD Card Adapter (SPI) + 16GB MicroSD Card. +- **Power Stability:** + - 0.1 uF Ceramic Capacitor (High-frequency noise filtering). + - 10 uF Electrolytic Capacitor (Power reservoir for SD card peak loads). -The hardware architecture of the Smart Package Monitoring System utilizes an STM32 Nucleo-U545RE-Q microcontroller as its high-performance processing core, managing concurrent data streams through a multi-bus configuration. Environmental sensing is handled by an AHT20+BMP280 module for precise climate tracking and a KY-018 photoresistor for real-time light exposure detection via ADC. The system features a dedicated I2C1 bus for the SSD1306 OLED display to ensure smooth status visualization, and an independent I2C2 bus for the sensor cluster to prevent data contention. Reliable event logging is facilitated through a MicroSD adapter interfaced via SPI, providing non-volatile storage for comprehensive trip analysis. +The hardware architecture of the Smart Package Monitoring System utilizes an STM32 Nucleo-U545RE-Q microcontroller as its high-performance processing core, managing concurrent data streams through a multi-bus configuration. Environmental sensing is handled by an AHT20+BMP280 module for climate tracking and a BMI160 inertial measurement unit for motion detection, both interfaced via a shared I2C2 sensor bus. Light exposure is monitored in real-time through a KY-018 photoresistor via ADC. The system features a dedicated I2C1 bus for the SSD1306 OLED display to ensure smooth status visualization and prevent data contention. Reliable event logging is facilitated through a MicroSD adapter interfaced via SPI. To ensure system stability during high-current SD card write operations, a decoupling pair of capacitors (0.1 uF and 10 uF) was integrated into the power rail to mitigate voltage sags and filter electrical noise. *The system architecture is designed to be modular. Thanks to the asynchronous nature of the Embassy executor, new components/functions might be integrated in future sprints with minimal changes to the core logic. ### Schematics -To be added soon. +![KiCad schematic](hardware.svg) ### Bill of Materials @@ -76,6 +97,8 @@ To be added soon. | [MicroSD Adapter](https://www.silicon-power.com/knowledge-detail/microsd-spec/) | Interface for data logging to SD card | [~24 RON](https://www.emag.ro/2-bucati-micro-sd-tf-adaptor-pentru-carduri-viteza-mare-adaptor-convertor-pentru-carduri-micro-sd-transflash-tf-la-sd-sdhc-cititor-de-carduri-memory-stick-pentru-camera-foto-computer-memorii-interne-c/pd/D75GFJ3BM/) | | [16GB MicroSD Card](https://www.verbatim-europe.com/en/memory-cards/products/premium-u1-microsdhc-card-16gb-plus-adapter-44082) | Non-volatile storage for trip logs | Already owned | | [Breadboard (400 points)](https://en.wikipedia.org/wiki/Breadboard) | Prototyping | Already owned | +| [Ceramic Capacitor (0.1 uF)](https://www.ato.com/0-1%CE%BCf-50v-ceramic-capacitor?srsltid=AfmBOopYidiz51fW6T777_wvdxPl3ARN3I6dckD3EeYyjs-IbhiDEwom) | High-frequency noise filtering for SD module. | Already owned | +| [Electrolytic Capacitor (10 uF)](https://www.tme.eu/ro/details/gf1000_63-16/condensatoare-electrolitice-tht/samxon/egf108m1jk25rrshp/?brutto=1¤cy=RON&utm_source=google&utm_medium=cpc&utm_campaign=RUMUNIA%20%5BPLA%5D%20CSS&utm_content=&campaign_id=10591401989&gad_source=1&gad_campaignid=10591401989&gbraid=0AAAAADyylhL6yC_Pdia26854Pta4dsauq&gclid=Cj0KCQjw2YDQBhD_ARIsAE1qeSfYn_iMik-NgFte4lnYWDGpT9tFi2TmCTVp-_NAVgWTYsOdtCGcnUsaAsPwEALw_wcB) | Power reservoir for SD card peak current demands. | Already owned | | [Jumper Wires Set (Male-Male, Male-Female, U-Shape Preformed)](https://en.wikipedia.org/wiki/Jump_wire) | Wiring | Already owned | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo1.webp b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo1.webp new file mode 100644 index 00000000000..db56383bf59 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo2.webp b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo2.webp new file mode 100644 index 00000000000..9cd267242da Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dmytro.tomikhin/ma_project_photo2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/OrionSchematics.svg b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/OrionSchematics.svg deleted file mode 100644 index 83c1680326a..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/OrionSchematics.svg +++ /dev/null @@ -1 +0,0 @@ -SVG Image created as OrionSchematics.svg date 2026-04-21T21:36:14 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.0Rev:Size: A4Id: 1/1Title:File: OrionSchematics.kicad_schSheet: /12LS1Speaker5VGNDTrigEchoU3+1-2M2Motor_DCLOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16U9PAM8403D+1-2M6Motor_DCR11kR21k+1-2M1Motor_DCR31k+1-2M7Motor_DCD21N4148+1-2M5Motor_DC123Q2Q_NPN_EBCC30.1uF+1-2M3Motor_DCD11N4148123Q3Q_NPN_EBC5VGNDTrigEchoU5D31N41485VGNDTrigEchoU4123Q1Q_NPN_EBCR42.2kPA5PA6PA0PA7PB0PB1PC6PC7PC85VGNDPA9PA10PC10PC11PB10PB5PC9PA8PB4PB3U1VIN1OUT2GND3FB4~{ON}/OFF5U8LM2596S-12+1-2M4Motor_DCSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298NTX25VGNDRX2U6U0R5VGNDU0TU7C51uF12MK1MicrophoneC61uFC20.1uFBT1BatteryC1100uFC40.1uFGNDGNDVREF+5VUS_TRIG_1+5V+5VUS_ECHO_1+5VGNDGND+5V+5VGNDMOT_IN2MOT_IN3MOT_IN4MOT_IN1GNDGNDUS_TRIG_3GNDMICMIC+5V+5V+5VMICA5US_TRIG_2VBATGND+5VUS_TRIG_3US_ECHO_3GNDGNDUART_RXGNDUART_TXGNDGNDGNDGND+5V+5VCAM_RX+5V+5VGND+5VMOT_IN4MOT_IN3MOT_IN1US_ECHO_2US_ECHO_1US_TRIG_1US_ECHO_3US_ECHO_2VREFA5INL+5VCAM-TXMOT_IN2UART_RXCAM-TXUART_TXCAM_RX+5VVBAT+5VINLGND+5VGND+5VVBATUS_TRIG_2LS1Speaker12U9PAM8403DLOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16C30.1uFU35VGNDTrigEchoC51uFC40.1uF \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma1.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma1.webp new file mode 100644 index 00000000000..721ce016617 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma2.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma2.webp new file mode 100644 index 00000000000..950b7546f63 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma3.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma3.webp new file mode 100644 index 00000000000..f00537f8316 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma4.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma4.webp new file mode 100644 index 00000000000..5ec6fc6fe9c Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma4.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma5.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma5.webp new file mode 100644 index 00000000000..bd5a187db08 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma5.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma6.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma6.webp new file mode 100644 index 00000000000..e6a70d56503 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma6.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma7.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma7.webp new file mode 100644 index 00000000000..cdad3293310 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma7.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma8.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma8.webp new file mode 100644 index 00000000000..81e9da6de5b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma8.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma9.webp b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma9.webp new file mode 100644 index 00000000000..0742f7588ec Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/ma9.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/OrionArchitecture.svg b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/orionarchitecture.svg similarity index 100% rename from website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/OrionArchitecture.svg rename to website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/orionarchitecture.svg diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/orionschematics.svg b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/orionschematics.svg new file mode 100644 index 00000000000..05470d062f3 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/images/orionschematics.svg @@ -0,0 +1 @@ +SVG Image created as Orion.svg date 2026-05-10T10:59:16 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: Orion.kicad_schSheet: /LOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16U9PAM8403DR11kR62.2kR82.2kR91kCBEQ3NPN+5VGNDFAN2+1-2M3Motor_DCR51kR71k+1-2M5Motor_DCCBEQ1NPNU0R+5VGNDU0TU8+1-2M2Motor_DC+1-2M4Motor_DC+1-2M1Motor_DCC1100uF+5VGNDTrigEchoU4D2DVIN1OUT2GND3FB4~{ON}/OFF5U3LM2596S-12+1-2M6Motor_DCC61uFBT1Battery_CellTX2+5VGNDRX2U7C4100nFR102.2k+1-2M7Motor_DCD3DR42.2kC3100nFSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298NC5100nF+5VGNDFAN1D1DCBEQ2NPNC2100nF12LS1Speaker12MK1MicrophonePA5PA6PA0PA7PB0PB6PB1PB7PC6PC7PC85VGNDPA9PA10PC10PC11PB10PB5PC9PA8PB4PB3U1+5VGNDTrigEchoU6+5VGNDTrigEchoU5R31kR21k+5VVBATGND+5VGNDCAM_RXGND+5V+5VUS_ECHO_2GNDGNDGNDGND+5VGND+5VECHO_1GNDECHO_1MICUS_TRIG_3GND+5V+5VGNDGNDVBATUS_ECHO_3ECHO_3US_ECHO_3GND+5V+5VINLGND+5VGNDECHO_2VBATUS_TRIG_2GND+5VGNDECHO_1+5VGND+5VECHO_2US_ECHO_2INLSPEAKERUART_RXUS_ECHO_1GND+5VGNDGND+5VUS_ECHO_1+5VUS_TRIG_1GNDGND+5VCAM_TXUART_TXECHO_3ENAENBMOT_IN4GNDUART_TXMOT_IN1CAM_RXUART_RXCAM_TXUS_TRIG_1US_TRIG_3ECHO_2US_TRIG_2ECHO_3+5VMICGNDMOT_IN3MICMOT_IN1MOT_IN2SPEAKER+5VMOT_IN2MOT_IN4ENBENAMOT_IN3M6Motor_DC+1-2D1DU9PAM8403DLOUT+1PGND2LOUT-3PVDD4~{MUTE}5VDD6INL7VREF8INR10GND11~{SHDN}12ROUT-14ROUT+16U2L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15LS1Speaker12MK1Microphone12 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/index.md b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/index.md index 8b5210ccb37..4301f533cbd 100644 --- a/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/dorian_gabriel.toros/index.md @@ -21,7 +21,7 @@ I chose this project because I wanted to make guidance more accessible to visual ## Architecture -![Orion Architecture](./images/OrionArchitecture.svg) +![Orion Architecture](./images/orionarchitecture.svg) The system follows a decentralized command structure, where high-level strategy is handled by a mobile device and real-time safety is handled locally by the robot. @@ -61,11 +61,18 @@ All ordered materials arrived. I started doing small functionality tests to make ### Week 13 - 19 April Worked on the website for the project. ### Week 20 - 26 April - +Started working on hardware +![Orion Hardware 1/x](./images/ma1.webp) +![Orion Hardware 2/x](./images/ma2.webp) +![Orion Hardware 3/x](./images/ma3.webp) ### Week 27 April - 3 May - +Continued working on hardware +![Orion Hardware 4/x](./images/ma4.webp) +![Orion Hardware 5/x](./images/ma5.webp) +![Orion Hardware 6/x](./images/ma6.webp) ### Week 4 - 10 May - +![Orion Hardware 7/x](./images/ma7.webp) +![Orion Hardware 8/x](./images/ma8.webp) ### Week 11 - 17 May ### Week 18 - 24 May @@ -79,7 +86,7 @@ For movement, the system uses a 4WD motor and wheel set adapted into a "walker-s The power system is split into two distinct rails for stability: the 4WD motors are powered directly from the Li-ion batteries to handle high current spikes, while a buck converter steps the voltage down to a stable 5V for the breadboard-mounted logic circuits, protecting the microcontrollers from electrical interference. ### Schematics -![Orion Schematics](./images/OrionSchematics.svg) +![Orion Schematics](./images/orionschematics.svg) ### Bill of Materials @@ -96,7 +103,8 @@ The format is | Device | Usage | Price | |--------|-------|-------| | [ESP 32 DEVKIT V1, 1 PC](https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32/esp-dev-kits-en-master-esp32.pdf) | Sending instructions from phone through BLE | [53.08](https://www.emag.ro/placa-dezvoltare-esp32-devkit-v1-ai669/pd/DXV9FDMBM/) | -| [10 FEMALE TO MALE DUPONT WIRE JUMPER CABLES, 20 CM, 2 PCS](https://www.budgetronics.eu/en/search?query=Wire+Jumper) | Connections | [12.22](https://www.emag.ro/10-x-fire-dupont-mama-tata-20cm-ai306-s459/pd/DZJ66JBBM/) | +| [10 FEMALE TO MALE DUPONT WIRE JUMPER CABLES, 20 CM, 4 PCS](https://www.budgetronics.eu/en/search?query=Wire+Jumper) | Connections | [24.44](https://www.emag.ro/10-x-fire-dupont-mama-tata-20cm-ai306-s459/pd/DZJ66JBBM/) | +| [10 FEMALE TO MALE DUPONT WIRE JUMPER CABLES, 30 CM, 2 PCS](https://www.budgetronics.eu/en/search?query=Wire+Jumper) | Connections | [9.70](https://www.emag.ro/10-x-fire-dupont-mama-tata-20cm-ai306-s459/pd/DZJ66JBBM/) | | [STM32-NUCLEO-U545RE-Q, 1 PC](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main control unit - Handles logic, safety, and real-time processing. | [106.59](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | | [5 MM LED, BLUE, 5 PCS](https://sigmanortec.ro/led-5mm-albastru) | Debugging | [1.50](https://sigmanortec.ro/led-5mm-albastru) | | [5 MM LED, GREEN, 5 PCS](https://sigmanortec.ro/led-5mm-verde) | Debugging | [1.50](https://sigmanortec.ro/led-5mm-verde) | @@ -105,6 +113,7 @@ The format is | [5 MM LED, RED, 5 PCS](https://sigmanortec.ro/led-5mm-rosu) | Debugging | [1.50](https://sigmanortec.ro/led-5mm-rosu) | | [ELECTRET MICROPHONE CAPSULE, 1 PC](https://sigmanortec.ro/Microfon-electret-capsula-p126469106) | Microphone for hazard detection | [1.21](https://sigmanortec.ro/Microfon-electret-capsula-p126469106) | | [760 POINTS BREADBOARD, 1 PC](https://sigmanortec.ro/Breadboard-760-puncte-p190992404) | Connections board between devices | [10.59](https://sigmanortec.ro/Breadboard-760-puncte-p190992404) | +| [400 POINTS BREADBOARD, 2 PC](https://www.emag.ro/placa-test-breadboard-400-ai059-a-s69/pd/D5WBP7MBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | Connections board between devices | [13.36](https://www.emag.ro/placa-test-breadboard-400-ai059-a-s69/pd/D5WBP7MBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | | [40 MALE TO MALE DUPONT WIRE JUMPER CABLES, 10 CM, 1 PC](https://www.budgetronics.eu/en/search?query=Wire+Jumper) | Connections | [7.73](https://sigmanortec.ro/40-Fire-Dupont-30cm-Tata-Tata-p210849599) | | [40 MALE TO MALE DUPONT WIRE JUMPER CABLES, 20 CM, 1 PC](https://www.budgetronics.eu/en/search?query=Wire+Jumper) | Connections | [8.97](https://sigmanortec.ro/40-Fire-Dupont-20cm-Tata-Tata-p210851325) | | [MICRO VIBRATION MOTORS, 3V, 5 PCS](https://precisionminidrives.com/product/10mm-coin-vibration-motor-3mm-type-model-nfp-c1030?_gl=1*xjkzbp*_up*MQ..*_gs*MQ..&gclid=Cj0KCQjwkYLPBhC3ARIsAIyHi3SQnjs6q14PMiZl5raiINrToDman7eGPuO6rXBETsWOfCBPPjlN3WMaAt5WEALw_wcB&gbraid=0AAAAAomY7RVV_VKawgmUUJGBq9vz8B5WF) | Guidance components | [31.44](https://www.drot.ro/platforma-arduino/121940-motor-minim-vibra-ie-1027-3v.html) | @@ -147,7 +156,11 @@ The format is | [ESP32-CAM, 1PC](https://www.espressif.com/en/news/ESP32_CAM) | Vision of surroundings | [69.73](https://sigmanortec.ro/placa-dezvoltare-esp32-cam-wifi-bluetooth-ov2640-2mp?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72NaeHUezr_l2tenEtN_DWuo-&gclid=CjwKCAjwwJzPBhBREiwAJfHRncs6iBeoE0wPaSECFaCZAgI91YlvsW3P0Mivj8F67mw68YUT3yr1gBoCHEMQAvD_BwE) | | [MOTOR DRIVER L298N, 1PC](https:/www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf) | Control the motors | [11.99](https://www.bitmi.ro/modul-driver-l298n-cu-punte-h-dubla-pentru-motoare-dc-stepper-10400.html?gad_source=1&gad_campaignid=22990790771&gbraid=0AAAAADLag-l-Qerv9f0lSY9XqqBlFnwNA&gclid=CjwKCAjwwJzPBhBREiwAJfHRnfinvN0rXoyvlGJ25nfHMtS9aOkRWboLQOHjwRcBMDjc36QEGa-khxoCv7QQAvD_BwE) | | [BATTERIES 3.7V 2500mAh LI-ION CELLS 18650, 2PC](https://www.a2t.ro/default-category/acumulator-li-ion-sony-18650-25r-inr-3-7v-2500mah-descarcare-20a?gad_source=1&gad_campaignid=21154157017&gclid=CjwKCAjwwJzPBhBREiwAJfHRnY9QXvOL2PKbyJ5mpJ0N7jnGqOhSX-3I-1vSrV_tmaTLDerpL75RmxoCVAwQAvD_BwE) | Power | [57.98](https://www.a2t.ro/default-category/acumulator-li-ion-sony-18650-25r-inr-3-7v-2500mah-descarcare-20a?gad_source=1&gad_campaignid=21154157017&gclid=CjwKCAjwwJzPBhBREiwAJfHRnY9QXvOL2PKbyJ5mpJ0N7jnGqOhSX-3I-1vSrV_tmaTLDerpL75RmxoCVAwQAvD_BwE) | -| Total | | 1057.46 | +| [2-PRONG PLUG, 1PC](https://www.bricolaj.ro/stecher-plat-fara-cp-negru?gad_source=1&gad_campaignid=20166278864&gclid=Cj0KCQjw2YDQBhD_ARIsAE1qeScg9VBd2adSebJ-Jw5v2wAZdaTxWV-dSDg2yq2YJWaZiAYfU-t7H9oaAhnvEALw_wcB) | Design | [3.50](https://www.bricolaj.ro/stecher-plat-fara-cp-negru?gad_source=1&gad_campaignid=20166278864&gclid=Cj0KCQjw2YDQBhD_ARIsAE1qeScg9VBd2adSebJ-Jw5v2wAZdaTxWV-dSDg2yq2YJWaZiAYfU-t7H9oaAhnvEALw_wcB) | +| [SYNTHETIC FUR, 1PC](https://www.stoklasa.ro/blana-sintetica-x156074?barva=258339) | Design | [75.00](https://www.stoklasa.ro/blana-sintetica-x156074?barva=258339) | +| [VENTILATOR 5V 25x25x10mm, 2PC](https://www.emag.ro/ventilator-computer-axial-5v-25x25x10mm-19800/pd/D3N17GBBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | Cooling | [45.12](https://www.emag.ro/ventilator-computer-axial-5v-25x25x10mm-19800/pd/D3N17GBBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | +| [SILICON CABLE 1x6 10m, 1PC](https://www.emag.ro/cablu-siliconic-1-x-6-10m-112236/pd/D7GTQVYBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | Leash | [69.09](https://www.emag.ro/cablu-siliconic-1-x-6-10m-112236/pd/D7GTQVYBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | +| Total | | 1285.45 | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware1.webp b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware1.webp new file mode 100644 index 00000000000..dd9ba0b6f6a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware2.webp b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware2.webp new file mode 100644 index 00000000000..f432e0d2b69 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/hardware2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/index.md b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/index.md index 2c5a045f7ae..93f1799f548 100644 --- a/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/eduard.constantin05/index.md @@ -40,12 +40,18 @@ Finalized component research and ordered all necessary hardware (microcontroller ### Week 12 - 18 May +So far, I've 3D printed the baseplate for the switches to snap into. I went with a hand-wired matrix setup, including diodes for reliable input. I've also soldered a power switch and a battery, which I tested with a multimeter. I connected the columns and one of the rows to the microcontroller just to check the continuity. This is all for the first half of the build; I plan to wrap up the other half later this week. + ### Week 19 - 25 May ## Hardware The hardware relies on a 3D-printed chassis to hold the switches, eliminating the need for a PCB. The logic is handled by NRF52840 chips due to their low power consumption and excellent Bluetooth capabilities. +![KiCad](hardware1.webp) + +![KiCad](hardware2.webp) + ### Schematics ![KiCad](project_comp.svg) diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/index.md b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/index.md new file mode 100644 index 00000000000..978627204d9 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/index.md @@ -0,0 +1,118 @@ +# Internal Combustion Engine Emulator +An emulator that brings electric cars to life. + +:::info + +**Author**: Eduard-Costin Ionescu \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-edi10pro1 + +::: + + + +## Description + +iCEE (short for Internal Combustion Engine Emulator) uses the STM32 Nucleo G0B1RE to add audio, mechanical and visual feedback, similar to a thermic engine vehicle to an electric car platform. For the audio simulation it uses 6 buzzers, capable to mimic the audio signature of different engine layouts (inline 4, 6, V8, V10, V12) by the help of realistic software cylinder mapping. Commands such as acceleration, driving mode, engine start-up or shutdown are sent to the system using a phone app connected to a JDY-18 BLE module. The acceleration is filtered and mapped to a specific power map of each different engine type that ressembles its mechanical characteriscitcs, then sent over to two DC motors which simulates the electric car motor, and the steering is implemented using the MG90S Servo. The power curve is converted through software algorhithms from a linear one (specific to electric motors) to a non-homogenous bell shaped one, simulating the thermic engine. Also, to add to the realism the system simulates an automatic gearbox, giving the DC motor a short "hickup" reenacting a real gear change. The load of the motor is read by an ACS712 Current sensor, to feed the system back with how much the motor is struggling so that the virtual RPM of the motor decreases accordingly. Exhaust pipes are routed from the buzzers to the back of the platform to guide the sound underneath and behind it like a real thermic car. To top the experience up, for the Sport mode, there is a "Pops and Bangs" feature added to symbolize sportivity, with audio and LED light effects in the exhaust system. Also on the platform there is a TFT screen to see the menu, see the power curve of the engine and see the current gear. + +## Motivation + +The reason I came up with this idea relies in my early passion for cars and what makes each one unique feelings for the driver. Another reason is the fact that the world seems to be slowly but surely shifting to the EVs. But EVs are "boring" especially for people that appreciate the engineering behind "classic" cars. And while they are powerful and deliver instant loads of torque, they often feel soulless. +My goal with this project is to prove that electric vehicles implementing this kind of emulation can get extremely fun. + +## Architecture + + +iCEE recieves, remodels signals and output power through a multi-layered async architecture: + +1. **Signal Input Layer**: + * **Bluetooth (UART)**: Receives real-time acceleration data and commands from the phone app. + * **Load Sensing (ADC)**: Monitors motor effort via the ACS712 sensor to dynamically adjust the virtual RPM. +2. **Processing Layer (Engine Logic Engine)**: + * **Physics Simulator**: Maps linear pedal input to non-linear engine power curves. + * **Gearbox Emulator**: Manages gear ratios and introduces power "hickups" during shifts for realism. + * **Acoustic Mapper**: Calculates precision timing for the 6 buzzers based on engine firing orders. +3. **Output Layer**: + * **Audio Synthesis**: High-frequency digital pulses sent to 6 buzzers to mimic cylinder explosions. + * **Visual Feedback**: Menu and current gear on the TFT screen via SPI, LED Visuals for the "exhaust". + * **Power Simulation**: DC Motor speed control & servo steering via PWM. + +![Architecture Schematic](./ma2.svg) + +## Log + + + +### Week 5 - 11 May + +Assembled everything on the breadboard, created an unpolished software variant, set up the bluetooth connection. + +### Week 12 - 18 May + +Assembled the components on proto-boards, added more bluetooth funcionalities, started working on the chasis + +### Week 19 - 25 May + +## Hardware + +Built around the STM32 Nucleo G0B1RE, iCEE uses an array of six passive buzzers to synthesize multi-cylinder engine sounds through precise software timing. It features wireless control via a JDY-18 BLE module and visual telemetry on an ST7735 TFT display. The mechanical simulation employs two DC motor driven by an TB6612FNG module and an MG90s Servo, using an ACS712 current sensor for real-time load feedback and dynamic RPM adjustment. + +### Photos + +![First Hardware Prototype (One Motor, 4 Buzzers)](./ma3.webp) + +### Schematics + +![iCEE System Schematic](./ma5.svg) + +### Bill of Materials + + + +| Device | Usage | Price | +|--------|-------|-------| +| [STM32 Nucleo G0B1RE](https://www.st.com/en/evaluation-tools/nucleo-g0b1re.html) | The main microcontroller unit | [120.00 RON](https://ardushop.ro/ro/plci-de-dezvoltare/2411-stmicroelectronics-nucleo-g0b1re-6427854012296.html) | +| [JDY-18 BLE Module](https://ardushop.ro/ro/comunicatie/2018-modul-bluetooth-42-jdy-18-6427854030764.html) | Wireless communication with phone app | [22.00 RON](https://ardushop.ro/ro/comunicatie/2018-modul-bluetooth-42-jdy-18-6427854030764.html) | +| [ST7735 1.8" TFT Display](https://ardushop.ro/ro/electronica/2124-modul-lcd-spi-128x160-6427854032546.html) | Real-time telemetry and menu interface | [24.5 RON](https://ardushop.ro/ro/electronica/2124-modul-lcd-spi-128x160-6427854032546.html) | +| [ACS712 Current Sensor (5A)](https://ardushop.ro/ro/electronica/345-556-modul-senzor-curent-5a-20a-30a.html#/106-amperaj_maxim-5a) | Motor load monitoring for dynamic RPM | [13.30 RON](https://ardushop.ro/ro/electronica/345-556-modul-senzor-curent-5a-20a-30a.html#/106-amperaj_maxim-5a) | +| [Custom PCB 6 Buzzers Module & Current Amplifier]() | (Developed using KiCAD) Cylinder sound synthesis | [150.00 RON]() | +| [6x NPN Transistors](https://ardushop.ro/ro/circuite-integrate/374-599-tranzistor-to92-npn-pnp-alege-modelul.html#/214-valoare_tranzistor-2n2222) | Used for the cusotm PCB | [5.00 RON](https://ardushop.ro/ro/circuite-integrate/374-599-tranzistor-to92-npn-pnp-alege-modelul.html#/214-valoare_tranzistor-2n2222) | +| [4x LEDs](https://ardushop.ro/ro/led-uri/293-471-led-5mm.html#/5-culoare-galben) | Visual Synthesis | [5.00 RON](https://ardushop.ro/ro/led-uri/293-471-led-5mm.html#/5-culoare-galben) | +| [Resistors](https://ardushop.ro/ro/componente-discrete/1444-set-rezistori-1-4w-600buc-30-valori-10r-1m-6427854021199.html) | Resistors for the Custom PCB + Spares | [14.00 RON](https://ardushop.ro/ro/componente-discrete/1444-set-rezistori-1-4w-600buc-30-valori-10r-1m-6427854021199.html) | +| [TB6612FNG Motor Driver](https://ardushop.ro/ro/motoare-si-drivere/517-modul-diver-de-motoare-dual-tb6612fng-6427854006028.html) | DC Motor power management | [26.45 RON](https://ardushop.ro/ro/motoare-si-drivere/517-modul-diver-de-motoare-dual-tb6612fng-6427854006028.html) | +| [2x DC Motor 3-6V](https://ardushop.ro/ro/electronica/752-motor-dc-3v-6v-cu-reductor-1-48-6427854009609.html) | Drivetrain powertrain simulation | [7.20 RON](https://ardushop.ro/ro/electronica/752-motor-dc-3v-6v-cu-reductor-1-48-6427854009609.html) | +| [MG90S Servo](https://sigmanortec.ro/servomotor-mg90s-angrenaje-aluminiu?SubmitCurrency=1&id_currency=2&srsltid=AfmBOopUyBd_iW5poJ3Q4mwor-S4SfekIXNHqTUcPEHa6mvhV8qMQUNfjog) | Steering System | [20.00 RON](https://sigmanortec.ro/servomotor-mg90s-angrenaje-aluminiu?SubmitCurrency=1&id_currency=2&srsltid=AfmBOopUyBd_iW5poJ3Q4mwor-S4SfekIXNHqTUcPEHa6mvhV8qMQUNfjog) | +| [3x Proto Board](https://ardushop.ro/ro/breadboards-pcb-expansions/1413-placa-pcb-prototipare-fata-dubla-5x7-6427854020703.html) | Auxiliary PCBs | [12.00 RON](https://ardushop.ro/ro/breadboards-pcb-expansions/1413-placa-pcb-prototipare-fata-dubla-5x7-6427854020703.html) | + + + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Hardware Abstraction Layer (HAL) | Provides async support for UART, SPI, ADC, and PWM peripherals. | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async/Await Runtime | Manages concurrent tasks for engine logic, BLE parsing, and display updates. | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time management library | Handles precision microsecond delays for Software PWM and engine firing orders. | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization primitives | Uses `Signal` to safely communicate engine states between the main loop and display task. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing text, power plots, and menu UI elements on the TFT screen. | +| [static_cell](https://crates.io/crates/static_cell) | Static resource allocation | Used for safe, zero-cost aliasing of hardware peripherals like the SPI bus. | +| [defmt](https://defmt.ferrous-systems.com/) | Deferred formatting logger | High-efficiency logging used for real-time debugging of RPM and current sensor values. | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler | Provides detailed error traces over RTT in case of a system crash. | + +## Links + + + +1. [STM32 Datasheet](https://www.st.com/resource/en/datasheet/stm32g0b1re.pdf) +2. [STM32 Reference Manual](https://www.st.com/resource/en/reference_manual/rm0444-stm32g0x1-advanced-armbased-32bit-mcus-stmicroelectronics.pdf) +3. [ACS712 Current Sensor Datasheet](https://www.allegromicro.com/-/media/files/datasheets/acs712-datasheet.ashx) +4. [Rust Embedded Manual](https://docs.rust-embedded.org/book/) +5. [Dual Motor Driver Datasheet](https://cdn.sparkfun.com/assets/0/1/b/b/3/TB6612FNG.pdf) +6. [JDY-18 BLE Module Manual](https://manuals.plus/bluetooth-module/bluetooth-jdy-18-4-2-ble-module-usage-manual) diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma2.svg b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma2.svg new file mode 100644 index 00000000000..42a75d88d6f --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma2.svg @@ -0,0 +1,581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +STM322 NUCLEO G0B1RE + + + + + + + + + +Display +TFT +(ST7735) + + + + + + + + + + + + + + + + + + + + + + + +JDY-18 +BLE +Module + + + + + + + + + + + + + + + + + + + + + + + +6-Buzzer & Current +Amp Custom PCB +Module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TB6612FNG +Dual Motor +Driver + + + + + + + + + + + + + + + + +DC Motor + + + + + + + + + + + + + + + + +DC Motor + + + + + + + + + + + + + + + + + + + + + + + +ACS712 +Current +Sensor + + + + + + + + + + + + + + + + +MG90s +Servo + + + + + + + + + + +PWM TIM3 +CH1 + + + + + + + + + + + +SPI + + + + +UART + + + + +Digital Out + + + + + + + + + + + + + + + + + + +BLE +Controller +Phone +App + + + + +BLE + + + + +PWM +TIM14 +CH1 + + + + +ADC1 + + + + +Digital +Out + + + + + + + + + + + + + +LED + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma3.webp b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma3.webp new file mode 100644 index 00000000000..7e45e3b12b9 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma5.svg b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma5.svg new file mode 100644 index 00000000000..1e13d724dd6 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/eduard.ionescu0407/ma5.svg @@ -0,0 +1 @@ +07.05.2026 20:12 /Users/edi/Downloads/MA.pdf (Sheet: )NUCLEO-G0B1RENUCLEO-G0B1RENPN_2N2222_TO18-EBC1KACS712NPN_2N2222_TO18-EBC1KNPN_2N2222_TO18-EBC1KNPN_2N2222_TO18-EBC1KNPN_2N2222_TO18-EBC1KNPN_2N2222_TO18-EBC1KTB6612FNGSSOP24BATTERYGENERICMOTOR_DG01D1KCHIP-FLAT-R_0603-0.35MMMOTOR_DG01DSERVOSG90-HDR4311U1G$1RSTCN6_3*2PC9CN10_1PC8CN10_2PC10CN7_1PC12CN7_3PA14CN7_7PD0CN7_9PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25CN7_27CN7_27CN7_29CN7_29CN7_31CN7_31PC2CN7_35PC3CN7_37CN7_36CN7_36CN7_38CN7_38PB1CN7_34*2PA4CN7_32*2PB8CN5_10*2PC6CN10_4PB9CN5_9*2PA3CN10_6PD6CN10_10PA5CN5_6*2PA12CN10_12PA1CN7_30*2PA0CN7_28*2PD5CN7_26PD1CN7_10PD2CN7_4PC11CN7_2PA6CN5_5*2PA11CN10_14PA7CN5_4*2PC1CN10_16PB0CN5_3*2PC0CN10_18PC7CN5_2*2PA9CN5_1*2PB2CN10_22PA8CN9_8*2PB6CN10_24PB14CN9_7*2PB15CN10_26PB4CN9_6*2PB10CN10_28PB5CN9_5*2PB13CN10_30PB3CN9_4*2PA10CN9_3*2PA2CN10_34PC4CN9_2*2PD8CN10_36PC5CN9_1*2PD9CN10_38CN8_5CN8_5CN8_6CN8_6CN6_1CN6_1CN5_8CN5_8CN10_7CN10_7U1G$2CN4_1CN4_1VDDCN7_5*25V_USB_STLKJP2_15V_USB_CHGCN10_8*2E5VCN7_6*2CN11_1CN11_1VIN_5VJP2_3VINCN6_8*2GNDCN6_6*12CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4STLK_TXJP6_2STLK_RXJP6_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6VBATCN7_335VCN6_5*63V3CN6_2*5AGNDCN5_7*3STM_RSTJP1_1Q1R1U$4IP+1IP+2IP-3IP-4GND5FILT6VOUT7VCC81122Q2R21122Q3R31122Q4R41122Q5R51122Q6R61122U2AO11AO12PGND13PGND14AO25AO26BO111BO112PGND29PGND210BO27BO28VM213VM314PWMB15BIN216BIN117GND18STBY19VCC20AIN121AIN222PWMA23VM1244.8VGND13VCC12RESET11PWM410PWM39PWM28PWM17NULL26NULL15RTS4CTS3RXD_DD2TXD_DC1PWRC14ALED15STAT16SELECT17IO318IO219IO120NULL321NULL422NULL523NULL624NULL725GND126VCC127RX28TX29STAT130U$1R10D3U$3U$5PWR2SIG3GND1DS1BACKLIGHT11CS7D/C9RST8SDCS10MOSI6MISO5SCK4GND33VO2VIN1PA8PA85V5V5V5V5V5V5V5V3V33V33V33V33V33V33V3GNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDPB5PB5PB14PB14PB3PB3PB4PB4PA10PA10PA4PA4VBATTVBATTVBATTPA2PA2PA3PB1PB1PB10PB10PA5PA5PA6PA6PA7PA7PB0PB0PA9PA9PA1PA1MMpas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pwr 0pwr 0pwr 0pwr 0pas 0pwr 0pwr 0pwr 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pas 0pwr 0pwr 0pwr 0pwr 0pas 0pas 1pas 3pas 2pas 1pas 1io 0io 0io 0io 0io 0io 0io 0io 0pas 0pas 0pas 1pas 3pas 2pas 1pas 1pas 0pas 0pas 1pas 3pas 2pas 1pas 1pas 0pas 0pas 1pas 3pas 2pas 1pas 1pas 0pas 0pas 1pas 3pas 2pas 1pas 1pas 0pas 0pas 1pas 3pas 2pas 1pas 1pas 0pas 0out 0out 0pwr 0pwr 0out 0out 0out 0out 0pwr 0pwr 0out 0out 0pwr 0pwr 0in 0in 0in 0pwr 0in 0pwr 0in 0in 0in 0pwr 0pas 0pas 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0io 0pas 0pas 0pas 1pas 1pas 0pas 0pas 0pas 0io 0io 0io 0in 0in 0in 0in 0in 0in 0out 0in 0pwr 0pwr 0pwr 0 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/index.md b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/index.md index b8eb8ba66f6..06a7e66a17c 100644 --- a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/index.md @@ -76,9 +76,15 @@ I am also trying to balance both the mechanical and software parts of the projec The hardware setup includes an STM32 microcontroller, multiple servo motors, potentiometers, and basic prototyping components such as a breadboard and jumper wires. +## Photos + +![Prototype](photo1.webp) +![Prototype](photo2.webp) +![Prototype](photo.webp) + ### Schematics -(To be added) +![Schematic](schematics.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo.webp b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo.webp new file mode 100644 index 00000000000..a285e1eb917 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo1.webp b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo1.webp new file mode 100644 index 00000000000..2d8182c8c87 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo2.webp b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo2.webp new file mode 100644 index 00000000000..f3ea1af83ee Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/photo2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/schematics.svg b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/schematics.svg new file mode 100644 index 00000000000..0a086a79e01 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/eduard_gabriel.tomulescu/schematics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/Schematic.svg b/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/Schematic.svg new file mode 100644 index 00000000000..32533a2a4bb --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/Schematic.svg @@ -0,0 +1 @@ +SVG Image created as Schematic.svg date 2026-05-26T16:41:00 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.3Rev:Size: A4Id: 1/1Title: Color Parking CarFile: untitled.kicad_schSheet: /+5V+1-2M2Motor_DCPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U1ASTM32 NUCLEO-U545RE-QGND+1-2M3Motor_DC12345678910111213141516J3TB6612FNGGND+1-2M1Motor_DC+3V3GND+1-2M4Motor_DC+3V3+5VCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U2BSTM32 NUCLEO-U545RE-Q12SW1SW_SPST+3V3GNDVIN1GND2SCL3SDA4J1TCS34725+5VGNDBT1Battery_CellIN+1IN-2OUT+3OUT-4J2LM2596 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/index.md b/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/index.md index e422726c39c..529d6a9818d 100644 --- a/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/elena.negoita0201/index.md @@ -53,6 +53,8 @@ The system uses a 4WD chassis driven by independent DC motors, powered by a 3.7V ### Schematics +![Hardware Schematic](./Schematic.svg) + ### Bill of Materials | Device | Usage | Price | diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-main_schematic.svg b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-main_schematic.svg new file mode 100644 index 00000000000..2136333caea --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-main_schematic.svg @@ -0,0 +1 @@ +SVG Image created as RustyPlotter.svg date 2026-05-13T10:40:01 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/2Title: RustyPlotter - Enache Elian-DanielFile: RustyPlotter.kicad_schSheet: /DIR_XDIR_YEN_XEN_YSTEP_XSTEP_Ystepper_subcircuitFile: rustyplotter_stepper_subcircuit.kicad_schGNDGND+5VCOMNCNOY_Endstop1EndstopGNDPWR_FLAG+12VGNDGNDC40.47uFGNDC50.47uF12345678910EXP2MKS_MINI_12864GND+5V12345678910EXP1MKS_MINI_12864R210kOhmL1SolenoidD11N4007GNDGNDGNDPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80U1STM32 NUCLEO U545RE-QGNDGND+12VGND1PWM2OUT-3OUT+4VIN-5VIN+6J1PWM_ModuleGNDR310kOhm+5V+12V-VIN1+VIN2-VOUT3+VOUT4U212V_5V_Step_DownGNDGNDGNDGNDGNDGNDCOMNCNOX_Endstop1Endstop+5V12VGNDJ212V_PSUENC_ASD_CSBTN_ENCSCKSD_CSEND_YMOSIEND_XDOGLCD_CSENC_BEND_YDOGLCD_A0SOL_PWMENC_B+12VEND_XMOSIENC_ADOGLCD_A0MISOMISODOGLCD_CSBTN_ENCSCKSOL_PWMGNDGNDGNDGNDGNDGNDGNDGNDGNDGND+5VU1STM32 NUCLEO U545RE-QPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80C50.47uFR210kOhmR310kOhmGNDX_Endstop1EndstopCOMNCNOY_Endstop1EndstopCOMNCNOGNDC40.47uF+5V+12VU212V_5V_Step_Down-VIN1+VIN2-VOUT3+VOUT4GND+5VJ212V_PSU12VGNDGND+12VGNDGNDGNDEXP2MKS_MINI_1286412345678910GND+5VEXP1MKS_MINI_1286412345678910+12VJ1PWM_ModuleGND1PWM2OUT-3OUT+4VIN-5VIN+6GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-stepper_subcircuit_schematic.svg b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-stepper_subcircuit_schematic.svg new file mode 100644 index 00000000000..94b89a4f868 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/RustyPlotter-stepper_subcircuit_schematic.svg @@ -0,0 +1 @@ +SVG Image created as RustyPlotter-stepper_subcircuit.svg date 2026-05-13T10:47:06 Image generated by Eeschema-SVG12341234ABCABCDate:KiCad E.D.A. 10.0.1Rev:Size: A5Id: 2/2Title: RustyPlotter - Stepper SubcircuitFile: rustyplotter_stepper_subcircuit.kicad_schSheet: /stepper_subcircuit/+5VC1100uF+5V+12V1234X_Motor1NEMA17_StepperGNDGNDGND+5VGND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16X_Driver1A4988GND+5V1234Y_Motor1NEMA17_Stepper+5V+5V+5VGND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16Y_Driver1A4988GND+12VC2100uFGND+5VEN_YDIR_XSTEP_XEN_XSTEP_YDIR_YGND+5V+5V+5VGNDY_Driver1A4988GND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16GND+12V+5VGNDX_Driver1A4988GND1VDD21B31A42A52B6GND7VMOT8~{ENABLE}9MS110MS211MS312~{RESET}13~{SLEEP}14STEP15DIR16GND+5VGND+5V+5V+5V+12V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/components.webp b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/components.webp new file mode 100644 index 00000000000..3cf308df48d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/components.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/cut_profile.webp b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/cut_profile.webp new file mode 100644 index 00000000000..c5678ac9964 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/cut_profile.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/frame.webp b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/frame.webp new file mode 100644 index 00000000000..045279b636e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/frame.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/index.md b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/index.md index 19aebd3e501..015003b926c 100644 --- a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/index.md @@ -25,7 +25,7 @@ The main components of the plotter work together to complete the build: - **NEMA17 Stepper Motors (with A4988 Drivers)**: Provide X and Y-axis planar motion via GPIO step/direction signals - **JF-0530B Solenoid (with a Dual MOSFET Module)**: Moves the pen up and down, actuated via PWM - **Mechanical Endstops**: Get the origin (home) 0,0 position for X and Y-axis via GPIO input - - **RepRapDiscount Full Graphic Smart Controller (with an SD-card)**: Manages the entire user interface and reads the .gcode files for plotting over SPI + - **MKS MINI 12864 V2.0 Display (with an SD-card)**: Manages the entire user interface and reads the .gcode files for plotting over SPI ![RustyPlotter Architecture](rustyplotterschematic.svg) @@ -49,13 +49,32 @@ I started more research on the components, especially what solenoid to use and w I mapped out the hardware architecture diagram and wrote the system documentation for the first documentation milestone. +### Weeks 10-11 + +I planned, cut and assembled the aluminum frames for the new skeleton of the frame. I connected all the main components together and tested them, all working. Changed the display as the old one gave me trouble (lack of proper documentation). Bought another set of useful motion parts. Finished the KiCAD schematic of the circuit. + +![Frame](frame.webp) +The frame of the plotter +![Render](render.webp) +The render of the frame +![Components](components.webp) +The connected components +![Cutting the profiles](cut_profile.webp) +Cutting the aluminum profiles +![Thread tapping](thread_tap.webp) +Tapping threads into newly made holes + + ## Hardware -The plotter is built upon a rigid skeleton of 2020/2040 aluminum extrusions. Planar motion across the X and Y-axis is achieved using GT2 belts, pulleys, and V-slot wheels driven by two NEMA17 stepper motors. The electrical components are all connected through an 830-point breadboard with breadboard wires and jumpers. The NEMA17 steppers are driven by 2 A4988 stepper drivers, interfacing with the STM32 NUCLEO-U545RE-Q via GPIO. For protection of said drivers, 100uF 35V decoupling capacitors are added to help against voltage spikes. For the pen actuation, a JF-0530B 12V push-pull solenoid is used. It is controlled by a 15A 400W Dual Mosfet module, interfacing with the microcontroller via PWM. To prevent reverse voltage spikes from the solenoid getting to the MOSFET module, a 1N4007 flyback diode is used. The mechanical endstops, via GPIO, establish a known origin position for the X and Y-axis. In order to not get false triggers, 10kOhm external pull-up resistors and 0.47uF 50V debouncing capacitors are added. The machine is controlled (via SPI) with the help of the RepRapDiscount Full Graphic Smart Controller, which contains a 12864 LCD with a rotary encoder, used for navigating through the menus, showing status and selecting the .gcode files for plotting, which are stored on an SD-card plugged into the SD-card reader, the other component of the Smart Controller. The entire system is powered by a 12V 6A power supply with a DC barrel-jack, with 5V particularly going to the STM32 via a 12-24V to 5V 5A step-down module. +The plotter is built upon a rigid skeleton of 2020/2040 aluminum extrusions. Planar motion across the X and Y-axis is achieved using GT2 belts, pulleys, and V-slot wheels driven by two NEMA17 stepper motors. The electrical components are all connected through an 830-point breadboard with breadboard wires and jumpers. The NEMA17 steppers are driven by 2 A4988 stepper drivers, interfacing with the STM32 NUCLEO-U545RE-Q via GPIO. For protection of said drivers, 100uF 35V decoupling capacitors are added to help against voltage spikes. For the pen actuation, a JF-0530B 12V push-pull solenoid is used. It is controlled by a 15A 400W Dual Mosfet module, interfacing with the microcontroller via PWM. To prevent reverse voltage spikes from the solenoid getting to the MOSFET module, a 1N4007 flyback diode is used. The mechanical endstops, via GPIO, establish a known origin position for the X and Y-axis. In order to not get false triggers, 10kOhm external pull-up resistors and 0.47uF 50V debouncing capacitors are added. The machine is controlled (via SPI) with the help of the MKS MINI 12864 V2.0 Display, which contains a 12864 LCD with a rotary encoder, used for navigating through the menus, showing status and selecting the .gcode files for plotting, which are stored on an SD-card plugged into the SD-card reader, the other component of the Smart Controller. The entire system is powered by a 12V 6A power supply with a DC barrel-jack, with 5V particularly going to the STM32 via a 12-24V to 5V 5A step-down module. - +![RustyPlotter Main Schematic](RustyPlotter-main_schematic.svg) +![RustyPlotter Stepper Subcircuit Schematic](RustyPlotter-stepper_subcircuit_schematic.svg) + + ### Bill of Materials @@ -74,7 +93,7 @@ The format is | [x1 STM32 NUCLEO-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | [112.47 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | | [x1 12V 6A Power Supply](https://www.optimusdigital.ro/ro/surse-ac-dc-de-12-v/8016-alimentator-stabilizat-12-v-6000-ma.html) | Supplies power to the board and the other components | [49.99 RON](https://www.optimusdigital.ro/ro/surse-ac-dc-de-12-v/8016-alimentator-stabilizat-12-v-6000-ma.html) | | [x1 12/24V to 5V 5A Step-down Module](https://www.optimusdigital.ro/ro/surse-coboratoare/12484-sursa-coboratoare-dc-dc-de-la-24v12v-la-5v-5a.html) | Provides the STM32 with 5V | [already owned](https://www.optimusdigital.ro/ro/surse-coboratoare/12484-sursa-coboratoare-dc-dc-de-la-24v12v-la-5v-5a.html) | -| [x1 RepRapDiscount Full Graphic Smart Controller](https://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller) | The display with encoder and SD-card reader | [already owned](https://sigmanortec.ro/modul-control-imprimanta-3d-display-12864-ramps-14-card-sd?SubmitCurrency=1&id_currency=2&gad_source=5&gad_campaignid=23069763085&gclid=EAIaIQobChMIvdmqh96JlAMV0KeDBx3roxqiEAQYASABEgJshfD_BwE) | +| [x1 MKS MINI 12864 V2.0](https://reprap.org/wiki/MKS_MINI_12864) | The display with encoder and SD-card reader | [already owned](https://www.reprapmania.ro/cumpara/bigtreetech-lcd-display-mini-12864-v2-1575) | | [x1 SanDisk microSDHC Ultra 16GB C10/UHS-I](https://www.evomag.ro/foto-video-carduri-memorie/sandisk-card-de-memorie-sandisk-ultra-android-microsdhc-16gb-80-mb-s-citire-clasa10-uhs-i-3645969.html) | MicroSD-card (with SD-card adapter) | [already owned](https://www.evomag.ro/foto-video-carduri-memorie/sandisk-card-de-memorie-sandisk-ultra-android-microsdhc-16gb-80-mb-s-citire-clasa10-uhs-i-3645969.html) | | [x2 NEMA17 SL42STH40-1684A-23 Stepper Motor](https://forum.duet3d.com/assets/uploads/files/1694961895301-sl42sth40-1684a-23%E7%94%B5%E6%9C%BA%E5%9B%BE.pdf) | The motors that will move the pen on the X and Y axis | [already owned](https://www.aliexpress.com/i/1005008532513345.html) | | [x2 A4988 Stepper Driver](https://www.pololu.com/file/0j450/a4988_dmos_microstepping_driver_with_translator.pdf) | The drivers that control the stepper motors | [15.98 RON](https://www.optimusdigital.ro/ro/drivere-de-motoare-pas-cu-pas/866-driver-pentru-motoare-pas-cu-pas-a4988-rosu.html) | @@ -94,19 +113,23 @@ The format is | [x6 Bed Screws with Springs](https://sigmanortec.ro/set-surub-m3-cu-arc-si-piulita-pat-imprimanta-3d?SubmitCurrency=1&id_currency=2) | For securing the bed and making sure it's flat | [already owned](https://sigmanortec.ro/set-surub-m3-cu-arc-si-piulita-pat-imprimanta-3d?SubmitCurrency=1&id_currency=2) | | [GT2 Belt](https://sigmanortec.ro/Curea-GT2-6mm-p125814436?SubmitCurrency=1&id_currency=2) | X and Y axis motion | [already owned](https://sigmanortec.ro/Curea-GT2-6mm-p125814436?SubmitCurrency=1&id_currency=2) | | [GT2 Pulleys](https://www.optimusdigital.ro/ro/mecanica-roti-scripete/12641-roata-scripete-din-aluminiu-cu-diametru-intern-de-8-mm-30-dinti-pentru-curea-gt2-6mm.html) | Guides the belt | [already owned](https://www.optimusdigital.ro/ro/mecanica-roti-scripete/12641-roata-scripete-din-aluminiu-cu-diametru-intern-de-8-mm-30-dinti-pentru-curea-gt2-6mm.html) | -| [V-Slot Wheels](https://sigmanortec.ro/Rola-V-Slot-POM-p128663792) | X and Y axis motion | [already owned](https://sigmanortec.ro/Rola-V-Slot-POM-p128663792) | -| Total | Total cost of the components | 271.23 RON | +| [x9 V-Slot Wheels](https://hobbymarket.ro/rola-mare-openbuilds-pentru-profil-v-slot-cu-rulment-625-forma-v-set-2-buc.html) | X and Y axis motion | [51.52 RON](https://hobbymarket.ro/rola-mare-openbuilds-pentru-profil-v-slot-cu-rulment-625-forma-v-set-2-buc.html) | +| [x3 Eccentric Nuts](https://zyx3d.ro/produs/distantier-excentric) | X and Y axis motion | [18.00 RON](https://zyx3d.ro/produs/distantier-excentric) | +| Total | Total cost of the components | 340.75 RON | ## Software | Library | Description | Usage | |---------|-------------|-------| | [embassy-stm32](https://crates.io/crates/embassy-stm32) | Embassy Hardware Abstraction Layer (HAL) for ST STM32 series microcontrollers | Async task management | | [embassy-executor](https://crates.io/crates/embassy-executor) | Async/await executor designed for embedded usage | Runs the asynchronous tasks | -| [gcode](https://crates.io/crates/gcode) | A gcode parser for no-std applications | For parsing the .gcode files | -| [st7920](https://crates.io/crates/st7920) | SPI driver for the ST7920 LCD display controller | Display driver library | +| [embassy-time](https://crates.io/crates/embassy-time) | Instant and Duration for embedded no-std systems, with async timer support | Times the motor step pulses and delays | +| [embedded-hal](https://crates.io/crates/embedded-hal) | A Hardware Abstraction Layer (HAL) for embedded systems | PWM for solenoid control | +| [st7567s](https://crates.io/crates/st7567s) | Driver for the ST7567S LCD controller | Display driver library | | [embedded-graphics](https://crates.io/crates/embedded-graphics) | Embedded graphics library for small hardware displays | For displaying the system on the screen | +| [display-interface-spi](https://crates.io/crates/display-interface-spi) | Generic SPI implementation for display interfaces | SPI communication layer for display driver | | [embedded-sdmmc](https://crates.io/crates/embedded-sdmmc) | A basic SD/MMC driver for Embedded Rust | For storing and using the .gcode files | | [micromath](https://crates.io/crates/micromath) | Embedded-friendly math library | For calculating motion | +| [gcode](https://crates.io/crates/gcode) | A gcode parser for no-std applications | For parsing the .gcode files | | [defmt](https://crates.io/crates/defmt) | A highly efficient logging framework that targets resource-constrained devices, like microcontrollers | For debugging | ## Links @@ -114,7 +137,7 @@ The format is 1. [Embassy Framework Documentation](https://embassy.dev/book/) -2. [RepRapDiscount Full Graphic Smart Controller Wiki](https://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller) +2. [MKS MINI 12864 V2.0 Documentation](https://reprap.org/wiki/MKS_MINI_12864) 3. [A4988 Stepper Driver Datasheet](https://www.pololu.com/file/0j450/a4988_dmos_microstepping_driver_with_translator.pdf) 4. [JF-0530B Solenoid Datasheet](https://www.hobbytronics.co.za/Content/external/1274/D2512640695.pdf) 5. [STM32 NUCLEO-U545RE-Q Specifications](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/render.webp b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/render.webp new file mode 100644 index 00000000000..122e5065043 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/render.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/rustyplotterschematic.svg b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/rustyplotterschematic.svg index c1f959e7375..890fa0c5f72 100644 --- a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/rustyplotterschematic.svg +++ b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/rustyplotterschematic.svg @@ -1,4 +1,3 @@ - STM32 NUCLEO-U545RE-QRepRapDiscount FullGraphic SmartControllerDual MOSFETModuleGPIOGPIOPWMSwitched 12VGPIO12864 LCD withrotary encoder(ST7920 Driver)SD-card Readercomprised ofSPISPIEndstops (X, Y axis)12V 6A Power SupplyJF-0530B SolenoidA4988 DriverA4988 DriverNEMA17 Motor (X-Axis)NEMA17 Motor (Y-Axis)12/24V to 5V 5AStep-down Module5V12V diff --git a/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/thread_tap.webp b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/thread_tap.webp new file mode 100644 index 00000000000..c81146a9a1a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/elian_daniel.enache/thread_tap.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop1.webp b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop1.webp new file mode 100644 index 00000000000..741539b1f3a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop2.webp b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop2.webp new file mode 100644 index 00000000000..3f8c43dd73b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop_manole_eliza.svg b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop_manole_eliza.svg new file mode 100644 index 00000000000..94720fecb95 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/images/robomop_manole_eliza.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/index.md b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/index.md index 2618930a44a..7ba0ea4d744 100644 --- a/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/eliza_maria.manole/index.md @@ -37,8 +37,11 @@ Starting to assemble the project. ## Hardware The physical pary of my project consists of the STM32U545RE-Q microcontroller as the main source of processing power. The ESP32 module enables the user to remotely communicate with the STM32 in order to give out commands.The ultrasonic sensors detect any unwanted objects in the way of the car, each wheel is powered by a motor and the most important part of the machine is the dual servo powered cleaning system that can move up and down and side to side in order for it to adapt to different cleaning scenarious. +### Photos +![](images/robomop1.webp) +![](images/robomop2.webp) ### Schematics - +![](images/robomop_manole_eliza.svg) ### Bill of Materials | Device | Usage | Price | |----------|---------|---------| diff --git a/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/imagehardware.webp b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/imagehardware.webp new file mode 100644 index 00000000000..d4dc92769dc Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/imagehardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/kicademilia-2.svg b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/kicademilia-2.svg new file mode 100644 index 00000000000..73134b605e3 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/images/kicademilia-2.svg @@ -0,0 +1 @@ +SVG Image created as kicademilia.svg date 2026-05-08T21:51:55 Image generated by Eeschema-SVG123456123456ABCDABCDDate: 2026-05-08KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Rock Paper Scissors Robotic ArmFile: kicademilia.kicad_schSheet: /123SERVO1Conn_01x03_Pin1234ESP01_ADAPTER1Conn_01x04_Pin1234CONVERTER1Conn_01x04_PinPWR_FLAGBT1BatteryPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U1ANUCLEO-G0B1RE123SERVO3Conn_01x03_PinGND123SERVO4Conn_01x03_Pin123SERVO2Conn_01x03_PinCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U1BNUCLEO-G0B1RE+5VGNDPWR_FLAG1234OLED1Conn_01x04_PinSCLGNDSIGNALGNDGNDVCCSDASIGNALGND5V5VGND5VSIGNALVIN-5V OUTGND OUT5VSIGNALTXGNDVCCRXVIN+ \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/emilia.petre/index.md b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/index.md index 36575aaf911..204ca3901b6 100644 --- a/website/versioned_docs/version-fils_en/project/2026/emilia.petre/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/emilia.petre/index.md @@ -26,27 +26,36 @@ This project combines Computer Vision and Embedded Rust, transforming digital ge ## Log -# Weeks 5-6 +### Weeks 5-6 - Researched possible project ideas and chose the Rock, Paper, Scissors Game - Researched different development boards and selected the STM32 Nucleo-U545RE-Q as the main microcontroller - Ordered STM32 - # Weeks 7-8 + ### Weeks 7-8 - Researched additional hardware components and implementation methods - Ordered the necessary materials and performed initial functionality tests on the purchased modules - # Week 9 - - Searching for a suitable 3D-printable robotic hand that can be adapted to project requirements and looking to start the 3D printing process + ### Weeks 9-10 + + - Searched for a suitable 3D-printable robotic hand that can be adapted to project requirements and looking to start the 3D printing process + - Researched how to connect the hardware components together + + ### Week 11 + + - Completed the 3D printing process for the robotic hand + - Started integrating the electronic components with the printed structure ## Hardware The hardware platform of the project is centered around the STM32 Nucleo-U545RE-Q development board, which acts as the main controller of the robotic arm. The SG90 servo motors are used to actuate the fingers of the hand and reproduce the rock, paper, and scissors gestures. A 0.96-inch SSD1306 OLED display connected through I2C is used to show the score and game status. Wireless connectivity is provided by an ESP-01 WiFi module communicating with the STM32 through UART. Gesture recognition is performed on a laptop using a USB webcam or the integrated camera. For prototyping and interconnections, a breadboard and jumper wires are used. The robotic hand itself is manufactured using 3D printing, while the system is powered by a 5V external power supply. +![Hardware Photo](images/imagehardware.webp) + ### Schematics -Place your KiCAD or similar schematics here in SVG format +![Hardware Schematic](images/kicademilia-2.svg) ### Bill of materials @@ -60,7 +69,8 @@ Place your KiCAD or similar schematics here in SVG format | [ESP-01 Adaptor Module](https://sigmanortec.ro/Modul-adaptor-pentru-ESP-01-ESP8266-5V-3-3V-p182230951) | Wireless communication and remote scoreboard access | ~ 10 RON | | [Breadboard (760 points)](https://sigmanortec.ro/Breadboard-760-puncte-p190992404) | Rapid prototyping and circuit connections | ~ 10 RON | | Jumper Wires Set | Electrical interconnections between modules | owned | -| 5V Power Supply (old charger)| Powers servos and electronic modules | owned | +| [LiPo Gens Ace 3S 11.1v 450mAh 30C](https://www.autorc.ro/acumulatori-baterii-lipo-life-nimh/5736-acumulator-lipo-gens-ace-3s-111v-450mah-30c-mufa-jst.html) | Powers servos and electronic modules | ~40 RON | +| [Step-Down Voltage Converter 5V 5A](https://sigmanortec.ro/modul-coborator-tensiune-sincron-9-35v-la-5v-5a-fix) | Electrical interconnections between modules | ~ 20 RON | | 3D Printed Robotic Hand Parts | Mechanical structure of the robotic hand | - | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_dial.webp b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_dial.webp new file mode 100644 index 00000000000..c8a4e628fd7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_dial.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_enclosure.webp b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_enclosure.webp new file mode 100644 index 00000000000..b0966fd1eb0 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/blender_enclosure.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/index.md b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/index.md index dbcdec5e004..7316b332196 100644 --- a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/index.md @@ -82,18 +82,47 @@ Since the hardware components are still in transit, I focused on planning and do +### Week 10-11 +Received the physical components and successfully assembled the complete hardware circuit on the breadboard, including the custom driving circuit for the haptic motor. Validated the electrical connections and successfully tested the I2C communication with the OLED and the PWM signal generation for the servo motors. On the software side, completed approximately 80% of the embedded Rust firmware using the `embassy-rs` framework, establishing the core asynchronous task structure and peripheral initialization. The final 3D-printed enclosure and the final software refinements are the remaining steps. + + + +### Week 12-13 +Focused heavily on the software implementation and the mechanical design of the enclosure. On the software side, the embedded Rust firmware is now approximately 85% complete. The core asynchronous tasks utilizing the `embassy-rs` framework are fully functional: the UART Bluetooth task successfully receives and parses PC telemetry, the hardware PWM channels accurately drive the servo gauges, and the I2C OLED display updates dynamically based on the rotary encoder's menu state. The logic for the visual (WS2812B) and haptic alarms is also fully integrated. Only a few minor software tweaks and fine-tuning remain. + +On the mechanical side, I successfully finished designing the custom 3D enclosure in Blender. Utilizing the precise caliper measurements taken previously, I employed non-destructive Boolean modifiers to ensure a perfect fit for the STM32 Nucleo board, the breadboard, the OLED screen, and the front-panel analog gauges. + +![Blender Design - Custom Analog Gauge Dial](blender_dial.webp) +*Detail of the custom gauge dial design, featuring the tachometer-style graduations, numbers, and the temperature redline.* + +![Blender 3D Enclosure - Unassembled Main Body](blender_enclosure.webp) +*The 3D enclosure model prior to the final assembly, showing the main body without the gauge needles and back cover.* + + + ## Hardware -The logic runs on 3.3V and 5V. Most components interface directly with the STM32 pins. However, the 3V coin vibration motor draws too much current for a standard GPIO pin. To fix this, I designed a simple driving circuit: the GPIO pin switches an NPN transistor (2N2222) via a 1k Ohm base resistor, allowing external current to power the motor. A 1N4007 flyback diode is placed parallel to the motor to protect the microcontroller. +The system architecture relies on the **STM32 NUCLEO-U545RE-Q** as the central processing unit, interfacing with multiple peripherals across distinct communication protocols. The setup utilizes I2C for the SSD1306 OLED, asynchronous UART for the HC-06 Bluetooth module, hardware PWM channels for the SG90 analog gauges, and EXTI interrupts for the rotary encoder. + +Power management is strictly divided into two rails. A **5V power rail** supplies the high-current components (HC-06 module, WS2812B LED stick, and the servo motors) directly from the USB source to prevent brownouts. A secondary **3.3V logic rail** safely powers the display, the encoder, and the STM32 logic core. +While most digital modules interface directly with the STM32 GPIO pins, the 3V coin vibration motor draws significantly more current than a standard microcontroller pin can safely source. To solve this, I designed a low-side switching circuit: the MCU outputs a control signal to the base of a **2N2222 NPN transistor** via a 1kΩ resistor. Furthermore, a **1N4007 flyback diode** is placed in parallel with the motor's inductive load to suppress high-voltage spikes (back-EMF) and protect the microcontroller. ## Schematics +The complete electrical circuit was designed using KiCad EDA, detailing all net labels, power rails, and the custom haptic driving circuit. +![Schema Electrica](schema.svg) + + + +## Device Photo +Below is a photograph of the physical prototype assembled on the breadboard, showcasing the overall component placement and the dual-voltage wiring. -(KiCad schematics pending breadboard validation). +**Note:** The system is currently in the functional prototyping phase. The final step of the hardware development involves migrating these components from the breadboard into a custom-designed, 3D-printed desktop enclosure. +![Breadboard Prototype](poza.webp) ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/poza.webp b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/poza.webp new file mode 100644 index 00000000000..4ea86d9babc Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/poza.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/schema.svg b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/schema.svg new file mode 100644 index 00000000000..d4f7296c7e1 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/emilian.balasa/schema.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/RoverCAD.webp b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/cad.webp similarity index 100% rename from website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/RoverCAD.webp rename to website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/cad.webp diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/CommDiagram.webp b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/comm_diag.webp similarity index 100% rename from website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/CommDiagram.webp rename to website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/comm_diag.webp diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/index.md b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/index.md index 1ddcaed753f..40ba7261f2b 100644 --- a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/index.md @@ -25,7 +25,7 @@ The motivation behind the project was my interests in aerospace and CAD modellin ## Design Concept
-![RoverCAD](RoverCAD.webp) +![RoverCAD](cad.webp)
**View the 3D model on Onshape**: https://cad.onshape.com/documents/5f14d6b2b58ea1de1b963c7e/w/1fe714927cde1f63024d6414/e/a3d36fc78328462c12924175?renderMode=0&uiState=69cfa1ff11451da0736ff72f @@ -33,21 +33,29 @@ The motivation behind the project was my interests in aerospace and CAD modellin ## Architecture
-![PowerDiagram](PowerDiagram.webp) +![PowerDiagram](power_diag.webp)
-![CommDiagram](CommDiagram.webp) +![CommDiagram](comm_diag.webp)
## Log --- TO DO -- - ### Week 5 - 11 May +Got a first prototype working. The rover can be controlled with a smartphone, but no other peripherals are installed yet. For now, only the motor drivers and their motors are connected to the ESP32. Also, the power cables from the battery are connected to a master switch, after which they split in two power rails: 12V for the motors and a 5V from the buck converter for the ESP. The 6V converter will be connected later when adding the servos. + +
+![Side](side_view.webp) +
+ +
+![Top](top_view.webp) +
+ ### Week 12 - 18 May ### Week 19 - 25 May @@ -68,9 +76,9 @@ An additional temperature/humidity sensor on board might also provide informatio displayed/saved together with the sample measurements in the logs of the database. ### Schematics --- TO DO -- - -Place your KiCAD or similar schematics here in SVG format. +
+![Schem](schem.svg) +
### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/PowerDiagram.webp b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/power_diag.webp similarity index 100% rename from website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/PowerDiagram.webp rename to website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/power_diag.webp diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/schem.svg b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/schem.svg new file mode 100644 index 00000000000..5a8f177240e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/schem.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/side_view.webp b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/side_view.webp new file mode 100644 index 00000000000..f3131a8f522 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/side_view.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/top_view.webp b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/top_view.webp new file mode 100644 index 00000000000..06c873dbba7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/george.ciocan1302/top_view.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/hardware_setup.webp b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/hardware_setup.webp new file mode 100644 index 00000000000..aadf13e18fc Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/hardware_setup.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/index.md b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/index.md index a3bb9c2d7c4..969475c7caa 100644 --- a/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/index.md @@ -57,9 +57,16 @@ System workflow: * Initial setup. ## WEEK 7 * Started to connect components. +![Hardware Setup](hardware_setup.webp) --- +## WEEK 9 +* Connected RFID and PIR sensor. + +![Week 9 Progress](week9_progress.webp) + +--- ## Hardware @@ -79,6 +86,12 @@ The STM32 microcontroller controls all peripherals. The RFID module is used for --- +## Schematics + +![System Schematic](schematic.svg) + +--- + ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/schematic.svg new file mode 100644 index 00000000000..4c19a0f3957 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/schematic.svg @@ -0,0 +1,18992 @@ + + + +SVG Image created as secure-rfid-zhome.svg date 2026-05-10T14:15:13 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.2 +KiCad E.D.A. 10.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: secure-rfid-zhome.kicad_sch +File: secure-rfid-zhome.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J1 +J1 + + + + + + + + + + +RC522 RFID +RC522 RFID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + +J4 +J4 + + + + + + + + +LCD I2C +LCD I2C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D2 +D2 + + + + + + + + + + + + + + + + + + + + + + +Red LED +Red LED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +D1 +D1 + + + + + + + + + + + + + + + + + +Green LED +Green LED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +R1 +R1 + + + + + + + + + + + + + + + + +LDR +LDR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J2 +J2 + + + + + + + + + + + + + + + +PIR Sensor +PIR Sensor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J3 +J3 + + + + + + + + + + + + + + + + + + +Servo Motor +Servo Motor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VBAT + +VBAT + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 + +1 + + + + + + + + + + +PC13 +PC13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +PC14 +PC14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +PC15 +PC15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +PH0 +PH0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +PH1 +PH1 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +NRST +NRST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + + +PC0 +PC0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC1 +PC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + + + + +PC2 +PC2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC3 +PC3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + + + + +VSSA + +VSSA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 + +12 + + + + + + + + + + + + + + + + + + + + +VREF+ +VREF+ + + + + + + + + + + + + + + + + + + + + + + + + +13 +13 + + + + + + + + + + + + + + + + + + + + + + + +PA0 +PA0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +14 +14 + + + + + + + + + + + + + +PA1 +PA1 + + + + + + + + + + + + + + + + + + + + +15 +15 + + + + + + + + + + + + + + + + + + + + + + + + + +PA2 +PA2 + + + + + + + + + + + + + + + + + + + + + + + + + +16 +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA3 +PA3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +17 +17 + + + + + + + + + + + + + +VSS + +VSS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 + +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 + +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA4 +PA4 + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA5 +PA5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 +21 + + + + + + + + + + + + + + + + + + + + +PA6 +PA6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 +22 + + + + + + + + + + + + + + + + + + + + + + + + + +PA7 +PA7 + + + + + + + + + + + + + + + + + +23 +23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC4 +PC4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + + + + +PC5 +PC5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB0 +PB0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB1 +PB1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 +27 + + + + + + + + + + + + + + + + + +PB2 +PB2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +28 +28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB10 +PB10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VCAP1 +VCAP1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +30 +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 + +32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB12 +PB12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +33 +33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB13 +PB13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +34 +34 + + + + + + + + + + + + + + + + + + + + + +PB14 +PB14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +35 +35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB15 +PB15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +36 +36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC6 +PC6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +37 +37 + + + + + + + + + + + + + + + + + + + + +PC7 +PC7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +38 +38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC8 +PC8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +39 +39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC9 +PC9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40 +40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA8 +PA8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +41 +41 + + + + + + + + + + + + + +PA9 +PA9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +42 +42 + + + + + + + + + + + + + + + + + + +PA10 +PA10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +43 +43 + + + + + + + + + + + + + + + + + + + + + +PA11 +PA11 + + + + + + + + + + + + + + + + + + + + + + + + + +44 +44 + + + + + + + + + + + +PA12 +PA12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +45 +45 + + + + + + + + + + + + + + + + + + + + + + + +PA13 +PA13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +46 +46 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +48 + +48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA14 +PA14 + + + + + + + + + + + + + + + + + + + + + + + +49 +49 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PA15 +PA15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +50 +50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC10 +PC10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +51 +51 + + + + + + + + + + + + + + + + + + + + + + + + + +PC11 +PC11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +52 +52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PC12 +PC12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +53 +53 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PD2 +PD2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +54 +54 + + + + + + + + + + + + + + + + + + + + + + + +PB3 +PB3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +55 +55 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB4 +PB4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +56 +56 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB5 +PB5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +57 +57 + + + + + + + + + + + + + + + + + + + + + + +PB6 +PB6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +58 +58 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB7 +PB7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +59 +59 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BOOT0 +BOOT0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +60 +60 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB8 +PB8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +61 +61 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PB9 +PB9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +62 +62 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD + +VDD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +64 + +64 + + + + + + + + + + + + + + + + + + + + + + + + + + +U1 +U1 + + + + + + + + + + + + + + +STM32F401RETx +STM32F401RETx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Secure RFID Zhome +Secure RFID Zhome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/week9_progress.webp b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/week9_progress.webp new file mode 100644 index 00000000000..add047d7960 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/gul_neva.arifoglu/week9_progress.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/hasti-kalatzadeh/fire_detection_system.svg b/website/versioned_docs/version-fils_en/project/2026/hasti-kalatzadeh/fire_detection_system.svg new file mode 100644 index 00000000000..db1cf0289bf --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/hasti-kalatzadeh/fire_detection_system.svg @@ -0,0 +1,1509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/heorhii.dalbuz/index.md b/website/versioned_docs/version-fils_en/project/2026/heorhii.dalbuz/index.md new file mode 100644 index 00000000000..198aaa56199 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/heorhii.dalbuz/index.md @@ -0,0 +1,80 @@ +# Reflex Arena: Multi-Sensory Reaction Game + +A smart reaction time testing system that uses multi-sensory feedback (visual via OLED and audio via Buzzer) to measure user reflexes in precise milliseconds. + +:::info + +**Author**: Dalbuz Heorhii \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Heorhii78 + +::: + +## Description + +The Reflex Arena is built around an STM32 Nucleo microcontroller that orchestrates multiple peripherals to test human reaction speeds. Instead of relying on a basic LED, the system utilizes a 0.96" OLED screen to display the user interface, instructions, and the final exact time. A randomized timer dictates when the stimulus occurs to prevent user anticipation. Once the visual cue appears on the screen and the audio cue plays through the Piezo Buzzer, a hardware timer begins counting. The user must press the corresponding push button as fast as possible to stop the timer, and the result is displayed on the screen. + +## Motivation + +I chose this project to implement the core concepts learned during the labs in a fun and interactive way. This project serves as a practical exercise in asynchronous task management, hardware timers, and peripheral interfacing via I2C and GPIO. My goal was to move beyond simple LED manipulation and understand how to orchestrate a complete embedded system with an actual visual interface and real-time user input. + +## Architecture + +The STM32 interfaces with the components using the following protocols: + +- **I2C Bus**: Drives the 0.96" OLED Display for rendering text, countdowns, and reaction time metrics. +- **GPIO (Digital Output)**: Controls the Piezo Buzzer to provide immediate audio stimulus. +- **GPIO (Digital Input)**: Reads the state of the push buttons, utilizing debouncing techniques to ensure accurate input registration. +- **Hardware Timers**: Used for generating the randomized delay and accurately measuring the reaction time in milliseconds. + +**Component Connections:** + +| Component | Interface | STM32 Pins | +|-----------|-----------|------------| +| 0.96" OLED Display | I2C | SDA / SCL (TBD) | +| Piezo Buzzer | GPIO | Digital Output (TBD) | +| Push Buttons | GPIO | Digital Inputs (TBD) | + +## Log + +### Week 1-4 + +I started doing research on potential project ideas. The initial idea was just using LEDs, but I decided to upgrade the concept to include an OLED display and audio feedback to make it more complex and engaging. + +### Week 5-8 + +Started gathering the hardware components. Set up the Rust development environment and began looking into the documentation for the `ssd1306` display driver. Designed the basic state machine logic for the game (Idle -> Randomized Wait -> Trigger -> Result). + +### Week 9 + +Received the remaining components. Verified the pinout compatibility between the Nucleo-U545RE-Q and the OLED display. Started the initial hardware assembly on the breadboard and tested basic I2C communication with the screen. + +## Hardware + +The core of the project is the STM32 Nucleo-U545RE-Q board. The visual interface is handled by a 0.96" I2C OLED display (SSD1306). Audio feedback is provided by a standard active piezo buzzer. Manual inputs are handled by tactile push buttons connected with pull-down resistors. The circuit is prototyped on a 400-point breadboard using standard Dupont jumper wires. + +### Bill of Materials + +| Device | Usage | Estimated Price | +|--------|--------|-------| +| STM32 Nucleo-U545RE-Q | The main microcontroller | Already got | +| 0.96" SSD1306 OLED Display (I2C) | Display interface and timer output | 19.00 RON | +| Active Piezo Buzzer | Audio stimulus | 5.00 RON | +| Push Buttons (Tactile) | User input | 2.00 RON | +| 10kΩ Resistors | Pull-down for buttons | 1.00 RON | +| Breadboard (400 points) | Prototyping | 20.00 RON | +| Jumper Wires (M-M, M-F) | Connections | 15.00 RON | + +## Software + +| Library / Interface | Description | Usage | +|---------------------|-------------|-------| +| `embassy-stm32` / `stm32-hal` | Hardware Abstraction Layer | I2C (OLED), GPIO (Buzzer, Buttons), Timers | +| `ssd1306` | OLED display driver | Initialization and framebuffer management for the display | +| `embedded-graphics` | 2D graphics library | Drawing text and UI elements on the OLED | +| Hardware RNG | Random Number Generator | Generating random delay times before the stimulus | + +## Links + +1. [Embedded Rust 101 course labs](https://embedded-rust-101.wyliodrin.com/docs/fils_en/category/lab) +2. [SSD1306 Crate Documentation](https://docs.rs/ssd1306/latest/ssd1306/) +3. [Embedded Graphics Library](https://docs.rs/embedded-graphics/latest/embedded_graphics/) diff --git a/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/index.md b/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/index.md new file mode 100644 index 00000000000..1d59a04e01c --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/index.md @@ -0,0 +1,141 @@ +# Real-Time Audio Spectrum Visualizer + +A real-time audio spectrum visualizer that captures sound via a microphone, processes it using FFT on an STM32U545RE, and displays the frequency bands live on a PC. + +:::info + +**Author**: Popescu Iacob Cristian \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-PopescuIacob + +::: + +## Description + +This project implements a real-time audio spectrum visualizer using the STM32U545RE microcontroller. +Audio signals are captured via an analog microphone module, digitized using the MCU's built-in ADC, +processed using a Fast Fourier Transform (FFT) algorithm, and the resulting frequency band data is +streamed over USB CDC (serial) to a host PC, where a Python script renders a live bar chart of the +audio spectrum. + +The system continuously samples audio, splits the spectrum into bass, midrange, and high-frequency +bands, and visualizes their amplitudes in real time. + +--- + +## Motivation + +I chose this project because of my passion for music and curiosity about how audio signals are +processed digitally. The project naturally combines several core topics of the Microprocessor +Architecture course — real-time data acquisition, DMA transfers, signal processing, async +programming, and USB communication — in a single, practical, and visually engaging system. + +--- + +## Architecture + +The system is composed of the following main components: + +- **Audio Capture Module** — the MAX4466 analog microphone captures ambient sound and outputs + an analog voltage signal proportional to the sound pressure level. +- **ADC Acquisition Module** — the STM32U545RE's 14-bit ADC samples the microphone output + continuously using DMA, filling a fixed-size buffer without CPU involvement. +- **Signal Processing Module (FFT)** — once a buffer of 256 samples is ready, the `microfft` + crate computes the Fast Fourier Transform, converting the time-domain samples into + frequency-domain amplitudes grouped into bass, midrange, and high bands. +- **USB CDC Communication Module** — the processed band amplitudes are serialized and sent + over USB as a virtual serial port to the host PC using `embassy-usb`. +- **PC Visualization** — a Python script reads the serial data and renders a live updating + bar chart of the frequency spectrum using `matplotlib`. + + + +--- + +## Log + +### Week 5 - 11 May + +- Set up Rust Embassy project scaffold (Cargo.toml, config.toml, rust-toolchain.toml) + +### Week 12 - 18 May + +### Week 19 - 25 May + +--- + +## Hardware + +The hardware setup is intentionally minimal. The STM32U545RE Nucleo board is connected to a +MAX4466 analog microphone amplifier module. The microphone's analog output feeds directly into +one of the MCU's ADC input pins. The board is connected to the host PC via USB, which serves +both as the power supply and the data link for streaming FFT results. + +The MAX4466 module includes a built-in adjustable gain amplifier, which allows tuning the +microphone sensitivity to the environment without any additional circuitry. + +### Schematics + +![KiCad Schematic](./kikadpop.webp) + +### Bill of Materials + +| Device | Usage | Price | +| --- | --- | --- | +| STM32U545RE Nucleo Board | Main microcontroller | Borrowed | +| MAX4466 Microphone Amplifier Module | Analog audio capture | 20 RON | + +--- + +## Software + +| Library | Description | Usage | +| --- | --- | --- | +| embassy-stm32 | STM32 async HAL | ADC, DMA, GPIO, USB peripheral drivers | +| embassy-executor | Async task scheduler | Runs audio, processing, and USB tasks concurrently | +| embassy-sync | Async channels and primitives | Inter-task communication between ADC and FFT tasks | +| embassy-time | Timers and delays | Sampling rate control and timeouts | +| embassy-usb | USB device stack | USB CDC (virtual serial port) for PC communication | +| microfft | FFT computation (no_std) | Converts ADC sample buffer into frequency amplitudes | +| heapless | Fixed-size data structures | Sample buffers and queues without heap allocation | +| defmt + defmt-rtt | Embedded logging | Debug output over RTT via probe-rs | +| panic-probe | Panic handler | Reports panics through the debug probe | +| cortex-m + cortex-m-rt | Low-level CPU support | Cortex-M33 boot and runtime initialization | +| pyserial *(PC)* | Serial port communication | Reads USB CDC data from the STM32 on the host PC | +| matplotlib *(PC)* | Plotting library | Renders the live frequency spectrum bar chart | + +### Functional Diagram + +``` +[Embassy Async Runtime] + | + |----[Task: ADC Capture] + | - DMA fills 256-sample buffer from MAX4466 + | - Sends buffer via async channel when full + | + |----[Task: FFT Processing] + | - Receives buffer from ADC task + | - Runs microfft on samples + | - Groups bins into Bass / Mids / Highs + | - Sends amplitudes to USB task + | + |----[Task: USB CDC Send] + - Receives band amplitudes + - Serializes as comma-separated values + - Writes to USB CDC virtual serial port + +[Host PC] + - pyserial reads USB CDC port + - matplotlib renders live bar chart +``` + +--- + +## Links + +1. [Embassy Framework](https://embassy.dev/) +2. [STM32U545RE Datasheet](https://www.st.com/resource/en/datasheet/stm32u545re.pdf) +3. [microfft crate](https://docs.rs/microfft) +4. [Fast Fourier Transform — Wikipedia](https://en.wikipedia.org/wiki/Fast_Fourier_transform) +5. [MAX4466 Datasheet](https://datasheets.maximintegrated.com/en/ds/MAX4465-MAX4469.pdf) +6. [Embedded Rust Book](https://docs.rust-embedded.org/book/) +7. [Embassy STM32 Examples](https://github.com/embassy-rs/embassy/tree/main/examples/stm32u5) diff --git a/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/kikadpop.webp b/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/kikadpop.webp new file mode 100644 index 00000000000..61da81c446e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/iacob_cristian.popescu/kikadpop.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware1.webp b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware1.webp new file mode 100644 index 00000000000..8a687c77fa3 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware2.webp b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware2.webp new file mode 100644 index 00000000000..a8f966e9144 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/hardware2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/index.md b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/index.md index 9d75a063913..53e137e77e8 100644 --- a/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/index.md @@ -24,6 +24,7 @@ I decided to add the rhythm game component to make the experience more engaging The system is designed as a high-speed, "real-time reactive" process that prioritizes low latency to ensure the harp feels like a real instrument. It all starts with the **STM32**’s high-speed GPIOs constantly monitoring the **phototransistors**. These sensors act as the "eyes" of the system, waiting for the exact moment a laser beam is interrupted. The core logic is managed by the **Embassy** async executor, which acts as a sophisticated conductor, multitasking between several time-sensitive events. When a hand "plucks" a light string, the system immediately jumps into action: it triggers a precise **PWM** signal to the **passive buzzer** to generate the corresponding musical note, while simultaneously checking the timing against the "Piano Tiles" game logic. This happens in microseconds, ensuring that the sound and the visual feedback are perfectly in sync without any perceptible lag. +![Diagrama](./laser_harp.svg) ## Log @@ -45,6 +46,15 @@ The core logic is managed by the **Embassy** async executor, which acts as a sop - Set up the Rust development environment and the project page. - Started testing basic GPIO interrupts with the STM32 board. +### Week 27 April - 3 May +- Finalized the acquisition of all necessary components. +- Revised the audio system: replaced the simple buzzer with 40mm 3W speakers and an audio amplifier module (including a potentiometer for volume control) for better sound quality. +- Added a new feature: an LED strip for visual feedback, mounted above the harp to indicate which string needs to be played during the game. +- Developed the core game logic and performed initial tests using a single laser diode and phototransistor setup. +- Implemented a temporary testing phase where all virtual game strings respond to the single physical input, with audio output currently routed through the laptop. +![Photo1](./hardware1.webp) +![Photo1](./hardware2.webp) + ## Hardware The hardware components are selected to ensure a low-latency and interactive musical experience: @@ -60,7 +70,7 @@ The hardware components are selected to ensure a low-latency and interactive mus ### Schematics -![Diagrama](./laser_harp.svg) +![KiCad](./kicad.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/kicad.webp b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/kicad.webp new file mode 100644 index 00000000000..27bdff14870 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/ioana_alexia.marin/kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/arhitecture.svg b/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/arhitecture.svg new file mode 100644 index 00000000000..3395b7cd07e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/arhitecture.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/index.md b/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/index.md new file mode 100644 index 00000000000..bdd8e55fadf --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/ionut.bajan/index.md @@ -0,0 +1,78 @@ +# Smart TrashHD + +:::info + +**Author**: Bajan Ionut \ +**GitHub Project Link**: https://github.com/UPB-PMRust/fils-project-2026-bajanionut + +::: + + + +## Description +The main idea of my project is that very often people tend to throw trash in the wrong bin slot, this project is focused on making it be more efficient at sorting the trash so it doesn't get to be sorted for more time than it need to be. + +## Motivation + +Seeing so many people just throwing away trash where they can without looking in which compartament was the fundation of my idea, but seeing project like this one on social media got my attention and my interest level high. + +## Architecture + +The architecture consists of an Edge Controller (STM32) managing local sensors and actuators, a Wireless Bridge (ESP32-CAM) for image relay, and a PC Intelligence Hub for Python-based AI processing, all interconnected through a hybrid UART and Wi-Fi communication pipeline. +![Hardware Architecture Schematic](./arhitecture.svg) + +## Log + + + +### Week 5 - 11 May + +Discussed the idea to the lab assistent +Started working on the 3D model and looking for which components to buy +Bought all the things i need and slowly got into the coding part + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +The hardware centers on an STM32 Nucleo-U545RE-Q master controller paired with an ESP32-CAM for wireless vision and a laptop for Python-driven AI processing. A 16x2 I2C LCD and dual tactile buttons provide the user interface, while an HC-SR04 ultrasonic sensor triggers the capture and an MG996R servo executes the physical sorting + +### Schematics + +Place your KiCAD or similar schematics here in SVG format. + + +### Bill of Materials + +| Device | Usage | Price | +| :--- | :--- | :--- | +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re.html) | This is used as the master orchestrator running Rust to manage the hardware state machine and real-time sensor logic. | [128 RON](https://www.st.com/en/evaluation-tools/nucleo-u545re.html) | +| [ESP32-CAM + MB](https://www.optimusdigital.ro/ro/esp32/11559-modul-esp32-cam-cu-interfata-usb-ch340.html) | This is used as a wireless bridge to capture images and relay data between the Nucleo and the Python AI on the laptop. | [78 RON](https://www.optimusdigital.ro/ro/esp32/11559-modul-esp32-cam-cu-interfata-usb-ch340.html) | +| [LCD 1602 with I2C](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/10-afisaj-lcd-1602-cu-interfata-i2c-si-fundal-albastru.html) | This is used to provide the user interface by displaying object classification results and confirmation prompts. | [22 RON](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/10-afisaj-lcd-1602-cu-interfata-i2c-si-fundal-albastru.html) | +| [HC-SR04 Ultrasonic Sensor](https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/11-senzor-ultrasonic-hc-sr04.html) | This is used to detect when an object is placed on the sorting plate, initiating the automated capture sequence. | [Owned](https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/11-senzor-ultrasonic-hc-sr04.html) | +| [MG996R Servo Motor](https://www.optimusdigital.ro/ro/servomotoare/111-servomotor-mg996r.html) | This is used to physically move the sorting mechanism to the correct bin based on the final object classification. | [Owned](https://www.optimusdigital.ro/ro/servomotoare/111-servomotor-mg996r.html) | +| [Tactile Buttons](https://www.optimusdigital.ro/ro/butoane-si-comutatoare/2513-set-10-butoane-6x6x5-mm.html) | This is used to receive physical "Yes" or "No" confirmation inputs from the user during the sorting process. | [Owned](https://www.optimusdigital.ro/ro/butoane-si-comutatoare/2513-set-10-butoane-6x6x5-mm.html) | +| (https://www.optimusdigital.ro/ro/surse-de-alimentare-surse-in-comutatie/2996-sursa-de-alimentare-5v-3a.html) | +| [Jumper Wires](https://www.optimusdigital.ro/ro/fire-si-conectori-fire-conectori/128-set-fire-tata-tata-65-bucati.html) | This is used to securely connect the sensors, actuators, and bridge modules to the Nucleo board and breadboard. | [25 RON](https://www.optimusdigital.ro/ro/fire-si-conectori-fire-conectori/128-set-fire-tata-tata-65-bucati.html) | + +## Software + + +| Library | Description | Usage | +| :--- | :--- | :--- | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | Async hardware abstraction layer for STM32. | Used to control GPIOs, UART communication, and PWM for the servo on the Nucleo. | +| [hd44780-driver](https://github.com/idubrov/hd44780-driver) | Generic driver for the HD44780 LCD. | Used to send text commands and classification results to the 16x2 LCD. | +| [esp32-camera](https://github.com/espressif/esp32-camera) | Official Espressif camera driver for C++. | Used to initialize the OV2640 sensor and capture frame buffers on the ESP32. | +| [Flask](https://github.com/pallets/flask) | Lightweight Python web framework. | Used to create the local server on your laptop that receives image uploads via Wi-Fi. | +| [ultralytics](https://github.com/ultralytics/ultralytics) | Real-time object detection (YOLO). | Used in the Python script to identify if the object is plastic, metal, or paper. | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library for Rust. | Used for advanced text formatting and positioning on the LCD screen. | + +## Links + + + +1. [link](https://www.instagram.com/reels/DJ1TKzJMeLl/) +2. [link](https://www.youtube.com/watch?v=bZIKVaD3dRk) +... diff --git a/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/circuit.webp b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/circuit.webp new file mode 100644 index 00000000000..06f2a68a7d6 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/circuit.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/ilie_irina.svg b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/ilie_irina.svg new file mode 100644 index 00000000000..17b8463a1f3 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/ilie_irina.svg @@ -0,0 +1,4 @@ + + + +
Ultrasonic Sensor
Ultrasonic Sensor
Sound Sensor
Sound Sensor
STM32 Controller
STM32 Contr...
Servo Motors
Servo Motors
OLED Display
OLED Display
Text is not SVG - cannot display
diff --git a/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/index.md b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/index.md index d8c58e846b8..16302e59c79 100644 --- a/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/index.md @@ -30,7 +30,7 @@ Connections: - The microcontroller processes the input signals - Based on the processed data, it controls the servo motors and the display -![Architecture Diagram](./diagram.svg) +![Architecture Diagram](./ilie_irina.svg) ## Log @@ -49,13 +49,19 @@ The system uses the following hardware components: - STM32 microcontroller - Ultrasonic sensor - Sound sensor -- 2x SG90 Servo motors +- 3x SG90 Servo motors - OLED display - Breadboard and jumper wires ### Schematics -(Add your KiCAD schematics here if available) +#### Circuit Prototype + +![Circuit Prototype](./circuit.webp) + +#### KiCAD Schematic + +![KiCAD Schematic](./stm32_flower_project.svg) ### Bill of Materials @@ -64,7 +70,7 @@ The system uses the following hardware components: | STM32 Nucleo board | Main controller | ~120 RON | | Ultrasonic Sensor (HC-SR04) | Distance detection | ~10 RON | | Sound Sensor (KY-038) | Audio input | ~5-10 RON | -| SG90 Servo Motors (x2) | Stem movement (2 axes) | ~20 RON | +| SG90 Servo Motors (x3) | Flower petal and stem movement | ~30 RON | | ⁠SSD1306 OLED Display | Visual output | ~25 RON | | Breadboard | Prototyping | ~20 RON | | Jumper wires | Connections | ~15 RON | diff --git a/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/stm32_flower_project.svg b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/stm32_flower_project.svg new file mode 100644 index 00000000000..03ef9f10993 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/irina_elena.ilie/stm32_flower_project.svg @@ -0,0 +1 @@ +SVG Image created as stm32_flower_project.svg date 2026-05-10T23:50:46 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: stm32_flower_project.kicad_schSheet: /+5VGND123J6SERVO3GND123J2KY-037+3.3VGND+5VGNDGND+5V+3.3V123J4SERVO1123J5SERVO2GND1234J3OLED+5VBT1Battery_CellPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80U1NUCLEO64-F411RE1234J1HC-SR04GNDVCCSIGSIGOUTVCCSIGVCCTRIGECHOGNDVCCGNDGNDGNDSDAVCCVCCSCLGNDJ2KY-037123+3.3VGND+5VJ1HC-SR041234J3OLED1234GNDJ5SERVO2123J4SERVO1123+3.3V+5VGNDGND+5VGNDJ6SERVO3123GND+5V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/Tacticode Enterprise Architecture.svg b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/Tacticode Enterprise Architecture.svg new file mode 100644 index 00000000000..2400c23c1eb --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/Tacticode Enterprise Architecture.svg @@ -0,0 +1 @@ +B_ChiildrenBusiness ActorB_TeacherBusiness RoleB_TeachingAlgorithmicThinkingBusiness ServiceB_ClassroomBusiness InterfaceB_Learn Algorithmic ThinkingBusiness FunctionB_PickcubesBusiness ProcessB_Connectand clickcubesBusiness ProcessB_Press thebuttonBusiness ProcessB_Observethe feedbackBusiness ProcessB_Explain Algorithmic ThinkingBusiness FunctionB_Explainhow cubesworkBusiness ProcessB_ProvidelessoninstructionsBusiness ProcessA_Feedback Provision ModuleApplication ComponentProvide FeedbackApplication FunctionPlay SongApplication ProcessOr JunctionPlay theError SoundApplication ProcessPlay a VocalFeedbackThree TimesApplication ProcessA_ParseBlockPlacementApplication ProcessA_InputReceivedApplication EventB_TacticodeBlocksBusiness ObjectA_TacticodeBlock DataData ObjectA_SyntaxCheckingServiceApplication ServiceA_TTSServiceApplication ServiceA_SongPlayingServiceApplication ServiceA_BackendApplication ComponentA_Syntax Checker ModuleApplication ComponentA_PerformSyntaxAnalysisApplication ProcessA_SyntaxAnalyzerInterfaceApplication InterfaceA_TTS ModuleApplication ComponentA_SyntethiseTTSApplication ProcessA_TTS SynthInterfaceApplication InterfaceA_Song Playing ModuleApplication ComponentA_Play SongsApplication ProcessA_Song PlayerInterfaceApplication InterfaceA_Block Placement ParserApplication ComponentA_ObtainBlocks DatafromSensorsApplication ProcessA_BlockPlacement ParserInterfaceApplication InterfaceA_BlockPlacementParserServiceApplication ServiceT_Tacticode NodeNodeT_ESP32S3DeviceT_HALSystem SoftwareT_MOSIInterfaceTechnology InterfaceT_GPIOInterfaceTechnology InterfaceT_ExecuteISRTechnology FunctionT_RFID Scanner ChainDeviceT_MISOInterfaceTechnology InterfaceT_Communicate SPITechnology ProcessT_Communicate SPITechnology ProcessT_HardwareInterruptServiceTechnology ServiceT_DFPlayer ModuleDeviceT_UARTInterfaceTechnology InterfaceT_Communicate UARTTechnology ProcessT_UARTInterfaceTechnology InterfaceT_Communicate UARTTechnology ProcessT_RFID TagReportingTechnology FunctionT_SoundsPlayerTechnology FunctionT_ButtonRising EdgeTechnology EventT_Push ButtonTechnology InterfaceT_RFID TagReportsArtifactT_SoundPlayingServiceTechnology ServiceT_DFPlayer APITechnology InterfaceT_DetectRFID TagTechnology ServiceT_RFIDProgrammingAPITechnology InterfaceA_FeedbackProvisionServiceApplication Service \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/application.webp b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/application.webp new file mode 100644 index 00000000000..e2cd8ab792e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/application.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/business.webp b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/business.webp new file mode 100644 index 00000000000..ef17d6e4471 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/business.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/index.md b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/index.md new file mode 100644 index 00000000000..023e289cdd8 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/iris_alexandra.vavilov/index.md @@ -0,0 +1,83 @@ +# Physical Music Blocks for Teaching Algorithmic Thinking PoC +A physical programming interface allowing visually impaired children to learn algorithmic thinking by composing music using magnetic blocks. + +:::info + +**Author**: Iris-Alexandra Vavilov \ +**GitHub Project Link**: [link_to_github](https://github.com/UPB-PMRust-Students/fils-project-2026-unirisel) + +::: + +## Description + +This project aims to create an accessible, physical programming interface using custom 3D-printed blocks that snap together magnetically for a better UX. The system features a smart reading track that utilizes passive RFID tags embedded in the nested blocks to parse the user's code. Once the blocks are arranged, the system provides immediate auditory feedback by playing a composed musical melody or triggering voice prompts for syntax error checking and educational feedback. + +## Motivation + +As a part-time teacher, I faced the challenge of making classroom lessons interactive and inclusive for all students. It is especially difficult to include visually impaired kids alongside other children when working on algorithmic thinking challenges that are traditionally computer-based. This project was chosen to bridge that gap by providing a tactile, screen-free learning environment, making the learning environment for algorithmic thinking more inclusive even without direct access to a computer. + +## Architecture + +![Entire Architecture](./Tacticode%20Enterprise%20Architecture.svg) + +![Business Layer](./business.webp) +The Archimate Business Layer describes the main interaction of the actors: the Children and the Teachers. +The main business function that the B Children will perform is described through "B Learn Algorithmic Thinking" business function. The only service we care about in this layer is the B Teaching Algorithmic Thinking that is Realized by the Teacher's function. Back to B Learn Algorithmic Thinking" function: the core process we will try to support is: "B Observe Feedback" through the Application Layer. + +![Application Layer](./application.webp) +The application Layer is split into two components: the Frontend : "A Feedback Provision Module". This module role is to trigger the "Backend" processing of the sensor data, syntax analysis, and sound playing and TTS synthesis. All the modules in the backend component are decoupled and provide their interfaces as well as realise their services. This ensures hardware and conversely software agnosticism. Further, the software will interface with hardware through APIs and the Embedded HAL APIs + + +For the Technology Layer, we will have a single node, represented through the "T Tacticode" Node which hosts the single dev board - an ESP32S3. Further details in the picture. + + +* **Smart Reading Track:** Acts as a physical 3D-printed staging board and custom PCB housing, featuring multiple integrated RFID reader coils spaced along the track. +* **Magnetic Nested Blocks:** These are passive 3D-printed blocks embedded with 13.56MHz RFID stickers and neodymium magnets that use "Poka-Yoke" polarity to prevent incorrect connections. +* **Microcontroller (ESP32-S3):** The central processing unit that handles asynchronous RFID polling, anti-collision parsing, syntax validation and UART audio control. +* **Audio Output:** A DFPlayer Mini module and an 8-ohm speaker translate the interpreted block code into auditory feedback and musical notes. +* **High-Speed SPI Bus:** All RFID readers share MOSI, MISO, and SCK lines, with the ESP32-S3 assigning unique Chip Select (CS) pins to each to enable fast hardware anti-collision loops. +* **UART Audio Control:** The microcontroller triggers specific MP3 files by sending serial UART commands to the DFPlayer. +* **Async Wi-Fi Web Server:** Using the embassy framework, the parsed sequence is asynchronously pushed via TCP sockets to a local network webpage to provide a live Wi-Fi dashboard for teachers or parents. + +## Log + +### Week 5 - 11 May + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +The physical components involve a custom PCB reading track, 3D-printed interlocking magnetic blocks with embedded RFID stickers, an ESP32-S3 brain, and a DFPlayer module for audio output. + +### Schematics + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| ESP32-S3 Dev Board | Dual-core processor with native Wi-Fi and ample GPIO for SPI CS pins | ~$9.00 / ~42 RON | +| PN532 RFID Modules (x4) | Superior multi-tag anti-collision support via SPI | ~$24.00 / ~110 RON | +| NTAG213 RFID Stickers | 13.56MHz passive tags for embedding in blocks | ~$10.00 / ~46 RON | +| DFPlayer Mini + Speaker | UART-controlled MP3 player and 3W 8-ohm speaker | ~$6.00 / ~28 RON | +| Custom PCB Prototype | Base track routing manufactured via JLCPCB or PCBWay | ~$15.00 / ~70 RON | +| Neodymium Magnets | Small circular magnets for the Poka-Yoke joints | ~$8.00 / ~37 RON | +| 3D Printer Filament | Bambu Lab PLA or PETG for the physical blocks and housing | ~$20.00 / ~93 RON | +| Misc. Components | Push buttons, female headers, resistors, jumper wires | ~$6.00 / ~28 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| esp-hal & esp-wifi | Safe Rust hardware abstraction for the ESP32-S3 and native network stack initialization in a no_std environment. | Base hardware control and networking. | +| embassy-executor & embassy-net | Framework for async tasks and network serving. | Managing hardware polling and establishing the TCP socket for the live dashboard. | +| pn532 | Platform-agnostic Rust crate for SPI RFID scanners. | Interfacing with readers and utilizing hardware anti-collision loops to read nested tags. | +| heapless | Statically allocated, memory-safe data structures. | Storing scanned block sequences without dynamic allocation overhead. | +| dfplayer | Driver for the MP3 module. | Sending serial commands over UART. | + +## Links + +1. [Scratch Foundation Inspo](https://www.scratchfoundation.org/learn/learning-library/physical-computing-with-scratch-makey-makey) +2. [Google Research for making code physical](https://research.google/blog/project-bloks-making-code-physical-for-kids/) +3. [Ghana introduces physical coding lego blocks](https://www.physical3dscratchblocks.org/) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/aquarust.svg b/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/aquarust.svg new file mode 100644 index 00000000000..67480ad247f --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/aquarust.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: 20 oct 2012KiCad E.D.A. 10.0.1Rev: 1.0Size: A4Id: 1/1Title: STM32 Value Line Discovery - Shiled boardFile: aquarust.kicad_schSheet: /GND+3.3VGNDGND123456P3CONN6Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalGND123J6IR_Sensor+3.3V+5V+3.3VGND12345678910111213141516171819202122232425262728P2CONN28Connector_PinHeader_2.54mm:PinHeader_1x28_P2.54mm_VerticalGNDGND+5V+5VGND+3.3V+3V3R24.7kPWR_FLAGPC101PC112PC123PD24VDD5E5V6BOOT07GND8IOREF12STLINK_TMS/PA1313RESET14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80U1NUCLEO-U545RE-QPWR_FLAGPWR_FLAG+3V3PWR_FLAGGND+3.3V12345678J2ESP8266GND+3.3V+3.3VC11000uFGND+3.3V123J1DS18B20GND123J4SG90_Servo+5V+3.3V1234567J3ST7735R34.7k+3.3V1234J_RTC1DS3231+3.3V+3.3VGND123J5Water_Level12345678910111213141516171819202122232425262728P1CONN28Connector_PinHeader_2.54mm:PinHeader_1x28_P2.54mm_Vertical+3.3VR14.7k+3.3VTFT_CSPC0PD1RSTPB13PB14PB12PB11PC3PC2PA0PC1PC15PD0PB10PC14PC13GPIOTFT_DCGNDESP_RXRSTCH_PDTFT_RSTIR_OUTTFT_DCPB2PB1PC4PA5PA6PA7PB0PC5PA2PA1PA4PA3PB15PC10PC11GPIO2PB9PB7PB6PB5PB4PD2PC12BOOTPB8OUT_IRTFT_CSONE_WIREONE_WIREVCC_5VSDAVCCVCCGNDGNDWATER_OUTONE_WIREPB3OUT_WATERGNDGNDVCCVCCSCLGNDESP_RXESP_TXSDATFT_RSTVCCESP_TXSCLSDAPA10SERVO_PWMSPI_MOSIVBATSERVO_PWMGNDVCCPA9PA11PA13PA15PA14PA12PC6PC7PC9PA8PC8SPI_SCKSCLVCCSPI_MOSISPI_SCKPWR_FLAGJ6IR_Sensor123GND+3.3V+3.3VR14.7k+3.3VJ5Water_Level123+3.3V+3.3VJ_RTC1DS32311234R24.7k+3.3VR34.7kJ3ST77351234567+3.3V+5VJ4SG90_Servo123J1DS18B20123+3.3V+3.3V+3.3V+3.3VJ2ESP826612345678+3.3V+3.3V+3.3V+5VC11000uFGND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/index.md b/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/index.md index 050d781928d..c3a8cd8a3cf 100644 --- a/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/index.md @@ -31,6 +31,7 @@ The power management system supplies the entire device from a 4×AA battery pack ![img](architecture.svg) + ## Log @@ -41,7 +42,12 @@ Most of the components started to arrive, among the STM32 NUCLEO-U545RE-Q. Still ### Week 9 - 20 April Waiting on the left components to arrive. +## Week 10 - 27 April +All components arrived, started working on Kicad. +## Week 11 - 4 May +Finished the Kicad schematic and started working on hardware. + ## Hardware @@ -49,7 +55,7 @@ Waiting on the left components to arrive. ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![img](aquarust.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/jessica.savage/imagejs.webp b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/imagejs.webp new file mode 100644 index 00000000000..b7544764c21 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/imagejs.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/jessica.savage/index.md b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/index.md new file mode 100644 index 00000000000..829a1589de2 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/index.md @@ -0,0 +1,71 @@ +# CD Storage and Retrieval System +An STM32 system-based CD storage that selects and ejects CDs using servo mechanisms. + +:::info + +**Student:** Savage Jessica-Andreea \ +**GitHub Repository**: https://github.com/UPB-PMRust-Students/fils-project-2026-jessicasavage24 + +::: + +## Description + +This project is a CD storage and retrieval system that is build on a stand where CDs are arranged on a rotating platform. In the center of the structure there is a stepper motor that rotates the entire stand. +The system can be controlled by a joystick and a display or remotely via Bluetooth from a phone. Once a CD is selected, the stepper motor rotates the stand until the chosen CD reaches the front position. At this point, a servo motor is activated and pushes the CD outward for an easier access. + +## Motivation + +I chose this project idea beacause i wanted to make something that accesses a CD collection easier and faster. Instead of manually searching through a stack of CDs, you cand simply browse for a desired album and the system will locate and present it. + +## Architecture + +The whole system is built around an STM32 microcontroller. It receives commands either from the joystick-based local interface or through the Bluetooth module connected to a phone. + +![Scheme](imagejs.webp) + +## Schematics +\\wsl.localhost\Ubuntu\home\jessi\website\website\versioned_docs\version-fils_en\project\2026\jessica.savage\schema-jessica.webp + +## Log + +### Week 6 + +I came with the project idea and received a feedback. + +### Weeks 7-8 + + According to the feedback i tried to improve my project and I ordered the components. + +### Week 9 + +I received the components and started testing them to see if everything works. + +## Hardware + +| Device | Usage | Price | +|--------|-------|-------| +| STM32 Nucleo-U545RE-Q | main controller | borrowed | +| 1.44'' LCD | Displays CD slection menu | 34.99 RON | +| Joystick Breakout Board | Navigates and selects options | 5.35 RON | +| Breadboard 830 points MB-102 | Connects the components to the microcontroller | 24.83 RON | +| Stepper motor | Moves the mechanism to position | 48.99 RON | +| Servo motor | Pushes the CD | 13.99 RON | +| Wires (M-F and M-F) | Component Interconnections | 15 RON | +| Resistors | Protects the components | 3.57 RON | +| Active Buzzer | Audio feedback | 0.99 RON | +| RGB LED | Status indicator | 0.99 RON | + + +## Software + +| Library | Description | Usage | +| ------- | ----------- | ----- | +| embassy-stm32 | STM32 hardware control | Used for handling the motors, LEDs and joystick | +| st7735-lcd | Display driver | Used to control the screen | +| embedded-graphics | Graphics library | Used to display the menu | +| embedded-hal | Hardware interface | Used for communication with the peripherals | + +## Links +1. [Embedded Rust 101 course labs](https://embedded-rust-101.wyliodrin.com/docs/fils_en/lab/01) +2. [STM32U5 Reference Manual](https://www.st.com/resource/en/reference_manualrm0456-stm32u5-series-32bit-arm-based-mcus-stmicroelectronics.pdf) + diff --git a/website/versioned_docs/version-fils_en/project/2026/jessica.savage/schema-jessica1.webp b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/schema-jessica1.webp new file mode 100644 index 00000000000..5a2368b739d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/jessica.savage/schema-jessica1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/index.md b/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/index.md index 1bc61d1210d..01807d362d9 100644 --- a/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/index.md @@ -28,6 +28,11 @@ Add here the schematics with the architecture of your project. Make sure to incl - brainstormed ideas for the jump mechanism - a few roughs sketches on paper for now ### Week 5 - 11 May +- learned fusion 360 , finished 90% percent of the 3d render, only the injection mechanism and the camera cage are unfinished. +- printed the base layer of the car, dropped it on the ground, it broke , +- decide to print it again and do some modification to add some resistance. +- started writing the code for the control of the motors +- soldered my picos ### Week 12 - 18 May @@ -47,7 +52,7 @@ Inject:MG90S servo deploys the usb. ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Schematic](projectnovackikad.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/projectnovackikad.svg b/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/projectnovackikad.svg new file mode 100644 index 00000000000..ed7ed490220 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/jianu_novac.carp/projectnovackikad.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: projectNovacKikad.kicad_schSheet: /12J5Conn_01x02SENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U4L298N12J3Conn_01x02GPIO01GPIO12GND3GPIO24GPIO35GPIO46GPIO57GPIO69GPIO710GPIO811GPIO912GPIO1014GPIO1115GPIO1216GPIO1317GPIO1419GPIO1520GPIO1621GPIO1722GPIO1824GPIO1925GPIO2026GPIO2127GPIO2229RUN30GPIO26_ADC031GPIO27_ADC132AGND33GPIO28_ADC234ADC_VREF353V3363V3_EN37VSYS39VBUS40A1RaspberryPi_Pico_WGND1FB2SW3VC4VIN5U2XL401512345678J2Conn_01x0812J4Conn_01x02PWR_FLAG123456J1Conn_01x06ILI9341SPI InterfaceSD Card Slot320x240 LCDVCC1GND2~{CS}3RESET4D/~{C}5MOSI6SCK7LED8MISO9SD_CS10SD_MOSI11SD_MISO12SD_SCK13FLASH_CD14U3CR2013-MI212012J6Conn_01x02CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U1MPU-6050C1 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/index.md b/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/index.md index 59a4b92d730..4b618522804 100644 --- a/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/index.md @@ -49,7 +49,7 @@ The project uses a mix of analog physiological sensors and asynchronous digital ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Project Schematic](./kicad_lie_detector_schematic.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/kicad_lie_detector_schematic.svg b/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/kicad_lie_detector_schematic.svg new file mode 100644 index 00000000000..465de93a5a0 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/leyla_kubra.sahin/kicad_lie_detector_schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG12341234ABCABCDate:KiCad E.D.A. 10.0.1Rev:Size: A5Id: 1/1Title:File: lie_detector_schematic.kicad_schSheet: /GND+3V3R3220GNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETxGND1234Grove_GSR_Sensor1Conn_01x04GNDR1220C1100nFPWR_FLAGGNDGND+3V312BZ1BuzzerRGB1234D1LED_RGBK123Pulse_Sensor1Conn_01x03R4100GND+3V3+3V3PWR_FLAG+3V3+3V3R2220+3V3+3V3GNDPULSE_SIGGSR_SIGGNDPULSE_SIGLED_GLED_RLED_BNCBUZZERLED_RBUZZERGSR_SIGLED_GLED_BRGB LEDBPM Heart Rate SensorGrove GSRLie Detector SchematicSTM32 MicrocontrollerBuzzerMay 7th 2026C1100nFU1STM32U545RETxVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64GNDR1220R3220R2220R4100BZ1Buzzer12D1LED_RGBK1234 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/lidia.serban/hardware-project-2.webp b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/hardware-project-2.webp new file mode 100644 index 00000000000..2841e187c03 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/hardware-project-2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/serban.lidia/index.md b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/index.md similarity index 96% rename from website/versioned_docs/version-fils_en/project/2026/serban.lidia/index.md rename to website/versioned_docs/version-fils_en/project/2026/lidia.serban/index.md index 1ac293f6331..5d79d3ca30e 100644 --- a/website/versioned_docs/version-fils_en/project/2026/serban.lidia/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/index.md @@ -1,5 +1,5 @@ # Autonomous Light-Following Flower Robot - +An autonomous light-following robot that has a flower on top of the chassis to mimic the behaviour of a natural plant. :::info **Author**: Serban Lidia-Andreea \ @@ -33,7 +33,7 @@ My motivation for this project is to apply embedded systems engineering to a nat │ ▼ ┌────────────▼────────────┐ ┌──────────────────────────┐ │ STM32 U545RE-Q │ │ L9110S DRIVER │ -│ (Logic / Brain Rail) │ │ (Motor Control H-Bridge)│ +│ (Logic / Brain Rail) │ │ (Motor Control H-Bridge)│ └────────────┬────────────┘ └──────────────▲───────────┘ │ │ ├──────────────────────────────┘ @@ -50,7 +50,7 @@ My motivation for this project is to apply embedded systems engineering to a nat ## Log - +### Week ... ### Week 5 - 11 May ### Week 12 - 18 May @@ -62,9 +62,12 @@ My motivation for this project is to apply embedded systems engineering to a nat The system is based on the STM32 Nucleo U545RE-Q microcontroller, which manages data processing and control. Light detection is performed using photoresistors, while an ultrasonic sensor provides obstacle detection and a temperature–humidity sensor monitors environmental conditions. Movement is achieved using DC motors controlled by an H-bridge driver with PWM signals. The structure includes wheels and a caster for stability. Power is supplied by a battery and regulated with a DC-DC converter. An LCD display is used to present system data. +![Hardware picture](./hardware-project-2.webp) + ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![KiCad schematic](./kicad-proiect-rust.svg) + ### Bill of Materials @@ -112,5 +115,5 @@ The format is 1. [Embassy Book](https://embassy.dev/book/#_what_is_embassy) -2. [link](https://example3.com) +2. ... \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/lidia.serban/kicad-proiect-rust.svg b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/kicad-proiect-rust.svg new file mode 100644 index 00000000000..e16fa0c3f39 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/lidia.serban/kicad-proiect-rust.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: kicad-proiect-rust.kicad_schSheet: /+5VVCC1TRIG2ECHO3GND4frontHC-SR041234567891011121314151617181920212223242526272829303132333435363738J2CN10CN5_D8_PC75_1CN5_D9_PC6_PWM5_2CN5_D10_PC9_CS_PWM5_3CN5_D11_MOSI_PWM5_4CN5_D12_PA6_MISO5_5CN5_D13_PA5_SCK5_6CN5_GND5_7CN5_AVDD5_8CN5_D14_PB7_SDA5_9CN5_D15_PB6_SCL5_10CN6_NC6_1CN6_IOREF6_2CN6_NRST6_3CN6_3V36_4CN6_5V6_5CN6_GND6_6CN6_GND6_7CN6_VIN6_8CN8_A0_PA08_1CN8_A1_PA18_2CN8_A2_PA48_3CN8_A3_PB08_4CN8_A4_PC1_PB88_5CN8_A5_PC0_PB98_6CN9_D0_PA3_RX9_1CN9_D1_PA2_TX9_2CN9_D2_PC89_3CN9_D3_PB3_PWM9_4CN9_D4_PB59_5CN9_D5_PB4_PWM9_6CN9_D6_PB10_PWM9_7CN9_D7_PA89_8U4STM 32 NUCLEO-U545RE-Q CN6, CN5, CN8, CN91234567891011121314151617181920212223242526272829303132333435363738J1CN7R710kR2LDR07SENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298HNR810kR1LDR07+1-2M2Motor_DC+1-2M1Motor_DCVCC1TRIG2ECHO3GND4backHC-SR04GND1VCC2SCL3SDA4U7ER_OLEDM0.91_1x-I2CR910kR3LDR07R4LDR07R1210kR6LDR07R1110kVDD1DATA2GND4U1DHT22R5LDR07R1010kGNDKiCad schematics for rust project07.05.2026SERBAN Lidia-Andreea \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/index.md b/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/index.md index 18ce0db2926..1dc3b4eb53e 100644 --- a/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/index.md @@ -20,9 +20,7 @@ Because I love coffee. Of course, I'm not addicted. ## Architecture -Add here the schematics with the architecture of your project. Make sure to include: - - what are the main components (architecture components, not hardware components) - - how they connect with each other +![Schematic](projectscheme.svg) ## Log diff --git a/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/projectscheme.svg b/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/projectscheme.svg new file mode 100644 index 00000000000..e933bdb2d23 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/lucian_stefan.lesu/projectscheme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/diagram.webp b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/diagram.webp index 797cf90f9cf..62f86aa6243 100644 Binary files a/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/diagram.webp and b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/diagram.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/index.md b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/index.md index ff6f48cb713..095b56b093a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/index.md @@ -52,9 +52,15 @@ After the recording is done, the Pico uses its integrated **Wi-Fi** to send the - successfully initialized the SSD1306 display using the `ssd1306` crate. - started working on the harware +### Week 10-13 +- decided to integrate a battery holder into the hardware design to make the system fully portable for ambient music recognition +- analyzed the power consumption of the Raspberry Pi Pico 2 W and the microphone to ensure the selected battery can sustain long term operation +-did the KiCad schematic to include the battery holder and the necessary power routing for independent operation +-shifted the project focus towards a standalone device approach, eliminating the need for a constant USB power supply + ### Schematics -KiCAD schematics will be added here as soon as it's done. +![KiCad](./schematics.webp) ## Bill of Materials @@ -69,6 +75,8 @@ KiCAD schematics will be added here as soon as it's done. | USB-C Data Cable | For system programming and power supply | ~7 RON | | Starter Kit Electronics | Breadboard, push buttons, wires, resistors,etc | ~70 RON | | STM32 NUCLEO-U545RE-Q | Initial acquisition (initial architecture) | ~125 RON | +| Male to Female Jumper Wire| Recent acquisition for hardware | ~20 RON | + @@ -86,7 +94,9 @@ The hardware components are selected to ensure a compact and efficient design fo - battery Holder: single-slot 18650 holder with lead wires for a secure and compact connection. -- Li-ion Battery: allows portable use. +- 3 x batteries AA. + +- Leds for design. diff --git a/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/schematics.webp b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/schematics.webp new file mode 100644 index 00000000000..a5668986ac3 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/maria.neamtu0108/schematics.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/hardwarewiredproject.webp b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/hardwarewiredproject.webp new file mode 100644 index 00000000000..05ce4162487 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/hardwarewiredproject.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/index.md b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/index.md index cd5ff77dbbb..1f77ca1b264 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/index.md @@ -1,6 +1,6 @@ # Automated Drink Mixer -An automated drink mixer that precisely measures and dispenses custom juice recipes. +An automated drink mixer that precisely measures and dispenses custom juice recipes. :::info **Author:** Mario Emancipatu \ @@ -65,12 +65,20 @@ Rendering Engine -> [ I2C ] -> 0.96" OLED Screen * Built the initial physical circuit, wiring the STM32, relay module, and OLED screen. * Tested all the components on their own. +### Week 10 - 11 +* Designed the final box for the project. +* Successfully assembled and wired the complete hardware setup inside the box. +* Finished the KiCad schematic. + ## Hardware The system is centered around an **STM32 NUCLEO-U545RE-Q** microcontroller. For user interaction, I am using a **0.96" OLED display** (SSD1306 controller) communicating via **I2C**, and a **KY-040 rotary encoder** connected through digital GPIOs with hardware interrupts for precise tracking. The fluid control system consists of **three 5V DC mini submersible pumps**, each driven by a channel of a **4-channel relay module**. The relays provide galvanic isolation between the MCU's logic and the inductive load of the pumps. Power is split into two domains: the STM32 is powered via USB, while the pumps are driven by an external **6V battery pack (4x AA)**. All connections are made using **Dupont wires** on a standard **830-point breadboard**, with additional current-limiting resistors where necessary. +### Photos of hardware +![Hardware](./hardwarewiredproject.webp) + ## Schematics @@ -103,6 +111,8 @@ The fluid control system consists of **three 5V DC mini submersible pumps**, eac +![Schematic](./schematickicadproject.webp) + ## Bill of Materials | Device | Usage | Price | diff --git a/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/schematickicadproject.webp b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/schematickicadproject.webp new file mode 100644 index 00000000000..ca70ef9b85e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mario.emancipatu/schematickicadproject.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/diagram.svg b/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/diagram.svg new file mode 100644 index 00000000000..e7524430028 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/diagram.svg @@ -0,0 +1,72 @@ + +SW-G1 Rover Architecture +Block diagram showing the Pico 2 rover brain connected to inputs (IR remote, sensors, IR receivers, IR obstacle sensors) and outputs (motor driver, servos, LEDs and buzzer), with a separate Pico beacon device emitting a 38kHz IR signal received by the rover. + + + + + + + + + +IR Remote + + + + + +Sensors (I2C) +VL53L0X + MPU6050 + + + + + +IR Receivers (×3) +Beacon tracking + + + + + +IR Obstacle (×2) +Side avoidance + + + + + +Pico 2 (Brain) +Rust + embassy-rp + + + + +Motor driver +L298N + 4 motors + + + + + +Servos (×2) +Pan + tilt head + + + + + +LEDs + Buzzer +State feedback + + + + + +Pico Beacon (carried) +38kHz IR LED emitter + + +38kHz IR + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/index.md b/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/index.md new file mode 100644 index 00000000000..fe019fca5e7 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/matei_alexandru.tita/index.md @@ -0,0 +1,117 @@ +# R3X-3 Autonomous Rover + +A multi-mode autonomous rover with follow-me, patrol, sentry and tilt detection, controllable via IR remote. + +:::info + +**Author**: Tita Matei Alexandru \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Matei13x13 + +::: + + + +## Description + +The R3X-3 is a 4-wheel-drive autonomous rover built on a Raspberry Pi Pico 2 and programmed in Rust using the embassy-rp async framework. It implements five operational modes: follow-me, patrol, sentry, expressive LED states and tilt/pickup detection, all switchable at runtime via an IR remote control. + +The rover uses a VL53L0X time-of-flight sensor mounted on a pan-tilt servo head to perform follow-me tracking, obstacle avoidance and sentry scanning. A second Raspberry Pi Pico carried by the user serves as an IR beacon for an alternative beacon-tracking follow mode. An MPU6050 IMU detects when the rover is picked up, tilted or stuck. WS2812B addressable LEDs provide expressive visual feedback for each rover state, and a passive buzzer delivers audio alerts for sentry intrusions and pickup alarms. + +## Motivation + +I chose this project because it combines several areas I want to learn deeply: embedded Rust on a modern microcontroller (the RP2350 in the Pico 2), real-time sensor fusion, async multitasking without an RTOS and basic robotics control. + +Building a rover with multiple distinct behavior modes forces me to design a clean state-machine architecture rather than the typical single-purpose hobby project. The IR beacon system adds a second microcontroller communicating with the first, which is a useful skill beyond a single-board project. + +The five modes are independent enough that I can ship the rover incrementally: even after just the first mode works, I have a functional robot, and each additional mode adds a clearly visible new capability. + +## Architecture + +The rover firmware is organized as a set of independent async tasks running concurrently on the Pico 2 under the embassy executor. A central shared rover state, protected by an async mutex, holds the current mode, sensor readings, orientation data and alert flags. Sensor tasks write to this state, and behavior tasks read from it. + +![Schematic diagram](diagram.svg) + +**Main architectural components:** + +- **Mode State Machine**: top-level controller that owns the current `RoverMode` enum (Follow, Patrol, Sentry, Idle, Manual). Receives mode-change requests from the IR remote decoder and dispatches to the appropriate behavior task. +- **IR Remote Decoder**: listens on a dedicated IR receiver, decodes NEC protocol button codes from the remote and translates them into mode-change events or manual drive commands. +- **Sensor Polling Task**: continuously reads VL53L0X distance, beacon-tracking IR receivers, IR obstacle sensors and MPU6050 orientation. Publishes to shared state. +- **Head Sweep Task**: controls pan/tilt servos to sweep the ToF sensor for patrol scanning, sentry monitoring and follow-me search. +- **Motor Control Task**: receives drive commands via channel, applies PWM ramping and drives the L298N. All motor commands flow through here so emergency stops are centralized. +- **LED Animation Task**: runs at 30 FPS, reads current rover state, renders the appropriate animation pattern on the WS2812B strip and eye LED, drives the buzzer for alerts. +- **IR Beacon Firmware (separate Pico)**: generates 38kHz PWM driving an IR LED with a recognizable burst pattern. Runs as a single async task on the second Pico, no other logic. + +The tasks communicate through: + +- **Shared state mutex** for sensor readings and rover mode (read by many tasks) +- **Embassy channels** for motor commands and mode-change events (point-to-point messaging) +- **Embassy signals** for instant notification of state changes (e.g. pickup alarm triggers immediate LED task wakeup) + +## Log + + + +### Week 5 - 11 May + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +The rover is built on a generic 4WD acrylic chassis with four TT gear motors driven by an L298N dual H-bridge motor driver. The brain is a Raspberry Pi Pico 2, which handles all sensor reading, motor control and LED animation. + +A pan-tilt servo head carries a VL53L0X time-of-flight sensor that is swept across the front of the rover for follow-me, patrol and sentry scanning. Three IR receivers provide an alternative beacon-based following method, with the IR beacon emitter built on a second Raspberry Pi Pico that the user carries. A fourth IR receiver listens for commands from a handheld IR remote, used to switch modes and manually drive the rover. Two side-mounted IR obstacle sensors handle lateral collision avoidance. + +An MPU6050 6-axis IMU on the I2C bus detects tilt, slope, pickup events and stuck conditions. Visual feedback is provided by a WS2812B addressable RGB LED strip mounted as underglow, a red 5mm LED on the turret as an "eye" indicator and a passive piezo buzzer for audio alerts. + +Power is supplied by a battery routed through the L298N's onboard 5V regulator to the Pico, servos and LEDs. + +### Schematics + +Place your KiCAD or similar schematics here in SVG format. + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [Raspberry Pi Pico 2](https://www.raspberrypi.com/products/raspberry-pi-pico-2/) | Main rover brain, runs all firmware tasks | [30 RON](https://www.optimusdigital.ro/) | +| [4WD Robot Chassis Kit](https://www.optimusdigital.ro/) | Acrylic platform, 4× TT motors, wheels and hardware, the physical rover body | [20 RON](https://www.optimusdigital.ro/) | +| [L298N Dual Motor Driver](https://www.st.com/en/motor-drivers/l298.html) | Dual H-bridge that drives the 4 TT motors with PWM speed control and direction | [10 RON](https://www.optimusdigital.ro/ro/punti-h/1061-driver-de-motoare-l298n-dual-h-bridge.html) | +| [VL53L0X ToF Sensor](https://www.st.com/en/imaging-and-photonics-solutions/vl53l0x.html) | Laser distance sensor used for follow-me stop distance, patrol obstacle detection and sentry scanning | [17 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-distanta/3380-modul-vl53l0x-timp-de-zbor.html) | +| [MPU6050 IMU](https://invensense.tdk.com/products/motion-tracking/6-axis/mpu-6050/) | 6-axis accelerometer and gyroscope that detects pickup, slopes and stuck conditions | [14 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-acceleratie/93479-modul-cu-accelerometru-i-giroscop-mpu6050-pini-lipii.html) | +| [HX1838 IR Receiver Kit (×3)](https://www.optimusdigital.ro/) | 38kHz IR receiver with remote, 3 receivers used for beacon tracking plus 1 for IR remote control input | [21 RON](https://www.optimusdigital.ro/) | +| [IR Obstacle Sensor (×2)](https://www.optimusdigital.ro/ro/senzori-senzori-optici/996-senzor-infrarosu-de-obstacole.html) | Side-mounted reflective IR proximity sensors for lateral collision avoidance | [6 RON](https://www.optimusdigital.ro/ro/senzori-senzori-optici/996-senzor-infrarosu-de-obstacole.html) | +| [SG90 Micro Servo (×2)](https://www.optimusdigital.ro/ro/motoare-servo-motoare/26-servo-motor-sg90.html) | Pan and tilt servos for the head, sweeps the ToF sensor for scanning | [12 RON](https://www.optimusdigital.ro/ro/motoare-servo-motoare/26-servo-motor-sg90.html) | +| [WS2812B LED Strip](https://www.optimusdigital.ro/ro/leduri/) | Addressable RGB underglow that shows expressive state animations | [4 RON](https://www.optimusdigital.ro/ro/leduri/) | +| [5mm 940nm IR LED](https://www.optimusdigital.ro/ro/optoelectronice-led-uri/708-led-infrarosu-de-5-mm-cu-lungime-de-unda-940-nm.html) | Beacon emitter LED, driven at 38kHz by the carried Pico | [1 RON](https://www.optimusdigital.ro/ro/optoelectronice-led-uri/708-led-infrarosu-de-5-mm-cu-lungime-de-unda-940-nm.html) | +| [5mm Red LED + 220Ω resistor](https://www.optimusdigital.ro/) | Turret "eye" indicator for alert and state visualization | [1 RON](https://www.optimusdigital.ro/) | +| [Passive Buzzer](https://www.optimusdigital.ro/) | Piezo buzzer for audio alerts on sentry intrusion and pickup alarm | [2 RON](https://www.optimusdigital.ro/) | +| [Plusivo Resistor Kit (250 pcs)](https://www.optimusdigital.ro/) | Various resistors for IR LED current limiting (47Ω), red LED limiting (220Ω) and I2C pull-ups (4.7kΩ) | [14 RON](https://www.optimusdigital.ro/) | +| [Mini Breadboard 400 pts](https://www.optimusdigital.ro/) | Prototyping connections before final wiring | [5 RON](https://www.optimusdigital.ro/) | +| [Dupont Wire Kit (M-M, M-F, F-F)](https://www.optimusdigital.ro/) | Connecting Pico, sensors, motor driver, servos and LEDs | [24 RON](https://www.optimusdigital.ro/) | + +**Estimated total: ~170 RON** + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rp](https://github.com/embassy-rs/embassy) | Async HAL for the RP2040/RP2350 | Core hardware access for GPIO, PWM, I2C, PIO and timers | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for embedded systems | Runs all rover tasks concurrently without an RTOS | +| [embassy-time](https://github.com/embassy-rs/embassy) | Async timing primitives | Delays, tickers and timeouts in all tasks | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Synchronization primitives for async embedded | Channels, mutexes and signals between tasks | +| [vl53l0x](https://crates.io/crates/vl53l0x) | Driver for VL53L0X ToF sensor | Reads distance for follow-me, patrol and sentry | +| [mpu6050](https://crates.io/crates/mpu6050) | Driver for MPU6050 6-axis IMU | Reads accelerometer and gyroscope for tilt detection | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Debug logging during development | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler that prints over RTT | Diagnoses crashes during development | + +## Links + + + +1. [Embassy embedded async framework documentation](https://embassy.dev/book/) +2. [RP2350 datasheet](https://datasheets.raspberrypi.com/rp2350/rp2350-datasheet.pdf) +3. [VL53L0X datasheet](https://www.st.com/resource/en/datasheet/vl53l0x.pdf) +4. [MPU6050 register map](https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf) +5. [NEC IR protocol reference](https://www.sbprojects.net/knowledge/ir/nec.php) diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/index.md b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/index.md index 7fcee46ca4b..fffa0cb9dd7 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/index.md @@ -38,14 +38,21 @@ I will have to resort to using a sharpie on the orange and white face of the cub ### Week 9 Decided on using Kociemba's algorithm on my laptop to generate the solution because of memory constraints. +### Week 10 +Received the 3d printed parts from the support lab and finished two of the four clamp systems , two of the sliders +broke so i will need to wait until i buy two more and assemble the rest of the project. + ## Hardware My project is based around the STM32U5 provided at the lab to take the solution generated on my computer using Kociemba's algorithm and control the rotating clamps. The 4 clamps are designed with a pair of SG90 servos each, one servo moves the clamp away and towards the cube, while the other rotates the face of the cube 90 or 180 degrees. -The color of each piece of the cube is detected using the TCS34725 color sensor seated in a small box separate from the main mechanism to ensure no external interference with the sensor. +The color of each piece of the cube is detected using the TCS34725 color sensor seated separately from the main mechanism to ensure no external interference with the sensor. + +### Photos +![Photos](project_photo.webp) ### Schematics -Todo +![Schematics](schematics.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/project_photo.webp b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/project_photo.webp new file mode 100644 index 00000000000..be223cce4fd Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/project_photo.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/schematics.svg b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/schematics.svg new file mode 100644 index 00000000000..15256130a14 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mihai.porojan/schematics.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.2Rev:Size: A4Id: 1/1Title: RustyCubeFile: schematics.kicad_schSheet: /GND+3.3VVCCGNDGNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETxVCCPWM1+2-3M4SG90 ServoPWM1+2-3M1SG90 ServoVCCGNDPWM1+2-3M2SG90 ServoGNDR110kVCCPWM1+2-3M3SG90 ServoVCCGNDVCCPWM1+2-3M5SG90 ServoGNDPWM1+2-3M7SG90 ServoPWM1+2-3M8SG90 Servo+3.3VPWM1+2-3M6SG90 ServoVCCGNDGNDGNDVCCLED1INT2SDA3SCL43V35GND6VIN7TCS1+3.3VClamp2SDASCLSlider4Slider1Clamp4Slider2Clamp3Clamp1Slider3Slider4Slider3Clamp1Clamp2Clamp3Clamp4Slider1Slider2SDASCLSERVOMOTORSCOLOR SENSORTCS1LED1INT2SDA3SCL43V35GND6VIN7R110k+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/hand.webp b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/hand.webp new file mode 100644 index 00000000000..193aadea07b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/hand.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/index.md b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/index.md index ce56816776f..867d7898519 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/index.md @@ -50,6 +50,12 @@ As such, I chose this project due to its nature and complexity, as I strongly be ### Week 9 Working on the documentation. +### Week 10 +Got the prints, this is tough. Broke a pin already, the tolerances were not a joke. Will use the universal repair tool, superglue. + +### Week 11 +Still working at the build; it feels like a battle, and I am losing. + ## Hardware The system uses **AD8232** EKG sensors, repurposed for EMG due to the high cost of specialised sensors. @@ -60,9 +66,19 @@ Everything is processed by an **STM32U545 Nucleo** microcontroller. **MG90S** se Generic string and elastic materials will be used for the tendons, such as fishing line for the flexors and springs for the extensors. +
+![Prototype](prototype.webp) +
+ +
+![Hand build](hand.webp) +
+ ### Schematics -TODO +
+![Schematic](kicad.svg) +
### Bill of Materials @@ -102,3 +118,4 @@ The format is 1. [Advanced version with high-end EMG sensors](https://www.youtube.com/watch?v=KSP4o_WCqVs) 2. [OpenBionics](https://openbionics.com/en/) 3. [OpenBionics open-source designs](https://github.com/OpenBionics/Prosthetic-Hands) +4. [InMoov](https://inmoov.fr/) diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/kicad.svg new file mode 100644 index 00000000000..c994d591087 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/kicad.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: Prosthetic Hand via ElectromyographyFile: test1.kicad_schSheet: /GND+3.3V123J1SERVOMOTOR_1GNDGND+3.3VR110kVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETx+3.3VRLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6U3SEN-12650RLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6U4SEN-12650+3.3V+3.3V+3.3VGNDGND123J2SERVOMOTOR_2+5V+5V+5V123J3SERVOMOTOR_3GNDGNDR210kGNDC310nRLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6U2SEN-12650123J5ELECTRODES_2123J6ELECTRODES_3123J4ELECTRODES_1GNDGNDGNDGNDR310kGND+3.3VGNDC210nGNDC110nGNDSERVO2EMG3THUMB_RATHUMB_LAEMG2SERVO3SERVO1FINGERS_RAFINGERS_LATHUMB_LAEMG3EMG2FINGERS_RLEMG1FINGERS_RLTHUMB_RAINDEX_RAFINGERS_LAFINGERS_RAINDEX_LAINDEX_RLINDEX_RAINDEX_LASERVO1INDEX_RLSERVO3SERVO2EMG1THUMB_RLTHUMB_RLEMG SENSORSSERVOMOTORSSTM32 MCUELECTRODESU2SEN-12650RLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6+3.3VGNDGND+3.3VU3SEN-12650RLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6U4SEN-12650RLJP1_1LAJP1_2RAJP1_3GNDJP3_13.3VJP3_2SIGNAL_OUTJP3_3LO-JP3_4LO+JP3_5SDNJP3_6+3.3V+3.3VGNDGNDGNDGNDC310nGNDGNDGND+3.3VC210nGNDC110nGNDGND+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/prototype.webp b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/prototype.webp new file mode 100644 index 00000000000..6393e700a78 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihai.temiac/prototype.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/desk_pet.svg b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/desk_pet.svg new file mode 100644 index 00000000000..fc1a9cb318b --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/desk_pet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/hardware1.webp b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/hardware1.webp new file mode 100644 index 00000000000..182c4aaeeff Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/hardware1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/index.md b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/index.md new file mode 100644 index 00000000000..b06af63f6c8 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mihai_codrut.ion/index.md @@ -0,0 +1,150 @@ +# Desk Pet + +A small interactive robot that lives on your desk and reacts to the world around it, built on Raspberry Pi Pico (RP2040) and written in Rust. + +:::info + +**Author:** Ion Mihai-Codruț \ +**GitHub Project Link:** https://github.com/UPB-PMRust-Students/fils-project-2026-justiMpuls3 + +::: + +## Description + +Desk Pet is a 2WD robot designed to sit on a desk and behave like a simple companion. It has five moods managed by a Finite State Machine: it wanders around when idle, gets excited when you touch it, reacts to RFID cards that act as "food", turns sad if you ignore it for too long, and can be driven manually over Bluetooth. The HC-SR04 ultrasonic sensor keeps it from falling off the edge of the desk. + +Everything runs asynchronously using the Embassy framework — each sensor and actuator has its own task, and they communicate through shared channels without blocking each other. + +## Motivation + +I wanted to build something that felt alive, not just functional. The idea of a robot with moods that change based on real input, touch, proximity, RFID; made the project interesting to design. Using Rust for embedded also appealed to me because the compiler forces you to think carefully about every resource you use, which is a good habit for hardware projects. + +## Architecture + +The system is built around a central FSM task. Sensor tasks detect events and send them over Embassy channels to the FSM, which decides the next state and commands the actuator tasks. + +``` +┌──────────────────────────────────────────────────────────┐ +│ Raspberry Pi Pico (RP2040) │ +│ │ +│ [touch_task] ──┐ │ +│ [rfid_task] ──┤──► [fsm_task] ──► [motor_task] │ +│ [ultrasonic_task] ──┤ ├──► [lcd_task] │ +│ [bluetooth_task] ──┘ └──► [buzzer_task] │ +└──────────────────────────────────────────────────────────┘ +``` + +### Power Architecture + +The batteries feed the L298N motor driver directly. The LM2596 buck converter steps the battery voltage down to a stable 5V, which goes into the Pico's VSYS pin (Pin 39). The Pico's internal regulator then produces 3.3V on Pin 36, which powers all sensors (RFID, touch, LCD). This keeps the noisy motor power completely separated from the logic supply. + +``` +[4xAA Batteries ~6V] + | + |-------------------------------------------> L298N motor power (direct) + | + +--> [LM2596 Buck Converter -> 5V] --> Pico VSYS (Pin 39) + | + Pico 3V3_OUT (Pin 36) + | + .------------+------------. + MFRC522 LCD TTP223 +``` + +### FSM State Table + +| State | Entry Trigger | Motors | LCD | Buzzer | +|---|---|---|---|---| +| `Idle` | Startup / timeout reset | Slow wander | "Hello! :)" | Silent | +| `Happy` | Touch sensor (GP22) | Spin in place | "Yay! ^_^" | Happy tone | +| `Fed` | RFID tag detected (GP10-14) | Short dance | "Yum! Nom nom" | Jingle | +| `Sad` | No input for 30 s | Slow drift | "Feed me... :(" | Low tone | +| `RemoteControl` | BT command via GP0/1 | Follows commands | "Remote mode" | Silent | + +### Schematic + +![Schematic](desk_pet.svg) + +### Hardware + +## Week 4-10 +![Prototip Hardware Desk Pet](./hardware1.webp) +*Figure 1: Current hardware prototype of the Desk Pet robot. All electrical connections have been completed and tested successfully. Remaining work focuses on cable organization and final component placement on the chassis.* + +### Bill of Materials + +| # | Component | Qty | Shop | Price | +|---|---|---|---|---| +| 1 | Raspberry Pi Pico (RP2040) | 1 | [Optimus Digital](https://www.optimusdigital.ro/ro/placi-raspberry-pi/12024-raspberry-pi-pico-728886755172.html?srsltid=AfmBOorpPzvNPuwFdCTWcdtTJYVHecubgZsXgqlxiSDFFIw_ij9PCpwD) | ~23 RON | +| 2 | 2WD Robot Car Chassis + DC motors | 1 | [Optimus Digital](https://www.emag.ro/sasiu-arduino-car-3874783591904/pd/D37L8DYBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | ~45 RON | +| 3 | L298N Dual Motor Driver | 1 | [Optimus Digital](https://www.emag.ro/modul-driver-motoare-l298n-compatibil-arduino-ai016-s190/pd/DXK3ZQBBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | ~23 RON | +| 4 | MFRC522 RFID Module + 2 tags | 1 | [Optimus Digital](https://www.emag.ro/modul-rfid-rc522-card-si-tag-ai0007-s50/pd/DHYQ1GMBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | ~23 RON | +| 5 | TTP223 Capacitive Touch Sensor | 1 | [Optimus Digital](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/861-modul-cu-senzor-capacitiv-ttp223.html?search_query=Modul+cu+Senzor+Capacitiv+TTP223&results=2) | ~2 RON | +| 6 | HC-SR04 Ultrasonic Sensor | 1 | [Optimus Digital](https://www.optimusdigital.ro/en/optical-sensors/4514-infrared-obstacle-sensor.html?srsltid=AfmBOoqMvtFoXd0UfkgUX3G8U8qwIl8qWRQxpK1hzNdWWJpUS7vd94eX) | ~4 RON | +| 7 | LCD 1602 with I2C backpack | 1 | [Optimus Digital](https://www.optimusdigital.ro/en/lcds/2894-1602-lcd-with-i2c-interface-and-blue-backlight.html?search_query=LCD+1602+&results=14) | ~16 RON | +| 8 | Passie Buzzer | 1 | [Optimus Digital](https://www.optimusdigital.ro/en/buzzers/12247-3-v-or-33v-passive-buzzer.html?search_query=passive+buzzer+&results=10) | ~1 RON | +| 9 | HC-05 Bluetooth Module | 1 | [Optimus Digital](https://www.emag.ro/modul-bluetooth-hc-05-3874784221244/pd/DMZGZKYBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | ~35 RON | +| 10 | LM2596 Buck Converter | 1 | [Optimus Digital](https://www.optimusdigital.ro/ro/surse-coboratoare-de-5-v/13597-sursa-coboratoare-de-tensiune-lm2596-cu-iesire-fixa-de-5v.html) | ~13 RON | +| 11 | Breadboard 400p | 1 | [Optimus Digital](https://www.emag.ro/placa-test-breadboard-830-bb830/pd/D6SCSBMBM/?utm_campaign=share_product&utm_source=mobile_dynamic_share&utm_medium=android) | ~13 RON | +**Total: ~198 RON** + +### Pin Mapping + +| GPIO | Pico Pin | Peripheral | Signal | Notes | +|---|---|---|---|---| +| GP0 | 1 | HC-05 Bluetooth | UART0 TX | Connects to HC-05 RX | +| GP1 | 2 | HC-05 Bluetooth | UART0 RX | Connects to HC-05 TX | +| GP2 | 4 | L298N | IN1 | Motor A direction | +| GP3 | 5 | L298N | IN2 | Motor A direction | +| GP4 | 6 | L298N | IN3 | Motor B direction | +| GP5 | 7 | L298N | IN4 | Motor B direction | +| GP6 | 9 | L298N | ENB | Motor B speed (PWM) | +| GP8 | 11 | LCD 1602 | I2C0 SDA | Data line | +| GP9 | 12 | LCD 1602 | I2C0 SCL | Clock line | +| GP10 | 14 | MFRC522 | SPI1 SCK | SPI clock | +| GP11 | 15 | MFRC522 | SPI1 MOSI | SPI data out | +| GP12 | 16 | MFRC522 | SPI1 MISO | SPI data in | +| GP13 | 17 | MFRC522 | SPI1 CS | Chip select | +| GP14 | 19 | MFRC522 | RST | Reset pin | +| GP16 | 21 | L298N | ENA | Motor A speed (PWM) | +| GP19 | 25 | Buzzer | PWM out | PWM SLICE1 B | +| GP22 | 29 | TTP223 | GPIO in | Touch signal | +| GP27 | 32 | HC-SR04 | ECHO in | Via 1kΩ/2kΩ voltage divider (5V→3.3V) | +| GP28 | 34 | HC-SR04 | TRIG out | Trigger pulse | +| VSYS | 39 | LM2596 | Power in | 5V from buck converter | +| 3V3_OUT | 36 | Sensors | Power out | 3.3V to RFID, LCD, Touch | +| GND | 3, 38 | All modules | Common ground | Shared with LM2596 GND | + +:::note + +The HC-SR04 ECHO pin outputs 5V logic but the RP2040 GPIO is 3.3V tolerant only. A voltage divider (1kΩ in series + 2kΩ to GND) brings the signal down to ~3.3V before it enters GP27. + +::: + +## Software + +The firmware is written in Rust using the **Embassy** async executor on `thumbv6m-none-eabi` (Cortex-M0+). + +## Results + +- Firmware compiles with `cargo build --release` targeting `thumbv6m-none-eabi`. +- All five FSM states work correctly on hardware. +- LCD shows the right message for each state in real time. +- RFID tag detection is reliable and correctly triggers the `Fed` state. +- HC-SR04 stops the robot before it reaches the desk edge (~10 cm threshold). +- TTP223 touch response is immediate with no debounce issues. +- HC-05 Bluetooth responds to W/A/S/D/X serial commands from a phone terminal. +- Motor PWM control gives smooth speed transitions. + +## Resources + +1. [Embassy RP2040 Documentation](https://embassy.dev/book/) +2. [Raspberry Pi Pico Datasheet](https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf) +3. [RP2040 Technical Reference Manual](https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf) +4. [`mfrc522` crate on crates.io](https://crates.io/crates/mfrc522) +5. [`hd44780-driver` crate on crates.io](https://crates.io/crates/hd44780-driver) + + +## Inspiration +1. [Takway AI - Mobile Robot Platform](https://takway.ai/) +2. [Zeroth W1 - Home Robot with Camera Eyes (DesignBoom)](https://www.designboom.com/technology/mobile-robot-camera-eyes-monitors-smoke-open-windows-home-zeroth-w1-ces-2026-01-05-2026/) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/CAD.webp b/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/CAD.webp deleted file mode 100644 index f0a0e7111e3..00000000000 Binary files a/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/CAD.webp and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/cad.webp b/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/cad.webp new file mode 100644 index 00000000000..9c92b0d1b2a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/cad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/index.md b/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/index.md index d8251d76f1e..ee37dda6a92 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mihail.cimpoiasu/index.md @@ -55,7 +55,7 @@ The arm is built around an STM32 F446RE (NUCLEO-F446RE) as the central controlle ![System Workflow Diagram](./workflow.webp) -![CAD Model](./CAD.webp) +![CAD Model](./cad.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/index.md b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/index.md index 2db9bae86c0..3c536a1564e 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/index.md @@ -12,7 +12,7 @@ A 4WD smart robotic rover powered by an STM32 Nucleo board, featuring mecanum wh The goal of this project is to build a 4WD smart robotic rover powered by an STM32 Nucleo board. The core software logic will be organized as a simple state machine, transitioning smoothly between the AUTONOMOUS_FORWARD, AUTONOMOUS_AVOID, MANUAL_CONTROL, SMART_REVERSE, LATERAL_PARKING, and STANDBY states based on sensor inputs, Wi-Fi commands, or physical hardware interrupts. -The car operates in two primary modes: an autonomous mode where it navigates independently using a front-facing ultrasonic sensor to detect and avoid obstacles, and a manual mode where it is piloted remotely. Thanks to the upgraded 4WD mecanum wheels, the rover is capable of omnidirectional movement, allowing for advanced maneuvers such as lateral parking. +The car operates in two primary modes: an autonomous mode where it navigates independently using a front-facing ultrasonic sensor to detect and avoid obstacles, and a manual mode where it is piloted remotely. Thanks to the upgraded 4WD mecanum wheels, the rover is capable of omnidirectional movement, allowing for advanced maneuvers such as lateral parking.  For teleoperation, an ESP8266 module acts as a Wi-Fi bridge, allowing the user to control the rover's movements using a custom joystick. Additionally, the rover features an acoustic parking assist. When reversing, a rear-facing ultrasonic sensor continuously monitors the distance to obstacles behind the car, triggering a passive buzzer to beep faster as it approaches a wall. The user can switch between autonomous and manual modes via the Wi-Fi app, alternatively a custom joystick or by pressing the physical blue USER button on the Nucleo board as an instant failsafe override. @@ -24,11 +24,11 @@ I chose this project to practically apply embedded systems concepts, particularl The system is organized into five functional layers, centered around the STM32 Nucleo board: -1. **Power:** Two 18650 Li-Ion batteries provide 7.4V. This powers the motor drivers directly, while an LM2596 buck converter steps it down to a stable 5V for the microcontroller and sensors. -2. **Mobility (4WD):** Four independent DC motors, equipped with mecanum wheels, are driven by two TB6612FNG motor controllers receiving PWM signals from the STM32. +1. **Power:** Two battery holders containing standard AA batteries provide the main power supply (approx. 6V - 9V). This powers the motor drivers directly, while an LM2596S-5 buck converter steps it down to a stable 5V for the microcontroller and sensors. +2. **Mobility (4WD):** Four independent DC motors, equipped with mecanum wheels, are driven by two L298N motor controllers receiving PWM signals from the STM32. 3. **Perception:** Three HC-SR04 ultrasonic sensors (front, rear, lateral) detect obstacles. Their 5V Echo signals are safely stepped down to the Nucleo's 3.3V logic via a level converter. 4. **Communication:** An ESP-01S module establishes a Wi-Fi bridge, allowing the STM32 to receive remote control vectors from the custom joystick UI. -5. **Feedback:** A 0.96" OLED display provides visual state information, while a passive buzzer emits variable-frequency acoustic warnings during reverse maneuvers. +5. **Feedback:** An RC1602A 16x2 Character LCD provides visual state information, while a passive buzzer emits variable-frequency acoustic warnings during reverse maneuvers. ## Log @@ -37,15 +37,18 @@ The system is organized into five functional layers, centered around the STM32 N - Throughout the weeks I have gathered the materials needed to assemble the hardware of the kit and its adjacent components needed for the behaviour of the rover. ### Week 12 - 18 May +- Started assembling the hardware of the kit and laying out the components. +![Robot Assembly](./robot.webp) + ### Week 19 - 25 May ## Hardware -The project relies on an STM32 Nucleo board as the main controller, communicating with an ESP8266 for remote commands. The chassis has been modified to support 4 independent DC motors and mecanum wheels for complex kinematics. Three ultrasonic sensors handle spatial awareness, while power is regulated via a buck converter to safely power the logic systems from the Li-ion batteries. +The project relies on an STM32 Nucleo board as the main controller, communicating with an ESP8266 for remote commands. The chassis has been modified to support 4 independent DC motors and mecanum wheels for complex kinematics. Three ultrasonic sensors handle spatial awareness, while power is regulated via a buck converter to safely power the logic systems from the standard battery packs. ### Schematics -![Architecture Diagram](./architecture.svg) +![Architecture Diagram](./mecanum_rover_stm32.svg) ### Bill of Materials @@ -54,16 +57,15 @@ The project relies on an STM32 Nucleo board as the main controller, communicatin | STM32 Nucleo-U545RE-Q | Main microcontroller | 108.34 RON | | 4WD Smart Car Chassis Kit | Base physical platform | 83.24 RON | | 4x Omnidirectional (Mecanum) Wheels | Lateral/omnidirectional movement | 108.04 RON | -| 2x TB6612FNG Motor Drivers | PWM control for the DC motors | 20 RON | +| 2x L298N Motor Drivers | PWM control for the DC motors | 20 RON | | ESP-01S ESP8266 Wireless Module | Wi-Fi bridge for remote teleoperation | 18.99 RON | | Bluetooth Module HC-06 | Alternative wireless communication | 30.41 RON | | 3x HC-SR04 Ultrasonic Sensors | Obstacle detection (front & rear) | 40.12 RON | | 2-Axis Joystick Module | Custom remote control input | 5.45 RON | -| OLED Display 0.96" I2C | Real-time status UI | 16.96 RON | +| RC1602A 16x2 LCD + 10k Potentiometer | Real-time status UI & contrast control | 16.96 RON | | 3V / 3.3V Passive Buzzer | Acoustic parking assist feedback | 0.99 RON | -| 2x Li-Ion Batteries & Battery Case | Main power supply | 72.09 RON | -| Li-Ion Battery Charger Module | Battery management & charging | 9.99 RON | -| LM2596 DC-DC Buck Converter | Voltage regulation (fixed 5V) | 12.99 RON | +| 2x Battery Holders (4-6 AA) & Batteries | Main power supply | 35.00 RON | +| LM2596S-5 DC-DC Buck Converter | Voltage regulation (fixed 5V) | 12.99 RON | | Breadboard Power Supply & 9V Connector | Logic power distribution | 6.20 RON | | Prototyping PCBs & Breadboard | Component mounting & soldering | 22.98 RON | | Silicone Wires, Jumpers, & Pin Headers | Component interconnections | 71.40 RON | diff --git a/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/mecanum_rover_stm32.svg b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/mecanum_rover_stm32.svg new file mode 100644 index 00000000000..91dba4c2eea --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/mecanum_rover_stm32.svg @@ -0,0 +1 @@ +SVG Image created as Mecanum_Rover_STM32.svg date 2026/05/07 20:10:24 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 8.0.9Rev:Size: A4Id: 1/1Title:File: Mecanum_Rover_STM32.kicad_schSheet: /R42kR11kR22k1234J1HC-SR04R31kGNDPWR_FLAGPWR_FLAGVSS1DB310DB411DB512DB613DB714A/VEE15K16VDD2VO3RS4R/W5E6DB07DB18DB29U4RC1602APWR_FLAG12SW1SW_SPSTBT1BatteryGNDSENSE_A1IN310EnB11IN412OUT313OUT414SENSE_B15OUT12OUT23Vs4IN15EnA6IN27GND8Vss9U2L298NGNDR51k+5V12BZ1Buzzer1234J2HC-SR04R62k1234J3HC-SR04VIN1OUT2GND3FB4~{ON}/OFF5U5LM2596S-5PC101IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19PC112GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PC123PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PD24PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549VDD5PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959E5V6PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369~{BOOT0}7AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND8GND80U1NUCLEO64-F411RE123RV1R_Potentiometer+1-2M1Front_LeftGND+1-2M2Front_Right12345678J4ESP-01SPWR_FLAGPWR_FLAG+1-2M3Rear_LeftGNDSENSE_A1IN310EnB11IN412OUT313OUT414SENSE_B15OUT12OUT23Vs4IN15EnA6IN27GND8Vss9U3L298N+1-2M4Rear_Right+3V3WIFI_TXWIFI_RX+5VECHO_5V_FECHO_FRONTECHO_5V_F+5VTRIG_FRONTM_RR_IN2M_FR_IN1M_FL_PWMM_FR_PWMV_BATTM_FL_IN1M_FL_PWMM_RL_PWMM_FR_IN2M_FL_IN2BUZZERM_RR_PWMM_RL_PWMM_RL_IN1M_RR_IN1M_RL_IN2M_FL_IN1M_RR_IN2LCD_D4LCD_RSM_RR_IN1M_FL_IN2M_FR_IN2M_FR_IN1M_RL_IN1LCD_ENM_RL_IN2WIFI_TXM_FR_PWMECHO_REARECHO_FRONTM_RR_PWMTRIG_REARTRIG_FRONTLCD_RSGNDTRIG_REARECHO_5V_RECHO_LATWIFI_RXTRIG_LATGND+3V3ECHO_5V_RLCD_D7LCD_D7LCD_D5LCD_D6LCD_D4LCD_D5LCD_ENLCD_D6ECHO_LATECHO_5V_LECHO_REARECHO_5V_LTRIG_LATGND+5VBUZZERV_BATTV_BATT+5VV_BATTU5LM2596S-5VIN1OUT2GND3FB4~{ON}/OFF5PWR_FLAGJ1HC-SR041234PWR_FLAGSW1SW_SPST12GNDBT1BatteryU4RC1602AVSS1DB310DB411DB512DB613DB714A/VEE15K16VDD2VO3RS4R/W5E6DB07DB18DB29PWR_FLAG diff --git a/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/robot.webp b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/robot.webp new file mode 100644 index 00000000000..5882c62497c Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mihnea.dunarintu/robot.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/hardware.webp new file mode 100644 index 00000000000..6ffea56f076 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/index.md b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/index.md index e81c7eec01a..e9f607a3d91 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/index.md @@ -43,6 +43,9 @@ This system is built using **STM32 NUCLEO-U545RE-Q** which coordinates all funct The system is built around the STM32 NUCLEO-U545RE microcontroller, which acts as the main controller responsible for processing data and coordinating all modules. Two NFC readers are used to scan the vehicle’s NFC tag at the payment and exit stations for verification. Two SG90 servo motors control the opening and closing of the entry and exit barriers, while a LCD display shows system messages such as payment status. A green LED indicates successful payment and access approval, whereas a red LED with a buzzer signals payment denied. An ultrasonic sensor detects vehicle presence at the entrance to open the berrier, and an IR sensor detects coin insertion at the payment station. However, all the coennections are on the breadboard and using jumper wires. ## Schematics +![Schematic diagram](kicad.svg) +![Schematic diagram](hardware.webp) + diff --git a/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/kicad.svg new file mode 100644 index 00000000000..a68235da390 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/mira.mehdi/kicad.svg @@ -0,0 +1 @@ +SVG Image created as KiCadMA.svg date 2026-05-10T16:51:37 Image generated by Eeschema-SVGGNDVDDA1VDD11A2PH3A3PB6A4PB3A5PD2A6PC10A7VDDA8VBATB1VSSB2PC13B3PB4B4PC11B5PC12B6VDDUSBB8PC14C1PC15C2PB8C3PA15C4PA14C5PA13C6PA12C7PA11C8PH0D1PH1D2PB7D3PB5D4PA10D5PA9D6PA8D7PC9D8NRSTE1PC0E2PC1E3PC2E4PA0E5PB14E6PC7E7PC8E8VSSAF1PC3F2PA1F3PA4F4PA6F5PB10F6PB15F7PC6F8VDDAG1PA2G2PA5G3PB2G4PB1G5VSSSMPSG6PB13G8VDDH1PA3H2PA7H3PB0H4VLXSMPSH5VDDSMPSH6VDD11H7VDDH8U1STM32U545REIxQPWM1+2-3M2Motor_Servo+5V+3.3VGNDGND+5V1234NFCREADER 11234ULTRASONICSENSORGND+5V+5VREDLED+5VGND1234NFC1READER 2PWM1+2-3M1Motor_Servo+3.3VR2RR1RGREENLEDGND123IRSENSORGNDGNDGNDGND+5V123+5V1234LCDDISPLAYSCLGNDVCCPWMSDAGNDGNDGNDVCCSDAGNDSDASCLVCCVCCVCCTRIGBUZZERI/OGNDPWMGNDSCLVCCVCCECHOOUTVCCGND+5V+5VGND+5V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/hardware.webp new file mode 100644 index 00000000000..b070cd52191 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/index.md b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/index.md index a756a2148cf..5a4e7baa61a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/index.md @@ -27,6 +27,7 @@ The project is built around a distributed micro-architecture consisting of two m 2. The WIFI Controller (Base Station & Router Interface) ![Project Architecture](architecture.svg) + ## Log ### Week 8 @@ -35,18 +36,19 @@ The project is built around a distributed micro-architecture consisting of two m * Selected the **ESP-NOW** protocol for ultra-low latency wireless communication between the Wand and the Base Controller. * Explored the OpenWRT `ubus` HTTP API for executing remote network administration commands without relying on SSH. -### Week 9 *(Current Week)* +### Week 9 * **Hardware Procurement:** Finalized the complete Bill of Materials (BOM). * Officially placed orders for all necessary hardware components (ESP32-S3 SuperMini, ESP8266 NodeMCU, MPU6050, TP4056 modules, Li-Po battery, jumper wires, etc.) from suppliers. * Currently awaiting delivery of the components to begin breadboard testing and initial hardware assembly. ### Week 10 -*(To be filled during development)* +* Components have arrived and have started breadboard testing with some success. +* Started writing software for the WIFI Wand, struggling with the MPU6050 and clean data from it. -### Week 11 -*(To be filled during development)* +### Week 11 +* Finalized hardware wiring and testing on a breadboard. Will need to start finishing the software side. -### Week 12 +### Week 12 *(Current Week)* *(To be filled during development)* ### Week 13 @@ -58,9 +60,14 @@ The project is built around a distributed micro-architecture consisting of two m The hardware is split into a low-power, lightweight handheld device (the Wand) powered by a small Li-Po battery, and a stationary base unit (the Controller) that processes and routes the commands. +![Hardware](hardware.webp) + +## Software + + ### Schematics -KiCAD schematic WIP. +![Kicad Schematic](schem.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/schem.webp b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/schem.webp new file mode 100644 index 00000000000..dc4a64bca6d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mircea.ciuraru/schem.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/index.md b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/index.md index df6cc75879a..ef1fa021681 100644 --- a/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/index.md @@ -104,7 +104,12 @@ An SSD1306 OLED display is connected through the same I2C bus and provides local ### Schematics -KiCad Schematics will be inserted later. +![VitalBox schematic](./vitalbox.svg) + +### Hardware Pictures + +![VitalBox hardware prototype 1](./prototip_1.webp) +![VitalBox hardware prototype 2](./prototip_2.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_1.webp b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_1.webp new file mode 100644 index 00000000000..f53f0c4b96b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_2.webp b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_2.webp new file mode 100644 index 00000000000..3681a3072c8 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/prototip_2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/vitalbox.svg b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/vitalbox.svg new file mode 100644 index 00000000000..10e0c995cde --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/miruna.cojocaru1205/vitalbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/index.md b/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/index.md index a82fe7cf3fa..cbc6787702a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/index.md @@ -53,20 +53,43 @@ Audio → ADC → I2S + DMA → Buffer → FFT → Display - Project idea defined - Research on FFT and embedded DSP +Defined the project idea: a real-time audio spectrum analyzer running on an STM32 microcontroller. +Researched FFT algorithms suitable for embedded systems — compared fixed-point vs floating-point implementations and evaluated CMSIS-DSP as a potential acceleration library. +Studied I2S protocol for audio data acquisition and DMA double-buffering patterns to avoid blocking the main processing loop. +Decided on the PCM1808 as the external ADC due to its I2S output and straightforward analog front-end requirements. + ### Week 6-7 - PC prototype implemented for FFT visualization - Basic signal processing pipeline tested +Implemented a desktop prototype to validate the FFT pipeline before moving to hardware. Fed a Windows Loopback audio steam and confirmed the frequency peaks appeared at the correct position as refference Fab-filter VST plugin in my DAW. +Set up the Rust embedded project targeting the NUCLEO-U545RE-Q. Configured the Embassy executor with a basic blinky task to verify the toolchain. +Ordered all hardware components: PCM1808 module, ST7789V 2.4" TFT display, and supporting passives. + ### Week 8 - SPI display connected and tested - Initial hardware setup completed +Connected the ST7789V display over SPI. The display initialized without panicking but showed only a white blank screen. + +Initially suspected incorrect SPI polarity — switched CPOL/CPHA combinations, no change. +Tried lowering SPI clock from 32 MHz down to 8 MHz — screen still blank. +After hours of debugging, discovered the root cause: the SPI DMA transfer buffer was allocated at 128 bytes, far too small for a full 240×320 frame. Partial writes were silently completing and leaving the framebuffer in an undefined state. Increasing the buffer to 8 KB resolved the issue immediately — the display lit up with a solid color fill on the first successful run. + +Verified display orientation and color order (RGB vs BGR) — the ST7789V requires explicit BGR mode configuration, which was missing from the initial driver setup and caused inverted colors. +Rendered a simple horizontal bar chart using embedded-graphics as a placeholder for the spectrum. Confirmed text rendering at 16px is readable at arm's length on the 2.4" panel. + ### Week 9 - Working on the documentation. +Integrated the I2S + DMA audio pipeline with the FFT processing block. Initial DMA transfers produced garbled samples — traced to a mismatched sample rate: the PCM1808 was clocked at 48 kHz but the I2S peripheral was configured for 48 kHz (my audio interface is working on this freq), causing drift and aliasing artifacts in the spectrum output. Correcting the clock dividers resolved the issue. +Connected the rotary encoder on GPIO pins. Used it to control display brightness and to switch between linear and logarithmic frequency scale modes. Added software debounce after observing double-trigger events on fast knob turns. +Designed a frame enclosure in FreeCAD for 3D printing — a two-piece snap-fit shell sized to hold the NUCLEO board, breadboard section, and display flush on the front panel. Printed a first draft; found the display cutout was 1.5 mm too narrow and the encoder hole was slightly off-center. Adjusted the model and queued a second print. +Working on final documentation and cleaning up firmware constants. + --- ## Hardware @@ -82,54 +105,56 @@ Audio → ADC → I2S + DMA → Buffer → FFT → Display [POWER & DEBUGGING SECTION] -+-----------------------+ +--------------------------+ -| Host PC | | Host PC | -| (USB Power 5V) | | (Debug / Logging) | -+-----------+-----------+ +------------+-------------+ -| ^ -| (5V via USB) | [USB / UART] -v v ++-----------------------+ +--------------------------+ +| Host PC | | Host PC | +| (USB Power 5V) | | (Debug / Logging) | ++-----------+-----------+ +------------+-------------+ + | | + | (5V via USB) | [USB / UART] + v v +----------------------------------------------------------------+ -| | -| NUCLEO STM32U545RE-Q | -| (Main Microcontroller) | -| | -| - I2S + DMA (Audio Input) | -| - Double Buffering | -| - FFT Processing | -| - Spectrum Rendering | -| | +| | +| NUCLEO STM32U545RE-Q | +| (Main Microcontroller) | +| | +| - I2S + DMA (Audio Input) | +| - Double Buffering | +| - FFT Processing | +| - Spectrum Rendering | +| | +--------+-------------------+-------------------+---------------+ -| | | -[I2S] [SPI] [GPIO] -| | | -v v v - + | | | + [I2S] [SPI] [GPIO] + | | | + v v v +------------------+ +-------------------+ +------------------+ -| | | | | | -| PCM1808 | | 2.4" TFT Display | | Buttons / | -| Audio ADC | | ST7789V | | Controls | -| (Analog → I2S) | | (240x320, SPI) | | (optional) | +| | | | | | +| PCM1808 | | 2.4" TFT Display | | Buttons / | +| Audio ADC | | ST7789V | | Controls | +| (Analog → I2S) | | (240x320, SPI) | | (Potentiometer) | +--------+---------+ +---------+---------+ +------------------+ -| -| [Analog Audio] -v + | + [Analog Audio] + v +------------------+ -| | -| 3.5 mm Jack | -| (Audio Input) | +| | +| 3.5 mm Jack | +| (Audio Input) | +------------------+ +![Audio Spectrum Analyzer](./schematics.webp) + --- ### Bill of Materials -| Device | Usage | Price | -| --------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| STM32 Nucleo-U545RE-Q | Main microcontroller | [106.00 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | -| PCM1808 | Audio ADC (analog → digital conversion) | [41.5 RON](https://www.emag.ro/convertor-a-d-stereo-pcm1808-24-biti-snr-99-db-tssop-14-pini-741050522202/pd/DKB6J83BM/) | -| ST7789V TFT Display | Frequency spectrum visualization | [54.4 RON](https://www.emag.ro/display-tft-spi-2-4-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg178/pd/DXZMBSYBM/) | -| 3.5 mm Jack | Audio input | [2.0 RON] | +| Device | Usage | Price | +| ---------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| STM32 Nucleo-U545RE-Q | Main microcontroller | [106.00 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) | +| PCM1808 | Audio ADC (analog → digital conversion) | [41.5 RON](https://www.emag.ro/convertor-a-d-stereo-pcm1808-24-biti-snr-99-db-tssop-14-pini-741050522202/pd/DKB6J83BM/) | +| ST7789V TFT Display | Frequency spectrum visualization | [54.4 RON](https://www.emag.ro/display-tft-spi-2-4-inch-240x320-lcd-cu-touchscreen-driver-st7789v-arduino-emg178/pd/DXZMBSYBM/) | +| 3.5 mm Jack | Audio input | [2.0 RON] | +| Rotary digital Potentiometer | Scaling, changing graphical interface | [10.0 RON] | --- diff --git a/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/schematics.webp b/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/schematics.webp new file mode 100644 index 00000000000..f262820f182 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/mykyta.troinych/schematics.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw1_with_bgc.webp b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw1_with_bgc.webp new file mode 100644 index 00000000000..35116106f05 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw1_with_bgc.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw2_with_bgc.webp b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw2_with_bgc.webp new file mode 100644 index 00000000000..849c63b017d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw2_with_bgc.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw3_with_bgc.webp b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw3_with_bgc.webp new file mode 100644 index 00000000000..12f448fd529 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/hw3_with_bgc.webp differ diff --git a/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md similarity index 93% rename from versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md rename to website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md index 726ac51248e..46f1188f09f 100755 --- a/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/index.md @@ -52,13 +52,23 @@ Ordered all the hardware components from multiple suppliers. Set up the Rust dev Received all the hardware components, including the STM32 Nucleo board. Unboxed and organized the components for assembly. Verified the pinout compatibility between the Nucleo-U545RE-Q and the peripheral modules. Started the initial hardware assembly on the breadboards and began the first connectivity tests for the power rails and basic GPIO. +### Weeks 10-11 + +Finished the whole hardware assembly and the KiCad Schematic after receiving all the components. I will probably change the jumper wires to shorter ones or rigid ones for a more organized look. + ## Hardware -The core of the project is the STM32 Nucleo-U545RE-Q board. The visual interface is handled by a 0.96" I2C OLED display. Distance detection is measured by the HC-SR04 ultrasonic sensor, which dictates the state of the SG90 180-degree servo motor, controlling the barrier. Audio feedback is processed by a DFPlayer Mini MP3 module reading from a FAT32-formatted microSD card, outputting to a 1W 8-Ohm speaker. Visual feedback is provided by 3 common-cathode RGB LEDs, and manual inputs are handled by the 6x6x6 push button. The circuit is prototyped on 1 to 3 400-point breadboards using standard Dupont jumper wires. +The core of the project is the STM32 Nucleo-U545RE-Q board. The visual interface is handled by a 0.96" I2C OLED display. Distance detection is measured by the HC-SR04 ultrasonic sensor, which dictates the state of the SG90 180-degree servo motor, controlling the barrier. Audio feedback is processed by a DFPlayer Mini MP3 module reading from a FAT32-formatted microSD card, outputting to a 1W 8-Ohm speaker. Visual feedback is provided by 3 common-cathode RGB LEDs, and manual inputs are handled by the 6x6x6 push button. The circuit is prototyped on 3 400-point breadboards using standard Dupont jumper wires. + +![hardware image 1](hw1_with_bgc.webp) + +![hardware image 2](hw2_with_bgc.webp) + +![hardware image 3](hw3_with_bgc.webp) ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Schematic](smart_parking_simulator_scehmatic(1).svg) ### Bill of Materials @@ -104,4 +114,4 @@ Place your KiCAD or similar schematics here in SVG format. 6. [DFPlayer Mini Technical Manual](https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299) 7. [HC-SR04 Ultrasonic Sensor Datasheet](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf) 8. [SG90 Servo Motor Specifications](https://www.google.com/search?q=https://datasheetspdf.com/pdf-file/791970/TowerPro/SG90/1&authuser=1) -9. [Embassy STM32 RNG Documentation](https://www.google.com/search?q=https://docs.embassy.dev/embassy-stm32/git/stm32u545re/rng/index.html&authuser=1) \ No newline at end of file +9. [Embassy STM32 RNG Documentation](https://www.google.com/search?q=https://docs.embassy.dev/embassy-stm32/git/stm32u545re/rng/index.html&authuser=1) diff --git a/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/smart_parking_simulator_scehmatic(1).svg b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/smart_parking_simulator_scehmatic(1).svg new file mode 100644 index 00000000000..816e642cf35 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/oana_mihaela.netoiu/smart_parking_simulator_scehmatic(1).svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG+5V+5VR5220R6220+5VR2220RGB1234D1LED_RGBKR1220PWM1+2-3M1Motor_ServoGNDGNDVCC1RX2TX3DAC_R4DAC_L5SPK16GND7SPK28IO19IO211ADKEY112ADKEY213USB+14USB-15BUSY16U4DFR029912LS1SpeakerR3220RGB1234D3LED_RGBKGND+5VGNDGNDR4220RGB1234D2LED_RGBKPA9CN5_1PC7CN5_2PB0CN5_3PA7CN5_4PA6CN5_5PA5CN5_6CN5_8CN5_8PB9CN5_9PB8CN5_10CN6_1CN6_1~{RST}CN6_3PC10CN7_1PC11CN7_2PC12CN7_3PD2CN7_4PA14CN7_7PD0CN7_9PD1CN7_10PD3CN7_11PA13CN7_13PD4CN7_15PA15CN7_17PB7CN7_21PC13CN7_23CN7_25CN7_25PD5CN7_26CN7_27CN7_27PA0CN7_28CN7_29CN7_29PA1CN7_30CN7_31CN7_31PA4CN7_32PB1CN7_34PC2CN7_35CN7_36CN7_36PC3CN7_37CN7_38CN7_38CN8_5CN8_5CN8_6CN8_6PC5CN9_1PC4CN9_2PA10CN9_3PB3CN9_4PB5CN9_5PB4CN9_6PB14CN9_7PA8CN9_8PC9CN10_1PC8CN10_2PC6CN10_4PA3CN10_6CN10_7CN10_7PD6CN10_10PA12CN10_12PA11CN10_14PC1CN10_16PC0CN10_18PB2CN10_22PB6CN10_24PB15CN10_26PB10CN10_28PB13CN10_30PA2CN10_34PD8CN10_36PD9CN10_38U1ANUCLEO-G0B1RESW1SW_PushGND1VCC2SCL3SDA4U2ER_OLEDM0.91_1x-I2CCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U1BNUCLEO-G0B1RE+5VGNDGNDVCC1TRIG2ECHO3GND4U3HC-SR04U4DFR0299VCC1RX2TX3DAC_R4DAC_L5SPK16GND7SPK28IO19IO211ADKEY112ADKEY213USB+14USB-15BUSY16GND+5V+5VU1BNUCLEO-G0B1RECN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2+5VGNDR6220R5220R4220R3220R1220R2220U3HC-SR04VCC1TRIG2ECHO3GND4GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/circuit1.webp b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/circuit1.webp new file mode 100644 index 00000000000..9b68cea14d3 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/circuit1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/index.md b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/index.md index 4be04779390..8f9f3d7ce9a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/index.md @@ -56,7 +56,9 @@ The system is built around the STM NUCLEO-U545RE-Q microcontroller, which manage ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![KiCad](reactiontimegame.webp) + +![Circuit photo](circuit1.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/reactiontimegame.webp b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/reactiontimegame.webp new file mode 100644 index 00000000000..b55b3c619b4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/octavian.circiumaru/reactiontimegame.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/final_hardware.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/final_hardware.webp new file mode 100644 index 00000000000..f585ac0fd87 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/final_hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/index.md b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/index.md index 6c96a7acc89..ec173a68174 100644 --- a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/index.md @@ -1,5 +1,5 @@ # Cash Counting Machine -A device that would count stack of banknotes and display the sum. +A device that would count the stack of banknotes and display the sum. :::info @@ -41,7 +41,75 @@ There were some issues, such as elecric noice generated by the spining motor int So I've finished the coding part, added a bit of concurrency and it works as expected, now, I am ready move on to the most important part - the actual pulling mechanism. ### Week 8 -To be continued... +I started working on pulling mechanism, it works, but the extra pressure should be applied on the banknotes, and I haven't placed the sensor on the slit yet. + +![Pulling mechanism](prototype_w8.webp) + +### Week 9 +I've mounted the sensor into the structure: + +![Sensor](sensor_w9.webp) + +However I've run into the first physical limitation: the design of the sensor module does not allow me to place it in the middle of the banknote trajectory, only on the side. Since there are hundreds of currencies, thus, hundreds of banknote sizes, the issue arises: all of them need to be aligned so that their edge flies close to the one side. To achieve this, the stack should be pushed from the left towards the right wall, so I've added a little pushing mechanism and also glued up the "ramp": + +![Pushing mechanism](pusher_w9.webp) + +![Prortype](prototype_w9.webp) + +Overall, the mechanical part turned out to be much more challenging than I expected, the biggest issue for now is multiple feed. I decided to temporary ignore it and move on to the rest of the peripherals. + +This week I've also added the reset button and optimized the codebase. + +### Week 10 +I tested an LCD and successfully integrated it into the project. It has a separate task that fetches the current value of the counter and updates the displayed value, if necessary. + +![LCD](lcd_w10.webp) + +### Week 11 +I've tested and integrated the 4x4 keypad into the system, now, the user may manually adjust the banknote value. + +From the hardware point of view the project is all set, even though all of the components except the motor and the sensor are still on the breadboard. Before I mount them into the structure, I have to defeat the final boss of this project - the double feed. I've sacrificed the ruller in order to make the slit thinner, it reduced the double feed a lot, but now, the uniform external pressure has to be applied on the stack, and double banknotes still sneak into the slit from time to time. + +Nevermind, forget it, the double feed is not the final boss, the final boss turned out to be... The Romanian Lei. It is made out of polymer that does not block the infrared light... It is totally on me that I noticed it only on week 11. The machine works fine with paper based currencies, I've tested it with EUR, USD, and UAH, but RON banknotes just fly through without any consecuences. I want this machine to be universal, so after hours of headache and research of how ATMs work, I came up with a decision to change the logic: the banknote does not trigger the sensor anymore, it is now triggered by a mechanical flag. I am going to move the sensor under the trajectory of the banknote, and attach a thin piece of paper to the ramp ceiling. In the idle state, that flag blocks the beam, and the passing banknote pushes it away so the beam appears. + +![Paper pendulum](sensor_w11.webp) + +From the software point of view, the logic is now reversed: we wait for rising edge, not for the falling one. With the new logic applied, due to motor vibration paper pendulum creates insane amount of false-triggers, so my next goal is to reconsider the pendulum material and position in order to minimize them. Increasing the debouncing interval may also resolve the issue. + +### Week 12 +I've made the new pendulum out of PET plastic, it works great. However, the false triggers still occur because the new logic is applied. The motor generates a lot of electromagnetic noice and voltage spikes. I've already defeated the voltage spikes with a 100nF capacitor, but for the case [EMI (elecromagnetic interference)](https://en.wikipedia.org/wiki/Electromagnetic_interference), I've just filtered the impulses in software, assuming that if the duration of a signal was less then 2ms it was coming from the motor, not from the sesor. + +For the old falling-edge logic it worked fine: `noice impulse` -> `EXTI falling edge` -> `sleep for 2ms` -> `check if the GPIO is still low`, wich would immediately rise back to high after the noice is gone. + +However, now, with a mechanical flag banknotes tend to jam or to get stuck in the slit from time to time, which keeps the sensor output high for a longer period of time. `noice impulse` -> `EXTI rising edge` -> `sleep for 2ms` -> `check if the GPIO is still high`, which is the case because the banknote is still there. Theoretically that issue could also occur with the old logic if the banknote got stuck in the slit, but on practice it only occured with the rising edges. + +To address this, it would be better to physically reduce the noice rather than make some complex filtering algorithms. After some research I found out that communication cables utilize a [twisted pair](https://en.wikipedia.org/wiki/Twisted_pair) to fight the elecromagnetic radiation. So I twisted the `motor<--->diriver` wires and the `sensor<--->breadboard` wires, and it actually helped a lot. + +I took a stack of 10 lei banknotes and decided that it is time for the first benchmark: +| # | Outuput | +|---|---------| +| **Expected value** | **150** | +| **1** | **150** | +| 2 | 140 | +| **3** | **150** | +| 4 | 130 | +| 5 | 120 | +| 6 | 140 | +| 7 | 130 | +| **8** | **150** | +| 9 | 130 | +| 10 | 130 | + +There are no cases where the outuput is greater then 150, meaning that false triggers do not occur anymore. Therefore I consider EMI to be defeated by now, and for the rest of the values, the error is coming from the double feed. + +For the double feed, I glued up 3 sponges on the slit: 2 with insulating strip underneath for straightening the banknotes, and one with a toothpick sticked into it, acting as adjustable physical gate. After playing around with the toothpick and calibrating the debouncing configuration it works percise enough for now. + +### Week 13 +I've finally mounted everything into the structure, and replaced external 830p breadboard with 3 small internal breadboards. + +![Final Hardware](final_hardware.webp) + +A few software tweaks, and thats it, the project is finished! ## Hardware @@ -49,13 +117,15 @@ The "brain" of the system is **STM32 microcontroller** and the "eyes" of the sys The sensor has 3 terminals: *Vcc, GND* and *OUT*. *OUT* is high by default, and the sensor pulls it low only if there is something on the way of the beam (e.g. banknote) -Other main components are the **LCD display**, that is used as the information output; **DC motor and driver**, for pushing the banknote on the way of the sensor's beam; and the buttons for user interaction. +Other main components are the **LCD display**, that is used as the information output; **DC motor and driver**, for pushing the banknote on the way of the sensor's beam; and the buttons and keypad for user interaction. + +The initial plan was then the banknote would just fly through the sensor slit, however there was an issue with Romanian Lei banknotes: the polymer simply did not block the beam, so the sensor did not react to them at all. It worked fine with other currencies, but since I want this machine to be universal, I slightly changed the architecture: the banknote bumps into a piece of plastic, that moves a bit in the sensor slit and immediately returns to it's previous position. This creates a rising edge that gets handled by the STM. ![Hardware schematic](hardware.webp) ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![KiCad schemactic](kicad.svg) ### Bill of Materials @@ -69,24 +139,25 @@ The format is --> -| Device | Usage | Price | -|--------|--------|-------| -| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | [~130 RON*](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396) | -| [Mini Infrared Interruption Sensor Module](https://www.optimusdigital.ro/en/all-products/5826-mini-infrared-interruption-sensor-module.html) | Detection of the passing banknote | [6.99 RON](https://www.optimusdigital.ro/en/all-products/5826-mini-infrared-interruption-sensor-module.html) | -| [1602 LCD with Blue Backlight 3.3 V](https://en.wikipedia.org/wiki/Liquid-crystal_display) | The main display | [19.99 RON](https://www.optimusdigital.ro/en/lcds/868-modul-lcd-1602-cu-backlight-galben-verde-de-33-v.html) | -| [DC Motor](https://en.wikipedia.org/wiki/DC_motor) | Pulling the banknotes into the slit | [3.99 RON](https://www.optimusdigital.ro/en/others/13612-dc-motor-f130-3v.html) | -| [L293D Motor Driver](https://www.ti.com/product/L293D) | The motor driver | [3 RON](https://www.optimusdigital.ro/en/brushed-motor-drivers/13613-driver-de-motoare-l293d.html) | -| [18 mm Rubber Wheel](https://en.wikipedia.org/wiki/Wheel) | The roller | [5 x 0.89 RON](https://www.optimusdigital.ro/en/gears/571-18-mm-rubber-wheel.html) | -| [2x150 mm Shaft](https://en.wikipedia.org/wiki/Shaft_(mechanical_engineering)) | The shaft for the roller | [1.95 RON](https://www.optimusdigital.ro/en/metal-axes/298-ax-metalic-2x150-mm.html) | -| [2x50 mm Shaft](https://en.wikipedia.org/wiki/Shaft_(mechanical_engineering)) | Shaft extention | [0.95 RON](https://www.optimusdigital.ro/en/metal-axes/312-ax-metalic-2x50-mm.html) | -| [2 mm to 2 mm Coupling Hub](https://en.wikipedia.org/wiki/Coupling) | Shaft connections | [2 x 5.99 RON](https://www.optimusdigital.ro/en/coupling-hubs/451-2mm-to-2mm-coupling-hub.html) | -| [Miniature Ball Bearing (2 mm Internal Diameter)](https://en.wikipedia.org/wiki/Bearing_(mechanical)) | Shaft support | [2.89 RON](https://www.optimusdigital.ro/en/bearings/402-rulment-in-miniatura-cu-diametru-interior-2-mm.html) | -| [4x4 Push Button Keyboard Matrix](https://www.electronicwings.com/sensors-modules/4x4-keypad-module) | User input | [3.99 RON](https://www.optimusdigital.ro/en/touch-sensors/2441-tastatura-matriceala-4x4-cu-butoane.html) | -| [Red Button with Round Cover](https://en.wikipedia.org/wiki/Push-button) | Start / Reset buttons | [2 x 1.99 RON](https://www.optimusdigital.ro/en/buttons-and-switches/1114-red-button-with-round-cover.html) | -| [Breadboard HQ (830 points)](https://en.wikipedia.org/wiki/Breadboard) | Prototyping | [9.98 RON](https://www.optimusdigital.ro/en/breadboards/8-breadboard-hq-830-points.html) | -| [Breadboard Jumper Wires Set](https://en.wikipedia.org/wiki/Jump_wire) | Wiring | [7.99 RON](https://www.optimusdigital.ro/en/wires-with-connectors/12-breadboard-jumper-wire-set.html) | -| [10 cm 10p Male-Female Wires](https://en.wikipedia.org/wiki/Jump_wire) | Wiring | [8 x 2.99 RON](https://www.optimusdigital.ro/en/wires-with-connectors/650-fire-colorate-mama-tata-10p.html) | -| [Cardboard](https://en.wikipedia.org/wiki/Cardboard) | CAD (Cardboard Aided Design) | [4.40 RON](https://www.dedeman.ro/ro/cutie-depozitare-din-carton-ctft-435-420-x-330-x-210-mm/p/1045878) | +| Device | Usage | Qty | Price | +|--------|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | The microcontroller | 1 | [~130 RON*](https://ro.farnell.com/stmicroelectronics/nucleo-u545re-q/development-brd-32bit-arm-cortex/dp/4216396) | +| [Mini Infrared Interruption Sensor Module](https://www.optimusdigital.ro/en/all-products/5826-mini-infrared-interruption-sensor-module.html) | Detection of the passing banknote | 1 | [6.99 RON](https://www.optimusdigital.ro/en/all-products/5826-mini-infrared-interruption-sensor-module.html) | +| [1602 LCD with Blue Backlight 3.3 V](https://en.wikipedia.org/wiki/Liquid-crystal_display) | The main display | 1 | [19.99 RON](https://www.optimusdigital.ro/en/lcds/868-modul-lcd-1602-cu-backlight-galben-verde-de-33-v.html) | +| [DC Motor](https://en.wikipedia.org/wiki/DC_motor) | Pulling the banknotes into the slit | 1 | [3.99 RON](https://www.optimusdigital.ro/en/others/13612-dc-motor-f130-3v.html) | +| [L293D Motor Driver](https://www.ti.com/product/L293D) | The motor driver | 1 | [3 RON](https://www.optimusdigital.ro/en/brushed-motor-drivers/13613-driver-de-motoare-l293d.html) | +| [18 mm Rubber Wheel](https://en.wikipedia.org/wiki/Wheel) | The roller | 5 | [0.89 RON](https://www.optimusdigital.ro/en/gears/571-18-mm-rubber-wheel.html) | +| [2x150 mm Shaft](https://en.wikipedia.org/wiki/Shaft_(mechanical_engineering)) | The shaft for the roller | 1 | [1.95 RON](https://www.optimusdigital.ro/en/metal-axes/298-ax-metalic-2x150-mm.html) | +| [2x50 mm Shaft](https://en.wikipedia.org/wiki/Shaft_(mechanical_engineering)) | Shaft extention | 1 | [0.95 RON](https://www.optimusdigital.ro/en/metal-axes/312-ax-metalic-2x50-mm.html) | +| [2 mm to 2 mm Coupling Hub](https://en.wikipedia.org/wiki/Coupling) | Shaft connections | 2 | [5.99 RON](https://www.optimusdigital.ro/en/coupling-hubs/451-2mm-to-2mm-coupling-hub.html) | +| [Miniature Ball Bearing (2 mm Internal Diameter)](https://en.wikipedia.org/wiki/Bearing_(mechanical)) | Shaft support | 1 | [2.89 RON](https://www.optimusdigital.ro/en/bearings/402-rulment-in-miniatura-cu-diametru-interior-2-mm.html) | +| [4x4 Keypad](https://www.electronicwings.com/sensors-modules/4x4-keypad-module) | User input | 1 | [22.50 RON](https://www.conexelectronic.ro/senzori-si-module-pentru-platforme-de-dezvoltare/16456-TASTATURA-16-TASTE-MEMBRANE-SWITCH.html) | +| [Button with Round Cover](https://en.wikipedia.org/wiki/Push-button) | Start / Reset / Edit buttons | 3 | [1.99 RON](https://www.optimusdigital.ro/en/buttons-and-switches/1114-red-button-with-round-cover.html) | +| [10K Potentiometer](https://en.wikipedia.org/wiki/Potentiometer) | Adjusting the LCD contrast | 1 | [2.39 RON](https://www.optimusdigital.ro/en/potentiometers/12360-10k-wh148-variable-resistor-without-washer-and-nut.html) | +| [Mini Breadboard](https://en.wikipedia.org/wiki/Breadboard) | Wiring | 3 | [2.19 RON](https://www.optimusdigital.ro/en/breadboards/248-syb-170-colored-mini-breadboard-green.html) | +| [Jumpers, Resistors, Capacitros etc](https://en.wikipedia.org/wiki/Electronic_component) | Basic electronics | - | [~20 RON](https://www.optimusdigital.ro/en/) | +| [Cardboard](https://en.wikipedia.org/wiki/Cardboard) | CAD (Cardboard Aided Design) | 1 | [4.40 RON](https://www.dedeman.ro/ro/cutie-depozitare-din-carton-ctft-435-420-x-330-x-210-mm/p/1045878) | +| **Total** | | | **~250 RON** | *was borrowed from the lab @@ -103,9 +174,10 @@ The format is | [defmt](https://github.com/knurling-rs/defmt) | Logging framework for resource-constrained devices | Debug & Logging | | [defmt-rtt](https://github.com/knurling-rs/defmt) | defmt log messages over the RTT protocol | Debug & Logging | | [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler that exits with an error code | Addressing errors | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Low level access to Cortex-M processors | Embassy dependency | | [cortex-m-rt](https://github.com/rust-embedded/cortex-m) | Minimal runtime / startup for Cortex-M microcontrollers | Embassy dependency | | [hd44780-driver](https://github.com/JohnDoneth/hd44780-driver) | Driver HD44780 compliant displays | Displaying the output | -| [embedded-hal](https://github.com/JohnDoneth/hd44780-driver) | Hardware Abstraction Layer for embedded systems | Display driver's dependency | +| [heapless](https://github.com/rust-embedded/heapless) | `static` friendly data structures that don't require dynamic memory allocation | Displaying strings on the LCD properly | ## Links diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/kicad.svg new file mode 100644 index 00000000000..33c3deabe82 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/kicad.svg @@ -0,0 +1 @@ +SVG Image created as CashCounter_hardware.svg date 2026-05-19T15:08:44 Image generated by Eeschema-SVG112233445566112233445566AABBCCDDAABBCCDDDate: 2026-05-19Date: 2026-05-19KiCad E.D.A. 10.0.1KiCad E.D.A. 10.0.1Rev: Rev:Size: A4Size: A4Id: 1/1Id: 1/1Title: Cash CounterTitle: Cash CounterFile: CashCounter_hardware.kicad_schFile: CashCounter_hardware.kicad_schSheet: /Sheet: /GNDGNDVSSVSS11VDDVDD22VOVO33RSRS44R/WR/W55EE66D0D077D1D188D2D299D3D31010D4D41111D5D51212D6D61313D7D71414LED(+)LED(+)1515LED(-)LED(-)1616DS1DS1LCD 1602LCD 1602GNDGNDGNDGND++11--22MMMotor_DCMotor_DCC1C1100n100n+3V3+3V3GNDGND+5V+5V+3V3+3V3PC10PC1011PC11PC1122PC12PC1233PD2PD244VDDVDD55E5VE5V66~{BOOT0}~{BOOT0}77GNDGND88IOREFIOREF1212STLINK_TMS/PA13STLINK_TMS/PA131313~{RESET}~{RESET}1414STLINK_TCK/PA14STLINK_TCK/PA141515+3V3+3V31616PA15PA151717+5V+5V1818GNDGND1919GNDGND2020PB7PB72121GNDGND2222PC13PC132323VINVIN2424PC14PC142525PC15PC152727PA0PA02828PH0PH02929PA1PA13030PH1PH13131PA4PA43232VBATVBAT3333PB0PB03434PC2PC23535PC1PC13636PC3PC33737PC0PC03838PC9PC93939PC8PC84040PB8PB84141PC6PC64242PB9PB94343PC5PC54444AVDDAVDD4545U5VU5V4646GNDGND4747PA5PA54949PA12PA125050PA6PA65151PA11PA115252PA7PA75353PB12PB125454PB6PB65555PC7PC75757GNDGND5858PA9PA95959PB2PB26060PA8PA86161PB1PB16262PB10PB106363PB15PB156464PB4PB46565PB14PB146666PB5PB56767PB13PB136868STLINK_SWO/PB3STLINK_SWO/PB36969AGNDAGND7070PA10PA107171PC4PC47272STLINK_UART_TX/PA2STLINK_UART_TX/PA27373STLINK_UART_RX/PA3STLINK_UART_RX/PA37575GNDGND7777GNDGND7878GNDGND7979GNDGND8080STM32STM32NUCLEO-U545RE-QNUCLEO-U545RE-Q+3V3+3V3EN1,2EN1,2111A1A221Y1Y33GNDGND44GNDGND552Y2Y662A2A77VCC2VCC288EN3,4EN3,4993A3A10103Y3Y1111GNDGND1212GNDGND13134Y4Y14144A4A1515VCC1VCC11616MDMDL293DL293D+3V3+3V3+3V3+3V3+3V3+3V3C4C411C3C322C2C233C1C144R1R155R2R266R3R377R4R488PM1PM14x4_Push_Button_Matrix4x4_Push_Button_Matrix+3V3+3V3VCCVCCGNDGNDOUTOUTSENS1SENS1IR Beam InterruptIR Beam InterruptGNDGND+3V3+3V3R1R110K10KB2B2BTN_ResetBTN_ResetB3B3BTN_EditBTN_EditB1B1BTN_StartBTN_StartGNDGND+3V3+3V3GNDGND+3V3+3V3R4R4220220GNDGND+3V3+3V3112233RV1RV110K10KDS1DS1LCD 1602LCD 1602VSSVSS11VDDVDD22VOVO33RSRS44R/WR/W55EE66D0D077D1D188D2D299D3D31010D4D41111D5D51212D6D61313D7D71414LED(+)LED(+)1515LED(-)LED(-)1616GNDGNDGNDGND+3V3+3V3+3V3+3V3+3V3+3V3MDMDL293DL293DEN1,2EN1,2111A1A221Y1Y33GNDGND44GNDGND552Y2Y662A2A77VCC2VCC288EN3,4EN3,4993A3A10103Y3Y1111GNDGND1212GNDGND13134Y4Y14144A4A1515VCC1VCC11616+3V3+3V3+5V+5V+3V3+3V3SENS1SENS1IR Beam InterruptIR Beam InterruptVCCVCCGNDGNDOUTOUTGNDGND+3V3+3V3R1R110K10KB2B2BTN_ResetBTN_ResetB3B3BTN_EditBTN_EditB1B1BTN_StartBTN_Start+3V3+3V3+3V3+3V3R4R4220220GNDGND+3V3+3V3RV1RV110K10K112233+3V3+3V3 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/lcd_w10.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/lcd_w10.webp new file mode 100644 index 00000000000..ed67521b3c5 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/lcd_w10.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w8.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w8.webp new file mode 100644 index 00000000000..d6123d2b8cc Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w8.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w9.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w9.webp new file mode 100644 index 00000000000..84e00a5b545 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/prototype_w9.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/pusher_w9.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/pusher_w9.webp new file mode 100644 index 00000000000..5736f2e8966 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/pusher_w9.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w11.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w11.webp new file mode 100644 index 00000000000..c8875567cd5 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w11.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w9.webp b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w9.webp new file mode 100644 index 00000000000..ee4d669d44a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/oleksandr.kozoriz/sensor_w9.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/paul.draghici/index.md b/website/versioned_docs/version-fils_en/project/2026/paul.draghici/index.md index 6f694d19dc0..f7803d63807 100644 --- a/website/versioned_docs/version-fils_en/project/2026/paul.draghici/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/paul.draghici/index.md @@ -91,7 +91,7 @@ The user interface consists of the KY-040 Rotary Encoder (for navigation and sel ## Schematics -KiCAD schematic will be placed here. +![KICAD Schematic](./kicadproject.svg) ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/paul.draghici/kicadproject.svg b/website/versioned_docs/version-fils_en/project/2026/paul.draghici/kicadproject.svg new file mode 100644 index 00000000000..f6e694e1ecd --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/paul.draghici/kicadproject.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/diagram.webp b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/diagram.webp new file mode 100644 index 00000000000..03fadb56ee0 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/diagram.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/index.md b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/index.md new file mode 100644 index 00000000000..e324b1e4320 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/index.md @@ -0,0 +1,88 @@ +# ESP32 Ukulele Tuner (Rust) +A real-time ukulele tuner using ESP32 and Rust with visual feedback on a TFT display. + +:::info + +**Author**: Oprea Radu - Gabriel \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Radur12 + +::: + +## Description + +A simple real-time ukulele tuner that captures audio using a digital microphone, detects pitch, and displays tuning accuracy (flat, sharp, or correct) on a TFT screen. + +## Motivation + +This project was chosen to explore embedded systems programming with Rust, real-time audio processing, and hardware interfacing. It combines signal processing with a practical and interactive use case (musical instrument tuning), making it both educational and useful. + +## Architecture + +### Main components: + +Audio Input Module (INMP441 microphone) +Signal Processing Module (pitch detection using FFT) +Control Unit (ESP32 microcontroller) +Output Interface (TFT display) + +### Connections: + +The microphone captures sound via I2S and sends it to the ESP32. +The ESP32 processes the signal to detect frequency (pitch detection). +The detected pitch is compared with standard ukulele tuning values (G4, C4, E4, A4). +Results are sent to the TFT display, showing whether the note is flat, sharp, or in tune. + +### System Data Flow + +![Diagram](./diagram.webp) + +## Log + +### Week 5 - 11 May + +Initial project setup, component selection, and environment configuration for Rust on ESP32. + +### Week 12 - 18 May + +Implemented audio capture via I2S and basic signal processing (FFT). + +### Week 19 - 25 May + +Integrated display output and completed pitch detection logic with visual feedback. + +## Hardware +ESP32 DevKit1 (ESP-WROOM-32) +INMP441 I2S Digital Microphone +1.44" SPI LCD Module with ST7735 Controller (128x128 px) + +### Schematics + +![Kicad](kicad.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [ESP32 DevKit V1](https://sigmanortec.ro/placa-dezvoltare-esp32-cu-wifi-si-bluetooth?SubmitCurrency=1&id_currency=2&srsltid=AfmBOoqsWrsP--au7FCZ8bSrXUsl5neEnXNTZ6X_o2jJOZFMJI9ANC0hGgE) | Main microcontroller | [42 RON](https://sigmanortec.ro/placa-dezvoltare-esp32-cu-wifi-si-bluetooth?SubmitCurrency=1&id_currency=2&srsltid=AfmBOoqsWrsP--au7FCZ8bSrXUsl5neEnXNTZ6X_o2jJOZFMJI9ANC0hGgE) | +| [INMP441 I2S Microphone](https://www.optimusdigital.ro/en/others/12548-inmp441-mems-high-precision-omnidirectional-microphone-module-i2s.html?srsltid=AfmBOoorwAe9erzXWIhca8h9l2gHLA-k6hmzWy75FjUOStzRLvaQ1qG6) | Audio input for pitch detection | [20 RON](https://www.optimusdigital.ro/en/others/12548-inmp441-mems-high-precision-omnidirectional-microphone-module-i2s.html?srsltid=AfmBOoorwAe9erzXWIhca8h9l2gHLA-k6hmzWy75FjUOStzRLvaQ1qG6) | +| [1.44" SPI LCD Module with ST7735 Controller (128x128 px)](https://www.optimusdigital.ro/en/lcds/3552-modul-lcd-de-144-cu-spi-i-controller-st7735-128x128-px.html) | Displays tuning feedback | [30 RON](https://www.optimusdigital.ro/en/lcds/3552-modul-lcd-de-144-cu-spi-i-controller-st7735-128x128-px.html) | + +--- + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | Used for interfacing with ESP32 peripherals | +| [rustfft](https://github.com/ejmahler/RustFFT) | FFT libraries | Used for pitch detection | +| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used for drawing to the display | +| [esp-idf-hal](https://github.com/esp-rs/esp-idf-hal) | I2S module | Used for audio input processing | +| [espup](https://github.com/esp-rs/espup) | ESP Rust tooling | Used for setting up and building the project | + +--- + +## Links + +1. [ESP32 INMP441 - audio](https://github.com/ZioTester/ESP32-MMB-MAX98357A-INMP441-audio) +2. [embedded-graphics examples](https://github.com/embedded-graphics/embedded-graphics/tree/master) +3. [rustfft documentation](https://github.com/ejmahler/RustFFT) \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/kicad.svg b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/kicad.svg new file mode 100644 index 00000000000..b48804ed2d0 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/radu_gabriel.oprea/kicad.svg @@ -0,0 +1,20656 @@ + + + +SVG Image created as Oprea_Radu-Gabriel.svg date 2026/05/10 17:40:11 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 8.0.2 +KiCad E.D.A. 8.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: Oprea_Radu-Gabriel.kicad_sch +File: Oprea_Radu-Gabriel.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +PWM +PWM + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + ++ ++ + + + + +2 +2 + + + + + + + + + + + + + + + +- +- + + + +3 +3 + + + + + + + + + + + + + + + +M1 +M1 + + + + + + + + + +Motor Servo SG90 +Motor Servo SG90 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J1 +J1 + + + + + + + + + + +INMP441_1 +INMP441_1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3 +3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-1 +J2-1 + + + + + + + + + + + + + + + + + + + + + + + + + + +IO26 +IO26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-10 +J2-10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO27 +IO27 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-11 +J2-11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO14 +IO14 + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-12 +J2-12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO12 +IO12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-13 +J2-13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND1 +GND1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-14 +J2-14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO13 +IO13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-15 +J2-15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SD2 +SD2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-16 +J2-16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SD3 +SD3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-17 +J2-17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CMD +CMD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-18 +J2-18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EXT_5V +EXT_5V + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-19 +J2-19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EN +EN + + + + + + + + + +J2-2 +J2-2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SENSOR_VP +SENSOR_VP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-3 +J2-3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SENSOR_VN +SENSOR_VN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-4 +J2-4 + + + + + + + + + + + + + + + + + + + + + + + + +IO34 +IO34 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-5 +J2-5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO35 +IO35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-6 +J2-6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO32 +IO32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-7 +J2-7 + + + + + + + + + + + + + + + + + + + + + + + +IO33 +IO33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-8 +J2-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO25 +IO25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J2-9 +J2-9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND3 +GND3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-1 +J3-1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO5 +IO5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-10 +J3-10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO17 +IO17 + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-11 +J3-11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO16 +IO16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-12 +J3-12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO4 +IO4 + + + + + + + + + + + + + + + + + + + + + + +J3-13 +J3-13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO0 +IO0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-14 +J3-14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO2 +IO2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-15 +J3-15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO15 +IO15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-16 +J3-16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SD1 +SD1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-17 +J3-17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SD0 +SD0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-18 +J3-18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CLK +CLK + + + + + + + + + + + + + + + + + + + + + + +J3-19 +J3-19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO23 +IO23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-2 +J3-2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO22 +IO22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-3 +J3-3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +TXD0 +TXD0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-4 +J3-4 + + + + + + + + + + + + + + + + + + + + + + + + + + + +RXD0 +RXD0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-5 +J3-5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO21 +IO21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-6 +J3-6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND2 +GND2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-7 +J3-7 + + + + + + + + + + + + + + + + + + + + + + + + + + +IO19 +IO19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-8 +J3-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +IO18 +IO18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J3-9 +J3-9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U1 +U1 + + + + + + + + + + + + + + +ESP32-DEVKIT +ESP32-DEVKIT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + + +8 +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +J4 +J4 + + + + + + + + +LCD ST7735 +LCD ST7735 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + +J2 +J2 + + + + + + + + + + + + + + + +INMP441_2 +INMP441_2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + +BZ1 +BZ1 + + + + + + + + + + + + + + + + + + + + + + + + + + +Buzzer +Buzzer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_CS +LCD_CS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_L/R +INMP441_L/R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5V +5V + + + + + + + + + + + + + + + + + + + + +INMP441_WS +INMP441_WS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_L/R +INMP441_L/R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SERVO +SERVO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SDA +LCD_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_DC +LCD_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_RES +LCD_RES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SCK +LCD_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_BLK +LCD_BLK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3.3V +3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_SD +INMP441_SD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_RES +LCD_RES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_BLK +LCD_BLK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_DC +LCD_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_CS +LCD_CS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3.3V +3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_SD +INMP441_SD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_WS +INMP441_WS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BUZZ +BUZZ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_SCK +INMP441_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SCK +LCD_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3.3V +3.3V + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BUZZ +BUZZ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SDA +LCD_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +INMP441_SCK +INMP441_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SERVO +SERVO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5V +5V + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/rares.zara/architecture_ironbeats.drawio.svg b/website/versioned_docs/version-fils_en/project/2026/rares.zara/architecture_ironbeats.drawio.svg new file mode 100644 index 00000000000..dc17f47b4a4 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/rares.zara/architecture_ironbeats.drawio.svg @@ -0,0 +1,4 @@ + + + +
Host PC 
(Serial Debuging)
Host PC...
Host PC
(Power Bank)
Host PC...
5V USB
5V USB
SWD & UART
SWD & UART
GPIO
GPIO
Game Board
Game Board
Nucleo-F767ZI Cortex M7
(Main Microcontroller)
Nucleo-F767ZI Cortex M7...
1.3 " SH 1106
OLED Display
1.3 " SH 1106...
UI /  Score
UI /  Score
SPI
SPI
3x Buttons
1x Joystick
3x Buttons...
Controls
Controls
MAX7219 8x32 
LED Matrix
MAX7219 8x32...
3x Passive Buzzers
3x Passive Bu...
Audio
Audio
PWM
PWM
SPI
SPI
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/rares.zara/index.md b/website/versioned_docs/version-fils_en/project/2026/rares.zara/index.md index 8601a103fed..fd8547fef1b 100644 --- a/website/versioned_docs/version-fils_en/project/2026/rares.zara/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/rares.zara/index.md @@ -25,33 +25,8 @@ The choice of this project stems from a desire to explore Real-Time Systems and 3. Rust in Embedded: Leveraging Rust's ownership model and the Embassy async executor to manage multiple concurrent tasks (audio, visuals, and logic) without a traditional Operating System. ## Architecture - The system is centralized around the STM32F767ZI (Cortex-M7) which handles the high-speed game loop, user input debouncing, and peripheral data streaming. -[POWER & DEBUGGING SECTION] - +-------------------+ +-------------------+ - | Host PC | | Host PC | - | (Power Bank) | | (Serial Debugging)| - +---------+---------+ +---------^---------+ - | | - | (5V USB) | [UART / VCP] - v v - +---------------------------------------------------+ - | | - | NUCLEO-F767ZI (Cortex-M7) | - | (Main Microcontroller) | - | | - +--------+------------+------------+-----------+----+ - | | | | - [SPI] [SPI] [PWM] [GPIO] - | | | | - v v v v - +------------+ +------------+ +---------+ +------------+ - | MAX7219 | | 1.3" SH1106| | 3x Pass.| | 3x Buttons | - | 8x32 LED | | OLED Disp. | | Buzzers | | 1x Joystick| - | Matrix | | | | | | | - +------------+ +------------+ +---------+ +------------+ - (Game Board) (UI/Score) (Audio) (Controls) - +![System Architecture Picture](./architecture_ironbeats.drawio.svg) ## Log @@ -64,14 +39,16 @@ Hardware acquisition finalized (STM32, MAX7219, SH1106 OLED). Developed the project logic and power scheme as well as implemented basic GPIO blinky and serial logging for debuggin every component involved in the project. ### Weeks 8-10 +Finished the full hardware schematic in KiCad, including pin mapping for SPI peripherals and the joystick's voltage dividers. Resolved all Electrical Rules Check (ERC) conflicts and finalized the wiring for the buttons, buzzers, and displays. ### Weeks 10-12 - +Integrated the hardware and architecture diagrams into the GitHub documentation and set up the project's README. Started the Rust implementation for button inputs, focusing on the 200ms software lockout logic to ensure accurate gameplay detection. ### Weeks 12-14 ## Hardware IronBeats is a bare-metal Rust rhythm game powered by an STM32F767ZI microcontroller, ensuring precise gameplay timing. An 8x32 LED matrix serves as the vertical runway for falling notes, while a 1.3" OLED handles menus and leaderboards. Three tactile buttons let players catch notes in specific lanes, with three passive buzzers providing real-time audio feedback. A joystick controls UI navigation, and a 5V power bank safely drives the entire hardware system +![Hardware Electric Scheme Picture](./schematic_ironbeats.svg) ### Schematics diff --git a/website/versioned_docs/version-fils_en/project/2026/rares.zara/schematic_ironbeats.svg b/website/versioned_docs/version-fils_en/project/2026/rares.zara/schematic_ironbeats.svg new file mode 100644 index 00000000000..44d2163a5fa --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/rares.zara/schematic_ironbeats.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/components.webp b/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/components.webp new file mode 100644 index 00000000000..bfa0b4e97db Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/components.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/index.md b/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/index.md index 91785dc5bb1..bed4d13679b 100644 --- a/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/razvan_andrei.borca/index.md @@ -102,6 +102,7 @@ Electrolytic Capacitors\ ### Schematics ![Pet Feeder Architecture Schematic](petfeeder.svg) +![Pet Feeder Image](components.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/hardware.webp new file mode 100644 index 00000000000..2519b623182 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/index.md b/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/index.md index 46e9ac7d768..6a92f1db2b0 100644 --- a/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/razvan_ilie.preda/index.md @@ -46,9 +46,10 @@ Stepper Motor + Driver: Drives the conveyor belt. Servo Motors (x2): Used for sorting or gate control. Sensors: Color sensor (TCS34725), metal detector, weight sensor (load cell + HX711), and distance sensor for object detection. User Interface: LEDs, buttons, and buzzer for feedback and control. +![Hardware](hardware.webp) ### Schematics - +![Kicad Schematic](kicadsch.svg) ### Bill of Materials - -
batteries
3.7V 2.6A
battery suport 18650
ON
OFF
button
GND
12V booster
5V regulator
STM32U5 board
GND
LED
RGB1
LED
RGB2
LCD
Touch Sensor
Buzzer
R
G
B
Brightness
Potentiometers
Mosfet1
Mosfet2
Mosfet3
GND
GND
GND
GND
GND
GND
5V%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20parent%3D%221%22%20style%3D%22rounded%3D0%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20value%3D%22%26lt%3Bfont%20style%3D%26quot%3Bfont-size%3A%208px%3B%26quot%3B%26gt%3BGND%26lt%3B%2Ffont%26gt%3B%22%20vertex%3D%221%22%3E%3CmxGeometry%20height%3D%2215.09%22%20width%3D%2220%22%20x%3D%22220%22%20y%3D%2220%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E
3V
GND -> common ground 
100ohm
100ohm
100ohm
10kohm
10kohm
10kohm
GND
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/hardware_kicad_1024x768.webp b/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/hardware_kicad_1024x768.webp new file mode 100644 index 00000000000..8983500cf8a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/hardware_kicad_1024x768.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/index.md b/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/index.md index c4cf67e78ce..f5a92a698f8 100644 --- a/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/sarah_ioana.bumbacea/index.md @@ -1,3 +1,6 @@ +# Sakura Desk Lamp +A Desk Lamp + # Project Name A multifunctional lamp @@ -21,6 +24,8 @@ The idea for this project started from the desire to create a unique and visuall ## Architecture The system is structured into several main functional components that interact with each other to provide the final behavior. + ``` + +----------------------+ | Input Module | |----------------------| @@ -48,19 +53,26 @@ The system is structured into several main functional components that interact w | blinking, etc.) | | - Buzzer control | +----------------------+ +----------------------+ + ``` + ## Log - -### Week 5 - 11 May +### Week 6 - 12 May draw the schematic and planned how to create the lamp support and other decorative elements -### Week 12 - 18 May +### Week 13 - 19 May tested some of the components -### Week 19 - 25 May +### Week 20 - 26 May github assignment and started building the model +### Week 27 - 3 April +continued working on the model and finished setting half of the components + +### Week 4 - 10 May +started soldering components + ## Hardware The project is built around an STM32 microcontroller and includes multiple input and output components to create an interactive lighting system. The power supply is based on two 18650 Li-ion batteries, connected through a boost converter to provide 12V for the LEDs and a step-down regulator to supply 5V to the microcontroller and other components. @@ -75,57 +87,50 @@ DC motor – interactive energy generation element Boost converter (XL6009) – steps voltage up to 12V Step-down converter (LM2596) – regulates voltage to 5V 18650 batteries + holder + charger – portable power supply -The hardware schematics is saved in the .svg file -### Schematics -Place your KiCAD or similar schematics here in SVG format. -### Bill of Materials +### Schematics - - | Device | Usage | Price | |--------|--------|-------| -| [STM32 Nucleo-U545RE] | The microcontroller | [125 RON](https://ro.mouser.com/ProductDetail/511-NUCLEO-U545RE-Q) | -| [LCD de 1.44'' pentru STC, STM32 și Arduino (5 V)] | the lcd screen | [34,99 RON](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/8589-lcd-de-144-pentru-stc-stm32-i-arduino-5-v.html) | -| [Rezistor Variabil 10k WH148] | The potentiometers | [2,39*4 RON](https://www.optimusdigital.ro/ro/componente-electronice-potentiometre/12360-rezistor-variabil-10k-wh148-poteniometru-fara-aiba-i-piulia.html) | -| [Buton 6x6x6] | five buttons | [1,80 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1119-buton-6x6x6.html) | -| [Modul DC-DC Boost XL6009] | voltage booster to 12V | [9,99 RON](https://www.optimusdigital.ro/ro/surse-ridicatoare-reglabile/160-modul-dc-dc-boost-xl6009.html) | -| [Tranzistor Mosfet IRF1405 (Canal N, 200W, 55V)] | three mosfets for the leds | [29,97 RON](https://www.optimusdigital.ro/ro/componente-electronice-tranzistoare/11856-tranzistor-mosfet-irf1405-canal-n-200w-55v.html) | -| [Suport de Baterii 2 x 18650] | Battery support | [3,99 RON](https://www.optimusdigital.ro/ro/suporturi-de-baterii/941-suport-de-baterii-2-x-18650.html) | -| [Modul cu Senzor Capacitiv TTP223] | touch sensor | [2,97 RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/861-modul-cu-senzor-capacitiv-ttp223.html) | -| [Baterie Reincarcabila 18650 ISR Li-Ion 3.6V 2600mAh] | power supply | [38,96 RON](https://www.emag.ro/baterie-reincarcabila-18650-isr-li-ion-3-6v-2600mah-2-6a-cu-descarcare-maxima-7-65a-ted-electric-a0116012-01/pd/DYFNB73BM/) | -| [Modul DC-DC Step Down LM2596] | the voltage regulator for 5V | [9,46 RON](https://www.emag.ro/modul-dc-dc-step-down-lm2596-765464701237/pd/DWHHRGBBM/?utm_source=mobile%20app&utm_medium=ios&utm_campaign=share%20product) | -| [Intrerupator Negru On/Off] | Button for the power supply | [1,98 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/7434-buton-negru-onoff.html?search_query=Intrerupator+Negru+On%2FOff&results=1) | -| [Buzzer Pasiv de 3.3V sau 3V] | buzzer for the alarm | [1,98 RON](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=Buzzer+Pasiv+de+3.3V+sau+3V&results=1) | -| [Breadboard 90 x 52 x 8.5 mm] | two breadboards | [11,98 RON](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/13247-breadboard-90-x-52-x-85-mm.html?search_query=Breadboard+90+x+52+x+8.5+mm&results=91) | -| [ Set de LED-uri Asortate de 5 mm si 3 mm (310 buc) cu Rezistoare Bonus] | LEDs and resistors | [26,99 RON](https://www.optimusdigital.ro/ro/kituri-optimus-digital/9517-set-de-led-uri-asortate-de-5-mm-si-3-mm-310-buc-cu-rezistoare-bonus.html?search_query=Set+de+LED-uri+Asortate+de+5+mm+si+3+mm+%28310+buc%29+cu+Rezistoare+Bonus&results=1) | -| [Set Fire pentru Breadboard] | wires for components | [7,99 RON](cannot find the link anymore) | +| [STM32_Nucleo-U545RE] | The microcontroller | [125RON](https://ro.mouser.com/ProductDetail/511-NUCLEO-U545RE-Q) | +| [LCD_de_1.44''_pentru_STC,_STM32_și_Arduino_(5V)] | the lcd screen | [34,99RON](https://www.optimusdigital.ro/ro/optoelectronice-lcd-uri/8589-lcd-de-144-pentru-stc-stm32-i-arduino-5-v.html) | +| [Rezistor_Variabil_10k_WH148] | The potentiometers | [2,39*4RON](https://www.optimusdigital.ro/ro/componente-electronice-potentiometre/12360-rezistor-variabil-10k-wh148-poteniometru-fara-aiba-i-piulia.html) | +| [Buton_6x6x6] | five buttons | [1,80RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1119-buton-6x6x6.html) | +| [Modul_DC-DC_Boost_XL6009] | voltage booster to 12V | [9,99RON](https://www.optimusdigital.ro/ro/surse-ridicatoare-reglabile/160-modul-dc-dc-boost-xl6009.html) | +| [Tranzistor_Mosfet_IRF1405_(Canal_N,_200W,_55V)] | three mosfets for the leds | [29,97RON](https://www.optimusdigital.ro/ro/componente-electronice-tranzistoare/11856-tranzistor-mosfet-irf1405-canal-n-200w-55v.html) | +| [Suport_de_Baterii_2_x_18650] | Battery support | [3,99RON](https://www.optimusdigital.ro/ro/suporturi-de-baterii/941-suport-de-baterii-2-x-18650.html) | +| [Modul_cu_Senzor_Capacitiv_TTP223] | touch sensor | [2,97RON](https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/861-modul-cu-senzor-capacitiv-ttp223.html) | +| [Baterie_Reincarcabila_18650_ISR_Li-Ion_3.6V_2600mAh] | power supply | [38,96RON](https://www.emag.ro/baterie-reincarcabila-18650-isr-li-ion-3-6v-2600mah-2-6a-cu-descarcare-maxima-7-65a-ted-electric-a0116012-01/pd/DYFNB73BM/) | +| [Modul_DC-DC_Step_Down_LM2596] | the voltage regulator for 5V | [9,46RON](https://www.emag.ro/modul-dc-dc-step-down-lm2596-765464701237/pd/DWHHRGBBM/?utm_source=mobile%20app&utm_medium=ios&utm_campaign=share%20product) | +| [Intrerupator_Negru_On/Off] | Button for the power supply | [1,98 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/7434-buton-negru-onoff.html?search_query=Intrerupator+Negru+On%2FOff&results=1) | +| [Buzzer_Pasiv_de_3.3V_sau_3V] | buzzer for the alarm | [1,98 RON](https://www.optimusdigital.ro/ro/audio-buzzere/12247-buzzer-pasiv-de-33v-sau-3v.html?search_query=Buzzer+Pasiv+de+3.3V+sau+3V&results=1) | +| [Breadboard_90_x_52_x_8.5_mm] | two breadboards | [11,98 RON](https://www.optimusdigital.ro/ro/prototipare-breadboard-uri/13247-breadboard-90-x-52-x-85-mm.html?search_query=Breadboard+90+x+52+x+8.5+mm&results=91) | +| [Set_de_LED-uri_Asortate_de_5_mm_si_3_mm_(310_buc)_cu_Rezistoare_Bonus] | LEDs and resistors | [26,99 RON](https://www.optimusdigital.ro/ro/kituri-optimus-digital/9517-set-de-led-uri-asortate-de-5-mm-si-3-mm-310-buc-cu-rezistoare-bonus.html?search_query=Set+de+LED-uri+Asortate+de+5+mm+si+3+mm+%28310+buc%29+cu+Rezistoare+Bonus&results=1) | +| [Set_Fire_pentru_Breadboard] | wires for components | [7,99 RON](cannot find the link anymore) | +``` ## Software +``` | Library | Description | Usage | |---------|-------------|-------| | [embassy-stm32](https://github.com/embassy-rs/embassy) |Async HAL for STM32 microcontrollers | Main framework for handling tasks, timers, and peripherals | | [embassy-time](https://github.com/embassy-rs/embassy) | Time handling for async systems | Used for delays, timers, and scheduling (lamp timer) | | [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Used to draw text and UI on the LCD display | | [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | Used for general GPIO, ADC, and PWM control | - | [lcd driver]() | LCD driver | Used to control the LCD display | +``` ## Links - 1. [STM32U5 Documentation](https://www.st.com/resource/en/data_brief/nucleo-c031c6.pdf) 2. [monster can](https://www.ifit.ee/en/a/monster-ultra-500ml-black-cherry) diff --git a/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/hardware.svg b/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/hardware.svg new file mode 100644 index 00000000000..a2ba9724899 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/hardware.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/index.md b/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/index.md index d0e4c719a2d..6dc3e5a8ede 100644 --- a/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/sergiu.lefter/index.md @@ -31,13 +31,13 @@ Main architecture components: - Main control: STM32 Nucleo (rental) running the lock logic and state machine. - Output: SG90 servo for lock movement, LCD1602 (I2C) for messages, passive buzzer for alerts. - Network side: ESP32 DevKitC for logging and possible admin reset/dashboard. -- Wiring setup: STM32 connects through a small interface protoboard (female headers), then to the main protoboard where modules are connected. +- Wiring setup: STM32 connects through a 7x9 interface protoboard (female headers), then to a second 7x9 main protoboard where modules are connected. How components connect: - Keypad, button, and endstop send inputs to the STM32. - STM32 controls the servo, buzzer, and LCD. - ESP32 communicates with STM32 over serial/UART for logging/admin features. -- Components are assembled on protoboard/PCB prototyping boards using silicone stranded wires. +- Components are assembled on two 7x9 protoboard/PCB prototyping boards using silicone stranded wires. ### Software State Machine @@ -58,9 +58,9 @@ Input Block (3x4 Keypad, Admin Button, Mechanical Endstop) v STM32 Nucleo (Main Control: PIN + State Machine) | - | via small interface protoboard (female headers) + | via 7x9 interface protoboard (female headers) v -Main Protoboard (distribution for components) +Main 7x9 Protoboard (distribution for components) | | | | I2C | PWM | GPIO/PWM v v v @@ -84,17 +84,17 @@ Researched smart lockbox implementations and decided on the final project direct Updated the hardware plan and replaced several components: breadboard with protoboard, 4x4 keypad with 3x4 keypad, reed switch with mechanical endstop, and active buzzer with passive buzzer. Ordered all required parts and checked compatibility. ### Week 8 -Defined the interface-board approach to avoid soldering on the rental STM32 board (female header bridge to the main protoboard). Added ESP32 networking scope for event logging and possible admin PIN reset flow. +Defined the interface-board approach to avoid soldering on the rental STM32 board (female header bridge through a dedicated 7x9 protoboard). Added ESP32 networking scope for event logging and possible admin PIN reset flow. ## Hardware The lockbox prototype uses a mixed setup with reusable university hardware and purchased modules. The STM32 board is provided by the university as free rental (must be returned after project completion). -The rest of the circuit is assembled using protoboard/PCB prototyping boards and silicone stranded wires. +The rest of the circuit is assembled using two 7x9 protoboard/PCB prototyping boards and silicone stranded wires. ### Schematics -TODO: add KiCAD (or similar) schematic SVG in this folder and reference it here. +![Smart Lockbox schematic](./hardware.svg) ### Bill of Materials @@ -102,10 +102,13 @@ TODO: add KiCAD (or similar) schematic SVG in this folder and reference it here. |--------|--------|-------| | STM32 development board (university borrow) | Main controller board for firmware development and peripheral control | 0 RON (borrowed) | | [Placa dezvoltare ESP32-DevKitC, ESP32-WROOM-32D, 38P](https://sigmanortec.ro/placa-dezvoltare-esp32-devkitc-esp32-wroom-32d-38p) | Networking/logging module and potential admin dashboard support | 42.56 RON | -| [Placa PCB prototipare o fata 5x7](https://sigmanortec.ro/Placa-PCB-prototipare-o-fata-5x7-p159914959) | Small interface protoboard used between STM32 and the main wiring board | 2.95 RON | -| [Placa PCB prototipare fata dubla 7x9cm](https://sigmanortec.ro/Placa-PCB-prototipare-fata-dubla-7x9cm-p125747328) | Main (big) protoboard used for the rest of the components | 5.76 RON | +| [Placa PCB prototipare fata dubla 7x9cm](https://sigmanortec.ro/Placa-PCB-prototipare-fata-dubla-7x9cm-p125747328) x2 | Two 7x9 protoboards: one interface board between STM32 and the wiring, and one main board for the rest of the components | 11.52 RON (total) | | [Bara 40 pini 2.54 tata](https://sigmanortec.ro/Bara-40-pini-2-54-tata-p126025250) | Header pins for module interconnection | 2.06 RON | -| [Bara pini 40p mama 2.54mm, pin rotund, segmentabil](https://sigmanortec.ro/bara-pini-40p-mama-254mm-pin-rotund-segmentabil) x3 | Female headers for detachable wiring/interfaces | 7.08 RON (total) | +| [Header de Pini Mama 8p 2.54 mm](https://www.optimusdigital.ro/ro/componente-electronice-headere-de-pini/4161-header-de-pini-mama-8p-254-mm.html?search_query=0104210000035056&results=1) x2 | Female headers for detachable wiring/interfaces | 0,98 RON | +| [Header de Pini Mama 10p 2.54 mm](https://www.optimusdigital.ro/ro/componente-electronice-headere-de-pini/4162-header-de-pini-mama-10p-254-mm.html?search_query=0104210000035063&results=1) | Female headers for detachable wiring/interfaces | 3,27 RON | +| [Header de Pini Mama 2p 2.54 mm](https://www.optimusdigital.ro/ro/componente-electronice-headere-de-pini/4140-header-de-pini-mama-2p-254-mm.html?search_query=0104210000034998&results=1) x2 | Female headers for detachable wiring/interfaces | 0,78 RON | +| [Header de Pini Mama de 2.54 mm 2 x 19p](https://www.optimusdigital.ro/ro/componente-electronice-headere-de-pini/8517-header-de-pini-mama-de-254-mm-2-x-19p.html?search_query=0104210000056457&results=1) x2 | Female headers for detachable wiring/interfaces | 1.78 RON | +| [Header de Pini Mama 6p 2.54 mm](https://www.optimusdigital.ro/ro/componente-electronice-headere-de-pini/4156-header-de-pini-mama-6p-254-mm.html?search_query=0104210000035032&results=1) | Female headers for detachable wiring/interfaces | 0,49 RON | | [Tastatura numerica 4x3, 12 butoane](https://sigmanortec.ro/tastatura-numerica-4x3-12-butoane) | PIN entry keypad (3x4) | 18.76 RON | | [Buton 12x12x7.3](https://sigmanortec.ro/Buton-12x12x7-3-p160373654) | Local control/input button | 1.33 RON | | [Endstop mecanic SS-5GL2](https://sigmanortec.ro/Endstop-mecanic-SS-5GL2-p136284192) | Position sensing (replaces reed switch) | 5.23 RON | diff --git a/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/hardware.webp new file mode 100644 index 00000000000..64e5c049a9d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/index.md b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/index.md new file mode 100644 index 00000000000..a0519b01519 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/index.md @@ -0,0 +1,81 @@ +# Optical Currency Identifier +An assistive device that identifies Romanian Lei banknotes using RGB color scanning, mechanical transport, and audio feedback. + +:::info + +**Author**: Polojan Stefan-Alexandru \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-PolojanStefan + +::: + +## Description + +The Optical Currency Identifier is a complex assistive device designed to help visually impaired individuals identify Romanian Lei banknotes. The device automates the process by mechanically pulling the banknote through a slot, scanning its color profile with an RGB sensor, and announcing the value out loud using a speaker. + +## Motivation + +Physical currency remains a vital part of daily life, but it presents a significant accessibility challenge for the visually impaired. While coins have tactile differences, banknotes are extremely difficult to distinguish by touch. This project aims to provide financial independence by combining optical recognition with a mechanical transport system and audio feedback, eliminating the need to rely on another person for verification. + +## Architecture + +![schematic](schematic.svg) + +![Kicad](kicad.webp) + +![Hardware](hardware.webp) + +The system is divided into four main subsystems coordinated by the RP2350 microcontroller: +1. **Processing System:** Olimex RP2350-PICO2-XXL running bare-metal software written in Rust. +2. **Portable Power System:** A Li-Ion 18650 battery managed by a TP4056 charging module, and an MT3608 step-up converter to ensure stable 5V power for the motor and audio. +3. **Transport & Detection System:** A 28BYJ-48 stepper motor (with ULN2003 driver) for moving the banknote, and a TCST1103 optocoupler to detect when a note is inserted. +4. **Acquisition & Output System:** A TCS34725 RGB sensor for color reading, and a DFR0954 audio module with a Visaton speaker for vocal announcements. + + +## Log + +### Week 5 - 11 May +Established the project topic, researched the color palettes of Romanian banknotes, and defined the hardware requirements. + +### Week 12 - 18 May +Acquired the Olimex RP2350-PICO2-XXL board and the TCS34725 RGB sensor. Began initial hardware testing. + +### Week 19 - 25 May + + +## Hardware + +The hardware consists of a main RP2350 processing unit handling I2C communication for sensors, UART for audio playback, and GPIO sequencing for motor control, all powered by a boosted portable Li-Ion circuit. + +### Schematics + + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [Olimex RP2350-PICO2-XXL](https://www.tme.eu/Document/abfc4357f0d1ffa6023328425ee8a429/RP2350-PICO2-XXL-DTE.pdf) | The main microcontroller | [50 RON](https://www.tme.eu/ro/en/) | +| [TCS34725 Module](https://cdn-shop.adafruit.com/datasheets/TCS34725.pdf) | I2C RGB Color Sensor | [35 RON](https://www.emag.ro) | +| [Samsung INR18650-29E](https://eu.nkon.nl/samsung-18650-inr18650-29e.html) | Li-Ion Battery (2750mAh, 3.6V) | [20 RON](https://milnik.ro) | +| [TP4056 Module](https://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/TP4056.pdf) | Li-Ion Micro USB battery charging | [5 RON](https://www.emag.ro) | +| [MT3608 Module](#) | Step-up boost converter (raises 3.6V to 5V) | [5 RON](https://www.emag.ro) | +| [28BYJ-48 + ULN2003](#) | Stepper motor and driver for note transport | [15 RON](https://www.emag.ro) | +| [DFROBOT DFR0954](https://dfimg.dfrobot.com/wiki/20560/DFR0954_max98357a-i2s_datasheet_1.0.pdf) | Audio playback module for voice feedback | [30 RON](https://www.tme.eu/ro/en/) | +| [Visaton 2945](https://www.tme.eu/Document/e9e82c18d529e5eb244b6298ae1eb7bd/VS-K28.40-8.pdf) | Audio speaker | [15 RON](https://www.tme.eu/ro/en/) | +| [TCST1103](https://www.tme.eu/Document/8d63b75bfc278bc19f8f5ebde16b04ae/tcst1103_1202_2103.pdf) | Optocoupler for note insertion detection | [5 RON](https://www.tme.eu/ro/en/) | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| `rp235x-hal` | Hardware Abstraction Layer | Used to configure clocks, GPIO pins, and I2C/UART hardware on the RP2350 | +| `cortex-m-rt` | ARM Cortex-M runtime | Provides the startup code and critical CPU entry points | +| `usb-device` | Core USB stack | Used to implement native USB device functionality | +| `usbd-serial` | USB CDC implementation | Used for debugging and streaming sensor data to the PC | +| `embedded-hal` | Embedded hardware traits | Provides standard traits for blocking I2C and UART communication | + +## Links + +1.-https://www.youtube.com/watch?v=Fy4IUyWjFX4 +2.-https://www.youtube.com/watch?v=zByu_-Q0F7E +3.- \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/kicad.webp b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/kicad.webp new file mode 100644 index 00000000000..6359e68d65d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/schematic.svg new file mode 100644 index 00000000000..a9959983287 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/stefan.polojan/schematic.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + Battery 3.6V (TP4056) + + + 5V Boost (MT3608) + + + Stepper Driver + + + Stepper Motor + + + DFPlayer Pro Audio + + + Visaton Speaker + + + Olimex RP2350 + + + Color (TCS34725) + + + Presence (TCST1103) + + + + Controlled by RP2350 / 3V3 Powered Sensors + + + Powered by the ~3.6V Li-Ion Battery + + + Powered by the 5V Boost Converter + + + Component specific wiring (Motor Phases / Audio) + + diff --git a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/aeroglove_diagram.svg b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/aeroglove_diagram.svg new file mode 100644 index 00000000000..6cb0e5621f5 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/aeroglove_diagram.svg @@ -0,0 +1 @@ +SVG Image created as aeroglove_diagram.svg date 2026-05-12T22:56:55 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: aeroglove_diagram.kicad_schSheet: /CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U2MPU-6050C1470uFPWR_FLAGVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64U1STM32U545RETxGNDGNDGNDPWR_FLAGR110k+3V3+3V3+3V3+3V3+3V3+3V3+3V3SW1SW_PushRGB123456D1LED_RGB+1-2M1Motor_DCAeroGlove: Interactive Gamepad SchematicMay 12th 2026U2MPU-6050CLKIN1AUX_DA6AUX_CL7VLOGIC8AD09REGOUT10FSYNC11INT12VDD13GND18CPOUT20SCL23SDA24U1STM32U545RETxVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PC424PC525PB026PB127PB228PB1029VCAP30VDD32PB1233PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861PB962VDD64C1470uFGNDPWR_FLAGR110k+3V3+3V3+3V3+3V3+3V3+3V3+3V3 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.svg b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.svg deleted file mode 100644 index d69ea0d3486..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
STM32
Nucleo-U545RE-Q
MPU 6050
Sensor
RGB LED
Tactile Button
Vibration Motor Module
PC / Computer
I2C
GPIO
GPIO
PWM
USB Cable
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.webp b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.webp new file mode 100644 index 00000000000..ca2ecdb520b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/diagram.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md index 7b2d58651a5..8da2f255f71 100644 --- a/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/stefania.boinegri/index.md @@ -20,7 +20,7 @@ AeroGlove was directly inspired by my time as an exchange student in Sweden, whe The main components are the STM32 Nucleo-U545RE-Q microcontroller, an MPU6050 accelerometer and gyroscope, a tactile push-button, an RGB LED, and a vibration motor module. The MPU6050 connects via I2C to capture spatial orientation. The microcontroller communicates bidirectionally with the PC via a USB Data Cable, sending inputs and receiving real-time feedback signals back from the computer to trigger the PWM-driven vibration motor. -![Block Diagram](./diagram.svg) +![Block Diagram](./diagram.webp) ## Log @@ -42,7 +42,7 @@ The project uses the STM32 Nucleo-U545RE-Q as the microcontroller to process inp ### Schematics -Place your KiCAD or similar schematics here in SVG format. +![Block Diagram](./aeroglove_diagram.svg) ### Bill of Materials @@ -53,7 +53,7 @@ Place your KiCAD or similar schematics here in SVG format. | Tactile Push-Button | Digital Input | 0.36 RON | | RGB LED Module | Visual Feedback | 2 RON | | Vibration Motor Module | Haptic Feedback | 5 RON | -| USB Data Cable | Power & Communication | 30 RON | +| USB Data Cable | Power & Communication | 29 RON | | Jumper Wires | Physical Connectivity | 7 RON | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image1.webp b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image1.webp new file mode 100644 index 00000000000..db6421b439a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image2.webp b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image2.webp new file mode 100644 index 00000000000..a6eab8074e3 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image3.webp b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image3.webp new file mode 100644 index 00000000000..5e891c5a6a0 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_image3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_schematics.svg b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_schematics.svg new file mode 100644 index 00000000000..67307c75950 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/hardware_schematics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/index.md b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/index.md index 203ce2a5093..044ffb2a657 100644 --- a/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/stefanita.stancu/index.md @@ -52,13 +52,27 @@ Provides a user-friendly interface for real-time monitoring and visualization of Finalized component research and ordered all necessary hardware. Waiting for delivery. Already had the microcontroller, some dummy thermistor and photoresistor and started testing software. +### Week 8 - 9 + +Soldered the sensors on the protoboard, RFM95(Lora module) didn't arrived yet. Finished KiCad schematic. + +### Week 10 - 11 + +Soldered wires on LoRa module, wired every component, had a bit of trouble so the antenna is going to be an 8.6 cm copper wire. + ## Hardware +![img1](hardware_image1.webp) +![img2](hardware_image2.webp) +![img3](hardware_image3.webp) + **Hardware Used** -STM32 microcontroller, environmental sensors (soil moisture, temperature, humidity, light), LoRa transceiver (SX1276/SX1262), and a LoRa gateway for wireless data transmission(the gateway is a public one which is hosted on TTN). +STM32 microcontroller, environmental sensors ( temperature, humidity, light ), LoRa transceiver (RFM96), and a LoRa gateway for wireless data transmission(the gateway is a public one which is hosted on TTN). ### Schematics +![hardware_schematic](hardware_schematics.svg) + ### Bill of Materials -| Device | Usage | Price | -| ----------------------- | --------------------- | -------- | -| Nucleo STM32 | The microcontroller | BORROWED | -| Kit Arduino Intermediar | I will use some parts | 360 RON | +| Device | Usage | Price | +| ----------------------- | ---------------------- | -------- | +| Nucleo STM32 | The microcontroller | BORROWED | +| Kit Arduino Intermediar | I will use some parts | 360 RON | +| KY-013 | Sensor for temperature | 5 RON | +| KY-015 | Sensor for humidty | 7 RON | +| KY-018 | Sensor for light | 3 RON | +| LoRa Module RFM96 | LoRa Transceiver | 80 RON | ### Kit components that will be used diff --git a/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar1.webp b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar1.webp new file mode 100644 index 00000000000..faef403c0ca Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar_kicad.svg b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar_kicad.svg new file mode 100644 index 00000000000..35b514184ac --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/images/solar_kicad.svg @@ -0,0 +1 @@ +SVG Image created as solar.svg date 2026-05-16T13:30:23 Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: solar.kicad_schSheet: /GNDGNDD17D16GNDVIN+5V+5VGNDLV1LV2LVGNDLV3LV4J13GNDHV4HV3GNDHVHV2HV1+5VR6R_Photo+12VGND+5VJ6VCCTrigEchoGndJ10HC-SR04+5V+3.3V+3.3VR5R_Photo+3.3VGND+3.3VR7R_Photo+5V+1-2M1Motor_DCCN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2U2BNUCLEO-G0B1RE+3.3VPA9PC7PB0PA7PA6PA5CN5_8PB9PB8CN6_1~{RST}PC10PC11PC12PD2PA14PD0PD1PD3PA13PD4PA15PB7PC13CN7_25PD5CN7_27PA0CN7_29PA1CN7_31PA4PB1PC2CN7_36PC3CN7_38CN8_5CN8_6PC5PC4PA10PB3PB5PB4PB14PA8PC9PC8PC6PA3CN10_7PD6PA12PA11PC1PC0PB2PB6PB15PB10PB13PA2PD8PD9U2ANUCLEO-G0B1REGNDGNDOUT1OUT2J8+1-2M2Motor_DCENAIN1IN2IN3IN4ENBJ7OUT4OUT3J9GNDVCCSCLSDAJ11OLED I2C+5VGNDSIGGNDVCCJ3GUVA-S12SD_Sensor+3.3V+3.3VR310KR410KGNDGND12SW1SW_SPSTR8R_PhotoGNDR110KGNDR210KIN+IN-B+B-OUT+OUT-J1TP4056_moduleSC15V Photovoltaic PanelBT118650 Li-IonGND+5VVIN+VIN-VOUT+VOUT-J2MT3608_STEP-UPIN3LDR3US_ECHO_3VI2C_SDA_3VI2C_SCL_3VUS_TRIG_3VI2C_SCL_3VESP_TXIN2I2C_SDA_3VGUVA_SIGI2C_SCL_5VI2C_SDA_5VIN4ENBIN3IN2ENAIN1US_ECHO_5VUS_TRIG_3VLDR3LDR2LDR4I2C_SCL_5VUS_TRIG_5VESP_RXUS_ECHO_5VESP_TXESP_RXI2C_SDA_5VGUVA_SIGUS_TRIG_5VLDR1ENBUS_ECHO_3VENAIN1LDR4IN4LDR1LDR2L298N_ModuleZY-ESP32Logic Level ConverterGNDGNDVIN+5VJ13LV1LV2LVGNDLV3LV4GNDHV4HV3GNDHVHV2HV1+5V+3.3VGNDJ3GUVA-S12SD_SensorSIGGNDVCCGND+3.3VJ11OLED I2CGNDVCCSCLSDA+5VGNDJ7ENAIN1IN2IN3IN4ENB+5VGNDJ6+12VGND+5VJ10HC-SR04VCCTrigEchoGnd+5VGNDGND+3.3VU2BNUCLEO-G0B1RECN4_1CN4_1CN4_2CN4_2CN4_3CN4_3CN4_4CN4_4AGNDCN5_73V3CN6_25VCN6_5GNDCN6_6VINCN6_8VDDCN7_5E5VCN7_6VBATCN7_335V_USB_CHGCN10_8CN11_1CN11_1CN11_2CN11_2CN11_3CN11_3CN11_4CN11_4CN11_5CN11_5CN11_6CN11_6STM_RSTJP1_15V_USB_STLKJP2_1VIN_5VJP2_3STLK_RXJP6_1STLK_TXJP6_2+5VR7R_Photo+3.3VR5R_Photo+3.3V+3.3V+3.3VR6R_PhotoR310KR410KGNDGNDR8R_PhotoGNDR110KGNDR210K \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/index.md b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/index.md new file mode 100644 index 00000000000..a58db090062 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/teodora.bosie/index.md @@ -0,0 +1,86 @@ +# S.O.L.A.R. Rover + +An autonomous mobile platform designed to optimize the growth environment for indoor plants. + +:::info + +**Author**: Bosie Teodora \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-teobosie28 + +::: + + + +## Description + Self-driving plant pot that actively moves around a room to keep indoor plants healthy. It features a custom 3D-printed chassis that holds the plant and a solar panel on top, while hiding the electronics and motors underneath. Powered by an STM32 microcontroller and programmed in Rust, the rover uses four light sensors to find and drive toward the best patches of sunlight. To protect the plant, a UV sensor acts as an alarm that tells the rover to hide in the shade if the sun gets too intense. An ultrasonic sensor helps it dodge obstacles like furniture. The system is designed to be highly independent, using the solar panel to constantly recharge its battery for long-term use without needing to be plugged in. Finally, the ESP32 WiFi chip sends live updates to a remote dashboard, allowing you to easily check on the rover's status from afar. +## Motivation +The inspiration for the S.O.L.A.R. Rover comes from a recent personal interest in keeping indoor plants and a rather frustrating failure. Despite my best efforts and constant care, a basil plant I tried to grow simply wouldn't survive. That experience made me realize just how difficult it can be to maintain the perfect lighting for a plant to thrive indoors. At the same time, I was looking for a serious technical challenge. I had never built a robot before, and I specifically wanted to push myself to program a physical system that could actually move and navigate its surroundings. This project was born as a way to learn about locomotion and hardware, while finally solving the exact problem that doomed my basil. +## Architecture + +![System Architecture](./images/solar1.webp) + +## Log + + + +# Week 5 +I finalized my idea and came to the conclusion that I want to include a solar panel for autonomy. +# Week 7 +I ordered the components and started to figure out how I wanted the 3D chassis to look in order for it to be as professional as possbile. +# Week 9 +My components arrived and I started to look into the photoresistors functionality and sensitivity to the light intesity of the sun. I also struggled with using a soldering iron for the first time. +# Week 10 +I started my rover design and decided to have some floors inside the internal structure in order to have a better organization of the jumpers. The first level will be for the battery and breadboard whereas the second one will be for the STM32 microprocessor and the L98N module with a 5.5 cm distance between them. Also, I want to update my hardware complexity for which I have ordered a OLED I2C(SSD1306), giving more personality to my robot. + +## Hardware +The hardware platform of the project is centered around the STM32 Nucleo-U545RE-Q development board, which acts as the main MCU of the rover. Two 3V-6V DC gear motors are used for the differential drive propulsion, paired with a ball caster for stability, and are interfaced with the MCU via an L298N Dual H-Bridge motor driver. An array of four LDR photoresistors is utilized for 360-degree directional light tracking, alongside a GUVA-S12SD UV sensor for detecting high-intensity radiation and an HC-SR04 ultrasonic sensor for obstacle avoidance. Wireless connectivity for remote telemetry is provided by an ESP32 WiFi module.Energy harvesting and power management are handled by a 5V photovoltaic panel that trickle-charges an onboard 18650 Li-Ion battery via a TP4056 charger and an MT3608 step-up regulator. The mechanical structure of the rover itself is manufactured using a custom 3D-printed modular frame, featuring a two-tier chassis that houses the electronics and powertrain on the lower deck and a conical universal pot holder on the upper deck. + +### Schematics + +![KICAD Scheme](images/solar_kicad.svg) + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [STM32 Nucleo-U545RE-Q](https://www.st.com/en/evaluation-tools/nucleo-u545re-q.html) | Main microcontroller| ~borrowed | +| [Breadboard (830 points)](https://electronicmarket.ro/mb102-830-puncte-fara-lipire-breadboard?search=breadboard) | Rapid prototyping and circuit connections | ~ 9,89 RON | +| [Jumper Wires Set] | Electrical interconnections between modules | ~owned | +| [4x Resistors (10k ohms)]| Voltage dividers for the LDR photoresistor array | ~owned | +| [DC Gear Motors (3V-6V)+Wheels](https://electronicmarket.ro/6v-250-rpm-motor-si-roti?search=roti) | Differential drive propulsion| ~31,28 RON | +| [Car Caster](https://electronicmarket.ro/roti-robot-masina-roata-universala?search=roata) | Assuring stability | ~5,80 RON | +| [L298N Dual H-Bridge](https://www.handsontec.com/dataspecs/L298N%20Motor%20Driver.pdf) | Interface between MCU PWM signals and motors | ~borrowed | +| [LDR (Photoresistors)](https://electronicmarket.ro/ldr-rezistent-sensibil-la-lumina-fotorezistor-5mm?search=ldr) | Quad-array (360 °) for directional light tracking | ~1,12RON | +| [GUVA-S12SD UV Sensor](https://electronicmarket.ro/senzor-de-intensitate-uv-soare-240nm-370nm-guva-s12sd?search=guva) | Safety for high-intensity radiation | ~24,93 RON | +| [HC-SR04 Ultrasonic Sensor](https://ardushop.ro/en/electronics/2289-ultrasonic-sensor-module-hc-sr04-6427854030726.html) | Obstacle avoidance during navigation | ~5,65 RON | +| [5V Photovoltaic Panel]() | Energy harvesting for battery trickle-charging | ~not purchased yet | +| [TP4056 Li-Ion Charger](https://electronicmarket.ro/tp4056-tip-c-protejat-modul-de-incarcare-baterie-litiu-litiu?search=tp%204056) | Li-Ion battery charging module | ~4,60 RON | +| [MT3608 Step-up Module](https://electronicmarket.ro/modul-mt3608-2a-dc-dc-step-up-convertor-tensiune-arduino?search=MT3608) | 5V voltage regulation/boost | ~5,01 RON | +| [18650 Li-Ion Battery] | Onboard power storage | ~borrowed | +| [18650 Battery Holder](https://ardushop.ro/en/electronics/31-1x-18650-battery-holder-6427854027979.html) | Physical casing/contacts for the battery | ~2,18 RON | +| [ESP32 ESP-WROOM-32](https://www.espressif.com/en/products/socs/esp32) | WiFi telemetry for remote monitoring | ~borrowed | +| [3D Printed Frame] | Custom-designed modular mechanical structure | ~3D printer owned | + +## Software + +| Library | Description | Usage | + +| [embassy-stm32](https://crates.io/crates/embassy-stm32) | Hardware abstraction layer for STM32 microcontrollers | Provides the HAL for ADC (sensors), PWM (motors), and UART (WiFi) | +| [embassy-executor](https://crates.io/crates/embassy-executor) | Async task executor for embedded systems | The async runtime allowing simultaneous navigation and sensor polling | +| [embassy-time](https://crates.io/crates/embassy-time) | Time management utilities | For high-precision timing required by the ultrasonic sensor | +| [defmt](https://crates.io/crates/defmt) | Lightweight embedded logging framework | Modern logging for real-time debugging | +| [defmt-rtt](https://crates.io/crates/defmt-rtt) | RTT transport for defmt logs | Transmits the real-time debugging logs via RTT | +| [static_cell](https://crates.io/crates/static_cell) | Static memory allocation utility | Ensures safe, static memory allocation for hardware peripherals | +| [embedded-hal](https://crates.io/crates/embedded-hal) | Hardware abstraction layer traits | Provides standard traits for sensor driver interoperability | +| [panic-probe](https://crates.io/crates/panic-probe) | Panic handler for embedded debugging | Safety crate for immediate error reporting and system halt | + +## Links + + + +1. [robot inspiration](https://www.youtube.com/watch?v=wB7i1HEBsNc) +2. [GPIOs and Interrupts](https://www.youtube.com/watch?v=F6tI-qjXv_s) +3. [Embassy Bible](https://embassy.dev/book/#_what_is_embassy) + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/index.md b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/index.md index 883195dc9e3..32df800326a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/index.md @@ -1,5 +1,4 @@ -# Project Name -Lumentra +# Lumentra :::info **Author**: Sandu Tudor Nicolas \ @@ -24,7 +23,7 @@ Main Components & Interconnections: - Tactile Performance Array: Mechanical arcade buttons connected via standard GPIO pins, used to send MIDI Note On/Off messages. - Gesture Sensor: A single VL53L0X Time-of-Flight (ToF) laser sensor connected to the I2C Bus. The distance read is mapped to MIDI Control Change (CC) messages. - Internal Humanizer: The RP2350’s integrated TRNG peripheral is utilized to provide high-quality random data for non-deterministic MIDI velocity and panning. -- Visual Interface: An ST7789 TFT display module connected to the high-speed SPI Bus to provide real-time visual feedback on active MIDI CC values and selected effects. +- Visual Interface: An ST7735 TFT display module connected to the high-speed SPI Bus to provide real-time visual feedback on active MIDI CC values and selected effects. - Host PC Connection: The microcontroller's Native USB peripheral is configured as a native USB-MIDI Class Device, sending data directly to the DAW (e.g. FL Studio). +-------------------+ +-------------------+ +-----------------------+ @@ -34,7 +33,7 @@ Main Components & Interconnections: | | +-------------------+ | Logic Controller | +-----------------------+ | Tactile Input |===GPIO======| (Pico 2 W) |====SPI======| Visual Interface | -| (Arcade Buttons) | | | | (ST7789 TFT Display) | +| (Arcade Buttons) | | | | (ST7735 Display) | +-------------------+ | | +-----------------------+ | | | | +-----------------------+ @@ -59,11 +58,13 @@ Main Components & Interconnections: ## Hardware -The project is built around the Raspberry Pi Pico 2 W (featuring the dual-core ARM Cortex-M33 RP2350), selected for its excellent asynchronous Embassy Rust support and native USB capabilities. Gesture inputs are captured using a single, millimeter-accurate VL53L0X ToF laser sensor on the I2C bus. Performance input is handled by mechanical arcade buttons. Visual feedback is delivered via a 1.3" TFT LCD display driven by an ST7789 controller communicating over the SPI bus. To ensure a professional and durable musical instrument, the entire circuit will be permanently soldered onto a prototyped perfboard. +The project is built around the Raspberry Pi Pico 2 W (featuring the dual-core ARM Cortex-M33 RP2350), selected for its excellent asynchronous Embassy Rust support and native USB capabilities. Gesture inputs are captured using a single, millimeter-accurate VL53L0X ToF laser sensor on the I2C bus. Performance input is handled by mechanical arcade buttons. Visual feedback is delivered via a 1.44" LCD display driven by an ST7735 controller communicating over the SPI bus. To ensure a professional and durable musical instrument, the entire circuit will be permanently soldered onto a prototyped perfboard. -### Schematics +![Lumentra Hardware Photo](./pozama.webp) +### Schematics +![Lumentra KiCad Schematic](./kicadschem.svg) ### Bill of Materials @@ -81,7 +82,7 @@ The format is |--------|--------|-------| | [Raspberry Pi Pico 2 W](https://pip-assets.raspberrypi.com/categories/1088-raspberry-pi-pico-2-w/documents/RP-008304-DS-2-pico-2-w-datasheet.pdf?disposition=inline) | Main microcontroller running the native USB stack, I2C, and SPI logic. | [40 RON](https://www.optimusdigital.ro/ro/placi-raspberry-pi/13327-raspberry-pi-pico-2-w.html?search_query=raspberry+pi+pico+2+w&results=24) | | [VL53L0X ToF Sensor](https://www.st.com/resource/en/datasheet/vl53l0x.pdf) | Laser sensor to track hand distance for effect control. | [20 RON](https://sigmanortec.ro/Modul-VL53L0X-timp-de-zbor-p126182383?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=23069763085&gbraid=0AAAAAC3W72PYOVYYJVcWF-co_NlzFjur9&gclid=Cj0KCQjw77bPBhC_ARIsAGAjjV-JC2lOul-OrYUwsBMv0o_3_mwhgKs6WroU0MGVofJ-gFerOj4XN-AaAguKEALw_wcB) | -| [Display TFT ST7789](https://www.lcdwiki.com/1.3inch_IPS_Module)| Provides real-time visual feedback of MIDI values | [41 RON](https://electronix.ro/produs/display-tft-1-3-inch-st7789-negru/) | +| [LCD Module with ST7735 Controller](https://www.displayfuture.com/Display/datasheet/controller/ST7735.pdf)| Provides real-time visual feedback of MIDI values | [41 RON](https://www.optimusdigital.ro/en/lcds/3552-modul-lcd-de-144-cu-spi-i-controller-st7735-128x128-px.html?search_query=1.44%22+SPI+LCD+Module+with+ST7735+Controller+%28128x128+px%29&results=2) | | [Arcade Buttons (4 pack)]() | Tactile mechanical input for sending Note On/Off messages. | [40 RON](https://www.optimusdigital.ro/ro/butoane-i-comutatoare/1851-buton-arcade-iluminat-24mm-verde.html) | | [Resistors 10kΩ]() | Pull-down for buttons | [5 RON](https://www.optimusdigital.ro/en/resistors/1088-025w-10k-resistor.html?search_query=resistor+10k&results=17) | | [Perfboard] | Final assembly | [8 RON](https://www.optimusdigital.ro/en/protoboards/231-test-wiring-150-x-90-mm.html) | @@ -94,9 +95,9 @@ The format is | [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | Async Runtime | Core non-blocking peripheral management. | | [embassy-rp](https://docs.embassy.dev/embassy-rp/0.9.0/rp2040/index.html) | Hardware Abstraction | RP2350 specific GPIO, I2C, TRNG, and SPI configuration. | | [embassy-usb](https://docs.embassy.dev/embassy-usb/0.6.0/default/index.html) | USB Device Stack | Configuring the Pico's native hardware USB peripheral to communicate with the PC. | -| [vl53l0x](https://github.com/almindor/st7789) | I2C driver for ToF sensor | Reading millimeter distance values from the laser sensor. | +| [vl53l0x](https://www.st.com/resource/en/datasheet/vl53l0x.pdf) | I2C driver for ToF sensor | Reading millimeter distance values from the laser sensor. | | [usbd-midi](https://crates.io/crates/usbd-midi) | USB MIDI Class | Formats raw button and sensor data into standard USB-MIDI packets. | -| [mipidsi](https://docs.rs/mipidsi/latest/mipidsi/) | ST7789 / SPI Driver | Handles the low-level initialization and SPI communication for the TFT screen. | +| [mipidsi](https://docs.rs/mipidsi/latest/mipidsi/) | ST7735 / SPI Driver | Handles the low-level initialization and SPI communication for the TFT screen. | | [embedded-graphics](https://docs.rs/embedded-graphics/latest/embedded_graphics/) | 2D graphics library | Used for drawing shapes, text, and visual interface elements on the display. | ## Links diff --git a/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/kicadschem.svg b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/kicadschem.svg new file mode 100644 index 00000000000..fc3ad45a0ec --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/kicadschem.svg @@ -0,0 +1,19230 @@ + + + +SVG Image created as Tudor.svg date 2026/05/10 15:17:50 + Image generated by Eeschema-SVG + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 8.0.2 +KiCad E.D.A. 8.0.2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: Tudor.kicad_sch +File: Tudor.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW4 +SW4 + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_PUSH +SW_PUSH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW2 +SW2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_PUSH +SW_PUSH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW1 +SW1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_PUSH +SW_PUSH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW3 +SW3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SW_PUSH +SW_PUSH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + +BZ1 +BZ1 + + + + + + + + + + + + + + + + + + + + + + + + + + +Buzzer +Buzzer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO0 +GPIO0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +GPIO7 +GPIO7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO8 +GPIO8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 +11 + + + + + + + + + + + + + + + +GPIO9 +GPIO9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 +12 + + + + + + + + + + + + + + + + + + + + +GPIO10 +GPIO10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +14 +14 + + + + + + + + + + + + + +GPIO11 +GPIO11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +15 +15 + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO12 +GPIO12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +16 +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO13 +GPIO13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +17 +17 + + + + + + + + + + + + +GPIO14 +GPIO14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO1 +GPIO1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +GPIO15 +GPIO15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO16 +GPIO16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 +21 + + + + + + + + + + + + + + + + + + + + +GPIO17 +GPIO17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 +22 + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO18 +GPIO18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 +24 + + + + + + + + + + + + + + + + + + +GPIO19 +GPIO19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO20 +GPIO20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO21 +GPIO21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 +27 + + + + + + + + + + + + + + + + + +GPIO22 +GPIO22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND + +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3 + +3 + + + + + + + + + + + + + + + + + + +RUN +RUN + + + + + + + + + + + + + + + + + + + + + + + + + +30 +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO26_ADC0 +GPIO26_ADC0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +31 +31 + + + + + + + + + + + + + + + + + + + + + + + +GPIO27_ADC1 +GPIO27_ADC1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 +32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +AGND +AGND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +33 +33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO28_ADC2 +GPIO28_ADC2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +34 +34 + + + + + + + + + + + + + + + + + + + + + +ADC_VREF +ADC_VREF + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +35 +35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3 + +3V3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +36 + +36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +3V3_EN +3V3_EN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +37 +37 + + + + + + + + + + + + + + + + + + + + + +VSYS + +VSYS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +39 + +39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO2 +GPIO2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + + +VBUS + +VBUS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40 + +40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO3 +GPIO3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +GPIO4 +GPIO4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO5 +GPIO5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + + + + +GPIO6 +GPIO6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 +9 + + + + + + + + + + + + + + + + + + + + + + + +A1 +A1 + + + + + + + + +RaspberryPi_Pico_W +RaspberryPi_Pico_W + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +7 +7 + + + + +J2 +J2 + + + + + + + + + + + + + + + +LCD_ST7789 +LCD_ST7789 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + +3 +3 + + + + + + + + + + + + + + + + + + +4 +4 + + + + + + + + +5 +5 + + + + + + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + +J1 +J1 + + + + + + + + + + +VL53L0X +VL53L0X + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_SDA +VL53L0X_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_XSHUT +VL53L0X_XSHUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_SCL +VL53L0X_SCL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_SDA +VL53L0X_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SCK +LCD_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_RES +LCD_RES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_SCL +VL53L0X_SCL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_XSHUT +VL53L0X_XSHUT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VL53L0X_GPIO1 +VL53L0X_GPIO1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_DC +LCD_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SCK +LCD_SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_RES +LCD_RES + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SDA +LCD_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_DC +LCD_DC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_BLK +LCD_BLK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_BLK +LCD_BLK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LCD_SDA +LCD_SDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/pozama.webp b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/pozama.webp new file mode 100644 index 00000000000..503c9faa035 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/tudor_nicolas.sandu/pozama.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/index.md b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/index.md new file mode 100644 index 00000000000..77e86549c9b --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/index.md @@ -0,0 +1,83 @@ +# mp3 player +A bluetooth mp3 player + +:::info + +**Author**: Cihodaru Valentin-Alexandru \ +**GitHub Project Link**: https://github.com/UPB-PMRust-Students/project-Vulisu + +::: + +## Description + +An mp3/wav player that reads the song from a sd card and plays it on a bluetooth speaker. The mp3 +player also has a potentiometer that is used to change the volume, a play/pause button and skip +song and backwards buttons. +## Motivation + +I chose this project because I think an mp3 bluetooth player that has the songs stored offline can be helpful when there is no internet access. +## Architecture +![Schematic diagram](schema.webp) + + +## Log + + + +### Week 5 - 11 May + +### Week 12 - 18 May + +### Week 19 - 25 May + +## Hardware + +Detail in a few words the hardware used. + +### Schematics + +![Schematic diagram](kicad.webp) + +### Bill of Materials + + +### Bill of Materials + +| Device | Usage | Price | +|--------|--------|-------| +| [Raspberry Pi Pico W](https://www.optimusdigital.ro/en/raspberry-pi-boards/12394-raspberry-pi-pico-w.html) | Main microcontroller for decoding and logic (x2) | 79.32 RON | +| [Bluetooth Module](https://sigmanortec.ro/modul-transmitator-audio-bluetooth-41-ble) | Handles wireless audio transmission to speakers | 38.31 RON | +| [PAM8403 Amplifier Modul](https://www.optimusdigital.ro/ro/module-audio/13699-modul-amplificator-audio-cu-potentiometru-pam8403.html) | Amplifies audio signal for local output | 6.99 RON | +| [Breadboard HQ830 Kit](https://www.optimusdigital.ro/ro/breadboard-uri/1352-kit-breadboard-hq830-cu-fire-si-sursa.html) | Prototyping base with power supply module | 22.00 RON | +| [Potentiometer 50k Mono](https://www.optimusdigital.ro/ro/potentiometre/18387-potentiometru-mono-50k.html) | Analog volume control input | 1.49 RON | +| [Buttons (6x6x6)](https://www.optimusdigital.ro/ro/butoane-si-comutatoare/10862-buton-6x6x6.html) | Song control (Play/Pause, Skip, Back) (x10) | 3.60 RON | +| [Power Button with Red LED](https://www.optimusdigital.ro/ro/butoane-si-comutatoare/20628-buton-de-pornire-cu-led-rosu.html) | Main power switch with visual indicator | 7.75 RON | +| [Jumper Wires (M-F)](https://www.optimusdigital.ro/ro/fire-conectori-si-socluri/3864-fire-colorate-mama-tata-40p-10-cm.html) | Connecting components to the Pico | 5.99 RON | +| [Headers (Male/Female)](https://www.optimusdigital.ro/ro/fire-conectori-si-socluri/11944-header-de-pini-verde-254-mm-40p.html) | Soldering to the Pico for breadboard use | 11.88 RON | +| [LED Pack (R/V/A)](https://www.optimusdigital.ro/ro/led-uri/6186-led-rosu-de-3-mm-cu-lentile-difuze.html) | Status indicators (Power, BT Link, SD Activity) | 1.04 RON | +| [Resistors 220Ω](https://www.optimusdigital.ro/ro/rezistori/10053-rezistor-025w-220.html) | Current limiting for LEDs (x8) | 0.80 RON | +| [DAC](https://www.optimusdigital.ro/ro/audio-altele/5658-modul-audio-stereo-dac-pcm5102a-cu-interfaa-pcm-32-bii-384-khz.html) | Digital to analog for sound | 94.99 RON | + +## Software + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-rs](https://github.com/embassy-rs/embassy) | Embassy-rs | Async GPIO, PWM, PIO, and ADC | +| [Synphonia](https://github.com/pdeljanov/Symphonia) | Audio decoding | Decode the mp3 to be able to be played | + +## Links + + + +1. [raspberry pi documentation](https://www.raspberrypi.com/documentation/microcontrollers/) +2. [synphonia documentation](https://docs.rs/symphonia/latest/symphonia/) +3. +... diff --git a/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/kicad.webp b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/kicad.webp new file mode 100644 index 00000000000..5251bca5905 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/kicad.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/proiect.svg b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/proiect.svg new file mode 100644 index 00000000000..cb312594f16 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/proiect.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 9.0.2Rev:Size: A4Id: 1/1Title:File: proiect.kicad_schSheet: /GNDVCCGND15V2VBAT3L4R5AGND6J2MH-M283V3_EN37RUN30GP01GP12GP24GP35GP46GP57GP69GP710GP811GP912GP1014GP1115GP1216GP1317GP1419GP1520GND3GND8GND13GND18GND23GND28AGND33GND38VBUS40VSYS393V3_OUT36ADC_VREF35GP1621GP1722GP1824GP1925GP2026GP2127GP2229GP2631GP2732GP2834A1SC0918Raspberry Pi:MODULE_SC0918Raspberry Pi132RV1R_PotentiometerR1220D1LED918cs1sck2mosi3miso4vcc5gnd6J1SD_Card_readerSW1Pause/PlaySW2Next SongSW3Previous SongSW1Pause/PlaySW2Next SongSW3Previous Song \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/schema.webp b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/schema.webp new file mode 100644 index 00000000000..0d14b48298d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/valentin.cihodaru/schema.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/index.md b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/index.md index bc9f8a19716..1e68369b37a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/index.md @@ -74,9 +74,12 @@ The command center is powered through USB, either from a laptop or an external p The system is divided into a stationary sensing and planning node and a mobile execution node. The stationary node observes the environment from above and sends movement commands wirelessly, while the vehicle node focuses only on receiving commands and controlling the motors. +![stationary](stationary_node.webp) +![mobile](mobile_node.webp) + ### Schematics -Will be added after the final wiring and architecture diagrams are completed. +![kicad](rc_car_kicad.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/mobile_node.webp b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/mobile_node.webp new file mode 100644 index 00000000000..e76438a0acd Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/mobile_node.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/rc_car_kicad.svg b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/rc_car_kicad.svg new file mode 100644 index 00000000000..669648ece74 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/rc_car_kicad.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title: AUTOMATED RC CARFile: First draft.kicad_schSheet: /VULTURESCU Victor Cristian FILS 1221 EBMobile Node (Black Pill + TB6612 + nRF24L01)Stationary Node (Nucleo + HuskyLens + OLED + nRF24L01)1234567891011121314151617181920212223242526272829303132333435363738J1CN7VinGNDTXRXU8Gravity HuskyLends+3V3GNDGND1VCC2CE3~{CSN}4SCK5MOSI6MISO7IRQ8U6NRF24L01_BreakoutAO11PGND13AO25BO27PGND29BO111VM213VM314PWMB15BIN216BIN117GND18STBY19VCC20AIN121AIN222PWMA23VM124U2TB6612FNG+5VGNDBT1Battery_CellOUT-IN+1IN-2OUT+3U5MP1584EN+5V+1-2M2Motor_DCTX1RX1LEDSCL1SDA1NSS1USB-USB+PWM pinsink 3mAUSB30pF 2MHz5V tolerantsource 0mAY@@JRX3TX3MOSI1MISO1ADC9ADC8SCK1ADC4ADC3ADC2ADC1ADC0PB121PB132PB143PB154PA85PA96PA107PA118PA129PA1510PB311PB412PB513PB614PB7153V316GND17GND18PB819PB920PC1321RST22PA023PA124PA225PA326PA427PA528PA629PA730PB031PB132PB1033PB11343V335SWDIO36SWCLK37GND385V39U1BlackPill (STM32F411CEU6)+5VBT2Battery_Cell+5VGND1VCC2CE3~{CSN}4SCK5MOSI6MISO7IRQ8U3NRF24L01_Breakout+5V+5VGND1VCC2SCL3SDA4U7ER_OLEDM0.91_1x-I2CGND1234567891011121314151617181920212223242526272829303132333435363738J2CN10+1-2M1Motor_DC+5VCN5_D8_PC75_1CN5_D9_PC6_PWM5_2CN5_D10_PC9_CS_PWM5_3CN5_D11_MOSI_PWM5_4CN5_D12_PA6_MISO5_5CN5_D13_PA5_SCK5_6CN5_GND5_7CN5_AVDD5_8CN5_D14_PB7_SDA5_9CN5_D15_PB6_SCL5_10CN6_NC6_1CN6_IOREF6_2CN6_NRST6_3CN6_3V36_4CN6_5V6_5CN6_GND6_6CN6_GND6_7CN6_VIN6_8CN8_A0_PA08_1CN8_A1_PA18_2CN8_A2_PA48_3CN8_A3_PB08_4CN8_A4_PC1_PB88_5CN8_A5_PC0_PB98_6CN9_D0_PA3_RX9_1CN9_D1_PA2_TX9_2CN9_D2_PC89_3CN9_D3_PB3_PWM9_4CN9_D4_PB59_5CN9_D5_PB4_PWM9_6CN9_D6_PB10_PWM9_7CN9_D7_PA89_8U4STM 32 NUCLEO-U545RE-Q CN6, CN5, CN8, CN9GNDMOBILE NODESTATIONARY NODEJ2CN101234567891011121314151617181920212223242526272829303132333435363738GND \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/stationary_node.webp b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/stationary_node.webp new file mode 100644 index 00000000000..213ab67b701 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/victor.vulturescu/stationary_node.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/hardware.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/hardware.webp new file mode 100644 index 00000000000..b8a7e5e8ed6 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/hardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/index.md b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/index.md index 3d1c195cc9d..1593eeddf82 100644 --- a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/index.md @@ -26,7 +26,7 @@ The system is composed of four main components that interact as follows: - **Input Handler**: reads either Wi-Fi UDP packets from the phone controller app or physical button GPIO states, and feeds movement/action commands into the game loop. - **Feedback Peripherals**: the RGB LED and buzzer respond to game events (damage, shooting, etc.) via PWM signals, managed as async Embassy tasks. - ![Schema arhitectura](schematic.drawio.svg) + ![Schema arhitectura](schemaarchitecture.webp) ## Log @@ -47,9 +47,11 @@ Began the software implementation. Set up the Embassy async runtime on the Pico The project is built around the **Raspberry Pi Pico 2W** (RP2350), which handles all game logic, rendering, networking, and peripheral control. The display is a 2.4" 240×320 ILI9341 LCD connected over SPI. Six push buttons provide physical input controls (forward, backward, left, right, interact and shoot). An RGB LED and a passive buzzer handle visual and audio feedback respectively, both driven by PWM signals +![hardware](hardware.webp) + ### Schematics -TODO +![Imagine hardware](schemahardware.webp) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaArchitecture.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaArchitecture.webp new file mode 100644 index 00000000000..113f983012e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaArchitecture.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaarchitecture.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaarchitecture.webp new file mode 100644 index 00000000000..113f983012e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemaarchitecture.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemahardware.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemahardware.webp new file mode 100644 index 00000000000..4aba1bc6137 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schemahardware.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schematic.drawio.svg b/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schematic.drawio.svg deleted file mode 100644 index 38e16536934..00000000000 --- a/website/versioned_docs/version-fils_en/project/2026/vlad.pencea/schematic.drawio.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
Raspberry Pi Pico 2W (RP2350)
Phone Controller App
6x Push Buttons
Raycasting Engine
Display Driver (mipidsi)
Input Handler
Feedback Peripherals
ILI9341 LCD 240x320
RGB LED
Passive Buzzer
Wi-Fi UDPGPIOSPIPWMPWM
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/index.md b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/index.md index abef8135c29..cde91010a86 100644 --- a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/index.md @@ -1,11 +1,12 @@ +import Schematic from './schematicc.svg'; + # Autonomous Context-Aware Thermal Rover A mobile, dual-axis targeting and navigation system that autonomously patrols an environment, avoids obstacles, and tracks human heat signatures using Rust and the Embassy framework. :::info -**Author**: Stancu Vlad-Gabriel \ - +**Author**: Stancu Vlad-Gabriel
**GitHub Project Link**: https://github.com/UPB-PMRust-Students/fils-project-2026-Vledituz ::: @@ -14,7 +15,7 @@ A mobile, dual-axis targeting and navigation system that autonomously patrols an The Autonomous Context-Aware Thermal Rover navigates using an ultrasonic sensor to avoid collisions. When the onboard 8x8 infrared matrix detects a heat signature, the rover halts its patrol, and a motorized pan-tilt turret locks onto the target. Depending on the ambient room lighting (detected via a photoresistor), the system dynamically switches between a passive observation mode and an active "Night Watch" mode, engaging a laser diode payload. Live telemetry and the thermal map are displayed on a local SPI LCD and streamed over Wi-Fi to a remote web dashboard. ## Motivation -I was always fascinated with the world of security measures and embedded systems. I intend to make a project that would actually prove useful down the line after more work put into it in high risk areas such as museums, banks, etc. +I was always fascinated with the world of security measures and embedded systems. I intend to make a project that would actually prove useful down the line after more work put into it in high risk areas such as museums, banks, etc. ## Architecture The system relies on an STM32U545RE-Q acting as the central processing unit, running concurrent async tasks. @@ -35,11 +36,30 @@ Configuring PWM timers for the SG90 servos and the L298N motor driver; basic mov ### Weeks 7-8 ADC polling for the LDR, SPI configuration for the ST7735 display. +### Weeks 8-10 +Decided to purchase a dedicated acrylic plated chassis for the rover. I started with the mounting of the 4 DC Motors, The L298N driver and mounting the STM32 on the upper deck of the chassis. + +### Weeks 11-12 +Going through with the soldering of the smaller components onto perfboards to ensure a clean look and better connectivity. + ## Hardware -The rover's chassis will be created out of lego bricks to ensure it is both lightweight and sturdy. All components will be soldered on a prototyping board, with extension wires to make it aestethically more pleasing and allow breathing room for further expansion. The main sensor, the AMG8833, will be mounted at the very fron on a pan-tilt bracket with 2 SG90 servomotors to allow a wide scannable area. +The rover's chassis is created out of 2 acrylic plates to ensure it is both lightweight and sturdy. All components except the STM32 MCU will be soldered on a prototyping board, with extension wires to make it aestethically more pleasing and allow breathing room for further expansion. The main sensor, the AMG8833, will be mounted at the very front on a pan-tilt bracket with 2 SG90 servomotors to allow a wide scannable area. + +### PHOTOS + +
+ Rover build photo 1 +

+ Rover build photo 2 +

+ Rover build photo 3 +
### Schematics -*(Insert your KiCAD schematic here in SVG format)* + +
+ +
### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza1.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza1.webp new file mode 100644 index 00000000000..898760299ae Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza2.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza2.webp new file mode 100644 index 00000000000..6ad0db8aa8d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza3.webp b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza3.webp new file mode 100644 index 00000000000..f2d42e1620a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/poza3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/schematicc.svg b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/schematicc.svg new file mode 100644 index 00000000000..14323d09b3e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad.stancu0905/schematicc.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: MA.kicad_schSheet: /GND+1-2M3Motor_DCGND123J4PAN SERVOGND123J6LASER MODULEGND123J5TILT SERVOGNDSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15U2L298N+5V+5V12345678J1ST7735 Display+3.3VGND1234J3HC-SR04R3RGNDR210K+3.3V+12VR1R_PhotoEN1D32D23D14D05D46D573V38VBus9GND10D611D712D813D1014RX15TX16U3WEMOS_C3_mini+5V+12V+3.3V+5V+3.3VGNDVBAT1PC132PC143PC154PH05PH16NRST7PC08PC19PC210PC311VSSA12VDDA13PA014PA115PA216PA317VSS18VDD19PA420PA521PA622PA723PB024PB125PB226PB1027VLXSMPS28VDDSMPS29VSSSMPS30VDD1131VDD33PB1334PB1435PB1536PC637PC738PC839PC940PA841PA942PA1043PA1144PA1245PA1346VDDUSB48PA1449PA1550PC1051PC1152PC1253PD254PB355PB456PB557PB658PB759PH360PB861VDD1162VDD64U1STM32U545RETxQ1234J2Thermal Camera (AMG8833)+5V+3.3VGNDGNDBT1Battery+1-2M1Motor_DC+1-2M2Motor_DCGND+1-2M4Motor_DCRight side of the roverLeft side of the roverSERVO_PANI2C_SDAI2C_SCLSERVO_TILTECHOLASER_CTRLTRIGDISP_RSTSPI_MISODISP_DCLDR_ADCSPI_MOSISPI_SCKDISP_CSTRIGECHOLDR_ADCDISP_RSTDISP_DCSPI_MOSIDISP_CSSERVO_PANSERVO_TILTLASER_CTRLI2C_SCLI2C_SDASPI_MISOSPI_SCKGNDU2L298NSENSE_A1OUT12OUT23Vs4IN15EnA6IN27GND8Vss9IN310EnB11IN412OUT313OUT414SENSE_B15+12V+3.3V+5VU3WEMOS_C3_miniEN1D32D23D14D05D46D573V38VBus9GND10D611D712D813D1014RX15TX16R1R_Photo+3.3VR210KGND+3.3VJ1ST7735 Display12345678+5VGNDJ4PAN SERVO123+5VJ2Thermal Camera (AMG8833)1234GND+3.3V+5VGNDJ3HC-SR041234+5VJ5TILT SERVO123GNDJ6LASER MODULE123GNDGNDM3Motor_DC+1-2M4Motor_DC+1-2GNDM2Motor_DC+1-2M1Motor_DC+1-2 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/architecture.svg b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/architecture.svg new file mode 100644 index 00000000000..1c6ed8ae28c --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/architecture.svg @@ -0,0 +1 @@ +
FLIGHT CONTROLLER
FLIGHT CONTROLLER
GROUND STATION
GROUND STATION
I2C
I2C
Raspberry Pi Zero 2W
Raspberry Pi Zero 2W
NRF24L01+
NRF24L01+
SPI
SPI
OLED display
OLED display
XBOX360 Controller
XBOX360 Controller
PWM
PWM
Raspberry PI pico 2W
Raspberry PI pico 2W
NRF24L01+
NRF24L01+
SPI
SPI
SERVO MOTORS
SERVO MOTORS
Brushless Motor
Brushless Motor
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/drone.svg b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/drone.svg new file mode 100644 index 00000000000..c822acf95af --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/drone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/ground_station.svg b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/ground_station.svg new file mode 100644 index 00000000000..3f891683891 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/images/ground_station.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/index.md b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/index.md new file mode 100644 index 00000000000..528db30c450 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_ionut.buruleanu/index.md @@ -0,0 +1,83 @@ +# Fixed Wing RC Drone + +A remote controled fixed wing drone + +:::info + +**Author:** Vlad Buruleanu \ +**Github Project Link:** https://github.com/UPB-PMRust-Students/fils-project-2026-vladburuleanu + +::: + +## Description +The aim of this project is to build a reliable UAV system that includes: +- The drone itself +- A flight controller that actuates control surfaces and sends over telemetry +- The ground station that is used to pilot the drone remotely + +## Motivation + +Commercial RC drones and receiver/transmitter systems are often expensive. The goal is to develop a similar system on a smaller budget with some parts I already have lying around. + + +## Architecture + +![System Architecture](images/architecture.svg) + +## Log + +# Weeks 5-6 + +Ordered necessary hardware components and started the development process of the drone, running simulations and making rough calculations to figure out optimal flight configuration. + +# Weeks 7-8 + +Finished 3d design of wing and tail structure. + +# Week 9 + +## Hardware + +The flight controller is designed around a Raspberry pi pico 2W microcontroller which controls the servo motors and brushlless(via PWM) motor responsible for actuating the control surfaces and providing thrust. The microcontroller is further responsible with collecting and sending telemetry data to the ground station via the NRF24L01+ RF module(via SPI). Telemetry data includes battery level and link quality. The battery level will be measured by reading the battery voltage from the balance pins with a voltage divider to protect the sensitive analog pins of the raspberry pi. Reverse polarity protection is added using a P-channel Mosfet. + +The Ground Station is centered around a Raspberry pi Zero 2W, who's main purpose is to take input from an XBOX360 controller and transmit it over to the drone. It also displays some telemetry data on the OLED display. + +### Schematics + +![kicad_schematic](./images/drone.svg) +![kicad_schematic](./images/ground_station.svg) + +### Bill of materials + +| Device | Usage | Price | +| :--- | :--- | :--- | +| Raspberry pi Zero 2W | ground station computer | _ RON | +| NRF24L01+ x2 | RF transmitter/recievers | _ RON | +| OLED 128x64 pixels I2C | display | _ RON | +| raspberry pi pico 2W | microcontroller/ flight computer | _ RON | +| servo motor sg90 x4 | turning control surfaces | _ RON | +| Li-Po, 1100mAh, 11.1V, 60C, 3S1P | drone power source | _ RON | +| ESC Fly Pro 40A | electronic speed controller | _ RON | +| Brushless motor A2212/ 1000 KV | provides thrust | _ RON | +| 11 x 4.7 inch propeller | propeller | _ RON | + +## Software + + +| Library | Description | Usage | +|---------|-------------|-------| +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor for embedded systems | Runs concurrent tasks | +| [embassy-time](https://github.com/embassy-rs/embassy) | Time management and timers | Handles scheduling, delays | +| [embassy-rp](https://github.com/embassy-rs/embassy) | HAL for RP2350 chip | GPIO, SPI, I2C, UART, PWM | +| [embassy-sync](https://github.com/embassy-rs/embassy) | Async synchronization primitives | Switches between RF receive task and servo task | +| [embedded-hal-async](https://github.com/rust-embedded/embedded-hal) | Async hardware abstraction traits | Common interface for SPI, I2C | +| [embedded-nrf24l01](https://github.com/astro/embedded-nrf24l01) | nRF24L01+ radio driver | Receiving/sending data | +| [cortex-m](https://github.com/rust-embedded/cortex-m) | Low level ARM Cortex-M support | Required for Rust on RP2350 | +| [cortex-m-rt](https://github.com/rust-embedded/cortex-m-rt) | Startup and reset handler | Entry point for firmware | +| [defmt](https://github.com/knurling-rs/defmt) | logging framework | Debug output during development | +| [panic-probe](https://github.com/knurling-rs/defmt) | Panic handler | Readable panic messages | + +## Links + +1. [Embassy - Async Rust for Embedded](https://embassy.dev/) +2. [course lab]https://embedded-rust-101.wyliodrin.com/ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/index.md b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/index.md index fa796400ab0..80985c01051 100644 --- a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/index.md @@ -38,10 +38,12 @@ The gait algorithm uses diagonal leg pairs (FL+RB, FR+LB) stepping one leg at a Bought all the components needed. ### Week 4 - 7 Started building the main frame and installig the SG90 servo motors, batteries, regulators, to test the idea and also the weight. First i made it just as a prototype. +### Week 8 - 10 + Seeing that the prototype failed(it was too heavy because of the construction materials, and the SG90 servo motors broke down very quickly and didn't have enough power for that weight), i decided to rebuild it using 3d printed parts and upgrading to mg90s metal gear servo motors. ## Hardware -The robot frame is built using PLA 3D printed parts and metal brackets. 12 SG90 servo motors are mounted across 4 legs (3 per leg: ankle, knee, hip). All servos are connected to a PCA9685 PWM driver which is controlled by the STM32 NUCLEO-F446RE over I2C. An HC-05 Bluetooth module connects to the MCU over UART for wireless control. The servos are powered by a dedicated 5V/3A external power supply to avoid overloading the MCU's onboard regulator. +The robot frame is built using PLA and AMS 3D printed parts and metal brackets. 12 MG90s servo motors are mounted across 4 legs (3 per leg: ankle, knee, hip). All servos are connected to a PCA9685 PWM driver which is controlled by the STM32 NUCLEO-F446RE over I2C. An HC-05 Bluetooth module connects to the MCU over UART for wireless control. The servos are powered by a dedicated external power supply composed of two 18650(a total of 7.4V) rechargeable batteries with a discharge of 30A and regulated to 6V using the XL4005 module. **Servo Channel Mapping:** @@ -61,23 +63,31 @@ The robot frame is built using PLA 3D printed parts and metal brackets. 12 SG90 | 12 | Front Right Hip | | 13 | Front Right Ankle (remapped - ch10 damaged) | +### Photos + +![Initial spider position image](initial_position.webp) +![Standing position image](standing_position.webp) +![Upside-down spider image](upside_down.webp) + ### Schematics +![KiCad Schematic](spider.svg) + ### Bill of Materials | Device | Usage | Price | | --- | --- | --- | | [STM32 NUCLEO-F446RE](https://www.skroutz.ro/s/58712886/Nucleo-64-Stm32f446re.html) | Main microcontroller | [131 RON](https://www.skroutz.ro/s/58712886/Nucleo-64-Stm32f446re.html) | | [PCA9685 PWM Driver](https://www.skroutz.ro/s/10560469/PCA9685-Modul-pentru-Arduino-16-Channel-PWM-Servo-Motor-Driver-I2C.html) | 16-channel I2C PWM servo driver | [32 RON](https://www.skroutz.ro/s/10560469/PCA9685-Modul-pentru-Arduino-16-Channel-PWM-Servo-Motor-Driver-I2C.html) | -| [SG90 Servo Motor](https://www.emag.ro/set-servomotor-sg90-unghi-de-lucru-180-grade-4-bucati-3874783591898/pd/DLHDYTYBM/) | Leg joints (x12) | [13,5 RON x12 = 162 RON](https://www.emag.ro/set-servomotor-sg90-unghi-de-lucru-180-grade-4-bucati-3874783591898/pd/DLHDYTYBM/) | +| [MG90s Servo Motor](https://www.optimusdigital.ro/ro/motoare-servomotoare/271-servomotor-mg90s.html) | Leg joints (x12) | [19,33 RON x12 = 232 RON](https://www.optimusdigital.ro/ro/motoare-servomotoare/271-servomotor-mg90s.html) | | [HC-05 Bluetooth Module](https://www.emag.ro/modul-bluetooth-hc-05-cl263/pd/D0966JBBM/?ref=sponsored_products_search_f_b_1_1&recid=recads_1_32fbfcfad6badb03a5a5715a583651c1e300e6c6667564a20a6976c19acbfa71_1776782861&aid=623e9e46-3c92-11f1-801c-06eaf0d4245d&oid=44261365&scenario_ID=1) | Wireless RC control | [46 RON](https://www.emag.ro/modul-bluetooth-hc-05-cl263/pd/D0966JBBM/?ref=sponsored_products_search_f_b_1_1&recid=recads_1_32fbfcfad6badb03a5a5715a583651c1e300e6c6667564a20a6976c19acbfa71_1776782861&aid=623e9e46-3c92-11f1-801c-06eaf0d4245d&oid=44261365&scenario_ID=1) | -| [18650 Batteries](https://www.dedeman.ro/ro/acumulator-lohuis-18650-3-7-v-2200-mah-li-ion-2-buc/p/1116472) | External servo power | [23 RON](https://www.dedeman.ro/ro/acumulator-lohuis-18650-3-7-v-2200-mah-li-ion-2-buc/p/1116472) | +| [18650 Batteries](https://www.optimusdigital.ro/ro/acumulatori-li-ion/13662-us18650vtc5c-2600mah-30a.html?search_query=Murata+US18650VTC5C+2600mAh+-+30A&results=1) | External servo power | [44 RON](https://www.optimusdigital.ro/ro/acumulatori-li-ion/13662-us18650vtc5c-2600mah-30a.html?search_query=Murata+US18650VTC5C+2600mAh+-+30A&results=1) | | Building Materials | Robot frame | 100 RON | | Jumper wires | Connections | [15 RON](https://www.optimusdigital.ro) | | [18650 Batteries Case](https://www.emag.ro/suport-acumulator-liion-format-18650-2-celule-in-serie-18650-2/pd/DN292RYBM/?ref=history-shopping_482223871_3410_1) | Used for conecting the batteries in series (7.4V) | [20 RON](https://www.emag.ro/suport-acumulator-liion-format-18650-2-celule-in-serie-18650-2/pd/DN292RYBM/?ref=history-shopping_482223871_3410_1) | | [DC-DC Step Down module LM2596](https://www.emag.ro/modul-dc-dc-step-down-lm2596-display-pentru-v-lm2596s-v-lcd/pd/DFFDSBMBM/) | Regulating the current to 5V for the microcontroller | [15 RON](https://www.emag.ro/modul-dc-dc-step-down-lm2596-display-pentru-v-lm2596s-v-lcd/pd/DFFDSBMBM/) | | [DC-DC Step Down module XL4005](https://www.emag.ro/modul-dc-dc-step-down-5a-xl4005/pd/DCFDSBMBM/) | Regulating the current to 6V for the servo driver | [15 RON](https://www.emag.ro/modul-dc-dc-step-down-5a-xl4005/pd/DCFDSBMBM/) | -| Total | | **559 RON** | +| Total | | **650 RON** | ## Software diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/initial_position.webp b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/initial_position.webp new file mode 100644 index 00000000000..edf8d94ae9a Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/initial_position.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/spider.svg b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/spider.svg new file mode 100644 index 00000000000..9c334599146 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/spider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/standing_position.webp b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/standing_position.webp new file mode 100644 index 00000000000..d5dd21df6ec Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/standing_position.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/upside_down.webp b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/upside_down.webp new file mode 100644 index 00000000000..add794ff23f Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vlad_stefan.damian/upside_down.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/architecture.svg b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/architecture.svg new file mode 100644 index 00000000000..7ec4548171e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/architecture.svg @@ -0,0 +1,4 @@ + + + +
NUCLEO-U545RE-Q
NUCLEO-U545RE-Q
TFT Display ST7789V
TFT Display ST7789V
SPI
SPI
Active Buzzer
Active Buzzer
PWM
PWM
BPM & SpO2 sensor
BPM & SpO2 sensor
I2C
I2C
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/index.md b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/index.md index 76aba9f182c..f1b98f4db8a 100644 --- a/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/index.md @@ -19,13 +19,14 @@ The PulseOx project was born from the need for reliable, accessible monitoring o Here is the schematic of the project: -![Architecture](hardware.svg "PulseOx Architecture") +![Architecture](architecture.svg "PulseOx Architecture") ## Log ### Week 5 Brainstormed the ideas for the project and searched for the required components. + ### Week 6 Discussed the idea of the project with lab assistant and ordered the components & other necessary supplies. @@ -38,13 +39,21 @@ Started working on my project: - set up the display of the information on the display - sped up the process of the update on the screen +### Week 9 + +I focused on stabilizing the raw data feed from the sensor, stripping out the noise that was messing with the readings. Now the stream stays clean and runs indefinitely without crashing. + +### Week 10 + +I performed a complete refactor of the core analysis functions and calibrated the system to align with reference standards. As a result, the approximation error has been reduced, achieving a high level of precision in data interpretation. + ## Hardware The hardware architecture of PulseOx utilizes an STM32U5 microcontroller as its high-performance processing core. Physiological sensing is handled by a MAX30102 high-sensitivity optical sensor, capturing both heart rate (BPM) and blood oxygen saturation (SpO2). The system features a TFT ST7789V display for real-time data visualization, capable of rendering complex signal waveforms alongside numerical measurements. User interaction is enhanced through an active buzzer for synchronized audio feedback and a tactile button interface for seamless measurement control. # Schematics -Place your KiCAD or similar schematics here in SVG format(will be displayed once everything is connected together.) +![Hardware](project_scheme.svg "KiCad Schematics") ## Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/project_scheme.svg b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/project_scheme.svg new file mode 100644 index 00000000000..44ecda56850 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vlada.grushchenko/project_scheme.svg @@ -0,0 +1 @@ +12BZ1BuzzerPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80U1NUCLEO-U545RE-QSCL2SDA3PGND4VLED+9VDD11GND12~{INT}13U2MAX30102SD_MSKSD_MISOSD_MOSISD_CSVCCGNDCSRESETDCSDI<MOSI>SCKLEDSDI<MISO>T_CLKT_CST_DINT_DOT_IRQH3MountingHoleH2MountingHoleH1MountingHoleMechanical \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/both_devices.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/both_devices.webp new file mode 100644 index 00000000000..dde560bd685 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/both_devices.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/box_inside.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/box_inside.webp new file mode 100644 index 00000000000..f174b56e9aa Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/box_inside.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_1.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_1.webp new file mode 100644 index 00000000000..ff3f89dba27 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_1.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_2.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_2.webp new file mode 100644 index 00000000000..8511ac3f6a7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_2.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_3.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_3.webp new file mode 100644 index 00000000000..d0c57fd3f77 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_3.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_4.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_4.webp new file mode 100644 index 00000000000..a89417b54d6 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_4.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_5.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_5.webp new file mode 100644 index 00000000000..9c41cd0fd90 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_5.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_6.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_6.webp new file mode 100644 index 00000000000..6379b203ac4 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_6.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_7.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_7.webp new file mode 100644 index 00000000000..43ce151b714 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_7.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_8.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_8.webp new file mode 100644 index 00000000000..1b8945306d6 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_8.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_9.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_9.webp new file mode 100644 index 00000000000..6703020cfa7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_9.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_device.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_device.svg new file mode 100644 index 00000000000..b23e5270220 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_device.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 1/1Title: File: dashboard_device.kicad_schSheet: /H1R1200kR2200k12J1+3.3VGNDGNDGNDVCC1GND2CS3RES4DC5MOSI6SCK7BL8MISO9T_SCK10T_CS11T_MOSI12T_MISO13T_IRQ14SD_CS15SD_MOSI16SD_MISO17SD_SCK18U22.8in ST7789H4H3H2+3.3VGPIO0_A0_D01GPIO1_A1_D12GPIO2_A2_D23GPIO21_D34GPIO22_D4_SDA5GPIO23_D5_SCL6GPIO16_D6_TX7GPIO17_D7_RX8GPIO19_D8_SCK9GPIO20_D9_MISO10GPIO18_D10_MOSI113V312GND13VBUS14BAT+15BAT-16U1XIAO-ESP32-C6-SMDDISP_DCDISP_BLBAT+BAT_SENSEDISP_CSMOSIDISP_CSMOSIMISODISP_RESTOUCH_CSTOUCH_IRQSCKMOSISCKBAT+SD_CSMISOMISOSCKDISP_DCMOSITOUCH_CSBAT_SENSEDISP_RESSCKSD_CSMISODISP_BLTOUCH_IRQDisplayBatteryMicrocontroller+3.3VU1XIAO-ESP32-C6-SMDGPIO0_A0_D01GPIO1_A1_D12GPIO2_A2_D23GPIO21_D34GPIO22_D4_SDA5GPIO23_D5_SCL6GPIO16_D6_TX7GPIO17_D7_RX8GPIO19_D8_SCK9GPIO20_D9_MISO10GPIO18_D10_MOSI113V312GND13VBUS14BAT+15BAT-16 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_pcb.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_pcb.webp new file mode 100644 index 00000000000..78bd5d7a988 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/dashboard_pcb.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-display.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-display.svg new file mode 100644 index 00000000000..25506f25b5e --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-display.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 5/5Title: File: display.kicad_schSheet: /Display/+3.3VGNDGND1VCC2SCK3MOSI4RES5DC6CS7/BL8U60.96in ST7789ESP1_DISP_BLESP1_DISP_CSESP1_MOSIESP1_SCKESP1_DISP_RESESP1_DISP_DC \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-mcu.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-mcu.svg new file mode 100644 index 00000000000..9cfd4ee6334 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-mcu.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 4/5Title: File: mcu.kicad_schSheet: /MCU/TP1GNDTP7+3.3VESP32-C6-WROOM-1GND13V32EN/CHIP_PU3MTMS/GPIO4/ADC1_CH44MTDI/GPIO5/ADC1_CH55MTCK/GPIO6/ADC1_CH66MTDO/GPIO77GPIO0/ADC1_CH0/XTAL_32K_P8GPIO1/ADC1_CH1/XTAL_32K_N9GPIO810GPIO1011GPIO1112GPIO12/USB_D-13GPIO13/USB_D+14GPIO915GPIO1816GPIO1917GPIO2018GPIO2119GPIO2220GPIO2321GPIO1523U0RXD/GPIO1724U0TXD/GPIO1625GPIO3/ADC1_CH326GPIO2/ADC1_CH227U4ESP32-C6-WROOM-1R1810kTP8TP10TP3SW1SW_PushTP2TP5TP4TP6TP11GNDTP9SW2SW_Push+3.3V+3.3VR1910kGNDESP1_BOOTESP1_BOOTESP1_DISP_DCESP1_DISP_BLESP1_MOSII_SENSEESP1_ENV_SENSEESP1_DISP_RESESP1_DISP_CSESP1_SCKESP1_USB_D+ESP1_USB_D-ESP1_ENProgramming buttonsSW1SW_PushR1910kU4ESP32-C6-WROOM-1GND13V32EN/CHIP_PU3MTMS/GPIO4/ADC1_CH44MTDI/GPIO5/ADC1_CH55MTCK/GPIO6/ADC1_CH66MTDO/GPIO77GPIO0/ADC1_CH0/XTAL_32K_P8GPIO1/ADC1_CH1/XTAL_32K_N9GPIO810GPIO1011GPIO1112GPIO12/USB_D-13GPIO13/USB_D+14GPIO915GPIO1816GPIO1917GPIO2018GPIO2119GPIO2220GPIO2321GPIO1523U0RXD/GPIO1724U0TXD/GPIO1625GPIO3/ADC1_CH326GPIO2/ADC1_CH227+3.3V \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-power.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-power.svg new file mode 100644 index 00000000000..b816e849a88 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-power.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 2/5Title: File: power.kicad_schSheet: /Power/F1FuseHolder+5V_USB1C222uF+5VGND1VO2VI3U1AMS1117-3.3AC/N1AC/L2-Vo3+Vo4PS1IRM-05-5+5VC110uFGND+5V_PSUD11N5819WS+5V_PSUR310k1A 250VGNDGNDA1VBUSA4CC1A5D+A6D-A7SBU1A8CC2B5D+B6D-B7SBU2B8SHIELDS1J2H1MountingHoleUV110D431KH2MountingHoleR25.1kGND+3.3VC322uFH3MountingHole12J1GND+5VR15.1k+5V_USB1123Q1AO3401AGNDAC_LAC_NESP1_USB_D-AC_LAC_NESP1_USB_D+HVUSB 5V disconnect when AC present230VAC-5VDC power supplyLVAC input and protection5V to 3.3V linear regulatorC222uFU1AMS1117-3.3GND1VO2VI3C322uFF1FuseHolderV110D431K1A 250VQ1AO3401A123D11N5819WS+5V_PSUR310k \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-sensors.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-sensors.svg new file mode 100644 index 00000000000..531030850dc --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/energy_monitor_pcb-sensors.svg @@ -0,0 +1 @@ +123456123456ABCDABCDDate: KiCad E.D.A. 10.0.1Rev: Size: A4Id: 3/5Title: File: sensors.kicad_schSheet: /Sensors/C5100nFGNDR17100RR1010kGNDR1310kR1615kV-4V+8U3CMCP6002-xSN+3.3VR810kR475k+3.3V1234T1ZMPT101BR575kR6100RGNDC81nF123RV110kA1K2COM3D2BAT54S+3.3V+3.3V+3.3VC91uFC10100nFRRNSTTNJ3+3.3VC710uFGNDV-4V+8U2CMCP6002-xSNC111nF+5-67U2BMCP6002-xSN1-2+3U2AMCP6002-xSNC4100nFR710k+3.3VA1K2COM3D3BAT54SGNDR1410kR1510kR1233kGNDGNDC61uFR910k+5-67U3BMCP6002-xSNR1110kGNDR0100R1-2+3U3AMCP6002-xSNAC_NI_SENSEAC_LV_SENSEThe burden resistor(100R) is includedin the clamp itself.The output at V_SENSEis a sine wave centeredat 1.65V and swingingbetween ~0.58V and~2.71V at 230V, but theamplitude can belowered with thepotentiometer.The output at I_SENSE isa sine wave centered at1.65V and swingingbetween ~0.28V and~3.02V at 16A.HVLVAC voltage sensorT1ZMPT101B1234R575kR6100R+3.3V+3.3VR710kR1410kR1310kR810kGNDGNDR910kGNDD2BAT54SA1K2COM3+3.3VJ3RRNSTTN \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/index.md b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/index.md index 0e4163b1fb9..cceaf9639a6 100644 --- a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/index.md @@ -72,34 +72,134 @@ Implemented on measurement device: ### Week 9 -Started working on this documentation. +- Started working on this documentation. +- Started working on the PCB designs for both devices. + +### Week 10 + +- Finished the PCB designs and ordered them. +- New display for dashboard arrived. + +Implemented on dashboard: +- touchscreen handling +- basic UI +- basic ESP-NOW communication + +### Week 11 + +Implemented on dashboard: +- SD card reading and writing +- bidirectional ESP-NOW communication +- better UI + +Implemented on measurement device: +- Wi-Fi access point with HTTP server for setting the time and date from a phone +- DNS server for "captive portal" functionality (webpage opens automatically when connecting to the network) + +### Week 12 + +Implemented on dashboard: +- separated old UI into pages (Essentials and Advanced) +- chart page that reads from the SD card and plots data (historical + real-time) +- settings page for choosing what is displayed on the measurement device + +Implemented on measurement device: +- non-volatile storage for keeping kWh value and settings across power loss +- multiple pages for different parameters, similar to power but with different color schemes +- measurement units displayed under value + +### Week 13 + +Implemented on dashboard: +- settings page for setting energy cost +- prediction of future energy and cost +- battery icon and percentage +- finalized UI + +Implemented on measurement device: +- logic for calculating cost based on baseline and billing cycle +- finalized visualizations ## Hardware Both the measurement device and the dashboard are based on the **ESP32-C6** microcontroller. They have built-in **ST7789** displays of different sizes. -The measurement device samples an **SCT-013** non-invasive current clamp a **ZMPT101B** isolated transformer module. +The measurement device samples an **SCT-013** non-invasive current clamp and a **ZMPT101B** isolated transformer (through an amplifier circuit). -The dashboard's interface is controller by a resistive touchscreen processed by an **XPT2046**. For data storage, a standard **SD card** is used. +The dashboard's interface is controlled by a resistive touchscreen processed by an **XPT2046**. For data storage, a standard **SD card** is used. ### Bill of Materials | Device | Usage | Price | |--------|--------|-------| -| [ESP32-C6](https://www.tme.eu/ro/details/esp32c6-wroom-1-n4/module-iot-wifi-bluetooth/espressif/esp32-c6-wroom-1-n4/) | Microcontrollers | 2 * 20 RON | | [SCT-013](https://www.aliexpress.com/item/1005006325551071.html) | Non-invasive current clamp | 25 RON | | [ZMPT101B](https://www.aliexpress.com/item/32810872584.html) | Isolated voltage transformer module | 15 RON | -| [0.96in ST7789](https://www.aliexpress.com/item/1005006258472043.html) | Display on measurement device | 25 RON (2 years ago) | -| [2.8in ST7789+XPT2046](https://www.aliexpress.com/item/1005009761383945.html) | Display on dashboard | 50 RON | +| [0.96in ST7789](https://www.aliexpress.com/item/1005006258472043.html) | Display for measurement device | 25 RON (2 years ago) | +| [2.8in ST7789+XPT2046](https://www.aliexpress.com/item/1005009761383945.html) | Display for dashboard | 50 RON | +| [XIAO ESP32-C6](https://www.aliexpress.com/item/1005007427033011.html) | Microcontroller for dashboard (with built-in battery management) | 55 RON | +| [PCBs](https://jlcpcb.com/) | PCBs for both devices, 5pcs each | 87 RON | +| [Parts](https://www.lcsc.com/) | Components for the PCBs | 182 RON | ### Schematics -TODO +#### Measurement device +![Power](energy_monitor_pcb-power.svg) +![Sensors](energy_monitor_pcb-sensors.svg) +![MCU](energy_monitor_pcb-mcu.svg) +![Display](energy_monitor_pcb-display.svg) + +#### Dashboard +![Dashboard](dashboard_device.svg) + +### PCBs + +#### Measurement device + +![PCB](main_pcb.webp) +![PCB](main_pcb_irl.webp) + +#### Dashboard + +![PCB](dashboard_pcb.webp) ### Photos -TODO +#### Overview + +![Both](both_devices.webp) + +#### Measurement device + +![Meas](main_device.webp) + +Inside the box: +![Box](box_inside.webp) + +Pages: +![Page](main_w.webp) +![Page](main_v.webp) +![Page](main_a.webp) +![Page](main_pf.webp) +![Page](main_kwh.webp) +![Page](main_cost.webp) + +#### Dashboard device + +![Dash](dashboard_1.webp) +![Dash](dashboard_2.webp) +![Dash](dashboard_3.webp) +![Dash](dashboard_4.webp) +![Dash](dashboard_5.webp) +![Dash](dashboard_6.webp) +![Dash](dashboard_7.webp) +![Dash](dashboard_8.webp) +![Dash](dashboard_9.webp) + +### Video + +[Captive portal demonstration](https://youtube.com/shorts/sRZybPLsbRQ) +[Device operation demonstration](https://youtu.be/WZx9LwiNvQI) ## Software @@ -108,22 +208,218 @@ TODO | Crate | Description | Usage | |---------|-------------|-------| | [esp-hal](https://github.com/esp-rs/esp-hal) | `no-std` hardware abstraction layer for ESP32 | Support for the ESP32-C6 | +| [esp-radio](https://github.com/esp-rs/esp-hal/tree/main/esp-radio) | Wi-Fi driver | Support for ESP-NOW and Wi-Fi | +| [esp-rtos](https://github.com/esp-rs/esp-hal/tree/main/esp-rtos) | Real-time operating system | Needed for `esp-radio` | +| [esp-storage](https://github.com/esp-rs/esp-hal/tree/main/esp-storage) | Flash access | Non-volatile storage | +| [sequential-storage](https://github.com/tweedegolf/sequential-storage) | Key-value pair data storage | Non-volatile storage | | [embassy](https://github.com/embassy-rs/embassy) | Async framework | Cooperative multitasking | -| [mipidsi](https://github.com/almindor/mipidsi) | Generic MIPI-DSI driver | Driver for the ST7789 displays | +| [lcd-async](https://github.com/okhsunrog/lcd-async) | Generic MIPI-DSI driver with async support | Driver for the ST7789 displays | | [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D graphics library | Drawing graphics on the displays | | [u8g2-fonts](https://github.com/Finomnis/u8g2-fonts) | U8g2 font system | Better fonts for `embedded-graphics` | | [micromath](https://github.com/tarcieri/micromath) | Math library | Trigonometric functions | | [bytemuck](https://github.com/Lokathor/bytemuck) | Safe byte operations | Serialization and deserialization for ESP-NOW data | +| [heapless](https://github.com/rust-embedded/heapless) | Data structures that don't require dynamic allocation | Strings and vectors | +| [embedded-fatfs](https://github.com/MabezDev/embedded-fatfs) | FAT filesystem | SD card | +| [chrono](https://github.com/chronotope/chrono) | Date and time | Managing timestamps | +| [embassy-net](https://github.com/embassy-rs/embassy/tree/main/embassy-net) | Async network stack | Built-in webpage | +| [edge-dhcp](https://github.com/sysgrok/edge-net/tree/master/edge-dhcp) | DHCP protocol | Built-in webpage | +| [edge-http](https://github.com/sysgrok/edge-net/tree/master/edge-http) | HTTP protocol | Built-in webpage | +| [edge-captive](https://github.com/sysgrok/edge-net/tree/master/edge-captive) | Captive portal DNS server |Built-in webpage | ### Design -TODO +#### Measurement device + +##### Webpage + +Four tasks are used to run the webpage used for setting the time and date via the captive portal over the Wi-Fi access point: +- `net_task`: runs the network stack provided by **embassy_net** +- `run_dhcp`: runs the DHCP server provided by **edge_dhcp** +- `run_captive_portal`: runs the DNS server provided by **edge_captive** for captive portal functionality +- `run_http_server`: runs the HTTP server provided by **edge_http** for serving the actual webpage + +When the user presses the button on the webpage, some Javascript code grabs the client's system time and sends it back the server. +Once the server receives the time, it notifies the application task by sending `SetTime` on the event channel. + +##### ESP-NOW + +For bidirectional communication with the dashboard, ESP-NOW is managed by two tasks: `espnow_listener` and `espnow_broadcaster`. + +After startup, when the two devices don't know each other's MAC address, they must "connect" (although the protocol itself is connectionless, I opted to avoid sending everything as plain broadcasts). + +The dashboard will periodically send a constant message (`b"EnMonSLAVE\0"`) as a broadcast. +When the measurement device receives it, it now knows the dashboard's MAC address and starts sending it measurement data. + +When the dashboard receives measurement data, it now knows the measurement device's MAC address, and now the devices are "connected". + +Once connected, the dashboard switches to periodically sending all current settings which the measurement device needs (current time, selected page, and settings for cost calculation). +Whenever it receives settings from the dashboard, it sends a `NewSettings` event to the application task. + +Another feature of the bidirectional communication is that the current time and date cannot be lost if (at most) one of the devices loses power, +due to the fact both devices keep track of time independently, only syncing when necessary. +If the measurement device suffers power loss and restarts, but the dashboard still has the time, the time is inherently included in the ESP-NOW message. +In this case, the time is synced from the message, and a `SetTime` event is sent to the application task. + +##### Measurements + +The `measurement_task` continuously polls the voltage and current sensors (ADC) and performs calculations to determine the RMS voltage, RMS current, power factor and real power. +As configured currently, it produces a measurement every ~1 second, which it then sends to the application task as `NewMeasurement` on the event channel. + +##### App + +The `app_task` processes measurement data, draws to the screen and manages the page system. +Its loop waits until it receives something on the event channel. +It responds to the following events: +- `SetTime`: time and date were received (via HTTP server or from the dashboard via ESP-NOW) +- `NewMeasurement`: the measurement task produced data +- `NewSettings`: the dashboard changed the page or the settings for cost calculation + +When it receives measurement data, it firstly converts the instantaneous power into energy, by using the time difference since the last update. +The resulting energy is added to an accumulator, which is a strictly increasing counter, like any other energy meter. + +Whenever new settings are detected from the dashboard, they are written to non-volatile storage (flash). +This also happens if the accumulated energy increases by at least 0.5 kWh. +At startup, all values are read from this storage, to restore the state from the previous run. + +Depending on the page selected via the dashboard, `update_gauge()` calls the corresponding function (real power / energy / cost / voltage / current / power factor). +This draws a circular gauge, that fills up from left to right depending on the value of the parameter. +All pages use the same style of gauge, but different color gradients depending on the parameter. + +Cost calculation works by storing the kWh value at which the billing cycle begins (baseline). +This is done by the dashboard, which reads back what it wrote on its SD card, to find the kWh value on the selected starting day. +The energy consumption is simply the difference between the current total energy and the baseline. +Then, every month, on the configured day, this baseline is reset. +For example, if the starting day is configured as 20, then the cost and energy are reset on the 20th of every month. + +The measurement device also stores the starting day, so that it can continue this resetting process without the dashboard needing to be connected. +When it detects a new day, and it's equal to the billing cycle's starting day, it resets the baseline to the current total energy, all by itself. + +#### Dashboard device + +##### Touchscreen + +The touchscreen controller has a dedicated `IRQ` pin that is normally high, but goes low when you start pressing on the screen. +To use it, an interrupt is set up, waiting for a falling edge on that pin. +In the ISR, a signal is given, waking up the touchscreen task. + +The `touchscreen_task` waits until it receives a signal from the ISR, meaning that a press started. +Then, it requests the pressed position from the controller every 10 ms, via SPI transactions according to the datasheet. +It does a bit of averaging to remove glitches, and then converts the readings into screen coordinates using some pre-calculated calibration constants. + +When the press starts, it sends a `TouchPressed` event to the application task via the event channel, containing the coordinates. +Then, when the press ends (detected by the `IRQ` pin going back high), it similarly sends `TouchReleased`. + +##### ESP-NOW + +The architecture is similar to what was described above for the measurement device, but "mirrored". +- When not "connected", it periodically broadcasts the message `b"EnMonSLAVE\0"`. +- When it receives measurement data, it becomes connected. +- When connected, it periodically sends current time and settings to the measurement device. + +If the time isn't known yet, and a message from the measurement device contains it, it syncs with that received time and sends a `SetTime` event to the app task. +When the time is known, it is automatically included in every message sent to the measurement device. + +Upon receiving measurement data, it sends a `EspNowData` event to the app task. + +If, while connected, the periodic settings message fails to send (doesn't receive an acknowledgement, internal to ESP-NOW), it means the measurement device lost power or is out of range. +In this case an `EspNowDisconnected` event is sent to the app task, mainly to update a visual indicator. + +##### Clock tick and battery + +The `clock_and_battery_update_task`, originally used for updating the displayed time every 500 ms, also measures the battery voltage. + +It implements a low-pass (exponential moving average) filter, to avoid sudden fluctuations in voltage. + +Every 500 ms, it performs the voltage measurement, updates the filter, and sends an `UpdateClockAndBattery` event to the app task. + +##### App + +The `app_task` draws to the screen, manages the buttons, page system and writing/reading to/from the SD card. + +Apart from storing a few settings, the SD card is mainly used for logging energy data into CSV files. +The filesystem used is FAT32, as it is very common and easy to work with. +For logging, it creates a `LOGS` folder in the root, and then a folder for the current year and month, named like `YYYY-MM`. +Inside it, it creates a file for the current day, named like `DD.CSV`. +Whenever a new day begins, a new file is created, corresponding to that day. + +A problem obviously arises when the dashboard doesn't know the time and date, because the user hasn't set it on the measurement device yet. +In this case, it logs to a special `TEMP.CSV` file in the root folder. +- The first value in the CSV format is normally the timestamp, expressed as milliseconds relative to epoch (January 1st, 1970 at 00:00 UTC). +- Since it doesn't know the time, it will instead write that value as milliseconds since device boot. +- When the time is finally set, it must move whatever it has written in the temporary file to the file corresponding to the current day. +- When doing so, it also converts the milliseconds since startup into milliseconds since epoch, by doing a few subtractions. +- In this way, the logs always contain the correct timestamp. + +While managing the SD card, the task also waits for something on the event channel. +It responds to the following events: +- `TouchPressed`: the touchscreen was pressed +- `TouchReleased`: the touchscreen was released +- `EspNowData`: the measurement device provided new data +- `EspNowDisconnected`: the measurement device cannot be reached +- `SetTime`: time and date were synced from the measurement device +- `UpdateClockAndBattery`: the `clock_and_battery_update_task` sent the current battery voltage, also acting as a tick to update the clock if that page is open + +The main part of the menu system is designed as a circular rotation between a few pages: **Essentials**, **Advanced**, **Chart**, **Prediction**, **Clock**. +Each of them has the same left and right arrow buttons at the bottom, to switch the page between these. + +Every page in the menu system has a constant list of buttons, each with its own style and assigned action. +Button actions include going to another page, going to the previous page, changing a specific setting, etc.. +When entering a new page, its initial contents are drawn, and then the buttons are rendered on top of it. + +When the touchscreen is pressed, if that press lands inside a button, the button's ID is stored. +Then, when the touchscreen is released, if the release position was also inside the same button (if the stored ID is the same), that button's action is executed. +If it's released outside the button, the press is cancelled and no action is executed. + +Whenever settings are changed, they are immediately written to the SD card (if it's inserted and available). + +When entering the **Chart** page, it must additionally load historical data from the SD card. +If the SD card is not mounted for any reason, or the time and date aren't available, a warning is shown instead. +If everything is OK, reading from the SD card starts, and it displays progress bars to tell you how much processing is left. +Since the process is long, due to the amount of data in each file, touchscreen events still get processed, so you can press a button to go to another page, thus cancelling the operation. +You can also choose which parameter is being plotted, along with the period of historical data. +Changing the parameter will not interrupt the loading process, but changing the period will, since it needs to load a different set of data. + +When new measurement data is received, it must be displayed and logged. +If the SD card is mounted and error-free, a CSV line is appended to the currently open file (either the temporary file or the day's file, as described above). +If the **Chart** page is currently open, and data has already been loaded from the SD card, then the new measurement is simply added to the plot, to keep updating it in real-time. + +The **Essentials** and **Advanced** pages are similar, only differing in layout and amount of parameters displayed. +The **Clock** page is a simple time and date display. + +The **Prediction** page is a bit more interesting, since it (linearly) extrapolates from the data recorded in the current billing cycle, to predict how much energy +will have been consumed by the end of the cycle, along with its cost. +There must be at least one full day of data available, otherwise it displays a warning. + +The **Settings** menu is accessible from any page in the main rotation. +Here, you can mount/unmount the SD card, change which page is displayed on the measurement device, and set parameters for cost calculation. + +In the **Cost** settings menu, you can choose the price per kWh and the associated currency. +Here, you also set the starting day, meaning the day of the month on which the billing cycle resets. + +There are four icons in the top-right corner that indicate the status across all pages: +- **battery**: percentage is shown inside it when it drops below 100%; the color of the icon is a gradient between green and red, depending on the percentage +- **clock**: red if the time and date aren't known, green otherwise +- **file**: red if the SD card is not mounted (not inserted, or has error, or was manually unmounted), green otherwise +- **antenna**: red if the measurement device isn't "connected" over ESP-NOW, green otherwise + +If at any point there is an error writing to the SD card, a warning is displayed. +A different warning is displayed if the device was powered off without unmounting the SD card first, +and also when the measurement device connects and it doesn't have its time set. + +### Diagram + +
+![Diagram](software_diagram.svg) +
## Links -1. [LCD tutorial](https://esp32.implrust.com/tft-display/index.html) -2. [SD card tutorial](https://esp32.implrust.com/sdcard/index.html) -3. [ESP-NOW example](https://github.com/esp-rs/esp-hal/tree/main/examples/esp-now/embassy_esp_now_duplex) -4. [Old Arduino library for energy monitoring](https://github.com/openenergymonitor/EmonLib) +1. [Old Arduino library for energy monitoring](https://github.com/openenergymonitor/EmonLib) +2. [LCD tutorial](https://esp32.implrust.com/tft-display/index.html) +3. [SD card tutorial](https://esp32.implrust.com/sdcard/index.html) +4. [Webserver tutorial](https://esp32.implrust.com/wifi/web-server/index.html) +5. [ESP-NOW example](https://github.com/esp-rs/esp-hal/tree/main/examples/esp-now/embassy_esp_now_duplex) +6. [HTTP server with captive portal](https://github.com/esp-rs/no_std-training/tree/feat/overhaul/project/part5/src) (needs some changes to work) + diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_a.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_a.webp new file mode 100644 index 00000000000..fa29053f38b Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_a.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_cost.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_cost.webp new file mode 100644 index 00000000000..ef48e6f515d Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_cost.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_device.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_device.webp new file mode 100644 index 00000000000..5300f4ae5ea Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_device.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_kwh.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_kwh.webp new file mode 100644 index 00000000000..533ba20c3c7 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_kwh.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb.webp new file mode 100644 index 00000000000..5b15a526fe0 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb_irl.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb_irl.webp new file mode 100644 index 00000000000..5ab3b4509bb Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pcb_irl.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pf.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pf.webp new file mode 100644 index 00000000000..65b1ceb51da Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_pf.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_v.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_v.webp new file mode 100644 index 00000000000..a3022b89714 Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_v.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_w.webp b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_w.webp new file mode 100644 index 00000000000..ac5e3d34b8e Binary files /dev/null and b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/main_w.webp differ diff --git a/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/software_diagram.svg b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/software_diagram.svg new file mode 100644 index 00000000000..7cd465a7a93 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/vladimir.taranu/software_diagram.svg @@ -0,0 +1,3 @@ + + +
Dashboard device
Dashboard device
ESP-NOW
ESP-NOW
Event
channel
Event...
clock_and_battery_task
clock_and_battery_task
espnow_listener
espnow_listener
app_task
app_task
espnow_broadcaster
espnow_broadcaster
ESP-NOW
controller
ESP-NOW...
ADC
ADC
Display
Display
SD
SD
Measurement device
Measurement device
Event
channel
Event...
measurement_task
measurement_task
app_task
app_task
Display
Display
NVS
NVS
net_task
net_task
run_dhcp
run_dhcp
run_captive_portal
run_captive_portal
run_http_server
run_http_server
Wi-Fi AP
controller
Wi-Fi AP...
ADC
ADC
ESP-NOW
controller
ESP-NOW...
espnow_broadcaster
espnow_broadcaster
espnow_listener
espnow_listener
touchscreen_task
touchscreen_task
Touchscreen
Touchscreen
\ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/index.md b/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/index.md index 88c5899e643..2caad012aef 100644 --- a/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/index.md @@ -3,7 +3,10 @@ An intelligent greenhouse automation system that monitors and controls the growi :::info -**Author:** Yehor Zaplishnyi \ + + +**Author:** Yehor Zaplishnyi \ + **GitHub Project:** [rust-grow](https://github.com/UPB-PMRust-Students/fils-project-2026-yehorzaplishnyi) ::: @@ -46,6 +49,14 @@ Ordered all hardware components. Currently waiting for delivery. The system is built around the STM32 Nucleo-64 board powered by a 5V supply. Sensors cover air quality, soil conditions, water level, and time scheduling. A fan and heater element are controlled together as a heating unit via a relay module. +### Diagram + +![Rust-Grow Block Diagram](rust_grow_schema.svg) + +### Schematics + +![Rust-Grow KiCad](ma.svg) + ### Schematics ![Rust-Grow Block Diagram](rust_grow_schema.svg) diff --git a/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/ma.svg b/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/ma.svg new file mode 100644 index 00000000000..856b1df42ea --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/yehor.zaplishnyi/ma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/index.md b/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/index.md index aa29920a055..434e25fb73b 100644 --- a/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/index.md +++ b/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/index.md @@ -38,11 +38,11 @@ graph TD ## Log -### Week 5 – 11 May +### Week 5 – 7 Brainstormed project ideas and defined the concept of an RFID-based school access system. Researched required components and planned the overall architecture. -### Week 12 – 18 May +### Week 7 – 8 Discussed the project with the lab assistant. Selected key components (RFID reader, servo motor, OLED display) and set up the development environment. @@ -68,7 +68,7 @@ Started implementation: ### Schematics -Not available right now. +![Schematic](./schematic.svg) ### Bill of Materials diff --git a/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/schematic.svg b/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/schematic.svg new file mode 100644 index 00000000000..4aee9ee3487 --- /dev/null +++ b/website/versioned_docs/version-fils_en/project/2026/yelyzaveta.lysenko/schematic.svg @@ -0,0 +1 @@ +Image generated by Eeschema-SVG123456123456ABCDABCDDate:KiCad E.D.A. 10.0.1Rev:Size: A4Id: 1/1Title:File: SchoolGate.kicad_schSheet: /LED1LED2GND1VCC2SCL3SDA4OLED Display 0.96R112345678MFRC522R4R3R2LED4R6LED3KY-029 LED ModuleR5GND+5VPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80STM32 Nucleo-U545RE123Active Buzzer 5VPWM1+2-3Servo Motor SG90+IRQMISO+3V3GNDRSTMOSISDASCKGNDKY-029 LED ModuleSTM32 Nucleo-U545REPC101PC112PC123PD24VDD5E5V6~{BOOT0}7GND8IOREF12STLINK_TMS/PA1313~{RESET}14STLINK_TCK/PA1415+3V316PA1517+5V18GND19GND20PB721GND22PC1323VIN24PC1425PC1527PA028PH029PA130PH131PA432VBAT33PB034PC235PC136PC337PC038PC939PC840PB841PC642PB943PC544AVDD45U5V46GND47PA549PA1250PA651PA1152PA753PB1254PB655PC757GND58PA959PB260PA861PB162PB1063PB1564PB465PB1466PB567PB1368STLINK_SWO/PB369AGND70PA1071PC472STLINK_UART_TX/PA273STLINK_UART_RX/PA375GND77GND78GND79GND80Active Buzzer 5V123 \ No newline at end of file diff --git a/website/versioned_docs/version-fils_en/welcome/images/alexandru_ungureanu.jpg b/website/versioned_docs/version-fils_en/welcome/images/alexandru_ungureanu.jpg deleted file mode 100644 index 9138463ba43..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/alexandru_ungureanu.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/andrei_batasev.jpg b/website/versioned_docs/version-fils_en/welcome/images/andrei_batasev.jpg deleted file mode 100644 index a5a89fbe437..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/andrei_batasev.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/gabriel_pavaloiu.jpg b/website/versioned_docs/version-fils_en/welcome/images/gabriel_pavaloiu.jpg deleted file mode 100644 index de474d1a936..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/gabriel_pavaloiu.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/ioana_culic.jpg b/website/versioned_docs/version-fils_en/welcome/images/ioana_culic.jpg deleted file mode 100644 index 57e5ebf659d..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/ioana_culic.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/irina_bradu.jpg b/website/versioned_docs/version-fils_en/welcome/images/irina_bradu.jpg new file mode 100644 index 00000000000..6f33a29a5b2 Binary files /dev/null and b/website/versioned_docs/version-fils_en/welcome/images/irina_bradu.jpg differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/layla_elghoul.jpg b/website/versioned_docs/version-fils_en/welcome/images/layla_elghoul.jpg deleted file mode 100644 index ccc96ab8cad..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/layla_elghoul.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/roy_bachynskyi.jpg b/website/versioned_docs/version-fils_en/welcome/images/roy_bachynskyi.jpg new file mode 100644 index 00000000000..33b1c1754c5 Binary files /dev/null and b/website/versioned_docs/version-fils_en/welcome/images/roy_bachynskyi.jpg differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/teodor_dicu.jpg b/website/versioned_docs/version-fils_en/welcome/images/teodor_dicu.jpg deleted file mode 100644 index 5e6006f5ceb..00000000000 Binary files a/website/versioned_docs/version-fils_en/welcome/images/teodor_dicu.jpg and /dev/null differ diff --git a/website/versioned_docs/version-fils_en/welcome/images/victor_lisman.jpeg b/website/versioned_docs/version-fils_en/welcome/images/victor_lisman.jpeg new file mode 100644 index 00000000000..6389e88e35d Binary files /dev/null and b/website/versioned_docs/version-fils_en/welcome/images/victor_lisman.jpeg differ diff --git a/website/versioned_docs/version-fils_en/welcome/index.md b/website/versioned_docs/version-fils_en/welcome/index.md index 2a2e3e2d538..dc0a89d5ebf 100644 --- a/website/versioned_docs/version-fils_en/welcome/index.md +++ b/website/versioned_docs/version-fils_en/welcome/index.md @@ -31,22 +31,21 @@ alexandru.radovici@upb.ro -**Gabriel Păvăloiu** -![Gabriel Păvăloiu](images/gabriel_pavaloiu.jpg) - -Lab Professor \ -GitHub: [GabrielPavaloiu](https://github.com/GabrielPavaloiu) \ -gabriel.pavaloiu@upb.ro +**Genan Omer** +![Genan Omer](images/genan_omer.jpeg) + +Responsible for Lab Materials \ +GitHub: [genan2003](https://github.com/genan2003) \ +genan.omer@stud.fils.upb.ro -**Teodor Dicu** -![Teodor Dicu](images/teodor_dicu.jpg) - -Lab Professor\ -Responsible for hardware\ -GitHub: [DTeodor-Alexaandru](https://github.com/DTeodor-Alexaandru) \ -teodor.dicu@wyliodrin.com +**Irina Bradu** +![Irina Bradu](images/irina_bradu.jpg) + +Lab Professor \ +GitHub: [Irina Bradu](https://github.com/irina-b-dev) \ +irina.bradu@upb.ro @@ -72,33 +71,16 @@ andrei.zamfir@wyliodrin.com -**Ioana Culic** -![Ioana Culic](images/ioana_culic.jpg) - +**Roy Bachynskyi** +![Roy Bachynskyi](images/roy_bachynskyi.jpg) + Lab Professor \ -GitHub: [ioanaculic](https://github.com/ioanaculic) \ -ioana_maria.culic@upb.ro +GitHub: [Roy Bachynskyi](https://github.com/frihetselsker) \ +roi.bachynskyi@stud.fils.upb.ro - -**Alexandru Ungureanu** -![Alexandru Ungureanu](images/alexandru_ungureanu.jpg) - -Lab Professor \ -GitHub: [AlexU01](https://github.com/AlexU01) \ -alexagungureanu@gmail.com - - - -**Layla El-Ghoul** -![Layla El-Ghoul](images/layla_elghoul.jpg) - -Lab Professor \ -GitHub: [ScarletWtc](https://github.com/ScarletWtc) \ -layla.el@stud.fils.upb.ro - **Cristiana Precup** @@ -108,27 +90,6 @@ Lab Professor \ GitHub: [cristianaprecup](https://github.com/cristianaprecup) \ cristiana.precup@wyliodrin.com - - - - -**Andrei Batasev** -![Andrei Batasev](images/andrei_batasev.jpg) - -Lab Professor \ -GitHub: [Pfat8equalsD](https://github.com/Pfat8equalsD) \ -andrei.batasev@stud.acs.upb.ro - - - -**Genan Omer** -![Genan Omer](images/genan_omer.jpeg) - -Responsible for Lab Materials \ -GitHub: [genan2003](https://github.com/genan2003) \ -genan.omer@stud.fils.upb.ro - - **Eva Cosma** ![Eva Cosma](images/eva_cosma.jpg) @@ -138,6 +99,15 @@ GitHub: [Eva Cosma](https://github.com/eva-cosma) \ eva.cosma@wyliodrin.com + +**Victor Lișman** +![Victor Lisman](images/victor_lisman.jpeg) + +Lab Professor \ +GitHub: [victorlisman](https://github.com/victorlisman) \ +victor.lisman@oxidos.io + + @@ -145,32 +115,29 @@ eva.cosma@wyliodrin.com | Activity | Group | Day | Hour | Room | Professor | |----------|-------|-----|------|-------|----------| -| Lecture | *all students* | Tuesday | 10 - 12 | EC002 | Alexandru Radovici | -| Lab | 1241EC | Friday (weeks 2-8) | 10 - 12 | EG 306 | Alexandru Radovici | - - +| Lab | 1221EAa - first half | Thursday | 12 - 14 | ED 217 | Roy Bachynskyi | +| Lab | 1221EAb - second half | Thursday | 10 - 12 | ED 218 | Irina Bradu | +| Lab | 1221EBa - first half | Thursday | 16 - 18 | ED 218 | Cristiana Precup | +| Lab | 1221EBb - second half | Thursday | 10 - 12 | ED 218 | Victor Lișman | +| Lab | 1221EC | Thursday | 8 - 10 | ED 218 | Andrei Zamfir | +| Lab | 1221EDa - first half | Thursday | 14 - 16 | ED 217 | Eva Cosma | +| Lab | 1221EDb - second half | Thursday | 8 - 10 | ED 217 | Dănuț Aldea | +| Lab | 1221EEA | Thursday | 14 - 16 | ED 218 | Irina Bradu | +| Lab | 1222EBB | Thursday | 12 - 14 | ED 218 | Omer Genan | ## Grading | Part | Description | Points | |--------|-------------|--------| -| [Lecture](./category/lecture) tests | You will have a test at every class with subjects from the previous class. | 1p | -| [Final Lecture](./category/lecture) test | You will have a test at one of the lectures in January. | 4p | -| [Lab](./category/lab) | Your work at every lab will be graded. | 1p | +| [Lecture](./category/lecture) tests | You will have a test at every class with subjects from the previous class. | 0.2p | +| [Final Lecture](./category/lecture) test | You will have a test during one of the lectures in May. | 1.8p | +| [Lab](./category/lab) | Your **presence** at every lab will be graded. | 1p | +| [Lab](./category/lab) Test | A final test at the lab - will scale your lab grade | 1p | | [Project](./project) | You will have to design and implement a hardware device. Grading will be done for the documentation, hardware design and software development. | 3p | -| Final Test | You will have to take an exam during the last lecture. | 2p | +| Final Test | You will have to take an exam during the exams session. | 4p | | **Total** | *You will need at least 4.5 points to pass the subject.* | **11p** | + ## Rules 1. You can be absent without motivation at a maximum of 2 labs.