This is an old revision of the document!


Capacitive Whac-A-Mole

Introducere

Proiectul “Capacitive Whac-A-Mole” este o varianta digitala si interactiva a jocului clasic de tip arcade. In loc de a folosi un ciocan fizic si butoane mecanice, acest proiect utilizeaza capacitatea electrica a corpului uman pentru a detecta atingerea.

Scopul: Scopul principal al acestui proiect este implementarea unui joc de viteza si reactie folosind senzori capacitivi construiti manual.

Ideea de la care am pornit: Conceptul a fost inspirat de proiectele de tip “Pian din banane”. Totusi, in loc sa utilizez input-ul capacitiv in mod pasiv (pentru a genera note muzicale), acest proiect transforma input-ul intr-un joc activ, bazat pe logica, cu un sistem de scor, dificultate crescatoare si feedback vizual/audio.

Utilitate: Serveste drept o demonstratie excelenta a modului in care corpul uman poate actiona ca un dielectric intr-un condensator, inchizand un circuit electric. Pentru dezvoltator, este o aplicatie practica excelenta pentru timere hardware, masini de stare (state machines) si manipularea directa a registrilor in limbajul C.

Descriere generala

Sistemul este centrat in jurul microcontrolerului ATmega328P. Bucla de interactiune este urmatoarea:

  • Microcontrolerul selecteaza aleatoriu una dintre cele 6 tinte si aprinde LED-ul corespunzator.
  • Un timer incepe sa curga. Microcontrolerul interogheaza constant senzorul capacitiv al tintei active.
  • Daca utilizatorul atinge tinta conductoare (ex: banda de cupru, moneda sau folie) inainte ca timpul sa expire, microcontrolerul detecteaza schimbarea de capacitate, inregistreaza lovitura, creste scorul si reda un sunet de succes.
  • Pe masura ce scorul creste, timpul permis pentru a lovi tinta scade, crescand astfel dificultatea.
  • Daca timpul expira sau utilizatorul loveste tinta gresita, jocul se termina cu un sunet de “Game Over”, iar scorul este afisat pe ecranul LCD.

Hardware Design

Lista de piese (BOM):

  • 1 x Microcontroler ATmega328P (format placuta Arduino Uno)
  • 6 x Rezistente 10 MΩ (Cruciale pentru constanta de timp RC a senzorilor capacitivi)
  • 6 x Rezistente 330 Ω (Pentru limitarea curentului prin LED-uri)
  • 6 x LED-uri 5mm
  • 1 x Buzzer Pasiv
  • 1 x Modul LCD 16×2 cu I2C (Pentru afisarea scorului)
  • 6 x Tinte conductoare (Banda de cupru / Folie de aluminiu)
  • Breadboard si Fire Jumper (Mama-Tata si Tata-Tata)

Conexiuni si maparea pinilor:

  • Senzori Capacitivi (Input): Un pin comun de SEND (PC2) este conectat la toate cele 6 tinte prin rezistente individuale de 10 MΩ. Tintele sunt, de asemenea, conectate direct la pinii de RECEIVE (Portul B: PB0 - PB5).
  • Feedback Vizual (Output): Cele 6 LED-uri sunt conectate la Portul D (PD2 - PD7) prin rezistente de 330 Ω catre masa (GND).
  • Feedback Audio: Buzzer-ul pasiv este conectat la pinul PC3.
  • Afisaj LCD: Ecranul I2C foloseste pinii hardware TWI standard: SDA (PC4) si SCL (PC5).

Software Design

Mediu de dezvoltare: Firmware-ul a fost dezvoltat folosind Microchip Studio (Atmel Studio) / AVR-GCC, scriind cod exclusiv in C si manipuland direct registrii hardware.

Biblioteci folosite:

  • <avr/io.h> si <util/delay.h> pentru operatiunile standard AVR.
  • <stdlib.h> pentru generarea de numere pseudo-aleatoare (rand(), srand()).
  • Biblioteca I2C LCD pentru controlul ecranului 16×2 (folosita la laborator).

