Table of Contents

Pinball Machine

Introducere

Nume: Alexe Victor-Stelian

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.

Descriere generală

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.

Hardware Design

Componentele hardware folosite:

  • Arduino UNO (ATMega 328P)
  • 2x Micro Servomotor SG90
  • 1x Buton
  • 8x Mini switch-uri
  • 3x LED-uri
  • Ecran cu afisaj LCD
  • Cablaj
  • Baterie
  • Breaboard
  • Cadru de joc din lemn

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

Software Design

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.

Rezultate Obţinute

Acesta este rezultatul final, dupa multe ore de mestesugarie :)

https://youtube.com/shorts/b_MSB-PQXok?feature=share

Concluzii

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.

Download

pinball_machine.zip

Link catre repository: https://github.com/victor1alexe/Pinball_Machine/tree/master

Bibliografie/Resurse

Export to PDF