Differences

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

Link to this comparison view

pm:prj2024:ccontasel:ana_maria.diaconu02 [2024/05/27 04:43]
ana_maria.diaconu02 [Software Design]
pm:prj2024:ccontasel:ana_maria.diaconu02 [2024/05/27 09:19] (current)
ana_maria.diaconu02 [Rezultate obținute]
Line 22: Line 22:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-Când un utilizator apasă un buton, această acțiune este detectată de microcontrollerul integrat în dispozitiv. Fiecare buton este mapat la o notă muzicală specifică, iar microcontrollerul,​ recunoscând butonul activat, inițiază redarea sunetului corespunzător acelei note. Concomitent,​ pe ecranul LCD se afișează nota care este redată. Sunetul persistă pentru durata în care butonul este menținut apăsat. În absența oricărei acțiuni, ecranul LCD afișează mesajul „I want to sing!”.+Când un utilizator apasă un buton, această acțiune este detectată de microcontrollerul integrat în dispozitiv. Fiecare buton este mapat la o notă muzicală specifică, iar microcontrollerul,​ recunoscând butonul activat, inițiază redarea sunetului corespunzător acelei note. Concomitent,​ pe ecranul LCD se afișează nota care este redată. Sunetul persistă pentru durata în care butonul este menținut apăsat.
  
-Un buton dedicat, distinct de celelalte, activează redarea unei melodii de pe cardul SD. La apăsare, melodia se redă complet, iar pe ecranul LCD se afișează „Play music!” ​cu un contor regresiv de la 1000 ms. Dacă timpul expiră înainte de finalul melodieiapare mesajul ​„Time is up!.În timpul redării unei melodii, apăsările altor butoane sunt ignorate, asigurând astfel o experiență auditivă neîntreruptă și clară.+Un buton dedicat, distinct de celelalte, activează redarea unei melodii de pe cardul SD. La apăsare, melodia se redă complet, iar pe ecranul LCD se afișează „Play music!” ​cand este apasat butonul apoi pe LCD se pot observa notele din care este compusă melodia și duratele loriar la final se afișează ​mesajul ​"​Melody finished!".În timpul redării unei melodii, apăsările altor butoane sunt ignorate, asigurând astfel o experiență auditivă neîntreruptă și clară.
  
 <​note>​ <​note>​
Line 59: Line 59:
 {{:​pm:​prj2024:​ccontasel:​sch_elec_amd.png?​700 |}} {{:​pm:​prj2024:​ccontasel:​sch_elec_amd.png?​700 |}}
 <note important>​Mod de conectare pini</​note>​ <note important>​Mod de conectare pini</​note>​
-**Arduino Uno:** 5V și GND (masa): Acești pini sunt folosiți pentru a alimenta alte componente care necesită 5V.+**Arduino Uno:** 
 + 
 + 5V și GND (masa): Acești pini sunt folosiți pentru a alimenta alte componente care necesită 5V.
  
 **Display LCD:** **Display LCD:**
 +
 VCC la 5V de pe Arduino pentru alimentare. VCC la 5V de pe Arduino pentru alimentare.
 +
 GND la GND de pe Arduino. GND la GND de pe Arduino.
 +
 SDA la pinul A4 (SDA) pe Arduino. SDA la pinul A4 (SDA) pe Arduino.
 +
 SCL la pinul A5 (SCL) pe Arduino. SCL la pinul A5 (SCL) pe Arduino.
  
 **Buzzer:** **Buzzer:**
 +
 Un pin se conectează la pinul digital 2 pe Arduino Un pin se conectează la pinul digital 2 pe Arduino
 +
 Celălalt pin se conectează la GND. Celălalt pin se conectează la GND.
  
 **Modul de citire card SD:** **Modul de citire card SD:**
 +
 CS (Chip Select) - pinul 10 CS (Chip Select) - pinul 10
 +
 MOSI (Master Out Slave In)- pinul 11. MOSI (Master Out Slave In)- pinul 11.
 +
 MISO (Master In Slave Out) - pinul 12. MISO (Master In Slave Out) - pinul 12.
 +
 SCK (Serial Clock) - pinul 13. SCK (Serial Clock) - pinul 13.
 +
 VCC se conectează la 5V. VCC se conectează la 5V.
  
Line 90: Line 103:
 ===== Software Design ===== ===== Software Design =====
 <note important>​Biblioteci utilizate:<​Wire.h>,​ <​LiquidCrystal_I2C.h>,​ <​SPI.h>,​ <​SD.h>​ <note important>​Biblioteci utilizate:<​Wire.h>,​ <​LiquidCrystal_I2C.h>,​ <​SPI.h>,​ <​SD.h>​
 +
 Cont de Github: https://​github.com/​anaMD20/​Proiect_PM_Pian_digital Cont de Github: https://​github.com/​anaMD20/​Proiect_PM_Pian_digital
-<\note>+</note>
 === Descrierea functiilor === === Descrierea functiilor ===
 +<note tip>
 1. setup() 1. setup()
 Această funcție este apelată o singură dată la pornirea microcontrolerului. În aceasta: Această funcție este apelată o singură dată la pornirea microcontrolerului. În aceasta:
