This shows you the differences between two versions of the page.
pm:prj2024:aungureanu:cristinaionescu.02 [2024/05/26 14:50] cristina.ionescu02 [Rezultate Obţinute] |
pm:prj2024:aungureanu:cristinaionescu.02 [2024/05/26 15:43] (current) cristina.ionescu02 [Rezultate Obţinute] |
||
---|---|---|---|
Line 36: | Line 36: | ||
* **mediu de dezvoltare** -> Arduino IDE | * **mediu de dezvoltare** -> Arduino IDE | ||
- | * **librării:** | + | * **biblioteci:** |
* Tone - pentru a putea reda sunete pe mai multe difuzoare in acelasi timp | * Tone - pentru a putea reda sunete pe mai multe difuzoare in acelasi timp | ||
* Timer - este folosit pentru un delay intre notele schimbate, ca in cazul in care sunt fluctuatii foarte mici de distante si nu este necesara schimbarea notei sa nu se ia in calcul | * Timer - este folosit pentru un delay intre notele schimbate, ca in cazul in care sunt fluctuatii foarte mici de distante si nu este necesara schimbarea notei sa nu se ia in calcul | ||
Line 43: | Line 43: | ||
* SonarSenzor care intoarce dinstanta | * SonarSenzor care intoarce dinstanta | ||
+ | <code> | ||
+ | long SonarSensor(int trigPin,int echoPin) | ||
+ | { | ||
+ | digitalWrite(trigPin, LOW); | ||
+ | delayMicroseconds(2); | ||
+ | digitalWrite(trigPin, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trigPin, LOW); | ||
+ | |||
+ | long duration = pulseIn(echoPin, HIGH); | ||
+ | long distance = (duration/2) / 29.1; | ||
+ | |||
+ | return distance; | ||
+ | } | ||
+ | </code> | ||
* **algoritmi si structuri pe care plănuiti să le implementati:** | * **algoritmi si structuri pe care plănuiti să le implementati:** | ||
* pentru calcularea distantelor am folosit functia "SonarSensor" | * pentru calcularea distantelor am folosit functia "SonarSensor" | ||
* dupa ce am facut rost de distantele receptionate de cei doi senzori, cele pentru care vom schimba notele se vor schimba doar daca a fost o diferenta de cel putin 2 cm intre distanta actuala si cea precedenta. | * dupa ce am facut rost de distantele receptionate de cei doi senzori, cele pentru care vom schimba notele se vor schimba doar daca a fost o diferenta de cel putin 2 cm intre distanta actuala si cea precedenta. | ||
+ | <code> | ||
+ | if (abs(firstDistance1 - distance1) >= 2 && timer1.read() > timer) { | ||
+ | firstDistance1 = distance1; | ||
+ | } else { | ||
+ | distance1 = firstDistance1; | ||
+ | } | ||
+ | </code> | ||
* distanta cu care vom lucra este de 40 de cm, tot ce e mai mare de atat nu va avea repartizat vreo nota | * distanta cu care vom lucra este de 40 de cm, tot ce e mai mare de atat nu va avea repartizat vreo nota | ||
* aceasta distanta este impartita in 5 regiuni de cate 8 cm; de la cea mai apropiata de senzor, la cea mai indepartata avem urmatoarele note: NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4 | * aceasta distanta este impartita in 5 regiuni de cate 8 cm; de la cea mai apropiata de senzor, la cea mai indepartata avem urmatoarele note: NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4 | ||
* o schimbare de nota se va face doar daca distanta de schimbare se afla in limitele notei respective si daca a trecut un timp mai mare decat "timer" de cand a fost produsa ultima schimbare | * o schimbare de nota se va face doar daca distanta de schimbare se afla in limitele notei respective si daca a trecut un timp mai mare decat "timer" de cand a fost produsa ultima schimbare | ||
+ | <code> | ||
+ | if (distance1 >= 0 && distance1 < 8 && timer1.read() > timer) { | ||
+ | tone1.play(NOTE_C4); | ||
+ | timer1.stop(); | ||
+ | timer1.start(); | ||
+ | } else if (distance1 >= 8 && distance1 < 16 && timer1.read() > timer) { | ||
+ | tone1.play(NOTE_D4); | ||
+ | timer1.stop(); | ||
+ | timer1.start(); | ||
+ | } else if (distance1 >= 16 && distance1 < 24 && timer1.read() > timer) { | ||
+ | tone1.play(NOTE_E4); | ||
+ | timer1.stop(); | ||
+ | timer1.start(); | ||
+ | } else if (distance1 >= 24 && distance1 < 32 && timer1.read() > timer) { | ||
+ | tone1.play(NOTE_F4); | ||
+ | timer1.stop(); | ||
+ | timer1.start(); | ||
+ | } else if (distance1 >= 32 && distance1 < 40 && timer1.read() > timer) { | ||
+ | tone1.play(NOTE_G4); | ||
+ | timer1.stop(); | ||
+ | timer1.start(); | ||
+ | } else if (timer1.read() > timer){ | ||
+ | tone1.stop(); | ||
+ | } | ||
+ | </code> | ||
* **Calibrarea si optimizarea elementelor:** | * **Calibrarea si optimizarea elementelor:** | ||
Line 59: | Line 106: | ||
* este o experienta unica sa canti la un astfel de instrument daca nu ai avut sansa sa incerci un theremis | * este o experienta unica sa canti la un astfel de instrument daca nu ai avut sansa sa incerci un theremis | ||
+ | * **Noutiuni folosite din laborator:** | ||
+ | * GPIO -> pentru trimiterea si receptia semnalelor de la senzorii ultrasonici | ||
+ | * UART -> pentru comunicarea seriala cu calculatorul (pentru a avea si o evidenta vizuala la ce se intampla, afisez in interfata seriala distantele interceptate de senzori si timpul intregistrat de timere) | ||
+ | * Timere | ||
+ | * PWM -> pentru generarea tonurilor audio | ||
+ | * Intreruperi -> implicit utilizate de temporizatoare si functiile de tonuri | ||
Line 64: | Line 117: | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | * Demo: | + | * Demo -> https://youtu.be/de_qJpgqm_0 |
- | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
- | <note warning> | + | * Arhiva cu schemele si codul: Cristina Ionescu, 333CC -> {{:pm:prj2024:aungureanu:pian_pe_distante.zip|}} |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
- | </note> | + | |
- | ===== Jurnal ===== | ||
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |