Pian Electric

Grupa: 335CC

Nume: Georgescu Mara Ioana

E-mail: mara.georgescu@stud.acs.upb.ro

Introducere

Proiectul meu reprezinta un pian electric care isi poate schimba octavele, are semitonuri (diez/bemol), poate controla volumul si durata sunetelor si poate salva melodia pe MicroSD.

Scopul sau este redarea notelor muzicale cat mai realist si realizarea de partituri simple.

Ideea proiectului a venit in timpul laboratorului de PM, atunci cand ne-a fost prezentata functia tone() din biblioteca de Arduino. Fiind pasionata de instrumente muzicale, in special de pian, mi-a venit ideea sa utilizez in proiect aceasta functie si sa creez un pian electric care are functionalitatile stiute de mine.

Consider ca este util acest proiect din doua motive: primul motiv este faptul ca implementarea unui pian electric presupune insusirea unor concepte de PM si lucrul cu componente pe placa Arduino; al doilea motiv este faptul ca rezultatul proiectului reprezinta un instrument muzical electric, foarte usor de utilizat.

Descriere generală

Utilizatorul se foloseste de 8 push-butoane pentru redarea notelor muzicale de la do la do (octava superioara). La inceput, utilizatorul va utiliza octava centrala (by default), insa ulterior, acesta poate modifica octava, apasand un push buton care toggle-eaza intre octave.

Utilizatorul se foloseste de cele doua potentiometre pentru a regla volumul sunetului si durata sunetului, acesta din urma imitand functionalitatile unei pedale de pian. Butonul pentru activarea semitonurilor va permite notelor muzicale sa acceseze, dupa caz, nota cu diez sau cu bemol.

In cele din urma, melodia poate fi salvata persistent pe card MicroSD si redata ulterior. Apasand butonul de citire de pe MicroSD, se va putea asculta si, ulterior, sterge cantecul retinut pana in acel moment pe MicroSD.

  • Schema Bloc:

Hardware Design

  • Lista de Piese:
  1. 1 placa Arduino
  2. 1 breadboard
  3. 1 cablu USB
  4. ~30 fire jumper
  5. 6 fire mama-tata
  6. 11 push-butoane
  7. 1 buzzer
  8. 2 mini potentiometre
  9. 1 adaptor microsd
  10. 1 card microsd
  11. 1 rezistor

Toate componentele au fost comandate de pe Ardushop.

  • Schema electrica:

  • Hardware:

Software Design

Mediul de dezvoltare folosit este Arduino IDE.

Pentru partea de testing, utilizez Autodesk Tinkercad.

Pentru citire/scriere MicroSD, am inclus biblioteca <SD.h>.

Descriere implementare:

  • am definit cate un macro pentru fiecare nota din octava centrala (DO4-SI4), pentru fiecare nota din octava superioara octavei centrale (DO5-SI5) si DO6
  • de asemenea, am definit si 5 semitonuri (do diez/re bemol, re diez/mi bemol, fa diez/sol bemol, sol diez/la bemol, la diez/si bemol) pentru octava centrala, octava 5 si do diez/re bemol pentru octava 6; toate aceste definitii au valorile frecventelor notelor
  • am definit macro-uri si pentru pinii atribuiti fiecarei note, buzzerului, butoanelor pentru schimbarea octavei si activarea semitonurilor, citire MicroSD si pini pentru adaptorul de MicroSD
  • codul meu contine o singura functie, si anume functia pentru scriere pe MicroSD, care este apelata de fiecare data cand apas pe un buton reprezentand o clapa a pianului; am decis sa realizez o functie deoarece, altfel, as fi avut cod duplicat. Aceasta ia ca parametri frecventa notei si durata acesteia, ajustata prin potentiometru, si scrie in fisier nota, durata si momentul de timp in milisecunde pentru a determina cat timp trece intre audierea notei curente si a notei imediat urmatoare, imitand timpii scrisi pe un portativ.
  • in functia loop citesc durata cu analogRead de la potentiometru si verific ce butoane au fost apasate, fie ca este vorba despre un buton asociat unei note muzicale, sau butoane pentru schimbarea octavei, activarea/dezactivarea semitonurilor sau butonul de citire de pe MicroSD. Variabila g_ok are rol de “lock” atunci cand se apasa un buton astfel incat oricat de mult/putin se apasa pe un buton, acesta se considera ca fiind apasat o singura data pentru ca, odata apasat, variabila g_ok se face 1 si nu se va intra de mai multe ori in conditia if. Variabila g_ok se va face 0 la loc doar dupa ce toate instructiunile din conditie se executa.

