The Final Project


Problem
Long hours at a desk or lab can silently damage your posture. Poor alignment affects the spine and ribcage, causes certain muscles to become inactive while others are chronically overworked — leading to pain, discomfort, and long-term injury.

Solution
A lightweight wearable device that corrects posture in real time by tracking two fixed points on the shoulders. By monitoring shoulder alignment, the device guides the neck, back, and core into a healthier position — making good posture feel natural and comfortable. Over time, it trains the body-mind connection so correct posture becomes automatic.

Experience

As a 200-hour certified yoga instructor with a background in body mechanics and mobility anatomy, I understand posture from the inside out. Being part of the Fab Academy network gives me the tools to actually build this — and I'll be the very first one to wear it.

Fab Academy Rubric — Have you?
The criteria evaluators look for in the final project.









Main Video and Slide


Summary slide

finalproject
COMING SOON - summary slide (presentation.png, 1920x1080)

The Final Project process


This page describes what I selected from each of the previous weeks for my final project, as well as the workflows and main outputs. I will also link the work from the previous weeks related to each of these tasks as I go.

The start:

This is the schedule I followed to finalize my final project. From the first day of my Fab Academy journey, I knew what my final project would be, but I also had a lot of new skills to learn and practice. The previous weeks document my learnings, failures, and achievements as I worked to keep the schedule rather than just ticking off tasks, documenting as I went and learned.

The challenges:

It was not an easy journey — in the 2026 cohort I had several unexpected challenges. First, the escalating war in the Middle East affected the lead time for getting all the parts I needed, which caused a huge delay in the project. It also forced me to reuse components from previous devices or models and to make some changes to the final project. Another challenge, also due to the war, was its effect on my management of WRO in Kuwait (which you can learn more about here): I had to redo, restructure, and reimplement the full WRO project in a different way to adapt to the Kuwaiti government's regulations for running the competition. Before joining Fab Academy I made sure my WRO project would be running smoothly in April, May, and June, so I would have the time to focus on my final project. But unfortunately, due to the escalation in the region and the war, I had to reduce everything for WRO during the most critical time in Fab Academy, and I had to take 3 weeks off to finish my country-level responsibilities.

Documentation:

I kept Dreamweaver open as I worked on the project, making sure to document and write what I was doing and to take photos in the same sequence. I first added the text, then — after resizing the pictures and adding my comments on them — I connected the main ones to the related sections. I also pulled references from my previous assignments to describe more details, and I kept documenting the missing assignments where they overlapped with the final project. My first objective was to finish the final project.

Use of AI:

I used different AI tools to help me finalize all the tasks. Claude AI Desktop was mainly used to review my documentation — spelling, grammar, refining my phrases for clarity, adding keywords from Fab Academy assignments and methodologies, and highlighting the sections I had forgotten to add. I connected it directly to my local folder; this is the audit report for the changes made. I also used Gemini AI as my virtual coach to assist me through the tasks. This is the audit report for how I used it.
The main reason I used two different AI tools is to avoid hallucinations when I request two different tasks or rule sets. I tried to be very clear with my prompts so I could use AI to my benefit — not to run into errors that would force me to repeat things and find new workflows.

Final Project schedule


The following is the schedule I created when I came back to focus on Fab Academy, starting the 15th of May 2026. The main objective was to get the final project done, then use the remaining time to document and complete the assignments I had left behind. the last day in the calender is Jun 3rd 2026.
X represents the number of days in the week I worked on this task

Task W01 W02 W03 W04 W05 W06 W07 W08 W09 W10 W11 W12 W13 W14 W15 W16 W17 W18
01| Ideation and Sketching X X X X X - - - -
02| Electronic Production
  • Selecting the components
  • PCB Design
  • PCB Milling
  • Soldering the components
XX XXX XXX XXX - - - - XX XXXX XXXX XXXX
03|01| Coding "Microcontroller"
  • Sensors Code Setup
  • Functional Code on the clip
  • Logic testing
