Piano Tiles

Autor: Ciuche Bianca-Andreea
Grupa: 335CA

Introducere

Proiectul curent este reprezentat de un pian electric avansat.
Acesta, pe langa functionalitatea unui pian oarecare de a emite sunete la atingerea clapelor, are cateva moduri care face utilizarea acestuia mult mai interesanta: are incorporat jocul Piano Tiles. Intr-o anumita masura, acest proiect poate fi o introducere in lumea pianului pentru incepatori, intrucat modul Piano Tiles incurajeaza invatarea unor melodii simple la pian.
Pentru a face pe plac tuturor utilizatorilor, volumul poate fi reglat cu ajutorul unui potentiometru.

Descriere generală


Pianul va avea 3 moduri:

  1. Freestyle: In acest mod, va putea fi folosita claviatura dupa propriul plac. Ledurile se vor aprinde corespunzator tastei apasate.
  2. Play game: Ledurile vor indica clapele ce vor trebui apasate. Va exista un led verde care va indica corectitudinea.
  3. Play song: Clapele devin inactive, iar buzzerul va difuza o melodie, in timp ce ledurile vor “dansa”.

Hardware Design

Lista componente:

  1. Arduino uno
  2. Buzzer
  3. Butoane
  4. Leduri
  5. Breadboard
  6. Rezistente
  7. Fire
  8. Potentiometru

Intrucat numarul pinilor de pe placuta Arduino Uno este destul de limitat, input-ul de la claviatura va fi transmis pe doar 2 pini analogici. Fiecare buton are curentul limitat de diferite rezistente, obtinand astfel rezultate diferite pe acelasi pin in functie de butonul apasat.



ASCII���{"subsource":"done_button","uid":"A2D0597C-9300-44BB-92D3-FF0515535297_1621951647095","source":"other","origin":"unknown","source_sid":"A2D0597C-9300-44BB-92D3-FF0515535297_1621951690389"}

Software Design

Etapele parcurse de program sunt urmatoarele:

  1. In setup(), se initializeaza toti pinii, timerele, iar inainte de orice, ledurile fac un joc de lumini drept introducere a jocului.
  2. In loop() exista 4 variante:
    1. daca jocul nu a inceput, ledurile de claviatura continua jocurile de lumini pana la selectia unui mod.
    2. altfel, in functie de modul ales, se apeleaza una dintre functiile getNote(), playSong(), pianoTiles().
  3. In acelasi timp, Timer-ul 1 are 3 variante (modul play song nu foloseste timer-ul):
    1. daca jocul nu a inceput, unul din ledurile rosii clipeste
    2. altfel, in functie de modul de joc, se apeleaza o functie specifica, pentru ca ledurile sa se aprinda cu un efect de rafala.

Am folosit timere, unele in mod direct, iar altele indirect prin folosirea unor functii predefinite, astfel:

  1. Timer 0: l-am folosit prin utilizarea functiei delay in functiile de jocuri de lumini.
  2. Timer 1: acesta a fost timer-ul folosit in mod explicit, ajutand in principal la controlul ledurilor.
  3. Timer 2: folosit indirect, prin utilizarea functiei tone(), functie care m-a ajutat sa controlez buzzerul.

Pe langa acestea, m-am folosit si de intreruperi externe pentru cele 2 butoane: cel de selectie si cel de start/restart. Am folosit PCINT1_vect pentru butonul de schimb de mod si PCINT2_vect pentru cel de start/restart.

Pentru controlul claviaturii, dat fiind faptul ca am folosit doar 2 pini analogici pentru 8 butoane, initial am fost nevoita sa aflu valorile de intrare corespunzatoare fiecarui buton, dupa care in functie de ce se citea de pe pinul A0 si A1, am putut deduce ce clapa a fost apasata.

Pentru a intelege cum pot controla ledurile corespunzatoare claviaturii, legate la doar 10 pini (8 pentru coloana si 2 pentru rand), am implementat functiile turnEverythingOn, turnEverythingOff, turnOnAndOffAllByColumnSideways, ledsCircle. Cu ajutorul primelor functii, am realizat un intro, iar ultima functie este apelata intotdeauna cand nu s-a selectat inca un mod.

Rezultate obtinute

Aspectul final al proiectului este urmatorul: rezultat.jpg

La urmatorul link, puteti vizualiza un video demo al functionalitatii proiectului:
Video demo

Concluzii

Proiectul s-a dovedit a fi mult mai dificil decat ma asteptam, in special pe partea de hardware. In cea mai mare parte a timpului petrecut lucrand la acest proiect am lipit fire si componente. Daca ar fi sa iau proiectul de la 0, as face lucrurile ceva mai diferit, existand multe imbunatatiri care ar putea fi facute.
In final, sunt multumita de rezultat, chiar daca sunetul poate ca nu este cel mai calitativ. Este un joculet distractiv si satisfactia vine din faptul ca a fost construit din nimic.

Download

Jurnal

25.04.2021 : Alegere tema, completare introducere si descriere generala.
29.04.2021 : Adaugare potentiometru, modificare lista componente, adaugare schema circuit.
19.05.2021 : Adaugare schema Eagle.
24.05.2021 : Adaugare descriere software.
25.05.2021 : Adaugare poze design hardware + rezultate si concluzii.
25.05.2021 : Adaugare cod sursa.
26.05.2021 : Adaugare video demo.

Bibliografie/Resurse

pm/prj2021/alazar/pianotiles.txt · Last modified: 2021/05/27 15:56 by bianca.ciuche
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