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/16 20:21]
ana_maria.diaconu02 [Hardware Design]
pm:prj2024:ccontasel:ana_maria.diaconu02 [2024/05/27 09:19] (current)
ana_maria.diaconu02 [Rezultate obținute]
Line 1: Line 1:
-====== Pian digital ======+====== Pian digital ​🎹🎶======
 <note tip> <note tip>
 //​**Student:​ Diaconu Ana-Maria - 331CB**// //​**Student:​ Diaconu Ana-Maria - 331CB**//
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 56: Line 56:
 **Schema electrică** **Schema electrică**
 </​note>​ </​note>​
 +{{:​pm:​prj2024:​ccontasel:​sch-elec1-amd.png?​700 |}}
 {{:​pm:​prj2024:​ccontasel:​sch_elec_amd.png?​700 |}} {{:​pm:​prj2024:​ccontasel:​sch_elec_amd.png?​700 |}}
 +<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.
 +
 +**Display LCD:**
 +
 +VCC la 5V de pe Arduino pentru alimentare.
 +
 +GND la GND de pe Arduino.
 +
 +SDA la pinul A4 (SDA) pe Arduino.
 +
 +SCL la pinul A5 (SCL) pe Arduino.
 +
 +**Buzzer:**
 +
 +Un pin se conectează la pinul digital 2 pe Arduino
 +
 +Celălalt pin se conectează la GND.
 +
 +**Modul de citire card SD:**
 +
 +CS (Chip Select) - pinul 10
 +
 +MOSI (Master Out Slave In)- pinul 11.
 +
 +MISO (Master In Slave Out) - pinul 12.
 +
 +SCK (Serial Clock) - pinul 13.
 +
 +VCC se conectează la 5V.
 +
 +**Butoanele** sunt conectate la pinii digitali 3, 4, 5, 6, 7, 8, 9 si pinii analogici A1 si A3
 +
 +
 +<​note>​
 +**Aici se poate observa modul în care am conectat fizic componentele:​**
 +</​note>​
 +{{:​pm:​prj2024:​ccontasel:​poza2_amd.jpg?​300}} {{:​pm:​prj2024:​ccontasel:​poza1_amd.jpg?​300}}
 +
 +{{:​pm:​prj2024:​ccontasel:​poza4_amd.jpg?​300}} {{:​pm:​prj2024:​ccontasel:​poza3_amd.jpg?​300}}
  
 ===== Software Design ===== ===== Software Design =====
 +<note important>​Biblioteci utilizate:<​Wire.h>,​ <​LiquidCrystal_I2C.h>,​ <​SPI.h>,​ <​SD.h>​
  
 +Cont de Github: https://​github.com/​anaMD20/​Proiect_PM_Pian_digital
 +</​note>​
 +=== Descrierea functiilor ===
 +<note tip>
 +1. setup()
 +Această funcție este apelată o singură dată la pornirea microcontrolerului. În aceasta:
 +
 +Se inițializează comunicarea serială pentru debug.
 +Se încearcă inițializarea cardului SD și se afișează statusul acesteia pe Serial și LCD.
 +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.
 +
 +2. playMelodyFromSD()
 +Această funcție este responsabilă pentru redarea unei melodii stocate într-un fișier melody.txt de pe cardul SD. Ea:
 +
 +Deschide fișierul și citește notele și duratele acestora.
 +Folosește funcția tone() pentru a reda fiecare notă pe buzzer.
 +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ă.
 +
 +3. loop()
 +Această funcție este inima programului și se execută repetitiv. Ea:
 +
 +Verifică starea fiecărui buton și, în funcție de apăsare, inițiază un timer sau decide durata apăsării.
 +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.
 +
 +4. evaluatePressDuration(int buttonIndex,​ unsigned long duration)
 +Această funcție determină tipul de presiune realizată pe buton (scurtă, medie, lungă) și:
 +
 +Alege o notă specifică în funcție de durata apăsării și indexul butonului.
 +Apoi apelează playTone() pentru a reda nota corespunzătoare.
 +
 +5. playTone(int buttonIndex,​ int pressType)
 +Aceasta redă un ton specificat prin buzzer și:
 +
 +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.
 +</​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 =====
  
Line 68: Line 167:
 <note tip> <note tip>
  
-  * 10 aprilie - comandă ​placuță Arduino - https://​www.optimusdigital.ro/​ro/​ +  * 10 aprilie - Achiziționare ​placuță Arduino - https://​www.optimusdigital.ro/​ro/​ 
-  * 18 aprilie - stabilire ​temă de proiect +  * 18 aprilie - Stabilire ​temă de proiect 
-  * 20 aprilie - comandă ​piese suplimentare specifice proiectului - https://​www.optimusdigital.ro/​ro/​ +  * 20 aprilie - Achiziționare ​piese suplimentare specifice proiectului - https://​www.optimusdigital.ro/​ro/​ 
-  * 30 aprilie - creare ​pagină de wiki si documentație +  * 30 aprilie - Creare ​pagină de wiki si documentație 
-  * 10 mai - creare ​schemă electrică+  * 10 mai - Creare ​schemă electrică ​+ implementare hardware 
 +  * 19 mai - Implementare software
 </​note>​ </​note>​
 === Grafic Gant === === Grafic Gant ===
-{{:​pm:​prj2024:​ccontasel:​gant_amd.png?700 |}}+{{:​pm:​prj2024:​ccontasel:​amd_gantt_chart.png?700 |}}
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
pm/prj2024/ccontasel/ana_maria.diaconu02.1715880100.txt.gz · Last modified: 2024/05/16 20:21 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