miniLIGO was built from scratch using tools ranging from 3d printers to high-power lasers, as a model of the laser-interferometer gravitational wave observatory experiment that won the Nobel Prize in physics in 2017. It consists of a Michelson interferometer, with Fabry-Perot cavities, attached to a luminosity sensor and a raspberry pi showing real-time calibrated signal that works in the same way as LIGO. I worked on miniLIGO alongside Oshadha Gunasekara, Aileen Zhai, Alisa Chang, Anirudh Mani, and Elliot Tuck. It was built during the Build18 event in spring 2018, hosted by Carnegie Mellon’s Electrical and Computer Engineering department.

Introduction to LIGO

LIGO is a gravitational-wave detector. Gravitational waves are distortions in space-time that are direct predictions of the General Theory of Relativity. Gravitationl waves compress space in one dimension while stretching it in the other, but at a very small scale that is not noticable to humans.

Gravitaitonal waves can be detected using a Michelson interferometer. To keep the length of this article reasonable, I’ll defer the details of the Michelson interferometer to this wikipedia article, but here’s the basic idea: a laser that gets split by a beamsplitter and goes through two arms, with a mirror at the end of each. One arm is half a wavelength longer than the other, so when the light gets reflected back and recombines again at the beamsplitter, the two beams end up cancelling each other (this is called destructive interference). To increase the effective length of the light’s path and amplify it, we use 25% transmittive, 75% reflective beamsplitters that reflect 75% of the light back and forth: this is known as a Fabry-Perot cavity. When a gravitational wave passes through a detector, it will stretch one arm while compressing the other, so the path length of the light will change, and there will no longer be a perfectly destructive interference. The following animation shows this (credit: LIGO collaboration/MIT)

LIGO gif, courtesy of LIGO Collaboration

The first-ever detection of a gravitational wave happened in 2015, winning the 2017 Nobel Prize in Physics. Several events have been detected since. The following video shows the time-series detected signal of one such event, with frequency on the y-axis, and the color showing the intensity of the signal (credit: LIGO collaboration)

For more background information on LIGO, read this article about the detection by the LIGO Scientific Collaboration.

The Inventory

We used the following items

  • Laser module: high power green laser. The choice of color was made so that it falls within the range where the beamsplitters work best.
  • 2x mirrors: perfectly reflective mirrors for use in Michelson interferometer
  • 1x 50:50 beamsplitter
  • 2x 75:25 beamsplitters: to make a Fabry-Perot cavity.
  • Raspberry Pi
  • Raspberry Pi monitor
  • Adafruit TSL2591 Luminosity sensor
  • Acrylic sheet: as a base.

Building the Interferometer

Laser Cutting

The base was made of 2-way mirrored acrylic and was laser-cut with the following annotated pattern to accommodate the various components

3D Printing

All of the component mounts were 3d printed. All the other components were also modeled as well. The laser module mount is shown below as an example, and the rest of the components are available at at the miniLIGO github repo

The Raspberry Pi Interface

We used the tsl2591 python library to interface the RPi with the luminosity sensor:

import tsl2591
tsl = tsl2591.Tsl2591()

where the tsl object now opens a port to the luminosity sensor that can be used to get real-time information, by running:

lux = tsl.calculate_lux(tsl.get_full_luminosity())

in a while loop.

We also use the standard RPi.GPIO python library to interface it with the button, setting it up as follows:

import RPi.GPIO as GPIO
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)


The goal of the experiment is to measure tiny distortions in space. To do this quantitatively, we need to know how to convert changes in the phase of the light’s interference to spatial changes. We did this by experimentally moving the mirrors and measuring the changes in intensity and the number of fringes to calibrate this. This is similar to what is performed in physics laboratories as a part of the standard undergraduate physics curriculum.

The Signal Injection

We used a ‘giant red button’ connected to the RPi, that when pressed, activates a ‘signal injection’ or a simulation of what a real gravitational wave detection would look like. We achieved this by adding a sinusoidal signal that increases in frequency and amplitude with time for 2 seconds (similar to a detection due to a binary black-hole merger).

def inject():
    x = np.linspace(0, 2, 21)
    y = np.sin(x**2) * x * 10**-8

The Visualization

We used matplotlib and seaborn to plot the calibrated output in real-time. Putting together the various components that are needed for this visualization, we get the following script:

More Build18 Photos

© Husni Almoubayyed 2018. All rights reserved.