Miniature Basketball Arcade

Introducere

Proiectul își propune să simuleze, într-un format miniatural, funcționalitatea jocurilor arcade de aruncat la coș. Prin integrarea unui sistem de nivele, afișaj al scorului în timp real și mișcări dinamice ale inelului, utilizatorul poate experimenta într-un mod distractiv și portabil atmosfera unui arcade autentic. Ideea a pornit de la clasicele jocuri de tip „basketball arcade” pe care le găsești în sălile de jocuri. Mi s-a parut interesant să construiesc o versiune mică și portabilă, pe care să o pot avea oriunde. Cred ca proiectul poate fi o sursă de distracție la birou în momentele de pauză.

Descriere generală

Proiectul este controlat de un Arduino Uno (ATmega328P) alimentat de o baterie de 9V, cu posibilitatea de a fi pornit sau oprit printr-un switch mecanic. Pentru detectarea unei aruncări reușite — adică atunci când mingea trece prin inel — este utilizat senzorul TCRT5000. Un timer este folosit pentru gestionarea duratei fiecărui nivel, existând cinci nivele cu dificultate progresivă. În etapele superioare, un servomotor este responsabil de mișcarea dinamică a inelului, adăugând un plus de provocare. Feedbackul vizual și sonor este asigurat printr-un buzzer pasiv și o bandă LED WS2812B, oferind o experiență de joc interactivă. Toate informațiile esențiale — timpul rămas, nivelul curent și scorul — sunt afișate în timp real pe un display LCD 1602.

Fiecare nivel dureaza 60 de secunde si necesita un numar minim de puncte pentru a trece mai departe.

La nivelele 4 si 5 cosul va oscila stanga-dreapta pentru o dificultate mai mare.

La pornire, arcade-ul canta un tune prin intermediul buzzerului

Pentru fiecare coș reușit, scorul va crește automat, iar utilizatorul va primi un feedback printr-o animație luminoasă pe banda LED și un sunet emis de buzzer.

Hardware Design

  • Arduino UNO R3 (ATmega328p)
  • Micro Servomotor SG90 180°
  • Suport pentru baterie de 9V
  • Conectori de Fire PCT-8-118
  • Conectori de fire LT-211(SPL-1)
  • Modul Buzzer Pasiv
  • Bară de LED-uri RGB WS2812 cu 8 LED-uri
  • Comutator LED KCD1-101N
  • Senzor de Obstacole Digital Infraroșu
  • LCD 1602 cu Interfata I2C si Backlight Albastru
  • Fire 28 AWG
  • 3D Print-uri

Pentru ca aveam nevoie de miscare liniara pentru cosul mobil, folosesc un print 3D care transforma servomotorul intr-un mic actuator liniar

Hardware schematic

Piese folosite legate la placa

Proiectul hardware final

Software Design

Mediu de dezvoltare: PlatformIO - VS Code

Fiecare componentă utilizată prezintă un fișier sursă și un fișier header. Pentru contorizarea timpului, utilizez Timerul 2 al microcontrolerului ATmega328P.

  • actuator (servomotor) (PB2) - controlat prin Fast PWM
  • screen lcd - controlat prin I2C
  • senzor IR (PD2) - un trailing edge activeaza o intrerupere,
  • banda led rgb (PD6) - controlata prin bit-banging
  • buzzer (PB0) - controlat prin PWM prin GPIO bit-banging
  • timer - Timer2 folosit pentru cronometrare

Banda RGB comunica pe un protocol ciudat: un bit de 1 presupune trimiterea unui semnal HIGH 6 cicli de ceas, urmat de unul LOW 4 cicli de ceas, respectiv 3 de HIGH si 7 de LOW pentru un bit de 0, se trimit bit cu bit valoarile RGB pentru fiecare led. La nivel de soft, animatia folosita e salvata intr-un vector uint8.

Senzorul IR prezinta debouncing software.

Cum Timerul 2 ATmega328p foloseste un counter pe 8 biti (foarte putin pentru contorizarea unei secunde), folosesc un PRESCALER SOFTWARE care verifica cate intreruperi a generat timerul si executa rutina doar dupa un numar de apeluri.

Github

Concluzii

Download

Bibliografie/Resurse

pm/prj2025/iotelea/raul.bosoanca.txt · Last modified: 2025/05/28 11:35 by raul.bosoanca
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