Elliptec: Simple control of Thorlabs Elliptec devices
ThorLabs Elliptec devices offer a neat way to quickly set up automated workflows in optical systems. This project aims to provide a simple and quick way to control them directly from Python. It uses the pyserial library and is inspired by the TL-rotation-control project by Chris Baird. The end goal of the project is to reproduce the entire functionality of the official Elliptec Software.
💣 This library is still under active development. Serious bugs are present and breaking changes will be introduced.
Basic examples
A basic example, which shows how to use a shutter:
import elliptec
controller = elliptec.Controller('COM3')
sh = elliptec.Shutter(controller)
# Get information about the device
info = sh.get('info')
# Home the shutter before usage
sh.home()
# Open shutter, acquire, and close again
sh.open()
# ... acquire or perform other tasks
sh.close()
An example using a four-positional slider:
import elliptec
controller = elliptec.Controller('COM3')
sl = elliptec.Slider(controller)
# Home the slider before usage
sl.home()
# Move slider to position 3
sl.set_slot(3)
# Move slider forward (to position 4)
sl.move('forward')
An example using a rotator (mount or stage) to collect multiple polarizations/angles:
import elliptec
controller = elliptec.Controller('COM3')
ro = elliptec.Rotator(controller)
# Home the rotator before usage
ro.home()
# Loop over a list of angles and acquire for each
for angle in [0, 45, 90, 135]:
ro.set_angle(angle)
# ... acquire or perform other tasks
An example using a linear stage to find optimal focus:
import elliptec
controller = elliptec.Controller('COM3')
ls = elliptec.Linear(controller)
# Home the linear stage before usage
ls.home()
# Loop over a list of positions and measure gain for each
for distance in range(0, 61, 10):
ls.set_distance(distance)
# ... measure gain
Advanced examples
An advanced example, which shows how to control multiple devices plugged into one ELLB bus controller simultaneously. The example assumes you have a shutter and a rotator on addresses 1 and 2 respectively, and shows how to take two images in perpendicular polarizations:
import elliptec
controller = elliptec.Controller('COM4')
sh = elliptec.Shutter(controller, address='1')
ro = elliptec.Rotator(controller, address='2')
# Home the shutter and the rotator
sh.home()
ro.home()
# Loop over a list of angles and open/acquire/close for each
for angle in [0, 90]:
ro.set_angle(angle)
# Open shutter, acquire, and close again
sh.open()
# ... acquire or perform other tasks
sh.close()
If you haven’t changed the addresses of your boards, you can either do so through the Elliptec Software, or by connecting them one-by-one to the bus and using the change_address() function of a device. Assuming a PC -> controller -> bus connecion, the setup would look something like this:
import elliptec
controller = elliptec.Controller('COM4')
# connect your first device to the bus
device_1 = elliptec.Motor(controller)
device_1.change_address('1')
# connect your second device
device_2 = elliptec.Motor(controller)
device_2.change_address('2')
The changes made to the addresses should last until the bus loses power, at which point all devices might revert to an address of 0.