Table of Contents

Laser Tag Gun

Introducere

Proiectul constă în crearea unui joc simplu de laser tag, în care avem la dispoziție un pistol cu laser și scopul de a anihila o țintă.

Ideea de la bază a fost să fie ceva distractiv și ușor de personalizat, dar să fie și util/relevant pentru mine, astfel încât să am ce învăța lucrând la acesta. Consider că este util și pentru alții, fiind un exemplu drăguț de utilizare a transmisiilor în infraroșu.

Descriere generală

Funcționalitatea de bază a pistolului este aceea de transmisie infraroșu. În plus, acesta va avea atașat un ecran LCD care să afișeze starea curentă a jucătorului (muniția și numărul de vieți rămase) și un difuzor care va emite un sunet atunci când se trage.

De asemenea, vor exista 2 butoane, pentru tras și pentru resetarea jocului.

Microcontrollerul așteaptă un semnal de la butoane.

Atunci când este apăsat un buton, se va auzi un sunet specific și ecranul se va actualiza, pornindu-se și transmițătorul IR dacă a fost apăsat butonul de tragere.

Hardware Design

Listă de piese necesare:

  • 1x Arduino UNO
  • 1x buzzer
  • 2x push button
  • 1x ecran LCD 16×2 cu I2C
  • 1x LED infraroșu (940nm)
  • 1x receptor infraroșu (940nm)
  • 1x LED pentru feedback vizual
  • rezistențe: 1x 100Ω, 1x 1kΩ, 1x 10kΩ

Pentru realizarea schemei in Tinkercad, am folosit, în loc de LED și receptor IR (nu existau), un LED simplu și un fotorezistor.

Realizare fizică

În implementarea fizică a proiectului, am folosit 2 mini breadboards:

Software Design

Fișierul sursă .ino se află în arhiva de la secțiunea Downloads.

Am lucrat în Arduino IDE, dar am folosit și Tinkercad pentru a testa circuitul inițial.

Am folosit, în mare parte, funcțiile de bază din Arduino. În plus, am avut nevoie de o bibliotecă externă pentru LCD (LiquidCrystal_I2C.h). La citirea informației de la senzorul infraroșu, am folosit regiștri pentru ADC.

Pentru actualizarea ecranului cu statusul pistolului și pentru a avea un interval minim de timp între două împușcări succesive, am preferat folosirea de operații asincrone în locul funcției de delay.

Logica jocului se petrece în funcția de loop():

Cu cât e mai mare valoarea pragului folosit pentru înregistrarea loviturilor, cu atât unghiul la care trebuie sa fie transmițătorul față de receptor în momentul tragerii este mai aproape de 90 de grade.

Rezultate Obţinute

Deoarece am făcut economie și am optat să folosesc un singur Arduino, mai jos este un videoclip cu un pistol care se împușcă singur :-D

Concluzii

Spre surprinderea mea, după lupte seculare și design intensiv, circuitul încă mai era funcțional când încapsularea lui a fost gata. 8-)

Din păcate a trebuit să las pe afară partea de receptor, ca să pot demonstra funcționalitatea pistolului mai târziu, la PM Fair (în mod normal, pistolul ar fi avut atât transmițătorul cât și receptorul atașate).

Download

Arhiva cu pozele și fișierul sursă: lasertag_project.zip

Jurnal

Bibliografie/Resurse

Pentru codul de la buzzer, am folosit sursa de aici.

Export to PDF