TIC TAC TOE

  • Autor: Trofim Victoria
  • Grupa: 332CD

Introducere

  • Proiectul reprezinta un jocul popular Tic Tac Toe sau “X și 0”. Acesta va fi posibil de jucat in doi pe un sistem care contine afisare pe o matrice LED, un buton pentru resetarea jocului si un sensor capacitiv.
  • Scopul proiectului este de a realiza o interfata hardware integrata cu partea logica astfel incat jocul sa fie complet si intuitiv pentru utilizatori.
  • Ideea de la care am pornit este de a realiza un proiect interactiv si familiar care ar fi interesant de jucat chiar si dupa finisarea materiei, cu prieteni sau colegi
  • Imi pare util acest joculet fiindca pentru a-l juca este nevoie de implicarea a minim 2 utilizatori / maxim 2 utilizatori + multi vizionatori care isi asteapta randul. Astfel, acest proiect ajuta oamenilor in socializare, iar facand parte din clasicele jocuri de entertaiment, ar atrage mai multi oameni sa il incerce si sa se distreze datorita cunoasterii preventive a conceptului jocului.

Descriere generală

Proiectul este dezvoltat pe o placuta Arduino cu afisarea starii jocului pe matricea LED. La fiecare miscare, unul din jucatori va atinge casuta dorita de pe tastatura capacitiva iar rezultatul va fi colorarea zonei alese pe matricea LED cu rosu sau verde in functie de culoarea care defineste jucatorul. Cand jocul a luat sfarsit, se apasa pe butonul de reset pentru a reincepe joaca.

Laboratoare folosite:

  • PWM - control LED pentru efect tranzitie intre culori
  • UART - afisarea starii jocului in consola + interfata processing
  • I2C - control tastatura capacitiva

Hardware Design

LISTA DE PIESE - ROL

  • Microcontroller (Arduino Nano ATMega328P) - “creierul” sistemului
  • Matrice LED Bicolora 8×8 (Red and Green) - afiseaza starea jocului
  • Sensor capacitiv cu 16 butoane (9 butoane folosite) - capteaza input de la jucatori a casutelor selectate
  • LED - variatia lina a colorilor
  • Buton - resetarea jocului
  • 3 Rezistente - limiteaza curentul ce trece prin LED
  • Breadboard - conectare piese
  • 3 Registri SNx4HC595 pe 8biti - controleaza cei 24 pini ai matricii (nu avem suficienti pini la microcontroller)

EXPLICATII SCHEMA ELECTRICA → Legaturile 5V - VCC → Alimentarea

→ Legaturile GND - GND → Impamantarea

→ Microcontroller - Tastatura(TTP229)

  • D3 → SCL - Transmite impulsuri de ceas pentru a integora tastatura
  • D2 ← SDO - Primește cate un bit pentru starea fiecarei taste de pe TTP229

→ Microcontroller - Registre

  • D4 → SER(PIN 14 Reg1) - transmite date bit cu bit in registre
  • D5 → SRCLK(PIN 11) - trimite impulsuri de ceas care shifteaza bitul nou in registru
  • D6 → RCLK(PIN 12) - trimite impulsuri la care datele din registru sunt transferate la iesiri(Qa-Qh)

→ Microcontroller - LED/BUTON

  • D9,10,11 - Controlează LED-ul de variatie a culorii
  • D12 - Controleaza butonul de reset

→ Registru1 - Matricea LED

  • PIN 1-4 → PIN 6-9 - control LED asoc. PIN-ului
  • PIN 5-7 → PIN 10-12 - control LED asoc. PIN-ului
  • PIN 8(GND) → GND
  • PIN 9 → SER(Registru2)
  • PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
  • PIN 11,12,14 - explicat la sectiunea microcontroller - registre
  • PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
  • PIN 15 → PIN 5 - control LED asoc. PIN-ului
  • PIN 16 ← 5V