XXX XXX XXX - - - - XXX XXX XXX
03|02| Coding "App Interfce"
  • Design
  • Block Programing
  • App Clip Communication
- - - - XXX XXX XXX
04|02| Clips Packaging
  • 3D deisgn-FreeCAD
  • 3D printing
  • Assembly
  • Cover Molding
XXX - - - -
04|03| Wooden Case
  • CAD Design
  • Laser Cut
  • Assembly
XXX XXX - - - - XXXX
Evaluation and testing - - - - XX XXXXX XXXXX XXXXX
Documentation XXX XXX XXX XX XX XX X XXXX XXXX XXX - - - - XXX XXXXX XXXXX XXXXX

The Workflows


01| Ideation and Sketching


As I'm progressing during the week and getting more exposure to my colleagues' projects, I try to simplify the project. I created a design with a flexible strap but wiring was an issue. I strated with a complete viest or haner to a stap on sholder to clips that are universal for differnet ages, genders, over the cloth or underthem.
reated a new free accountdding my weeks and subtasks dding my weeks and subtasks dding my weeks and subtasks dding my weeks and subtasks reated a new free account dding my weeks and subtasks dding my weeks and subtasks


02| Electronic Production


02|01| Selecting the components


After all the research and studies made in Embedded Programming week, I selected the ESP32-C3 XIAO for three main reasons: it's the smallest microcontroller I have available, it supports Bluetooth (an important feature for the app interface), and it has enough ports for all the items I want to use. This is the link to the datasheet I read to learn more about it, and the image below was the main reference I used for selecting ports for inputs, outputs, etc.
I selected the following items as the main components — the full testing for each was done in the previous weeks: MPU6050 (GY-521) gyroscope to read the angle of the shoulder (detailed in Input Devices week), a vibration motor (detailed in Output Devices week), a 1K resistor + 2N2222A transistor + 1N4001 diode, an RGB LED (common anode) with three 10K resistors, and a TP4056 micro-USB charging module connected to a lithium battery and wired through a button.

Electronics Architecture
Component Function Interface Voltage Notes
ESP32 Microcontroller Main processing unit for sensor data and feedback logic GPIO / I2C / Bluetooth 3.3V Handles posture calculations and communication
MPU6050 IMU Sensor Detects tilt angle and posture orientation I2C 3.3V Measures acceleration and rotation
Vibration Motor Provides tactile alert when posture is incorrect Digital Output 3.3V / 5V Activated after posture threshold exceeded
Status LED Visual feedback indicator GPIO 3.3V Shows system state
Rechargeable LiPo Battery Portable power source Direct Power 3.7V Enables wearable device operation
Charging Module Battery charging and protection circuit Power Management 5V Input Allows safe USB charging
ESP33C3 Xioa GPIO


02|02| PCB


Based on the skills and experience I built up over the previous weeks, this was the workflow for my PCB development.

02|02|01| PCB Design
Create a new project in KiCad open the schematic editor add the components and make sure each has a footprint if not, download the files and add them to the library connect the ports and mark the unused ones as "no connect" run the Electrical Rules Check (ERC) solve errors and make sure I understand the warnings switch to the PCB Editor and import the components with their connections customize the track width to 0.5 mm, which gave me the best results when cutting the PCB (see Week 08 for details) rearrange the components change the unconnected SMD pads' copper layer to B.Cu to avoid affecting the tracks route the tracks run the Design Rules Check (DRC) fix any errors and review the warnings align the components on my laptop screen to match the spacing on the PCB — this is critical when using components that aren't available in the KiCad footprint libraries plot and export the Gerber file after 4 versions and tweaks for better results, especially given the shortage of PCB stock — I had to fit this PCB into a 71 mm length design.
Schematics Design PCB Designs 3D Design aligneing the component

