Consola permite jucătorului să se bucure de experiența clasică Tetris, controlând mișcarea și rotirea pieselor. De asemenea acestuia ii este monitorizat pulsul, in functie de numarul de batai al ritmului cardiac pe care jucatorul il prezinta, dificultatea jocului creste sau scade.
Scopul este de a recrea experiența autentică Tetris, oferind o modalitate distractivă și educațională de a învăța despre programarea pe un microcontroller.
Implementarea unei console portabile pentru jocul Tetris, utilizeaza două matrice LED 8×8 conectate prin interfața SPI pentru afișarea pieselor și un display OLED 128×64 conectat prin I2C pentru afișarea scorului, pulsului și a altor informații suplimentare. Difuzorul redă muzica, un senzor de puls cardiac monitorizeaza ritmul cardiac al jucătorului iar cu ajutorul a șase butoane se manipuleaza pozitia pieselor de joc. Toate aceste componente sunt alimentate de o baterie.
Laboratoare utilizate:
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Arduino UNO R3 ATmega328p
Rol: unitatea centrala a consolei ce contine microcontrolerul ATmega328p, aceasta preia inputul butoanelor apasate de utilizator si realizeaza comunicarea cu restul perifericelor.
Matrice cu led-uri 8×8
Rol: afiseaza jocul de Tetris
Pini:
Senzor puls cardiac
Rol: monitorizeaza pulsul cardiac al jucatorului
Pini:
Ecran OLED 0.96 Inch SSD1306
Rol: afisarea scorului, pulsului jucatorului si a dificultatii
Pini:
Driver folosit: SSD1306, I2C
Difuzor
Rol: redarea muzicii ambientale
Pini:
Baterie
Rol: Generator de tensiune 5V pentru alimentarea Arduino de la USB
Breadboard + Butoane + Fire + Rezistente
Rol: Butoanele de tip push sunt conectate între ele prin rezistoare de 220Ohmi, respectiv 330Ohmi, astfel încât fiecare buton generează valori diferite pe pinul A1. Asfel, utilizand un singur pin si un ADC putem sa captam inputul utilizatorului de la cele 6 butoane.
Senzor puls cardiac
Pentru a putea calibra intr-un mod cat mai corect senzorul am realizat urmatorii pasi: Am setat un prag al pulsului, am cosiderat ca acesta se situeaza intre 0 si 540, apoi am testat daca exista “noise”, exista doar ca este foarte mic pentru a avea o influenta mare asupra rezultatului final. Am ales mai multe locuri de amplasare a senzorului si am inceput sa stabilesc niste medii de referinta, am comparat cu un alt pulsmetru(un pulsoximetru mai ) , valorile rezultate sunt cu +/- 10% mai mari sau mai mici, iar locul unde masori pulsul, sau presiunea pe care o aplici asupra senzorului au o influenta foarte mare asupra valorilor citite.
Testare Matrice Led 8*8 si butoane
Testare OLED Display, buzzer si pulsmetru
Prototip hardware
Codul este in proportie de 70% finalizat, jocul de tetris functioneaza bine, mai trebuie sa integrez melodia pentru buzzer si trebuie sa modific ca valorile butoanelor sa fie citite de pe un pin analog. Ma mai gandesc sa implementez si un buton de reset, care sa reseteze starea jocului (vad cat timp mai am si daca imi iese pana luni).
Am utilizat Arduino IDE
Laboratorul de I2C → pentru a putea afisa pe diplay-ul OLED este utilizata biblioteca Adafruit_SSD1306 care foloseste protocolul I2C
Laboratorul de SPI → pentru a comunica cu Matricea de Led uri este utilizat protocolul SPI
Laboratorul ADC → pentru a nu mai utiliza cate un pin digital separat pentru fiecare buton, utilizam un singur pin pentru a citi valoarea a 6 butoane
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.