This shows you the differences between two versions of the page.
pm:prj2025:iotelea:denisa.zarioiu [2025/05/26 21:01] denisa.zarioiu [Design Software] |
pm:prj2025:iotelea:denisa.zarioiu [2025/05/28 07:44] (current) denisa.zarioiu [Rezultate] |
||
---|---|---|---|
Line 23: | Line 23: | ||
Encoderele rotative permit reglarea caracteristicilor sonore ale fiecărei "corzi", similar cu procesul de acordare a unei chitări reale. | Encoderele rotative permit reglarea caracteristicilor sonore ale fiecărei "corzi", similar cu procesul de acordare a unei chitări reale. | ||
===== Schema bloc ===== | ===== Schema bloc ===== | ||
- | {{:pm:prj2025:iotelea:denisa.zarioiu:schema_bloc_v2.png?800|}} | + | {{:pm:prj2025:iotelea:denisa.zarioiu:schema_bloc_updated.png?800|}} |
===== Design Hardware ===== | ===== Design Hardware ===== | ||
Line 35: | Line 35: | ||
* 6 × rezistențe de 220 Ω | * 6 × rezistențe de 220 Ω | ||
* 1 × rezistență de 100–330 Ω | * 1 × rezistență de 100–330 Ω | ||
- | * 6 × condensatori ceramici de 100 nF | + | * 12 × condensatoare ceramice de 100 nF |
* 3 x Breadboards | * 3 x Breadboards | ||
* Buzzer pasiv | * Buzzer pasiv | ||
+ | * Baterie 9V | ||
+ | * Regulator de tensiune | ||
* Fire jumper mama-tata | * Fire jumper mama-tata | ||
* Fire jumper tata-tata | * Fire jumper tata-tata | ||
Line 47: | Line 49: | ||
| Diode laser | 6 | [[https://www.optimusdigital.ro/ro/optoelectronice-laser/605-modul-dioda-laser.html|Link Diode Laser]] | | | Diode laser | 6 | [[https://www.optimusdigital.ro/ro/optoelectronice-laser/605-modul-dioda-laser.html|Link Diode Laser]] | | ||
| Fototranzistori Vishay BPW77NB | 6 | [[https://www.tme.eu/ro/details/bpw77nb/fototranzistori/vishay/|Link Fototranzistori]] | | | Fototranzistori Vishay BPW77NB | 6 | [[https://www.tme.eu/ro/details/bpw77nb/fototranzistori/vishay/|Link Fototranzistori]] | | ||
- | | Encodere rotative KY-040 | 6 | [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/7150-modul-encoder-rotativ.html|Link Rotary Encoder]] | | + | | Encodere rotative KY-040 | 6 | [[https://www.optimusdigital.ro/ro/senzori-senzori-de-atingere/7150-modul-encoder-rotativ.html|Link Encodere Rotative]] | |
| Rezistențe | 13 | [[https://ardushop.ro/ro/componente-discrete/1444-set-rezistori-1-4w-600buc-30-valori-10r-1m-6427854021199.html|Link Set Rezistențe]] | | | Rezistențe | 13 | [[https://ardushop.ro/ro/componente-discrete/1444-set-rezistori-1-4w-600buc-30-valori-10r-1m-6427854021199.html|Link Set Rezistențe]] | | ||
- | | Condensatoare ceramice (100 nF) | 6 | [[https://ardushop.ro/ro/componente-discrete/571-948-condensator-ceramic-50v-alege-valoarea.html#/348-capacitate-100_nf|Link Condensator 100nF]] | | + | | Condensatoare ceramice (100 nF) | 12 | [[https://ardushop.ro/ro/componente-discrete/571-948-condensator-ceramic-50v-alege-valoarea.html#/348-capacitate-100_nf|Link Condensator 100nF]] | |
+ | | Baterie 9V | 1 | [[https://www.emag.ro/baterie-alkaline-varta-industrial-pro-9v-varta-industrial-9v-elem-6lr61/pd/D9CX4KBBM/?cmpid=146119&utm_source=google&utm_medium=cpc&utm_content=82270117088&utm_campaign=(RO:Whoop!)_3P-Y_%3e_Aparate_foto_and_accesorii_order_test&gad_source=1&gad_campaignid=2078923567&gbraid=0AAAAACvmxQhNUOUK50kjS4qMoFwttWh6v&gclid=Cj0KCQjwxdXBBhDEARIsAAUkP6jksBcGlkQnjr6OCs3glbivOMHder54c8436dyOPY3NoJfamUpCY6UaAiLhEALw_wcB | Link Baterie]] | | ||
+ | | Regulator de tensiune | 1 | [[https://sigmanortec.ro/Modul-coborator-tensiune-adjustabil-LM2596-DC-DC-4-5-40V-3A-p134532509?SubmitCurrency=1&id_currency=2&gad_source=1&gad_campaignid=22174019478&gbraid=0AAAAAC3W72P7uePZHEWT8d0tfS92IQjN2&gclid=Cj0KCQjwxdXBBhDEARIsAAUkP6idtT-sRe4KMirBcyyF8pvKajNQWoZ4Bu0Gj5D0C9pPOYh9zl4gJGcaAvjiEALw_wcB|Link regulator de tensiune]] | | ||
==== Descriere detaliată ==== | ==== Descriere detaliată ==== | ||
=== Microcontroller – Arduino Mega 2560 === | === Microcontroller – Arduino Mega 2560 === | ||
Line 95: | Line 98: | ||
| – | GND | | | – | GND | | ||
- | === Condensatori de decuplare === | + | === Baterie si regulator de tensiune === |
- | Sunt utilizați pentru stabilizarea tensiunii și reducerea zgomotului, sunt poziționați lângă fototranzistori, între 5V și GND. | + | Bateria este folosita pentru alimentarea diodelor laser, iar regulatorul de tensiune pentru coborârea tensiunii de la 9V la 5V. |
==== Schema electrică ==== | ==== Schema electrică ==== | ||
- | {{:pm:prj2025:iotelea:denisa.zarioiu:schematic.png?800|}} | + | {{:pm:prj2025:iotelea:denisa.zarioiu:schematic_final_trimmed.png?800|}} |
===== Design Software ===== | ===== Design Software ===== | ||
- | Pentru dezvoltarea proiectului, am folosit Arduino IDE. | + | Pentru dezvoltarea proiectului, am folosit ArduinoIDE. |
Codul permite citirea valorilor de la cei 6 senzori optici (fototranzistori) conectați pe pinii analogici A0–A5. Când un fascicul laser este întrerupt, se detectează o scădere de tensiune, iar Arduino redă un sunet corespunzător pe un buzzer conectat la pinul D9. | Codul permite citirea valorilor de la cei 6 senzori optici (fototranzistori) conectați pe pinii analogici A0–A5. Când un fascicul laser este întrerupt, se detectează o scădere de tensiune, iar Arduino redă un sunet corespunzător pe un buzzer conectat la pinul D9. | ||
- | |||
- | De asemenea, proiectul integrează 6 encodere rotative, fiecare conectat la un pin de întrerupere externă (D2, D3, D18–D21) și un pin digital obișnuit (DT). Fiecare encoder controlează o valoare de offset care este aplicată frecvențelor din tabloul `notes[]`, permițând astfel modificarea în timp real a sunetelor redate. Direcția de rotație este determinată prin compararea stării pinilor `CLK` și `DT` în cadrul rutinei de întrerupere. | ||
=== Motivația alegerii bibliotecilor === | === Motivația alegerii bibliotecilor === | ||
Nu au fost necesare biblioteci externe, deoarece funcționalitățile dorite sunt acoperite de bibliotecile native Arduino: | Nu au fost necesare biblioteci externe, deoarece funcționalitățile dorite sunt acoperite de bibliotecile native Arduino: | ||
* `tone()` – pentru generarea de semnal audio PWM | * `tone()` – pentru generarea de semnal audio PWM | ||
- | * `analogRead()` – pentru conversia tensiunii în valoare numerică (ADC) | ||
- | * `attachInterrupt()` – pentru tratarea întreruperilor encoderelor | ||
* `Serial` – pentru debugging via UART | * `Serial` – pentru debugging via UART | ||
=== Utilizarea funcționalităților din laborator === | === Utilizarea funcționalităților din laborator === | ||
- | ^ Laborator ^ Utilizare în proiect ^ | + | ^ Laborator ^ Utilizare în proiect ^ |
- | | GPIO (Lab 0) | Controlul pinii pentru senzori, buzzer, lasere, encodere | | + | | GPIO (Lab 0) | Controlul pinii pentru senzori, buzzer, lasere | |
- | | Întreruperi (Lab 2) | Determinarea direcției de rotație a encoderelor în ISR-uri | | + | | Timere, PWM (Lab 2) | Comandarea semnalului catre buzzer | |
- | | Timere / PWM (Lab 3) | Redarea de tonuri audio pe buzzer folosind funcția `tone()` | | + | | ADC (Lab 4) | Citirea semnalelor de la pini | |
- | | ADC (Lab 4) | Citirea semnalelor analogice de la fototranzistori pentru detecția laserelor | | + | |
- | | UART (Lab 1) | Afișarea valorilor senzorilor și a offset-urilor prin `Serial Monitor` | | + | |
=== Structura proiectului === | === Structura proiectului === | ||
- | Structura codului se bazează pe 4 secțiuni principale: | + | Structura codului se bazează pe 3 secțiuni: |
- | - Definirea pinilor, frecvențelor și vectorilor de offset | + | - Definirea pinilor și notelor corespunzătoare |
- | - Inițializarea componentelor în `setup()` (inclusiv Serial și întreruperi) | + | - Inițializarea componentelor în `setup()` (inclusiv Serial) |
- | - Rutine de întrerupere (`ISR`) pentru fiecare encoder, în care se actualizează direcția și offsetul | + | |
- Bucla `loop()` care: | - Bucla `loop()` care: | ||
* Citește valorile analogice de la senzori (ADC) | * Citește valorile analogice de la senzori (ADC) | ||
* Compară fiecare valoare cu un prag (threshold) | * Compară fiecare valoare cu un prag (threshold) | ||
- | * Dacă un fascicul este întrerupt, redă o notă ajustată cu offsetul specific encoderului | + | * Dacă un fascicul este întrerupt, redă o notă folosind `tone()` |
* Dacă niciun fascicul nu este întrerupt, oprește sunetul (`noTone()`) | * Dacă niciun fascicul nu este întrerupt, oprește sunetul (`noTone()`) | ||
Funcționalitatea a fost validată prin: | Funcționalitatea a fost validată prin: | ||
- | * Monitorizarea valorilor senzorilor și a offseturilor în `Serial Monitor` | + | * Monitorizarea valorilor senzorilor în `Serial Monitor` |
* Testarea individuală a notelor prin întreruperea fasciculelor | * Testarea individuală a notelor prin întreruperea fasciculelor | ||
- | * Rotirea encoderelor și confirmarea schimbării frecvențelor redate | + | * Confirmarea generării corecte a sunetelor pe buzzer |
- | * Verificarea reacției corecte a buzzerului la orice întrerupere de fascicul în timp real | + | |
+ | ===== Rezultate ===== | ||
+ | ^ ^ ^ | ||
+ | |{{:pm:prj2025:iotelea:denisa.zarioiu:photo2.jpg?300|}} | {{:pm:prj2025:iotelea:denisa.zarioiu:photo1.jpg?300|}} | | ||
+ | |||
+ | |||
+ | ===== Concluzii ===== | ||
+ | |||
+ | A fost un proiect foarte interesant și distractiv, în care am întâmpinat pe alocuri provocări, însă din care am învățat multe atât pe partea tehnică, cât și pe partea de abilități „meșteșugărești”. | ||
===== Link Github ===== | ===== Link Github ===== | ||
https://github.com/denisa0230/laser-guitar | https://github.com/denisa0230/laser-guitar | ||