Differences

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

Link to this comparison view

pm:prj2025:rnedelcu:ioana.ionescu2209 [2025/05/27 17:48]
ioana.ionescu2209 [Descriere generală]
pm:prj2025:rnedelcu:ioana.ionescu2209 [2025/05/28 03:26] (current)
ioana.ionescu2209
Line 1: Line 1:
 ====== InteractiveBoard ====== ====== InteractiveBoard ======
 +
 +<​note>​
 +Proiect realizat de **Ionescu Ioana**
 +
 +Grupa **332CB**
 +</​note>​
 ===== Introducere ===== ===== Introducere =====
  
-<note tip>+
 Acest proiect constă într-o consolă interactivă care integrează trei jocuri clasice: un joc de memorie bazat pe LED-uri colorate, Snake afișat pe un ecran și controlat cu butoane, precum și Piatra-Hârtie-Foarfecă,​ în care utilizatorul se confruntă cu un oponent virtual. Acest proiect constă într-o consolă interactivă care integrează trei jocuri clasice: un joc de memorie bazat pe LED-uri colorate, Snake afișat pe un ecran și controlat cu butoane, precum și Piatra-Hârtie-Foarfecă,​ în care utilizatorul se confruntă cu un oponent virtual.
  
Line 8: Line 14:
  
 Consider că acest proiect este util deoarece dezvoltă abilități practice în domeniul microcontrolerelor,​ a interfeței hardware, afișajelor și programării logice. În plus, consola poate fi folosită ca instrument didactic în cadrul unor ateliere STEM pentru copii sau ca model demonstrativ pentru începători în domeniul electronicii. Consider că acest proiect este util deoarece dezvoltă abilități practice în domeniul microcontrolerelor,​ a interfeței hardware, afișajelor și programării logice. În plus, consola poate fi folosită ca instrument didactic în cadrul unor ateliere STEM pentru copii sau ca model demonstrativ pentru începători în domeniul electronicii.
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +Proiectul este implementat pe un singur microcontroler (Arduino Uno), care gestionează toate componentele ​hardware și logica ​software ​pentru trei jocuri: Joc de Memorie, Snake și Piatra-Hârtie-Foarfecă. Componentele sunt partajate ​între ​module pentru optimizare hardware și software.
-Proiectul este compus din mai multe module ​hardware și software ​care comunică între ​ele printr-un microcontroler centralMai jos este o descriere schematică a componentelor:​+
  
-**Modul Joc de Memorie**+Pe ecranul LCD va fi o pagină principală ​de meniu, unde vei selecta unul dintre jocuri prin apăsarea butonului corespunzător jocului. După apăsare, intri în pagina de instrucțiuni a jocului, iar după câteva secunde începe jocul.
  
-- LED RGB+**Joc de Memorie**
  
-- Butoane ​pentru ​introducerea ​secvenței+Va avea un LED RGB și 3 butoane, fiecare ​pentru ​câte o culoare. Microcontrolerul se va ocupa de generarea și verificarea ​secvenței. Prima dată apare doar o culoare, iar pe măsură ce avansezi în joc, numărul de culori aprinse crește succesiv. Dacă ai greșit o culoare, ai pierdut și te întorci în pagina de meniu. În cazul în care te-ai plictisit de joc, poți apăsa pe un buton (butonul roșu), care te va trimite la pagina principală.
  
-- Control logic pe microcontroler 
  
-- Algoritm de generare și verificare a secvenței+**Modul Snake**
  
 +Scopul jocului este să strângi 10 bucăți de mâncare ca să câștigi. Ai 4 butoane direcționale (sus, jos, stânga, dreapta). Microcontrolerul se ocupă de detectarea coliziunilor – dacă își atinge coada sau dacă iese din ecran (atinge marginea ecranului). Șarpele nu își poate modifica direcția de deplasare cu 180 de grade (ex: dacă merge în sus și apeși pe butonul pentru direcția jos, șarpele nu va merge în jos, ci va continua în sus). Poziția inițială a șarpelui este aleatorie, la fel și poziția mâncării. Dacă ai pierdut (ți-ai atins coada sau ai atins marginea ecranului), te întorci automat la pagina principală.
  
-**Modul Snake** 
  
-Ecran OLED+**Modul Piatra-Hârtie-Foarfecă**
  
-- 4 butoane ​direcționale (susjosstângadreapta)+Jucătorul va alege cu ce să joace apăsând pe unul din cele 3 butoane. După cum s-a mai menționat, jucătorul va concura cu calculatorul. Microcontrolerul se ocupă de alegerea aleatorie a opțiunii calculatorului,​ astfel încât nu vei ști niciodată dacă vei câștiga sau pierde. După ce jucătorul face o alegere, pe ecran va apărea alegerea jucătoruluialegerea calculatorului și apoi rezultatul: dacă ai câștigatai pierdut sau dacă este egalitate. Pentru a ieși din jocjucătorul trebuie să apese pe butonul roșu.
  
