This is an old revision of the document!


Smart Tennis Racket

Introducere

Ce face

Smart Tennis Racket este un dispozitiv electronic montabil pe racheta de tenis care detectează automat loviturile și oferă feedback obiectiv jucătorului în timp real. Concret, sistemul:

  • detectează startul și sfârșitul unei lovituri din semnătura inerțială a swing-ului;
  • estimează tipul lovituriiforehand vs backhand — pe baza sensului de rotație al brațului;
  • estimează intensitatea lovituriislab / mediu / puternic — din vârful de accelerație;
  • estimează viteza unghiulară maximă a swing-ului prin integrarea giroscopului;
  • afișează un contor de lovituri și statistici live pe un display TFT 1.8”;
  • oferă feedback vizual instant printr-un LED RGB (verde = lovitură bună, roșu = slabă);
  • permite reset printr-un buton fizic.

Scop

Antrenament obiectiv pentru jucătorii amatori. Autoevaluarea unui jucător amator se bazează pe simțuri (“a sunat bine”, “a fost puternic”), nu pe date măsurate. Dispozitivul transformă o ședință de antrenament într-un set de metrici concrete: număr lovituri, raport forehand/backhand, distribuția intensităților, viteză medie de swing — fără cost ridicat și fără dependență de un antrenor sau de o aplicație telefonică.

Ideea de pornire

Soluțiile comerciale (Babolat Pop, Sony Smart Tennis Sensor, Zepp Tennis) sunt scumpe, închise ca platformă și au fost discontinuate de mai multe ori, lăsând utilizatorii fără suport. Plecând de la observația că un IMU 6-DOF de tipul MPU6050 acoperă cea mai mare parte a senzoricii necesare, ne-am propus să construim un echivalent open, ieftin și deschis pentru extensii.

Utilitate

  • feedback obiectiv în timp real, fără telefon și fără cont online;
  • statistici per ședință, vizibile direct pe ecranul atașat de rachetă;
  • alimentare autonomă pe baterie 9V → uzabil pe teren.

Descriere generală

Sistemul este construit în jurul plăcii de dezvoltare ATmega328P Xplained Mini, care joacă rolul de coordonator central. Microcontrollerul citește continuu date inerțiale de la senzorul MPU6050 prin magistrala I2C, le procesează printr-o pipeline simplă de detecție și clasificare, după care actualizează simultan două canale de output: ecranul TFT (text și statistici) prin SPI și LED-ul RGB (feedback luminos) prin trei canale PWM. Un buton conectat ca GPIO permite reset-ul contorului.

Schemă bloc

  • MPU6050ATmega328PI2C, 100 kHz: la fiecare ~10 ms, MCU-ul (master) citește 14 octeți (3× accel + temp + 3× gyro) de la slave-ul MPU6050 (adresa 0x68). Sunt folosite primitivele twi_start / twi_write / twi_read_ack / twi_read_nack / twi_stop din driverul de la Lab 6.
  • ATmega328P → modul detecție swing (software): un filtru pe magnitudinea accelerației (||a|| − g) detectează startul și sfârșitul unei lovituri.
  • ATmega328P → modul clasificare (software): pe baza semnului ω_z (giroscop, axa verticală a încheieturii) și a vârfului de accelerație, decide forehand/backhand și slab/mediu/puternic.
  • ATmega328P → ST7735 TFT 1.8”SPI, master → slave: după fiecare lovitură detectată, MCU-ul redesenează zona de text și afișează:
    • HITS: 24
    • SHOT: FOREHAND
    • POWER: HIGH
    • SWING: 320 deg/s
  • ATmega328P → LED RGB (R+G)PWM: 2 canale PWM independente, generate de Timer 0 (OC0B = verde) și Timer 2 (OC2B = roșu), modulează intensitatea celor două culori. LED-ul are anod comun → driver-ul software inversează duty-cycle-ul (0 = stins, 255 = maxim).
  • Buton → ATmega328PGPIO + INT0: tratat în întrerupere externă pe PD2, cu debouncing software. La apăsare = reset contor lovituri.

