# Light of Your Life Wedding Bouquet

## Introduction

![](https://cdn-learn.adafruit.com/assets/assets/000/034/587/medium800/proximity_bouquet_and_boutonniere.jpg?1470416081)

She lights up the room when she walks in. &nbsp;Make sure everyone can see it. &nbsp;

Two Feather 32u4 Radio modules are hidden inside a bouquet and boutonniere along with a few discreet neopixels.&nbsp;

Using the radio signal strength measurements, the two Feathers can roughly determine how far apart they are. When the two get close together, the lights glow brighter, and when they separate the lights dim and flicker!

As she walks down the aisle, her bouquet will slowly increase in brightness until she's standing right by his&nbsp;side, and beaming.

This technique will work great for any two costume pieces as well. &nbsp;Find your partner&nbsp;at the after-dark party by following the brightness of your light-up hat or other accessory.

https://www.youtube.com/watch?v=m1-7b4rfg84&amp;feature=youtu.be

# Materials

- [Two Feather 32u4 RFM69HCW (I used 915MHz)](https://www.adafruit.com/product/3076)
- [Neopixels](https://www.adafruit.com/products/1559)
- [30awg stranded wire](https://www.adafruit.com/products/2051)
- [2 On/off switches](https://www.adafruit.com/products/1092)
- [2 Battery extension cables](https://www.adafruit.com/products/1131)
- 2 LiPoly batteries - one [350mAh](https://www.adafruit.com/products/2750)&nbsp;and&nbsp;one&nbsp;[1200mAh](https://www.adafruit.com/products/258)

### For Additional Lighting (optional)

- [Warm white LED strand](https://www.adafruit.com/products/893)
- [Glowby fiber optic barette](http://www.luminence.com/Glowbys-Glowbys.html)
- 2-3 resistors: 20-100ohm&nbsp;

### For the Bouquet

- Flowers (real or silk will work)
- Floral tape
- Ribbons & decorations
- Floral Pins

# Light of Your Life Wedding Bouquet

## Planning and Testing

![](https://cdn-learn.adafruit.com/assets/assets/000/034/591/medium800/proximity_testing.jpg?1470417972)

# Feather Setup

The hardware build for this project is fairly simple and straightforward. &nbsp;The software part is a little trickier and requires a bit of setup.

If you're a newbie to Arduino, [start with this guide](../../../../adafruit-arduino-ide-setup/arduino-1-dot-6-x-ide?view=all).

If you have never used a Feather, [start with this guide](../../../../adafruit-feather-32u4-radio-with-rfm69hcw-module).

If you're not comfortable installing libraries, [here's the guide for you.](../../../../adafruit-all-about-arduino-libraries-install-use)

Be sure you have the Feather boards set up&nbsp;and working (be sure you can run the "Blink" sketch) before proceeding.

![](https://cdn-learn.adafruit.com/assets/assets/000/034/581/medium800/proximity_neopixel_tester_gemma.jpg?1470263082)

# Pixel Testing Setup
Whenever you work with neopixels, testing at each step means you'll catch any shorts or mistakes early. &nbsp;Plus you get to see your lights come on right away which makes the whole process much more fun and satisfying.

My favorite way to test neopixels is using a [Gemma microcontroller](https://www.adafruit.com/products/1222) and some alligator clips. &nbsp;The Gemma is inexpensive and really easy to use for prototyping. &nbsp;You can test any combination of wires without soldering or mucking about with breadboards and headers. &nbsp;

You'll need to make sure you have Adafruit's board support&nbsp;installed as well as the [Adafruit Neopixel library](../../../../adafruit-neopixel-uberguide/arduino-library-installation).

Plug your Gemma in to your computer using its USB port. &nbsp;Open your Arduino IDE and select Adafruit Gemma from your Boards menu.

Go to&nbsp;File \> Examples \> Adafruit\_Neopixel \> strandtest&nbsp;and open the strandtest&nbsp;code. &nbsp;Find this line at the top:

```auto
#define PIN 6
```

Change **PIN** to **1** instead of 6.

Press the Reset button on the Gemma to get it into bootloader mode, and then immediately press the upload button in Arduino to upload the code.

Then, get your alligator clips out and hook them up thusly:

The clips' colors will correspond to the wire colors used in the rest of this project. &nbsp; You can power&nbsp;the Gemma from the USB port or plug a battery in to the JST connector. &nbsp;As you're soldering pixels together, hook each one up to the Gemma to be sure it comes on and shows all the colors.

**Tip: if testing NeoPixels on a “live” circuit, _always_ connect the ground (black) wire first, and disconnect it last.&nbsp;**There's a small chance of damaging a NeoPixel otherwise.

![](https://cdn-learn.adafruit.com/assets/assets/000/034/590/medium800/proximity_calla_lilies.jpg?1470417770)

# Flower Setup

If you're working with silk or latex flowers, your job is easy. &nbsp;Choose the ones you like. &nbsp;Remember that silk flowers go "out of season" at local craft stores just like real flowers do, so give yourself time to order online if you want specific flowers.&nbsp;

A good search term is "Real Nature Touch" -- these are good quality latex flowers that feel and look almost like the real thing.

I used real flowers, but still picked up a few latex ones just to experiment on.

Calla lilies are wonderful at hiding neopixels. &nbsp;I ordered my flowers from [CalCallas.com](http://www.calcallas.com/). &nbsp;Plan to have your flowers delivered a couple days before your event -- fresh, quality flowers will open up just a little more in those last few days and your bouquet will be at its peak. &nbsp;And remember, you don't want to be rushing to finish it on the day of the wedding. &nbsp;

I ordered over the phone and they put together a custom 20-flower order&nbsp;for me with Picaso purple, white and yellow flowers, for a lot less money than ordering a pre-assembled bouquet. &nbsp;My finished bouquet had 17 flowers, leaving one for the boutonniere and two for a Mother-of-the-Groom boutonniere.

# Light of Your Life Wedding Bouquet

## Wiring Diagram

You will be assembling two _nearly_-identical circuits.

**The jumper wire (shown in orange) between pins 9 and 10 should be installed on only ONE of the two boards!**&nbsp;It won't work any other way. This distinguishes the "transmitter" board from the "receiver" board.

The **green wire** is an **antenna** …required on both boards…it needs to be&nbsp;a specific length,&nbsp;explained further on the next page…

![](https://cdn-learn.adafruit.com/assets/assets/000/035/378/medium800/proximity_bouquet-diagram.png?1472844991)

# Light of Your Life Wedding Bouquet

## Feather & Neopixel Assembly

Cut two&nbsp;lengths of green wire to 3 inches exactly, and solder it into the ANT pin on each of your Feather boards.

[More about antenna options](../../../../adafruit-feather-32u4-radio-with-rfm69hcw-module/antenna-options)

![proximity_feather_antenna.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/595/medium640/proximity_feather_antenna.jpg?1470419024)

Get out two neopixels and solder a red wire to +, a black wire to -, and a white wire to "in". &nbsp;Test the pixels with your Gemma tester to make sure they come on and light up in all the colors. &nbsp;

![proximity_neopixel.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/596/medium640/proximity_neopixel.jpg?1470419170)

Solder each neopixel to a feather board:

- Red wire to BAT
- Black wire to G
- White wire to 6

![proximity_feather_no_jumper.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/597/medium640/proximity_feather_no_jumper.jpg?1470419291)

On ONE of the feather boards, add a small jumper wire in pins 9-10. &nbsp;This jumper will be referenced in the code to tell the two boards apart (transmitter vs receiver).

![proximity_feather_jumper.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/598/medium640/proximity_feather_jumper.jpg?1470419357)

Once your soldering is done and all your connections are clean, it's time to upload the code to the board and refine your variables.

# Light of Your Life Wedding Bouquet

## Software

Start by installing these libraries in your Arduino IDE:

[RFM69 Library (Adafruit version)](https://github.com/adafruit/RFM69)
[FastLED Library](https://github.com/FastLED/FastLED/releases/tag/v3.1.0)
You can also install FastLED directly within the Arduino IDE (Sketch \> Include Library \> Manage Libraries...)&nbsp;

Got everything installed? &nbsp;Grab the code below and paste it into the Arduino IDE. If you have issues [check out the Feather 32u4 HELP page](../../../../adafruit-feather-32u4-basic-proto/faq)

```auto
// Distance meter using the RSSI function of two RFM69 radios.
// This is a very VERY "ish" gauge of *relative* distance (not actual units
// like feet or meters or anything), and is prone to interference from
// walls, bodies, direction and the like...it's intended for an artistic
// presentation, nothing scientific.

#include <RFM69.h> // get it here: https://www.github.com/lowpowerlab/rfm69
#include <SPI.h>
#include "FastLED.h"

// RADIO HARDWARE CONFIG ---------------------------------------------------

#define TX_NODE_ID   1
#define RX_NODE_ID   2
#define NETWORK_ID 100 // The same on all nodes that talk to each other
#define ENCRYPTKEY "sampleEncryptKey" // Same 16 characters on all nodes!

// Match frequency to the hardware version of the radio on your Feather:
//#define FREQUENCY   RF69_433MHZ
//#define FREQUENCY   RF69_868MHZ
#define FREQUENCY   RF69_915MHZ
#define IS_RFM69HCW true // Set true if using RFM69HCW module

// RFM69 pins on Feather 32U4 board:
#define RFM69_CS   8
#define RFM69_IRQ  7
#define RFM69_IRQN 4
#define RFM69_RST  4

// A jumper across two pins selects whether this board is the
// TRANSMITTER or the RECEIVER.  That way the SAME code can be uploaded
// to BOTH boards.  I got tired of having to comment out or enable a
// line every time I uploaded to one or the other.
#define TX_SENSE_1  9
#define TX_SENSE_2 10

RFM69 radio(RFM69_CS, RFM69_IRQ, IS_RFM69HCW, RFM69_IRQN);
bool  isTransmitter;

// SIGNAL FILTERING CONFIG -------------------------------------------------

#define MEDIAN_SIZE  5 // Number of RSSI readings to be median filtered
#define AVERAGE_SIZE 8 // Number of median results to be averaged

// Signal values are stored as abs(RSSI), hence the positive values here:
#define SIGNAL_MIN   26 // abs() of signal strength at closest distance
#define SIGNAL_MAX  100 // " furthest distance
#define SIGNAL_INIT  ((SIGNAL_MAX + SIGNAL_MIN) / 2 - SIGNAL_MIN)
uint8_t  medianBuf[MEDIAN_SIZE],   // Prior abs(RSSI) readings
         averageBuf[AVERAGE_SIZE], // Prior medians
         medianIdx  = 0,           // Current position in medianBuf[]
         averageIdx = 0;           // Current position in averageBuf[]
uint32_t sum        = SIGNAL_INIT * AVERAGE_SIZE + (AVERAGE_SIZE / 2);

// DISPLAY CONFIG ----------------------------------------------------------

#define LED_TYPE    WS2812
#define DATA_PIN  6      // NeoPixels are connected to this pin
#define NUM_LEDS 20      // How many leds in your strip?
CRGB leds[NUM_LEDS];     //create your NeoPixel array
#define COLOR_ORDER GRB

int led = 13;
uint8_t average = 10;    
uint8_t distance = 15;   // Play with this number to affect the range

CRGBPalette16 currentPalette;
TBlendType    currentBlending;

int HUE = 60;            
int SATURATION = 255;          
int BRIGHTNESS = 255;   

#define FPS 25 // Animation rate (frames per second)

// SETUP FUNCTION - runs once at startup -----------------------------------

void setup() {
   // pinMode(led, OUTPUT);      // Turns the onboard LED on -- useful for testing.
   // digitalWrite(led, HIGH);   // Comment out these two lines if you want it off while running
 
  // Un-comment these 3 lines to refine your signal variables -----------
  // while (!Serial) {}
  // Serial.begin(9600);
  // Serial.println("hello");

  // Set up jumper detect on TX_SENSE pins
  pinMode(TX_SENSE_2, OUTPUT);
  digitalWrite(TX_SENSE_2, LOW);
  pinMode(TX_SENSE_1, INPUT_PULLUP);

  // Reset the RFM module:
  pinMode(RFM69_RST, OUTPUT);
  digitalWrite(RFM69_RST, HIGH);
  delay(100);
  digitalWrite(RFM69_RST, LOW);
  delay(100);

  // Test for jumper on TX_SENSE pins
  isTransmitter = digitalRead(TX_SENSE_1);

  // Initialize radio:
  radio.initialize(FREQUENCY, isTransmitter ? TX_NODE_ID : RX_NODE_ID, NETWORK_ID);
  if(IS_RFM69HCW) radio.setHighPower(); // Only for RFM69HCW & HW!
  radio.setPowerLevel(31); // Output range 0 (5dBm) to 31 (20dBm)
  radio.encrypt(ENCRYPTKEY);

  memset(medianBuf , SIGNAL_INIT, sizeof(medianBuf));
  memset(averageBuf, SIGNAL_INIT, sizeof(averageBuf));

  // Set up a timer interrupt for LED animation.  This ensures uniform
  // timing for animation while radio ACK time may be unpredictable.
  // THIS CODE IS SPECIFIC TO ATMEGA32U4; will not run on M0, Teensy3, etc.
  TCCR1A = _BV(WGM11) | _BV(WGM10);                         // Fast PWM mode
  TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11) | _BV(CS10); // 1:64 prescale
  OCR1A  = ((F_CPU / 64) / FPS) - 1;
  TIMSK1 = _BV(TOIE1); // Enable overflow interrupt on Timer/Counter 1

   // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE, DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS)
    .setCorrection(TypicalLEDStrip)
    .setDither(BRIGHTNESS < 255);
  currentBlending = LINEARBLEND;
}

// LOOP FUNCTION - runs repeatedly -----------------------------------------

void loop() {
  if(isTransmitter) {
    // Send a small message to the receiver node...
    radio.sendWithRetry(RX_NODE_ID, "<3", 2);
  } else {
    // Receiver waits for message, sends acknowledgement.
    // The ACK is needed to gauge distance on BOTH ends.
    radio.receiveDone();
    if(radio.ACKRequested()) radio.sendACK();
  }

  if(radio.RSSI) { // Got signal strength?
    uint16_t s = abs(radio.RSSI);
    if(s < SIGNAL_MIN)      s = SIGNAL_MIN;
    else if(s > SIGNAL_MAX) s = SIGNAL_MAX;
    s -= SIGNAL_MIN; // s is now 0 to (MAX-MIN)

    medianBuf[medianIdx] = s; // Store new value in median buffer
    if(++medianIdx >= MEDIAN_SIZE) medianIdx = 0;

    // Median filter discards 'outliers,' the most spurious readings;
    // abrupt changes that are possibly inaccurate.

    // Make a sorted copy of median buffer to find actual current median
    // without disturbing original values.  Since it's just a few elements,
    // a crude insertion sort is done...
    uint8_t m[MEDIAN_SIZE], median, average, i, j, k;
    memcpy(m, medianBuf, sizeof(m));
    for(i=1; i<MEDIAN_SIZE; i++) {
      k = m[i];
      for(j=i; j && (m[j-1] > k); j--) m[j] = m[j-1];
      m[j] = k;
    }
    median = m[MEDIAN_SIZE / 2];

    // Following median, the average of prior results is taken,
    // further smoothing out any jumpy bits...
    sum                   -= averageBuf[averageIdx];
    averageBuf[averageIdx] = median;
    sum                   += median;
    if(++averageIdx >= AVERAGE_SIZE) averageIdx = 0;

    average = sum / AVERAGE_SIZE;

    // 'average' is the signal strength from the radio...
    // it'll likely be between 0 (closest) and 75 or so
    // (furthest...like, down the block). 
    
    // UNCOMMENT THESE SERIAL COMMANDS to see what your radios are sending while the Feather is plugged in via USB
    //Serial.print("Average  ");
    //Serial.println(average);
    //Serial.print("Adjusted  ");
    //Serial.println(300-(average*distance));
    //Serial.print("Brightness  ");
    //Serial.println(constrain(map ((300-(average*distance)),-400,300,0,255),10,255));

    //This line is your main calculation.  It's taking "average" (your radio signal, averaged out for smoothness) and 
    //mutliplying it by "distance" (currently set at 15, but play with that number to change the range),
    //and then constraining it between a brightness of 10 (dimmest setting) and 255 (brightest setting).
 
    BRIGHTNESS=(constrain(map ((300-(average*distance)),-400,300,0,255),10,255));
  }
}

ISR(TIMER1_OVF_vect) { // Timer 1 interrupt for animation
  // Display *prior* frame of data at start of interrupt -- this ensures
  // uniform timing for effects that may have variable processing times.
   FastLED.show();

  // Render one frame of animation here...pick one function, comment out other
  Solid();
  //Colors();
}

void Solid()  // all one color, currently set to yellow by the HUE variable
{
   fill_solid(leds, NUM_LEDS, CHSV(HUE, SATURATION, BRIGHTNESS)); 
}

void Colors()  // I matched each LED to the color of its corresponding flower
{ 
  for(int yell = 0 ; yell < 3; yell++ ) { //LEDs 1-3 are Yellow (HUE 60)
    leds[yell] = CHSV(60, SATURATION, BRIGHTNESS);
  }
  for (int wht = 3 ; wht < 9; wht++ ) {  //LEDs 4-9 are White (saturation 100)
    leds[wht] = CHSV(60, 100, BRIGHTNESS);
  }
  for (int pur = 9 ; pur < 19; pur++ ) {  //LEDs 10-19 are Purple (hue 200)
    leds[pur] = CHSV(200, 255, BRIGHTNESS);
  }
}
```

# Testing & Tweaking your Code

Your environment or particular antenna may be different from mine. &nbsp;Try uploading the code as-is and watch the behavior of the LEDs as you move them closer and further apart. &nbsp;Blocking the signal with your body will also change your results, as will walls, trees, or excited grandmothers. &nbsp;

### Variables to Play With

Change the "distance" variable up or down to play with the range over which the brightness changes.

If they don't seem as responsive as you'd like,&nbsp;try changing the MEDIAN\_SIZE and AVERAGE\_SIZE values.

Look for "serial" commands in the code (currently all commented out). &nbsp;If your LEDs aren't performing the way you want, uncomment these lines to watch what's happening with your numbers in your serial monitor. &nbsp; Just be sure to comment them out again or your boards won't work without being plugged in.

Give the&nbsp;HUE and SATURATION variables a number between 0 and 255 to choose your LED color. &nbsp;Or choose multiple colors by using "Colors();" instead of "Solid();"&nbsp;and assigning different colors to different pixels.&nbsp;

 **Make sure the two boards are working and communicating before continuing.&nbsp;** If no lights come on…aside from the usual checking for electrical shorts, etc., make sure you have the jumper wire installed between pins 9 and 10 on just **one** of the two boards.

# Light of Your Life Wedding Bouquet

## Additional Lighting Assembly

# On/Off Switch
**At the time this guide was being written, it was necessary to cobble together two pieces to create a battery switch. [We now have a JST extension cable with built-in switch!](https://www.adafruit.com/products/3064)&nbsp;If using the newer part, you can skip ahead to the “More Lights” section below.** Otherwise,&nbsp;if&nbsp;you already have these components in your stash, or want something ever-so-slightly smaller, here's how the two-part solution was made:

A small battery switch is made from our [Tactile On/Off Switch with Leads](https://www.adafruit.com/products/1092) and a [JST-PH Battery Extension Cable](https://www.adafruit.com/products/1131).

Trim the leads on your tactile on/off switches to around 2 inches.

Cut both ends from your battery extension&nbsp;cables, with about 1 inch of wire attached. &nbsp;Solder the ground (black) wires together. &nbsp;Solder the switch in between the two power (red) wires. &nbsp;This will plug into your battery and directly into the Feather. Insulate the solder connections with heat-shrink tubing to prevent electrical shorts.

You'll need two of these; one each for the&nbsp;bouquet and boutonniere.

![proximity_on_off_switch.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/600/medium640/proximity_on_off_switch.jpg?1470421563)

![proximity_battery_switch.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/602/medium640/proximity_battery_switch.jpg?1470421762)

# More&nbsp;Lights

Now it's time to add more neopixels, fiber optics, and light strands to make your bouquet into something truly magical.

A good design has texture and variation. &nbsp;I wanted three separate types of lighting in my final bouquet, so I added a modified glowby hair barette for fiber optics and a warm white LED strand. &nbsp;

For my bouquet, I used 17 neopixels, a fiber optic glowby and a warm whie LED strand. &nbsp;

For my boutonniere I used just one neopixel and a fiber optic glowby.

![](https://cdn-learn.adafruit.com/assets/assets/000/034/599/medium800/proximity_neopixel_strand.jpg?1470420950)

# String your Neopixels

Here's a silly video showing my favorite technique for making a neopixel strand. &nbsp;Remember to leave enough wire between each pixel to thread into the flower and back out again -- for calla lilies, 6-8 inches of wire seemed to be about right.

https://www.youtube.com/watch?v=5r3g65XpdAA

# Fiber Optics & Warm White LEDs

One option is to&nbsp;keep the build simple and just add these elements in as they are, and use the coin cell batteries to power them. &nbsp;But with a little more soldering and a couple resistors, you can hook them up to the same battery and on/off switch as the Feather and neopixels. &nbsp;That way the bride and groom just have one button to think about, instead of having to fiddle with three separate switches.

### Glowbys
Open the glowby and straighten out the two LED leads. &nbsp;Cut off any extraneous plastic.&nbsp;

&nbsp;

Be sure you know which is the positive and which is the negative lead (test it with a coin cell battery). &nbsp;

&nbsp;

Solder a resistor onto your positive lead. &nbsp;I used a 33 ohm resistor, which gave me maximum brightness without blowing out the LED. &nbsp;Test and be sure it's working with your Gemma tester.

![proximity_glowby_1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/603/medium640/proximity_glowby_1.jpg?1470422021)

![proximity_gowby_2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/604/medium640/proximity_gowby_2.jpg?1470422034)

![proximity_glowby_3.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/605/medium640/proximity_glowby_3.jpg?1470422049)

### Warm White LEDs
Cut the battery pack off the warm white LED strand (cut one wire at a time to avoid damaging your lights). &nbsp;Scrape the wires with a utility knife to remove the clear coating.

&nbsp;

Use a coin cell battery to determine which is the + and which is the - lead. &nbsp;

&nbsp;

Solder a resistor onto one of the leads. &nbsp;Experiment to find the right brightness. &nbsp;I found that a 33 ohm resistor was just right to balance the neopixels.

![proximity_white_1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/606/medium640/proximity_white_1.jpg?1470422399)

![proximity_white_2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/607/medium640/proximity_white_2.jpg?1470422405)

![proximity_white_3.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/608/medium640/proximity_white_3.jpg?1470422418)

### Putting it All Together
Carefully un-solder the red and black neopixel wires from your Feather boards.

&nbsp;

Twist all three power wires and all three ground wires together.

&nbsp;

Solder the combined power wires into BAT on the feather, and the combined ground wires into G.

![proximity_all_lights_1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/609/medium640/proximity_all_lights_1.jpg?1470422756)

![proximity_all_lights_2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/610/medium640/proximity_all_lights_2.jpg?1470422771)

# Light of Your Life Wedding Bouquet

## Build the Boutonniere

![](https://cdn-learn.adafruit.com/assets/assets/000/034/612/medium800/proximity_boutonniere_finished.jpg?1470429840)

Time to play with flowers! &nbsp;Get out your floral tape and wrap your neopixel, wires, and fiber optics like a mummy.

&nbsp;

Floral tape is wonderful stuff. &nbsp;It sticks to itself without being sticky, and lets the light shine through beautifully while covering up the black electronics. &nbsp;

![proximity_floral_tape.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/613/medium640/proximity_floral_tape.jpg?1470429880)

Info: 

I may just use floral tape in every electronics project ever from now on.

Slide your neopixel inside your main flower. &nbsp;Choose a couple more flowers and tape them all together.

&nbsp;

Tape the battery and the feather to the stems, with the USB port at the bottom.

&nbsp;

Wrap all the wires neatly, with the USB port available for charging, the switch available for switching, and the green antenna wire coming out the top.

![proximity_boutonniere_1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/614/medium640/proximity_boutonniere_1.jpg?1470430070)

![proximity_boutonniere_2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/615/medium640/proximity_boutonniere_2.jpg?1470430082)

![proximity_boutonniere_3.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/616/medium640/proximity_boutonniere_3.jpg?1470430100)

If you're making this a few days ahead of time, leave the flower stems extra long so you can keep it in a vase of water without submerging the electronics.

Finish by wrapping the base with ribbon to cover the floral tape.

![](https://cdn-learn.adafruit.com/assets/assets/000/034/623/medium800/proximity_buttonniere.jpg?1470431934)

# Light of Your Life Wedding Bouquet

## Build the Bouquet

![](https://cdn-learn.adafruit.com/assets/assets/000/034/617/medium800/proximity_bouquet_done.jpg?1470431416)

Wrap the neopixels and any other wiring in floral tape.

&nbsp;

Arrange the flowers the way you want them,&nbsp;and slip the neopixels inside each one. &nbsp;This is a good time to go back to your code and reorganize the colors of each pixel so it complements its flower.

![proximity_bouquet_1.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/618/medium640/proximity_bouquet_1.jpg?1470431442)

![proximity_bouquet_2.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/619/medium640/proximity_bouquet_2.jpg?1470431462)

Wrap floral tape around your battery and feather board, with the switch and antenna coming out the top and the USB port accessible at the bottom.

&nbsp;

Add in any additional flowers, leaves, or accents and arrange the fiber optics between the flowers.&nbsp;

![proximity_bouquet_3.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/620/medium640/proximity_bouquet_3.jpg?1470431606)

![proximity_bouquet_4.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/621/medium640/proximity_bouquet_4.jpg?1470431622)

Tape the electronics to the flower stems. &nbsp;Finish by weaving the the LED strand through the stems and flowers, and wrap the whole thing in pretty ribbon to cover the floral tape. &nbsp;

![proximity_bouquet_5.jpg](https://cdn-learn.adafruit.com/assets/assets/000/034/622/medium640/proximity_bouquet_5.jpg?1470431737)

Danger: 

To charge the batteries, **be sure the bouquet is switched ON** , then plug in the USB cable. &nbsp;(It won't charge if it's turned off)

Let them charge **completely** before the wedding. &nbsp;Overnight is good. Also bring a spare battery for each, and some floral tape and ribbon and pins for emergency repairs. &nbsp;Murphy's Law holds extra power&nbsp;on your wedding day, and&nbsp;you don't want to find that the batteries didn't charge and the whole shebang doesn't work.

![](https://cdn-learn.adafruit.com/assets/assets/000/034/624/medium800/proximity_daveandtia.jpg?1470432006 Congratulations to Dave and Tia!)


## Featured Products

### Adafruit Feather 32u4 RFM69HCW Packet Radio - 868 or 915 MHz

[Adafruit Feather 32u4 RFM69HCW Packet Radio - 868 or 915 MHz](https://www.adafruit.com/product/3076)
This is the&nbsp;**Adafruit Feather 32u4 Radio (RFM69HCW)**&nbsp; **900MHz****. **We call these _RadioFruits** ,**_ our take on an microcontroller packet radio transceiver with built in USB and battery charging. Its an Adafruit Feather...

In Stock
[Buy Now](https://www.adafruit.com/product/3076)
[Related Guides to the Product](https://learn.adafruit.com/products/3076/guides)
### Flora RGB Smart NeoPixel version 3 - Sheet of 20

[Flora RGB Smart NeoPixel version 3 - Sheet of 20](https://www.adafruit.com/product/1559)
So, you want lots and lots of NeoPixels? And you want them for less? Not a problem! Here's a sheet of Flora NeoPixels fresh from the (reflow) oven. Cut them off as you need 'em and save a pretty penny while you're at it.  
  
**Each order comes with 20 pixels on a...**

In Stock
[Buy Now](https://www.adafruit.com/product/1559)
[Related Guides to the Product](https://learn.adafruit.com/products/1559/guides)
### Flora RGB Smart NeoPixel version 3 - Pack of 4

[Flora RGB Smart NeoPixel version 3 - Pack of 4](https://www.adafruit.com/product/1260)
What's a wearable project without LEDs? Our favorite part of the Flora platform is these tiny smart pixels. Designed specifically for wearables, these updated Flora NeoPixels have ultra-cool technology: these ultra-bright LEDs have a constant-current driver cooked right into the LED...

In Stock
[Buy Now](https://www.adafruit.com/product/1260)
[Related Guides to the Product](https://learn.adafruit.com/products/1260/guides)
### Silicone Cover Stranded-Core Wire - 30AWG in Various Colors

[Silicone Cover Stranded-Core Wire - 30AWG in Various Colors](https://www.adafruit.com/product/2051)
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/2051)
[Related Guides to the Product](https://learn.adafruit.com/products/2051/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 1200mAh

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

In Stock
[Buy Now](https://www.adafruit.com/product/258)
[Related Guides to the Product](https://learn.adafruit.com/products/258/guides)
### Lithium Ion Polymer Battery - 3.7V 350mAh

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

In Stock
[Buy Now](https://www.adafruit.com/product/2750)
[Related Guides to the Product](https://learn.adafruit.com/products/2750/guides)
### Wire Light LED Strand - 10 Warm White LEDs + Coin Cell Holder

[Wire Light LED Strand - 10 Warm White LEDs + Coin Cell Holder](https://www.adafruit.com/product/893)
Add sparkle to your project with these lovely silver wire LED strands. These strands are very interesting, they use two silver wires that are coated so they don't short if they touch, then tiny 1000mcd LEDs are bonded onto the wires and coated with epoxy. The result is a very flexible...

No Longer Stocked
[Buy Now](https://www.adafruit.com/product/893)
[Related Guides to the Product](https://learn.adafruit.com/products/893/guides)

## Related Guides

- [NeoPixie Dust Bag](https://learn.adafruit.com/neopixel-pixie-dust-bag.md)
- [LED Masquerade Masks](https://learn.adafruit.com/led-masquerade-masks.md)
- [Adafruit NeoPixel Überguide](https://learn.adafruit.com/adafruit-neopixel-uberguide.md)
- [Build your own Borg (BYOB)](https://learn.adafruit.com/build-your-own-borg-byob.md)
- [Sparkle Skirt Playground](https://learn.adafruit.com/sparkle-skirt-playground.md)
- [Unibeam](https://learn.adafruit.com/unibeam.md)
- [Adafruit Feather 32u4 Radio with RFM69HCW Module](https://learn.adafruit.com/adafruit-feather-32u4-radio-with-rfm69hcw-module.md)
- [NeoPixel Coat Buttons](https://learn.adafruit.com/neopixel-coat-buttons.md)
- [Light-Activated Pixel Heart](https://learn.adafruit.com/light-activated-pixel-heart.md)
- [Pac Man Pixel Suspenders](https://learn.adafruit.com/pac-man-pixel-suspenders.md)
- [Textile Potentiometer Hoodie](https://learn.adafruit.com/textile-potentiometer-hoodie.md)
- [NeoPixels on Raspberry Pi](https://learn.adafruit.com/neopixels-on-raspberry-pi.md)
- [2014 Halloween 3D Printed Projects Roundup](https://learn.adafruit.com/2014-halloween-3d-printed-projects-roundup.md)
- [Washing Wearable Electronics](https://learn.adafruit.com/washing-wearable-electronics.md)
- [3d Printed Neopixel Tactile Switch Buttons](https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons.md)
