User Tools

Site Tools


Laser Tag System

Back in 2010, members of the Connected Community HackerSpace were discussing what to do for a end of year social event. The short story is that someone suggested perhaps Paintball Skirmish could be fun but it was considered that the field entry tends to be good but you pay a bit for the paintballs. At that point someone else suggested that we build our own.

The basis of the system is that focused Infrared light is emitted from a gun (also known as tagger) or other weapon. If that packet hits a sensor worn by another player, it is decoded into a string. That string is then checked to ensure it is valid and acted upon as a hit. A sound might be made by the target's tagger and so on.

Feature list

(Not all of these will be implemented overnight though)

  • 50+ Players
  • 4+ Teams
  • Fully editable gun and game configurations
  • This is a little tricky as it requires the server to be able to alter the various parameters of the tagger.
  • Full-Auto Switch
  • Support for Medic Box and Ammo Box “pick-ups”.
  • Players can “pick up” additional Health and Clips on the field
  • Adjustable “Barrel Overheat” function
  • The more you fire, the quicker the barrel heats up. Applicable for rapid fire/large ammo taggers.
  • Automatic Respawn – Adjustable Time Delay
  • Set by the server, the player may not be able to rejoin the game untill a timeout expires or the start of the next “tick”.
  • Automatic Timed Games – Game Over after time limit expires
  • Electronic “Flags” – Sensor LEDs flash to indicate “carry”; drop flags when killed
  • Gun-to-gun wireless “Cloning” allows instant configuration of additional taggers
  • Intelligent display backlight control
  • Anti-cheating features
  • Infrared (IR) LED fail monitor w/ alarm
  • As the IR LED is basically a “voltage divider”, should the LED blow, it will cause the monitoring pin to be pulled low when being fired.
  • Precision battery monitor w/ low battery warning
  • Built-in Referee Gun functions (a tagger can be configured as the Ref Gun or it could be a dedicated gun, such as using a rotary encoder control to dial up the parameter and the the value to set it to.)
  • Built-in ISD recorder function for uploading custom sound effects
  • As this may require disconnecting the RF data module from the tagger, it's worth considering if it's necessary to have external connectors to the outside of the tagger.
    • No need to purchase external sound chip programmer.
  • Zero configuration (See below)
    • Each tagger has a unique identifier

Required interface

  1. The following user controls are required:-
  2. Fire button (usually a trigger)
  3. Reload (change ammo clip/magazine)

This could be a microswitch on a removable cartridge or similar

  1. Mode switch (possibly not required during the game but could be useful for cycling through start-up options, confirm the option with the fire(??) button)
  2. Fire mode button (Single shot or full Auto, alternatively this may select the secondary fire mode)

As the LCD backlight may be enough to give away your positon, the back light needs to be able to be turned off by the user.

Perhaps switched back on if there is a fatal error such as Game Over.

Tagger Subsystems

A laser tag system has many modules or subsystems involved. One principle that I am interested in pursuing is the ability for the system to be as close to zero configuration as possible. This means that when you switch on a tagger, it will attempt to find as server. A list of servers will be shown on the lcd and the player chooses which server to associate with. The server also balances the number of players per team with a preset game type.

Main Board

The main board is based around an ATMEGA 328 which uses a Arduino related bootloader for easier reflashing of the application software. This software has been published into the public domain but is very incomplete. There are connectors to external devices such as the battery, sensor “bus”, Infra red LED, key switch for power cycling the tagger, etc. The other major component is a sound module on which multiple sounds are record which indexed appropriately. On nice feature is being able to interrupt one sound by playing another. No need to check first.

Reference board: Unfortunately the schematic isn't available, instead you require ExpressPCB to make changes. Not nice

Pin Out

This list is an aggregation of the pins mentioned elsewhere in this document.

Pinout of an ATMEGA168/328 and Arduino equivalent

[Fixed] means that the peripheral can not be relocated elsewhere.

