When my older son discovered his first wiggly tooth, I realized that I had the chance to define the Tooth Fairy experience for another generation. As I pondered how the Tooth Fairy would collect our family’s teeth, it occurred to me that she has an awful lot of teeth to gather, especially considering the ever-rising world population. It seemed prudent to figure out a way to send the teeth to her for processing, rather than make her visit the homes of all 7,103,000,000 people on Earth. As such, I installed a pneumatic transport system (as at the bank drive-through) in my house, for the purpose of sending teeth to the Tooth Fairy, and receiving renumeration back from her.
The Raspberry Pi serves up an interface that I built using Hype, which allowed me to quickly animate the movement of the capsule on the map and the spinning tooth on the “Under Review” page. I expect to eventually use the pneumatic transport system to exchange messages and objects with the other “creatures that come at night,” as my son calls them, so I included buttons for Santa Clause and the Easter Bunny. The HTML5 interface can play sounds, too, if it is “Added to Home Screen” as a web app.
When the “Engage Pneumatic Power” button is pressed (on either the send or receive page), the web interface writes a “1″ to a file in the Pi’s /var/www/ directory. That file is checked once a second by a simple Python daemon that has enough privileges to control the Pi’s GPIO and thus the PowerSwitch Tail that controls the vacuum. If the daemon sees a “1″, it plays the sound for the Pi’s speakers (the sound is also played on the iPhone) and runs the vacuum long enough to transport the carrier from one station to another.
#!/usr/bin/python import subprocess import time import os import RPi.GPIO as io #import tweetpony io.setmode(io.BCM) vac_pin = 7 io.setup(vac_pin, io.OUT) io.output(vac_pin, io.LOW) while True: with open("/var/www/event.txt", "r+") as fo: fo.seek(0, 0) status = fo.read(1) if (status == "1"): print time.time() subprocess.Popen("mpg123 /home/pi/PTS/medthrob.mp3", shell=True, stdin=None, stdout=None, stderr=None, close_fds=True) time.sleep(5) io.output(vac_pin, io.HIGH) time.sleep(5) io.output(vac_pin, io.LOW) fo.seek(0, 0) fo.write("0") fo.closed time.sleep(1)
The Pi does not need to know which direction the carrier is going. In building the system, I couldn’t find inexpensive electronically-controlled valves, so I went with manually operated valves at each station. For a station to send, the valve must be closed (to prevent waste of vacuum power) and the door open (to allow air in behind the carrier as it travels). For a station to receive, the valve must be open (to suck the carrier from the other station) and the door closed (to provide a seal between the vacuum and the remote carrier). The web interface instructs the user how to set the valves and carrier access doors for proper air flow, which also adds a fun hands-on element. The valves are too hard for a child to turn, so I might build a big wrench in the future.
As with most projects, the difficulty of duplicating this yourself depends on how involved you want to get. I happen to have homebuilding experience, and don’t mind hacking my house, so to speak. If you cannot safely run your pipes through the walls, you might run the pipes down the face of the walls, avoiding much of the dangerous electrical and delicate plumbing. You could do a basic version on an outdoor play structure, or around a large basement. Whatever your goal, I suggest that you start experimenting outside with a vacuum and some flexible PVC pipe, and then scale up as safety and skills allow. Have fun out there!
See the entire series here.