Table of Contents

MIDI Piano

Introducere

Proiectul consta in realizarea unui pian ce reda output-ul folosind un sintetizator MIDI, astfel sunetele vor avea o calitate mult mai buna comparativ cu cele care ar fi fost produse din generare de PWM.
Scopul proiectului este obtinerea unui dispozitiv asemanator unui pian, insa capabil sa emuleze o gama mai mare de sunete (ex. chitara, harpa, toba etc.)

Descriere generală

Componenta de baza a proiectului o reprezinta shield-ul VS1053B cu care se poate comunica prin intermediul microcontroller-ului ATMEGA324A.
Butoanele disponibile vor reprezenta 8 note dintr-o singură octavă.
De asemenea, in proiect am introdus si un buton auxiliar ce poate fi folosit pentru a schimba instrumentul curent.

Mod de functionare

  1. Utilizatorul apasa unul din cele 8 butoane puse la dispozitie de catre dispozitiv
  2. Outputul este directionat catre sintetizatorul MIDI prin intermediul unei interfete seriale
  3. Sintetizatorul ia aceasta informatie si o decodifica, producand noi sunete. Aceasta secventa de valori va fi pusa la iesirea de mufa jack (ca input pentru sintetizator o sa fie selectat instrumentul muzical ce va fi emulat - acest lucru este setabil prin intermediul unui buton -).
  4. Boxele redau sunetul/sunetele

Schema bloc

Hardware Design

Listă piese

Piese
1. Boxe cu jack
2. 9 Butoane
3. Shield VS1053 pentru Arduino
4. Fire de legatura (mama-mama si tata-mama)
5. Acumulator pe USB
6. 2 X breadbord mic

Schema Electrică

Rezultatele Obtinute

In urma simularii, rezultatele au fost cele asteptate. Placuta Atmega primeste pe pinii de pe port-ul A semnale, pe care le transmite catre shield-ul VS1053B, prin intermediul interfetei seriale (USART). Comunicatia dintre cele doua are loc folosind protodolul MIDI (8 biți de date, 1 bit de stop, fără paritate). De aici, pe baza instrumentului selectat de catre utilizator, shield-ul va trimite catre boxele conectate, o serie de sunete (conforme cu butoanele apasate - fiecare buton este encodat ca fiind o anumita nota muzicala din gama instrumentului).

Poza cu proiectul final

Software Design

Ca mediu de dezvoltare al proiectului am folosit sublime text 3.
Pentru comunicatia dintre shield si placuta de PM m-am folosit de codul prezentat la laboratorul 1 (USART).
Pentru comunicatia dintre placuta si VS1053B in ceea ce priveste notele muzicale, m-am folosit de codul prezentat in github-ulVS1053 (mai exact functiile noteON si noteOFF).
Codul a fost compilat folosind: avr-gcc si urcat pe placuta folosind bootloadHID.

Functii din cod

  1. USART0_init: aici setez baud rate-ul, pornesc transmitatorul (in cazul meu, placuta atmega) si setez si formatul frame-ului.
  2. USART0_transmit: are loc transmisia datelor (cod preluat din laborator).
  3. talkMIDI: pretocolul de comunicatie dintre placuta si shield. Aici este folosita functia USART0_transmit
  4. init: pun pinii legati la placuta ca input, setez rezistenta de pull-up pentru fiecare pin, setez pin-ul legat la RST-ul de pe shield.
  5. noteOn: functie pentru redarea unei note
  6. noteOff: functie pentru oprirea redarii unei note
  7. main: aici am implementat logica de apasare a butoanelor si redare a sunetelor folosindu-ma de functiile noteOn si noteOff.

Concluzii

Tema a fost pe cat de interesanta pe atata de frustranta. Am crezut ca partea de hardware o sa imi faca probleme, insa a fost chiar foarte usoara comparativ cu cea de software. Principala sursa de probleme a fost comunicarea cu shield-ul VS1053B.
Ca si cheltuieli am ajuns undeva in jurul sumei de 300 lei :), componenta cea mai scumpa fiind VS1053B-ul (pe care am dat frumoasa suma de 160 lei).

Download

In arhiva este sunt incluse urmatoarele:

  1. Codul sursa
  2. Makefile
  3. Executabil folosit pentru incarcarea pe placuta

tudor_anca_gabriela_333cc_proiectpm.zip

Bibliografie/Resurse

midi-piano123.pdf