This is an old revision of the document!


Pian electric

Autor: Pantelimon Andreea 331CC

Introducere

Proiectul are ca si scop implementarea unui pian care sa aibe doua module implementate. Modulul “freestyle” si modulul “profesor”. Acest pian poate fi folositor pentru utilizatorii care doresc sa invete melodii usoare sau care doresc sa aibe o mica jucarie cu care sa se distreze.

Descriere generala

Pianul este implementat astfel incat sa contina doua module pe care utilizatorul le poate selecta in orice moment de timp prin apasarea unor butoane. Primul mod, cel de “freestyle”, permite utilizatorului sa cante ceea ce doreste, iar prin apasarea fiecarei dintre clape, un led se va aprinde astfel incat sa semnaleze clapa care a fost apasata. Cel de-al doilea mod, “profesor”, va aprinde mai intai un led care sa semnaleze utilizatorului clapa care trebuie apasata. Daca utilizatorul va apasa pe clapa gresita, atunci clapa u va fi luata in considerare si se va astepta pana cand clapa potrivita a fost apasata.

Hardware Design

Lista de componenete:

  • Arduino UNO x 1
  • Rezistente (10 kohmi) x 5
  • Rezistente (1,2 kohmi) x 5
  • Butoane x 1
  • Speaker x 1
  • LED-uri x 5
  • Banda LED-uri
  • Breadboard x 1
  • Fire tata-tata x 24

Software Design

Pentru implementare am folosit Arduino IDE ca si mediu de dezvoltare. Bibliotecile externe pe care le-am folosit sunt urmatorele:

  • pitches.h (ce contine notele cu frecventele corespunzatore)
  • CapacitiveSensor.h pentru depistarea capacitatii electrice din corpul uman.

La pornirea pianului, acesta va intra automat in modul de “freestyle”, astfel incat utilizatorul poate sa foloseasca clapele cum doreste. Prin apasarea butonului, utilizatorul va intra in modul de “profesor”.

Variabile globale:

  • b1, b2, b3, b4, b5 - folosite pentru initializarea clapelor de pian;
  • lpin1, lpin2, lpin3, lpin4, lpin5 - folosite pentru initializarea led-urilor;
  • professor - folosit pentru initializarea butonului de mod “profesor”;
  • state - in care se va retine statusul butunoului (daca este apasat sau nu);
  • count - un counter ce ma va ajuta sa parcurg in ordine melodiile memorate din modul “profesor”;

Functii:

  • keyWait(CapacitiveSensor bpin) - este o functie folosita in modul “profesor”. Aceasta opreste melodia si asteapta pana cand utilizatorul va apasa clapa potrivita. Odata ce clapa a fost apasata, se va iesi din functie si melodia va continua;
  • Song1(), Song2(), Song3() - aceste functii au ca si rol derularea melodiilor pentru modul “profesor” (sunt trei melodii implementate, fiecarei functii atribuindui-se una). In aceaste functii, se va aprinde ledul ce indica clapa ce trebuie apasata, se va apela keyWait si o data iesita din aceasta functie, sunetul va fi produs iar ledul va fi inchis, trecandu-se la urmatoarea nota. Am grija sa am un delay astfel incat trecerea de la o nota la alta sa nu fie prea rapida;
  • setup() - initializez pinii pentru clape si butonul pentru profesor;
  • loop() - la inceput setez senzitivitatea pentru fiecare clapa in parte. Dupa care verific daca una din clape a fost atinsa. Daca da, atunci se va aprinde ledul ce va indica clapa atinsa, iar in caz contrar ma asigur ca nu este scos niciun sunet si ca ledurile sunt inchise. Dupa care verific daca butonul de profesor a fost apasat. Cu ajutorul counter-ului, voi verifica de cate ori a fost apasat acest buton. Daca a fost apasat de 0 ori, atunci se va apela Song1() si count-ul creste. Daca a fost apasat o data, atunci se va apela Song2() si count-ul creste. Daca a fost apasat de 2 ori, atunci se va apela Song3() si count-ul va creste. Daca a fost apsat de 3 ori, count-ul se va reseta la 0.

Setul de melodii:

Asa cum am specificat si mai sus, modul “profesor” are implementat 3 melodii. Aceste melodii sunt inregistrate in 4 array-uri: melodyx, noteDurationsx, ledsx, buttonsx, unde x reprezinta numarul melodiei. In aceste array-uri sunt salvate urmatoarele:

  • melodyx: sunt salvate variabile de tip int ce reprezinta notele muzicale (frecventa acestora luata din pitches.h);
  • noteDurationsx: sunt salvate variabile de tip int ce vor reprezenta durata unei note;
  • leds: sunt salvate variabile de tip int ce reprezinta ce leduri vor fi aprinse pentru fiecare nota
  • buttonsx: sunt salvate variabile de tip CapacitiveSensor ce reprezinta ce clape vor trebui apasate;

Rezultate obtinute

Overview al proiectului:

Concluzii

Donwload

Bibliografie / Resurse

pm/prj2021/apredescu/pian_electric.1622753771.txt.gz · Last modified: 2021/06/03 23:56 by andreea.pantelimon
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