This shows you the differences between two versions of the page.
pm:prj2021:alazar:pianotiles [2021/04/25 20:02] bianca.ciuche |
pm:prj2021:alazar:pianotiles [2021/05/27 15:56] (current) bianca.ciuche |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Piano Tiles ==== | ==== Piano Tiles ==== | ||
- | Autor: Ciuche Bianca-Andreea | + | Autor: Ciuche Bianca-Andreea\\ |
Grupa: 335CA | Grupa: 335CA | ||
=== Introducere=== | === Introducere=== | ||
- | Proiectul curent este reprezentat de un pian electric avansat. | + | 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. | + | 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ă=== | === Descriere generală=== | ||
- | {{ :pm:prj2021:alazar:schemaPianoTiles.png }}\\ | + | {{ :pm:prj2021:alazar:pianotilesschema.png?700 }}\\ |
Pianul va avea 3 moduri: | Pianul va avea 3 moduri: | ||
- **Freestyle**: In acest mod, va putea fi folosita claviatura dupa propriul plac. Ledurile se vor aprinde corespunzator tastei apasate. | - **Freestyle**: In acest mod, va putea fi folosita claviatura dupa propriul plac. Ledurile se vor aprinde corespunzator tastei apasate. | ||
Line 15: | Line 17: | ||
=== Hardware Design=== | === Hardware Design=== | ||
- | Lista piese: | + | Lista componente: |
- | ^ Nume piesa ^ Numar ^ | + | - Arduino uno |
- | | Arduino uno | 1 | | + | - Buzzer |
- | | Butoane | 11 | | + | - Butoane |
- | | Buzzer | 1 | | + | - Leduri |
- | | Leduri albe | 16 | | + | - Breadboard |
- | | Leduri rosii | 3 | | + | - Rezistente |
- | | Leduri verzi | 1 | | + | - Fire |
- | | Breadboard | 1 | | + | - Potentiometru |
- | | Rezistente | | | + | |
- | | Fire | | | + | 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. |
+ | |||
+ | {{ :pm:prj2021:alazar:PianoTilesTinkercad.png?700 }}\\ | ||
+ | |||
+ | {{ :pm:prj2021:alazar:PianoTschema.png?700 }}\\ | ||
+ | |||
+ | {{ :pm:prj2021:alazar:pianotilesfizic.jpeg?700 }}\\ | ||
+ | |||
=== Software Design=== | === Software Design=== | ||
+ | Etapele parcurse de program sunt urmatoarele: | ||
+ | - In ''setup()'', se initializeaza toti pinii, timerele, iar inainte de orice, ledurile fac un joc de lumini drept introducere a jocului. | ||
+ | - In ''loop()'' exista 4 variante: | ||
+ | - daca jocul nu a inceput, ledurile de claviatura continua jocurile de lumini pana la selectia unui mod. | ||
+ | - altfel, in functie de modul ales, se apeleaza una dintre functiile ''getNote()'', ''playSong()'', ''pianoTiles()''. | ||
+ | - In acelasi timp, Timer-ul 1 are 3 variante (modul play song nu foloseste timer-ul): | ||
+ | - daca jocul nu a inceput, unul din ledurile rosii clipeste | ||
+ | - 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: \\ | ||
+ | - Timer 0: l-am folosit prin utilizarea functiei ''delay'' in functiile de jocuri de lumini. \\ | ||
+ | - Timer 1: acesta a fost timer-ul folosit in mod explicit, ajutand in principal la controlul ledurilor. \\ | ||
+ | - 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=== | === Rezultate obtinute=== | ||
+ | Aspectul final al proiectului este urmatorul: | ||
+ | {{ :pm:prj2021:alazar:rezultat.jpg?700 }}\\ | ||
+ | |||
+ | |||
+ | La urmatorul link, puteti vizualiza un video demo al functionalitatii proiectului:\\ | ||
+ | [[https://youtu.be/VjfZu2g_hVc|Video demo]] | ||
+ | |||
=== Concluzii=== | === 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=== | === Download=== | ||
+ | |||
+ | {{:pm:prj2021:alazar:biancaciuche:335ca_ciuchebianca_pianotiles.zip|Cod sursa}}\\ | ||
+ | |||
=== Jurnal=== | === Jurnal=== | ||
- | //25.04.2021// : Alegere tema, completare introducere si descriere generala. | + | //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=== | === Bibliografie/Resurse=== | ||
+ | {{pm:prj2021:alazar:biancaciuche:piano_tiles.pdf|PianoTiles.pdf}} \\ | ||
+ | {{:pm:prj2021:alazar:biancaciuche:335ca_ciuchebianca_pianotiles.zip|Cod sursa}}\\ | ||
+ | [[https://youtu.be/VjfZu2g_hVc|Video demo]]\\ | ||
+ | [[https://www.instructables.com/How-to-Multiple-Buttons-on-1-Analog-Pin-Arduino-Tu/|How to connect multiple buttons to one pin]]\\ | ||
+ |