Maker.io main logo

Halloween Neon LED Signs

2024-09-30 | By Adafruit Industries

License: See Original Project 3D Printing LED Strips

Courtesy of Adafruit

Guide by Ruiz Brothers

Overview

 

‎3D print your own spooky LED neon signs for Halloween!‎

Make a hipster ghost wearing shades, a grim reaper holding a scythe ‎or a werewolf howling at the moon!‎‎

sign_1

Bring life to your NeoPixels with LED animations using CircuitPython.‎

Use multiple NeoPixel strips to create elements with spooky ‎animated features.‎

animations_2

This 3D printed coffin case snap fits together and houses a small ‎perma-proto board. ‎

Perfect for letting your dev board slumber in peace when it’s time to ‎lay it to rest.‎

coffin_3

Powered by an Adafruit QT Py RP2040 microcontroller board, this ‎little devil packs lots of treats with features that are sure to fright and ‎delight.‎

powered_4

Prerequisite Guides

Take a moment to review the following guides:‎

Parts

Text editor powered by tinymce.‎

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.‎

fritzing_5

Wired Connections

The QT Py is secured to the small Perma-Proto using socket headers.‎

Strip A

  • ‎5V to 5V pin on Perma-Proto

  • GND to GND pin on Perma-Proto

  • Din to SCL pin on Perma-Proto

Strip B

  • ‎5V to 5V pin on Perma-Proto

  • GND to GND pin on Perma-Proto

  • Din to SDA pin on Perma-Proto

Text editor powered by tinymce.‎

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.‎

Download the latest version of CircuitPython for this board via ‎circuitpython.org

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

Save it wherever is convenient for you.‎

click_6

board_7

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 red ‎or 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.‎

drag_8

drag_9

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

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

drive_10

Safe Mode

You want to edit your code.py 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 boot.py (where you can ‎set CIRCUITPY read-only or turn it off completely). Second, it does ‎not run the code in code.py. 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.‎

Copy Code
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 CIRCUITPY ‎doesn't show up as a disk drive after installing CircuitPython, try ‎loading this 'nuke' UF2 to RPI-RP2. 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.‎

Download flash erasing "nuke" UF2

Text editor powered by tinymce.‎

downloading_11

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.‎

Download Project Bundle

Copy Code
# SPDX-FileCopyrightText: 2022 Noe Ruiz for Adafruit Industries
# SPDX-License-Identifier: MIT
# Ghost with Glasses Neon Sign
import board
import neopixel
from adafruit_led_animation.animation.blink import Blink
from adafruit_led_animation.animation.comet import Comet
from adafruit_led_animation.animation.chase import Chase
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.group import AnimationGroup
from adafruit_led_animation.sequence import AnimationSequence
from adafruit_led_animation import color

ghost_pixels = neopixel.NeoPixel(board.SDA, 90, brightness=0.5,
    auto_write=False, pixel_order=neopixel.RGB)
glasses_pixels = neopixel.NeoPixel(board.SCL, 33, brightness=0.5,
    auto_write=False, pixel_order=neopixel.RGB)

animations = AnimationSequence(
    # Synchronized animations
    AnimationGroup(
        Chase(ghost_pixels,speed=0.02, color=color.CYAN, size=40, spacing=5),
        Blink(glasses_pixels, speed=.4, color=color.PURPLE),
        sync=False,
    ),

    # Sequential animations
    Pulse(glasses_pixels, speed=0.01, color=color.WHITE, period=2),

    # Synchronized
    AnimationGroup(
        Pulse(glasses_pixels, speed=0.01, color=color.PURPLE, period=1),
        Comet(ghost_pixels, speed=0.01, color=color.CYAN, tail_length=50, bounce=False),
        sync=True,
    ),

    advance_interval=4.0,
    auto_clear=True,
    auto_reset=True,
)

while True:
    animations.animate()

View on GitHub

Download Project Bundle

Copy Code
# SPDX-FileCopyrightText: 2022 Noe Ruiz for Adafruit Industries
# SPDX-License-Identifier: MIT
# Grim Reaper and Moon Neon Sign
import board
import neopixel
from adafruit_led_animation.animation.chase import Chase
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.group import AnimationGroup
from adafruit_led_animation.sequence import AnimationSequence
from adafruit_led_animation import color

knife_leds = neopixel.NeoPixel(board.SDA, 48, brightness=0.8,
    auto_write=False, pixel_order=neopixel.RGB)
repear_leds = neopixel.NeoPixel(board.SCL, 60, brightness=0.8,
    auto_write=False, pixel_order=neopixel.RGB)

animations = AnimationSequence(

    AnimationGroup(
        Chase(knife_leds, speed=0.02, color=color.PURPLE, spacing=12, size=40),
        Pulse(repear_leds, speed=0.01, color=color.GREEN, period=3),
        sync=True,
    ),
    advance_interval=8.0,
    auto_clear=True,
    auto_reset=True,
)

