


This year for Halloween I was a fallen angel. I wore black under a red cloak I purchased from Amazon, and the star of the show was the glowing winged collar I created in this class.
I was inspired by this photo, and adapted the headpiece design to make it spookier for the occasion. I changed the color to red, so it would have a more daemonic feel, and I added glowing red LEDs that cycle through at the pace of breathing, so it would feel animalistic.

The wings are worn around the neck and secured in place with velcro dots. The wires for the microcontroller and batter pack went down my back under my cloak and sat in my back pocket.

In the process, I learned about feather patterns for wings (big thanks to Lynn for the help here!):


I also got more comfortable with C++, re-familiarizing myself with variable definitions, importing libraries, and writing functions (which I haven’t done much of since doing a backend Python bootcamp during COVID). I also got more practice soldering, and debugging/interpreting error messages!
If I had to do this project again, I would:
- ADJUST THE SHAPE:
–> use narrower feathers overall to give greater clarity of shape to the wings. The size of the wings to the size of the feathers was difficult to get right as a first-timer (its hard to gauge size when ordering feathers online!). The final wings were a bit stumpy looking and compared to the size of the collar, and don’t taper to the top in the way I intended.

2. DIFFUSE MORE LIGHT:
–> add another layer of diffusion for the lights around the collar between the felt and the feathers, to make the LED spots less obvious
3. MAKE IT LESS HOT:
–> given how hot it was Halloween night, I woulud also re-design how the wings are worn, so that they attach from the back only, rather than wrapping around the front of the neck, which was crazy hot. It was so hot that the glue on the velcro dots melted off while I was wearing them.
Materials and Parts:





Wings:
- Natural feathers of different shapes and textures (these, these and these)
- wire (for the armature) (I used galvanized steel and copper, 16 and 22 gauge respectively)
- red felt to wrap the armature (from Blick)
- hot glue
Circuit:
- stranded wire
- micro-controller (Gemma M0)
- Neopixel Strand
- battery pack
- solder/tin
- heat shrink proofing
Circuit diagram

Arduino code
/* PulseSensor™ Starter Project http://www.pulsesensor.com
*
This an Arduino project. It's Best Way to Get Started with your PulseSensor™ & Arduino.
-------------------------------------------------------------
1) This shows a live human Heartbeat Pulse.
2) Live visualization in Arduino's Cool "Serial Plotter".
3) Blink an LED on each Heartbeat.
4) This is the direct Pulse Sensor's Signal.
5) A great first-step in troubleshooting your circuit and connections.
6) "Human-readable" code that is newbie friendly."
*/
//Initialize
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma, change to 1:
#define LED_PIN 1
// How many NeoPixels are attached to the Arduino?
#define TOTAL_LEDs 50
// NeoPixel brightness, 0 (min) to 255 (max)
#define BRIGHTNESS 50 // Set BRIGHTNESS to about 1/5 (max = 255)
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(TOTAL_LEDs, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(BRIGHTNESS);
}
void loop()
{
breathe(255, 0.008, 5);
}
void breathe(float MaximumBrightness, float SpeedFactor, float StepDelay)
{
// Make the lights breathe
for (int i = 0; i < 6000; i++) {
// Intensity will go from 10 - MaximumBrightness in a "breathing" manner
float intensity = MaximumBrightness /2.0 * (1.0 + sin(SpeedFactor * i));
strip.setBrightness(intensity);
// Now set every LED to that color
for (int ledNumber=0; ledNumber<TOTAL_LEDs; ledNumber++) {
strip.setPixelColor(ledNumber, 255, 0, 0);
}
strip.show();
//Wait a bit before continuing to breathe
delay(StepDelay);
}
}
In-progress images/sketches
Here are some images of my process!
I made the headpiece armature from galvanized steel…
…wrapped it in felt…
…wrapped the felt in the LED strand…
…checked light placement and tested the code to optimize it…
…started applying feathers…
…soldered my lights to my GEMMA M0…
… added velcro to close the collar…
… and finished adding the feathers!

















