Cutie Muzicala

Introducere

  • Cutia muzicala poate fi un mijloc de recreere, o decoratiune interactiva sau chiar o jucarie pentru copii.
  • Aceasta are ca functionalitati principale redarea de melodii si rotirea simultana a unei figurine balerina, cu posibilitatea alegerii melodiei de catre utilizator, precum si modificarea volumului de redare. De asemenea, pornirea si oprirea cutiei muzicale este automata, la momentul deschiderii capacului acesteia.

Descriere generală

  • Cele doua functionalitati sunt declansate la detectia unei schimbari ale intensitatii luminoase. Acest lucru este realizat prin plasarea unui senzor de lumina in interiorul cutiei, senzor care va percepe o diferenta atunci cand utilizaorul va deschide capacul cutiei si lumina din exterior va patrunde.
  • Cat timp cutia este deschisa, balerina din mijloc se va roti cu ajutorul unui servomotor si se va auzi o melodie de la un buzzer in fundal. Daca utilizatorul doreste sa schimbe melodia, are la dispozitie butoane care ii permit alegerea alteia. De asemenea, poate ajusta volumul melodiei cu ajutorul unui potentiometru.
  • La scaderea intensitatii luminoase (semn ca a fost inchis capacul), intregul mecanism se va opri.

Schema bloc:

Hardware Design

Lista de piese:

  • Arduino
  • Breadboard
  • Senzor lumina
  • Servomotor
  • Buzzer
  • Matrice 4×4 de butoane
  • Potentiometru
  • Fire

Schema electrica

Asa cu se poate observa si in snippet-ul adaugat, am legat fiecare componenta la pinii placii arduino folosindu-ma de un breadboard.

  • Potentiometrul a fost legat in serie cu buzzer-ul, deoarece el actioneaza ca un rezistor variabil ce, la momentul cresterii rezistentei, scade tensiunea pentru buzzer, modificandu-i astfel volumul.
  • Matricea 4×4 de butoane detine cate un pin aferent ficarei linii, respectiv coloane.

Software Design

Medii de dezvoltare folosite

  • Fritzing - pentru schema electrica
  • Arduino 1.8.13

Librarii si surse 3rd party

  • Keypad.h ⇒ Biblioteca ce cuprinde declaratia keypad-ului si functia de mapare a acestuia
  • Servo.h ⇒ Biblioteca ce cuprinde declaratia servomotorului si a functiei de write pe acesta

Surse si functii implementate

  • In fisierul “notes.h” - am definit toate notele muzicale, precum si 16 melodii si durata acestora pentru a putea fi redate cu ajutorul

functiei de redare.

  • play_piece() - In aceasta functie, se parcurge vectorul de note muzicale aferent melodiei si este redata fiecare dintre acestea cu durata corespunzatoare din vectorul de durate. Inainte de fiecare redare, se verifica daca nu cumva valoarea senzorului s-a schimbat (daca da, intreg sistemul se intrerupe) sau daca s-a apasat vreun buton ce implica schmbarea melodiei. Tot aici,pe fiecare nota, servomotorul isi schimba pozitia cate putin, acesta realizand treptat o miscare 0-180 grade si inapoi.
void play_piece(int pin, int *melody, int *duration, int length) {
  for (int i = 0; i < length; ++i) {
    int Sensordata = digitalRead(LDRSENSOR_PIN);
    if(Sensordata == 1) {
      break;
    }
    char key;
    while(key = kpd.getKey()) {
      change_song(key);
    }
    
    Servo1.write(posServo);
    if(posServo == 180) {
      direction = -1;
    } else if(posServo == 0) {
      direction = 1;
    }
    
    if(direction == 1) {
      posServo+=10;
    } else {
      posServo-=10;
    }
    tone(pin, melody[i], duration[i]);
    delay(duration[i]);   
  }  
}
  • change_song() - reda o alta melodie in functie de butonul apasat dintre cele 16
  • setup() - setez pinii folositi ca fiind de input/output
  • loop() - citesc valorea de la senzorul de lumina si, daca arata ca este capacul inchis (intensitatea luminii este scazuta), atunci intregul sistem se opreste. Daca nu, atunci apeleaza functia care reda melodia si actioneaza servomotorul.

Rezultate Obţinute

Demo

Galerie foto

Concluzii

Proiectul meu a fost realizat in intregime, toate functionalitatile fiind implementate si adaugandu-i si un aspect estetic placut pentru a ajuta la scopul sau final, recreativ si, totodata, decorativ.

Realizarea proiectului a reprezentat ceva inedit, o experienta hands-on unde rezultatele sunt fizice, iar device-ul creat chiar are o utilitate. Am realizat ca imi place sa petrec timpul lucrand cu microprocesoare si mi-ar placea sa elaborez si alte poriecte in viitor.

Download

Jurnal

  • 21.04.2022: Realizarea schemei bloc si introducerii proiectului
  • 03.05.2022: Inceperea proiectului
  • 25.05.2022: Finalizarea functionala a proiectului
  • 27.05.2022: Finalizarea aspectului estetic si a paginii de ocw wiki

Bibliografie/Resurse

Resurse hardware

Resurse software

pm/prj2022/arosca/cutie-muzicala.txt · Last modified: 2022/05/27 22:19 by idumitrescu
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