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:
unul pentru partea de transmițător - cu cele 2 butoane și LED-ul infraroșu, pe care l-am înseriat cu un LED simplu pentru feedback vizual
al doilea pentru partea de receptor - cu un receptor infraroșu și un buzzer cântăreț
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():
Dacă jucătorul mai are muniție și vieți, se afișează statusul pistolului pe ecran.
Se citește întâi valoarea radiației IR din ambient.
Dacă este apăsat butonul, se activează LED-ul IR și se citește valoarea radiației din nou.
Se verifică dacă diferența dintre radiația citită la apăsarea butonului (care e 0 dacă nu a fost apăsat) și cea din ambient este mai mare decât un threshhold, caz în care se înregistrează ca țintă lovită și buzzerul cântă o melodie scurtă pentru semnalizare.
Dacă jucătorul a rămas fără muniție sau fără vieți, se arată un mesaj semnificativ pe ecran și se așteaptă apăsarea butonului de reset.
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
Concluzii
Spre surprinderea mea, după lupte seculare și design intensiv, circuitul încă mai era funcțional când încapsularea lui a fost gata.
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).
[21/05/2023] - Presupunând că un pistol de laser tag are atât transmițător cât și receptor IR (pentru a ști când a fost împușcat), ar fi nevoie de realizarea a 2 astfel de circuite pentru testarea lor completă. În momentul de față dispun de un singur microcontroller, astfel încât voi încerca legarea țintei la pistol, ca să testez măcar funcționalitatea de bază.
[27/05/2023] - A fost destul de distractiv să lucrez cu componentele infraroșu, pentru că era challenging să îmi dau seama ce se întâmplă în circuit. Când încercam să îl filmez, începea să cânte, și așa am aflat că telefonul folosea IR pentru cameră Alte interferențe le-am avut de la brățara de fitness, iar folosirea transmițătorului IR m-a motivat să învăț să fac debugging cu LED-uri.
[28/05/2023] - Plănuiesc să montez circuitul pe o carcasă de carton în formă de pistol, dar mi-e frică să nu stric ceva, așa că o să folosesc circuitul în varianta sa nemodificată la prezentarea de aici.
[29/05/2023] - Chiar a mers.
Bibliografie/Resurse
Pentru codul de la buzzer, am folosit sursa de aici.