Module software

| Modul | Sursă | Descriere |

twi.c/.h Lab 6 (preluat, F_CPU adaptat la 16 MHz) driver I2C low-level
mpu6050.c/.h scris (după pattern-ul mpl3115a2 din Lab 6) init, citire accel/gyro burst, calibrare offset
spi.c/.h Lab 5 (preluat) driver SPI low-level
st7735.c/.h Lab 5 (preluat, adaptat pentru pini noi) driver TFT 1.8”
timers.c/.h Lab 3 (preluat, extins) configurare PWM 2 canale pe Timer 0 + Timer 2
rgb.c/.h scris wrapper PWM pentru LED RGB (R+G) cu efecte (solid / blink / fade)
swing_detect.c/.h scris detecție swing și clasificare
main.c scris bucla principală, integrare module, FSM

Hardware Design

Hardware Design

1. Componentele folosite și rolul lor în proiect

  • ATmega328P Xplained Mini — placa de dezvoltare cu microcontrolerul ATmega328P (AVR 8-bit, 16 MHz). Are debugger/programator integrat (mEDBG) și port serial virtual (CDC), deci poate fi programată și depanată direct prin USB, fără programator extern. Rolul ei este de coordonator central: citește datele de mișcare de la senzor, le procesează, comandă display-ul și LED-ul și tratează apăsarea butonului.
  • MPU6050 (modul GY-521) — senzor inerțial 6-DOF (accelerometru 3 axe + giroscop 3 axe, 16-bit fiecare). Comunică prin I2C la adresa 0x68. Rolul lui: achiziția semnăturii inerțiale a loviturii — accelerometrul detectează startul și sfârșitul unei lovituri prin praguri de magnitudine, iar giroscopul oferă sensul de rotație pentru clasificarea forehand/backhand.
  • Display TFT 1.8” ST7735 — ecran color 128×160 pixeli, control prin SPI. Rolul lui: afișarea informațiilor în timp real — contor de lovituri, tipul loviturii, intensitatea și viteza unghiulară maximă.
  • LED RGB 5 mm cu anod comun — folosim canalele Roșu și Verde. Rolul lui: feedback vizual instant — verde pentru o lovitură puternică, roșu pentru o lovitură slabă. Intensitatea fiecărei culori este controlată prin PWM.
  • Buton tactil 6×6×5 mm — rolul lui: resetarea contorului de lovituri. Este tratat printr-o întrerupere externă pe linia INT0.
  • Componente pasive și de suport — rezistori de 220 Ω pentru limitarea curentului prin LED, breadboard MB-102 pentru prototipare, fire de legătură, suport de baterie 9V pentru alimentarea autonomă (în faza de dezvoltare alimentarea se face prin USB).

2. Pinii folosiți și justificarea alegerilor

Microcontrolerul ATmega328P are un număr limitat de pini cu funcții speciale (I2C, SPI, PWM, întreruperi). Alegerea fiecărui pin nu este arbitrară, ci impusă de funcția hardware de care avem nevoie.

Semnal Pin AVR Componentă Justificarea alegerii
SDA PC4 MPU6050 Pin hardware TWI al ATmega328P — singura opțiune pentru I2C hardware.
SCL PC5 MPU6050 Pin hardware TWI — pereche cu SDA.
SCK PB5 Display Pin hardware SPI SCK.
MOSI (SDA) PB3 Display Pin hardware SPI MOSI.
CS PB2 Display Pinul hardware SS; trebuie configurat ca ieșire, altfel modulul SPI cade în mod slave.
DC PB1 Display GPIO liber, adiacent fizic pinilor SPI — cablaj scurt.
RST PB0 Display GPIO liber, adiacent pinului DC.
Rosu (R) PD3 LED RGB Ieșire OC2B — PWM hardware generat de Timer 2.
Verde (G) PD5 LED RGB Ieșire OC0B — PWM hardware generat de Timer 0.
Buton PD2 Buton Pin INT0 — întrerupere externă dedicată, cu pull-up intern activat în software.

