Blinded by the LightSunnyvale, CA - April 2012I built a virtual retinal display using an off the shelf Microvision laser projector, low cost optics, and a 3D printed frame. The resulting direct image is bright but well within safe operating power.
Semi-Automatic PaintbrushSunnyvale, CA - December 2011Using an infrared camera, an InkShield, an ink cartridge with an infrared LED stuck to it, and your arm, you can copy great works of art, or just any old picture. The Semi-Automatic Paintbrush brings electronic automation to painting and organic style to printing.
Augmented Reality for 3D PrintingSunnyvale, CA - October 2011I wrote an augmented reality viewer to allow for previewing and handling of STL models of 3D printable objects without having to commit them to plastic. The model is rendered using a GLSL shader for the sake of speed and quality.
ThingidiffSunnyvale, CA - October 2011To enable easy visual comparison of derivative 3D objects on websites, I forked the WebGL based Thingiview.js. Thingidiff compares two STL or OBJ files and displays shared, added, and removed faces between the objects in different colors much like how syntax highlighted text editors present code diffs.
Snow GlobeSunnyvale, CA - August 2011
Inspired by the virtual Earth in Neal Stephenson's Snow Crash, Snow Globe is an 8" diameter spherical display built from a laser projector, a fisheye lens, and a frosted glass globe. Using OpenGL shaders, a mediocre laptop can transform NOAA's high resolution Science On a Sphere datasets live to the globe. Acting as a PREDICT client, the globe can also track the positions of Earth orbiting satellites in real time.
Maker Ant FarmSan Mateo, CA - June 2011
For the 2011 Bay Area Maker Faire, Will Nowak and I built an exhibit at which visitors could have Minecraft character copies of themselves automatically generated by standing in front of a Kinect. The scanned in visitors populated our Minecraft server as wandering bots.
Physical KeygenSunnyvale, CA - May 2011
Physical Keygen is a set of parametric CAD scripts to generate printable functioning models of household keys from key codes. Given the weaknesses of the corresponding locks to picking and bumping, the project served as a demonstration of the usefulness of home 3D printing rather than as a security disclosure. Later, I created versions of the scripts for more secure disc detainer locks.
Gestural PrintingSunnyvale, CA - April 2011
Gestural Printing uses Kinect based hand tracking for manual 3D printer extruder movement and control. It is likely to be the least practical method of additive manufacturing ever realized.
FaceCubeSunnyvale, CA - March 2011
In response to a similar project done without a program or source released, I wrote an open source take on generating printable objects from Kinect point cloud captures. The script allows for interactive thresholding, segmenting, and hole filling followed by automatic meshing, cleaning, scaling, and merging onto objects like coins and cubes.
3D PrintingSunnyvale, CA - Fall 2010 to Fall 2011
While my reasoning for building a RepRap 3D printer was to rapid prototype parts for the assorted projects elsewhere on this page, I ended up equally interested in the possibilities of the printer itself. I designed an AC powered, microcontroller switched, heated build platform to efficiently improve print quality. I also developed a process for generating visually appealing time lapses triggered by the printer.
Interactive Camera-Projector HomographySunnyvale, CA - September 2010Rather than having to recall the linear algebra behind the eight point algorithm every time I wanted to map camera input to projector output, I wrote an interactive calibration script. Using an infrared beacon, the homography calculation process is reduced to four button presses.
Projecting Virtual RealitySunnyvale, CA - May 2010
Mounting a laser projector and an inertial measurement unit to a Wii Remote gun peripheral, I built a virtual reality setup in which the yaw, pitch, and roll movements of the gun mapped 1:1 to the virtual world. The narrow field of view makes for a harrowing experience ideal for the horror genre but merely claustrophobic for the first person shooter that I modified to use the setup.
Evil EyeSunnyvale, CA - April 2010As a far too early Halloween decoration, I built a face tracking eyeball using OpenCV. It was during this project that I learned the wonderful optical properties of both laser picoprojectors and bathroom globe light fixtures.
Walk This WaySunnyvale, CA - February 2010Taking advantage of the amazing electronics surplus stores in the Bay Area, I connected an Arduino and some relays to a pedestrian walk/don't walk sign for use as a large computer controlled boolean status indicator.
Easy Absolute OrientationSunnyvale, CA - February 2010In preparation for later projects, I wrote a Python library to interface the PNI SpacePoint Fusion inertial measurement unit, reading in quaternion and accelerometer data.
Sleep Remaining IndicatorSunnyvale, CA - January 2010The Sleep Remaining Indicator is minimal alarm clock, containing neither an alarm nor a clock. It is a reverse progress bar represented by a laser line projected onto a ceiling, stating in the simplest possible way how much time there is left to sleep in the night.
HMC5843 Magnetometer LibrarySunnyvale, CA - November 2009As part of an effort to build an inertial measurement unit, I wrote an easy to use Arduino library to interface the Honeywell HMC5843 magnetometer.
XBee Remote TriggerPittsburgh, PA - May 2009With the CHDK firmware loaded onto my digital camera enabling a hardware remote trigger, I wired up an XBee radio and wrote a script to allow for wireless shutter control from a computer.
Wireless MultimeterPittsburgh, PA - May 2009Donnie Cober and I undertook this project for the Electrical and Computer Engineering Department's Build 18, a sort of informal hacking event. Reusing some leftovers from the Magic Wands project, we built an Arduino based voltmeter that streams data over an XBee to a computer running a Python plotting script.
Magic WandsPittsburgh, PA - Spring 2009
As an Embedded Systems Design project with Adeola Bannis, Claire Mitchell, and Ethan Goldblum, we attempted to solve the problem of keeping amusement park visitors amused while waiting in line. We prototyped wand shaped game controllers with which users could participate in multiplayer games using accelerometer input, button presses, and infrared LED tracking. We developed a central server storing Wand locations and scores and networked client games like trivia, collaborative music making, and eight player Pong.
ChromaDepth GLSLPittsburgh, PA - March 2009I stumbled upon the Wikipedia entry for ChromaDepth shortly after completing a Computer Graphics course at Carnegie Mellon and realized it was a perfect use case for OpenGL shaders. I wrote a shader program that colors objects with hues representing their depths while retaining their textures by modifying saturation and value, making them appear to pop out of or into the screen when wearing ChromaDepth 3D glasses.
RocketPongPittsburgh, PA - December 2008RocketPong was an entry for a Game Creation Society one button game competition that I eventually turned into a zero button voice activated game. I later made it an eight player crowd based game for the Magic Wand project.
Augmenting Reality with RealityPittsburgh, PA - December 2008
My Computational Photography final project was a jumble of hacked together libraries for the purpose of turning real life objects into virtual objects and then inserting them back elsewhere in reality. I used my Pygame module to capture images of objects, voxel carved them with Koen van de Sande's Voxel Coloring Framework, and placed them back using using ARToolkit.
Camera Module for PygameRepublic of Palau - Summer 2008
As a Google Summer of Code project under One Laptop Per Child, I wrote a camera interface module for Pygame. While originally scoped to make it easier to use the webcam on the little green laptop, the module supports most webcams on Linux. The project makes grabbing camera input and using some basic computer vision algorithms as simple as writing a few lines of Python.