Sorina Gabriela SANDU - Piano

Autorul poate fi contactat la adresa: Login pentru adresa


Introducere


Ce face?

Proiectul meu este un mini-pian elelectric cu posibilitatea de înregistarea a melodiilor și redare a ultimei melodii înregistrate de oricâte ori. Pianul are o “claviatură” formată din 8 butoane, reprezentând o octavă (gama DO major). Deasemenea, are 2 butoane, REC și PLAY care permit înregistrarea și redarea unei melodii.

Care este scopul lui?

Scopul proiectului este pentru mine acela de a învăța și a mă juca în același timp.

Care a fost ideea de la care am pornit?

Ideea mi-a venit uitându-mă pe listele cu proiecte din anii trecuți. Acesta mi-a atras atenția în mod special pentru că aveam câteva noținui de bază legate de cântatul la pian și mi s-a părut interesant să pot să îmbin aceste cunoștințe cu partea tehnică.

De ce este util?

Este util pentru a te juca cu el și, eventual, a învăța cântece simple, care se pot interpreta într-o octavă.

Pentru mine, a fost deasemenea util pentru a învăța mai multe despre circuitele electrice. Am văzut ce probleme pot apărea, atât hardware, (lipituri greșite, scurt-uri) cât și software (folosirea greșită a regiștrilor, alte bug-uri) și am reușit să găsesc rezolvări pentru acestea.


Descriere generală

Schemă bloc

Mai sus, se poate vedea schema bloc a proiectului. Practic proiectul este constituit din:

  • Microcontroller - ATMEGA324PA
  • Claviatură - un set de 8 butoane conectate pe portul C al controlerului
  • Butoane de REC și PLAY - permit înregistrarea și redarea unei melodi. Există și un LED care este aprons dacă ne aflăm în starea RECORD.
  • Difuzor - partea de output a proiectului


Hardware Design


Componente folosite

Componentă Cantitate Preț total
Placă 1 10 lei
Speaker 1 7.5 lei
Led roșu 1 0.5 lei
Fire legătură 1m 0.5 lei
Condensator 1 1 leu
Butoane 10 6 lei


Schemă electrică

Schemă Eagle


Software Design


Diagramă de stări

În implemntarea mea, proiectul se poate alfa în una dintre cele 3 stări la un moment de timp:

  • PLAY
  • RECORD
  • SING

Starea ințială este SING, iar aceasta se modifică în funcție de secvențele de control primite. Mai jos se poate vedea diagrama de stări:

Implementare

Pentru implementare am folosit porțiuni de cod din laborator. Deasemenea, pentru a-mi face o idee mai clară și a vedea care sunt frecvențele pentu gama DO major, m-am uitat și pe implemntările din anii trecuți.

Am setat un timer care se declanșează la 10ms și execută codul de întrerupere. Acolo se găsește toată logica programului.

Pentru a cânta o notă, la fiecare înterupere se vede care dintre butoanele din claviatură au fost apăsate și se setează în PWM frecvența corespunzătoare dintr-un vector predefinit de frecvențe.

Structuri de date

Intern, soft-ul va trebui să rețină ultima melodie înregistrată. Pentru a codifica o melodie am folosit vectori de structuri de forma:

struct sound {
     uint8_t note;
     uint32_t count;
};

unde:

  • note reprezintă indicele notei, poate fi un număr întreg în intervalul [0, 7] pentru o notă din gama DO major. Deasemenea, mai poate avea valorile PAUSE_NOTE și UNDEFINED_NOTE.
  • count reprezintă numărul de “întreruperi” pentru care nota este cântată

În starea de RECORD se ia nota curentă (poate fi și PAUSE_NOTE) și se verifică dacă ultima notă salvată este aceeași cu nota curentă. Dacă da, se incrementează count-ul. Dacă nu, se adaugă nota pe poziția următoare a vectorului de record.

Când se activează starea de PLAY, întreg vectorul de record este copiat într-un vector de play. La fiecare întrerupere, se cântă nota curentă din vectorul de play, până la finalul înregistrării, când se trece înapoi instarea de SING.

Mediu de dezvoltare

Partea de software a fost făcută pe un sistem Debian GNU/Linux utilizând Vim.

Am folosit bibliotecile precizate în laborator, și anume:

  • gcc-avr
  • avr-libc
  • libusb-dev

Am folosit Bootloader-ul pus la dispoziție pe wiki pe care l-am compilat din surse.


Rezultate Obţinute

Filmările sunt făcute înainte de a adăuga posibilitatea de RECORD.


Concluzii


A fost prima dată când am lucrat la un proiect de genul acesta și sunt foarte fericită că am reușit să-l duc la final. Am făcut design-ul circuitului intuitiv (fără prea multe cunoștințe de elecrtonică) și chiar a mers din prima. Partea de software a mers foarte bine, am plecat de la scheletul de laborator și am adăugat funcționalități.

Singura parte proastă este că nu am avut conectori, am căutat la mai multe magazine dar nu am găsit, și a trebuit să lipesc toate firele pe placă. Din această cauză, proiectul nu este atât de estetic cum aș fi vrut să fie.

În concluzie, eu sunt foarte mulțumită de rezultatele obținute.


Download


Jurnal


At the beginning of time:


In our days, working hard :)


Close to an end:


Final stage:


Bibliografie/Resurse

pm/prj2013/dtudose/sorinasandu.txt · Last modified: 2021/04/14 17:07 (external edit)
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