Cutia de bijuterii muzicală

Introducere

  • Cutia de bijuterii muzicală este concepută pentru a ne ușura viața și a ne crea o experiență plăcută la utilizare. La simpla apropiere de cutie aceasta se va deschide automat pentru a putea depozita acolo bijuteriile. De asemenea, la fiecare deschidere va începe o melodie simulând astfel cutiuța muzicală.
  • Ideea a venit o dată cu laboratoarele Laborator 3 , Laborator 2
  • Cutia de bijuterii muzicală este utilă pentru depozitarea și sortarea cât mai rapidă a bijuteriilor. Totodată aceasta te introduce într-o lume de basm cu ajutorul sunetului.

Descriere generală

Printr-un senzor de mișcare se va detecta prezența unei persoane în apropierea cutiei și se va porni automat un servomotor conectat printr-un fir de capacul cutiei. Odată deschisă cutia va începe o melodie preluată din repo-ul public Github

Schema bloc:


Hardware Design

Piese folosite:

  1. Arduino UNO
  2. Senzor mișcare
  3. Servomotor
  4. Difuzor
  5. Cabluri

Schemă circuit:


Schema electrică:


Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare: Arduino 1.8.14
  • Librărie folosită: Servo Library
  • Se realizează acționarea motorului care depinde de distanța utilizatorului.

Idei principale ale dezvoltării cu ajutorul funcțiilor:


void setup()

Setare parametrii de I/O

       sg90.attach(8);
       pinMode(trig, OUTPUT);  
       pinMode(echo, INPUT); 

void loop()

Se calculează distanța și durata interceptării senzorului ultrasonic

      duration = pulseIn(echo,1);
      distance = duration*0.034/2;

Parametrii de acționare

      if (distance < 30)


Explicație a melodiei, calcului duratei plus funcțiile folosite:

Sizeof oferă numărul de octeți, fiecare valoare int este compusă din doi octeți (16 biți). Există două valori pe notă (înălțimea și durata), deci pentru fiecare notă sunt patru octeți.

      int notes = sizeof(melody) / sizeof(melody[0]) / 2;

Calculează durata unei note întregi în ms

      int wholenote = ( 60000 * 4 ) / tempo;

Selectare notă, prelucrare și emitere finală

        // Itereazăm până la finalul notelor melodiei
       // Vectorul de note conține atât notele cât și durata fiecăreia
       for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
         // Calculăm durata fiecărei note
         divider = pgm_read_word_near(melody+thisNote + 1);
         if (divider > 0) {
         // Notă obișnuită, merge mai departe 
         noteDuration = (wholenote) / divider;
         // Dacă nota este cu durată negativă atunci se ia valoarea pozitivă însă se mărește durata cu jumătate
         } else if (divider < 0) {
             noteDuration = (wholenote) / abs(divider);
             noteDuration *= 1.5; 
         } 
   // Cântăm nota doar pentru 90% din durată, lăsând 10% ca pauză
   tone(buzzer, pgm_read_word_near(melody+thisNote), noteDuration * 0.9);
        
  // Asteptăm durata specificată înainte de a reda următoarea notă
  delay(noteDuration);
        
  // Oprește generarea formei de undă înainte de următoarea notă
  noTone(buzzer);

Pentru a accesa mai rapid variabila stocată în SRAM dar și pentru a susține cantitatea mare de date ce conține notele muzicale nemodificate dinamic în timpul execuției am folosit funcția:

     pgm_read_word_near()

Am generat o undă pătrată cu frecvența de pgm_read_word_near(melody + thisNote) pentru pinul buzzer și o durată de 90%, lăsând 10% ca pauză.

      tone(buzzer, pgm_read_word_near(melody+thisNote), noteDuration * 0.9);

Dacă nu specific durata, tonul va continua până când funcția noTone este apelată pe același pin buzzer.

      noTone(buzzer);

Rezultate Obţinute

Rezultatele se pot urmării aici: YouTube

Concluzii

Proiectul s-a dovedit a fi o provocare din care am acumulat cunoștințe noi de lucru cu Arduino.

Download

Proiectul poate fi descărcat de aici: Arhiva

Jurnal

Creare: 28.04.2022

Modificări: 16.05.2022

Bibliografie/Resurse

pm/prj2022/robert/jewelry_box.txt · Last modified: 2022/05/20 19:39 by stefania.dina
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