Close

Reboot

A project log for Cataract

Transduce code into laser light.

owen-truebloodOwen Trueblood 05/01/2019 at 00:050 Comments

Wow it's been more than 3 years since I started poking at this project. Originally the aim was to build a laser projector to facilitate a photography project. I wanted to venture out into the urban jungle late at night and capture surreal lightscapes by projection-mapping brilliant laser graphics onto architecture, infrastructure, and derelict machinery. 3 years later I'm still after the same goal, and now I have a new city, NYC, to seek it in.

Previously I got stuck on the electronics for the project. I wanted to make a beautiful, sleek, battery-powered gadget that I could throw into a backpack and feel okay knocking around as I skated between urban scenery. So I set out to build everything carefully from scratch, starting with the galvo drive electronics. I started reverse-engineering the drive electronics from the cheap gear that I got as reference and in the process destroyed it. I intended to replace those drivers with my own, but never had enough activation energy available to put my own driver design together. And so the project languished until now.

Getting to MVP

This time around I'm doing things in stages and starting with a quick-and-dirty minimum viable prototype. I bought new drive electronics (now cheaply available on Amazon, with next day shipping). To do digital control I got two MCP4725 DACs which are easily controlled over I2C. I used someone else's circuit design to convert 0 to 3.3v from my DACs to -15V to 15V for the galvo control boards. That worked first try:

Then I connected the DACs to an Arduino and just copy-pasted-edited an example from the Adafruit MCP4725 library to drive both galvos in a circle:

But I want more than circles out of this thing so I swapped the Arduino for a BeagleBone. After a little Python programming I had a suspicious smiley face on the wall:

The quality is awful because I can't update the DACs that quickly. The bus is 100KHz on the BeagleBone, in the simple control mode I'm using it takes 4 bytes to update the DAC and there are 7 periods of start/stop/ack, and there are 2 DACs on one bus. So best case I can update the DACs at about 100,000 / (5 * 8) / 2 = 1,250 Hz. The smiley takes about 65 points to draw, so it can update at 20 Hz. That's not fast enough for a beautiful persistence-of-vision-enabled illusion.

But don't fret! For this prototype I wanted fast and easy, not necessarily good. And I wanted to get an idea of the form factor and some of the software and user interface. Also, the first application I have for the projector is long exposure photography, so a low points-per-second value is not as much as an issue as if I were using this for real time performance. Future milestones for this project will include much better DACs and much fancier software to drive them.

Shrinking

After I had my smiley thrown up on the wall I shrunk down the messy bench prototype into an oddly shaped but compact unit that can be mounted on a tripod. Most of the work was straightforward CAD and 3D printing, plus healthy doses of hot glue.

Back-side. Upper left is -15V/15V power supply. Lower right is laser driver.
Simple 3D printed fixture for mounting laser relative to galvo
Laser driver gets bolted to the back
Look at how nicely those driver boards fit that project box. Made me so happy
The pots adjust offsets and scale. The DACs are the small boards in the corners

Long Exposures

Eventually I'm hoping this projector can be coaxed into making objects inexplicably luminescent and pin inhuman machine spirits to earthly constructions. For now we've got spirals.

Discussions