Differences

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

Link to this comparison view

pm:prj2024:sseverin:diana.cismaru [2024/05/25 17:35]
diana.cismaru [Rezultate Obţinute]
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 51: Line 51:
  
 == Biblioteci utilizate == == Biblioteci utilizate ==
-  * Wire.h +  ​* **Wire.h**: este necesară pentru interacțiunea cu LCD-ul I2C 
-  * LiquidCrystal_I2C.h +  ​* **LiquidCrystal_I2C.h**: utilizată pentru facilitarea afișajelor mesajelor pe display 
-  * TMRpcm.h +  ​* **TMRpcm.h**: este folosită pentru redarea pe difuzor a fișierelor audio WAV 
-  * SD.h +  ​* **SD.h**: biblioteca e necesară pentru a citi datele stocate pe cardul SD 
-  * SPI.h+  ​* **SPI.h**: utilizată pentru a comunica cu cardul SD
  
-== Codul sursă ==+== 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 
 +  - **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
  
-===== Rezultate Obţinute =====+== Funcțiile implementate ​== 
 +  * **setup()**:​ Inițializează pinii, bibliotecile și componentele hardware (LCD, card SD, difuzor). Așteaptă calibrarea senzorului PIR pentru 15 secunde, apoi redă un sunet ce semnalizează ca jocul poate începe
  
-<iframe width="​1280"​ height="​720"​ src="​https://www.youtube.com/embed/Hwvp1mxvFqo"​ 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>​+  * **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 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
  
-<​html>​ <iframe width="​1280"​ height="​720"​ src="​https://www.youtube.com/embed/Hwvp1mxvFqo style="​aspect-ratio:​ 16/9; width: 100%;" ></​iframe>​ </​html>​ +  * **play_sound(char *message)**Redă un fișier audio de pe cardul SD, în funcție de parametrul ​//message//
-===== Concluzii =====+
  
-===== Download =====+  * **display_message(char *message)**:​ Afișează un mesaj pe LCD, în funcție de parametrul //message//
  
-<note warning>​ +  * **classify_score(int score)**Clasifică scorul obținut de la senzorul FSRsetând mesajul corespunzător. Un scor slab este considerat unul sub 550scorul mediocru se incadrează între 550 și 820 de puncte, scorul bun este cel între 820 ș930, iar tot ce este peste 930 este considerat foarte ​bun
-O arhivă ​(sau mai multe dacă este cazulcu fişierele obţinute în urma realizării proiectuluisursescheme, etc. Un fişier README, un ChangeLogun script ​de compilare ş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**. +  ​* **show_score(int score)**: Afișează scorul incremental pe LCD
-</​note>​+
  
 +  * **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 =====
 +
 +<​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 =====
 +
 +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 =====
 +<​note>​
 +Arhiva cu implementarea și schema electrică se poate descărca de {{:​pm:​prj2024:​sseverin:​arcadepushingmachine-pm2024-cismarudiana.zip|aici}}.
 +</​note>​
 ===== Jurnal ===== ===== Jurnal =====
   * 7 aprilie 2024 - Mi-am pus la punct ideea proiectului   * 7 aprilie 2024 - Mi-am pus la punct ideea proiectului
Line 90: Line 106:
   * 23 mai 2024 - Am finalizat montajul   * 23 mai 2024 - Am finalizat montajul
   * 24 mai 2024 - Am finalizat partea Software   * 24 mai 2024 - Am finalizat partea Software
 +  * 25 & 26 mai 2024 - Update-uri pe wiki
 ===== 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]]
pm/prj2024/sseverin/diana.cismaru.1716647718.txt.gz · Last modified: 2024/05/25 17:35 by diana.cismaru
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