Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2022:robert:jewelry_box [2022/04/28 17:37]
stefania.dina created
pm:prj2022:robert:jewelry_box [2022/05/20 19:39] (current)
stefania.dina
Line 3: Line 3:
 ===== Introducere ===== ===== Introducere =====
  
-<note tip>+
   * 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ă.   * 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 laboratorul 3 [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2022|]] ​în combinație cu laboratorul 2 [[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2022|]]+  * Ideea a venit o dată cu laboratoarele[[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2022| ​Laborator 3]] ,[[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2022| ​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.   * 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.
-</​note>​+
  
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +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 [[https://​github.com/​robsoncouto/​arduino-songs/​tree/​master/​furelise ​| Github]] 
-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 [[https://​github.com/​robsoncouto/​arduino-songs/​tree/​master/​furelise]] + 
-</​note>​+Schema bloc: 
 + 
 +---- 
 + 
 +{{:​pm:​prj2022:​robert:​schema_bloc_dina_stefania.png?​550|}} 
  
 ===== Hardware Design ===== ===== Hardware Design =====
-{{:​pm:​prj2022:​robert:​bij.drawio.png?​200|}} 
  
 Piese folosite: Piese folosite:
Line 23: Line 27:
   - Servomotor   - Servomotor
   - Difuzor   - Difuzor
-  - Breadboard 
   - Cabluri   - Cabluri
  
-===== Jurnal ​=====+Schemă circuit: 
 + 
 +---- 
 +{{:​pm:​prj2022:​robert:​schema_circuit_dina_stefania.png?​800|}} 
 + 
 +Schema electrică:​ 
 + 
 +---- 
 + 
 +{{:​pm:​prj2022:​robert:​schema_electrica_dina_stefania.png?​800|}} 
 + 
 + 
 +===== 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()** 
 +<​note>​ Setare parametrii de I/O 
 +         ​sg90.attach(8);​ 
 +         ​pinMode(trig,​ OUTPUT); ​  
 +         ​pinMode(echo,​ INPUT);  
 +</​note>​ 
 +**void loop()** 
 +<​note> ​ Se calculează distanța și durata interceptării senzorului ultrasonic 
 +        duration = pulseIn(echo,​1);​ 
 +        distance = duration*0.034/​2;​ 
 +</​note>​ 
 + 
 +<​note>​ Parametrii de acționare  
 +        if (distance < 30) 
 +</​note>​ 
 + 
 +---- 
 +Explicație a melodiei, calcului duratei plus funcțiile folosite: 
 + 
 +<​note>​ **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; 
 +</​note>​ 
 +     
 +<​note>​ Calculează durata unei **note întregi** în ms 
 +        int wholenote = ( 60000 * 4 ) / tempo; 
 +</​note>​ 
 + 
 +<​note>​ 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);​ 
 +</​note>​ 
 + 
 +<​note>​ 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() 
 + 
 +</​note>​ 
 + 
 +<​note>​ 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); 
 +</​note>​ 
 + 
 +<​note>​ Dacă nu specific durata, tonul va continua până când funcția **noTone** este apelată pe același pin //buzzer//.  
 +        noTone(buzzer);​ 
 +</​note>​ 
 + 
 +===== Rezultate Obţinute ​=====
  
 <note tip> <note tip>
-Creare28.04.2022+Rezultatele se pot urmării aici[[https://​youtube.com/​shorts/​4BrKCf2BfKQ?​feature=share | YouTube]] 
 +</​note>​
  
-Modificări+===== Concluzii ===== 
 +Proiectul s-a dovedit a fi o provocare din care am acumulat cunoștințe noi de lucru cu Arduino. 
 +===== Download ===== 
 + 
 +<note warning> Proiectul poate fi descărcat de aici: 
 +{{:​pm:​prj2022:​robert:​dina_stefania-gabriela-proiect_pm_1.zip| Arhiva }}
 </​note>​ </​note>​
 +===== Jurnal =====
 +
 +
 +Creare: 28.04.2022
 +
 +Modificări:​ 16.05.2022
 +
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
 <​note>​ <​note>​
-[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2022/​robert/​jewelry_box|]]+[[https://​ocw.cs.pub.ro/​courses/​pm/​prj2022/​robert/​jewelry_box]] 
 +[[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab2-2022]] 
 +[[https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2022]] 
 +[[https://​github.com/​robsoncouto/​arduino-songs/​tree/​master/​furelise]]
  
 </​note>​ </​note>​
pm/prj2022/robert/jewelry_box.1651156652.txt.gz · Last modified: 2022/04/28 17:37 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