Scifi Inspired

You can build a sci-fi inspired lantern using an Adafruit QT Py and LED Noodles. 3D print parts to build a container that showcases these flexible LED filaments.

Powered by the QT Py RP2040, six individual LED noodles are wired up to the GPIO pins and controlled with PWM.


It features a latching push button with a built-in LED ring for turning the lantern on and off. There’s also a print-in-place handle with a built-in hinge that allows it to swing back and forth.

USB Charging 

It’s running off a cylindrical lipo battery so it’s portable and will last for several hours.

The USB port is accessible and can charge the battery with a Lipo Charger BFF add-on.


Video of hand holding a QT Py PCB in their hand. An LED glows rainbow colors.
What a cutie pie! Or is it... a QT Py? This diminutive dev board comes with one of our new favorite chip, the RP2040. It's been made famous in the new
In Stock
Video of a person with white painted nails unplugging a USB cable from a small, black, square-shaped lipo battery breakout board soldered to a similarly shaped microcontroller, which is also connected to a monochrome OLED display breakout. The OLED breakout displays battery and power data.
Is your QT Py all alone, lacking a friend to travel the wide world with? When you were a kid you may have learned...
In Stock
Video of a pair of white hands coiling and playing with a 300mm long green LED filament.
Our favorite food when hacking on code or electronics is a hot bowl of noodles - and around NYC these are often called 'noods'! What we've got here are flexible LED...
In Stock
Lithium Ion Cylindrical Battery - 3.7v 2200mAh with JST PH connector
Need a big battery for your project? This lithium-ion battery contains a 2200mAh and a protection circuit that provides over-voltage, under-voltage, and over-current protection. Yet,...
In Stock
Top view of a small Altoids breath mint case with two Adafruit Perma-Proto Small Mint Tin Size Breadboard PCBs.
Making a project that will fit into an "Altoids Smalls" Mint Tin? Or maybe you just need a small amount of prototyping space and a larger breadboard size is too big? Put down...
In Stock
Angled shot of 5 36-pin headers upright.
Headers are like the duct tape of electronics. They're great for connecting things together, soldering to perf-boards, sockets for wires or break-away header, etc. We go...
In Stock
Angled shot of Rugged Metal On/Off Switch with Red LED Ring - 16mm Red On/Off.
These chrome-plated metal buttons are rugged and look real good while doing it! Simply drill a 16mm hole into any material up to 1/2" thick and you can fit these in place,...
In Stock
1 x Resistor Pack
6x 10 Ohm resistor for LEDs
1 x M3 Hardware Kit
Black Nylon Machine Screw and Stand-off Set – M3 Thread
1 x 3-pin Cables
1.25mm Pitch 3-pin Cable Matching Pair - 40cm long - Molex PicoBlade Compatible
1 x 10 Wire Silicon Cable
10 Wire 1 Meter Long - 28AWG Black

The diagram below provides a visual reference for wiring of the components. This diagram was created using the software package Fritzing.

Adafruit Library for Fritzing

Use Adafruit's Fritzing parts library to create circuit diagrams for your projects. Download the library or just grab individual parts. Get the library and parts from GitHub - Adafruit Fritzing Parts.

Wired Connections

LED Noodles – connect each to 10ohm resistor

  • Cathode pin to GND pin on QT Py
  • Anode pin to SCK, MI, MO, A1, A2, A3 pins on QT Py

LED Button

  • NC (normally closed) pin to A0 pin on QT Py
  • COM (common ground) pin to GND pin on QT Py
  • LED+ pin to TX pin on QT Py
  • LED– pin to COM pin on button

CAD Parts List

STL files for 3D printing are oriented to print "as-is" on FDM style machines. Parts are designed to 3D print without any support material. Original design source may be downloaded using the links below:

  • coupler top.stl
  • coupler bot.stl
  • mount plate bot.stl
  • mount plate top.stl
  • bottom cover.stl
  • perma mount.stl
  • case.stl
  • battery clip.stl
  • top cover.stl
  • handle.stl
  • noodle holder.stl

