# Motion-Reactive LED Devil Horns

## Overview

https://youtu.be/SfrjKtC6B-A

Bring out your naughty side with these DIY devil horns. The horns are made from paper mache and filled with high-density LED lights that flicker and glow like burning embers.

The lights are controlled by a PropMaker Feather RP2040. This board has got an onboard accelerometer that can read your head gestures and trigger different animations based on your movements. There is CircuitPython sample code that animates the horns with a slow lava-flow animation when you tilt your head, and a flare-up spark animation when you give your head a shake.

This is an intermediate level project that requires a little careful soldering and a lot of hot glue.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/491/medium800/sensors_hero.png?1786476558)

The power behind this project is the Adafruit RP2040 PropMaker Feather. It has an onboard accelerometer, onboard battery charging, and a screw terminal for easy wire connection. This board is a workhorse and can make your project interactive in a lot of different ways.

## Parts
Featured
### Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier

[Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier](https://www.adafruit.com/product/5768)
The Adafruit Feather series gives you lots of options for a small, portable, rechargeable microcontroller board. By picking a feather and stacking on a FeatherWing you can create advanced projects quickly. One popular combo is our [Feather M4](https://www.adafruit.com/product/3857)...

In Stock
[Buy Now](https://www.adafruit.com/product/5768)
[Related Guides to the Product](https://learn.adafruit.com/products/5768/guides)
![Video of a white hand pressing a button to briefly turn an LED strip into white lights. Also wired up to the microcontroller are a servo motor and a speaker.](https://cdn-shop.adafruit.com/product-videos/640x480/5768-09.jpg)

These are the highest density pixels we carry. They're tiny and a bit delicate, and can be tricky to solder, but they're just right for illuminating a small space and getting buttery smooth LED animations.

Featured
### Ultra Skinny NeoPixel 1515 LED Strip 4mm wide

[Ultra Skinny NeoPixel 1515 LED Strip 4mm wide](https://www.adafruit.com/product/4368)
We have all&nbsp;sorts of LED strips for a wide range of needs. [_Chonky_](https://www.adafruit.com/product/3869) strips? We got those! [Strips with alligator clips](https://www.adafruit.com/?q=neopixel%20alligator%20clips%20stripping%20wires) that are easy-peasy...

In Stock
[Buy Now](https://www.adafruit.com/product/4368)
[Related Guides to the Product](https://learn.adafruit.com/products/4368/guides)
![Curved NeoPixel LED strip wired to arduino, with each LED changing to a different color in the rainbow](https://cdn-shop.adafruit.com/product-videos/640x480/4368-07.jpg)

### Snap-on Enclosure for Adafruit FeatherWing RP2040 Prop-Maker

[Snap-on Enclosure for Adafruit FeatherWing RP2040 Prop-Maker](https://www.adafruit.com/product/6504)
Here is a cute and minimal enclosure for your [Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier](https://www.adafruit.com/product/5768)&nbsp;to keep it safe during use and transport. This case has been custom-designed and 3D printed to accommodate the USB Type C main USB...

Out of Stock
[Buy Now](https://www.adafruit.com/product/6504)
[Related Guides to the Product](https://learn.adafruit.com/products/6504/guides)
![Unassembled white acrylic enclosure pieces with microcontroller.](https://cdn-shop.adafruit.com/640x480/6504-00.jpg)

### JST 2-pin Extension Cable with On/Off Switch - JST PH2

[JST 2-pin Extension Cable with On/Off Switch - JST PH2](https://www.adafruit.com/product/3064)
By popular request - we now have a way you can turn on-and-off Lithium Polymer batteries without unplugging them.

This **PH2 Female/Male&nbsp;JST 2-pin Extension Cable&nbsp;** comes with an in-line **Switch** - click once to turn on, click again to turn off....

Out of Stock
[Buy Now](https://www.adafruit.com/product/3064)
[Related Guides to the Product](https://learn.adafruit.com/products/3064/guides)
![Top view shot of JST 2-pin Extension Cable with On/Off Switch.](https://cdn-shop.adafruit.com/640x480/3064-02.jpg)

This little battery will run the horns for several hours, depending on how bright you set them. It hides easily on top of your 2" headband and can be recharged via USB, without having to remove it and put it on a charger.

### Lithium Ion Polymer Battery - 3.7v 500mAh

[Lithium Ion Polymer Battery - 3.7v 500mAh](https://www.adafruit.com/product/1578)
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 500mAh for a total of about 1.9 Wh. If you need a larger (or smaller!) battery, <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/1578)
[Related Guides to the Product](https://learn.adafruit.com/products/1578/guides)
![Angled shot of a Lithium Ion Polymer Battery 3.7V 500mAh with JST-PH connector.](https://cdn-shop.adafruit.com/640x480/1578-03.jpg)

### USB Type A to Type C Cable - 1ft - 0.3 meter

[USB Type A to Type C Cable - 1ft - 0.3 meter](https://www.adafruit.com/product/4473)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4473)
[Related Guides to the Product](https://learn.adafruit.com/products/4473/guides)
![Angled shot of a one-foot-long, black, USB Type A to Type C Cable](https://cdn-shop.adafruit.com/640x480/4473-02.jpg)

Get some hook up wire in 3 different colors: for this project I'm using black, green, and red.

### Silicone Cover Stranded-Core Wire - 2m 26AWG Black

quantity: 3
[Silicone Cover Stranded-Core Wire - 2m 26AWG Black](https://www.adafruit.com/product/1881)
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire for being extremely supple and flexible, so it is great for wearables or projects where the wire-harness has to...

Out of Stock
[Buy Now](https://www.adafruit.com/product/1881)
[Related Guides to the Product](https://learn.adafruit.com/products/1881/guides)
![Black Silicone Cover Stranded-Core Wie](https://cdn-shop.adafruit.com/640x480/1881-01.jpg)

## You'll Also Need

- A 2" wide headband - I got mine at Dollar Tree, or [here's one on Amazon](https://a.co/d/0iHC6rB8)
- [Titebond III Wood Glue](https://www.amazon.com/Titebond-1412-III-Wood-Glue/dp/B0002YQ378/ref=sr_1_2_sspa?crid=380QIBEP24ATC&dib=eyJ2IjoiMSJ9.uyminrAGYcR3lyKQ9Gy92BSEE17kzoa4dVnFvH1SUVeEx6QLxzJZIu0GhnGHKObxZ00ws4_htxcQq2FNGykwDycq9-GVK38YPakZdUCVtDIcKUbcCaq1c3l-NZSHw8hYrPcLPTLrsmBvGRM4C_g4iR9SQnAnj78dYIWuGo-x4QlHnSbsGzmw0KglDQ5vvP6tWDKMERL6K1Y8R4wyZlKV9SzrzrCWAvzEv5EUe4arAggmfkiHMxfOcFiphRVX-AvgCBrnXo3rXi4i4SNc_cFTAe32EU73U-1cY5k4SFaRHMA.H9JLbYO-cBeb8eRXjvjLC8-p7Uk_ZbiOljyTnRnp3C8&dib_tag=se&keywords=titebond%2B3%2Bwood%2Bglue&qid=1786378760&sprefix=titebon%2Caps%2C205&sr=8-2-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1)
- Paper towels, saran wrap & aluminum foil
- Wig clips or hair combs to secure the headband to your hair
- Faux Flowers or other decor items, and craft wire to hold it all together

### Tools

- Soldering iron & accessories
- A tiny flat head screwdriver - [here's a great set from our shop](https://www.adafruit.com/product/424)
- Hot glue gun & sticks

# Motion-Reactive LED Devil Horns

## Wiring Diagram

![](https://cdn-learn.adafruit.com/assets/assets/000/145/411/medium800/sensors_wiring_bb.jpg?1786379584)

This project uses two NeoPixel strips wired in parallel, so they're always perfectly in sync with each other. The NeoPixel strands attach to the screw terminals as shown:&nbsp;

- +5v to +5v
- G to G
- DI to NEO

Plug your inline switch into the JST port on the board, and plug the battery into the other end of the switch.

# Motion-Reactive LED Devil Horns

## CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) 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](https://circuitpython.org/board/adafruit_feather_rp2040_prop_maker/)
 **Click the link above to download the latest CircuitPython UF2 file.**

Save it wherever is convenient for you.

![install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/655/medium640/install_circuitpython_on_rp2040_RP2040_UF2_downloaded.jpg?1618943202)

![](https://cdn-learn.adafruit.com/assets/assets/000/121/865/medium800/adafruit_products_boot_reset.jpg?1686710555)

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).&nbsp;**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**.

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **RPI-RP2.**

![install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/656/medium640/install_circuitpython_on_rp2040_RP2040_bootloader_drive.jpg?1618943666)

![install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/657/medium640/install_circuitpython_on_rp2040_RP2040_drag_UF2.jpg?1618943674)

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

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

![install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg](https://cdn-learn.adafruit.com/assets/assets/000/101/658/medium640/install_circuitpython_on_rp2040_RP2040_CIRCUITPY.jpg?1618943864)

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

```terminal
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](https://cdn-learn.adafruit.com/assets/assets/000/145/511/original/nuke_universal.uf2?1786537992)
# Motion-Reactive LED Devil Horns

## Code the Horns

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 to your computer as a zipped folder.

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

## Upload the Code and Libraries to the RP2040 Prop-Maker Feather

After downloading the Project Bundle, plug your RP2040 Prop-Maker Feather 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 RP2040 PropMaker Feather's **CIRCUITPY** drive.

- **lib** folder
- **code.py**

Your RP2040 PropMaker Feather **CIRCUITPY** drive should look like this after copying the **lib** folder,&nbsp;and the **code.py** file.

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/Devil_Horns.png )

The code gives the horns three different behaviors. At rest, they glow with a slow, smoldering ember pulse. A sharp head shake sends a bright flare racing from the base of the horns toward the tips. Tilt your head to either side and the horns gradually “charge up,” glowing brighter and farther toward the tips the farther you lean. The two gesture effects can overlap with the ember animation, which keeps the horns feeling alive all the time.

## Configuration

The main settings are gathered together near the top of the code so you can easily customize the look and responsiveness of the horns.

```auto
PIXEL_COUNT = 21
BRIGHTNESS = 0.9
FRAME_DELAY = 0.02
```

`PIXEL_COUNT` should match the number of NeoPixels in your horn strand. In this build, there are 21 pixels, with pixel `0` at the base of the horn and the last pixel at the tip.

`BRIGHTNESS` sets the maximum overall brightness. Use a number between `0.0` and `1.0`.

`FRAME_DELAY` controls how often the animation updates. Lower numbers update more quickly.

## Accelerometer Setup

The PropMaker Feather's onboard LIS3DH accelerometer is what makes the horns gesture-reactive.

```auto
i2c = board.I2C()
accelerometer = adafruit_lis3dh.LIS3DH_I2C(i2c)
accelerometer.range = adafruit_lis3dh.RANGE_4_G
```

The code uses the sensor in two different ways.

For the **shake gesture** , it looks at how much the X, Y, and Z acceleration readings have changed since the previous frame.

For the **head tilt** , it watches the X-axis directly. Since the Feather is mounted with the USB port pointing forward on top of the head, the X-axis changes strongly when you tilt your head from side to side.

If you've oriented your board differently (i.e. anything other than right on top of the head with the USB port facing forward) you will need to adjust the code to read from a different axis in order to make that animation work.

## Resting Ember Pulse

When you're holding still, the horns glow like banked coals instead of simply sitting at one solid color.

```auto
EMBER_PULSE_SPEED = 1.4

EMBER_FLICKER_CHANCE = 8
EMBER_FLICKER_DECAY = 0.88
```

`EMBER_PULSE_SPEED` controls the speed of the slow breathing effect.

`EMBER_FLICKER_CHANCE` controls how often a small random flicker appears near the base of the horn. Raise this number for more activity.

`EMBER_FLICKER_DECAY` controls how quickly those individual flickers disappear. A value closer to `1.0` makes them linger longer.

The base ember color is created in `ember_color()`. If you'd like to change the color, the numbers are red, green, blue with values from 0 to 255.

```auto
color = (255, 24, 3)
```

## Shake Gesture

The shake effect is based on **change in acceleration** , rather than the absolute orientation of the board.

Every frame, the code compares the current accelerometer readings with the previous readings.

A sharp head shake causes this value to jump.

The most useful adjustment for this gesture is:

`FLARE_TRIGGER 6.0`

A higher number makes it less sensitive, a lower number more sensitive.

There is also a cooldown:

`FLARE_COOLDOWN = 0.9`

This prevents one vigorous movement from repeatedly restarting the animation. Make this number higher if you're getting too many re-triggers.

## Head-Tilt Gesture

The second gesture works differently. Instead of looking for sudden motion, it measures how far the head is tilted. You can tilt in either direction.

`TILT_TRIGGER` determines how far you need to tilt before the charge begins.

`TILT_FULL` determines the tilt reading at which the horn reaches its full charge.

## Progressive Horn Charge

The amount of tilt also determines **how far up the horn the glow travels**.

`fill_position = tilt_level * (PIXEL_COUNT + 1)`

At a small tilt, only the pixels near the base are affected. As the tilt increases, the fill position moves closer to the tip.

## Layering the Effects

The real trick in this code is that these aren't three completely separate animations. They are drawn in layers.

Inside `draw_pixels()`, each pixel begins with the resting ember color.

```
base_color = ember_color(
    index,
    pulse_amount,
)
```

The random ember flicker is added next.

Then the head-tilt charge is blended over the ember:

```
base_color = blend_colors(
    base_color,
    charge_overlay,
    0.20 + charge_amount * 0.70,
)
```

Finally, if a traveling flare is passing through that pixel, the bright flare is blended on top.

```
final_color = blend_colors(
    base_color,
    overlay,
    overlay_amount,
)
```

This layering means the underlying ember animation never really stops. The tilt and shake effects simply build on top of it.

You can even tilt your head while triggering a flare, and both gestures will contribute to the final color.

# Motion-Reactive LED Devil Horns

## Electronics Assembly

The NeoPixel strip comes with three wires attached to the IN end for easy connection. These will be used for the first horn.

Cut the strip to the length you want for your first horn. It's not a bad idea to make it a little longer than you think - lengthening this strip is tricky, but shortening it later is easy.

It's helpful to cut on the very front edge of the copper pads, leaving a full pad on the cut-off side to make it easier to solder. These pads are tiny, and soldering to a half-size pad can be extra tricky.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/413/medium640/sensors_00_trim.jpg?1786399140)

Solder a red, black, and green wire to the IN end of the cut strip to make a second strip. Be sure to get the wires in the correct configuration - you can use the first strip as a reference, just make it match.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/414/medium640/sensors_01_solder.jpg?1786399264)

Trim the second strip to match the length of the first. Count the number of LEDs in your strip and write this number down somewhere. We'll use it later in the code to refine the animations.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/415/medium640/sensors_03_trimmed.jpg?1786399431)

Strip a little shielding from the other end of the wires. Twist the two color coded pairs together. Insert both black wires into G, both green into NEO and both red into +5v on the PropMaker. Tug on the wires to make sure the connection is secure.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/416/medium640/sensors_04_screwterm.jpg?1786399497)

Plug in your battery or USB cable to power up the PropMaker. If all goes well, your lights will come on. Shake the controller to test the animation modes.

If everything's working, add some heat shrink to the wire connections on the LED strips to hold the solder joints firmly in place.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/417/medium640/sensors_05_test.jpg?1786399613)

![](https://cdn-learn.adafruit.com/assets/assets/000/145/418/medium640/sensors_06_heatshrink.jpg?1786399718)

## Troubleshooting

If your lights don't come on or behave the way you expect, here are a few things to try:

- Try re-uploading the software. Check the serial console for any error messages being printed there.
- Make sure your Data IN is connected to the NEO pin and double check all your wiring.
- Try disconnecting the strips and connecting just one at a time. If your solder joints are bridging or touching at any point, or if the wires are crossed at all, the whole project will short out. If one works and the other doesn't, check your solder joints. This is a tiny, tricky soldering job so take your time and double check all your connections.

# Motion-Reactive LED Devil Horns

## Create the Horns

Create the basic shape for your horns using aluminum foil. You can make them long and curvy if you want, but too many tight twists will make the foil difficult to remove later on. I went with a basic goat-horn shape.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/419/medium640/sensors_07_horns.jpg?1786400267)

Wrap the horn forms in saran wrap. This will keep the outer layer from sticking to the foil.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/420/medium640/sensors_08_saran.jpg?1786400362)

Cut up one or two paper towels into small strips. Squeeze some wood glue onto a disposable surface. I'm using Titebond III - this is one of the strongest and easiest to work-with glues out there. It takes a while to dry but is really strong, and the resulting material feels a bit like leather, with a slight flexibility to it.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/421/medium640/sensors_09_papertowels.jpg?1786400424)

![](https://cdn-learn.adafruit.com/assets/assets/000/145/422/medium640/sensors_10_titebond.jpg?1786400485)

Mix a little water in with the glue using a paint brush or stirrer you don't care about -- this stuff is hard to get out once it starts drying. Just add enough water so the glue is a bit runny and more like a paint consistency than a glue consistency.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/423/medium640/sensors_11_gluewater.jpg?1786400571)

Dip the paper towel strips in the glue mixture and smooth them down over the form, rubbing with your fingers to obscure any obvious edges. The paper towels soak up a lot of glue so you can keep the paper mache fairly thin. This glue will dry very strong, so don't use more than 1-2 layers. The thicker it is, the less light will get through.

Let them dry for at least 24 hours.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/424/medium640/sensors_12_mache.jpg?1786400656)

![](https://cdn-learn.adafruit.com/assets/assets/000/145/425/medium640/sensors_13_done.jpg?1786400797)

The paper will dry a darker brown color, which to me looks just like goat horns. They also have an interesting texture, thanks to the paper towels. They are sandable and paintable, so you may add details and shading if you like, but remember that an opaque paint will also block the light transmission, so be sparing. I'm really happy with the way they look with no paint whatsoever.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/426/medium640/sensors_15_form.jpg?1786400856)

Peel the adhesive off the back of the LED strips and insert them into the horns with the lights facing inwards, so the whole horn illuminates. You'll want to stick the lights firmly to the back wall of the horns - so spend a little time deciding which way they'll face on the headband before you commit.&nbsp;

The adhesive on the strips is helpful for initial placement but won't hold up to longer term use. These strips really look best when they're stuck to one wall rather than "floating" in the middle - if the front side of the lights get too close to the edge you can see the individual pixels rather than the diffused glow.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/427/medium640/sensors_16_addlights.jpg?1786400964)

Test them out with the animations by shaking and tilting the board. You can change the brightness of the LEDs in the code, and tweak them to get exactly the look you're going for.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/428/medium640/sensors_17_done.jpg?1786401177)

# Motion-Reactive LED Devil Horns

## Final Assembly

Place the PropMaker inside the plastic case. You will need to remove the wires from the screw terminal to get it in there, but this is a great opportunity to adjust the length of the wires so they just reach the board without a lot of extra loops.

Thread the female connector from the switch through the hole in the top of the case. Plug it into into the onboard JST connector.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/433/medium640/sensors_board1.jpeg?1786401347)

![](https://cdn-learn.adafruit.com/assets/assets/000/145/448/medium640/sensors_board2.jpeg?1786401492)

Close up the case and use some hot glue to secure it to the very top of the headband. I used my heat gun to bend the side slots down just a bit so it forms to the top of the headband a little better, and added a little glue to the top of the case to keep it from popping off.

The head-tilt code works best if the board is placed directly on the top of the head, with the USB port facing forwards.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/145/449/medium640/sensors_board5.jpeg?1786401531)

Secure the on/off switch on one side of the case, and carefully glue the battery down to the other side. Your placement may vary, depending on how you're planning to mount the horns, but put the switch someplace accessible. Don't worry about the battery being accessible - the PropMaker has onboard charging capabilities, so you won't need to remove the battery for charging.

While you're charging, make sure the switch is open / turned on. The switch makes a physical break in the line from the battery, so the controller can't charge the battery if the switch is in the closed / off position.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/458/medium640/sensors_board7.jpeg?1786401722)

Mount the horns on the headband with hot glue. I used a whole lot of glue, some on the inside edge and some on the outside, so they feel super secure. This paper mache mixture is flexible like leather and gives a really good surface hold with the hot glue.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/465/medium640/sensors_board8.jpeg?1786401884)

Add flowers, grapes, skulls, or lace to hide the electronics. I used craft wire and hot glue to secure everything. I also sewed a couple of wig clips to the underside of the headband so they grab my hair, allowing me to toss my head with abandon on the dance floor without fear of losing my horns.

![](https://cdn-learn.adafruit.com/assets/assets/000/145/474/medium640/sensors_IMG_7204.jpg?1786402653)

![](https://cdn-learn.adafruit.com/assets/assets/000/145/492/medium800/sensors_sunset_horns.png?1786476617)


## Guide Products

### Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier

[Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier](https://www.adafruit.com/product/5768)
The Adafruit Feather series gives you lots of options for a small, portable, rechargeable microcontroller board. By picking a feather and stacking on a FeatherWing you can create advanced projects quickly. One popular combo is our [Feather M4](https://www.adafruit.com/product/3857)...

In Stock
[Buy Now](https://www.adafruit.com/product/5768)
[Related Guides to the Product](https://learn.adafruit.com/products/5768/guides)
### Ultra Skinny NeoPixel 1515 LED Strip 4mm wide

[Ultra Skinny NeoPixel 1515 LED Strip 4mm wide](https://www.adafruit.com/product/4368)
We have all&nbsp;sorts of LED strips for a wide range of needs. [_Chonky_](https://www.adafruit.com/product/3869) strips? We got those! [Strips with alligator clips](https://www.adafruit.com/?q=neopixel%20alligator%20clips%20stripping%20wires) that are easy-peasy...

In Stock
[Buy Now](https://www.adafruit.com/product/4368)
[Related Guides to the Product](https://learn.adafruit.com/products/4368/guides)
### Snap-on Enclosure for Adafruit FeatherWing RP2040 Prop-Maker

[Snap-on Enclosure for Adafruit FeatherWing RP2040 Prop-Maker](https://www.adafruit.com/product/6504)
Here is a cute and minimal enclosure for your [Adafruit RP2040 Prop-Maker Feather with I2S Audio Amplifier](https://www.adafruit.com/product/5768)&nbsp;to keep it safe during use and transport. This case has been custom-designed and 3D printed to accommodate the USB Type C main USB...

Out of Stock
[Buy Now](https://www.adafruit.com/product/6504)
[Related Guides to the Product](https://learn.adafruit.com/products/6504/guides)
### JST 2-pin Extension Cable with On/Off Switch - JST PH2

[JST 2-pin Extension Cable with On/Off Switch - JST PH2](https://www.adafruit.com/product/3064)
By popular request - we now have a way you can turn on-and-off Lithium Polymer batteries without unplugging them.

This **PH2 Female/Male&nbsp;JST 2-pin Extension Cable&nbsp;** comes with an in-line **Switch** - click once to turn on, click again to turn off....

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

[Lithium Ion Polymer Battery - 3.7v 500mAh](https://www.adafruit.com/product/1578)
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 500mAh for a total of about 1.9 Wh. If you need a larger (or smaller!) battery, <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/1578)
[Related Guides to the Product](https://learn.adafruit.com/products/1578/guides)
### USB Type A to Type C Cable - 1ft - 0.3 meter

[USB Type A to Type C Cable - 1ft - 0.3 meter](https://www.adafruit.com/product/4473)
As technology changes and adapts, so does Adafruit. This&nbsp;&nbsp; **USB Type A to Type C** cable will help you with the transition to USB C, even if you're still totin' around a USB Type A hub, computer or laptop.

USB C is the latest industry-standard connector for...

In Stock
[Buy Now](https://www.adafruit.com/product/4473)
[Related Guides to the Product](https://learn.adafruit.com/products/4473/guides)
### Silicone Cover Stranded-Core Wire - 2m 26AWG Black

[Silicone Cover Stranded-Core Wire - 2m 26AWG Black](https://www.adafruit.com/product/1881)
Silicone-sheathing wire is super-flexible and soft, and its also strong! Able to handle up to 200°C and up to 600V, it will do when PVC covered wire wimps out. We like this wire for being extremely supple and flexible, so it is great for wearables or projects where the wire-harness has to...

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

## Related Guides

- [Adafruit RP2040 Prop-Maker Feather](https://learn.adafruit.com/adafruit-rp2040-prop-maker-feather.md)
- [SpaceX Next Launch Display with Adafruit MagTag](https://learn.adafruit.com/spacex-next-launch-display-with-adafruit-magtag.md)
- [Computer Perfection Synthesizer](https://learn.adafruit.com/computer-perfection-synthesizer.md)
- [Glider Paper Airplane Controller](https://learn.adafruit.com/glider-paper-airplane-controller.md)
- [Wonder Woman Cosplay Bracers](https://learn.adafruit.com/wonder-woman-cosplay-bracers.md)
- [Circuit Playground Express Automatic Sunglasses](https://learn.adafruit.com/circuit-playground-express-auto-sunglasses.md)
- [Storage humidity and temperature monitor](https://learn.adafruit.com/storage-humidity-and-temperature-monitor.md)
- [MX MIDI Guitar](https://learn.adafruit.com/mx-midi-guitar.md)
- [LED NeoPixel Corset with Circuit Playground Express and MakeCode](https://learn.adafruit.com/led-corset-with-circuit-playground-and-makecode.md)
- [CircuitPython Motorized Camera Slider](https://learn.adafruit.com/circuitpython-motorized-camera-slider.md)
- [MagTag Progress Displays](https://learn.adafruit.com/magtag-progress-displays.md)
- [Adabot Toy Robot Friend](https://learn.adafruit.com/adabot-rp2040.md)
- [Robotic AI Bear using ChatGPT](https://learn.adafruit.com/robotic-ai-bear-using-chatgpt.md)
- [Talking D20 with RP2040 PropMaker Feather](https://learn.adafruit.com/talking-d20-rp2040.md)
- [Circuit Playground Seashell Pendant](https://learn.adafruit.com/circuit-playground-seashell-pendant.md)
- [NYE Circuit Playground Drop](https://learn.adafruit.com/nye-circuit-playground-drop.md)