02|02|02| PCB Milling
Import the Gerber file into FlatCAM align the PCB design to the (0,0) origin add an external buffer of 0.4 mm make sure the tracks and routes are clear and don't overlap with the cutting routes or buffer export the G-code file in Easel, import the file set up the CNC as documented in Week 08 start milling use a multimeter to check the routes
faltCAM Milling Final result Multimeter Route checking

02|02|03| Soldering the components
I prepared my soldering station, keeping the main components close to me and following safety measures I used the microscope to get better visibility on the PCB and the SMD components I'm using first I applied solder flux paste (RMA-223) on the pads I added a little solder (Flux Solder 0.8mm/100g, ProsKit 8PK-033A-L) on the pads make sure the components' legs match the spaces on the PCB I review my PCB design and confirm the correct ends are matched to avoid short circuits; I try to keep the legs fixed in place heat the previously soldered pads once I feel the component has settled onto its pads, I remove the solder tip repeat this process until all the parts are soldered and fixed I run a multimeter test to confirm which routes are connected and which are isolated Done.
Solder Pads Add componenet Multimeter Route checking Final PCB


03| Coding and Programing


03|01| Microcontroller Programing


03|01|01| Sensors Code Setup
I'm using the XIAO for the first time in this project — I had used the ESP32-C3 SuperMini in the previous assignments — and I also don't have full access to the lab. I will be using the Gemini AI assistant in this phase. This is the audit report for the AI usage.

I selected Thonny IDE to start coding in MicroPython I connected the XIAO via USB cable first, set the microcontroller name to FBL_R and advertise it so it can be discovered by the interface app we will develop test the connection with each component blink the LED first vary the vibration motor strength wake up the MPU sensor and read the X, Y, Z values


# Advertise device Bluetooth Name
import bluetooth
import time

# 1. Initialize BLE
ble = bluetooth.BLE()
ble.active(True)

# 2. Define the name
DEVICE_NAME = "FBL_R"

def advertise():
    # BLE Advertisement format: [Length, Type, Data]
    # Type 0x09 is the 'Complete Local Name'
    name_bytes = DEVICE_NAME.encode('utf-8')
    # Payload = [Len of name + 1, Type 0x09, The Name]
    payload = bytearray([len(name_bytes) + 1, 0x09]) + name_bytes
    
    # gap_advertise(interval_us, payload)
    # 100000 us = 100ms interval
    ble.gap_advertise(100000, payload)
    print("FBL_R is now advertising...")

# 3. Start advertising
advertise()

# 4. Keep the program running
while True:
    time.sleep(1)
					

# LED light blinking 

from machine import Pin
import time

# Replace 'X' with the GPIO number from your PCB design
led = Pin(X, Pin.OUT)

while True:
    led.value(0)  # Logic 0 = LED ON (Common Anode)
    print("LED is ON")
    time.sleep(0.5)
    
    led.value(1)  # Logic 1 = LED OFF
    print("LED is OFF")
    time.sleep(0.5)
					

# Vibrator change strength 
from machine import Pin

# D6 corresponds to GPIO 21 on the ESP32-C3
motor = Pin(21, Pin.OUT)

# Set it to 0 (Stopped)
motor.value(0)
print("Motor on D6 (GPIO 21) is now set to 0")
					

# MPU sensor and reading
import machine
import time
import struct

# Initialize I2C
i2c = machine.I2C(0, sda=machine.Pin(6), scl=machine.Pin(7))
addr = 0x68

# IMPORTANT: Wake up the MPU-6050 inside this script
try:
    i2c.writeto_mem(addr, 0x6B, b'\x00')
    print("MPU-6050 Woken Up Successfully")
except:
    print("Could not find sensor. Check wires!")

def read_accel():
    try:
        # Read 6 bytes starting from 0x3B
        data = i2c.readfrom_mem(addr, 0x3B, 6)
        # Unpack high and low bytes into 3 signed integers (x, y, z)
        return struct.unpack('>hhh', data)
    except:
        return None

while True:
    vals = read_accel()
    if vals:
        ax, ay, az = vals
        print("X: {:6d} | Y: {:6d} | Z: {:6d}".format(ax, ay, az))
    else:
        print("Sensor disconnected!")
        break # Exit the loop if the sensor is lost
        
    time.sleep(0.2)
					

03|01|02| Functional Code on the clip

03|01|03| Logic testing

03|02| App Interfce


03|02|01| Design

I created my app using MIT App Inventor platform. First screen will contant instrution of how to use the clips I designed the two clips, left and right I added list view to search for Buletooth devices a battery level indicators a number of text labels to update the status of the connection adding Calibration button to set the acceptable degree within the thrishhold define on the clips Sliders for the user preference for the acceptable angle threshhold the acceptable angle and time before awaken the vibrator vibration strength.

03|02|02| Block Programing

App inventor provide block prograimng functionaliy that easies the use of syntax coding. here I dublicated the same comands for the left and righ clips, calling on the bluetooth connection and senting some paramerters to the ESP32 C3 microcontroller.

03|03| integrating clips with App



04| Packaging


04|01| Clip Case


04|01|01| 3D deisgn-FreeCAD
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|01|02| 3D printing
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|01|03| Assembly
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|01|04| Evaluation
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|01|05| Cover Molding
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|02| Wooden Case


04|02|01| CAD Design
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|02|02| Laser Cut
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design

04|02|03| Assembly evalaution
create new file on KiCAD Open Schematics design add the components and make sure they have a footprint
Schematics Design PCB Designs 3D Design


05| Spiral Development


conyinue working on this project, I would like to make the wooden cae wireless chargeing case for the both clips and to also have it indicate when a clip is missing.

Fabrication Plan


Component Description Fabrication Method Material Fab Academy Skill Demonstrated
Wearable Posture Clipper Attachment mechanism to mount device on clothing which will hold main sensors to track posture 3D Printing PLA / PETG Additive manufacturing
Charging Case The case to keep the clipper with wireless charging functionality Laser cutting MDF wood Parametric design
App interface MIT App Inventor Interface and Application Programming

The process


These will be the results of each week's assignments.

Ideation: Wearable vest with sensors and vibration


reated a new free account

01 | Creating building blocks to make up the main fabric for the vest. I'm planning to keep the wiring all hidden while it's being printed

dding my weeks and subtasks

02| Defining the areas to keep the gyro sensor, especially the shoulders, the neck, spine, chest and core

dding my weeks and subtasks

03| A wireless charging station

dding my weeks and subtasks

04| As I'm progressing during the week and getting more exposure to my colleagues' projects, I try to simplify the project. I created a design with a flexible strap but wiring was an issue

dding my weeks and subtasks

05| My other design is to make wireless connected shoulder pads that can communicate with each other and stay stable on the shoulder, either directly on the skin or on top of the cloth

dding my weeks and subtasks

06| A rechargeable station is necessary for this kind of project and I'm looking at different ways to create both a case and a charger inspired by my DJI Mic

Yesss .. thats what I'll Fabricate
  • Feedback: The excitement at the beginning made me create and imagine a lot to be done. The more I progressed, the more I kept simplifying the project. Now I have defined the point where I will start my spiral development of the project.
  • Challenge: The recharging case is challenging

Part 01: Shoulder Clips


reated a new free account

01 | The main circuit will be in a small box that can be placed on the shoulder

dding my weeks and subtasks

02| It can be fixed by clip or magnet

dding my weeks and subtasks

03| There will be additional magnets under the case to keep the shoulder clips in place once they are in the charging case

dding my weeks and subtasks

04| The main parts for each clip: ESP32-C3-SuperMini Microcontroller → MPU-GY-521 → Vibration Motor, and these will be programmed using C++ or MicroPython

dding my weeks and subtasks

06| This is the drawing of the main parts on the board, which can also be designed as a flexible PCB with copper tape and a 3D printed board

dding my weeks and subtasks

