I don't know if the actual product is called a "GlowBrush", but this is name inked on the white PCB. It's a simple interactive "point and shoot" device that is produced for sale in the Disney parks and resorts. Through a couple of friend's lending me one to fix, I took a little peek under the hood. Though I'm not a Disney fan, I know a number of people who are and I'm interested in figuring out what comprises this hardware.
For the benefit of those friends, I wish to reverse engineer the device to a degree so a compatible one-off creation can be made. Due to the nature of IP and which corporation made this original hardware, I will not be looking at the code inside the IC and will just pay a bit of attention to what can be observed with my hacked Rigol DS2072 and my own set of eyes and ears.
The list of hardware components are the major players in the 'GlowBrush', though not specifically what devices I'll be using.
Okay, so I've taken 75 samples of the color patterns so far and this is what I've been able to discern:
There is only 1 preset color pattern which is a red-green-blue color cycle/fade
As far as I have seen, there are 13 display patterns that are independent of the colors used.
I have to pull another 50 or so samples to verify, but with some of the logic choices made, there may be 1 to 3 more variations of a a particular pattern
Only light addition primary and secondary colors are used: red, green, blue, cyan, magenta, and yellow. With the notable addition of white. Overall 7 colors.
There are 3 speeds to the color patterns of which "fast", "normal" and "slow" are the simplest descriptors.
Except for the RGB color cycle, no more than 2 colors are chosen and this is dependent upon the pattern selected.
The illuminated color and pattern is made up of a randomized and weighted selection from those three categories with ~1:8 chance of the RGB pattern being selected.
Pragmatically, the following structure I'll define as "buffers" even though that's probably not particularly true. It's just a simple, functional noun to describe a holding place for information.
The system operates with 3 general buffers, a send, receive. and display.
Once the device turns on and goes through it's 'boot' sequence, the three characteristics are randomly chosen, which as a reminder are pattern, speed, and color, and this is then set as the value of the display and send buffers.
If someone 'shoots' you, your receive buffer is overwritten with the contents of their send buffer and then the display buffer is set to the contents of the receive buffer.
If you are not 'hit' again, after 120 seconds, aka 2 min, the contents of the send buffer are copied back to the display buffer.
If you are hit again, the timer resets and the receive buffer is once again overwritten followed by the display buffer being overwritten.
During the time of the 120 sec timer, the contents of your send buffer stay as they originally were from before you were 'hit'.
You can still 'fire' at someone and if you 'hit' them, their receive buffer is set to your send buffer.
If the 120 second timer completes, then the contents of the send buffer are copied back to the display buffer.
The only time the send buffer is modified if if you hit the color pallet button, thus randomizing the 3 categories and altering your displayed color pattern.
I do recognize that functionally there isn't a need for a "display" buffer and you can just read from the send or receive buffers, but conceptually the third component makes it easier to understand for the layman.
As far as I can tell, there is no way to 'hit' someone and change/overwrite their send buffer. This means that even if you are 'hit', you still fire back your original pattern. This also makes the original idea of the interactive prototype less functional than expected since the change is only superficial and volatile. With that said, there doesn't seem to be a reason to not proceed forward with developing compatible code. In addition, this also means that I only need my 'scope for deciphering the serial protocol that is used in IR communication and the carrier frequency for choosing the receiver. No custom colors are used and the patterns are kept simple.
For output hardware I need to be able to have 6 PWM channels, 2 dumb RGB LEDs, or 2 programmable RGB LEDs, a low power buck converter, audio amplifier, and IR comminication.
Upon opening this up, I first gleamed a look at a MSP430G2755, 28-pin TSSOP. It's hooked up to a audio controller, 2 dumb RGB LEDs, an IR LED, and a Vishay IR receiver. There are 6 products in Vishay's lineup and they differ by nature of different carrier frequencies. Over the coming weekend I'll be probing the IR LED and trying to figure out what wavelength is it's dominant one. My DSLR will pick up a TV remote's IR LED, but not these. Cell phone's IR filter blocks the TV remote's IR light. Due to the nature of this I have to devise a means of determining the beam width and strength of the IR LED for a possible, long-range upgrade.