Build Volume

The parts require a 3D printer with a minimum build volume.

  • 90mm (X) x 90mm (Y) x 50mm (Z)

Plastic Film Sheet

Use a sheet of transparent film or PET material to create the outer glass container. Use a hobby knife to cut a piece of film down to size.

  • 114mm (4.5in) x 200mm (7.8in)
  • Material Thicknes: 1mm or less
Be careful cutting with a hobby knife and use eye protection. Young makers should be assisted by an adult.

CAD Assembly

Each LED Noodle is press fitted into a holder. The holders are secured together with two standoffs and mounting plates for top and bottom. The main case is secured to the bottom mounting plate. Top and bottom couplers are secured to the accompanying mounting plates. The Perma-Proto circuit is secured to the perma mount. The perma mount is secured to the bottom cover. The bottom cover is secured to the case. The top cover is secured to the top coupler. The handle is secured to the the top cover.

Design Source Files

The project assembly was designed in Fusion 360. This can be downloaded in different formats like STEP, STL and more. Electronic components like Adafruit's boards, displays, connectors and more can be downloaded from the Adafruit CAD parts GitHub Repo.

CircuitPython is a derivative of MicroPython designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the CIRCUITPY drive to iterate.

CircuitPython Quickstart

Follow this step-by-step to quickly get CircuitPython running on your board.

Click the link above to download the latest CircuitPython UF2 file.

Save it wherever is convenient for you.

To enter the bootloader, hold down the BOOT/BOOTSEL button (highlighted in red above), and while continuing to hold it (don't let go!), press and release the reset button (highlighted in blue above). Continue to hold the BOOT/BOOTSEL button until the RPI-RP2 drive appears!

If the drive does not appear, release all the buttons, and then repeat the process above.

You can also start with your board unplugged from USB, press and hold the BOOTSEL button (highlighted in red above), continue to hold it while plugging it into USB, and wait for the drive to appear before releasing the button.

A lot of people end up using charge-only USB cables and it is very frustrating! Make sure you have a USB cable you know is good for data sync.

You will see a new disk drive appear called RPI-RP2.


Drag the adafruit_circuitpython_etc.uf2 file to RPI-RP2.

The RPI-RP2 drive will disappear and a new disk drive called CIRCUITPY will appear.

That's it, you're done! :)

Safe Mode

You want to edit your or modify the files on your CIRCUITPY drive, but find that you can't. Perhaps your board has gotten into a state where CIRCUITPY is read-only. You may have turned off the CIRCUITPY drive altogether. Whatever the reason, safe mode can help.

Safe mode in CircuitPython does not run any user code on startup, and disables auto-reload. This means a few things. First, safe mode bypasses any code in (where you can set CIRCUITPY read-only or turn it off completely). Second, it does not run the code in And finally, it does not automatically soft-reload when data is written to the CIRCUITPY drive.

Therefore, whatever you may have done to put your board in a non-interactive state, safe mode gives you the opportunity to correct it without losing all of the data on the CIRCUITPY drive.

Entering Safe Mode

To enter safe mode when using CircuitPython, plug in your board or hit reset (highlighted in red above). Immediately after the board starts up or resets, it waits 1000ms. On some boards, the onboard status LED (highlighted in green above) will blink yellow during that time. If you press reset during that 1000ms, the board will start up in safe mode. It can be difficult to react to the yellow LED, so you may want to think of it simply as a slow double click of the reset button. (Remember, a fast double click of reset enters the bootloader.)

In Safe Mode

If you successfully enter safe mode on CircuitPython, the LED will intermittently blink yellow three times.

If you connect to the serial console, you'll find the following message.

Auto-reload is off.
Running in safe mode! Not running saved code.

CircuitPython is in safe mode because you pressed the reset button during boot. Press again to exit safe mode.

