Greg's Trash Can Trauma

For 1999 I decided to make my first foray into the world of animatronics.  After searching the web for ideas, I decided to build a version of Trash Can Trauma.  This effect was invented by Carl Chetta and Larry Lund, and is documented on Larry's Halloween page.  The Death Lord also built this project in 1997 and did an excellent job of documenting the story of its construction.

In this discussion I'll focus mainly on the aspects of this Trash Can Trauma that are different from those presented by Larry Lund and The Death Lord.  If you really want to understand how to build one of these, start with their instructions and then come back here.

Requirements

After reviewing the experiences of my predecessors, I decided to incorporate the following refinements into this version:

Mechanical

The inside of the can is separated into two main sections by a horizontal piece of plywood about halfway up.  The exact height of this divider is determined by the height of the vertical air rams (bike pumps, for you *snif* non-technical folks).  The upper section is for the visible portions of the effect itself, while the lower portion contains virtually all of the "works."  Instead of 2x4 or 1x4 lumber, I used plywood for construction of the frame because I like having a lot of extra surface area to attach more wires and gizmos as the design evolves.

It didn't take long working with the prototype to realize that I would be doing a LOT of fiddling around with this thing before it was finished.  Crawling into the bottom of the Rubbermaid trash can to tighten a fitting or adjust a valve starts to get tiresome after a while, so I decided to build the entire effect on a frame that could be removed from the trash can to give easy access to the whole thing during development.  To this end, the horizontal platform is supported by three 2x4 legs:  two short ones at the rear that sit on top of the wheel wells, and a long one in front that sits on the bottom of the can.  I also built a stand for the frame so it can sit upright -- and operate! -- while outside the can.  This is a great feature for giving demos.

At the bottom of the back side of the can is the "facilities panel," which contains all the can's external interfaces.  The compressed air supply enters the can via a quick-connect nipple on this panel.  This is attached to a self-coiling length of air line on the inside; another quick-connect fitting on the other end attaches to a pressure regulator mounted on the internal frame.  The 90 psi source is regulated to about 32 psi inside the can.  AC power enters the facilities panel through a standard IEC connector (the kind on your computer's power supply).  Finally, a 12-pin molex connector provides external access to the triggering switch contacts, as well as a 12-volt power supply that can optionally power a photodetector.  The Molex connector also provides some room for growth (8 unused pins); as you'll see, this effect contains its own microcontroller and could be used to control other effects outside it.

To make the travel of the lid really repeatable as well as rugged, I attached it with a pair of ball-bearing drawer slides in addition to the forward and rear air rams.  The rear air ram has a travel-limiting cable and spring; the front one is sufficiently loaded down by the weight of the monster that it can be allowed to travel to its full extension without damage.

Art Design

The monster's body is a cross-shaped assembly of 2" PVC pipe.  The vertical section -- his spine -- slides up and down over the forward air ram.  The horizontal section forms his shoulders.  The satellite speakers are attached to this "skeleton"  at shoulder level, so the sound appears to come from the monster himself.  Sections of padding are attached to the shoulders and body to fill out his shirt.

The head is a very large PVC cap section surrounded by paper stuffing and covered with a latex zombie mask.  The arm is a rotted latex forearm from The Nightmare Factory, mounted to its pivot with a pair of threaded rods rammed down the center (not unlike a real radius and ulna).

A black curtain hangs behind the monster to highlight his face and to cover the drawer slides at the rear of the can.

Electrical

AC power is distributed from a pair of power strips attached to the front leg of the platform.  The following devices require power:

The Basic Stamp BS2 microcontroller and the relays it controls need 5VDC;
The secondary relays that switch the solenoid valves need 12VDC;
The solenoid valves need 24VDC;
The portable MiniDisc player for the sound source needs 3.5VDC;
The subwoofer/satellite powered speaker system needs 18VDC;
Two strobe lights built from hobbyist kits need 120VAC.

Somewhere there must be a single power supply that provides all those DC voltages, but I didn't feel like shopping for it and I sure wouldn't want to pay for it.  Individual transformers for each voltage were much easier to find and they cost about 5 bucks each.

At first I tried using a single-board voice-grade digital recorder for the audio.  The sound quality just wan't good enough; a monster growling at you isn't very scary if he sounds like he's on a long-distance telephone line.  The piano-hammer tape-deck scheme of Scare-O-Matic Panel 1 is pretty cool; but hey, this is the digital age, and besides, nobody would get to enjoy the quaintness of the piano hammers if they were buried deep in the guts of the trash can.  So I decided to go with a portable MiniDisc player (the Sharp MD-MS702).  I bought an extra remote control for this little baby and hacked it apart, soldering leads to the button contacts for play/pause, stop, track back, and track forward.  When the player is stopped and you press the start button, it takes several seconds before sound actually starts coming out.  This delay is unacceptable for this application; however, going from paused to playing is plenty quick.

Early prototypes of the trash can were controlled entirely by relays, with a limit switch on the arm providing the signal to reset the effect.  Once I introduced the MiniDisc player, it became clear that more fine-grained control would be required to start and reset the sound.  This really wasn't so bad because I was looking for an excuse to use the Basic Stamp microcontroller in a project so I could get familiar with the technology.  Microprocessor control also gives me a great deal of flexibility in the sequence itself:

As mentioned above, the unused pins on the external Molex connector could be used to bring signals out of the trash can to operate other effects in the future.

Software

The software that runs this device is very simple; kudos go to the makers of the Basic Stamp for the ease with which it can be programmed and used.  The sequence is essentially this:

Wait for the trigger switch to close.
Start the sound, strobes, and vertical air rams.
Wait a fraction of a second, then start the arm air ram.
Wait for full vertical extension and shut off the strobes.
Wait for the arm to extend, plus a bit, then retract the arm.
Wait for the arm to retract, then at the most startling possible time, extend it again and start the strobes again.
Wait for the arm to extend, then shut off the strobes and retract it.
Wait for the arm to mostly retract, then depressurize the vertical air rams.
Reset the sound source.
Repeat.

The MiniDisc player does add one little wrinkle to the software.  To save power, the player will stop itself if left paused for more than a couple of minutes.  This means that the monster would go mute if you left him sitting untriggered for any length of time.  So I had to put a timer in the software that presses the track-back button about every two minutes.  Pressing this button has no effect -- we're already on track one -- but it acts as a "keep-alive" for the player to keep it ready for action.

Without further ado, here's the code -- I told you it was simple:

'Timing values
buttonDownTime con 200
armDelay con 150
armDuration1 con 800
armRetractDuration con 1700
armDuration2 con 800
soundOffDelay con 500
downDelay con 400
downDuration con 1500

'Sound source startup
soundSourceStartupDelay con 4500

'Keep-alive timer for the sound source
loopCount var word
keepAliveDelay con $FFFF

'Device definitions
playPause con 2
trackBack con 1
trackForward con 0
jumpPneumatics con 8
armPneumatics con 9
strobes con 10

buttonWork var byte
buttonWork = 0
'Set up output pins
output 0
output 1
output 2
output 3
output 8
output 9
output 10

'THIS IS THE MAIN LOOP RIGHT HERE
waitForButton:
 loopCount = 0
loopStart:
 button 15,1,255,0,buttonWork,1,scareEm
 loopCount = loopCount + 1
 if loopCount = keepAliveDelay then sendKeepAlive
 goto loopStart
sendKeepAlive:
 high trackBack
 pause buttonDownTime
 low trackBack
 goto waitForButton
scareEm:
 'Start sound and jump
 high playPause
 high jumpPneumatics
 high strobes
 pause buttonDownTime
 low playPause
 pause armDelay
 'Arm out
 high armPneumatics
 pause armDuration1
 low strobes
 'Arm in
 low armPneumatics
 pause armRetractDuration
 'Arm out
 high armPneumatics
 high strobes
 pause armDuration2
 'Arm in
 low armPneumatics
 low strobes
 pause downDelay
 'Go back down
 low jumpPneumatics
 'Stop the sound
 high playPause
 pause buttonDownTime
 low playPause
 pause buttonDownTime
 high trackBack
 pause buttonDownTime
 low trackBack
 pause downDuration
 goto waitForButton