-- Microcontroler care afișează jocul pe ecran și detectează coliziunile 
  
 +**Microcontroler Central – Arduino Uno**
  
-**Modul Piatra-Hârtie-Foarfecă**+Se ocupă de logica fiecărui joc, afișaje, intrări de la butoane și controlul LED-urilor.
  
-- 3 butoane pentru alegerea utilizatorului 
  
-- Algoritm de alegere random pentru robot+**Schema bloc**
  
-- Afișaj pe ecran cu alegerea robotului și scorul+{{:​pm:​prj2025:​rnedelcu:​ii_schema_bloc.png?​300|}}
  
 +===== Hardware Design =====
  
-**Afișaj principal**+**Listă de componente principale:**
  
-Afișează scorul curent și câștigătorul fiecărui joc+Microcontroler Arduino UNO
  
-Este partajat între Snake și Piatra-Hârtie-Foarfecă+8x Butoane
  
 +- LED RGB
  
-**Microcontroler Central**+- Ecran LCD
  
-Se ocupă de logica fiecărui joc, afișaje, intrări de la butoane ​și controlul LED-urilor+Rezistențe pentru LED (1x 330 Ω și 2x 150 Ω)
  
-Posibilități:​ Arduino Uno+2x Breadboard
  
-{{:​pm:​prj2025:​rnedelcu:​schema_ii.png?​200|}}+- Fire tată-tată
  
-</​note>​+- Fire U-shape
  
-===== Hardware Design =====+**Schema circuit**
  
-<note tip> +{{:pm:​prj2025:​rnedelcu:​schema_circuit_ii_2.png?​300|}}
-**Listă de componente principale:** +
-- Microcontroler+
  
-- 4x Butoane+**Schemă electrică**
  
-- LED RGB+{{:​pm:​prj2025:​rnedelcu:​schema_electrica_ii.png?​300|}}
  
-- Ecran OLED+**Pini folosiți**
  
-- Rezistențe ​pentru ​LED-uri ​și butoane+Arduino are pini pentru ​alimentare (power), pini analogici ​și digitali. Am folosit pinii de alimentare și pinii digitali.
  
-- Breadboard+La pinii de alimentare am folosit: pinul de 5V pentru a alimenta circuitul, pinul de GND pentru a conecta masa circuitului.
  
-- Sursă alimentare 5V (baterieUSB, sau adaptor)+La pinii digitali am folosit pinii de la D2 până la D13astfel:
  
 +- **D2** → Buton roșu
  
-**Schemă electrică (descriere generală):**+**D3** → Culoarea albastră a LED-ului
  
-Fiecare buton este conectat la un pin digital al microcontrolerului,​ cu rezistență pull-down/​pull-up+**D4** → Buton 1
  
-- LED-urile sunt conectate la pinii digitali prin rezistențe limitatoare+**D5** → Culoarea verde a LED-ului
  
-Ecranul OLED se conectează prin I2C/SPI+**D6** → Culoarea roșie a LED-ului
  
-Butoanele Snake conectate la pini separați și citiți în loop+**D7** → Buton 2
  
-Tensiune alimentare comună de 5V pentru toate componentele+**D8** → Pinul RESET al ecranului
  
 +- **D9** → Pinul DC al ecranului
  
-**Diagrame de semnal (pentru Piatra-Hârtie-Foarfecă și memorie):**+**D10** → Pinul CS al ecranului
  
-Se poate folosi semnal digital LOW/HIGH pentru citirea butoanelor și activarea LED-urilor+**D11** → Pinul SDA al ecranului
  
-Semnal I2C pentru comunicarea cu ecranul+**D12** → Buton 3
  
 +- **D13** → Pinul SCK al ecranului
  
-**Rezultate simulare (dacă se fac):**+Am ales acești pini pentru culorile LED-ului deoarece permit utilizarea semnalului PWM.
  
-- Se pot testa butoanele șLED-urile în simulatoare precum Tinkercad Circuits+Pentru ecranul LCD au mai rămas 3 pini, pe lângă cei conectațla Arduino:
  
-Se pot valida secvențele de LED în jocul de memorie și afișajul scorului+**VCC** → conectat la +
  
 +- **LED** → conectat la +
  
-Poza prototip:+- **GND** → conectat la -
  
-{{:​pm:​prj2025:​rnedelcu:​poza_prototip_i.jpeg?200|}}+a fost alimentat cu 5V de la microcontroler,​ iar – este legat la GND-ul microcontrolerului.
  