Press any key to enter the REPL. Use CTRL-D to reload.

You can now edit the contents of the CIRCUITPY drive. Remember, your code will not run until you press the reset button, or unplug and plug in your board, to get out of safe mode.

Flash Resetting UF2

If your board ever gets into a really weird state and doesn't even show up as a disk drive when installing CircuitPython, try loading this 'nuke' UF2 which will do a 'deep clean' on your Flash Memory. You will lose all the files on the board, but at least you'll be able to revive it! After loading this UF2, follow the steps above to re-install CircuitPython.

Once you've finished setting up your QT Py RP2040 with CircuitPython, you can access the code and necessary libraries by downloading the Project Bundle.

To do this, click on the Download Project Bundle button in the window below. It will download as a zipped folder.

# SPDX-FileCopyrightText: 2022 Noe Ruiz for Adafruit Industries
# SPDX-License-Identifier: MIT
# Adafruit nOOds lantern with "analog" (PWM) brightness control using GPIO.
# Uses 6 nOOds, anode (+) to GPIO pin, cathode (-) to ground.
# A current-limiting resistor (e.g. 10 Ohm) can go at either end.

import math
import time
import board
import pwmio
from digitalio import DigitalInOut, Direction, Pull

PINS = (board.SCK, board.MOSI, board.A1, board.A3, board.MISO, board.A2) # List of pins
GAMMA = 2.6  # For perceptually-linear brightness

# Convert pin number list to PWMOut object list
pin_list = [pwmio.PWMOut(pin, frequency=1000, duty_cycle=0) for pin in PINS]

# Button switch set up
switch = DigitalInOut(board.A0)
switch.direction = Direction.INPUT
switch.pull = Pull.UP

# LED set up
led = DigitalInOut(board.TX)
led.direction = Direction.OUTPUT

while True: # Repeat forever...
    # If the button is pressed turn on LED n00ds
    if switch.value:
        for i, pin in enumerate(pin_list): # For each pin...
            # Calc sine wave, phase offset for each pin, with gamma correction.
            # If using red, green, blue nOOds, you'll get a cycle of hues.
            phase = (time.monotonic() - 2 * i / len(PINS)) * math.pi
            brightness = int((math.sin(phase) + 1.0) * 0.5 ** GAMMA * 65535 + 0.5)
            pin.duty_cycle = brightness
        led.value = True # Turn button LED on
    else: # Otherwise turn LED n00ds off
        for i, pin in enumerate(pin_list):
            pin.duty_cycle = 0
        led.value = False # Turn button LED off


Upload the Code and Libraries to the QT Py RP2040

After downloading the Project Bundle, plug your QT Py into the computer's USB port with a known good USB data+power cable. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called CIRCUITPY. Unzip the folder and copy the following items to the QT Py RP20402's CIRCUITPY drive. 


Your QT Py RP2040 CIRCUITPY drive should look like this after copying the file.

Headers for Perma Proto and QT Py

Get the male and female stacking headers ready for soldering. Make the following adjustments to the strips of header by trimming them with flush snips.

  • 2x 1x7 female stacking headers
  • 2x 1x7 male headers

Install Headers to QT Py

Solder the two 1x7 strips of male headers to the QT Py. Use a breadboard to help keep them sturdy while soldering. 

Installing Stacking Headers 

To make assembly easier, install the two female stacking headers onto the male headers of the QT Py.

Install QT Py to Perma Proto

Place the stacking headers onto the Perma-Proto board so it's at the edge of the PCB.

Solder the stacking header pins to the Perma-Proto.

Install Lipo Charger BFF Add-on

Place the Lipo Charger BFF onto the back side of the Perma-Proto PCB with the JST port facing the QT Py's USB.

Solder the Lipo Charger BFF in place and trim the excess pins short when complete.

Please wear eye protection when trimming the excess header pins with a diagonal cutter as pieces may fly off.

