Skip to main content
Version: ACS CC

Description

The goal of the project is to showcase the knowledge gained throughout the semester by creating functional hardware that runs software written in Rust.

Deliverables

The deliverables will be stored in two places:

  • the source code will be stored on Github
  • the project documentation will be stored on Gitlab, by creating a fork of the course's website

The documentation repository should contain:

  • the full documentation of the project, in the index.md file
    • a description of the functionality
    • the motivation for choosing the project
    • the architecture
      • a description of all components and how they interconnect
      • a diagram drawn in diagrams.net or similar
    • a weekly log of the project status
    • hardware design
      • a description of the hardware used
      • a schematic drawn in KiCad EDA or similar
      • photos of the device
    • software design
      • detailed design
      • functional diagram
    • bill of materials (hardware and software)
  • the photos and other files required by the index.md file
warning

You need to work in a fork of this website's Gitlab repository and not in a blank one, in order to create a merge request, as described below.

The source code repository should contain:

  • a brief documentation - the repository's README.md file
    • short description of the functionality
    • requirements (hardware and software)
    • brief hardware and software design, including diagrams
  • software source code

The repositories will be checked by the lab assistant at during lab reserved for the project. Uploading code on the last day of the software milestone is not allowed. The assistant will check that students have submitted regular commits to the repository.

Students will have to build and showcase the hardware with the running software at PM Fair. On the presentation day, students will upload the source code to the hardware and the demo will be done live in front of the committee.

Website build pre-requisites

Windows support

If you are using Windows, you will either need to install WSL2, for which you will find a detailed tutorial here, or use a VM with Ubuntu, Debian or another Linux based OS.

You will need to install npm and node and the simples way to do that can be found on Node.js Official Website.

WSL2

If you are using WSL2, you should follow the instructions for installing on Linux.

How to create a page for your project?

note

This section is a work in progress.

Hardware Rules

  1. Each student will receive an STM32 Nucleo-U545RE-Q development board. You are encouraged to use this board as the core of your project.
  2. Projects have to use a microcontroller (MCU) that is capable of running Rust code. While the STM32U5 is the primary platform, you may use other MCUs if your project specifically requires it. Examples of supported MCUs/boards are:
  1. The hardware part may be designed either using a breadboard and jumper wires, a prototype board (solder breadboard) or a PCB. If you want to use prototyping boards, ask the lab coordinator for help with soldering during lab hours.

Software Rules

It has to run software written in Rust. Students can use:

Project Rules

  1. Copying schematics or source code from the Internet is not allowed. Any attempt to copy the project will be accompanied by the corresponding repercussions.
  2. The project is individual, any attempt at collaborative work will be sanctioned, students can also carry out projects that interact, but the work must be separate.
  3. Any problem or blockage you have will be discussed with the lab assistant during project work hours.
  4. Students are strongly encouraged to ask the lab assistant questions about the project.
  5. The presentation of all the milestones is mandatory.
  6. The project topic must be established in week 4 and approved by the lab coordinator by week 6. After week 6, the topic cannot be changed.
  7. The laboratory supervisor may modify the topic or propose another topic if it is not complex enough for this project.
  8. We encourage you not to use prebuilt kits, you may get less points for the hardware part.

Requirements

  1. Complexity: The project must reflect at least 40 hours of work and contain elements learned during the year.
  2. Documentation: Complete documentation of the implementation for both hardware and software.
  3. Functionality: The hardware device has to be fully functional.

Example Projects

Examples of projects from past years

  1. Projects from 2024
  2. https://ocw.cs.pub.ro/courses/pm/prj2022
  3. https://ocw.cs.pub.ro/courses/pm/prj2023

Outstanding Projects

  1. POV - DAVIC picTronics
  2. Ryobo - Computer Vision & Object Following
  3. Plug & Play ChatGPT
  4. VENDING MACHINE

Project Milestones

Note: Slight adjustments are possible during the semester.

  • Week 1 & 2: Introduction to the Rust language.
  • Week 3: Intro to Rust & embedded tooling; debugging and running programs on the STM32U5 (Nucleo-U545RE-Q) board.
  • Week 4 – 8: Embedded programming fundamentals.
  • Week 5 – 6: Project brainstorming and discussion (Lab & Lecture).
  • Week 7: Project Theme Milestone (Theme approval).
  • Week 9: Documentation Milestone.
  • Week 10 / 11: Lab Exam
  • Week 11: Hardware Milestone.
  • Week 13: Software Milestone.
  • Week 14: PM Fair (Final presentation and live demo).

Grading

PartDeadlinePoints
Documentation MilestoneWeek 90.4p
Hardware MilestoneWeek 110.8p
Software MilestoneWeek 130.8p
PM FairWeek 141p
Total3p

F.A.Q

Q: Can I use another programming language, not Rust?
A: No, the main focus of the project is to learn to work with microcontrollers using Rust.

Q: Can I use a different framework than embassy-rs?
A: Yes, we suggest taking a look at RTIC or Tock.

Q: What if the PCB arrives after the hardware milestone?
A: You will only present the diagram for the hardware part and if there is a prototype using breadboard, but at the end of the project you must necessarily have the PCB printed and functional.

Footnotes

  1. Some function of this board, like WiFi, might not be supported in Rust.

  2. ESP32 provides its own Rust SDK described in the The Rust on ESP Book.