Line 101: Line 115:
 Se configurează pinii butoanelor ca fiind intrări cu rezistență de pull-up, ceea ce înseamnă că citirea va fi LOW când butonul este apăsat. Se configurează pinii butoanelor ca fiind intrări cu rezistență de pull-up, ceea ce înseamnă că citirea va fi LOW când butonul este apăsat.
 Se configurează pinul buzzerului ca ieșire. Se configurează pinul buzzerului ca ieșire.
 +
 2. playMelodyFromSD() 2. playMelodyFromSD()
 Această funcție este responsabilă pentru redarea unei melodii stocate într-un fișier melody.txt de pe cardul SD. Ea: Această funcție este responsabilă pentru redarea unei melodii stocate într-un fișier melody.txt de pe cardul SD. Ea:
Line 108: Line 123:
 Afișează notele și duratele pe LCD pe măsură ce sunt redare. Afișează notele și duratele pe LCD pe măsură ce sunt redare.
 Închide fișierul și afișează un mesaj final pe LCD când melodia este terminată. Închide fișierul și afișează un mesaj final pe LCD când melodia este terminată.
 +
 3. loop() 3. loop()
 Această funcție este inima programului și se execută repetitiv. Ea: Această funcție este inima programului și se execută repetitiv. Ea:
Line 114: Line 130:
 Actualizează LCD-ul la fiecare 500 ms pentru a afișa cât timp a fost apăsat un buton. Actualizează LCD-ul la fiecare 500 ms pentru a afișa cât timp a fost apăsat un buton.
 Dacă butonul este eliberat, calculează durata totală a apăsării și apoi decide ce ton să redă pe buzzer. Dacă butonul este eliberat, calculează durata totală a apăsării și apoi decide ce ton să redă pe buzzer.
 +
 4. evaluatePressDuration(int buttonIndex,​ unsigned long duration) 4. evaluatePressDuration(int buttonIndex,​ unsigned long duration)
 Această funcție determină tipul de presiune realizată pe buton (scurtă, medie, lungă) și: Această funcție determină tipul de presiune realizată pe buton (scurtă, medie, lungă) și:
Line 119: Line 136:
 Alege o notă specifică în funcție de durata apăsării și indexul butonului. Alege o notă specifică în funcție de durata apăsării și indexul butonului.
 Apoi apelează playTone() pentru a reda nota corespunzătoare. Apoi apelează playTone() pentru a reda nota corespunzătoare.
 +
 5. playTone(int buttonIndex,​ int pressType) 5. playTone(int buttonIndex,​ int pressType)
 Aceasta redă un ton specificat prin buzzer și: Aceasta redă un ton specificat prin buzzer și:
Line 124: Line 142:
 Afișează nota corespunzătoare pe LCD. Afișează nota corespunzătoare pe LCD.
 Dacă apăsarea a fost destul de lungă și pentru butonul specific, poate iniția redarea unei melodii de pe SD. Dacă apăsarea a fost destul de lungă și pentru butonul specific, poate iniția redarea unei melodii de pe SD.
 +</​note>​
 +
 +<note important>​ Mai jos se regăsesc conceptele software folosite</​note>​
 +<note tip>
 +
 +1. **SPI** (Serial Peripheral Interface): Aceasta este folosită implicit prin includerea bibliotecii <​SPI.h>​ și utilizarea modulului SD, care comunica prin protocolul SPI cu microcontrolerul.
 +
 +2. **I2C** (Inter-Integrated Circuit): Utilizarea unui display LCD cu control I2C (LiquidCrystal_I2C lcd(0x27, 16, 2);), care se bazează pe comunicația I2C pentru a trimite comenzi și date către display.
 +
 +3.** UART** (Universal Asynchronous Receiver/​Transmitter):​ Comunicarea serială prin Serial.begin(9600);​ este un exemplu de utilizare UART, unde microcontrolerul trimite datele la un terminal sau la un alt dispozitiv pentru debug sau afișare.
 +
 +4. **GPIO** (General Purpose Input/​Output):​ Se utilizează pentru citirea stării butoanelor și controlul buzzerului. Pinii sunt setați ca intrări pentru butoane cu rezistențe de pull-up și ca ieșire pentru buzzer.
 +
 +5. **Timere**: Utilizarea funcției millis() pentru a măsura intervalul de timp în care un buton este apăsat și pentru a determina când să actualizeze afișajul LCD este un exemplu de utilizare a timerelor interne ale microcontrolerului.
 +</​note>​
 ===== Rezultate obținute ===== ===== Rezultate obținute =====
 + <​note tip> Modul de functionare al proiectului se poate vedea in videoclipul de mai jos</​note>​
  
 +<​html>​ <iframe width="​640"​ height="​360"​ src="​https://​youtube.com/​embed/​shorts/​eAchCWtF-4E"​ title="​Proiect PM Pian Digital"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen></​iframe>​ </​html>​
 ===== Concluzii ===== ===== Concluzii =====
  
pm/prj2024/ccontasel/ana_maria.diaconu02.1716774239.txt.gz · Last modified: 2024/05/27 04:43 by ana_maria.diaconu02
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