Solder Ground Wires

Install six 10 ohm resistors to six of the available ground pins on the Perma-Proto.

Create a set of six ground wires to be about 13cm (5.12in) in length.

Solder each ground wire to the 10 ohm resistors.

Solder Anode Wires

Flip the Perma-Proto PCB for soldering wires.

Create a set of six wires (23cm (9in) long) for connecting to the LED noodles anode pin. 

Solder each wire to the following pins on the BFF: SCK, MISO, MOSI, A1, A2, A3

Solder a wire to connect the ground pins to the ground pin on the BFF.

Solder the three wires from the 3-pin molex cable to pin A0, TX and a ground pin on the BFF.

Soldered Perma-Proto

Double check all of the wires and pins have been properly soldered. Add pieces of heat shrink tubing (or tape) to keep the wires bundled together.

Install LED Noodle to Holders

Begin inserting the end of the noodle through the opening in the holder and pull it through.

Press the silicone filament into the channel of the holder being aware to follow the bend profile. 

Fit the end of the noodle through the second opening and pull it taught. 

Label Ground Ends

Use a permanent marker to label the ground end of the LED noodle. The anode end of the LED features a hole and the cathode (ground) does not.

Install Noodle Holders

Repeat the installation process for all six LED Noodles.

Make sure to mark the ground ends of each holder.

Label Mounting Plates

Use a permanent marker to label the top and bottom mounting plates. A simple letter like "T" and "B" will suffice.

This will help assist in the installation process.

Install Stand Offs

Use two M3 x 8mm long screws to secure the 3D printed standoffs to the top mounting plate.

Install Noodle Holder

Begin installing the holders into the top mounting plate with the label facing away. Insert the end of the holder with no marking.

Start by inserting the tip of the LED noodle through the square holes in the mounting plate.

Install All Holders

Repeat the installation process and install all six holders to the top mounting plate.

Install Bottom Mounting Plate

Begin installing the other end of the holders to the bottom mounting plate.

Secure Bottom Mounting Plate

Use two M3 x 8mm long screws to secure the bottom mounting plate to the 3D printed stand offs.

Secured Holders

Double check the holders have been properly installed with all ends matching.

If using different colored noodles, take a moment to review the arrangement of the holders.

Install Anode Wires

Begin inserting the anode wires from the Perma-Proto through the center opening of the bottom mounting plate.

Install Anode Wires Continued

Pull the anode wires through the top mounting plate.

Solder Anode Wires to Noodles

Begin soldering each anode wire to the pins on the LED noodles.

Soldered Anode Wires

Double check all of the anode wires have been properly soldered to the LED noodles.

Solder Ground Wires

Begin soldering each ground wire to the cathode pins on the LED noodles.

Circuit Test

Connect the 3-pin molex cable from the button to the matching cable on Perma-Proto. Then connect the battery to the Lipo Charger BFF. 

Use the on/off switch to power the circuit on. All of the LED noodles should slowly fade on and off.

Double check the built-in switch on the BFF is in the "on" position.

Hardware for Handle

Use the following hardware to secure the handle to the top cover.

  • 2x M3 x 10mm long screws
  • 2x M3 hex nuts

Secure Handle

Place the handle over the top cover and line up the mounting holes.

Insert and fasten M3 screws through the top of the handle. Install M3 hex nuts to secure the handle to the top cover.

Wiring Button

Measure and cut a piece of 3-wire ribbon cable to about 30cm (11.8in) in length.

Measure and cut a short wire about 3cm in length.

Solder the 3-wire ribbon cable to the pins labeled, COM, NC, LED +.

Solder the short wire to connect pins COM and LED–.

Button Cable

The 3-wire ribbon cable is spliced to the 3-pin molex cable to make a cable with a length of 33cm (13in). 

Install Button

Insert the cable from the button through the center hole in the top cover. Push the button all the way through until it is flush with the top surface.

