How To Construct Hallucinogenic Goggles
This post will describe how to construct a pair of goggles which can be used to induce geometric visual hallucinations via strobe light patterns. This tutorial should be accessible to anyone familiar with Arduino hacking, and I do not go into details of the electronics design. The effects are quite remarkable, and enjoyed by many. These goggles can be constructed for $25-$50, depending on how good you are at scavenging parts. I believe this design to be superior to some similar designs seen on the internet, and very much cheaper than this commercial equivalent ($649)(their marketing department is full of the crazy, but nevertheless the product is cool).
No chemical assistance is necessary for their effect. I have tried the goggles on many people and about 10% seem to either see nothing interesting, or find what they do see completely boring. So, these are not a guaranteed success. There does seem to be one pattern or alternating blue/magenta that reliably causes my visual field to break down into triangles, and another with red/green that seems to cause checkerboards, but a lot of the strobe patterns we've tried just give "angry snow". Also, some people don't seem to see anything until after about 5 minutes of using the device. It would be interesting to see if there are any patterns that reliably induce the same patterns across all individuals. I've never tried these goggle with a drug, although I have had some subjects be on hallucinogens while trying these goggles. They insist that the content of the patterns does not change, although they may seem more vivid and interesting under the influence of drugs.
The goggles : code, electronics, and physical interface
Instructions (format : hierarchical parts, description, tools, procedure)
Click on any images to enlarge.
Device Summary :
physical interface : ping pong balls in swimming goggles with LEDs inside
electronics : arduino pro-mini, and a few random interface parts
code : arduino SDK C style driver code
4 to 10 Ping pong balls
2 RGB LEDs, frosted clear casing
2 4x1 male headers, .1" spacing
2 4x1 female headers, .1" spacing
1 8x1 female header
1 Dolfino medium sized silicone adult swim goggles ( had to buy in a 3 pack )
2-3 ft of elastic ribbon
3-4 ft of ribbon cable, only 8 channels required. Other cables with 8 channels also work
Ping pong balls, cut as if by a plane penetrating approximately 15% of the ball diameter, and rejoined with with smaller section inverted to form a cup like structure. RGB LEDs are affixed via solder to male headers which penetrate the corner of the ping pong balls (near the joint of the two sections). Light is emitted from the LEDs, reflects off the back of the larger section of sphere, and creates uniform illumination in the smaller cup. Two ping pong balls are nestled in a modified pair of swimming goggles. A ribbon cable connector is affixed with female headers which interface between the male headers on the spheres, and the male header output from the electronics.
one minute epoxy
medium to fine sandpaper
toothpick, etc. for mixing and applying epoxy
__A__ construct (2x) ping pong ball shells which are mirror images of eachother:
_1_ Imagine the section cut by a ray displaced 34-40 degrees from vertical and rotated around the z axis. Alternatively imagine the section of a circle cut by an arc of 70-80 degrees. This partition defines the sizes of the large and smaller sections which form the spherical diffuser. You will not be able to cut both sections from the same ball, since material is lost in cutting, and a 1-2 mm edge is required for overlap to bond the sections together. Additionally, neither side should have a company logo on it, since this will ruin light diffusion. Ping pong balls have a ridge where the two halves are joined in manufacture, avoid cutting through this ridge since it will create an uneven joint that will prevent the balls from being re-assembled. I don't have exact measurements, but on my model the diameter of the circle at the interface of the two sections is 1.365"
_2_ Prepare the larger section first, as described above. With a razor, cut a crude circular hole in the ping pong ball, perhaps circumscribing the logo if one is present. Slowly and carefully expand this hold by cutting around its circumference with a pair of fine scissors. Stop approximately 2mm from the final desired hole. At this time lightly sand the hemisphere on a flat piece of medium to fine sandpaper to create a fine, flat interface.
_3_ From a new ping pong ball, prepare the smaller section. Cut the ball crudely in half using a razor, then carefully trim one half down to the intended size of the smaller section, plus 3mm.
_4_ The smaller section should rest in the larger cup, and be large enough not to fall inside. Do not glue the sections together yet.
_5_ Using a pin, create evenly 0.1" spaced holes for the male header in the larger section as shown. You may want to practice on a spare bit of plastic first. Insert the short end of the male header through these holes, and super-glue the header in place. Trim the LED leads so that the LED rests as shown, and bend down the last 2mm of leads to align with the inner header pins. If you do not have frosted housing for the LEDs, lightly sand the exterior of the LED with fine sandpaper. Clear housing creates light that is too focused for uniform diffusion in the eyepiece. Tin both the LED leads and the header pins in advance. Solder the LED onto the header from the inside; do not to melt the plastic. Super-glue the smaller piece into the large piece to make a finished eyepiece. Once the super-glue thoroughly hardens, you may want to finish the joint in the plastic with additional careful trimming and fine sanding ( don't sand through the joint )
_ The final pair of eyepieces should be mirror images of each other, which is just a matter of correctly positioning the LED leads :
__B__ construct ribbon cable connector:
_ I found that it was important to have a separate cable that would disconnect from the goggles under force. This prevents the inevitable accidents from destroying the tediously constructed eyepieces, and modularity makes the whole thing easier to repair. This step is open to improvisation. Here is what I did :
_1_ Tear a band of 8 lines from a section of ribbon cable. The cable should be as long as you would like the strap from the electronics to the goggles to be. I think 3-4' is fairly good.
_2_ Cut the ribbon cable diagonally such that the spacing between the lines matched the 0.1" spacing of the 8 pin female connector
_3_ Strip 2mm bare wire of each line
_4,5_ Solder the line to the 8 pin female connector. Tinning the contacts in advance helps.
_6_ Apply 1 minute epoxy to the contact, to provide both insulate and structural stability. Make sure there are no shorts between lines before you do this
_ Tear the line in two for ~1.5', creating a split from 8 lines to two ribbons of 4 lines. Prepare 4-pin female headers similarly to the 8 pin female header, in a symmetric fashion as pictured below. I used a clip that came with the swimming goggles' strap to stabilize the point where the cable splits in two.
_ The assemblage of this connector cable with the eyepieces should have the indicated pinout at the 8 pin female header :
__C__Modify swimming goggles and complete physical interface assembly :
_1_ Locate suitable swimming goggles. This is harder than it sounds. The only goggles I found suitable were the mid-sized silicone pair in a three pack of Dolfino goggles. The goggles must be of a correct size to snugly fit the eyepieces, and be able to deform to the circular shape of the eyepieces. The goggle must also be able to hold together with the lenses removed. Many goggles are bridged by an attachment to the lenses, rendering them unsuitable. Ideally, you would also be able to affix a strap to the goggles even with the lenses removed. Due to the limited availability of suitable goggles, this step may require improvisation.
_2_ Remove the lenses. In the pair I used, the lenses were held in with a weak silicone glue. It was difficult to remove the lenses without damaging the goggles. Superglue proved effective at repairing large accidental tears in the silicone goggles
_3_ Attempt to insert the eyepieces. If necessary, create an opening in the silicone to feed the male headers though. I used either a razor, or a hole-punch, depending on the thickness of the silicone. Insert the eyepieces.
_4_ Create a head-strap. I used elastic ribbon, threaded through the hole used for the header pins, held in place by plastic loops, and super-glued back on to itself. One end was folded and kept free to adjust tension.
_5_ Attach ribbon cable headers to the eyepieces, check that you have oriented the ribbon cable pinouts correctly.
_6_ If the eyepieces are loose, optionally super-glue them in place to the goggles. Note that this will make repairs and maintenance more difficult.
1 Arduino pro-mini ( and FDTI breakout for programming )
1 6x1 right angle male headers
1 8x1 right angle male headers
2 12x1 straight male headers
6 Resistors for the 6 LED channels as determined by your board voltage and LED datasheet (voltage, current) specifications. Use this handy LED resitor calculator. For 3v boards, a resistor may be un-necessary for the (green, blue) channels.
1.5"x2.5" radioshack protoboard
LED displays, pushbuttons for a hardware user interface. I used a 16 segment display for some of my models, and a couple designs have pushbuttons to cycle through the various strobe light patches.
There are probably a million and one ways to make 6 LEDs blink quickly in a controlled fasion. You can drive your LED goggles however you wish. I used an Arduino because the programming interface is easy to use. I also hope to figure out the serial interface to the arduino so I might write a control sketch in processing, for real time tweaking of the waveform patterns. My construction consisted of an arduino board, with the 6 pulse-width-modulation ( PWM ) output pins attached to the LED goggles. I also attached a 16 segment display and some push buttons to the design, but you can experiment with whatever features you wish.
__tools__ Soldering iron, Solder, Soldering accessories,
Assembly of an example control board :
1. Since the arduino chip rests on raised headers, and the 16-segment LED display has ~1.5mm clearance, we can hide some of the circuitry underneath these components. Since this is a 3 volt board, I only needed 56ohm resistors for the red channels. Your LEDs and board may have different constraints. Also solder on the 6x1 right angle male header to the Arduino pro-mini serial FTDI interface ( I think thats what those 6 pins are called anyway ).
2. We then solder in place the arduino chip and LED diplay. The LED display is set up for multiplexing, so the corresponding segments of each digit are connected, and the display is driven by alternately drawing both digits, controlled by switching on and off the common cathodes. Since I was short on pins, several display pins also double as input pins for the switches. Every so often, the sketch switches the display pins into read mode and polls the state of the buttons.
3. I used a lot of tedious surface-mount style wires on the back to keep the design clean. It took some practice for me to get used to this type of soldering. Attaching the battery pack and power switch is not shown.
4. Assemble all components :
This is open ended, Experiment !. Prototype your design on a larger Arduino and breadboard. Tweak the driver code to your preferences. Make a more permanent device using your favorite prototyping technique ( Or design and order a custom PCB ! Please tell me if you do, I'd probably buy a couple! ).
I was having trouble formatting code properly for SpaceCollective's display format. There is an arduino sketch for one of my control boards available on WeAloneOnEarth ( another group blog I keep with friends.
Please feel free to play with the hardware and design your own drivers. Let me know if you discover any light patterns that are particularly good at inducing hallucinations.
see.. its like, fun, I tell you.
Here is the latest attempt to model the phenomena. This simulation doesn't take into consideration the finer structure of the visual cortex, and therefore cannot reproduce the range of patterns that one might see in practice. This demonstrates how interacting populations of excitatory and inhibitory neurons can be coaxed to form spatial patterns under the influence of a uniform oscillating stimulus ( like the kind provided by these goggles ).
and again ( different initial conditions, using a colormap ) :
These were rendered on an NVIDIA Tesla machine, very fast but it caught fire after a few months of use.
Also the Gimp has this weird extra image enhancement plug-in with trippy side effects, seen here applied to an unsuspecting wearer of the goggles.