Our friends at Alliance Studio asked us to help upgrade an R2-D2 prop. It started out as a mess (static prop, not built well), but between master mechanic/machinist, Kyle Martin (www.moxietool.com) and myself, we were able to upgrade it so that the dome rotates (Kyle made that happen), and it now seems alive. To save time, Alliance purchased an R2-D2 -- this is what we found inside the dome:
Here's what we replaced it with:
As you can see, there is an HC-8+ (master controller), and AP-16+ (for sounds), and a Teeces R2-D2 lighting kit. I was very lucky to find a guy who had one of these kits (they're nearly impossible to come by unless you're in an R2-D2 builder's group and get in on a group buy) and would sell it to us. It mostly outputs random flickering, but it can take simple serial commands to do specific animations -- the HC-8+ sends those commands in coordination with the dome movement (via a giant, all metal servo) and audio.
I can't post the entire program, but this will give you a taste of what I did. The program has running timers that can call various shows. Every 20 to 30 minutes, the Princess Leia speech (Episode 4) plays. Of course, we don't have a projector, so we put a WS2812 LED into R2's fron't projector lens and control it in sync with the audio.
Here's the code.
pub help_me_obiwan | level, color, ms
servo.move(0, 1500, ||(servo.position(0) - 1500) << 1) ' center dome
repeat until (servo.at_target(0))
time.pause(500)
repeat level from 0 to 255 ' fade on projector bulb
color := level
color.byte[1] := level * 60 / 100
color.byte[2] := level * 60 / 100
projector.set(0, color)
time.pause(8)
teeces_cmd(@Leia)
ap16_wav(%00, string("leia"), 1)
time.set(0)
repeat ' flicker projector 34 secs
level := (prng.random >> 1) // 193 + 64
color := level
color.byte[1] := level * 60 / 100
color.byte[2] := level * 60 / 100
projector.set(0, color)
ms := (prng.random >> 1) // 13 + 13
if (time.millis < 34000)
time.pause(ms)
else
quit
teeces_cmd(@AllOff)
repeat level from 255 to 0 ' fade out projector
color := level
color.byte[1] := level * 60 / 100
color.byte[2] := level * 60 / 100
projector.set(0, color)
time.pause(4)
time.pause(2000)
teeces_cmd(@Normal)
Here's a very short clip of the R2-D2 working.
-- https://drive.google.com/open?id=0B5Z6lJmoPrb9emNHZ1NpdGhBSTQ