07| I also found a way to design the routes and wires in the 3D design as demonstrated here

dding my weeks and subtasks

07| But I decided to start with a flat hard fixed PCB and then spiral my way to wireless charging and then a flexible circuit

dding my weeks and subtasks

07| This is the rearranged PCB design created with KiCad

HTTP link

07 | and this is how it Looks, each compenent in its own pocket and I didnt have to remove the pins. the design still need to be fixed to and I need a sharper cutter to cut the copper tap. it will also be eacy to create a case of the clip.

Good Enough for now
  • Feedback: The excitement at the beginning made me create and imagine a lot to be done. The more I progressed, the more I kept simplifying the project. Now I have defined the point where I will start my spiral development of the project.
  • Challenge: The recharging case is challenging, the PCB is still a challenge

Part 02: Application


01| I created my app using MIT App Inventor platform. I designed the two clips, left and right, I added list view to search for Buletooth devices and I added a number of text labels to update the status of the connection. as well as adding Calibration button to set the acceptable degree within the thrishhold define on the clips.

02| App inventor provide block prograimng functionaliy that easies the use of syntax coding. here I dublicated the same comands for the left and righ clips, calling on the bluetooth connection and senting some paramerters to the ESP32 C3 microcontroller

Very smooth
  • Feedback: I have previous experience using MIT App Inventor; it was not difficult. But connecting it to external devices was a new area for me to explore.
  • Challenge: I will try to get data from the clips in to the App and plot them in a visually nice chart will also provide more insite regarding th emovemnets or the number of time the user moved without the vibration reminder.

Part 03: Charging case


reated a new free account

01 | The chargeable case will be small and flat to fit into a bag

dding my weeks and subtasks

02| There should be placeholders for the clips to fit in

dding my weeks and subtasks

03| The case should be holding all the parts and accessories

dding my weeks and subtasks

05| wireless charging sensor

not yet
  • Feedback:
  • Challenge:

BOM- Bill Of Material


Level Part Number Part Name QTY Price USD
2 000000000 PLA Filiments 1 0000000
1 000000000 PCB Board 1 0000000

Main Questions


Question Answer
What does it do? It’s a smart wearable system that fixes posture in real-time. It uses two clips—one on each shoulder—with MPU6050 sensors to track body alignment. If you slouch past a certain angle for too long, the clips vibrate to remind you to sit up. It also connects to a mobile app I built to handle calibration and settings.
Who's done what beforehand? The concept of posture biofeedback is well-established in both commercial and maker communities. I personally used the Upright device during my horse riding classes, which gave me firsthand experience with how effective real-time vibration alerts can be for maintaining spinal alignment during active movement.In the Fab Academy community, I've seen students explore similar themes but with different architectures. Like Nadine Uwinoza, used flex sensors for spinal tracking. Others, such as Praveen Kumar, focused on the ESP32 and MPU6050 integration. My project specifically targets shoulder symmetry, inspired by my yoga teaching experience.
What sources did you use? This project was an exercise in spiral development, where I constantly simplified my design to reach a functional, reliable 'Minimum Viable Product.
  • The Fab Academy Community: The global archive of previous projects was my main source of information.
  • VujaDe Team and Instructors: My local team and instructors at the VujaDe Innovations Lab were essential.
  • AI Tools: I integrated AI into my workflow for coding and documentation. While I experimented with ChatGPT, my two favorite tools were Gemini and Claude Desktop. I used them to brainstorm the MicroPython logic, and help organize my documentation.