-</​note>​+**Poză circuit**
  
 +{{:​pm:​prj2025:​rnedelcu:​poza_circuit_ii.jpeg?​300|}}
 ===== Software Design ===== ===== Software Design =====
  
 +//Mediu de Dezvoltare://​ **Arduino IDE**
  
-<note tip> +//​Biblioteci:// 
-Descrierea codului aplicaţiei (firmware)+  * **Adafruit_ST7735** ​control specific cu ecranul 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +  * **Adafruit_GFX** - elemente grafice generale 
-  ​librării şi surse 3rd-party (e.g. Procyon AVRlib) +  * **SPI** - interacțiunea cu ecranul LCD
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+//Descriere cod://
  
-<note tip> +Am definit pinii pentru butoane, ecran și culorile LED-ului.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+Am inițializat o variabilă booleană (isGame) care reține dacă te afli în jocul "​Piatra,​ hârtie, foarfecă"​.
  
-===== Download =====+În funcția **setup()** am inițializat generatorul de numere aleatoare, afișajul ecranului și am rotit ecranul cu 90 de grade pentru a se potrivi cu poziționarea lui pe breadboard. Am inițializat pinii pentru butoane ca fiind pini de intrare. Am inițializat și pinii pentru culorile LED-ului ca fiind pini de output și am apelat funcția care stinge LED-ul.
  
-<note warning>​ +În funcția **loop()** am verificat starea variabilei isGame. Dacă nu mă aflam în joc, se afișa mesajul de pe meniul principal și verificam ce buton apăsam. Dacă apăsam un buton corespunzător celorlalte 2 jocurise apela funcția corespunzătoare joculuiDacă apelam butonul cu "​Piatrahârtiefoarfecă",​ schimbam valoarea variabilei, afișam mesajul din pagina ​de instrucțiuni șdupă se apela funcția jocului.
-O arhivă ​(sau mai multe dacă este cazulcu fişierele obţinute ​în urma realizării proiectului:​ sursescheme, etcUn fişier READMEun 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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Am avut și niște ​**funcții auxiliare**: afiseazaMesaj(const char* mesaj) care afișează pe ecran din stânga sus mesajul dat, afiseazaMesajMijloc(const char* mesaj) afișează pe mijlocul ecranului mesajul, stingeLED() setează pe 0 culorile LED-ului, aprindeCuloare(int culoare) setează pe 50 culoarea corespunzătoare,​ asteaptaCuloareUtilizator() ​care, în funcție de ce buton apăsăm, ​se aprinde culoarea corespunzătoare și se returnează valoarea pentru a fi verificată cu secvența, drawPixel(int x, int y, uint16_t colorcolorează pixelul de la poziția xy pentru jocul Snake, generateFood() generează aleator poziția mâncării pentru jocul Snake.
-</​note>​+
  
-===== Jurnal =====+Pentru **jocul de memorie**, înainte de funcție am definit lungimea maximă a unei secvențe, un vector care reține secvența și nivelul curent. În funcție am afișat mesajele de instrucțiuni și, într-un while(true),​ am verificat dacă am apăsat butonul de întoarcere la meniu, am creat secvența cu culori random, am aprins culorile, de menționat că în timp ce afișez secvența mă pot întoarce în meniul principal, după am verificat dacă culorile introduse de jucător sunt la fel cu secvența, cresc nivelul și o iau de la capăt.
  
-<note tip> +În funcția **jocPiatraHartieFoarfeca()** am văzut ce a ales jucătorul, reținând într-o variabilă alegerea, am afișat mesajul cu alegerea jucătorului,​ am făcut șalegerea calculatorului random ​și am afișat mesajul. Am verificat cele două variabile ​în ce caz se află și am afișat un mesaj corespunzător.
-Puteți avea și o secțiune de jurnal ​în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+Pentru **Snake**, am definit înainte de funcție o lungime maximă a șarpelui, o structură de tip point, am definit șarpele ca fiind un vector de puncte, lungimea inițială a șarpelui, am definit și mâncarea ca un punct, direcția șarpelui și scorul. În funcție am afișat instrucțiunile,​ am generat poziția de start a șarpelui și am generat mâncarea. Apoi, într-un while(true),​ am citit direcția dată de la butoane, am blocat întoarcerea directă în sens opus, am mutat tot corpul șarpelui, am verificat coliziunile cu marginea ecranului sau cu propriul corp, verific dacă șarpele a mâncat mâncarea și desenez totul pe ecran.
  
-<​note>​ +===== Concluzii ===== 
-Listă cu documentedatasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. + 
-</​note>​+Un proiect frumos și interesant de realizat. Datorită luimi-aș dori să mai realizez astfel de proiecte folosind microprocesoare.
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2025/rnedelcu/ioana.ionescu2209.1748357316.txt.gz · Last modified: 2025/05/27 17:48 by ioana.ionescu2209
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