This is an old revision of the document!


FRIENDLY Baby Yoda

Introducere

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.

Prezentarea pe scurt a proiectului vostru:

  • Jucarie care se conecteaza la orice boxa portabila (Broadcast)
  • Apesi pe butoane ca sa auzi melodii / audio-uri amuzante
  • Led-uri care se aprind in functie de intensitate
  • Joc interactiv de memorie
  • Joc interactiv de aruncat in sus

Descriere generală

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).

Hardware Design

Toate modulele comunică cu microcontrolerul (ESP32 sau similar). Codul rulează local, cu opțională conectare la internet pentru generarea de replici.

Aici puneţi tot ce ţine de hardware design:

  • Microcontroler ESP32
  • 2 Led-uri Rosii
  • Modul Card Sd cu operatii de read si write (Nu mp3)
  • Modul Accelerometru
  • 2 rezistente de 220 Ohm
  • Baterie 5v reincarcabila
  • Cablu Micro Usb → Micro usb
  • Placa de dezvoltare pentru lipit
  • Card Micro Sd minim 2GB

Poza prototip 1:

Poza prototip 2:

Poza dupa lipit complet:

Software Design

Descrierea codului aplicației (firmware):

Platformă: Arduino IDE

Librării folosite:

  • SPI.h, SD.h – acces card SD (Lab 4, Lab 5)
  • BluetoothA2DPSource.h – streaming audio prin Bluetooth
  • Wire.h, Adafruit_Sensor.h, Adafruit_ADXL345_U.h – accelerometru ADXL345 (Lab 2)
  • math.h, Arduino.h

Surse 3rd-party:

  • Adafruit_ADXL345_U – comunicare I2C cu senzorul de mișcare
  • BluetoothA2DPSource – streaming audio A2DP

Funcționalități:

  • Inițializare SD card
  • Redare fișiere WAV prin Bluetooth
  • LED-uri controlate PWM în funcție de intensitatea sunetului
  • Butoane cu debounce
  • Joc de memorie cu LED-uri și butoane
  • Detectare mișcare (shake) cu accelerometru
  • LED breathing în stare de idle
  • Double-tap pentru lansarea jocului
  • Feedback audio + LED la fiecare nivel

Algoritmi și structuri:

  • Debounce software cu timere
  • Generare secvențe aleatoare cu random()
  • Comparare input utilizator cu secvență memorată
  • Calcul accelerație totală (sqrt x²+y²+z²)
  • Control PWM cu ledcWrite și ledcAttach
  • Callback-uri audio pentru Bluetooth

Funcții implementate (etapa 3):

  • get_audio_data() – trimite date audio prin Bluetooth
  • playFile() – redă fișier audio de pe SD
  • startMemoryGame(), showSequence(), handleMemoryGame(), gameOver(), gameWin()
  • setup(), loop()

Laboratoare utilizate:

  • Lab 0: Folosire led-uri, un fel de semafor.
  • Lab 1: Am folosit PWM și debounce ca sa nu se apese butoanele de prea multe ori
  • Lab 2: Am folosit timere pentru jocul interactiv de memorie.
  • Lab 5: Am folosit conceptele din lab 5 despre protocolul SPI si card SD pentru a citi fisiere .wav de pe SD si a le reda prin Bluetooth folosind ESP32.
  • Lab 6: Am folosit protocolul I2C din lab 6 pentru a citi acceleratia de la senzorul ADXL345 prin comenzi Wire pe ESP32.

Rezultate Obţinute

In final am obtinut o jucarie interactiva, draguta, cu umorul meu. O jucarie cu care ma pot lauda la rude, sa ma joc cand ma plictisesc, sa o folosesc pe post de boxa portabila. Functioneaza, e rigidida, nu se strica usor, reincarcabila si usor sa pun melodii noi.

Concluzii

Well, proiectul a fost un succes. Pot sa afirm ca am invatat o gramada de skill-uri noi, desi ma asteptam sa fie mult mai liniar procesul. Am inceput fara sa stiu cum se foloseste un breadboard, cu un tutorial de 10 minute in care imi explica cum sunt pinii uniti, cum sa nu-ti arzi componentele, cum sa fac un simplu circuit cu un led, cum sa folosesc esp32, cum sa codez in arduino IDE, cum sa lipesc componente, am si cusut, cum ar trebuii sa ai un plan inainte sa actionezi, de asemenea desi nu a ajuns in varianta finala (din fericire) am invatat de Rest Api , comunicare http pentru a obtine date (datorita multor erori cu modulele de card SD 3 module in total si lipsei de memorie pentru esp32 stocam in cloud audio-urile si le extrageam pe bucati , dar asta afecta calitatea). Un succes ingineresc si am obtinut o jucarie interactiva si skill-uri noi.