What did you design? I designed a lot for this! I created the custom PCB for the shoulder clips in KiCad, the 3D-printed housings that snap onto clothes, the layout for the charging case, and the entire mobile app interface. I started with a complex vest idea but simplified it into these modular clips.
What materials and components were used? The main parts are 2x ESP32-C3 SuperMini controllers, 2x MPU6050 IMUs, 2x disc vibration motors, and LiPo batteries. For the casing, I used PLA filament, and for the charging station, I used laser-cut wood inspired by my DJI Mic case.
Where did they come from? some from Kuwait market , ordered online and s ome form Vujade lab in Saudi
How much did they cost? I have to define this
What parts and systems were made? I built three main systems: the hardware clips (electronics + 3D casing), the communication system (BLE data transfer between clips and phone), and the mobile app (the UI for user control and monitoring).
What tools and processes were used? I used KiCad for PCB design, a Roland milling machine for the boards, FDM 3D printing for the clips, and laser cutting for the charging case. For coding, I used MicroPython in a web-based IDE and MIT App Inventor.
What questions were answered? Can two separate sensors communicate reliably with one app? Yes. Can we filter out "fake" slouching? Yes, by adding a custom time delay in the code. Is a dual-shoulder setup better than a single spine sensor? For me, it provides much better feedback on shoulder rounding. Can the case charege the clips wirelessly.
What worked? What didn't? Worked: The BLE connection and the real-time angle tracking are very smooth. Didn't work: My first idea for a wearable vest was too complicated with all the hidden wiring, so I had to pivot to the wireless "clip" design which is much more practical.
How was it evaluated? still in the process
What are the implications? This shows that we can make personalized health tech that isn't just a generic "one size fits all." My background in yoga and anatomy helped me design something that actually feels natural, and the tech can be adapted for other types of physical therapy.

Reflection


What worked
  • Letting the design get simpler over time — moving from a full sensor vest to two small shoulder clips made the project achievable.
  • The ESP32-C3 + MPU6050 + vibration motor stack proved out across the input, output, and networking weeks.
  • My yoga and body-mechanics background gave the project a clear, grounded purpose.
What didn't
  • The early wearable-vest concept was too complex — hidden wiring was never going to work.
  • Flexible PCB on copper tape kept failing at the soldering stage.
  • The rechargeable wireless charging case is still the hardest unsolved piece.
What I'd do differently
  • Prototype the simplest viable form first, then add complexity — instead of designing the most ambitious version up front.
  • Freeze the core design decisions earlier so the electronics and case could develop in parallel.
  • Order PCB stock and milling bits well ahead, given the shipping delays in the region.
Key learnings
  • Spiral development works: build a rough version, learn from it, refine — repeat.
  • A wearable is a system, not a board. Clips, case, and app all have to be designed together.
  • Domain knowledge (here, posture and anatomy) is what makes the engineering decisions meaningful.

Original Files


All design files, source code, and references for the project. Replace each # link below with the real file URL (GitLab raw link, repo path, or local file) once uploaded.

Subsystem File Format Tool Download
Shoulder Clips — Electronics
PCB schematic shoulder-clip-schematic .kicad_sch KiCad download
PCB layout shoulder-clip-pcb .kicad_pcb KiCad download
PCB cut file shoulder-clip-pcb .svg Illustrator / cutter download
Firmware shoulder-clip-firmware .ino / .cpp Arduino IDE (ESP32-C3) download
Shoulder Clips — Mechanical
Clip case (top + bottom) shoulder-clip-case .f3d / .step Fusion / FreeCAD download
Clip case print shoulder-clip-case .stl Bambu Studio download
Charging Case
Case body design charging-case .f3d / .step Fusion / FreeCAD download
Laser-cut layout charging-case-laser .svg / .dxf Illustrator / xTool download
Wireless-charging board charging-case-pcb .kicad_pcb / .svg KiCad download
Mobile App
App project posture-app .aia MIT App Inventor download
App build posture-app .apk MIT App Inventor download
Project
Bill of materials bom .xlsx / .csv Excel / Sheets download
Final video final-project .mp4 (1080p) download
Summary slide final-project-slide .png (1920×1080) download
Source repository gitlab.fabcloud.org/…/hamidah-rahimi Git GitLab open repo

License: unless noted otherwise, all original files are released under CC BY-NC 4.0.

Fab Academy Rubric — Have you?
The criteria evaluators look for in the final project.