D0      Serial RX  
D1      Serial RX 
D2      Trigger Pin (INPUT)
D3      IR PWM (OUTPUT) Driven from Timer2
D4      TSOP Data pin (INPUT)
D5      IR Dimmer via FET (can be dropped if necessary) 
D6      LCD backlight (PWM)
D7      To LCD via Shift Register   
D8      To LCD via Shift Register 
D9      To LCD via Shift Register 
D10     SPI (SS) 
D11     SPI (MOSI) [Fixed]
D12     SPI (MISO) [Fixed]
D13     SPI (SCK)  [Fixed]
A0      Fire Select switch (eg Safe/Burst/Auto) via resistor Ladder
A1      Reload/Mode buttons/switches (Might be able to be combined with the Fire Select
A4      Data (SDA)
A5      Data (SDA)

Still need a ADC pin for monitoring the battery usage. If we could find an “Battery fuel guage”, we could use I2C bus.


There are there are three major “buses” in use:

  1. SPI (Serial Peripheral Interface)

This is being used for the sound chip as it's quick and low latency.

  1. I2C (Inter-Intergrated Circuit)

This will be a general purpose bus to connect to unique identifying chips for ammo magazines/clips and the like.

  1. LCD

While this is not considered to be a bus, it is a requirement to provide several pins.

  1. Options parallel bus mode, I2C or shift register see PebbleV1 (PebbleV2 used a LCD and hence the code will be different).


While the sound module has been documented else where, I would like the spell out the pins to have them all in one place.

10 (SS)
Could be other pins also 11 (MOSI) 12 (MISO) 13 (SCK) 

Note: Only Pin 10 (SS) can be relocated.


The I2C bus will be used to allow the system to be expanded and allow for peripherals such as LED ammo counters.

A4      Data (SDA)
A5      Clock (SCL)

Addresses for some common devices

Address Device Part Number Notes
0x70 » 1 (or 0x38 or 56 Decimal) NXP SAA1064 4 digit 7-segment display LED: Ammo Counter or healthNote: SAA1064 has an address offset of 0-3 to connect four devices on the one bus.
70h (112 Decimal) Maxim DS28CM00 Datasheet Unique IdentifierCould be used to identify a particular taggeror even down to the identifier of a particular magazine/clip
Not SureSee datasheet for explanation Microchip 24AA02E48 Datasheet Unique IdentifierCould be used to identify a particular taggeror even down to the identifier of a particular magazine/clip

There is probably a magnitude of other devices that could be useful as peripherals.

RGB Hit Led

Could add RGB led controlled instead of the single colour LED. Run the I2C bus to the first sensor dome or other central location and then the RGB signal from there. LED colour could signify which team a player is on (may not be bright enough) or if the player is low on ammo or hit points. See Blinkm by Thingm There is also a generic version called a HackM as the firmware for the BlinkM isn't freely available.

Reference material: Arduino and I<sup>2</sup>C bus Tutorial

Arduino and NXP SAA1064 LED display driver


If we use a shift register (4094N) we should need three Digital Pins say 7,8 and 9 (to be consistent). We haven't figured out the size of LCD to use for the tagger, the flags and fixed devices might be better with a larger LCD. The referee tagger could have a 40×4 character LCD.

Buttons and switches

  • Fire

Usually the fire button is some form of trigger but could be a push button, depending on the tagger type. High Priority. Pin: D2

  • Reload
  • Mode

Allows setting of some settings when starting a game or joining a server.. this need more work

  • Fire Select

Fire modes are single shot, full auto and safe. May require a three throw switch. Put onto a resistor ladder to a Analog Input pin (A0)

Reload and Mode will be connected via resister ladder to an analog input pin (A1).

Serial Interface

The serial interface may be connected to an wireless module of some sort via D0 and D1.

Other Peripherals

Switching on IR emitter: D3 Sensor hits from TSOPs: D4. Dimming the IR emitter: D5 This is done via a MOSFET which short a limiting resistor in-line with the IT emitter. Control of the LCD back light: D6

Spare pins

(Please update this section as pins are assigned or released)

We have no spare digital pins! We have two analog pins: A2 and A3

Zero Configuration

The traditional laser tag system requires configuration for each game and tagger Lazer Tag Team Ops Game Hosting Tutorial A better solution would be to have the tagger partially self configures itself when connecting to a server.

The sequence of events would be something like the following:-

  1. Server periodically asks 'Who is out there?'
  2. Tagger when receiving the response from the server will send back a unique identifier eg MAC address
  3. Tagger and Server then builds up a profile on board for various fixed parameters such as the player's nickname/squad

Ensuring that the UID is totally unique is tricky, on option is to use a pre-programmed address in a external chip such as the Microchip 24AA02E48 See How to read the MAC address Note: The mac address can't be changed so could be a good way to whitelist known trusted taggers or blacklist known bad taggers. The only way to change the MAC address is to unsolder the chip and replace it, especially if it's soldered to the main board.

Unique Ammo/Health/Other reloads

Status: Intermediate

While virtual ammo reloads has been implemented in the form of a reload button and a suitable delay, it does have the disadvantage in that you can't transport ammo from one part of the game field to another. You also can't pass some of your supplies to your team mate.

It would be handy to have a unique identifier attached to the id. Note: As writing to an EEPROM is slow (around 3 milliseconds), we will not change the contents of the memory. Instead we track which identifier is assigned to a player and should one of those end up loaded into another players tagger, we query the server for information about that reload (number of rounds and the like)

Storing configuration in EEPROM

The advantage of storing default values in EEPROM is that you can store the class of weapon semi-permanently without needing to manually configured each time or hard coding and burning it to the processor.

Example code:

Power Supply

As the tagger needs to be portable, we need to use a battery pack of some sort. The reference design requires 7.2V battery packs. It became apparent that battery packs for R/C cars seem ideal as they are available just about everywhere in case you need one in a hurry.

After a quick sparring session of google-fu, we came up with the following options as a quick pass.

Lithium Ion or Lithium Poly

2000mAH $9.26 each Plenty of other options depending on the power draw. A high fire rate tagger will draw more power than something which has a lower fire rate. If the tagger has a simulated recoil, then the power draw will be higher over the course of a game.

Nickel Metal Hydride or NiMH

As a first pass, we found the following Venom 7.2V 6C 5000mAh NiMH Stick 5Ah sounded like it would last a while but at $75 reduced from $89, wasn't happy with the price.

4300mAh for $60 start to look better.

Venom 3000 NiMh 7.2V for $44.95 is around the money and we stopped looking.

Note: You will need a charger for these. Chargers for remote use (off the car battery) are readily available.

Nickel Cadmium or NiCad

Cheap but can be a little fickle if not fully discharged occasionally.

Last but not least 7.2V 2000mAh NiCad The charge time is 14 to 18 hours so plan a head to ensure that you arrive with a full charge. The charger that Dick Smith sells appears to be nasty in that it has no cut off so subject to over charging.


Regardless of what you choose from the above, they come with a non-standard plug by Tamiya. We will need an adaptor lead to charge this into something that we can plug onto the main board.

Male and Female connectors $5.95

Soft Power button

Given that the taggers are running from battery power, a member (Hi Paul!) raised the issue of power consumption. One solution could be to add a soft power switch. A soft power switch is circuit containing a momentary switch that when press energises the circuit to power on the rest of the device. The microprocessor can then power down the device or put it into sleep for a while. This allows us to eliminate the keyswitch which is an expensive part both cost and consumed space.

Devices that could be powered down to save battery power are:

  • LCD/Display
  • Sensor Loom
  • RF Module
  • I2C and SPI devices

This will require extra FETs to switch off the power to these devices. There is also the other complication is the need to re-initialise the above devices when need powered up again. Perhaps include the circuitry but allow the tagger to be powered down from a button press. More thought is required on this idea.

Infra Red LED

In the main, laser are not widely used as you are trying to hit a sensor component that is about the size of your little finger. Instead we use a focused infra-red LED which reduces the unwanted spread and increases the intensity of the light, and leads to better range. The other trick is give we are pulsing the IR emitter and most of the time it's switch off, we can over drive it at a substantially higher current, say 1Amp. The does mean that you may end up shortening the life of the emitter so make sure it can be replaced with relative ease.

Recommended component: Vishay TSAL6100

Prices from Digikey Cat No: 751-1203-ND: 1 off 0.55000 10 off 0.42800 25 off 0.36120 100 off 0.29400

Prices from Mouser: Cat No: 782-TSAL6100 1: $0.743 10: $0.578 50: $0.446 100: $0.397 (Not linkable due to use of browser session tracking)

Digikey has better prices.

Alternative: SFH-4512

Price from Digikey: 475-2943-ND 1 off 0.34000 10 off 0.27600 100 0.24980 A little cheaper but not as much when you buy in bulk

Configurable PWM for the Infrared LED

I have been pondering how to have a configuration option for the different IR carrier frequencies. One option is to set the PWM timer to

See for details.

Optics and Focus Length

The Lens should be matched to the LED that you have chosen to use, see MilesTag Optics

Lens Calculator

Found the following Lens calculator which simplifies a things a bit.

TSAL6100 (10°Half Angle) 50mm Dia x 150mm FL Optotronics L-0011

TSAL7600 (15°Half Angle) 38mm Dia x 75mm FL Optotronics L-0005 - Confirmed by GRP 27/5/2012

TSAL6200 (17° Half Angle) 50mm Dia x 75mm FL Optotronics L-0010

TSAL7300 (22°Half Angle)


The sensors used in professional units use Vishay TSOPs. They are constructed as a chip that has a light sensor which interfaces with a fairly complex chip for minimising interference and rejecting foreign light sources. The entire assembly is potted inside an epoxy resin which filters the visible light. Nice piece of technology.

Usually the sensors are mounted on the tagger and on a head band worn by the player. Covering the sensors is considered cheating.

The sensors need to match the wave length of the IR emitters and the carrier frequency used by the game. There are three main frequencies 36, 38 and 56kHz. The problem with 36 and 38kHz is that they are commonly used for tv and other household remote controls. This does make them a little cheaper. The downside of the lower frequency is that they are not as immune to interference from indoor lights or strong sunlight as the 56kHz version

Recommended component: TSOP4856 Mouser Price: 1 off $1.28 10 off $1.21 100 of $1.10 Number required: 4 head sensor domes, plus 1 for the tagger, three Sensors per dome: Approx 15 per player.

For prototyping an enclosure to keep the water out, it is best to use something off the shelf. Considering using the capsules that childrens toys are vended in. see Amazon's B006JQLQHU for example. Need a couple to figure out if we can get three TSOP, a hit LED and two connectors (4P4C handset connectors or the small molex plugs.) Minimum of four connectors are required: +5V, Ground, TSOP signal, Hit Led. The connections are pass-through to the other connector(s). As the TSOPs are open-collector, they can be in parallel with each other. Makes it Easier!

It would be beneficial to allow for the IR carrier frequency to be changed via a menu option. This allows for a difference sensor array to be utilised. Not a requirement immediately.

Wireless Data Module

Some older systems do not use a data module but instead records the statistics such as how times you have fired at something versus how many times you have been hit but someone else. The wireless module needs to talk to a server but there is the case when the wireless can't be received, so storing the data on-board until it can be sent is probably a good idea. The other disadvantage of the reference design is that one of the pins that would otherwise be used for the serial port is in use! All other pins are being used, so we should consider removing a function to free a pin and switch some pins around to suit. The other alternative is to use a shift register to free further pins.

Sound Module

While it's feasible to drive a piezoelectric speaker directly, it's not high fidelity and does create extra work for the processor on the main board. The reference design is using a ISD1790 Sound Chip which has been used in answering machines, toys and the like.

The sound module is connected to the microprocessor as well has to a small audio amplifier which then connects to a speaker. There is an audio in to record sound effects from a computer or other sound source.

Interfaces to the Arduino using SPI

Suggested pins:

Pin Function
10 (SS) Could use other pins instead
11 (MOSI)
12 (MISO)
13 (SCK)

Note that even if you're not using the SS pin, it must remain set as an output; otherwise, the SPI interface can be put into slave mode, rendering the library inoperative.

For people that are interested in longer play times or higher sample rate, there is the ISD151xx chip set. This chip is only available in LQFP, which is not able to be hand soldered, hot air maybe.


Sound effects as used by MilesTag: mtsounds

Sound Recorder for the VoiceShield from SpikenzieLabs. The software has been written in Processing and appears to be public domain. There is no schematic but should be possible to reverse engineer the project. Note: The code has been written a different chipset (obsolete) so we will need to port the code.

A more accessible alternative is the Demo board for the ISD1700, the full schematic and some details can be found in the manual

Alternative code can be found at Tutorial of ISD1700 Arduino Shield Note: The Title of the blog entry has a mistyped title of ISD7100 when it's referring to the ISD1700 throughout. All good

Data sheet for ISD1700 And Design Guide

This will be fleshed out further as the software progresses.


  1. Manually record some sample sounds via the inbuilt microphone.. Say “One, two three” as separate recordings.
  2. Use the SPI bus to play an index recording.
  3. Use Processing to “upload” multiple sounds in order as separately index recordings.

Server Subsystems

The server allows an administrator to configure the game as far as number of teams, who is on what team, the options are endless.

Host board

As it could be good fun to be able to play outdoors in a remote area, it would be helpful to avoid having to use a bulky and power hungry PC. Instead we based it on a router board which is Open-WRT compatible.

Wireless Data Module

This wireless module needs to be compatible with the module that is contained inside taggger but might be higher powered for better acknowledgements.


MilesTag Protocol:

Optics reference:

Example system built around ATMEGA328: LaserTag.pde code

Tagger Ideas

The rule of “Don't be a bloody idiot” applies here. That is don't make something that resembles a real firearm.

project/member/dormant/laser_tag_mt.txt · Last modified: 2015/04/16 20:22 by projectgus