Skip to content
Snippets Groups Projects
Commit a81f4e65 authored by Andrei-Paul ZAMFIR's avatar Andrei-Paul ZAMFIR Committed by Alexandru RADOVICI
Browse files

[Issue #16] Add project description and rules

parent d736624b
No related branches found
No related tags found
No related merge requests found
...@@ -4,35 +4,89 @@ sidebar_position: 1 ...@@ -4,35 +4,89 @@ sidebar_position: 1
# Description # Description
The purpose of the project is to build a hardware device that runs software written in Rust. 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 ## Deliverables
All the deliverables will be published in a GitHub repository that each student will be assigned to. The deliverables will be stored in two places:
- the *source code* will be stored on [Github](https://github.com/UPB-PMRust-Students)
The repository contains: - the project documentation will be stored on [Gitlab](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro), by creating a fork of the course's website
- documentation - the reposiotry's `README.md` file
- short description of functionality The **documentation repository** should contain:
- requirements (hardware and software) - the full documentation of the project, in the `index.md` file
- hardware design - use [KiCad EDA](https://www.kicad.org/) or a similar tool for the schematics - 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](https://app.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](https://www.kicad.org/) or similar
- photos of the device
- software design - software design
- detail design - detailed design
- functional diagram - 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 - software source code
Students will have to build and showcase the hardware with the running software at PM Fair. 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.
## How to create a page for your project?
1. Please login with your UPB login to [Gitlab](https://gitlab.cs.pub.ro)
2. You will have to add an SSH Key to your Gitlab account. This will allow you to push code without entering you username and password every time. For this, run the following command in the Windows/Linux/macOS's console: `ssh-keygen -t rsa -b 2048`. Press press ENTER until you exit the respective command prompts.
- If your command prompt `Overwrite (y/n)?` press `n` and run the above command again, changing the destination of the key.
- If the key was generated successfully, you will have the keys generated in the location indicated by the command `Enter file in which to save the key (C:\Users\"NAME"/.ssh/id_rsa):`
- Read the content of the file `id_rsa.pub` or the name you gave to the file and transfer it to Github.
- Login to [Gitlab](https://gitlab.cs.pub.ro/) and go to: [SSH Keys](https://gitlab.cs.pub.ro/-/user_settings/ssh_keys).
- Click on *Add new key* and insert into the *Key* textbox your key from `id_rsa.pub`.
- Be very careful about the expiration date of the ssh key, change the expiration date otherwise it is set to 30 days.
3. [Download Git](https://git-scm.com) from the official website and access it in the command line using `git -v` to check if it was installed correctly. You might have to use *Git Bash*.
4. Navigate to the [website's Gitlab repository](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro) and create a public fork by clicking on the button in the top right corner.
5. Clone the newly created repository by running `git clone git@gitlab.cs.pub.ro:<gitlab_username>/pmrust.pages.upb.ro.git`, where `<gitlab_username>` is replaced by your gitlab username.
6. Now you have your own clone. You need to create a new branch. For this, follow the steps:
- Run the command: `git fetch` followed by the `git pull` command
- The branches have the following naming convention: `project/your_curs.upb.ro_username`. Example: `project/andrei_paul.zamfir`
- To create a new branch:
- `git checkout -b <branch_name>`
- `git push --set-upstream origin project/your_curs.upb.ro_username`
7. To start creating your page for the project, go to `website/versioned_docs/version-acs_cc/project/2025` and create a new directory with your curs.upb.ro username. Example: `andrei_paul.zamfir`.
8. In that directory you must create a file named `index.md` which will be your project page. You can take a look at the [Markdown](https://www.markdownguide.org/cheat-sheet/) syntax. You can look at [last year's projects and template](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro/-/tree/main/website/versioned_docs/version-fils_en/project/2024)
9. After finishing the project, make a _merge request_ to the [upstream repository](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro)
## Hardware Rules ## Hardware Rules
1. Projects have to use a microcontroller (MCU) that is capable of running Rust code. Examples of MCUs are *nRF52*, *RP2040*, *ESP32* (RISC-V version). 1. Projects have to use a microcontroller (MCU) that is capable of running Rust code. Examples of MCUs are *nRF52*, *RP2040*, *ESP32* (RISC-V version).
2. Usage of a development board is encouraged, but not required, a custom PCB can be built. Example of development boards are: 2. Usage of a development board is encouraged, but not required, a custom PCB can be built. Example of development boards are:
- [Raspberry Pi Pico](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) (RP2040) or [Raspberry Pi Pico W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) for WiFi - [Raspberry Pi Pico 2](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) (RP2350) or [Raspberry Pi Pico 2W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) for WiFi (The version of Pico is not important, but we encourage the use of version 2.)
- [Adafruit Trinkey QT2040](https://www.adafruit.com/product/5056) (RP2040) - [Adafruit Trinkey QT2040](https://www.adafruit.com/product/5056) (RP2040)
- [Arduino Nano RP2040 Connect](https://store.arduino.cc/products/arduino-nano-rp2040-connect) (RP2040) - ⚠️ [^arduino_nano_rp2040_connect] - [Arduino Nano RP2040 Connect](https://store.arduino.cc/products/arduino-nano-rp2040-connect) (RP2040) - ⚠️ [^arduino_nano_rp2040_connect]
- [micro:bit v2](https://microbit.org/) (nRF52833) - [micro:bit v2](https://microbit.org/) (nRF52833)
- [nRF52 DK](https://www.nordicsemi.com/Products/Development-hardware/nrf52-dk) (nRF52810) - [nRF52 DK](https://www.nordicsemi.com/Products/Development-hardware/nrf52-dk) (nRF52810)
- [STM32 NUCLEO-F401RE](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-F401RE?qs=sGAEpiMZZMuqBwn8WqcFUv%2FX0DKhApUpi46qP7WpjrffIid8Wo1rTg%3D%3D) - [STM32 NUCLEO-F401RE](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-F401RE?qs=sGAEpiMZZMuqBwn8WqcFUv%2FX0DKhApUpi46qP7WpjrffIid8Wo1rTg%3D%3D)
- [ESP32-C3-DevKit-RUST-1](https://www.espressif.com/en/dev-board/esp32-c3-devkit-rust-1-en) (ESP32-C3) - ⚠️ [^esp32_riscv] - [ESP32-C3-DevKit-RUST-1](https://www.espressif.com/en/dev-board/esp32-c3-devkit-rust-1-en) (ESP32-C3) - ⚠️ [^esp32_riscv]
3. The hardware part may be designed either using a breadboard and jumper wires, a prototype board (solder breadboard) or a PCB. 3. 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 ## Software Rules
It has to run software written in Rust. Students can use: It has to run software written in Rust. Students can use:
...@@ -45,19 +99,24 @@ It has to run software written in Rust. Students can use: ...@@ -45,19 +99,24 @@ It has to run software written in Rust. Students can use:
## Project Rules ## Project Rules
1. Copying schematics or source code from the Internet is not allowed. 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. Each project is considered individual work, students can ask the lab assistant (lab) about implementation details during the development period. 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. Students are strongly encouraged to ask the lab assistant questions about the project. 3. Any problem or blockage you have will be discussed with the lab assistant during project work hours.
4. The presentation of all the milestones is mandatory. 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 ## Requirements
1. *Complexity:* use knowledge of at least 3 labs, **excluding** [00 - Rust](https://embedded-rust-101.wyliodrin.com/docs/lab/00), [01 - Hardware Introduction](https://embedded-rust-101.wyliodrin.com/docs/lab/01) and [02 - Setting up the Raspberry Pi Pico + GPIO](https://embedded-rust-101.wyliodrin.com/docs/lab/02) 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. 2. *Documentation:* Complete documentation of the implementation for both hardware and software.
3. *Functionality:* the hardware device has to be fully functional. 3. *Functionality:* The hardware device has to be fully functional.
## Example Projects ## Example Projects
### Examples of projects from past years ### Examples of projects from past years
1. [Projects from 2024](/docs/fils_en/category/projects-2024)
1. https://ocw.cs.pub.ro/courses/pm/prj2022 1. https://ocw.cs.pub.ro/courses/pm/prj2022
2. https://ocw.cs.pub.ro/courses/pm/prj2023 2. https://ocw.cs.pub.ro/courses/pm/prj2023
...@@ -71,11 +130,11 @@ It has to run software written in Rust. Students can use: ...@@ -71,11 +130,11 @@ It has to run software written in Rust. Students can use:
| Part | Deadline | Points | | Part | Deadline | Points |
|--------|--------|--------| |--------|--------|--------|
| Documentation Milestone | Lab 9 | 1p | | Documentation Milestone | Lab 9 | 0.4p |
| Hardware Milestone | Lab 11 | 1p | | Hardware Milestone | Lab 11 | 0.8p |
| Software Milestone | Lab 12 | 1p | | Software Milestone | Lab 12 | 0.8p |
| PM Faire | TBD | 2p | | PM Fair | TBD | 1p |
| **Total** | | **5p** | | **Total** | | **3p** |
## F.A.Q ## F.A.Q
**Q:** Can I use another programming language, not Rust?\ **Q:** Can I use another programming language, not Rust?\
......
...@@ -4,35 +4,89 @@ sidebar_position: 1 ...@@ -4,35 +4,89 @@ sidebar_position: 1
# Description # Description
The purpose of the project is to build a hardware device that runs software written in Rust. 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 ## Deliverables
All the deliverables will be published in a GitHub repository that each student will be assigned to. The deliverables will be stored in two places:
- the *source code* will be stored on [Github](https://github.com/UPB-PMRust-Students)
The repository contains: - the project documentation will be stored on [Gitlab](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro), by creating a fork of the course's website
- documentation - the reposiotry's `README.md` file
- short description of functionality The **documentation repository** should contain:
- requirements (hardware and software) - the full documentation of the project, in the `index.md` file
- hardware design - use [KiCad EDA](https://www.kicad.org/) or a similar tool for the schematics - 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](https://app.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](https://www.kicad.org/) or similar
- photos of the device
- software design - software design
- detail design - detailed design
- functional diagram - 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 - software source code
Students will have to build and showcase the hardware with the running software at PM Fair. 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.
## How to create a page for your project?
1. Please login with your UPB login to [Gitlab](https://gitlab.cs.pub.ro)
2. You will have to add an SSH Key to your Gitlab account. This will allow you to push code without entering you username and password every time. For this, run the following command in the Windows/Linux/macOS's console: `ssh-keygen -t rsa -b 2048`. Press press ENTER until you exit the respective command prompts.
- If your command prompt `Overwrite (y/n)?` press `n` and run the above command again, changing the destination of the key.
- If the key was generated successfully, you will have the keys generated in the location indicated by the command `Enter file in which to save the key (C:\Users\"NAME"/.ssh/id_rsa):`
- Read the content of the file `id_rsa.pub` or the name you gave to the file and transfer it to Github.
- Login to [Gitlab](https://gitlab.cs.pub.ro/) and go to: [SSH Keys](https://gitlab.cs.pub.ro/-/user_settings/ssh_keys).
- Click on *Add new key* and insert into the *Key* textbox your key from `id_rsa.pub`.
- Be very careful about the expiration date of the ssh key, change the expiration date otherwise it is set to 30 days.
3. [Download Git](https://git-scm.com) from the official website and access it in the command line using `git -v` to check if it was installed correctly. You might have to use *Git Bash*.
4. Navigate to the [website's Gitlab repository](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro) and create a public fork by clicking on the button in the top right corner.
5. Clone the newly created repository by running `git clone git@gitlab.cs.pub.ro:<gitlab_username>/pmrust.pages.upb.ro.git`, where `<gitlab_username>` is replaced by your gitlab username.
6. Now you have your own clone. You need to create a new branch. For this, follow the steps:
- Run the command: `git fetch` followed by the `git pull` command
- The branches have the following naming convention: `project/your_curs.upb.ro_username`. Example: `project/andrei_paul.zamfir`
- To create a new branch:
- `git checkout -b <branch_name>`
- `git push --set-upstream origin project/your_curs.upb.ro_username`
7. To start creating your page for the project, go to `website/versioned_docs/version-acs_cc/project/2025` and create a new directory with your curs.upb.ro username. Example: `andrei_paul.zamfir`.
8. In that directory you must create a file named `index.md` which will be your project page. You can take a look at the [Markdown](https://www.markdownguide.org/cheat-sheet/) syntax. You can look at [last year's projects and template](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro/-/tree/main/website/versioned_docs/version-fils_en/project/2024)
9. After finishing the project, make a _merge request_ to the [upstream repository](https://gitlab.cs.pub.ro/pmrust/pmrust.pages.upb.ro)
## Hardware Rules ## Hardware Rules
1. Projects have to use a microcontroller (MCU) that is capable of running Rust code. Examples of MCUs are *nRF52*, *RP2040*, *ESP32* (RISC-V version). 1. Projects have to use a microcontroller (MCU) that is capable of running Rust code. Examples of MCUs are *nRF52*, *RP2040*, *ESP32* (RISC-V version).
2. Usage of a development board is encouraged, but not required, a custom PCB can be built. Example of development boards are: 2. Usage of a development board is encouraged, but not required, a custom PCB can be built. Example of development boards are:
- [Raspberry Pi Pico](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) (RP2040) or [Raspberry Pi Pico W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) for WiFi - [Raspberry Pi Pico 2](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) (RP2350) or [Raspberry Pi Pico 2W](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html) for WiFi (The version of Pico is not important, but we encourage the use of version 2.)
- [Adafruit Trinkey QT2040](https://www.adafruit.com/product/5056) (RP2040) - [Adafruit Trinkey QT2040](https://www.adafruit.com/product/5056) (RP2040)
- [Arduino Nano RP2040 Connect](https://store.arduino.cc/products/arduino-nano-rp2040-connect) (RP2040) - ⚠️ [^arduino_nano_rp2040_connect] - [Arduino Nano RP2040 Connect](https://store.arduino.cc/products/arduino-nano-rp2040-connect) (RP2040) - ⚠️ [^arduino_nano_rp2040_connect]
- [micro:bit v2](https://microbit.org/) (nRF52833) - [micro:bit v2](https://microbit.org/) (nRF52833)
- [nRF52 DK](https://www.nordicsemi.com/Products/Development-hardware/nrf52-dk) (nRF52810) - [nRF52 DK](https://www.nordicsemi.com/Products/Development-hardware/nrf52-dk) (nRF52810)
- [STM32 NUCLEO-F401RE](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-F401RE?qs=sGAEpiMZZMuqBwn8WqcFUv%2FX0DKhApUpi46qP7WpjrffIid8Wo1rTg%3D%3D) - [STM32 NUCLEO-F401RE](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-F401RE?qs=sGAEpiMZZMuqBwn8WqcFUv%2FX0DKhApUpi46qP7WpjrffIid8Wo1rTg%3D%3D)
- [ESP32-C3-DevKit-RUST-1](https://www.espressif.com/en/dev-board/esp32-c3-devkit-rust-1-en) (ESP32-C3) - ⚠️ [^esp32_riscv] - [ESP32-C3-DevKit-RUST-1](https://www.espressif.com/en/dev-board/esp32-c3-devkit-rust-1-en) (ESP32-C3) - ⚠️ [^esp32_riscv]
3. The hardware part may be designed either using a breadboard and jumper wires, a prototype board (solder breadboard) or a PCB. 3. 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 ## Software Rules
It has to run software written in Rust. Students can use: It has to run software written in Rust. Students can use:
...@@ -45,19 +99,26 @@ It has to run software written in Rust. Students can use: ...@@ -45,19 +99,26 @@ It has to run software written in Rust. Students can use:
## Project Rules ## Project Rules
1. Copying schematics or source code from the Internet is not allowed. 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. Each project is considered individual work, students can ask the lab assistant (lab) about implementation details during the development period. 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. Students are strongly encouraged to ask the lab assistant questions about the project. 3. Any problem or blockage you have will be discussed with the lab assistant during project work hours.
4. The presentation of all the milestones is mandatory. 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 ## Requirements
1. *Complexity:* use knowledge of at least 3 labs, **excluding** [00 - Rust](https://embedded-rust-101.wyliodrin.com/docs/lab/00), [01 - Hardware Introduction](https://embedded-rust-101.wyliodrin.com/docs/lab/01) and [02 - Setting up the Raspberry Pi Pico + GPIO](https://embedded-rust-101.wyliodrin.com/docs/lab/02) 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. 2. *Documentation:* Complete documentation of the implementation for both hardware and software.
3. *Functionality:* the hardware device has to be fully functional. 3. *Functionality:* The hardware device has to be fully functional.
The **IoT** stream has to use the networking (**WiFi**, **Bluetooth** or **Ethernet**).
## Example Projects ## Example Projects
### Examples of projects from past years ### Examples of projects from past years
1. [Projects from 2024](/docs/fils_en/category/projects-2024)
1. https://ocw.cs.pub.ro/courses/pm/prj2022 1. https://ocw.cs.pub.ro/courses/pm/prj2022
2. https://ocw.cs.pub.ro/courses/pm/prj2023 2. https://ocw.cs.pub.ro/courses/pm/prj2023
...@@ -71,11 +132,11 @@ It has to run software written in Rust. Students can use: ...@@ -71,11 +132,11 @@ It has to run software written in Rust. Students can use:
| Part | Deadline | Points | | Part | Deadline | Points |
|--------|--------|--------| |--------|--------|--------|
| Documentation Milestone | Lab 9 | 1p | | Documentation Milestone | Lab 9 | 0.5p |
| Hardware Milestone | Lab 11 | 1p | | Hardware Milestone | Lab 11 | 0.5p |
| Software Milestone | Lab 12 | 1p | | Software Milestone | Lab 12 | 0.5p |
| PM Faire | TBD | 2p | | PM Fair | TBD | 1.5p |
| **Total** | | **5p** | | **Total** | | **3p** |
## F.A.Q ## F.A.Q
**Q:** Can I use another programming language, not Rust?\ **Q:** Can I use another programming language, not Rust?\
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment