This is an old revision of the document!
Cu totii ne-am plictisit de jucariile clasice care sunt mereu vesele si care inspira un aer pozitiv. Eu o sa fac o jucarie pasiva-agresiva care va impartasi ura si glume, o jucarie mai amuzanta care nu este detinata copiilor, va fi fioroasa cu ochii rosii si o voce agresiva, dar sub o cochilie safe de baby yoda.
Jucăria este compusă dintr-un modul principal cu microcontroler, senzori de mișcare, boxa portabila, LED-uri rosii.
Jucaria va avea un corp de baby yoda in care voi pune piese hardware ca sa devina “inteligenta”. Aceasta are 2 butoane pe brate ca sa poti interactiona cu ea, dar nu doar atat, si un accelerometru (WOW), astfel sa-si dea seama daca o zgudui prea tare sau daca o arunci in sus. Foloseste o tehnologie wireless foarte avansata numita Bluetooth ca sa se conecteze la (TOATE) boxele portabile pornite in jur si sa-si faca glasul auzit (E si o unealta de terorism din acest motiv). Are mai multe interactiuni gata de folosit de catre useri, este rezistenta, lipita si rezista la cazaturi (si la copii de 3 ani, am testat).
Toate modulele comunică cu microcontrolerul (ESP32 sau similar). Codul rulează local, cu opțională conectare la internet pentru generarea de replici.
Poza prototip 1:
Poza prototip 2:
Poza dupa lipit complet:
Platformă: Arduino IDE
Librării folosite:
* `SPI.h`, `SD.h` – pentru accesul la cardul SD (Lab 4, Lab 5) * `BluetoothA2DPSource.h` – pentru transmiterea audio prin Bluetooth (neacoperit direct în laburi, dar extindere bazată pe conceptele de periferice) * `Wire.h`, `Adafruit_Sensor.h`, `Adafruit_ADXL345_U.h` – pentru citirea valorilor de la accelerometrul ADXL345 (Lab 2) * `math.h`, `Arduino.h`
Surse 3rd-party folosite:
* `Adafruit_ADXL345_U` – pentru comunicarea I2C cu senzorul de mișcare * `BluetoothA2DPSource` – pentru streaming audio prin Bluetooth
Funcționalități implementate:
1. Inițializare SD card (Lab 4, 5) 2. Citirea fișierelor WAV și redarea lor prin Bluetooth A2DP 3. Mapping intensitate sunet → luminozitate LED PWM (Lab 1, PWM pe ESP32 cu `ledcWrite`) 4. Control butoane cu debounce (Lab 1) 5. Memorare secvențe LED-uri și joc de tip Simon Says (Lab 6, interactivitate și jocuri cu LED-uri) 6. Detectare mișcare (shake) cu ADXL345 pentru declanșarea unui fișier audio (Lab 2) 7. Aprindere LED tip breathing (Lab 1: PWM control) 8. Debounce avansat și detecție double-tap pentru inițializarea jocului (Lab 1) 9. Secvenșă aleatoare, comparare input utilizator, niveluri progresive, feedback LED și audio (Lab 6)
Algoritmi și structuri implementate:
* Debounce software cu variabile temporale pentru butoane * Generare secvențe pseudo-aleatoare cu `random()` (Lab 1) * Comparație input utilizator cu secvența memorată (joc de memorie) * Citire accelerometru și calcul vector accelerație totală cu `sqrt(x^2 + y^2 + z^2)` * Control PWM pe ESP32 cu `ledcWrite()` și `ledcAttach()` (Lab 1 ESP32 extras) * Control redare audio prin callback-uri de stream
Etapa 3: Surse și funcții implementate
* `get_audio_data()` – callback care trimite datele audio către Bluetooth * `playFile()` – redare fișier WAV de pe SD * `startMemoryGame()`, `showSequence()`, `handleMemoryGame()`, `gameOver()`, `gameWin()` – logica jocului Simon * `setup()` – inițializare: SD, senzor, PWM, serial, random seed * `loop()` – bucla principală: breathing, control butoane, shake, joc memorie
Laboratoare folosite:
* Lab 0: introducere Arduino IDE și funcționalități de bază * Lab 1: PWM și control butoane cu debounce * Lab 2: accelerometru I2C ADXL345, comunicare I2C * Lab 3: funcții și lucrul modular * Lab 4: interfața cu card SD, scriere/citire fișiere * Lab 5: playback fișiere audio WAV * Lab 6: implementare joc pe ESP32/Arduino (Simon Game)
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.