Secure the button to the cover using the included hex nut. Tighten the hex nut to secure the button in place. 

The length of the button cable is about 33cm (13in ) long.

Hardware for Perma-Proto Mounting Plate

Use the following hardware for the Perma-Proto Mounting Plate.

  • 4x M3 x 10mm standoffs
  • 4x M3 x 6mm standoffs
  • 8x M3 x 6mm screws
  • 4x M3 x 4mm screws

Install Hardware

Secure the M3 x 6mm long standoffs to the outer mounting holes.

Then, secure the longer M3 x 10mm standoffs to the inner mounting holes on the other side of the plate.

Install Top Coupler

Install the top coupler to the top mount and line up the mounting holes.

Do not secure the top coupler just yet, it will be removed later in the assembly and reinstalled.

Install Cable from Button

Begin installing the cable from the button through the center hole of the top mounting plate.

Thread the cable through the center and pull it out through the center hole of the bottom mounting plate.

Ensure the cable is going through the top coupler and the top mounting plate.

Connect Button to Perma-Proto

Plug in the cable from the button to the matching cable on the Perma-Proto.

Install Bottom Coupler

Begin installing the bottom coupler by inserting the circuit through the center of the part.

The bottom coupler should be oriented like shown in the photo.

Place the bottom coupler over the bottom mounting plate and line up the mounting holes.

The top coupler can be remove at this point to help with the assembly.

Install Casing

Begin installing the case by inserting the circuit through the center of the part.

The case should be oriented like shown in the photo.

The mounting tabs should line up with the mounting holes. 

Secure Case

Insert and fasten M3 x 10mm long screws through the top of the bottom mounting plate.

The screws should fasten through the bottom mounting plate, bottom couple and the case.

Repeat process for the remaining mounting holes.

Install Film Plastic Sheet

Begin wrapping the plastic film around the groove in the bottom mounting plate.

Wrap Sheet Closed

The sheet of plastic film should wrap around the inset wall of the top mounting plate.

Use a piece of transparent tape to keep the film from unwrapping. 

Install Battery Clip

Remove the two screws from the bottom mounting plate.

Reinstall the cable from the button along with the top coupler and top cover.

Insert the battery clip through the center of the bottom mounting plate.

Adjust the anode and button wires so they're fitted through the openings on the side of the clip.

Reinstall the two screws to secure the clip to the bottom mounting plate and the two 3D printed stand offs.

Slide the cylindrical battery through the center of the battery clip. 

Install Top Coupler

Fit the top coupler through the top mounting plate and the sheet of plastic film.

Secure Top Coupler

Insert and fasten M3 x 8mm long screws through the mounting tabs to secure the top coupler to the top mounting plate.


Install Top Cover

Begin placing the top cover over the top coupler and pull the cable from the button from the bottom to avoid pinching.

Twist the top cover clockwise secure it to the top coupler. 

Hold onto the top coupler while screwing on the top cover.

Final Circuit Test

Run through a last circuit test to ensure all of the connections are still working properly.

Secure Perma-Proto

Place the Perma-Proto PCB over the standoffs on the mounting plate with the mounting holes lined up.

Use M3x 6mm long screws to screw the Perma-Proto to the mounting plate.

Cable Adjust

Take a moment to adjust any of the wires or cables to better fit with the Perma-Proto mounting plate.

Secure Mount to Bottom

Place the Perma-Proto mounting plate into the bottom cover with the mounting holes lined up. 

Use four M3x 4mm long screws to secure the perma-Proto mounting plate to the bottom cover.

Install Bottom Cover

Fit the bottom cover into the case and line up the QT PY's USB port with the opening on the side.


Secure Bottom Cover

Use 4x M3x4mm long screws to secure the bottom cover to the case.

Final Build

Take a moment check all of the screws have been fully tightened.

Congratulations on your build!

This guide was first published on Oct 05, 2022. It was last updated on Sep 28, 2022.