Ring light for stereo microscope with 48mm thread, Olympus and others

This is an Arduino-controlled ring light for stereo microscopes with a 48x0.75mm threaded nose piece.
4
29
0
652
updated February 24, 2022

Description

PDF

This is an Arduino-controlled ring light for stereo microscopes with a 48x0.75mm threaded nose piece. This is one of the most common sizes and fits my vintage Olympus unit. Other thread sizes for which commercial ringlight adapters are available are 52, 55 and 58mm. This design can also be used for a camera ringlight; the parameterization should help you adapt it to almost any lens/filter thread size.

Inspiration

My microscope is 50 years old and never had a ring light, and it really needed one.

The build was inspired by a couple of YouTube videos and a Thing from Otinex that showed you can print 48x0.75mm male threads that successfully fit into a microscope nosepiece. I was skeptical but printed one and it worked quite well. Alas there was no CAD file and I wanted to do several things differently, so I had to do an all-new mechanical setup.

My design uses the DotStar LED strips from Adafruit, with an Arduino Metro Mini to drive them. The DotStar is a modern successor to the older fixed-clock NeoPixels and will accept a much higher synchronous data clock, making them truly flicker-free.

Mechanical

Pre-made flat rings of DotStars aren't available so I used the 144/meter strip to form a cylinder with the LEDs facing inwards. White plastic is used where reflectivity is helpful to put more light on the target; this includes the thin reflector plate and the spacer ring. Black plastic is used for everything else to block light from entering the objectives or going directly up into the user's face. Optically there is no direct path from any LED into the objectives, even though the LEDs are facing inward.

I used a strip of 40 LEDs to form a roughly 93mm circle. As it turned out I could have used 42, or reduced the diameter of the circle slightly.

You do need to cut a slot in the side of the cylinder to bring out the rather heavy gauge 4-conductor cable. I chose not to print the cylinder with the slot in place so the ring would be a complete circle during printing. The slot is about 3mm wide; I used a saw blade in a Dremel tool. Some parts are glued together using Plasti-Zap, which is a plastic bonding super glue.

The cylinder is glued into the top cap, and the white reflecting plate is glued to the top cap before the LEDs are installed. Cut the slot after these first three parts are glued up.

Finally the LED strip is glued to the inside of the black cylinder with the cable routed out through the slot.

Here is the OnShape CAD file: https://cad.onshape.com/documents/cb052133db7924fde58ad412/w/585d470d4f1ae3a4aa7b4591/e/4b52144fad6a23b9d824eaa9

Nearly everything is parameterized in the "globals" feature studio tab, so it's trivial to change the diameter of the ring, make the spacer longer/shorter, modify the length of the screw section, etc. to suit your particular application.

To add the 0.75mm pitch threads, you need to use the "ThreadCreator" custom feature in OnShape - add this to your workspace using the "Add custom features" tool, switch to the "other documents" tab and search for ThreadCreator.

Printing

There is nothing special about the printing - just be sure to use white for the reflector disc and the spacer ring. You can use any fairly opaque color for the other parts. I recommend PETG over PLA for this application; at max brightness the LED strip makes things pretty warm and it might approach the sag temperature for PLA.

Electronics

The controller for the LEDs is nothing more than an Arduino Metro Mini, a pair of 10K pots, a connector matching the cable, and a power supply. You only need two GPIO outputs for bit-banging the clock and data down to the LED strip, and 2 analog inputs to read the color and intensity pots. The code size is small enough that you can use just about any Arduino in existence. I prototyped the HW on a plug-in breadboard; the final controller was soldered up on a "half size" perma-proto board.

You do have to be quite careful about the power draw. This many DotStars will consume around 2 Amps at full intensity, which is too much to pull through a typical USB hub when debugging with the computer attached. I put some compile-time switches in the firmware to limit the intensity to about 1/8 of the max while testing. To power the unit for actual operation I'm using a 2.5A micro USB wall adapter, which will happily run the LEDs at full blast. It's important to get the power directly from the USB source and not try to use the Arduino's 5V regulated power, which is limited to 500mA.

Electronics Packaging

My microscope doesn't have any good flat surface where I could attach the controller box, so the control box needs to sit on the desk and be hefty enough to prevent it from getting dragged around by the cords. I ended up using a commercial all-aluminum split-case project box (see BOM below) with an added block of aluminum inside to bring the total mass up to about 175 grams. The electronics board is mounted to the top of the 18mm thick aluminum block with 3 4-40 (or M3) screws, using 1/4" (6mm) nylon standoffs.

To make the half-size perma-proto board fit, I needed to cut off the power/ground rows on one side. (Hint: wet tile saws are the greatest thing ever if you need to cut any amount of fiberglass circuit board or similar composite sheets!)

One end panel of the Eightwood case was drilled for the two pots, and the other end was CNC milled with an access slot for the micro-USB connector, and a slot for the 4-conductor output cable. This was just done to measure, so there's no CAD file - sorry!

Firmware

The firmware is a regular Arduino sketch made using the Arduino IDE. The excellent FastLED library is used to control the DotStar LEDs. It handles bit-banging the data down the LED chain so you don't have to write code for that. Reading the pots uses the built-in analogRead() from the standard Arduino libs.

Two knobs are supported - an intensity knob and a color knob. When the color knob is turned off (full counter-clockwise), the light operates in bright white intensity-only mode, with the brightness controlled by the intensity knob.

When the color knob is turned clockwise off zero, the code switches into HSV mode where the color knob controls the hue, and the intensity knob controls a blend of saturation and value. In this mode you will notice some color shift at low intensity, and the peak brightness achievable is somewhat less than if you're in white mode, but it does let you move around through a subset of HSV space with only two knobs.

I'm planning to add a photographic color-temperature mode, but I'm not sure the RGB DotStars will do it well.

The firmware is on GitHub here: https://github.com/dbcook/ringlight_arduino

Bill of Materials

Black PETG

White PETG

Eightwood aluminum case 4.33 x 2.01 x 1.5"

Aluminum block approx. 3.7" x 1.6" x 0.75"

4-40 x 1/4" flat-head machine screws, qty 3 to mount the aluminum block

4-40 x 1/2" round-head machine screws, qty 3 to mount the circuit board

#4 x 1/4" nylon standoffs, qty 3

micro USB cable to connect the Arduino to your computer for firmware loading

Electronic parts and power supply are from Adafruit:

Arduino Metro Mini 

DotStar LED strip, 1/2m, 144/meter RGB on white tape 

10k linear pots, qty 2 

Knobs for the pots, qty 2 - choose your poison 

JST SM plug/cable pair 

2.5A micro USB power supply 

Perma-proto board, half size

Print Settings

Printer Brand:

Prusa

Printer:

I3 MK3S

Rafts:

No

Supports:

No

Resolution:

0.25, first layer 0.30

Infill:

20%

Filament: any PETG

Black and white

Tags



Model origin

The author marked this model as their own original creation. Imported from Thingiverse.

License