Limelight: DIY Lime-Shaped Presentation Timer With LED Segments

by mrao9 in Circuits > Arduino

46 Views, 1 Favorites, 0 Comments

Limelight: DIY Lime-Shaped Presentation Timer With LED Segments

IMG_3144.jpeg
IMG_3143.jpeg
IMG_3153.jpeg
IMG_3142.jpeg

Limelight is a unique, lime-like timing device designed to provide presenters with a subtle, non-distracting way to monitor their speaking time. Sitting quietly on the podium, it communicates time through progressive illumination of its segmented face, using custom NeoPixel Mini Button LEDs. The device is constructed using dual-filament 3D printing: an opaque material forms the structural main body (housing the electronics and internal segmentation), while a translucent filament is used for the display sections, allowing the LED light to shine through with a soft, uniform glow.

The physical design is one of Limelight’s signature features. The timer is split into two halves, held together by tiny magnets, creating a clean, segmented structure. The entire form—including the internal walls that sectionalize each minute segment—is integrated into the single 3D-printed body, ensuring precision and durability. The timer will begin intuitively upon the magnetic separation of the two halves, ensuring a seamless and elegant start to the presentation.

Limelight is designed to be a quiet, professional tool that leverages modern fabrication for a polished aesthetic.


Supplies

Electronics


Gemma M0 Microcontroller

6-8× NeoPixel Mini Button LEDs (One per lime segment)

Hall Effect Sensor (Detects magnetic separation to start timer)

TP4056 Li-poly Battery Charger Module

3.7V Li-Poly Battery

USB-C Breakout board


For this project you will need to install:

Adafruit NeoPixel library

Hall sensor library


Housing


3D Printer

3D Printer Filament - Translucent (White or Green) and Opaque (White or Green)

(If using a white filament, Green acrylic paint is needed)

CAD Software

2 Small Neodymium magnets


Tools


3D printer

Soldering iron

Solder

Super glue (For magnets)

Wire strippers

Wire cutters

Design the 3D Model

Screenshot 2025-12-02 at 14.59.17.png
Screenshot 2025-12-08 at 17.16.09.png
Screenshot 2025-12-08 at 17.17.30.png
Screenshot 2025-12-08 at 17.17.49.png

We used the Autodesk Fusion 360 Software to model the LimeLight.

Here, we're creating the 3D model of the two hollow lime halves that you'll use to house all your electronics.

A total of 4 parts will be modeled, 2 hemispheres for the outer body and 2 discs with sections that extrude from the face, dividing it into 8 wedge segments. These sections are where your light will separate visually.

The STL file of the 4 parts is below.

3D Print the LimeLight

IMG_3086.jpeg
IMG_3042.jpeg

Use the .stl file to upload the object to a 3D printer. We used the Prusa Mini FDM Printer.

Solder the Electronics

IMG_3097.jpeg
IMG_3039.jpeg
IMG_3095.jpeg
IMG_3094.jpeg

Gemma M0: - 3.3V → NeoPixel Data In - GND → NeoPixel GND, Hall Sensor GND - D0 (or chosen pin) → NeoPixel Data - D1 (or chosen pin) → Hall Sensor Signal - VBAT → TP4056 OUT+ - GND → TP4056 OUT- TP4056: - B+ → Battery Positive - B- → Battery Negative - OUT+ → Gemma VBAT - OUT- → Gemma GND - IN+ → USB-C Breakout VCC - IN- → USB-C Breakout GND NeoPixels: - Chain them: Data Out → next Data In - All share common 3.3V and GND

Solder NeoPixel chain: Connect 8 NeoPixels in series

Attach Hall Sensor: Position near magnet location, solder wires

Wire Gemma to components: Follow diagram above

Connect battery to TP4056: Red to B+, Black to B-

Mount Electronics Inside the Housing

IMG_3120.jpeg


Half A (with Hall sensor):

  1. Mount Gemma M0 on interior posts with hot glue or screws
  2. Secure battery with double-sided tape or velcro
  3. Position TP4056 near the opening for charging access
  4. Mount Hall sensor near magnet alignment point

Half B (with magnet trigger):

  1. Install neodymium magnets aligned with Hall sensor
  2. Secure with epoxy (they must stay in place)
  3. Lighter electronics load, potentially just wiring pass-through

LED Positioning

  1. Position each NeoPixel behind its corresponding segment
  2. Apply electrical tape backing
  3. Secure with hot glue to mounting posts
  4. Ensure LEDs are centered

Assemble the Parts

IMG_3131.jpeg
IMG_3132.jpeg
IMG_3134.jpeg
IMG_3135.jpeg
IMG_3137.jpeg
IMG_3139.jpeg

Lock all pieces into their respective positions.

Program the Gemma M0

We want


  1. the LEDs to light up progressively (at 1-minute intervals),
  2. the hall sensor to detect separation
  3. and for the timer to reset when the halves are reconnected


Once the code is pasted into Arduino, upload the code to Gemma and it should start working!


#include <Adafruit_NeoPixel.h>

#define LED_PIN 1
#define NUM_LEDS 8
#define HALL_PIN 2

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_RGBW + NEO_KHZ800);

int currentLED = 0;
unsigned long previousMillis = 0;
const unsigned long interval = 60000; // 1 minute
bool sequenceStarted = false;
bool lastHallState = HIGH;

void setup() {
strip.begin();
strip.setBrightness(50);
strip.show();

pinMode(HALL_PIN, INPUT_PULLUP);
}

void loop() {
bool hallState = digitalRead(HALL_PIN);

// Detect separation (HIGH to LOW transition)
if (lastHallState == HIGH && hallState == LOW) {
sequenceStarted = true;
currentLED = 0;
previousMillis = millis();
strip.clear();
strip.setPixelColor(0, strip.Color(200, 255, 50, 0));
strip.show();
}

// Detect reconnection (LOW to HIGH transition)
if (lastHallState == LOW && hallState == HIGH) {
sequenceStarted = false;
currentLED = 0;
strip.clear();
strip.show();
}

lastHallState = hallState;

// Run sequence if started
if (sequenceStarted && currentLED < NUM_LEDS - 1) {
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
currentLED++;
strip.setPixelColor(currentLED, strip.Color(200, 255, 50, 0));
strip.show();
}
}
}

Enjoy Your LimeLight!

IMG_3144.jpeg
IMG_3142.jpeg
IMG_3143.jpeg
IMG_3154.jpeg
IMG_3147.jpeg

Let us know how it goes!

Watch Our Video Instructable

DIY Limelight Presentation Timer_1