In the mid 1960s, Walt Disney Imagineering invented a system that could control robots and keep them in sync with an audio playback track.
Their implementation consisted of a multitrack audio tape that provided the audio for the attraction in one track, along with a series of tones in other audio tracks. The tones would vibrate resonant reeds relays, which would then activate air-pneumatics, moving small mechanisms in the various puppets in the attraction.
The obvious solution
The obvious way to reproduce this with modern means is to use a micro of some kind that reads commands from a storage card of some kind, along with the audio tracks to play back. This could easily be accomplished with:
- Arduino (ATMEGA) microcontroller ($30) - "brain"
- MicroSD shield ($15) - to store the control sync data
- MP3 Shield ($30) - to play the audio files
- MicroSD card for storage ($10)
Then of course, the additional drivers (if necessary) to drive lighting, servos for puppet animation, etc.
The concept here would be to store MP3 audio files on the SD card, along with the sync and control information. The micro would read the song and control data from the SD card, stream the MP3 data to the MP3 shield for audio playback, while controlling the servos and such directly.
But seriously... what's the fun in that?
Instead of going the completely modern route, I instead propose taking a kind of retro-modern approach, using surplus, obsolete, outdated technology. Using some modern control bits, but relying on the traditional means where possible.
This method, shown in the diagram above, works as follows.
The audio cassette mirrors the audio tape used by Disney. It is a standard stereo audio cassete and standard stereo playback device. The left channel will contain the puppet's audio to be amplified and played back to the audience. The right channel contains a pre-recorded MODEM transmission.
The right channel output will be sent directly into an obsolete modem unit. The modem's RS232 connection is connected to a micro running a very simple program, which controls servos, lighting, etc. based on the simple ascii commands being sent over serial. The command protocol will be explored later in this document.
This retro approach eliminates the need for the costly microSD interface board, the MP3 interface board, and greatly simplifies the firmware running on the micro.
The protocol is based on plaintext, printable ASCII characters; not a binary format. This will greatly simplify debugging and such. The protocol structure is:
- one byte - start 'AA'
- one byte - command
- zero to N bytes - data for the command (no 'Z')
- one byte - end 'ZZ'
Protocol packets can immediately be followed by the next protocol packet, or any number of garbage characters, which are ignored. (up until the next AA is sent)
Command string examples
- "AAL56ZZ" Turn lights 5 and 6 on.
- "L" turn the list of lights on
- "AAO8ZZ" Turn light 8 off
- "O" turn the list of lights off
- "P" Set the specified single PWM line to 000..255
"AAS1255ZZ" Turn servo '1' to position '255' (MAX)
- "S" move the specified single servo to 000..255
Servos and Lights can be 0..9, A..Z, a..z (Up to 62 bit-devices)
All value ranges are 000..255, backfilled with zeroes to 3 digits
- 'A' - enable Modem Answer mode (sends "ATA")
- 'L' - Set of lights to turn on
- 'O' - Set of lights to turn off
- 'P' - Set a single PWM line
- 'R' - Full reset - everything turned off
- 'S' - Set a single servo's position
- 'I' - Read input from a specific bit port (returns 1/0)
There are a few unknowns that I'll have to research and/or try out to overcome (if they are issues, of course)
- I know that a modem transmission can be recorded (ref: InSoc)
- how is this accomplished?
- Are level converters going to be necessary? Optocouplers?
- How do you "fake" the other side to simulate a "connect" so data can be "sent"
- Can this just be reproduced purely with software, or is hacked hardware needed
- What is needed to get the audio playback up to telephone levels for the puppet modem?
- Are level converters going to be necessary?
- Is there an audio line level rather than telephone line level that can be tapped within the modem's circuit?
Am I overthinking this? Perhaps I just need to hook up one modem to another directly, set one "ATA", the other "ATD", tap off of the sender's TX line (green) and record it. Then in the puppet, set it's modem to ATA on startup, and just listen to the prerecorded audio stream.
- My Audio Animatronics Research
- Audio Animatronics at Wikipedia
- InSoc: Information Society album "Peace and Love, Inc." track 12.
NOTE: "Disney", "Imagineers" etc are all registered trademarks of the Walt Disney Company (DIS). This page, project, and ideas are not sanctioned or approved by DIS.<