Functionalitatea pianului:

  • la inceput, pianul este setat pe octava centrala, mai precis do major(4) - do5
  • am decis sa existe do-do si nu do-si pentru ca numarul cantecelor ce pot fi cantate doar cu do-si sunt mult mai restranse
  • se pot apasa butoanele corespunzatoare notelor si se poate canta un cantec
  • daca se aude prea tare/prea incet, se poate regla volumul cu ajutorul potentiometrului legat in serie cu buzzer-ul
  • daca durata sunetului este prea mare/prea mica, se poate regla durata cu ajutorul potentiometrului legat la pin analogic.
  • daca se doreste schimbarea octavei cu una superioara se apasa butonul pentru schimbarea octavei; pentru a reveni la octava centrala, se apasa din nou butonul
  • pentru activarea semitonurilor apasam butonul special pentru aceasta functionalitate; in acest moment, daca apasam pe butoanele ce mai inainte aveau notele corespunzatoare clapelor albe ale unui pian, acum avem notele corespunzatoare clapelor negre. Revenirea la clapele albe se face tot apasand pe buton
  • Daca vom apasa pe butonul pentru citire de pe MicroSD, vom putea audia notele cantate pana acum, exact in ordinea in care au fost cantate si exact cu ritmul si durata cantarii lor
  • odata redat cantecul, fisierul se va goli, insa putem realiza alt cantec si acesta va putea fi si el redat
  • daca apasam cateva note si nu redam cantecul, insa scoatem pianul din priza si il bagam ulterior la loc, cantecul ramas va putea fi redat si chiar pot fi adaugate si alte note inainte de redarea acestuia
  • in cazul in care se intampla sa nu functioneze ceva, va aparea un mesaj de eroare adresand problema specifica la consola seriala

Rezultate Obţinute

Toate functionalitatile descrise la inceput au fost implementate. Pentru mai multe detalii, am creat un filmulet cu proiectul meu:

Concluzii

Proiectul a iesit asa cum mi-am dorit si chiar simt ca acest proiect ma reprezinta. Nu m-am gandit niciodata ca o sa mai am ocazia sa imi folosesc cunostintele legate de teoria muzicala, mai ales intr-un proiect cu Arduino. :-D De cand ne-a fost prezentata la laborator functia tone am stiut ca aceasta va fi tema proiectului meu, si cel mai mult ma bucur ca am primit sugestia de a citi/scrie pe MicroSD, deoarece pot reda propriile mele cantece. Pot spune ca “Ceata lui pitigoi” sau “Cantecul Gamei” nu au sunat niciodata mai interesant. LOL Acest proiect m-a ajutat foarte mult sa inteleg notiunile prezentate la laborator, mai ales cele de SPI si ADC, dar si cele de GPIO si PWM. ;-)

Download

Jurnal

31.03.2021 Comanda cu: placa Arduino, breadboard, fire tata-tata, cablu usb.

20.04.2021 Comanda cu: fire mama-tata, push-butoane, potentiometre, buzzer pasiv, card microsd, adaptor microsd, rezistor.

21.04.2021 Implementare Tinkercad pian doar cu 8 butoane si buzzer

22.04.2021 Implementare fizic pian cu 8 butoane si buzzer

23.04.2021 Adaugare potentiometre pentru volum si durata

24.04.2021 Adaugare buton de schimbare a octavelor, avand un bug

25.04.2021 Rezolvare bug buton de schimbare a octavelor

15.05.2021 Schimbat pini pentru a face loc adaptorului pentru MicroSD; adaugare buton si functionalitate de semiton (diez/bemol), atat la octava centrala, cat si la o octava superioara

19.05.2021 Cablare adaptor MicroSD; implementare scriere pe MicroSD si verificarea functionalitatii prin conectarea MicroSD-ului la laptop

21.05.2021 Implementare citire de pe MicroSD si sterge de pe MicroSD

22.05.2021 Adaugare posibilitate de a reda notele de pe MicroSD cu acelasi delay cu care au fost cantate

23.05.2021 Definitivare proiect, realizare coding style, testare amanuntita

Bibliografie și Resurse

  • Laboratoarele de pe OCW

Documentul în format PDF: 335CC_GeorgescuMara_PianElectric

pm/prj2021/dbrigalda/pian-electric.txt · Last modified: 2021/05/24 15:00 by mara.georgescu
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