Skip to main content

Simple control of Thorlabs Elliptec devices.

Project description


Logo

Elliptec

Simple control of Thorlabs Elliptec™ devices.
Explore the docs »

Get started · Report a bug · Request a feature

About The Project

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.

Quickstart

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

Controlling multiple devices through one ELB bus. 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 opne/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 deviced might revert to the default address of 0.

List of supported devices

Currently (somewhat) supported devices:

As of right now, I do not have access to any other devices from the Elliptec™ family. If you are interested in controlling a device that is not on this list, feel free to reach out to me. Thank you to Thorlabs Inc. for providing me with some of the devices above for testing.

Untested (but possibly working) devices

These devices have never been tested with this library, but could potentially work with some minor code changes, since they share a design with one of the somewhat supported ones:

The same could possibly extend to the discontinued/obsolete devices such as the ELL7, ELL8, and ELL10.

What works and what doesn't

What works:

  • basic movement
  • getting information about the device
  • getting information about individual motors
  • ability to control multiple devices on one controller via a bus module

What needs improvements:

  • documentation
  • tests (more devices, more details)
  • automated discovery of devices

What is missing:

  • safety (no library performed bounds checks etc)
  • consistency (across methods, devices, returns, ...)
  • adding devices by serial number
  • searching for and setting optimal motor frequencies
  • cleaning and optimization procedures

Some of the missing functionality can be performed using the official Elliptec™ Software.

Support

If you are going to use this code in any way, please let me know via email/twitter/issues or find my contact info on my website. I am working on this project in my spare time and need every piece of encouragement I can get! If this project was useful to you, please consider buying me a coffee ;).

Buy Me a Coffee at ko-fi.com

Disclaimer

Thorlabs™ and Elliptec™ are registered trademarks of Thorlabs, Inc. This project is fully non-commercial and not affiliated with Thorlabs, Inc. in any capacity.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elliptec-0.0.5.tar.gz (66.1 kB view details)

Uploaded Source

Built Distribution

elliptec-0.0.5-py3-none-any.whl (40.0 kB view details)

Uploaded Python 3

File details

Details for the file elliptec-0.0.5.tar.gz.

File metadata

  • Download URL: elliptec-0.0.5.tar.gz
  • Upload date:
  • Size: 66.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for elliptec-0.0.5.tar.gz
Algorithm Hash digest
SHA256 76330f2c2897eab35a5e8ad666b3cb84af46a09eaced524d29641136b3bf02d9
MD5 cf474020ef089e7d2a183f24bc80f52c
BLAKE2b-256 479d7c442b985420aa4de1debfd629d4844f89b56c22155fb359896e3dbf320d

See more details on using hashes here.

File details

Details for the file elliptec-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: elliptec-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 40.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for elliptec-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 72964dcd0a6a18f1035f749fe085a91e2e987886be214fabe2c53641ae06fd51
MD5 0b4cac973db2e3a94d7845f13e113b91
BLAKE2b-256 ac7b2aa1bd7be870823114df9f0a70d1a9166d3aa2ef45914b8bb9410357cd60

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page