Student: Călinescu Claudia 331CA
Proiectul are următoarele funționalități:
Dintotdeauna mi-am dorit un instrument muzical ușor de folosit, care să fie mic și portabil. Un instrument usor de folosit pentru programatori ar avea clape asa că pianul mi s-a părut cea mai bună idee. În plus, este foarte util ca anti-stres (l-am testat cu succes pentru temele de la ASC).
Am simulat structura unei claviaturi (formată din butoane simple) și al unui difuzor. Pentru selectarea modului curent de lucru (înregistrare, redare, interpretare) al pianului am folosit un panou de control format din butoane și leduri de stare.
Schemă bloc
Componentele interacționează prin intermediul micro-controllerului, blocurile Claviatură și Butoane de control reprezintă blocuri de input iar blocul Difuzor este, bineînțeles, bloc de output.
Blocul Claviatură conține opt butoane pe care utilizatorul le va folosi pentru a activa notele gamei.
Blocul Butoane de control reprezintă panoul de comandă cu ajutorul căruia se va putea selecta modul de lucru. Blocul conține trei butoane:
Acest bloc are atașate leduri pentru semnalizarea stării curente.
Blocul Difuzor este cel care redă semnalul modulat in funcție de fecvența notei curente.
Design-ul hardware al pianului porneste de la cablajul imprimat al primei etape. La acest montaj am adaugat câteva extensii pentru implementarea blocurilor descrise mai sus.
Schemă claviatură
Componente:
Butoanele sunt legate la portul C al micro-controllerului și la masă prin rezistențele de 100Ω. Pinii portului C vor reprezenta pini de intrare pentru micro-controller.
Schemă butoane de control
Componente:
Butoanele și ledurile sunt legate la portul A al micro-controllerului și la masă prin rezistențe de 100Ω, respectiv 1kΩ.
Schemă difuzor
Componente:
Difuzorul este legat la unul din pinii de ieșire PWM al micro-controllerlui și legat la masă printr-un condensator.
Software-ul a fost scris în vim și compilat cu avr-gcc. Ca sistem de operare folosit a fost Ubuntu11.4.
Module software:
La fiecare 10ms (aces interval este setat cu ajutorul timerului 2), logica de control parcurge urmatorii pași în funcție de modul curent de funcționare al programului:
Vefică butoanele apăsate (claviatura) și alcatuiește o mască de biți apăsati. Acestă mască este comparată cu masca de la pasul anterior, biții care nu au fost apăsați în pasul anterior sunt ignorați (se evită astfel fenomenul de bouncing). Dintre butoanele apăsate în ambii pași (pasul curent și anterior) se alege o singura notă pentru redare, și anume nota cea mai inaltă (astfel se tratează cazul apăsării simultane pe mai multe butoane). În cazul în care nu a fost apăsat nici un buton de claviatură se oprește ieșirea PWM.
Prin setarea modului REC, notele alese după algoritmul prezentat la modul anterior sunt salvate intr-un array de note. Fiecare nota are o durata și o frecventă. În cazul in care nota curentă are aceeasi frecventa cu nota anterioară se prelungește durata notei anterioare, altfel se introduce o noua nota în array. În cazul în care nu a fost apăsat nici un buton de claviatură, se introduce în sir (sau se prelungește) o “nota mută”. Nota mută nu are o frecvența validă, ea doar închide canalul PWM.
Se redau notele salvate în array în odinea în care au fost stocate. În cazul în care se gaseste o “nota mută” se închide ieșirea PWM. În acest mod nu sunt luate în considerare apăsările butoanelor de claviatură.
Pianul electric este primul proiect de acest tip pe care l-am făcut de la coadă la cap. A fost destul de interesant să mă gadesc cum să proiectez plăcuta și cum s-o conectez cu cablajul existent. În plus, acum am un dispozitiv amuzant cu care pot să îi stresez pe cei din jur :D