→ Registru2 - Matricea LED

  • PIN 1-7 → PIN 23-16 - control LED asoc. PIN-ului
  • PIN 8(GND) → GND
  • PIN 9 → SER(Registru3)
  • PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
  • PIN 11,12 - explicat la sectiunea microcontroller - registre
  • PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
  • PIN 14 ← PIN 9 REG 1 - transmite date de la REG1 → REG2
  • PIN 15 → PIN 24 - control LED asoc. PIN-ului
  • PIN 16 ← 5V

→ Registru3 - Matricea LED

  • PIN 1-3 → PIN 2-4 - control LED asoc. PIN-ului
  • PIN 4-7 → PIN 16-13 - control LED asoc. PIN-ului
  • PIN 8(GND) → GND
  • PIN 10 ← 5V controleaza stergerea registrului (pe LOW sterge registrul, tinem pe HIGH ca sa retinem date)
  • PIN 11,12 - explicat la sectiunea microcontroller - registre
  • PIN 13(!OE) → GND - (LOW pentru activarea iesirilor, altfel - deconectate)
  • PIN 14 ← PIN 9 REG 2 - transmite date de la REG2 → REG3
  • PIN 15 → PIN 1 - control LED asoc. PIN-ului
  • PIN 16 ← 5V

Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare - Arduino IDE
  • Librării şi surse 3rd-party : ”#include <TTP229.h>” - biblioteca third-party pentru controlul tastaturii capacitive TTP229(GetKey16(), resetKey16())
  • Structuri implementate
  1. struct Matrix – structură pentru a reține starea unei celule din matricea LED: poziția rândului și starea LED-urilor verzi/roșii
  2. matrixArray[20] – vector de Matrix pentru a salva mișcările jucătorilor pe tablă
  3. movesArray[20] – vector care ține minte tastele apăsate (pozițiile ocupate)
  4. board[12] – vector care reține starea fiecărei poziții din joc (0 = liber, 1 = roșu, 2 = verde)
  • Algoritmi
  1. reverseBits() → inversează ordinea bitilor dintr-un byte (pentru afisarea corectă pe LED-uri)
  2. checkWinner() → verifică dacă un jucător a câștigat folosind combinații predefinite
  3. Tranziție culori LED RGB → algoritm de fade color cycling între roșu, verde și albastru
  • Functii implementate

  • Calibrarea elementelor de senzorică:
  1. Senzor folosit → TTP229 – tastatură capacitiva
  2. TTP229 funcționează bine fără calibrare software dacă este corect alimentat și setat: SCL și SDO conectați corect la pini digitali (in cazul nostru TTP_SCL = 3, TTP_SDO = 2)
  • Optimizari cod:
  1. Codul folosește direct registrele temporizatorilor TCCR1A, TCCR1B, TCCR2A, TCCR2B pentru controlul LED-ului RGB → E mult mai eficient decât analogWrite() pentru controlul fin și sincronizat al culorilor. Optimizarea se face in setup() și folosit în updateRGB() prin modificarea valorilor OCR1A, OCR1B, OCR2A
  2. Se folosește millis() pentru temporizarea tranzițiilor LED RGB, evitând delay().Delay() blochează programul, cat timp millis() permite execuție paralelă.
  3. moveIsValid() previne ocuparea de 2 ori a aceleiași celule
  4. Funcții separate pentru sarcini repetitive (shiftColor(), resetGame(), checkWinner()) → imbunatateste modularitatea

Rezultate Obţinute

La etapa actuala, toate firele si elementele componente ale proiectului au fost mutate de pe breadboarduri pe o singura placuta pentru a lasa o imagine cat mai curata a jocului, iar toate firele pe spate. Partea de software si hardware functioneaza in totalitate iar jocul este in varianta sa finala.

CLICK PE LINK PENTRU A VIZUALIZA VIDEO JOACA: https://drive.google.com/file/d/1w8F6hNY2EZeItzdoTdht_2_9ZUqWOmgQ/view?usp=sharing

Concluzii

Download

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.

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/vstoica/victoria.trofim.txt · Last modified: 2025/05/28 01:40 by victoria.trofim
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