This shows you the differences between two versions of the page.
|
pm:prj2025:czlatea:andrei.ignat [2025/05/18 09:50] andrei.ignat [Hardware Design] |
pm:prj2025:czlatea:andrei.ignat [2025/05/25 19:24] (current) andrei.ignat [Rezultate Obţinute] |
||
|---|---|---|---|
| Line 30: | Line 30: | ||
| O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. | ||
| - | Exemplu de schemă bloc: https://app.cirkitdesigner.com/project/c9b9278d-fca2-4413-96c0-09f02bc888e8 | + | Descrierea componentelor: |
| + | |||
| + | 1. Plăcuța Arduino Uno | ||
| + | |||
| + | Rol: Este creierul proiectului. Este un microcontroler programabil care citește intrări (ex: de la butoane) și controlează ieșiri (ex: LED-uri, motoare). | ||
| + | |||
| + | 2. Fire mama-mama | ||
| + | |||
| + | Rol: Sunt folosite pentru a face conexiunile între componente și placa de dezvoltare (Arduino ↔ Breadboard ↔ Componente). | ||
| + | |||
| + | 3. 2 rezistențe de 10 ohm | ||
| + | |||
| + | Rol: Limitează curentul care trece printr-un circuit. La 10 ohmi sunt destul de mici și pot fi folosite în testări simple sau pentru protecție minimă. | ||
| + | |||
| + | 4. 2 pushbutton-uri | ||
| + | |||
| + | Rol: Sunt folosite ca dispozitive de intrare. Când apeși pe ele, trimit un semnal digital (HIGH/LOW) către Arduino. | ||
| + | |||
| + | 5. Breadboard (placă de test) | ||
| + | |||
| + | Rol: Permite realizarea de conexiuni temporare între componente fără a fi nevoie de lipire. | ||
| + | |||
| + | Exemplu de schemă bloc: | ||
| + | {{:pm:prj2025:czlatea:schema_bloc.png?200|}} | ||
| </note> | </note> | ||
| Line 36: | Line 59: | ||
| <note tip> | <note tip> | ||
| + | |||
| Componentele pentru proiect: | Componentele pentru proiect: | ||
| - placuta Arduino Uno | - placuta Arduino Uno | ||
| Line 43: | Line 67: | ||
| - un breadboard | - un breadboard | ||
| - | Schema electrica: | + | Arduino UNO |
| + | |||
| + | 1) 5V: Alimentare pentru componente externe, cum ar fi Display-ul TFT. | ||
| + | 2) GND: Comun pentru toate componentele, asigurând un potențial de referință comun. | ||
| + | 3) D2: Utilizat pentru a citi semnalul de la primul buton (Pushbutton). | ||
| + | 4) D7: Utilizat pentru a citi semnalul de la al doilea buton (Pushbutton). | ||
| + | 5) D8: Conectat la pinul A0/DC al Display-ului TFT pentru a controla modul de date/comandă. | ||
| + | 6) D9: Conectat la pinul RESET al Display-ului TFT pentru a reseta display-ul. | ||
| + | 7) D10: Conectat la pinul CS al Display-ului TFT pentru a selecta dispozitivul în comunicația SPI. | ||
| + | 8) D11: Utilizat pentru a transmite date (MOSI) către Display-ul TFT. | ||
| + | 9) D13: Utilizat pentru a transmite semnale de ceas (SCK) către Display-ul TFT. | ||
| + | |||
| + | Display TFT LCD 1.44" 128x128 | ||
| + | |||
| + | 1) VCC: Alimentare de la Arduino (5V). | ||
| + | 2) GND: Conectat la GND-ul Arduino. | ||
| + | 3) CS: Conectat la D10 pe Arduino pentru a selecta display-ul în comunicația SPI. | ||
| + | 4) RESET: Conectat la D9 pe Arduino pentru a permite resetarea display-ului. | ||
| + | 5) A0/DC: Conectat la D8 pe Arduino pentru a comuta între modul de date și modul de comandă. | ||
| + | 6) SDA/MOSI: Conectat la D11 pe Arduino pentru a primi date. | ||
| + | 7) SCK/CLK: Conectat la D13 pe Arduino pentru a primi semnale de ceas. | ||
| + | |||
| + | Pushbutton | ||
| | | ||
| - | * diagrame de semnal | + | 1) Pin 3 (out): Conectat la GND și la D2 pe Arduino pentru a citi starea butonului. |
| - | * rezultatele simulării | + | 2) Pin 1 (in): Conectat la D2 pe Arduino pentru a citi starea butonului. |
| + | |||
| + | Pushbutton | ||
| + | |||
| + | 1) Pin 3 (out): Conectat la GND și la D7 pe Arduino pentru a citi starea butonului. | ||
| + | 2) Pin 1 (in): Conectat la D7 pe Arduino pentru a citi starea butonului. | ||
| + | |||
| + | |||
| + | |||
| + | Schema electrica: | ||
| + | |||
| + | {{:pm:prj2025:czlatea:placa_arduino.png?200|}} | ||
| </note> | </note> | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | |||
| + | |||
| <note tip> | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | + | Bibliotecile folosite: |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | 1. <SPI.h> |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | Motivație: |
| - | * (etapa 3) surse şi funcţii implementate | + | Biblioteca SPI.h este necesară deoarece ecranul TFT utilizează protocolul de comunicare SPI (Serial Peripheral Interface) pentru transmiterea datelor. |
| + | |||
| + | Rol: | ||
| + | Asigură comunicarea rapidă și eficientă între microcontroller (de exemplu, Arduino) și display. | ||
| + | |||
| + | 2. <Adafruit_GFX.h> | ||
| + | Motivație: | ||
| + | Biblioteca Adafruit_GFX oferă o interfață grafică generală pentru desene, texte, forme și linii, compatibilă cu o gamă largă de display-uri. | ||
| + | |||
| + | Rol: | ||
| + | Oferă funcții pentru desenarea de linii, dreptunghiuri, texte etc. | ||
| + | Abstractizează partea grafică, permițând o codare simplificată și portabilă. | ||
| + | |||
| + | Exemplu de utilizare: | ||
| + | drawRect, drawLine, setCursor, print, setTextColor, etc. | ||
| + | |||
| + | 3. <Adafruit_ST7735.h> | ||
| + | Motivație: | ||
| + | Această bibliotecă este specifică pentru controlul display-urilor TFT care folosesc driverul ST7735, foarte popular în proiectele cu Arduino. | ||
| + | |||
| + | Rol: | ||
| + | Inițializează ecranul TFT. | ||
| + | Controlează afișajul color și dimensiunile acestuia. | ||
| + | Se integrează perfect cu Adafruit_GFX pentru redarea conținutului grafic. | ||
| + | |||
| + | void drawStartScreen() | ||
| + | Ce face: | ||
| + | Afișează pe ecran meniul de start, unde utilizatorul poate alege între „Vs Bot” și „Vs Player”. | ||
| + | |||
| + | Detalii: | ||
| + | |||
| + | Evidențiază opțiunea selectată cu un chenar roșu. | ||
| + | Afișează instrucțiuni pentru butoane: Select = schimbă opțiunea, OK = start joc. | ||
| + | |||
| + | void drawWinnerScreen(int winner) | ||
| + | Ce face: | ||
| + | Afișează un ecran de final cu rezultatul jocului: „X câștigă”, „O câștigă” sau „Remiză”. | ||
| + | |||
| + | Detalii: | ||
| + | Schimbă culoarea textului în verde pentru câștigător. | ||
| + | Afișează instrucțiuni pentru a relua jocul. | ||
| + | |||
| + | void drawBoard() | ||
| + | Ce face: | ||
| + | Desenează tabla de joc (3x3) și plasează X sau O în funcție de mutările făcute. | ||
| + | |||
| + | Detalii: | ||
| + | Desenează liniile care împart ecranul în 9 pătrate. | ||
| + | Evidențiază pătratul selectat cu un chenar galben. | ||
| + | Desenează „X” cu roșu și „O” cu albastru în pătratele ocupate. | ||
| + | |||
| + | int checkWinner() | ||
| + | Ce face: | ||
| + | Verifică dacă există un câștigător sau remiză. | ||
| + | |||
| + | Returnează: | ||
| + | 1 → dacă X a câștigat | ||
| + | 2 → dacă O a câștigat | ||
| + | 3 → dacă e remiză (tabla e plină) | ||
| + | 0 → jocul continuă | ||
| + | |||
| + | void botMove() | ||
| + | Ce face: | ||
| + | Realizează o mutare automată pentru bot (jucătorul O). | ||
| + | |||
| + | Strategie: | ||
| + | Verifică dacă botul poate câștiga → joacă acolo. | ||
| + | Dacă nu, verifică dacă trebuie să blocheze X → blochează. | ||
| + | Dacă nu, joacă pe poziții preferate (mijloc, colțuri etc). | ||
| + | Include: feedback sonor și redesenarea tablei. | ||
| + | |||
| + | void resetGame() | ||
| + | Ce face: | ||
| + | Resetează toate variabilele pentru a începe un nou joc. | ||
| + | |||
| + | Detalii: | ||
| + | Șterge tabla (board[]), resetează jucătorul și indicatorii (gameOver, winner). | ||
| + | Apelează drawBoard() pentru a afișa o tablă goală. | ||
| + | |||
| + | void setup() | ||
| + | Ce face: | ||
| + | Este apelată o singură dată la pornirea plăcii Arduino. | ||
| + | |||
| + | Inițializează: | ||
| + | Pinurile pentru butoane și buzzere. | ||
| + | Ecranul TFT (rotire, modul de inițializare). | ||
| + | Afișează ecranul de start (drawStartScreen()). | ||
| + | |||
| + | void loop() | ||
| + | Ce face: | ||
| + | Este funcția care rulează în buclă continuu și gestionează logica principală a jocului. | ||
| + | |||
| + | Structură logică: | ||
| + | Dacă jocul nu a început: permite selectarea modului de joc. | ||
| + | Dacă jocul s-a terminat: permite revenirea la ecranul de start. | ||
| + | Dacă jocul e activ: | ||
| + | Citire buton SELECT → mută cursorul pe tablă. | ||
| + | Citire buton OK → plasează X sau O. | ||
| + | Verifică dacă există câștigător sau remiză. | ||
| + | Dacă e modul Vs Bot și e rândul lui → apelează botMove(). | ||
| + | |||
| + | |||
| + | În proiectul Tic-Tac-Toe cu ecran TFT și butoane, optimizările au fost realizate pentru a îmbunătăți: | ||
| + | -Viteza de reacție și claritatea interfeței | ||
| + | -Ușurința în utilizare | ||
| + | -Citirea clară a codului | ||
| + | -Reducerea resurselor folosite (memorie, sunete inutile etc. | ||
| + | |||
| + | |||
| </note> | </note> | ||
| Line 63: | Line 232: | ||
| <note tip> | <note tip> | ||
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Rezultate obținute in proiect. |
| + | https://youtube.com/shorts/mDymTbDc0fk?si=P2lqlXAzB6K4TqPN | ||
| </note> | </note> | ||
| - | ===== Concluzii ===== | ||
| - | |||
| - | ===== Download ===== | ||
| <note warning> | <note warning> | ||
| - | 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ă ;-). | + | Schelet de cod |
| - | + | {{:pm:prj2025:czlatea:pm1.zip|}} | |
| - | 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> | ||