Acest proiect își propune construirea unui asistent pentru Piano Tiles bazat pe Arduino, capabil să joace complet autonom sau să sprijine un jucător uman prin notificări vizuale și audio în timp real. În modul autonom, sistemul folosește monede conductoare ale curentului electric pentru a simula apăsarea pe ecran prin impulsuri electrice; în modul asistat, îl ghidează pe jucător, indicând instantaneu unde și când a apărut o greșeală.
Scopul inițiativei este de a explora interacțiunea dintre automatizare și gameplay-ul uman, valorificând concepte de embedded systems. Ideea a pornit din dorința de a automatiza un joc mobil aparent banal (Piano Tiles) și de a-l extinde cu un asistent capabil să corecteze erorile, să rafineze sincronizarea prin feedback și chiar să concureze cu recordurile stabilite de oameni.
Proiectul oferă atât oportunitatea pentru experimenta cu senzori și cu logica de joc, ci și o fundație pentru sisteme asistive mai avansate în gaming, reabilitare sau instruire, permițând integrarea unor mecanisme elementare de învățare și adaptare prin machine learning. Combinația dintre distracție și valoare educativă transformă procesul de învățare într-o experiență mai eficientă și mai plăcută.
Assistant-ul de Gameplay pentru Piano Tiles este un proiect bazat pe Arduino ce îmbină automatizarea cu suportul activ pentru jucătorii acestui popular joc mobil. În modul autonom, sistemul folosește monede electromagnetice pentru a simula atingerile ecranului, iar în modul asistat oferă feedback vizual (LED-uri) și audio (buzzer) în timp real, ajutându-l pe utilizator să își corecteze greșelile. Scorul curent și highscore-ul sunt afișate pe un ecran LCD, iar selecția modului de joc se face simplu, prin două butoane (sânga sau dreapta).
Ideea a pornit din curiozitatea de a „păcăli” jocul cu ajutorul unui setup Arduino complet automatizat. Pe parcurs, conceptul s-a transformat într-un sistem interactiv și educativ, capabil nu doar să joace singur, ci și să-l asiste pe utilizator prin detectarea și corectarea erorilor. Asistentul încearcă permanent să depășească performanțele jucătorului, stabilind un scor de referință pe care acesta este provocat să îl bată.
Proiectul utilizează o placă Arduino Uno R3 ca unitate principală de procesare și control. Aceasta gestionează atât partea de detecție (fotosenzori), cât și partea de acționare (relee, buzzer, LED-uri, LCD, butoane). Funcționalitatea hardware este împărțită în două moduri principale:
Fotorezistori → Citire valori de lumină pentru fiecare coloană
LED-uri → Feedback vizual la detecție de erori pe fiecare coloană
Relee → Activează simularea atingerii prin monede
Butoane → Selectare mod de joc (B1 → autonom/B2 → asistat)
Buzzer → Semnal audio la detecția de greșeli ⇔ 8
LCD → Comunicație I2C ⇒ SDA ⇔ A4; SCL ⇔ A5
Proiectul este dezvoltat în Arduino IDE, care oferă un mediu ușor de utilizat pentru programarea și încărcarea codului pe placa Arduino. Tot codul este scris în C++, folosind bibliotecile standard Arduino și logică personalizată pentru implementarea scopului proiectului.
Proiectul a fost finalizat, iar toate funcționalitățile sale au fost prezentate în filmulețul de demo atașat acestei pagini.
Deși acest tip de proiect a mai fost realizat în trecut, elementul de noutate pe care eu l-am introdus constă într-un meniu de joc. În cazul proiectului meu am integrat un LCD cu ajutorul căruia pot afișa un meniu de joc în care combin două moduri de joc diferite: modul asistent, în care jucătorul primește semnale luminoase (prin LED-uri) și auditive (printr-un buzzer) atunci când a ratat un tile și modul autonom prin care proiectul în sine ”joacă” jocul de Piano Tiles, identificând tile-urile în timp real și simulând apăsarea acestora prin intermediul unui impuls electric trimis către o monedă amplasată pe ecranul unui telefon/tabletă. De asemenea, proiectul este scalabil și poate fi extins cu funcții precum dificultate progresivă sau chiar machine learning pentru a reține pattern-uri/melodii care îi vor simplifica task-urile.
Am folosit această bibliotecă pentru a controla display-ul LCD care comunică prin interfața I2C și care permite afișarea textului ce oferă informații la numele proiectului, moduri de joc, modul de joc selectat, scor, ecranul de sfărșit de joc, etc. Pentru afișare am folosit comenzi simple precum: lcd.init() - inițializează comunicarea cu ecranul LCD, lcd.backlit() - activează lumina de fundal a ecranului, lcd.print() - afișează textul specificat pe ecranul LCD, lcd.setCursor() - setează poziția cursorului unde va fi scris textul și lcd.clear() - șterge tot ce e afișat pe ecranul LCD și resetează cursorul la poziția (0, 0).
Software-ul este organizat ca o mașină cu state finite (FSM) cu două stări principale:
Logică suplimentară:
Proiectul este structurat în jurul a două moduri de funcționare:
Pentru fiecare dintre senzori am testat folosind diferite surse de lumină și de umbră și chiar diferite display-uri (arătând culorile negru/alb) urmărind valorile afișate în Serial Monitor și stabilind astfel valori personalizate de detecție a tile-urilor pentru fiecare fotorezistor.
Am reușit devoltarea unui proiect care prezintă cele două funcționalități. Proiectul nu numai că asistă jucătorul în antrenament pentru a-și corecta greșelile realizate prin mesaje sonore și vizuale, dar poate juca pe cont propriu Piano Tiles, stabilind chiar și recorduri în joc. Pentru partea de asistență, jucătorul are dreptul la 5 greșeli și este monitorizat timpul de joc în care a reușit să nu întrecă numărul maxim impus de greșeli, stabilindu-se așa noi recorduri pe baza antrenamentului. Pentru funcționalitatea autonomă, proiectul reușește să se adapteze rapidității jocului și să rezolve singur diverse melodii.
Proiectul a fost unul foarte interesant, care m-a ajutat foarte mult să înțeleg conceptele predate în cadrul laboratorului. Pot spune ca a fost o experiență distractivă în același timp datorită faptului că am avut parte de prima experiență practică pentru dezvoltarea unui proiect, un lucru pe care mi l-am dorit mult timp în timpul facultății. Am avut parte de câteva dificultăți pe care am reușit să le depășesc după ce am urmărit mai multe tutoriale pe internet, însă acestea m-au ajutat să înțeleg cu adevărat funcționalitatea șu utilitatea componentelor utilizate.
05.05.2025 - Am decis tema proiectului și am realizat descrierea inițială a acestuia.
09.05.2025 - Am realizat schema eletrică în Tinkercad.
10.05.2025 - Am comanda primele componente.
12.05.2025 - Am ridicat componentele și am asamblat prima parte a proiectului.
13.05.2025 - Am dat comandă de componentele lipsă.
15.05.2025 - Am ridicat restul componentelor.
18.05.2025 - Am asamblat întregul proiect și am testat funcționalitatea componentelor.
22.05.2025 - Am dezvoltat și am testat partea de software a proiectului.
25.05.2025 - Am realizat testarea finală, videoclipurile pentru demo și am incorporat proiectul într-o cutie pentru a realiza stilizarea proiectului.