De ce I2C pe PC4/PC5: magistrala I2C hardware (TWI) a ATmega328P este fixată pe acești doi pini. Nu există alternativă dacă vrem comunicare I2C hardware, fără emulare software.

De ce SPI pe portul B: modulul SPI hardware folosește obligatoriu PB3 (MOSI) și PB5 (SCK). Pinii de control specifici ST7735 (CS, DC, RST) pot fi GPIO oarecare; i-am ales pe PB0–PB2 pentru a fi grupați lângă pinii SPI, ceea ce scurtează cablajul și reduce riscul de erori.

De ce PWM pe PD3 și PD5: pe ATmega328P, pinul PD3 este ieșirea comparatorului OC2B (Timer 2), iar PD5 este OC0B (Timer 0). Acestea sunt ieșirile de PWM hardware disponibile, care generează semnalul fără a încărca procesorul.

De ce butonul pe PD2: pinul PD2 corespunde întreruperii externe INT0. Resetarea contorului este un eveniment punctual, ideal de tratat într-o rutină de întrerupere, fără a fi nevoie de verificare repetată (polling) în bucla principală.

Lipsa conflictelor: cele trei magistrale folosesc porturi diferite — I2C pe portul C, SPI pe portul B, PWM-ul LED-ului pe portul D — deci nu există suprapuneri. Singura observație: PB5 este folosit și de LED-ul utilizator de pe placă, care va pâlpâi în timpul transmisiilor SPI; acest efect este pur cosmetic și nu afectează funcționarea.

3. Schema electrică

4. Imagini și dovezi de funcționare

Montajul complet pe breadboard

Imaginea arată sistemul asamblat pe breadboard: placa ATmega328P Xplained Mini alimentată prin USB, senzorul MPU6050, display-ul ST7735, LED-ul RGB cu cei doi rezistori de limitare și butonul de reset. Alimentarea este distribuită prin șinele laterale ale breadboard-ului.

Listă de piese

^ # ^ Componentă ^ Cantitate ^ Rol în proiect ^

1 ATmega328P Xplained Mini (placă dezvoltare) 1 coordonator central, programator on-board
2 MPU6050 (modul GY-521) — accelerometru + giroscop 3 axe 1 senzor inerțial pentru detecția mișcării (I2C, adresa 0x68)
3 LED RGB 5 mm, 4 pini, anod comun, opac 5 feedback vizual (PWM, doar canalele R+G); restul ca rezervă
4 Display TFT color 1.8”, controller ST7735, interfață SPI 1 afișare statistici și tip lovitură
5 Kit rezistențe 1/4 W, 30 valori, 600 buc, 10 Ω – 1 MΩ 1 limitare curent LED (2× 220 Ω pe R și G); pull-up I2C dacă e necesar
6 Breadboard MB-102, 830 puncte 1 suport prototipare
7 Fire dupont 20 cm, mamă-mamă, set 40 1 conexiuni breadboard ↔ Xplained Mini ↔ module
8 Fire dupont 20 cm, tată-mamă, set 40 1 conexiuni mixte (pini Xplained ↔ module)
9 Suport baterie 9V cu jack 5.5×2.1 mm 1 alimentare portabilă
10 Buton tactil PCB mini 6×6×5, 2 pini 1 reset contor lovituri

Software Design

Rezultate Obținute

Concluzii

Download

Bibliografie/Resurse

Resurse hardware

  • Datasheet ATmega328P — Microchip
  • MPU-6000/MPU-6050 Register Map and Descriptions — InvenSense
  • MPU-6000/MPU-6050 Product Specification — InvenSense
  • ST7735 datasheet — Sitronix
  • ATmega328P Xplained Mini User Guide — Microchip

Resurse software

Lucrări conexe

Export to PDF

pm/prj2026/atoader/bianca.gorgovan.1778962092.txt.gz · Last modified: 2026/05/16 23:08 by bianca.gorgovan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0