Embedded Systems Project – Air Mouse
University of Tehran, Faculty of Electrical and Computer Engineering
Second Semester 1404-1405 (2025-2026)
Group Information
| Full Name | Student ID | Primary Role |
|---|---|---|
| Taha Majlesi | 810101504 | Android Developer, Sensor Processing |
| Javad Mohammadi | 810101510 | PC Server Developer, Mouse Control |
| Arman [Last Name] | 220701089 | UI/UX Designer, Data Transmission |
| Mehdi Mokhtari | 810101514 | Profiling, Documentation, Testing |
Project Breakdown by Section
1. Android Side
1-1. User Interface (UI)
| Task | Responsible | Status |
|---|---|---|
| Design main screen (Calibrate button, Start button, orientation indicator) | Arman | Assigned |
| Design calibration screen with step‑by‑step instructions | Arman | Assigned |
| Display raw and filtered sensor values for debugging | Arman | Assigned |
| Visual feedback for click and scroll actions (e.g., flash or color change) | Arman | Assigned |
| IP address input field for laptop connection | Arman | Assigned |
| Responsive layout adapting to different screen sizes | Arman | Assigned |
1-2. Sensors and Filters
| Task | Responsible | Status |
|---|---|---|
| Read raw data from gyroscope, accelerometer, magnetometer | Taha | Assigned |
| Gyroscope bias calibration (stationary average) | Taha | Assigned |
| Accelerometer calibration (6 orientations, offset/scale) | Taha | Assigned |
| Magnetometer hard‑iron calibration (figure‑8 pattern, min/max) | Taha | Assigned |
| Implement Madgwick (or Mahony/Kalman) sensor fusion filter | Taha | Assigned |
| Implement low‑pass and high‑pass filters for noise reduction | Taha | Assigned |
1-3. Motion to Commands
| Task | Responsible | Status |
|---|---|---|
| Map Z‑axis rotation to horizontal cursor movement | Taha | Assigned |
| Map X‑axis rotation to vertical cursor movement | Taha | Assigned |
| Detect click via quick Y‑axis rotation (with speed threshold) | Taha | Assigned |
| Detect scroll via quick linear Y‑axis movement (with threshold) | Taha | Assigned |
| Implement hysteresis to prevent false detections | Taha | Assigned |
| Send delta (incremental) values instead of absolute positions | Taha | Assigned |
1-4. Data Transmission to Laptop
| Task | Responsible | Status |
|---|---|---|
| Implement TCP socket for data transmission | Arman | Assigned |
| Format data as JSON (fields: DeltaX, DeltaY, Click, Scroll) | Arman | Assigned |
| Implement ACK and Retransmit mechanism for click/scroll packets | Arman | Assigned |
| Add Internet permission and cleartext traffic in AndroidManifest | Arman | Assigned |
2. Laptop (PC) Side
| Task | Responsible | Status |
|---|---|---|
| Implement TCP server in Python (or Go) to receive data | Javad | Assigned |
| Parse JSON and extract DeltaX, DeltaY, Click, Scroll | Javad | Assigned |
| Control mouse using PyAutoGUI (or equivalent library) | Javad | Assigned |
| Send ACK for received packets (click and scroll) | Javad | Assigned |
| Simple UI to show connection status and received data | Javad | Assigned |
3. Profiling with Perfetto
| Task | Responsible | Status |
|---|---|---|
| Enable USB Debugging and run trace on device | Mehdi | Assigned |
| Save trace output and analyse with Perfetto UI | Mehdi | Assigned |
| Answer questions 1–11 (trace analysis) | Mehdi | Assigned |
| Write config.pbtx configuration file | Mehdi | Assigned |
4. Documentation and Submission
| Task | Responsible | Status |
|---|---|---|
| Record final video (max 5 minutes) | All Members | Assigned |
| Write final report (including explanations and answers) | Mehdi | Assigned |
| Build APK and test on Android 10+ | Taha, Arman | Assigned |
| Upload project to GitLab/GitHub | Javad | Assigned |
| Final packaging (ZIP) and submission | Javad | Assigned |
Main Challenges and Solutions
| Challenge | Solution |
|---|---|
| Gyroscope noise and drift | Used Madgwick filter and bias calibration |
| Accurate click and scroll detection | Used speed thresholds and hysteresis |
| Latency in data transmission from phone to laptop | Optimised socket and reduced message size |
| Different send/receive rates | Used buffering and ACK mechanism |
| Running Perfetto without internet access | Used Docker Image and trace_processor_shell |
Repository Link
[Link to GitHub/GitLab repository]
Submission Deadline
22/03/1404 (June 12, 2025) – 23:59
Group Members' Signatures
| Name | Student ID |
|---|---|
| Taha Majlesi | 810101504 |
| Javad Mohammadi | 810101510 |
| Arman Karami | 220701089 |
| Mehdi Mokhtari | 810101514 |
Notes
- All members contributed equally to the project.
- Regular team meetings were held to coordinate efforts.
- Code reviews were performed by all members to ensure quality.
- The project was tested on multiple devices and platforms.
Date: June 2025
Xet Storage Details
- Size:
- 5.18 kB
- Xet hash:
- b606b0e9cbd8323e03b0d267b2e91039a38eeab1461755c80e3d292dceb1ae6b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.