# Light-Up Reactive Ukulele

## Overview

https://youtu.be/ATv95_tLlNA

Ukuleles are little joy machines. They're easy to play, portable, light, and really inexpensive - you can get a fairly good sounding one for around $40-$50.

This clear plastic ukulele from Kala simply begs to be upgraded with rainbow lights. Craft an over-the top tacky Tiki musical experience for your audience at your next luau.

This LED ukulele goes even further, with loads of customizable animations and a sound reactive mode. Match your animation playlist with your song repertoire, and bring the music to life as your uke pulses along with your strumming.&nbsp;

We've also used the FFT capabilities of our hardware to add note-sensing to this project. Change animation modes or turn sound reactive mode on or off just by plucking a particular note on your fretboard.&nbsp;

And just for giggles, we've added a Guitar-Hero-style "Rockstar tilt" mode -- tilt the neck of your ukulele up during your big finish to trigger a colorful lightning animation.

This ukulele is maika'i loa! (That's Hawaiian for awesome..)

![](https://cdn-learn.adafruit.com/assets/assets/000/093/330/medium800/led_strips_led_ukulele_flowers.jpeg?1595182221)

## Difficulty&nbsp;

This is a fairly advanced project which took some tight soldering and some tricky maneuvering to get the LEDs in place. I built my ukulele "ship-in-a-bottle" style, placing my LEDs inside the instrument with needle nose pliers and a bent coat hanger. I didn't want to do too much damage to my ukulele by taking it apart, so I took my time and assembled it with care.&nbsp;

It helped a lot to have small hands and a lot of patience. It may be easier for some makers to disassemble the ukulele, put the lights inside and then glue it back together. But my careful method worked! It took me all afternoon.. but it only took me one afternoon.&nbsp;

## Adafruit Parts Needed
### Adafruit Feather nRF52840 Sense

[Adafruit Feather nRF52840 Sense](https://www.adafruit.com/product/4516)
The **Adafruit Feather Bluefruit Sense** takes our popular [Feather nRF52840 Express](https://www.adafruit.com/product/4062) and adds a smorgasbord of sensors to make a great wireless sensor platform. This Feather microcontroller comes with Bluetooth® Low Energy and...

In Stock
[Buy Now](https://www.adafruit.com/product/4516)
[Related Guides to the Product](https://learn.adafruit.com/products/4516/guides)
![Angled shot of blue, rectangular, microcontroller.](https://cdn-shop.adafruit.com/640x480/4516-06.jpg)

### Assembled Adafruit Prop-Maker FeatherWing

[Assembled Adafruit Prop-Maker FeatherWing](https://www.adafruit.com/product/4145)
The Adafruit Feather series gives you lots of options for a small, portable, rechargeable microcontroller board. Perfect for fitting into your next prop build! This FeatherWing will unlock the prop-maker inside all of us, with tons of stuff packed in to make sabers & swords, props, toys,...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4145)
[Related Guides to the Product](https://learn.adafruit.com/products/4145/guides)
![Angled shot of a Assembled Adafruit Prop-Maker FeatherWing.](https://cdn-shop.adafruit.com/640x480/4145-03.jpg)

### Part: Battery
quantity: 1
Lithium Ion Battery - 3.7v 2000mAh
[Battery](https://www.adafruit.com/product/2011)

### Part: USB Female
quantity: 1
USB DIY Connector - MicroB Female Plug
[USB Female](https://www.adafruit.com/product/1829)

### Part: USB Male
quantity: 1
USB DIY Slim Connector Shell - MicroB Plug
[USB Male](https://www.adafruit.com/product/1826)

### Part: Side Light NeoPixels
quantity: 1
Adafruit NeoPixel LED Side Light Strip - Black 90 LED
[Side Light NeoPixels](https://www.adafruit.com/product/3635)

### Part: Skinny NeoPixels
quantity: 1
Adafruit Mini Skinny NeoPixel Digital RGB LED Strip - 144 LED/m
[Skinny NeoPixels](https://www.adafruit.com/product/2969)

### Part: NeoPixel Connector
quantity: 1
JST PH 4-Pin to Male Header Cable - I2C STEMMA Cable - 200mm
[NeoPixel Connector](https://www.adafruit.com/product/3955)

### Part: Ribbon Cable - 10 Wire
quantity: 1
Silicone Cover Stranded-Core Ribbon Cable - 10 Wire 1 Meter Long
[Ribbon Cable - 10 Wire](https://www.adafruit.com/product/3890)

### Part: Ribbon Cable - 4 Wire
quantity: 1
Silicone Cover Stranded-Core Ribbon Cable - 4 Wires 1 Meter Long
[Ribbon Cable - 4 Wire](https://www.adafruit.com/product/3889)

### Part: Thermoplastic
quantity: 1
Hand-Moldable Plastic - Low Temperature Thermoplastic
[Thermoplastic](https://www.adafruit.com/product/2504)

### Part: On/Off Switch
quantity: 1
Breadboard-friendly SPDT Slide Switch
[On/Off Switch](https://www.adafruit.com/product/805)

## Additonal Parts & Tools

- A transparent ukulele - Mine is from Kala, the [Transparent Ice Soprano Waterman](https://www.amazon.com/dp/B00TUMK0CM/ref=cm_sw_em_r_mt_dp_0TcmFbW02AASV)
- Silicone Adhesive - my favorite is [Devcon Silicone Adhesive](https://www.amazon.com/dp/B001005TX2/ref=cm_sw_em_r_mt_dp_AUcmFbZBHSQJZ)
- Krazy glue / superglue
- A Power Drill with a long extension 3/8" spade bit and a few smaller bits
- Rotary tool or sandpaper for drill hole cleanup
- Soldering iron & accessories
- White Industrial velcro
- Needle nose pliers in various shapes and sizes
- Wire coat hanger or bendable 16g steel wire

![](https://cdn-learn.adafruit.com/assets/assets/000/093/328/medium800/led_strips_ukulele_fairy_still.jpeg?1595179054)

# Light-Up Reactive Ukulele

## Circuit Diagram

![](https://cdn-learn.adafruit.com/assets/assets/000/093/218/medium800/led_strips_ukulele_wiring_bb.png?1594915188)

We're using four pieces of NeoPixel strip total, wired in sequence to fit neatly around the body and neck of the ukulele. The pixels plug into the NeoPixel port on the PropMaker Wing.

The battery plugs into the battery port on the Feather, and our on/off switch will be soldered into the **G** and **EN** ports on the PropMaker Wing.

Finally, the PropMaker Wing and Feather will be stacked and soldered together using the pre-soldered headers, in a nice tidy package.

We'll also wire up a custom USB port extension (not shown).

# Light-Up Reactive Ukulele

## Software

It's always a good idea to get your software loaded onto your board before the build. That way you'll be able to test your solder joints at each step of the way, and you'll get instant gratification when you plug in the lights.

Getting the software loaded is a 3-step process:

1. Install the operating system (CircuitPython) on the board
2. Copy the required libraries into the / **lib** folder on the board
3. Save the **code.py** file to the board

[CircuitPython](https://circuitpython.org/) is a fairly new OS that's changing rapidly. New features are being added and bugs are being fixed all the time, so it's always best to get a fresh version of CircuitPython and the library files before coding.

## Install CircuitPython

The Adafruit Feather Sense ships with CircuitPython, but let's go ahead and update it to the latest version. It's super easy with the&nbsp; **circuitpython.org** &nbsp;website. Follow the directions on the [Feather Bluefruit Sense guide](https://learn.adafruit.com/adafruit-feather-sense/circuitpython-on-feather-sense), or click the button below for a direct download link.

[Download the Latest CircuitPython Code for the Feather Bluefruit Sense](https://circuitpython.org/board/feather_bluefruit_sense/)
Download the file, plug your Feather Sense into your computer via the USB port, and double-click the reset button. You'll see a drive appear called **FTHR840BOOT.&nbsp;** Drag the .uf2 file you just downloaded onto this drive to install CircuitPython.

![projects_20_update_circuitpython.jpg](https://cdn-learn.adafruit.com/assets/assets/000/092/600/medium640/projects_20_update_circuitpython.jpg?1593473075)

You'll know it worked if the **FTHR840BOOT** drive name changes to **CIRCUITPY**.

### Adafruit Circuit Python Libraries

Download the CircuitPython library bundle per [the Feather Sense guide instructions here](https://learn.adafruit.com/adafruit-feather-sense/feather-sense-circuitpython-libraries). Unzip the files into a folder on your computer. Create a new folder on the&nbsp; **CIRCUITPY** &nbsp;drive and name it&nbsp; **lib**.&nbsp;

Open the library download folder and find the following files. Copy them into the lib folder on your **CIRCUITPY** drive.

- **adafruit\_bus\_device** &nbsp;(directory)
- **adafruit\_led\_animation** (directory)
- **adafruit\_lsm6ds.mpy**
- **adafruit\_register** (directory)
- **neopixel.mpy**

![](https://cdn-learn.adafruit.com/assets/assets/000/093/320/medium800/led_strips_circuitpy.jpg?1595113018)

## Upload Files

Click the link below to&nbsp; **download the project zip** &nbsp;– This contains the code. Upload the&nbsp; **code.py** file&nbsp;to the&nbsp; **CIRCUITPY** &nbsp;drive root (main) folder.

Check out the image above to see what your **CIRCUITPY** drive should look like when all the files are in place.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Ukulele/code.py

## Customizing Your Code

The best way to edit and upload your code is with the Mu Editor, a simple Python editor that works with Adafruit CircuitPython hardware. It's written in Python and works on Windows, MacOS, Linux and Raspberry Pi. The serial console is built right in so you get immediate feedback from your board's serial output. [Instructions for installing Mu is here](https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/installing-mu-editor).

### Edit Variables

Open the code in the Mu editor (or another text editor) and look near the top. You'll see a lot of variables that you can change to customize your instrument.&nbsp;&nbsp;

```python
MAX_BRIGHTNESS = 0.3      # set max brightness for sound reactive mode
NORMAL_BRIGHTNESS = 0.1   # set brightness for non-reactive mode
VOLUME_CALIBRATOR = 50    # multiplier for brightness mapping
ROCKSTAR_TILT_THRESHOLD = 200 # shake threshold
SOUND_THRESHOLD = 430000  # main strum or pluck threshold
```

Set **NORMAL\_BRIGHTNESS** to a number between 0 (off) and 1 (full brightness). My uke has a whole lot of densely packed lights, so 10% brightness is really plenty bright -- much more and I'd be blinding people.&nbsp;

**MAX\_BRIGHTNESS** is the cutoff number for sound reactive mode. I've turned it up a little higher to give more variety with my strum, and since it's pulsing along with the volume, it's not quite as blinding.

The volume, tilt, and sound thresholds can also be adjusted here. Further down in the code we'll look at how to read these values from your uke to calibrate it to your own playing style.

```python
# Set to the length in seconds for the animations
POWER_ON_DURATION = 1.3
ROCKSTAR_TILT_DURATION = 1
```

Adjust these variables to change the duration of the power-up or tilt animations.

```python
NUM_PIXELS = 104  # Number of pixels used in project
NEOPIXEL_PIN = board.D5
POWER_PIN = board.D10
```

Change `NUM_PIXELS` to reflect the actual number of LEDs in your project.

### Pixel Mapping
A neat function of the LED Animations library is [Pixel Mapping](https://github.com/adafruit/Adafruit_CircuitPython_LED_Animation/blob/master/examples/led_animation_pixel_map.py): the ability to run the animations along pixels in whatever order you'd like. This is useful for a couple of reasons.

First, when I wrangled the LED strips inside my ukulele's neck, I somehow managed to get them reversed left-to-right. A light traveling along my four strips in sequence would go around the left side of the body, then up the right side of the neck and back down the left side, then around the right side of the body. This just looked messy. I'd already glued the strips in place, so there was no fixing this without a whole lot of destruction.

Pixel maps to the rescue! We can tell the code to run animations on the pixels in any order we want, so I was able to fix my mistake just by typing in a string of numbers.&nbsp;

Second, with our newfound pixel mapping power, we can set up a list of pixel maps and have a lot more control over the layout of our animations. I set up five different pixel maps:

1. **pixel\_map\_reverse** : animations start at the base of the ukulele and travel upwards along both sides to the top, symmetrically
2. **pixel\_map\_around** : animations start at the bottom and travel around the ukulele in a "circle", correcting for my swapped strips inside the neck
3. **pixel\_map\_radiate** : animations start where the neck and body meet, and radiate out from the center of the ukulele symmetrically
4. **pixel\_map\_sweep** : basically the inverse of **pixel\_map\_reverse** , going top-down along both sides
5. **pixel\_map\_skip** : Same as **pixel\_map\_reverse** but lighting up every other pixel instead of all pixels

After setting up my maps, I made a list of all of them called `pixel_map`. Further down in the code where I'm setting up animations, I can call a member of the list (i.e `pixel_map[4]`) to make the LED animations run in that configuration.

```python
pixel_map = [
    pixel_map_reverse,
    pixel_map_around,
    pixel_map_radiate,
    pixel_map_sweep,
    pixel_map_skip,
]
```

You don't have to use the pixel maps -- you can simply call `pixels.show()` instead of `pixel_map[0].show()` in all the animations if you just want to keep it simple. But using pixel maps can add a whole new dimension to the animations in the LED Animations library.

### Customize the Animations & Animation Playlist

Further down in the code, around line 181, you'll find the list of animations. I'm using several animations imported from the LED Animations library including:

- **Rainbow** : a lovely rainbow animation, with customizable spread and speed
- **Comet** : sends a single color "comet" of adjustable length down the strip
- **RainbowComet** : sends a rainbow colored "comet" of adjustable length along the strip
- **RainbowChase** : blocks of LEDs chasing each other around in varying colors
- **Sparkle** : twinkly lights!

There are more animation styles available - check the [LED Animations Library Guide](https://learn.adafruit.com/circuitpython-led-animations) for a comprehensive list and use instructions.

To add more animations:

1. Import them at the top of the code
2. Define and customize them here
3. Add them to the playlist at line 202.

If you want to use different colors, remember to scroll up to the `import` section at the top of the code and add your colors to the color list. [Here is a list of all available colors in the library](https://github.com/adafruit/Adafruit_CircuitPython_LED_Animation/blob/master/adafruit_led_animation/color.py).

```python
# Cusomize LED Animations  ------------------------------------------------------
powerup = RainbowComet(pixel_map[3], speed=0, tail_length=25, bounce=False)
rainbow = Rainbow(pixel_map[4], speed=0, period=6, name="rainbow", step=2.4)
rainbow_chase = RainbowChase(pixel_map[3], speed=0, size=3, spacing=15, step=10)
rainbow_chase2 = RainbowChase(pixel_map[2], speed=0, size=10, spacing=1, step=18)
chase = Chase(pixel_map[1], speed=0.1, color=RED, size=1, spacing=6)
rainbow_comet = RainbowComet(pixel_map[2], speed=0, tail_length=80, bounce=True)
rainbow_comet2 = RainbowComet(
    pixel_map[0], speed=0, tail_length=104, colorwheel_offset=80, bounce=True
    )
rainbow_comet3 = RainbowComet(
    pixel_map[1], speed=0, tail_length=25, colorwheel_offset=80, step=4, bounce=False
    )
strum = RainbowComet(
    pixel_map[3], speed=0, tail_length=25, bounce=False, colorwheel_offset=50, step=4
    )
lava = Comet(pixel_map[3], speed=0.1, color=ORANGE, tail_length=70, bounce=False)
sparkle = Sparkle(pixel_map[4], speed=0.01, color=BLUE, num_sparkles=10)
sparkle2 = Sparkle(pixel_map[1], speed=0.05, color=PURPLE, num_sparkles=4)

# Animations Playlist - reorder as desired. AnimationGroups play at the same time
animations = AnimationSequence(
    rainbow,
    rainbow_chase,
    rainbow_chase2,
    chase,
    lava,
    rainbow_comet,
    rainbow_comet2,
    AnimationGroup(
        sparkle,
        strum,
        ),
    AnimationGroup(
        sparkle2,
        rainbow_comet3,
        ),
    auto_clear=True,
    auto_reset=True,
)
```

## Sensitivity

I set threshold variables at the top of the code, but if my values aren't quite what you're looking for, you may want to listen to what your ukulele is doing and adjust the numbers to fit. You can use the REPL in the Mu editor as a serial monitor to print out the sound and movement levels of your ukulele.

In Mu, click the **Serial** button and press **D** to enter the REPL. [More about using the REPL here.](https://learn.adafruit.com/welcome-to-circuitpython/the-repl)&nbsp;

To find a good `SOUND_THRESHOLD`, look for this code around line 245:

```python
peak_idx = np.argmax(spectrum)
peak_freq = peak_idx * 16000 / 256
# print((peak_idx, peak_freq, spectrum[peak_idx]))
magnitude = spectrum[peak_idx]
# time.sleep(1)
```

With your ukulele plugged into your computer, uncomment the `print` and `time.sleep` lines and save your code. In the Serial window, you'll see a series of 3 numbers printing out. The third number is `spectrum[peak_idx]` and represents the overall volume of your sound. I chose 43000 for my `SOUND_THRESHOLD` since that's pretty high inside the range between my "quiet" numbers and "loud" numbers. Play with some different numbers until you like the action.

Don't forget to comment out `time.sleep` again when you're done adjusting or your animations will run really slowly.

### Note Sensing

The middle number of the three is `peak_freq`. This number represents the pitch, or frequency, of the note being strummed. The code normalizes the frequencies, "squishing" them into levels broken up every 62.5hz. This means you'll get pretty consistent numbers when you strum a particular note, even if your ukulele is a bit out of tune. A high A note played on your ukulele's E string comes out at 875hz, and an A♭ reads at 812.5hz.&nbsp;

This is fun because now we can tell the Feather to run some code whenever it hears that particular pitch. I chose the two highest notes on the instrument because they rarely get played (at least with my novice ability) and won't get strummed accidentally.&nbsp;

High A toggles sound-reactive mode on and off, and high A♭ cycles through the animation modes. Feel free to add more modes centered around different notes!

```python
if peak_freq == 875 and magnitude &gt; SOUND_THRESHOLD:
            animations.next()
            time.sleep(1)
        if peak_freq == 812.50 and magnitude &gt; SOUND_THRESHOLD:
            if MODE == 1:
                MODE = 2
                print("mode = 2")
                LASTMODE = 2
                time.sleep(1)
            elif MODE == 2:
                MODE = 1
                print("mode = 1")
                LASTMODE = 1
                time.sleep(1)
```

## Tilt Mode / Accelerometer Adjustment

Down around line 256 you'll find a similar `print` line for your accelerometer readout. Uncomment `print(accel_total)` and shake your ukulele around to get some data on which to base your `ROCKSTAR_TILT_THRESHOLD` value.

```python
# Read accelerometer
x, y, z = sensor.acceleration
accel_total = x * x + y * y # x=tilt, y=rotate
# print (accel_total)
if accel_total &gt; ROCKSTAR_TILT_THRESHOLD:
    MODE = 3
    print("Tilted: ", accel_total)
```

## Troubleshooting

If it doesn't seem to be working, here are a few things to try:

1. Double check you have all the correct libraries installed. Some of the names are really similar -- make sure you've got the right ones.
2. Try reinstalling CircuitPython again
3. Open the **REPL** in the Mu editor by clicking the "serial" button. Press **\<ctrl\>D**. This will error-check your code and let you know what line number may be the problem. [More about the REPL here](https://learn.adafruit.com/welcome-to-circuitpython/the-repl).

More tips and tricks can be found on the [Intro to CircuitPython guide](https://learn.adafruit.com/welcome-to-circuitpython/overview) and the [Feather Sense guide](https://learn.adafruit.com/adafruit-feather-sense).

# Light-Up Reactive Ukulele

## USB Extension Assembly

First we'll build a super low-profile USB extension cable so we can put our charging / programming port on the bottom of the ukulele, where the strap connector would go. This way we can just plug it in to charge the battery without having to take anything apart.

We'll need a 5-strand ribbon cable. I'm using a multicolored one for clarity. Cut the ribbon cable to around 3-4 inches long.

Make sure you've got all the pieces. You'll need a female connector and snap-fit plastic sheath, 4" of ribbon cable, and your male connector and 2-piece plastic sheath.&nbsp;

Separate the wires at both ends of your ribbon cable and tin all five wires. Trim just a smidgen off the tips of the wires so they're nice and tidy.

![projects_00_usb_layout.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/586/medium640/projects_00_usb_layout.jpeg?1593467009)

![projects_00_usb_tin.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/587/medium640/projects_00_usb_tin.jpeg?1593467139)

Tin the pads on the female USB connector and solder all five wires to the five pads.

![projects_00_usb_connector.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/585/medium640/projects_00_usb_connector.jpeg?1593466964)

Slip the plastic cover onto the wire and snap it into place around the USB connector.

![projects_01_usb_snap.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/588/medium640/projects_01_usb_snap.jpeg?1593467172)

![projects_03_female_assembled.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/589/medium640/projects_03_female_assembled.jpeg?1593468418)

Plug the male side into the female side for a moment, so you're 100% sure you've got both sides the same way up.&nbsp;

Once you're sure it's aligned right, tin the pads on the male connector on both sides. Solder the wires as shown - the first, third, and fifth wire go on the the 3-pad side, and the second and fourth go on the 2-pad side.&nbsp;

&nbsp;

![projects_04_usb_solder1.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/590/medium640/projects_04_usb_solder1.jpeg?1593468685)

![projects_05_usb_solder2.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/591/medium640/projects_05_usb_solder2.jpeg?1593468882)

Plug your Feather into your computer's USB port via your newly soldered cable. Press the reset button and be sure your Feather shows up as a drive on your computer, in order to be sure the data lines and power lines are all in working order.

![projects_06_usb_test.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/592/medium640/projects_06_usb_test.jpeg?1593468905)

Once you're sure your soldering is 100% solid, clip the housing onto the male end of your cable.&nbsp;

Squeeze a bead of hot glue across the exposed contacts on the female end to keep them nice and secure as well.

![projects_07_usb_male_ready.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/593/medium640/projects_07_usb_male_ready.jpeg?1593469093)

![projects_08_male_assembled.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/092/594/medium640/projects_08_male_assembled.jpeg?1593469193)

![](https://cdn-learn.adafruit.com/assets/assets/000/092/596/medium800/projects_09_usbcable_assembled.jpeg?1593469499)

# Light-Up Reactive Ukulele

## Feather Assembly

Grab your 4-wire ribbon cable and find the striped wire. Leave that one alone and separate the black wire on the other edge from the ribbon cable. We'll use this single wire for our on/off switch, and the 3-wire ribbon that's left to wire our NeoPixels.

![led_strips_09_ribboncable.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/341/medium640/led_strips_09_ribboncable.jpeg?1595184492)

Solder a 3" wire to the middle and one of the side legs of your on/off switch (it doesn't matter which side leg). Cover with heat shrink.

![led_strips_14_xonoffswitch.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/340/medium640/led_strips_14_xonoffswitch.jpeg?1595184410)

Solder the two wires into the **EN** and **G** holes on your PropMaker Wing as shown. It doesn't matter which wire goes to which hole.

![led_strips_15_onoffwired.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/342/medium640/led_strips_15_onoffwired.jpeg?1595184584)

Stack your PropMaker Wing on top of your Feather Sense so all the headers fit into the holes. Solder this little sandwich in place.

Plug in your homemade USB cable, and use that to plug into your computer. Flick your switch on and off to make sure that's working. Also make sure you can see your **CIRCUITPY** drive through your homemade USB cable -- if anything's not working, now is the time to find out and fix it since these connections will become inaccessible later on.

![led_strips_16_stacked.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/343/medium640/led_strips_16_stacked.jpeg?1595184640)

# Light-Up Reactive Ukulele

## NeoPixel Strip Assembly

![](https://cdn-learn.adafruit.com/assets/assets/000/093/332/medium800/led_strips_led_ukulele.jpg?1595182842)

## Layout

This ukulele uses side-lit NeoPixels (90/m) around the inside edge of the body. Side-lit pixels are great for fitting into curves. They're assembled differently than regular NeoPixels, which flex front-to-back with the pixels shining straight out. These pixels shine to the side, so the flex direction of the strip can curve beautifully along the perimeter of the ukulele body. I have 28 pixels per side.

For the neck, I'm using two strips of Skinny Neopixels (144/m). These are going straight and so can lay flat (more or less) with the light facing straight forward. I have 24 pixels in each strip.

The Feather Sense and PropMaker Wing are attached to the battery in a tidy stack and stuck to the inside back of the ukulele with industrial velcro. Our homemade USB extension plugs into the Feather's USB port and threads through to the outside of the body -- this board has onboard battery charging, so we can charge up our battery as well as update the programming via the USB port.

Our on/off switch will also thread through a hole next to the USB port.

## Solder NeoPixel Strips
Measure your strips to your ukulele, count out your pixels and cut your strips to length. These high-density strips can be tricky to solder to, so I like to use the "sacrificial pixel" method, leaving a full solder pad on each side while sacrificing the pixel in between.

Learn more about how this works in our [How To Solder NeoPixels Guide](https://learn.adafruit.com/make-it-glow-how-to-solder-neopixels-a-beginners-guide/tips-tricks).

![led_strips_07_cutStrip.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/322/medium640/led_strips_07_cutStrip.jpeg?1595123939)

There's not a lot of space inside the neck, so I pulled my Skinny strips out of their silicone casing to better fit them inside. I left the side-light strip cases on.

![led_strips_08_strips_out.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/323/medium640/led_strips_08_strips_out.jpeg?1595124184)

Grab your 3-pin STEMMA connector and solder it to the color-coded wires on the **IN** end of strip #1 (side-light strip). You can clip off any remaining extra wires.&nbsp;

![led_strips_14_stemma.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/339/medium640/led_strips_14_stemma.jpeg?1595183730)

The next strip in line (#2) is the skinny strip that goes up the neck. Use a 3" piece of ribbon cable to connect it to the side-light strip.

Here's where you need to be extra careful - the pads on the side-light strips are not laid out in the same order as on the skinny strips. I had to put a twist in the wire to get the correct pins connected to the correct pins. Look closely -- you want to match **+** to **+** , **G** to **G** , and **DO** (on the side light strip) to **DI** (on the skinny strip).

![led_strips_12_solder_twist.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/335/medium640/led_strips_12_solder_twist.jpeg?1595183371)

Next we'll solder the wires for the u-bend in the pixels up by the headstock.

Cut a short piece of 3-wire ribbon cable -- about an inch long.&nbsp;

Solder the **OUT** end of one skinny strip (#2 in the diagram above) to the **IN** end of your second skinny strip (#3), matching the pads - **+** to **+** , **DI** to **DO** , and **G** to **G**. Bend the strips so they lie next to each other as neatly as possible. Put a little hot glue over the solder pads so they're less likely to come apart during assembly.

&nbsp;

![led_strips_09_solder_srips.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/324/medium640/led_strips_09_solder_srips.jpeg?1595124271)

![led_strips_10_solder_ubend.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/333/medium640/led_strips_10_solder_ubend.jpeg?1595183014)

Solder strip #4 to the **OUT** end of your second skinny strip to complete the circuit around the ukulele. Don't forget to match the pads with a twist in your ribbon cable.

Plug your NeoPixels into your PropMaker and test to be sure everything is working. If you wired something up wrong or backwards, now is the time to catch any mistakes!

![led_strips_13_test.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/337/medium640/led_strips_13_test.jpeg?1595183527)

# Light-Up Reactive Ukulele

## Project Assembly

Take the strings off your ukulele. Put them someplace safe where they won't get mixed up.

![led_strips_00_stringsoff.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/344/medium640/led_strips_00_stringsoff.jpeg?1595185033)

Drill a pilot hole and then a 3/8" hole in the bottom center of the body, for the USB port. Clean up any stray plastic with a rotary tool or sand paper.

Drill a second hole just below this one for the on/off switch. Don't worry too much about making it fit exactly - you want the hole a bit bigger than the switch and port so we can get them through later.

![led_strips_01_drill.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/345/medium640/led_strips_01_drill.jpeg?1595185065)

![led_strips_02_dremel.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/346/medium640/led_strips_02_dremel.jpeg?1595185107)

For the hole into the neck, I'm using a 3/8" spade bit with a long drill extension. Slip it through the bottom hole and carefully drill through into the neck.

![led_strips_03_drillextension.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/347/medium640/led_strips_03_drillextension.jpeg?1595185197)

![led_strips_04_drill2.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/348/medium640/led_strips_04_drill2.jpeg?1595185240)

This hole needs to be big enough to squeeze the two NeoPixel Skinny strips through. 3/8" seems to be just perfect.

![led_strips_05_hole_drilled.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/349/medium640/led_strips_05_hole_drilled.jpeg?1595185270)

Now it's time for the fiddly part of placing the light strips inside the ukulele. I made judicious use of needlenose pliers, zip ties, q-tips, and anything else I could find to wrangle the strips into place.

I had the most success using a bit of coathanger wire, straightened out and slipped through the bottom hole and then the neck hole, giving me a straight shot at pushing the wires up as far as they would go.

To hold the neck wires in place, I drilled a tiny hole on the back of the neck and emptied a small tube of krazy glue into it.

My neck wires don't lay quite flat, but I actually like the wavy effect I get from them quite a lot.

![led_strips_16_crazyglue.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/350/medium640/led_strips_16_crazyglue.jpeg?1595185347)

During this process, my neck strips somehow got reversed and placed on opposite sides from what I intended. If this happens to you, no worries - you can fix it in the code with pixel mapping. Check the Software page for instructions on how to do this.

Once the neck wires are in place, plug your battery and USB cable into your Feather stack. Use a rubber band or zip tie to stack the battery underneath the Feather. Make it look as tidy as possible, since it will show a bit through your ukulele.

![led_strips_20_rubberband.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/351/medium640/led_strips_20_rubberband.jpeg?1595185720)

Cut a piece of industrial velcro to the same size as the battery. Stick one side to the battery and use needlenose pliers to stick the other side to the inside back of the ukulele, as far down as you can reach through the sound hole.

![led_strips_21_velcro1.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/352/medium640/led_strips_21_velcro1.jpeg?1595185827)

![led_strips_22_velcro_in.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/353/medium640/led_strips_22_velcro_in.jpeg?1595185926)

Slip the feather in through the sound hole with the USB cable facing the bottom of the ukulele and press it down onto the velcro.

Now it's time to use your coathanger tool again. Bend it into a hook with your pliers and reach through the holes you drilled to pull the USB port and the switch to the outside. Take your time and be careful not to pull your wire connections too hard or they might break!&nbsp;

![led_strips_23_hooks1.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/354/medium640/led_strips_23_hooks1.jpeg?1595185945)

![led_strips_24_hooks2.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/355/medium640/led_strips_24_hooks2.jpeg?1595185954)

Next we'll mount these two components in place using a bit of thermoplastic. Use a heat gun to melt a bit of this down until it gets warm and squishy. It turns transparent when it's moldable, but be careful - it can get hot!

![led_strips_26_thermoplastic.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/356/medium640/led_strips_26_thermoplastic.jpeg?1595186119)

Squish some thermoplastic around the USB port and the switch and smooth it down so your components are more-or-less flush with the bottom of the ukulele. Be sure to push some of the plastic through the hole to the inside, so when it hardens it will grab in place. These components will need to stand up to pushing, so be sure they're pretty solidly mounted - and this thermoplastic seems to reject any and all types of glue, so a physical blob on both the inside and outside is your best bet.

![led_strips_thermoplastic1.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/357/medium640/led_strips_thermoplastic1.jpeg?1595186593)

![led_strips_thermoplastic2.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/358/medium640/led_strips_thermoplastic2.jpeg?1595186602)

Finally, glue the side-light NeoPixel strips along the inside edges of the ukulele body using silicone adhesive. Silicone adhesive is just about the only thing that will stick to the silicone coating on the LEDs.

If you don't have this or can't get a hold of this, you can take the silicone casing off and glue the strips down with E6000 or another glue, but if you're leaving the protective cases on, you'll need to use silicone glue.

I found my coathanger tool to be the most effective thing for spreading glue and pressing the NeoPixels into it. Wipe off any excess glue right away; this stuff dries rubbery and will be hard to get off later on.

![led_strips_25_glue.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/093/359/medium640/led_strips_25_glue.jpeg?1595186623)

Let everything dry, then shake your ukulele around a bunch to make sure nothing rattles before putting the strings back on.

# Light-Up Reactive Ukulele

## Play It

![](https://cdn-learn.adafruit.com/assets/assets/000/093/386/medium800/led_strips_Glimmer_on_Goose_Shit_Rock_7.jpg?1595344767)

Turn your ukulele on with the switch and a power-up animation will run. The ukulele starts up in sound-reactive mode with a rainbow animation.&nbsp;

The sound reactive mode changes the brightness of the LEDs based on the volume of your playing. It works with any of the animation modes. Play loud and the lights will be bright, play quietly or stop playing and they'll go dim or off. To toggle sound-reactive mode on or off, pluck the highest note possible on your ukulele - a high A on the E string.

To cycle between animation modes, play a half-step or whole-step down on the same string - an A flat or high G note will move to the next animation in your playlist.

To trigger rockstar mode, tilt or shake the ukulele quickly and you'll see a lightning bolt flash!

&nbsp;


## Featured Products

### Adafruit Feather nRF52840 Sense

[Adafruit Feather nRF52840 Sense](https://www.adafruit.com/product/4516)
The **Adafruit Feather Bluefruit Sense** takes our popular [Feather nRF52840 Express](https://www.adafruit.com/product/4062) and adds a smorgasbord of sensors to make a great wireless sensor platform. This Feather microcontroller comes with Bluetooth® Low Energy and...

In Stock
[Buy Now](https://www.adafruit.com/product/4516)
[Related Guides to the Product](https://learn.adafruit.com/products/4516/guides)
### Assembled Adafruit Prop-Maker FeatherWing

[Assembled Adafruit Prop-Maker FeatherWing](https://www.adafruit.com/product/4145)
The Adafruit Feather series gives you lots of options for a small, portable, rechargeable microcontroller board. Perfect for fitting into your next prop build! This FeatherWing will unlock the prop-maker inside all of us, with tons of stuff packed in to make sabers & swords, props, toys,...

Out of Stock
[Buy Now](https://www.adafruit.com/product/4145)
[Related Guides to the Product](https://learn.adafruit.com/products/4145/guides)
### Lithium Ion Battery - 3.7V 2000mAh

[Lithium Ion Battery - 3.7V 2000mAh](https://www.adafruit.com/product/2011)
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This battery has a capacity of 2000mAh. If you need a larger (or smaller!) battery,&nbsp;<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/2011)
[Related Guides to the Product](https://learn.adafruit.com/products/2011/guides)
### USB DIY Connector - MicroB Female Plug

[USB DIY Connector - MicroB Female Plug](https://www.adafruit.com/product/1829)
As an addition to our other USB DIY shells, we have a 'micro B female' in a panel-mount-like connector. This isn't true panel mount but you could glue the black plastic shell into your project and then press-fit in the micro B connector. The 5-pins are much easier to solder than a...

In Stock
[Buy Now](https://www.adafruit.com/product/1829)
[Related Guides to the Product](https://learn.adafruit.com/products/1829/guides)
### USB DIY Slim Connector Shell - MicroB Plug

[USB DIY Slim Connector Shell - MicroB Plug](https://www.adafruit.com/product/1826)
Make your own USB connections without slicing apart a USB cable and soldering those thin wires inside. This is the 'slim' version of the DIY MicroB Male connector. It's a little more elegant because instead of snapping two pieces together the connector press-fits into the...

In Stock
[Buy Now](https://www.adafruit.com/product/1826)
[Related Guides to the Product](https://learn.adafruit.com/products/1826/guides)
### Adafruit NeoPixel LED Side Light Strip - Black 90 LED

[Adafruit NeoPixel LED Side Light Strip - Black 90 LED](https://www.adafruit.com/product/3635)
Fancy new _side light_ LED strips are a great alternative for folks who have loved and used Adafruit LED strips for a few years but want gorgeous, glowy&nbsp;light emitting at 90 degrees. They're very skinny so you can run them along a thin edge and curve them around shapes and...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3635)
[Related Guides to the Product](https://learn.adafruit.com/products/3635/guides)
### Adafruit Mini Skinny NeoPixel Digital RGB LED Strip - 144 LED/m

[Adafruit Mini Skinny NeoPixel Digital RGB LED Strip - 144 LED/m](https://www.adafruit.com/product/2969)
So thin. So mini. So teeeeeeny-tiny. It's the 'skinny' version of our classic NeoPixel strips!

These NeoPixel strips have 144 digitally-addressable pixel Mini LEDs per meter and are very affordable and are only 7.5 mm wide (0.3")&nbsp;if you remove the strip from the...

In Stock
[Buy Now](https://www.adafruit.com/product/2969)
[Related Guides to the Product](https://learn.adafruit.com/products/2969/guides)
### Silicone Cover Stranded-Core Ribbon Cable - 10 Wire 1 Meter Long

[Silicone Cover Stranded-Core Ribbon Cable - 10 Wire 1 Meter Long](https://www.adafruit.com/product/3890)
For those who are fans of our silicone-covered wires, but are always looking to _up their wiring game_. We now have **Silicone Cover Ribbon cables!** These may look _a lot_ like <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/3890)
[Related Guides to the Product](https://learn.adafruit.com/products/3890/guides)

## Related Guides

- [Adafruit Feather nRF52840 Sense](https://learn.adafruit.com/adafruit-feather-sense.md)
- [Playa Festival Bike](https://learn.adafruit.com/playa-festival-bike.md)
- [MicroPython Smart Holiday Lights](https://learn.adafruit.com/micropython-smart-holiday-lights.md)
- [Programmable Wireless BLE Gesture Mouse](https://learn.adafruit.com/ble-wireless-gesture-mouse.md)
- [Using the Bluefruit Dashboard with Web Bluetooth in Chrome](https://learn.adafruit.com/bluefruit-dashboard-web-bluetooth-chrome.md)
- [New Years Eve Ball Drop](https://learn.adafruit.com/new-years-eve-ball-drop.md)
- [CircuitPython BLE Controlled NeoPixel Hat](https://learn.adafruit.com/circuitpython-feather-ble-neopixel-hat.md)
- [Introducing Adafruit Feather](https://learn.adafruit.com/adafruit-feather.md)
- [LIS3MDL Triple-axis Magnetometer](https://learn.adafruit.com/lis3mdl-triple-axis-magnetometer.md)
- [BLE Buzzy Box](https://learn.adafruit.com/ble-buzzy-box.md)
- [LED NeoPixel Corset with Circuit Playground Express and MakeCode](https://learn.adafruit.com/led-corset-with-circuit-playground-and-makecode.md)
- [Mini LED Matrix Audio Visualizer](https://learn.adafruit.com/mini-led-matrix-audio-visualizer.md)
- [CircuitPython BLE Libraries on Any Computer](https://learn.adafruit.com/circuitpython-ble-libraries-on-any-computer.md)
- [Make a Zelda Master Sword with the RP2040 Prop-Maker Feather](https://learn.adafruit.com/master-sword-rp2040.md)
- [Water Drip Dress with Oozemaster 3000](https://learn.adafruit.com/water-drip-dress-with-oozemaster-3000.md)
