This is an old revision of the document!
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:
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ă.
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.
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.
twi_start / twi_write / twi_read_ack / twi_read_nack / twi_stop din driverul de la Lab 6.HITS: 24SHOT: FOREHANDPOWER: HIGHSWING: 320 deg/s| 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 |
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.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.
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.
^ # ^ 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 |