This shows you the differences between two versions of the page.
|
pm:prj2024:sseverin:diana.cismaru [2024/05/26 16:01] diana.cismaru [Software Design] |
pm:prj2024:sseverin:diana.cismaru [2024/05/27 15:12] (current) diana.cismaru [Software Design] |
||
|---|---|---|---|
| Line 28: | Line 28: | ||
| * modul senzor de mișcare PIR | * modul senzor de mișcare PIR | ||
| * un led verde și unul roșu | * un led verde și unul roșu | ||
| - | * rezistențe | + | * rezistențe (220 și 10k) |
| * breadboard | * breadboard | ||
| * fire mamă-tată și tată-tată | * fire mamă-tată și tată-tată | ||
| Line 34: | Line 34: | ||
| === Schema electrică === | === Schema electrică === | ||
| - | {{ :pm:prj2024:sseverin:schematic-pm-dianacismaru.png?700 |}} | + | {{ :pm:prj2024:sseverin:schematic.jpg?700 |}} |
| **Ecranul LCD cu interfață I2C** are rolul de a afișa mesaje interactive pe parcursul jocului, dar și valorile măsurate se senzorul de forță rezistiv. Pinul SDA e conectat la A5 de pe placa Arduino, pentru a transmite datele, iar pentru semnalul de ceas am conectat pinul SCL la A4. | **Ecranul LCD cu interfață I2C** are rolul de a afișa mesaje interactive pe parcursul jocului, dar și valorile măsurate se senzorul de forță rezistiv. Pinul SDA e conectat la A5 de pe placa Arduino, pentru a transmite datele, iar pentru semnalul de ceas am conectat pinul SCL la A4. | ||
| Line 40: | Line 40: | ||
| **Senzorul de forță rezistiv (FSR402)** măsoară forța aplicată prin creșterea rezistenței în momentul apăsării pe acesta, trimițând rezultatele pe ecranul LCD. Este înseriat cu o rezistență de 10kΩ și apoi conectat la pinul A0 al plăcuței Arduino pentru citirea valorii analogice. | **Senzorul de forță rezistiv (FSR402)** măsoară forța aplicată prin creșterea rezistenței în momentul apăsării pe acesta, trimițând rezultatele pe ecranul LCD. Este înseriat cu o rezistență de 10kΩ și apoi conectat la pinul A0 al plăcuței Arduino pentru citirea valorii analogice. | ||
| - | **Senzorul PIR de mișcare** detectează mișcarea în fața aparatului și trimite un semnal către Arduino, pentru a putea aprinde LED-urile corespunzătoare. Pinul OUT e conectat la pinul D7, pentru a transmite semnalul de detecție a mișcării. | + | **Senzorul PIR de mișcare** detectează mișcarea în fața aparatului și trimite un semnal către Arduino, pentru a putea aprinde LED-urile corespunzătoare. Pinul OUT e conectat la pinul D2, pentru a se putea folosi de întreruperi. |
| **Modulul de card SD** este conectat la plăcuță prin pinii interfeței SPI: CS (D10 - SS), MOSI (D11), MISO (D12) și SCK (D13), utilizând un card micro-SD de 16GB de la Kingston, pe care am stocat fișiere audio .wav cu următoarele specificații: 16kHz, 8-bit resolution (128kbps bit rate), canal MONO, U8 PCM, pentru a putea fi redate. | **Modulul de card SD** este conectat la plăcuță prin pinii interfeței SPI: CS (D10 - SS), MOSI (D11), MISO (D12) și SCK (D13), utilizând un card micro-SD de 16GB de la Kingston, pe care am stocat fișiere audio .wav cu următoarele specificații: 16kHz, 8-bit resolution (128kbps bit rate), canal MONO, U8 PCM, pentru a putea fi redate. | ||
| Line 59: | Line 59: | ||
| == Funcționalități din laborator prezente în implementare == | == Funcționalități din laborator prezente în implementare == | ||
| - **I2C (Inter-Integrated Circuit)**: Protocol utilizat pentru comunicarea cu afișajul LCD. Permite conectarea ușoară a dispozitivului, folosind un număr minim de pini | - **I2C (Inter-Integrated Circuit)**: Protocol utilizat pentru comunicarea cu afișajul LCD. Permite conectarea ușoară a dispozitivului, folosind un număr minim de pini | ||
| - | - **SPI (Serial Peripheral Interface)**: Necesar pentru comunicarea cu cardul SD, utilizând un o viteză mare de transfer de date | + | - **SPI (Serial Peripheral Interface)**: Necesar pentru comunicarea cu cardul SD, utilizând o viteză mare de transfer de date |
| - **Întreruperi**: Utilizate pentru a detecta mișcarea folosind senzorul PIR, permițând o reacție rapidă la evenimentele externe, fără a bloca execuția principală a programului | - **Întreruperi**: Utilizate pentru a detecta mișcarea folosind senzorul PIR, permițând o reacție rapidă la evenimentele externe, fără a bloca execuția principală a programului | ||
| Line 67: | Line 67: | ||
| * **restart()**: Resetează variabilele și pregătește sistemul pentru o nouă sesiune de joc | * **restart()**: Resetează variabilele și pregătește sistemul pentru o nouă sesiune de joc | ||
| - | * **loop()**: Menține led-urile aprinse și mesajele de pe display afișate pe tot parcursul jocului. Monitorizează continuu starea senzorului PIR, iar atunci când parametrul //motion_status// are valoarea //HIGH// pentru prima oară de la începerea sesiunii de joc, semnalizează faptul că jucătorul poate sa înceapă apăsarea pe senzorul de forță. După ce s-a indicat acest lucru, programul monitorizeaza starea senzorului FSR, iar atunci când detectează o apăsare validă, se afișează un mesaj și se redă un sunet corespunzător. Sunt permise apoi până la înca 4 sesiuni de joc | + | * **loop()**: Menține led-urile aprinse și mesajele de pe display afișate pe tot parcursul jocului. Monitorizează continuu starea senzorului PIR, iar atunci când parametrul //motion_status// are valoarea //HIGH// pentru prima oară de la începerea sesiunii de joc, semnalizează faptul că jucătorul poate sa înceapă apăsarea pe senzorul de forță. După ce s-a indicat acest lucru, programul monitorizează starea senzorului FSR prin citirea analogică de pe pinul A0, iar atunci când detectează o apăsare validă, se afișează un mesaj și se redă un sunet corespunzător. Sunt permise apoi până la înca 4 sesiuni de joc |
| * **play_sound(char *message)**: Redă un fișier audio de pe cardul SD, în funcție de parametrul //message// | * **play_sound(char *message)**: Redă un fișier audio de pe cardul SD, în funcție de parametrul //message// | ||
| Line 77: | Line 77: | ||
| * **show_score(int score)**: Afișează scorul incremental pe LCD | * **show_score(int score)**: Afișează scorul incremental pe LCD | ||
| - | * **pirInterrupt()**: Funcția de întrerupere care setează starea de mișcare detectată de senzorul PIR, abia după ce senzorul și-a terminat calibrarea | + | * **pir_interrupt()**: Funcția de întrerupere care setează starea de mișcare detectată de senzorul PIR, abia după ce senzorul și-a terminat calibrarea |
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 83: | Line 83: | ||
| <html> <iframe width="720" height="480" src="https://www.youtube.com/embed/58uuSymlm8o" title="Arcade Pushing Machine - Proiect PM 2024" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe> </html> | <html> <iframe width="720" height="480" src="https://www.youtube.com/embed/58uuSymlm8o" title="Arcade Pushing Machine - Proiect PM 2024" 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 ===== | ||
| + | |||
| + | Acest proiect a fost o oportunitate foarte bună de a pune în practică cunoștințele acumulate la PM, dar și de la ED. Am folosit și Fusion încă o dată în viață, pentru realizarea schemei electrice. A fost o provocare inginerească, care m-a ajutat să înțeleg mai bine interacțiunea dintre hardware și software. Am experimentat utilizarea întreruperilor, a senzorilor, afișarea pe LCD, redarea fișierelor audio și, mai ales, am înțeles cu adevărat cum se folosește un Arduino. Proiectul a ieșit exact așa cum mi-am dorit, captivant, distractiv și fără bug-uri. :-D | ||
| ===== Download ===== | ===== Download ===== | ||
| - | + | <note> | |
| - | <note warning> | + | Arhiva cu implementarea și schema electrică se poate descărca de {{:pm:prj2024:sseverin:arcadepushingmachine-pm2024-cismarudiana.zip|aici}}. |
| - | 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> | </note> | ||
| - | |||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| * 7 aprilie 2024 - Mi-am pus la punct ideea proiectului | * 7 aprilie 2024 - Mi-am pus la punct ideea proiectului | ||
| Line 111: | Line 109: | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | ||
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | ||
| - | </note> | ||
| == Resurse Hardware == | == Resurse Hardware == | ||
| * [[https://roboticsbackend.com/arduino-uno-pins-a-complete-practical-guide/|Arduino Uno Pins – A Complete Practical Guide]] | * [[https://roboticsbackend.com/arduino-uno-pins-a-complete-practical-guide/|Arduino Uno Pins – A Complete Practical Guide]] | ||