Affordable Visible Spectrometry

Using the 'SPECTRYX' fibre optic visual spectrometer

A quick look at the affordable 'Spectryx' from www.spectryx.com, intended to be used with the Super NOVA and VEGA experiments.

Claims and Availability

At the time of writing, it was sold out on Amazon, but available on EBay

The listing on EBay quotes $499, however, in the description it says the following

You can see it is quoting $399. The listing does allow for buyers to ‘Make and offer’ so, perhaps making an offer at the price in their promotional information is worth a shot! UPDATE: This was just tried by one party and they were successful in ordering the device for $399.

What’s in the box

Approximate classification of some electromagnetic radiation by wavelength (nm)

  • < 100 | Xrays

  • 100 - 400 | Ultraviolet

    • 100 - 200 | Vacuum UV

    • 200 - 280 | C

    • 280 - 315 | B

    • 315 - 400 | A

  • 400 - 780 | Visible

  • > 780 | Infrared  

Sample spectra (overlaid onto colour chart from Encyclopaedia Britannica) with data attached

Ref, Green and Blue LASERs

Ultraviolet ‘blacklight’ tested with SPECTRYX 1000 USBVIS

Hydrogen tube tested with SPECTRYX 1000 USBVIS

MFMP volunteer Alan Goldwater has tested a SPECTRYX with his Hydrogen gas tube at his Magic Sound Lab and shared his results which have been graphed below.

Calibration

In this page here, you can see a calibration method for a camera based spectrometer using a spectrum from a compact fluorescent light bulb. The sample spectrum is given below.

One can see that the spectrum shown has most of the same spectral envelope as that recorded from a Interfit CyberLight 360 as shown above. Particularly the mercury vapour lines are observed.

  • the mercury 2 line - "B2" at ~435.8 nanometers

  • the mercury 3 line - "G2" at ~546.1 nanometers

Neon bulbs for calibration

It was suggested that neon bulbs are suitable sources for calibration as they have well-known lines across several colours in the visible spectrum. Some suitable bulbs were found in old power socket splitters and tested.

A second neon bulb was tested but with a red plastic filter over the top. Although it suppressed some non-red lines, the actual lines detected were essentially exactly the same.

A second neon bulb spectrum was captured (raw data) that had a red plastic filter over the top. The peaks are in identical positions, however, the green, yellow and yellow orange and beyond the red are suppressed as might be expected. (click image to view larger)

Element analysis

There are commercial tools such as Ocean Insight’s for detecting elements from captured spectral data, such as . However, Spectragryph - optical spectroscopy software” is only 200 euros for a version that will do spectral database searches.

The latter software has the ability to help match (with calibration) databases of laser‐induced breakdown emissions (LIBS) files. The use of colour spectrum lines using machine learning analysis is a recent area of research.

Specific lines for elements can be found using the online database of the National Institute of Science and Technology (NIST). The data entry form for which looks as follows.


Supplied Python script

(Sample captured file here)

import numpy as np
import matplotlib.pyplot as plt
import serial
import time
import sys, os, serial, threading
import glob
from array import array

def serial_ports():
    """ Lists serial port names

        :raises EnvironmentError:
            On unsupported or unknown platforms
        :returns:
            A list of the serial ports available on the system
    """
    if sys.platform.startswith('win'):
        ports = ['COM%s' % (i + 1) for i in range(256)]
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
        # this excludes your current terminal "/dev/tty"
        ports = glob.glob('/dev/tty[A-Za-z]*')
    elif sys.platform.startswith('darwin'):
        ports = glob.glob('/dev/tty.*')
    else:
        raise EnvironmentError('Unsupported platform')

    result = []
    for port in ports:
        try:
            s = serial.Serial(port)
            s.close()
            result.append(port)
        except (OSError, serial.SerialException):
            pass
    return result

fig = plt.figure()
while(1):
    myports=serial_ports()
    s1=serial.Serial(myports[0])
    s1.write('v00000')
    data=s1.read(3694*2)
    s1.close()
    a=array('B',data)
    data=a
    d=range(3694)
    intensity=range(1600)
    wavelength=range(1600)
    for x in range(3694):
        d[x]=float(data[x])*256.0+float(data[x+3694])*1.0
    for x in range(1600):
        intensity[x]=d[x];
        wavelength[x]=d[x+1600]/10;
    plt.clf();
    plt.plot(wavelength,intensity, label='Left')
    plt.xlabel('Wavelength, nm', fontsize=18)
    plt.pause(0.05)