Light Brakes

Light Brakes are smart glasses that selectively filter out excessively bright spots (e.g. the Sun, headlights, glare) from a wearer's field of vision in real-time. The remainder of the view is unobstructed and transparent.

How It Works

A pair of sunglasses (non-darkened glasses could also be used) are fitted with a camera to capture images of the wearer's field of vision. Captured images are processed in real-time to spatially locate areas of excessive brightness.

Graphic monochrome LCD displays have been disassembled and fitted in front of each lens in the glasses. The backing has been removed from the LCDs to render them transparent when no pixels are being displayed on them.

The locations of bright spots are translated into coordinates on the LCD displays, and pixel data is written to these coordinates to darken those regions. In this way, bright spots are blocked by the LCD pixels, while the rest of the view is clear and unobstructed.

Media

See it in action: YouTube

The glasses: glasses

A close-up of the lenses: glasses_close

The full setup: full_setup

Software

To run the software, you'll need Python3 with the following modules installed:

Adafruit_Nokia_LCD
Adafruit_GPIO
picamera
PIL
imutils
skimage
numpy
cv2

Then clone the repo:

git clone https://github.com/nickbild/light_brakes.git

Switch to the light_brakes directory, then run:

python3 bright_mask_pi.py

Bill of Materials

All parts can be acquired for ~$100.

  • Raspberry Pi 3 B+ (or similar)
  • 2 x Nokia 5110 LCDs
  • Raspberry Pi Camera v2 (or similar)
  • Sunglasses / Eyeglasses
  • Conductive silver epoxy
  • Hot glue and/or super glue
  • Miscellaneous copper wires

How Not To Build A Device

Seeing a finished project can make it seem like the builder got a few parts together, hooked everything up, and voila -- a finished device!

Not so. It took a long, frustrating, string of failed attempts to get this working. In my case, I had a lot of trouble making electrical connections to the LCD after removing it from the breakout board.

The pads on the LCD are connected to pads on the breakout board by a Zebra strip, and mechanical force by clamping. I needed to get the LCD off of the breakout board so that there is nothing behind it and it can be transparent.

These pads are too small for me to solder:

breakout

It's a nightmare of shorts and unsoldering adjacent pads whenever I solder a new pad; it invariably leads to something like this:

destroyed

I imagine someone with more skill could handle this with little problem -- but I'm determined to build this device today. Not in months or years when my soldering skill (hopefully) improves.

And then, there is the LCD, with it's paper thin pads that are very close together on top of a glass plate. There's no way I can solder that. I'm not even sure it is solderable.

I tried a number of monstrosities, such as this:

monstrosity_1

I used copper tape to create fine traces from the pads to larger pads (something I can work with!) that I created. This was flaky because such fine strips of tape would not maintain contact with the substrate over time. I tried to improve the contact by putting a strip of z-axis tape between the pads and copper tape. It helped, but still flaky.

I decided I'd try to use conductive silver epoxy, and it was a huge improvement. It stays put and makes highly conductive connections. So I built the next slightly-less monstrous monstrosity:

full_not_working_breakout

full_not_working_lcd

Frustratingly, when I powered it up -- nothing. My multimeter showed continuity and no shorts. My logic analyzer showed the right signals on all the lines. Something in all this complexity is going wrong that's beyond my ability to detect. I need a simpler solution, so I came up with this:

new_design

Some hot glue to hold the LCD to the board, and short stretches of silver epoxy to connect the pads. It was still a challenge to keep the traces isolated from one another, but it was doable with patience.

It took me weeks to get here, but finally, it works! This is not an exhaustive list...

Read more »