Download

Aici postez varianta finala si versiunile / variantele de testing, deoarece am avut mult prea multe erori.

Versiune finala: final_baby_yoda.zip

Versiuni extra: versiuni_testari.zip

Pentru a executa codul: deschide Arduino IDE, instaleaza toate bibliotecile din include, apoi apasa pe upload si tine apasat cand apare connecting pe butonul de boot pana se scrie in memorie, apoi poti elibera, asteapta 2-3 secunde sa se conecteze la boxa si esti good to go.

Jurnal

Aici o sa notez challange-urile mele si cum progresul nu a fost liniar.

Initial totul a fost bine, inainte sa adaug audio, aveam un breadboard cu 4 butoane, 2 led-uri , 2 rezistente si un detector de obiect in fata. Se printa cand apasam butonul, aveam debounce, led-urie erau aprinse si detectorul de obiect afisa cand ceva ii intra in fata, simteam cum proiectul nu o sa-mi ia chiar asa mult, parea simplu tot, eram increzator ca sa adaug audio e un simplu upload pe placuta, dar nu a fost deloc asa… Ma gandeam deja cum o sa adaug voice recognition si prompt-uri de gpt, deoarece totul e simplu si merge de la sine, am avut o zi buna in care ma simteam invingator.

A 2-a etapa din crearea proiectului a fost prin implementarea audio-ului, am invatat ce e un convertor analogic digital si am aflat ca nu am, de asemenea nu se gasea vreunul la un pret accesibil si care sa vina repede, asa ca m-a lovit o idee, ESP32 are bluetooth, sigur e usor sa pui sunet pe o boxa portabila, hai sa incerc asa ceva. Intai as putea sa pun un sunet random, ceva ce pot genera cu o functie , ca sa verific daca chiar ma pot conecta la boxa. Am aflat ca exista biblioteci pentru esp32 care chiar ar face chestia asta, totusi… nu prea functioneaza. Am stat sa citesc documentatia https://github.com/pschatzmann/ESP32-A2DP vreo 4 ore, simteam ca o fi totul ok, daaaaar, functiile nu mai mergeau, nu mai erau compatibile intre ele, nu mergeau cu esp-ul meu cred, asa ca am zis call it a day si am lasat-o pe ziua urmatoare. Ziua urmatoare citit alta documentatie de la https://github.com/cfint/esp32-a2dp-sink, SI MAI RAU, NU MERGEA NIMIC, nu mai tin minte clar erorile, dar era imposibil.

Doborat de inposibilitatea de a reda audio, am zis sa intreb inteligenta artificiala ca sigur stie. Am pierdut 8 ore (fara gluma) de rotit in cerc, am folosit combo-ul suprem de Claude, Chat GPT si Gemeni AI, dar fiecare venea cu o alta interpretare. Gemeni Ai zicea ca e imposibil sa faci asta, poti doar sa pui un audio si treb sa te conectezi incontinuu ceea ce vine cu mare delay, Chat Gpt e antrenat pe o versiune mult mai veche a celor 2 biblioteci si mereu venea cu cod vechi, am incercat sa ii parsez documentatia si codul de mai multe ori, totusi, nu mergea, nu voia sa inteleaga, am schimbat si versiunile de mai multe ori, dar NIMIC, nu mergea deloc, Claudette venea cu cod care chiar compila si ma uimea, doar ca facea complet altceva, incerca sa il faca pe esp32 sa se conecteze la un device ca el sa primeasca date, nu sa fie el sursa, ceea ce m-a indus in eroare grav rau de tot. Doborat nu stiam ce sa fac, nu mergea nimic, parea ca singura solutie ar fi sa cumpar modul dac si buffer si sa le conectez, desi nici asa nu aveam siguranta ca ar merge. Ideea cu boxa era doar sa fac un prototip ca apoi sa il modific in dac, desi simteam cum ar fi mult mai ok sa cumpar o boxa mica, sa o separ de placuta si sa o pun in cap-ul yoda-ului deoarece e greu sa bati calitatea unui produs extern cu baterie interna si so on. De asemenea pentru boxe bune mi-ar trebuii si amplificator, ceea ce din nou n-am gasit la pret ok. Nu eram dispus sa platesc 200 lei. Apoi am incercat singur sa fac codul cu Bluetooth.h, nu ma asteptam sa mearga, am gasit o metoda sa dau play la un vector de valori si BOOOM A MERS.

AUDIO FUNCTIONAL in functie de o functie matematica sinusoida. Asta da succes, de aici o sa fie totul foarte usor, dar nu a fost deloc asa. IARA ERORI, nu pot pune un audio al meu desi

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/rnedelcu/george.bruma.1748429676.txt.gz · Last modified: 2025/05/28 13:54 by george.bruma
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