Table of Contents

Recording 3 octave piano

Autor: Timpuriu Mircea

Grupa: 334CC

Introducere

Descriere

Proiectul consta in realizarea unui pian cu 7 butoane, cu o gama de 3 octave disponibile, care pe langa posibilitatea de free play, are si functionalitate de inregistrare. O melodie poate fi inregistrata si redata prin intermediul unor butoane de control si a unui buzzer, iar parametri precum tempo-ul si notele vor fi vizibile pe un ecran LCD si modificabile cu ajutorul unor potentiometre.

Scop

Scopul proiectului este crearea unui instrument muzical, cu posibilitati multiple, pentru divertisment.

Descriere generala

Fiecare dintre cele 7 butoane va reprezenta o nota muzicala principala, a carei nume va fi vizibila pe ecranul LCD sub ele, iar la apasarea unui buton, buzzer-ul va reda nota muzicala apasata.

Pe langa butoanele principale, avem butoanele de control: REC va retine notele apasate, durata apasarii si pauzele dintre note din momentul apasarii acestuia intr-o structura interna, iar butonul PLAY va reda pe buzzer melodia salvata in structura.

De asemenea, vor exista 2 potentiometri, primul este RANGE, prin intermediul cauia se poate modifica gama notelor disponibile (ex. daca, la un moment dat, sunt disponibile notele de la E3 pana la D4 pe butoane, rotirea potentiometrului va putea shifta gama astfel incat sa poata fi redate note de la G3 la F4 pe cele 7 butoane). Astfel, pianul se extinde pe 3 octave, note muzicale de la C3 la B5. Al doilea potentiometru este TEMPO, care poate modifica viteza de redare a unei melodii inregistrate, de la 0.5x pana la 2x.

Toate modificarile legate de schimbarea notelor, schimbarea de tempo, si notele muzicale in sine vor putea fi observate pe ecranul LCD de sub cele 7 butoane principale.

Schema bloc

Hardware design

Componente

Schema electrica

Schema hardware a fost realizata conform cu schema bloc prezentata anterior. In urmatoarele scheme vor fi prezentate in detaliu conexiunile dintre placuta Arduino si elementele exterioare.

In prima imagine sunt descrise conexiunile placii Arduino cu ecranul LCD (respective rezistorul si potentiometrul aferente), dar si cu buzzer-ul. Buzzer-ul este legat la pin-ul digital 5 si la GND, iar pinii conectati la LCD sunt dupa cum urmeaza: pin-ul de enable este pin-ul digital 4, pin-ul de register select este pin-ul digital 13, iar ca pini de date au fost folositi pinii analogici de la 0 la 3(pinii 14-17), folositi ca pini digitali. De asemenea se vede conexiunea cu sursa de putere.

A doua imagine descrie conexiunile clapelor, butoanelor de control si potentiometrelor de control ale pianului cu placuta Arduino. Cele 7 clape sunt conectate la pinii digitali de la 6 la 12, cele doua butoane de control la pinii digitali 2-3, iar potentiometrele la pinii analogici A4-A5 (18-19). Imaginea intreaga de ansamblu a schemei electrice este disponibila in sectiunea Download.

Software design

Software-ul a fost scris in IDE-ul Tinkercad in faza incipienta, dupa care a fost continuat in Arduino IDE. Componenta software este reprezentata de fisierul recording_3_octave_piano.ino, care contine urmatoarele functii:

Pianul a fost programat astfel incat sa emita sunete monofonice, iar logica programului este urmatoarea: la fiecare intrerupere generata de Timer1, adica la fiecare 10ms, se va verifica daca este apasata vreo clapa.

In functia de intrerupere ISR(TIMER1_COMPA_vect), sunt initializate intreruperile pentru butoanele de control, asa ca, daca in timpul unei intreruperi, este sesizata apasarea butonului REC, va incepe inregistrarea, si se va opri redarea, stergandu-se inregistrarea anterioara, daca este cazul, iar daca se apasa butonul PLAY, se va opri si se va reda inregistrarea.

In timpul inregistrarii, retinerea se va face in felul urmator: daca o clapa a fost apasata si contorizata, dar fie a fost apasata alta clapa, fie a fost luat degetul de pe clapa, ambele fiind actiuni care declanseaza oprirea contorizarii, se va lua frecventa clapei apasate, dar si durata de timp contorizata, si se vor salva in 2 array-uri. La fel si in cazul notei silentioase, daca se apasa o clapa, se va lua frecventa 0 si durata de timp a ei si se vor introduce in array. Inregistrarea se opreste fie la apasarea butonului PLAY, fie dupa 10 secunde de la inceperea inregistrarii.

In timpul redarii, array-urile vor fi parcurse pentru a reda melodia inregistrata. Cand o nota urmeaza la rand, se ia durata acesteia si se imparte la valoarea tempo-ului. Dupa care, la fiecare 10ms, se va reda prin buzzer acea nota (sau nota silentioasa, dupa caz), si se va scadea din durata de redare a notei, pana cand scade sub 0, moment in care va fi redate urmatoarea nota din array.

Citirea potentiometrelor de control este comandata in functia loop(), si realizata in functia ISR(ADC_vect). Valorile celor doua potentiometre sunt citite constant, pentru a observa eficient modificarea acestora, si implicit, a parametrilor pe care ii controleaza. In functia ISR(ADC_vect), dupa ce se identifica pin-ul in cauza, se calculeaza in functie de valoarea potentiometrului fie gama de note(de la C3 la B5), fie tempo-ul (de la 0.5x la 2x), schimbari care se pot observa in timp real, in cazul inregistrarii si a redarii.

Ecranul LCD este programat sa arate in partea stanga valorile celor 7 note la momentul respectiv (modificabile prin potentiometru), in dreapta jos tempo-ul, iar in dreapta sus starea de functionare a pianului (nimic: interpretare libera, REC: inregistrare, STOP: inregistrare oprita, interpretare libera, PLAY: redarea inregistrarii).

Rezultate Obţinute

Schema fizica finala obtinuta a proiectului este prezentata in urmatoarele imagini:

Concluzii

A fost un proiect interesant de realizat. Am intampinat anumite obstacole pe parcurs, cum ar fi improvizarea pinilor pentru ecranul LCD, si principiul de functionare al acestuia, dar mai ales cu memoria de inregistrare a placutei Arduino si impactul pe care l-a avut asupra functionarii buzzer-ului, dar, in ciuda acestor probleme intampinate, sunt multumit de rezultatul final.

Download

Codul sursa al proiectului

Schema electrica a proiectului

Jurnal

Bibliografie/Resurse

LCD 1602

Buzzer si note muzicale

Export to PDF