In this final project, you will design, build, evaluate, and demonstrate a small machine learning system that uses data from the Arduino Nano 33 BLE Sense Rev2. Your project must use one or more onboard sensors from the board. It should be designed around what the board can actually sense.
You may design your project using one or more of the following onboard capabilities:
| Sensor / Feature | Suitable Project Uses |
|---|---|
| Accelerometer | Motion, tilt, gesture, activity recognition |
| Gyroscope | Rotation, gesture recognition, movement patterns |
| Magnetometer | Orientation, rough heading, sensor fusion |
| Microphone | Sound level, voice activity, clap/tap detection, simple sound classification |
| Proximity sensor | Hand-near/hand-far detection, contactless interaction |
| Color / light sensor | Light condition, color/object context, covered/uncovered detection |
| Temperature sensor | Slow-changing environmental context |
| Humidity sensor | Environmental context, covered/uncovered, breath/near-hand experiments |
| Pressure sensor | Environmental context, rough altitude/pressure change |
| BLE | Communication with another device, phone, laptop, or dashboard |
| RGB LED | Simple output for classification results |
In this project, you will build a system that recognizes hand or device gestures using the accelerometer and gyroscope. The user holds or moves the Arduino board in specific ways. Your system should classify the motion into one of several gesture classes.
Example gesture classes:
| Class | Description |
|---|---|
| Idle | Board is not moving |
| Shake | Board is shaken repeatedly |
| Tilt left | Board is tilted left |
| Tilt right | Board is tilted right |
| Circle | Board is moved in a circular pattern |
| Punch forward | Board is moved quickly forward |
| Raise | Board is lifted upward |
| Lower | Board is moved downward |
You should choose 3 to 5 classes. More classes are allowed, but only if you can collect enough clean data.
A minimum successful version should:
A strong version should:
Your report must describe:
This is one of the best project options because the board’s motion sensors are well-suited for TinyML.
In this project, you will treat the Arduino board as a simple wearable device. The system should recognize what physical activity or device state is occurring based on IMU data.
Example classes:
| Class | Description |
|---|---|
| On desk | Board is stationary on a table |
| Held in hand | Board is held but mostly still |
| Walking | User walks while carrying the board |
| Running in place | User runs or jogs in place while carrying the board |
| Picked up | Board transitions from table to hand |
| Backpack | Board is carried inside a backpack |
| Rotating | Board is being turned or spun |
You should choose *3 to 4 classes- for a realistic project.
A minimum successful version should:
A strong version should:
Your report must describe:
This project is realistic because many embedded and wearable systems rely on motion data.
In this project, you will use the onboard microphone to classify simple sound events.
This is not full speech recognition. The goal is to recognize a small number of simple sound categories.
Example classes:
| Class | Description |
|---|---|
| Silence | No significant sound |
| Voice | Human speech is present |
| Clap | A hand clap |
| Tap | Tapping near the board |
| Snap | Finger snap |
| Background noise | Fan, music, room noise |
| Loud noise | Sound exceeds a high intensity level |
You should choose 3 to 5 sound classes.
A minimum successful version should:
You may use:
You do not need to implement a large neural network. A small model with good features is often better for embedded use.
A strong version should:
Your report must describe:
This project is good, but students must avoid overclaiming. “Detects claps and voice in a quiet room” is believable. “Understands speech in all conditions” is not.
In this project, you will build a system that classifies the sound environment into categories such as quiet, normal, and loud.
This project may use a simple machine learning model, a rule-based system, or a hybrid approach.
Example classes:
| Class | Description |
|---|---|
| Quiet | Little or no sound |
| Normal voice | Human voice or moderate sound |
| Loud noise | Excessive sound level |
| Sustained noise | Noise that remains high over time |
The output could use the onboard LED:
| Prediction | LED Behavior |
|---|---|
| Quiet | LED off |
| Normal voice | Green |
| Loud noise | Red |
| Uncertain | Blue or blinking |
A minimum successful version should:
A strong version should:
Your report must describe:
This is a good project for students who want a practical embedded sensing system without making the ML problem too large.
In this project, you will use the proximity/light/color sensor to build a contactless interaction system.
The user moves a hand near the sensor, covers the sensor, or performs simple gestures. The board responds by changing LED state, sending a command, or updating a dashboard.
Example classes:
| Class | Description |
|---|---|
| No hand | Nothing near the sensor |
| Hand near | Hand is close to the sensor |
| Covered | Sensor is covered |
| Swipe left/right | Hand moves across the sensor |
| Swipe up/down | Hand moves vertically |
| Bright light | Sensor sees strong light |
| Dark | Sensor is covered or in low light |
A minimum successful version should:
A strong version should:
Your report must describe:
This project is good for interaction design, but students must show real data. Simply calling a built-in gesture API and printing the result is not enough for a final project.
In this project, you will combine multiple onboard sensors to classify the state or context of the device.
This is one of the strongest project options because it requires systems thinking.
Example classes:
| Class | Possible Sensor Evidence |
|---|---|
| On desk | Low IMU motion, stable light |
| Picked up | IMU motion, orientation change |
| Covered by hand | Low light, high proximity, slight temperature change |
| Inside backpack | Low light, limited motion pattern, muffled sound |
| Noisy environment | Audio features indicate noise |
| Near user | Proximity, sound, humidity/temperature changes |
A minimum successful version should:
A strong version should:
Your report must describe:
This is a good advanced project. It is also where students learn that blindly throwing more columns into a model is not “sensor fusion.” It is just making a spreadsheet nervous.
In this project, you will compare different versions of a model for embedded deployment.
This option is appropriate for students who want a more technical ML/deployment project.
Possible comparisons:
| Comparison | Example |
|---|---|
| Full model vs. smaller model | Larger neural network vs. compact neural network |
| Float vs. quantized | TensorFlow Lite float model vs. int8 quantized model |
| Raw signal vs. features | Raw IMU window vs. extracted mean/std/min/max features |
| Host inference vs. device inference | Python model vs. embedded model |
| Accuracy vs. size | More accurate model may be too large |
A minimum successful version should:
A strong version should:
This is a very good project for students interested in the engineering tradeoffs of TinyML. The best model is not always the most accurate model. It is the one that actually fits and runs.
Submit one .zip file containing all project materials.
Use the following structure unless your project requires a justified alternative:
1
2
3
4
5
6
7
8
9
10
11
12
13
final_project.zip
├── README.md
├── report/
│ └── technical_report.pdf
├── firmware/
│ ├── platformio.ini
│ ├── src/
│ ├── include/
│ └── README.md
└── notebooks/
├── data_collection.ipynb
├── training.ipynb
└── evaluation.ipynb
Your README.md must explain how to inspect or reproduce the project.
It should include:
The README should be written for another student who wants to understand your project without guessing.
Submit a polished PDF technical report (6-8 pages, single-space, 10 pts font).
1
2
3
4
5
6
7
0:00–1:00 Project overview
1:00–2:00 Hardware and sensors used
2:00–3:30 Data collection process
3:30–5:00 Preprocessing and model design
5:00–6:30 Training and evaluation results
6:30–8:30 Final demonstration
8:30–10:00 Limitations and future work
The video must include: