Sonic Screwdriver
Description
Based on the Doctor Who prop, this device is a small, screwdriver sized device that uses buttons and an accelerometer to control objects like TV's and LED light strips.
Purpose
I call this Project Sonic Screwdriver, shortened to PSS. The initial reason I started this project was to have a cool movie prop that actually replicates some of the fictional properties of the prop. I have been a Doctor Who fan since I was little, so the 10th Doctor's (David Tennant) Sonic Screwdriver was a prime candidate for this project.
Goals
The goals of this project are fairly simple and are as follows:
Must have the appearance of the original prop (cannot be externally/visually distinguishable from the actual prop)
This follows the point above, but the size of the original prop must be maintained
Replicate at least one neat fictional ability that the prop can do in the movies
Generate realistic sounds
Planning
With these goals in mind, I did some research to determine what kinds of electronics I could store inside the body of the prop. Some topics I focused on in this research inlcuded miniature Arduino-like electronics, remote control capabilities, and programmable RFID/NFC technology.
In this stage, I discovered Adafruit, a dandy electronics website that sells arduino style circuit boards as well as plenty other neat electronic components. Since I began this project several years ago, I have used plenty of Adafruit products in my projects, including in my V2 Electric Longboard project.
The most critical component, the brain, must be very very tiny to fit in the body of the prop, which I decided would be David Tennant's Doctor's Sonic Screwdriver. The Adafruit Trinket was the perfect choice, with a width of about 0.4", and a length of about 1".
For lighting, I bought 4 LED's for the tip, one IR LED one UV LED, one blue LED, and one white LED. These would be for remote signaling, hidden ink, prop lighting, and a flashlight, respectively. For sound effects, a small headphone speaker will fit nicely inside the package. A small rechargeable lithium ion pack and charging circuitry will provide the power to the system. Small tactile buttons and a MPU-6050 type sensor will provide the input. The main body is a retrofitted toy prop, which is shown dissected in the image below. The final construction consisted of some internal 3D printed parts and some hot glue.
Design
The Sonic Screwdriver is able to extend and retract by a couple inches. A diagram is shown here. This is accomplished by a sliding outer shell around the main body. The main body has a clear tube between the main compartments. The main body is about 0.5" in diameter, and its length is about 2.5", where the diameter varies and becomes smaller near the bottom. There is a removable cap on the prop replica for a pen. This removable cap can be used for the end of the screwdriver to cover the charging port, which is micro-USB. Using standard IR patterns/signals, I programmed the IR LED to replicate TV commands based on input from the buttons and accelerometer. Actions are programmable, and in the video at the top of this page, a combination of the main button and horizontal turns the TV on or off, while the button plus pointing up or down turns the volume up or down respectively.
Testing
Before committing to purchasing all the miniature components, I tapped into the IR LED on an old remote and used an Arduino UNO to test firing IR signals to the RGB lightstrip receiver as shown in the images. With the help of a friend, we were able to replicate the standard signals that were used by the remote for a strip of RGB LED's to turn on/off the lights and control the colors.
In the videos you can see me press 'r', 'g', and 'b' to change the color to red, green, and blue respectively. typing in 'p' controls the power.
Attiny Development
Transferring the code to the Adafruit Trinket (3v) wasn't straightforward, but, after finding the right libraries online, I was able to use the trinket to send IR signals. I used the UNO for receiving and decoding TV remote signals from various devices and compiled a list of codes to control my home's various TV's, AVR's, streaming devices, and dvd/Blu-ray players.
Since input pins are rather limited on the trinket, I decided to use one pin for a single button, and two more pins for SDA and SCL using the i2c communication protocol with the MPU-6050 accelerometer & gyro sensor. A video showing these components laid out on a breadboard prototype is shown here. In this test, various functions are assigned to relative to gravity. I divided the input into 6 distinguishable orientations.
flat
inverted
pointing up
pointing down
rotated left
rotated right
Additionally, a mode switch function allows any number of combinations of 6 unique commands. I programmed the device to detect when I've held down the button for 5 seconds, after which the indicator LED (blue) blinks a certain number of times to indicate which mode it has been switched to.
Current State
I later reprogrammed the device to control the TV only, since I no longer used the old RGB lights. I fit the electronics into the body using a couple 3D printed parts and some hot glue. Currently, the IR LED is the only output. In the future, I plan to add in the other LED's and the speaker. This version is the one shown in the video at the top of this page.