while True:
    animations.animate()

View on GitHub

Download Project Bundle

Copy Code
# SPDX-FileCopyrightText: 2022 Noe Ruiz for Adafruit Industries
# SPDX-License-Identifier: MIT
# Werewolf and Moon Neon Sign
import board
import neopixel
from adafruit_led_animation.animation.blink import Blink
from adafruit_led_animation.animation.comet import Comet
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.group import AnimationGroup
from adafruit_led_animation.sequence import AnimationSequence
from adafruit_led_animation import color

moon_leds = neopixel.NeoPixel(board.SDA, 60, brightness=0.8,
    auto_write=False, pixel_order=neopixel.RGB)
wolf_leds = neopixel.NeoPixel(board.SCL, 57, brightness=0.8,
    auto_write=False, pixel_order=neopixel.RGB)

animations = AnimationSequence(
    Blink(wolf_leds, speed=0.07, color=color.BLUE),
    Pulse(wolf_leds, speed=0.01, color=color.PURPLE, period=3),
    AnimationGroup(
        Pulse(wolf_leds, speed=0.01, color=color.PURPLE, period=3),
        Comet(moon_leds, speed=0.01, color=color.AMBER, tail_length=60, reverse=True),
        sync=True,
    ),
    AnimationGroup(
        Pulse(wolf_leds, speed=0.01, color=color.PURPLE, period=3),
        Pulse(moon_leds, speed=0.01, color=color.AMBER, period=3),
        sync=True,
    ),
    AnimationGroup(
        Pulse(wolf_leds, speed=0.01, color=color.PURPLE, period=3),
        Pulse(moon_leds, speed=0.01, color=color.AMBER, period=3),
        sync=True,
    ),
    advance_interval=2.0,
    auto_clear=True,
    auto_reset=True,
)

while True:
    animations.animate()

View on GitHub

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. ‎

  • code.py

  • lib

Your QT Py RP2040 CIRCUITPY drive should look like this after ‎copying the lib folder and the code.py file.‎

drive_12

Text editor powered by tinymce.‎

CAD Assembly

The QT Py is mounted to the Perma-Proto with socket headers. The ‎Perma-Proto is secured to the bottom cover using M3 screws and ‎hex nuts. The top and bottom cover snap fits over the enclosure ‎frame.‎

led_strips_cad-explode

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:‎

  • coffin-top

  • coffin-bottom

  • coffin-frame

  • Wolf Sign

  • Ghost Sign

  • Reaper Sign

cadparts_13

Download STLs.zip

Download CAD Source Files

Build Volume

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

  • ‎300mm (X) x 300mm (Y) x 50mm (Z)‎

build_14

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.‎

led_strips_4900_QTPY-RP2040

 

 

Text editor powered by tinymce.‎

Be very careful handling hobby knives. Wear safety glasses and use ‎adult supervision and gloves.‎

Prepare Strips

Remove the end caps from both ends of the NeoPixel strip.‎

Use a hobby knife to cut through the silicone and carefully remove ‎the end caps and bits of hot glue.‎

remove_15

Remove Wires

Use a soldering iron to desolder the stock wires from both ends of ‎the NeoPixel strip.‎

Use a hobby knife to cut an opening to better reach the solder pads.‎

wires_16

Install Strips

Begin press fitting the NeoPixel strip into the sign.‎

Gauge how long each section of the sign will need to be used.‎

Plan a good location for the NeoPixel strips to start and end. ‎

install_17

Locate Strip Cutoff Sections

With the NeoPixel strip installed, locate where in the strip that needs ‎to be cut.‎

sections_18

Cut NeoPixel Strip Sections

Use a hobby knife to cut the silicone sheathing.‎

cut_19

Locate Solder Pads

Reveal the solder pads in the strip. If needed, use the knobby knife to ‎cut a larger opening.‎

Use flush diagonal cutters to cut off the section of NeoPixel strip.‎

locate_20

Install Second Strip

Repeat the process to create the second section of the NeoPixel strip.‎

install_21

Solder Wires

Locate the end of the strip with the DATA IN pad.‎

Create a 3-pin wire using the silicone cover stranded ribbon cable.‎

Solder the 3-pin wire to the three pads on the NeoPixel strip.‎

solder_22

Wired Strips

Create a second set of silicone wires for the other NeoPixel strip.‎

Solder the 3-pin wire to the second NeoPixel strip.‎

strips_23

Prep USB Extension Cable

Remove the connectors from USB extension cable.‎

Use a hobby knife or wire strippers to remove an inch (25mm) of ‎sheathing from the cable on both ends.‎

hobby_24

Tin Wires

Use the wire strippers to remove a small bit of insulation from each ‎of the wires.‎

Use a soldering iron to tin each wire with a bit of solder.‎