Laboratoare PM folosite in proiect:

  • Laboratorul 1 (GPIO - Intrare/Iesire): A reprezentat baza intregului hardware. L-am aplicat pentru configurarea pinilor ca Iesire (aprinderea LED-urilor de pe Portul D, trimiterea semnalului catre Buzzer) si ca Intrare (citirea starii pinilor de RECEIVE pentru senzorii capacitivi). Am folosit intensiv manipularea la nivel de bit a registrilor DDR, PORT si PIN.
  • Laboratorul 3 (Timere si Intarzieri): Conceptele de temporizare au fost vitale pentru implementarea mecanismului de baza al jocului (masurarea timpului de raspuns al jucatorului, scaderea acestui timeout odata cu cresterea dificultatii, pauzele dintre runde). De asemenea, logica de timere a fost folosita pentru a genera frecventele necesare buzzer-ului pasiv (tonuri scurte si ascutite pentru succes, tonuri lungi si grave pentru Game Over).
  • Laboratorul 6 (Interfata I2C / TWI): Acest laborator a fost aplicat direct pentru conectarea ecranului LCD 16×2. Folosind protocolul I2C am reusit sa afisez scorul, mesajele de start si starea jocului, utilizand doar 2 pini de date (SDA si SCL), economisind astfel pini pretiosi pe microcontroler.

Algoritmi si Implementare:

  • Algoritmul senzorului capacitiv: Logica de baza presupune setarea pinului de SEND pe HIGH si numararea iteratiilor/ciclurilor necesare pentru ca pinul de RECEIVE sa ajunga tot in starea HIGH. Din cauza rezistentei mari de 10 MΩ, corpul uman actioneaza ca un condensator cand atinge tinta, incetinind cresterea tensiunii. Daca numarul de cicluri depaseste o valoare calibrata (THRESHOLD), este inregistrata o atingere valida.
  • Masina de stare a jocului (State Machine): Jocul opereaza intr-o bucla infinita cu stari distincte: Asteptare Start → Generare Tinta Random → Asteptare Input (cu Timeout) → Evaluare (Lovit/Ratat) → Actualizare Dificultate.
  • Dificultate Dinamica: Timeout-ul initial este setat la 2000ms. La fiecare lovitura reusita, timpul limita scade, necesitand reflexe din ce in ce mai rapide din partea jucatorului.
  • Randomizare: Pentru a asigura ca tintele sunt cu adevarat aleatoare la fiecare joc, functia srand() este initializata folosind o variabila ce numara iteratiile scurse pana cand utilizatorul apasa butonul de start.

Rezultate Obtinute

Proiectul a transformat cu succes un concept pasiv de citire capacitiva intr-un joc arcade extrem de responsiv si distractiv.

  • Senzorii diferentiaza cu precizie intre starea atinsa si cea neatinsa, in urma setarii corecte a valorii THRESHOLD.
  • LED-urile si Buzzer-ul ofera un feedback instantaneu, fara intarzieri.
  • Scalarea dificultatii functioneaza perfect, facand jocul progresiv mai greu si testand eficient viteza de reactie a utilizatorului.

Concluzii

Dezvoltarea acestui proiect a reprezentat o experienta practica excelenta in gestionarea comportamentelor de tip analogic intr-un sistem complet digital. Principala provocare a fost calibrarea pragului capacitiv (threshold), deoarece valorile citite fluctuau usor in functie de grosimea firelor si de suprafata de contact a tintelor. Per total, proiectul demonstreaza ca se pot construi interfete interactive robuste folosind un numar minim de componente si algoritmi inteligenti de cronometrare.

Bibliografie / Resurse

  • [1] Fisiere de laborator PM pentru conectarea unui LCD prin interfata I2C.
  • [2] Teoria senzorilor capacitivi: Documentatia Arduino CapSense Library - http://playground.arduino.cc/Main/CapacitiveSensor
  • [3] Datasheet ATmega328P (pentru maparea pinilor, configurarea registrilor si porturilor).
pm/prj2026/atoader/bogdan.raucescu.1778770386.txt.gz · Last modified: 2026/05/14 17:53 by bogdan.raucescu
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