Piano-Tiles-inator

Nume: Vlăsceanu Denis-Mihai
Grupa: 331CA

Introducere

Proiectul presupune asamblarea unui robot format din 4 “degete” mecanice. Cu ajutorul unor mini servo-motoare și a unor senzori de luminozitate, acesta va fi capabil de a interacționa cu jocul “Piano Tiles” rulat pe un dispozitiv cu touchscreen (telefon sau tabletă). Scopul lui este de a atinge un scor cât mai mare în “Piano Tiles” fără a fi nevoie de interacțiune umană.

Cu ceva timp înainte găsisem pe YouTube videoclipuri arătând diverse idei de proiecte cu Arduino, iar printre acestea erau câteva implementări de robot jucător de Piano Tiles. Dintre acestea, eu am ales-o pe cea care implică folosirea unor servo-motoare și a unor stylus-uri, deoarece mi s-a părut cea mai interesantă.

Descriere generală

Robotul constă în 4 “brațe” mecanice improvizate, fiecare dintre ele fiind format dintr-o bară lungă metalică. La baza fiecărui braț se află câte un servo-motor, iar în vârf este câte un stylus cu vârf capacitiv.

De asemenea, pentru fiecare există câte un fotorezistor, lipt de ecranul telefonului/tabletei, care va detecta nivelul de luminozitate, astfel oferind posibilitatea robotului de a distinge dreptunghiurile negre din joc de cele albe/albastre. Astfel, la detectarea unui dreptunghi negru pe una dintre coloane, va fi activat servo-motorul corespunzător și va fi simulată atingerea unui deget pe ecran pe căsuța respectivă.

Cele 4 “brațe” ale robotului funcționează independent unul de celălalt.

Schema bloc

Hardware Design

Componente folosite:

  • Arduino Uno
  • Breadboard 830 puncte MB102
  • 4 servo-motoare SG90
  • 4 fotorezistori 5528 LDR
  • 4 mini pixuri stylus capacitive
  • fire dupont tată-tată 20cm
  • 8 fire dupont mamă-tată 20cm
  • rezistențe

Schema electrică

Simularea în Tinkercad

Software Design

Mediu de dezvoltare: Arduino IDE 2.1.0

Librării externe: Servo.h - pentru utilizarea funcțiilor necesare controlării mini-servomotoarelor

Descriere firmware

- Librăria inclusă “Servo.h” + variabile globale.

- Funcții custom:

  • for (int i = 1; i ⇐ 4; i++) {servoPressi};
  • Fiecare dintre aceste 4 funcții îndeplinește aceeași acțiune: activează servomotorul corespunzător astfel încât să simuleze mișcarea de “touch” pe un ecran.
void servoPress_i() {
  for (pos = 0; pos <= 30; pos += 5) {
    servo_i.write(pos);
    delay(delay_var);
  }
  for (pos = 30; pos >= 0; pos -= 5) {
    servo_i.write(pos);
    delay(delay_var);
  }
}

- setup():

  • inițializează interfața serială.
  • seteaza valorile initiale ale variabilelor globale (valoarile de delay a apăsării, valoarea de detectare a culorii “negru”).
  • atașează servomotoarele de pin-urile la care sunt conectate.
  • setează LED-urile pe modul LOW - astfel ele rămân stinse by default.
  • inițializează “mâna” robotică prin apelarea funcțiilor “servoPresi” o singură dată.

- loop():

  • sunt afișate, pe interfața serială, valoarile instantanee ale fotorezistorilor.
  • independent, pentru fiecare “deget” în parte, fotorezistorul corespunzător citește constant valoarea luminozității.
  • atunci când unul dintre fotorezistori detectează o valoare suficient de mică, atunci se întâmplă 2 lucruri: se aprinde LED-ul corespunzător pentru puțin timp, și se apelează funcția respectivă de apăsare “servoPressi
if (analogRead(sensorPin_i) <= darknessValue) {
    delay(decr_delay);
    digitalWrite(ledPin_i, HIGH);
    servoPress_i();
  } else {
    digitalWrite(ledPin_i, LOW);
}

Rezultate Obţinute

WIP

Concluzii

WIP

Download

WIP

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

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.

Jurnal

  • sfârșitul lui 2022 - începutul lui 2023: Iau hotărârea de a crea un robot jucător de Piano Tiles pentru proiectul de PM din semestrul ce avea să urmeze.
  • 01-03 Mai 2023: Ideea de Piano-Tiles-inator este aprobată, iar implementarea sa este gândită. Numele de Piano-Tiles-inator ia naștere în aceeași perioadă.
  • 03-05 Mai 2023: Componentele necesare sunt comandate, livrate și preluate.
  • 06 Mai 2023: Primele testări ale funcționalității componentelor fizice au loc.
  • 07 Mai 2023: Pagina de DokuWiki dedicată Piano-Tiles-inatorului este creată.
  • 24 Mai 2023: Este adăugată pe wiki secțiunea schemelor electrice/hardware.
  • 28 Mai 2023: Este adăugată pe wiki secțiunea de software. Ia naștere “mâna” robotică și devine 90% funcțională.
  • În curând pe ecrane

Bibliografie/Resurse

WIP

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

Export to PDF

pm/prj2023/apredescu/pianotilesinator.txt · Last modified: 2023/06/02 20:52 by denis.vlasceanu
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