tin_25

Solder Voltage and Ground

Use the soldering iron and solder to attach the black wire from the ‎extension cable to both ground wires from the NeoPixel strips.‎

Solder the red wire from the extension cable to the 5V wires on the ‎NeoPixel strips.‎

Use heat shrink tubing to insulate the exposed wired connections.‎

solder_26

solder_27 

Connect Data Wires

Solder the data in wire from the first NeoPixel strip to the white wire ‎on the extension cable.‎

Solder the second data in wire rom the other NeoPixel strip to the ‎green wire on the extension cable.‎

connect_28

Wired Cable

Double check the wires have been properly soldered to the ‎corresponding pads on both NeoPixel strips.‎

wired_29

Headers for QT Py

Use the following headers to secure the QT Py onto the Perma Proto ‎board.‎

  • ‎2x 1x7 male header pins

  • ‎2x 1x7 short socket headers‎

headers_30‎ ‎

Solder Headers on QT Py

Install the two strips of headers to the pins on the QT Py.‎

Solder all 13 pins on the QT Py.‎

Use a breadboard to help keep the board sturdy while soldering.‎

breadboard_31

Installing Socket Headers

Fit the two socket headers onto the male header pins of the QT Py.‎

This will help keep the pins sturdy while soldering to the Perma ‎Proto board.‎

headers_32

Connect Socket Headers to Perma Proto

Place the QT Py with the socket headers onto the pins of the Perma ‎Proto.‎

Solder all 13 pins to the Perma Proto board.‎

connect_33

Solder Ground and Voltage Rails

Create a 2-pin wire from the silicone ribbon cable.‎

Solder the cable to the ground pin on QT Py and connect it to the ‎ground rails on the Perma Proto.

Solder the remaining wire to the 5V pin on QT Py and connect it to ‎the voltage/power rails on the Perma Proto.‎

solder_34

Prep Cable

Use wire cutters to shorten the lengths of the wire on both sets of ‎the 4-pin cables.‎

Use soldering iron to add a bit of solder to the strips. This helps keep ‎the strands of wires from fraying when soldering.‎

prep_35

Connect Cable to Perma Proto

Remove the QT Py from the Perma Proto board and solder one set of ‎the 4-pin cable to the 5V, GND and data pin on QT Py.‎

Install the QT Py back onto the Perma Proto when ready.‎

cable_36

cable_37

Attach Connector to Extension Cable ‎

Use the second 4-pin cable and solder it to the wires on the end of ‎the extension cable.‎

Use pieces of heat shrink tubing to insulate the exposed wires.‎

attach_38

Connect Strips to QT Py

Plug in the 4-pin cables together.‎

strips_39

Text editor powered by tinymce.‎

Hardware for Perma Proto

Use the following hardware to secure the Perma Proto to the bottom ‎cover.‎

  • ‎4x M3 x 10mm screws

  • ‎4x M3 hex nuts‎

hardware_40

Install Screws and Nuts

Insert the M3 screws through the bottom mounting holes. ‎

Place the Perma Proto board onto the standoffs with the thread of ‎the screws going through the mounting holes.‎

Use the hex nuts to secure the Perma Proto board to the bottom ‎cover.‎

screws_41

Secured Perma Proto

Inspect the Perma Proto board and 4-pin cable to enclosure none of ‎the wires are being kinked.‎

secured_42

Install Frame

Orient the case frame with the bottom cover.‎

Snap fit the case frame over the bottom cover. ‎

frame_43

Connect Cables

Plug in a USB-C cable to the QT Py.‎

plug_44

Install Top Cover

Orient the top cover with the case framing and snap fit them ‎together.‎

top_45

Final Build

Plug in the USB-C cable from the QT Py to a 5V power source.‎

Congratulations on building the neon sign!‎

final_46

Additional Signs

Repeat the processes above to create the other signs.‎

add_47

Text editor powered by tinymce.

 

制造商零件编号 4900
QT PY RP2040
Adafruit Industries LLC
制造商零件编号 4310
ADDRESS LED STRIP SERIAL RGB 1M
Adafruit Industries LLC
制造商零件编号 1214
BREADBOARD GENERAL PURPOSE PTH
Adafruit Industries LLC
制造商零件编号 3955
JST PH 4-PIN TO MALE HEADER CABL
Adafruit Industries LLC
制造商零件编号 993
CABLE A RCPT TO A PLUG 10'
Adafruit Industries LLC
制造商零件编号 4685
BLACK NYLON SCREW AND STAND-OFF
Adafruit Industries LLC
制造商零件编号 3890
CBL RIBN 10COND FLAT BLACK 3.28'
Adafruit Industries LLC
制造商零件编号 4045
JST PH 4-PIN SOCKET TO COLOR COD
Adafruit Industries LLC
Add all DigiKey Parts to Cart
TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum