Grupa: 333CC
Voi implementa o masa de pinball, ce va permite jucatorului sa altereze traiectoria unei bile actionand doua padele, cu scopul de a nimeri cat mai multe obiecte cheie pentru a creste scorul obtinut.
Scopul proiectului este de divertisment.
Inspiratia a provenit din faimosul joc 3D Pinball Space Cadet de pe Windows XP, pe care l-am jucat cand eram mic, astfel ca mi-am dorit sa reproduc jocul in format fizic, intr-un mod destul de accesibil.
Consider ca acest proiect are o utilitate de a reuni prietenii pentru cateva partide de joc distractive prin inducerea fenomenului de nostalgie asociat cu unul dintre jocurile copilariei de pe PC.
Jucatorul impinge bila de metal pe zona utila de joc. Acesta apoi actioneaza prin intermediul butonului servomotoarele care vor roti padelele pentru a impinge mingea pe teren. Mingea va lovi mini switch-uri care vor duce la aprinderea de leduri si cresterea scorului afisat pe ecranul LCD.
Configuratia pinilor:
PD5 → Semnal PWM catre motorul servo SG90 partea stanga
PD6 → Semnal PWM catre motorul servo SG90 partea dreapta
PD10 → Semnal input de la micro switch-uri
PD7 → Semnal buton pentru actionare motoare
PD3 → Semnal PWM pentru aprindere led-uri
GND → GND(motor servo SG90, buton actionare flaps, LCD)
VCC → VCC(motor servo SG90, buton actionare flaps, LCD, LED-uri)
A4 → SDA pentru comunicarea I2C cu LCD-ul
A5 → SCL pentru semnalul de ceas in I2C al LCD-ului
Pentru dezvolatarea codului proiectului, am folosit Plaftorm IO in combinatie cu IDE-ul VSCode.
De asemenea, am folosit biblioteca pentru ecranul LCD prin comunicare I2C, dar si pentru actiunea servomotoarelor.
Am folosit Timer-ul 0 al microcontroller-ului pentru a evita fenomenul de switch debouncing, prezent pe micro switch-urile care trimit un semnal de tip intrerupere pentru actualizarea scorului pe ecran. Parametrii corespunzatori setarii ceasului (prescaler, compare value) au fost determinati empiric. Pentru actiunea servomotoarelor, am folosit intreruperi din PCINT0, mai precis PCINT23, astfel semnalul PWM de aplicare a noii pozitii motoarelor se realizeaza in loop-ul principal, la setarea flagului din intrerupere, la momentul apasarii butonului.
Ecranul LCD este conectat printr-un driver I2C, pentru a se realiza mai convenabil programarea sa, iar LED-urile sunt comandate de un pin cu suport PWM pentru a regla intensitatea luminoasa, actionate prin modul Fast-PWM de pe Timer2.
Acesta este rezultatul final, dupa multe ore de mestesugarie :)
A fost o placere sa lucrez la acest proiect, deoarece am invatat destul de bine bazele programarii cu microcontrollere, si combinarea elementelor fizice (hardware + auxiliare cum ar fi construirea mesei de joc) cu cele software.
Link catre repository: https://github.com/victor1alexe/Pinball_Machine/tree/master
Schema EAGLE pentru placa Arduino UNO: https://blog.adafruit.com/2010/09/27/arduino-arduinoboarduno-eagle-files-and-schematic-posted/