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:
Surse 3rd-party:
Funcționalități:
Algoritmi și structuri:
Funcții implementate (etapa 3):
Laboratoare utilizate:
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.
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.
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