Overview

If you know someone who loves electronics, this is an awesome gift box for them! In this guide, you will make a homemade box that plays music and lights up when it is shaken. Here is what you will need:

Adafruit GEMMA M0 - Miniature wearable electronic platform

PRODUCT ID: 3501
The Adafruit Gemma M0 is a super small microcontroller board, with just enough built-in to create many simple projects. It may look small and cute: round, about the...

Lithium Ion Polymer Battery - 3.7v 100mAh

PRODUCT ID: 1570
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...

Piezo Buzzer

PRODUCT ID: 160
Piezo buzzers are used for making beeps, tones and alerts. This one is petite but loud! Drive it with 3-30V peak-to-peak square wave. To use, connect one pin to ground (either one) and...

Medium Vibration Sensor Switch

PRODUCT ID: 2384
The "poor man's" accelerometer/motion sensor! These spring-vibration switches are medium sensitivity non-directional vibration induced trigger switches. Inside is...

Through-Hole Resistors - 10K ohm 5% 1/4W - Pack of 25

PRODUCT ID: 2784
ΩMG! You're not going to be able to resist these handy resistor packs! Well, axially, they do all of the resisting for you! This is a 25 Pack of...

Through-Hole Resistors - 220 ohm 5% 1/4W - Pack of 25

PRODUCT ID: 2780
ΩMG! You're not going to be able to resist these handy resistor packs! Well, axially, they do all of the resisting for you! This is a 25 Pack of 220Ω...
1 x Wire!
About a yard or two of wire
3 x Multi-Colored LEDs
Some LEDs for the blinky tree.
1 x Cardboard
A fairly sized piece of cardboard for making a box out of.
1 x Paint
Paint for the box. Can be any color. (Optional)
1 x Solder
Some solder for the components.
1 x Soldering Iron
For soldering the components
1 x Hot Glue Gun
Use to glue the box together + glue things to the box!

Step 1: Get a template

If you already have a box, skip the next 2 pages
adafruit_products_ChristmasBoxStep2.png
Choose your sizes

If you already have a box, you won't need this step, but if you don't, this is how to make one. First, head over to http://templatemaker.nl and find a box template that fits your creative imagination! There are a lot to choose from, but for this guide, I will be using the box-with-lid. It will give us space to put in our electronics, while also being easy to make. Choose the size. I chose a 6x3x6 inch box with a 6x1 inch lid. My clearance was 0.125. Choose download and click create.

Step 2: Print

adafruit_products_BoxTemplateAdobie.png
Image half on the page, Adobe Illustrator

Printing the image is one of the hardest parts because the image would be resized when you print it, or it won't fit on the page you are using. To do this, I used Adobe Illustrator and put the image into 2 tabloid-sized documents.

Here is how:

  1. Open the PDF in preview or whatever you open the image. Take the two slides and drag each one to your desktop
  2. Open the box bottom template in Illustrator and select all. Then go to edit-copy, or use the copy keybind.
  3. Open a new page (Command/Control-N), and make sure it's size is tabloid. 
  4. Paste (Command/Control-V), and make sure that the image is half on the sheet, as shown above.
  5. Go to File-Print (Command/Control-P) and click Page Setup. It should take you to a new window. Change the print size to letter and click OK. Then press print.
  6. Repeat step 5, but with the box template on the other side.
  7. Open your box top template into an image editor (Not Adobe Illustrator, something like Preview). 
  8. Print it on to a tabloid-sized sheet of paper

Whew! complicated. 

Step 3: Make the box

If you already have a box, you can skip these steps.

adafruit_products_IMG_4603.jpg

Step 1: Take the template papers you cut out and tape them together, so that it would look like one image (shown on the right). Then cut it out.

adafruit_products_CutToGif.gif

Step 2: Place your template on some cardboard and cut out the shape. First, score the cuts, then remove the paper, and make the scores deeper.

adafruit_products_ScoreToGif.gif

Step 3: Turn the cardboard over and score, which is cutting halfway through the cardboard, the folds (marked with - - - - on the template).

adafruit_products_GlueToGif.gif

Step 4: Take your Hot Glue Gun and glue the sides of your box together, as seen in the gif on the right. (You may have to click the image to see it.

adafruit_products_CutTopToGif.gif

Step 5: Cut out the template for the box top. Once again, ignore the flaps.

adafruit_products_CardboardTopToGif.gif

Step 6: Cut along the template you made on the cardboard.

adafruit_products_ScoreTopToGif.gif

Step 7: Score the folds like you did a few steps ago. Remember that the side you score on will be the outside of the box.

adafruit_products_GlueTopToGif.gif

Step 8: Glue the edges of the box together. This can be hard, so you may want to tape the parts together when it is drying.

adafruit_products_PaintToGif.gif

Step 9: Paint your box a solid color. I chose dark grey because it would make the lights of the tree show up well.

Step 4: Electronics

Now it's time to make the box work! Follow these steps carefully, and it should work. You will need:

  • 1x Gemma M0
  • 1x Lithium Ion Polymer Battery
  • 1x Piezo
  • 3x LEDs
  • 3x 220 Ω Resistor (Red, Red, Brown, Gold)
  • 1x 10k Ω Resistor (Brown, Black, Orange, Gold)
  • 1x Medium Vibration Sensor
  • 2 yards of insulated wire
  • Something to make holes with!

 

adafruit_products_PokeToGif.gif

Take the top of your box and poke holes where you want the LEDs to come through. Make sure that you use the tree to measure where you want the LEDs.

adafruit_products_PokeTreeToGif.gif

Put the tree on to the box, and poke holes through it so that the LEDs can go through. In other words, poke holes in the tree even to the holes you poked into the box.

adafruit_products_LedToGif.gif

Put the LEDs through the holes on the box top. make sure to mark which side is positive and which is negative. Because of our layout, please put the positive side of the LEDs on the right.

adafruit_products_GlueTreeToGif.gif

Warm up your hot-glue gun and put glue on the back of the tree. Place it carefully on the box, making sure the LEDs go through the holes.

adafruit_products_SolderResistorToGif.gif

Connect the positive wire on the LED to a 220 Ω resistor. Then, solder the two together.

adafruit_products_SolderLedWireToGif.gif

Connect the resistors together. If needed, solder a wire to one of them so it can be extended.

adafruit_products_SolderLedWireAllToGif.gif

Now, solder all of the resistors together. You may need a lot of solder to do so.

adafruit_products_SolderToLedWireToGif.gif

Cut a 1 ½ inch wire, and strip both ends. Then, connect one side to the resistors you just soldered. Touch your soldering iron to the solder joint you just made, and add your new wire to it.

adafruit_products_SolderLedWireToGemmaToGif.gif

Take the wire you just soldered and make a hook on  the other side. Attach that to pin D0 on the gemma, and solder it.

adafruit_products_SolderNegativeLed1ToGif.gif

Next, we are going to solder the negative sides of the LEDs to the gemma. Cut 3 1 inch piece of wire and strip it. Then, solder them to the negative side of the LEDs. 

adafruit_products_SolderNegativeLedTogetherToGif.gif

Solder the 3 wires together, as shown in the picture.

adafruit_products_SolderLedNegativeToGemma2ToGif.gif

Cut another 1 inch wire and solder it to the LED's negative wires. Then solder the wire to the Gemma's Gnd pin.

adafruit_products_SolderWireShakePositiveToGif.gif

Get your vibration sensor out and connect the copper wire to a 1 ½ inch wire as shown in the picture.

adafruit_products_SolderWireShakeWireNegitiveToGif.gif

Take out your 10k Ω resistor and cut a inch long wire and connect them both to the middle wire. Then, solder them together.

adafruit_products_SolderWireShakeToGemmaToGif.gif

Take the first wire you soldered to the sensor and connect it to the 3vo pin on your Gemma. Then, solder it on.

adafruit_products_SolderResistorShakeToGemmaToGif.gif

Solder the resistor to Gnd on the Gemma board.

adafruit_products_SolderWiteShakeTriggerToGemmaToGif.gif

Solder the last wire to D1 on the Gemma board.

adafruit_products_SolderPiezoGndToGif.gif

Now it's time to set up the music! Cut a 1 ½ inch long piece of wire and solder it to your already used Gnd pin. To do so, place the tip of the iron onto the Gnd pin, and place the new wire onto the solder joint. Take off the soldering iron, and the joint will be complete!

adafruit_products_SolderPiezoGnd2ToGif.gif

Connect the other side of the wire to any pin on the piezo and solder it on.

adafruit_products_SolderPiezoPositive2ToGif.gif

Take another wire, about the same size, and solder it onto the other pin on the piezo.

adafruit_products_SolderPiezoPositive3ToGif.gif

Take that wire and connect it to pin D2 on the Gemma M0. Then, solder it on.

You're done with the hardware! Now let's open up Arduino and start coding!

Step 5: The Code

Now let's get the board to work! Let's setup Arduino. If you don't already have the Gemma M0 board driver installed, check out this link:

After you have that installed, we need to put the Gemma M0 into Bootloader Mode. To do so, press the reset button twice, and the red LED should start flashing. Make sure that your board selection is right (tools-board-Gemma M0) and so is your port (tools-port), and then upload this code:

/*
 Interactive Gift Box
 When you shake the box, it will light up the tree and play music!
*/


int speakerPin = 2;
int buttonPin = 1;
int ledsPin = 0;
int length = 26;
int buttonState = 0;
char notes[] = "eeeeeeegcde fffffeeeeddedg";
int beats[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};

int tempo = 200;
void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}
void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}
void setup() {
  pinMode(speakerPin, OUTPUT);
  pinMode(ledsPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}
void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    digitalWrite(ledsPin, HIGH);
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo);
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
    
    delay(tempo / 2); 
  }
  digitalWrite(ledsPin, LOW);
  delay(1000);
  }
}

Press the upload arrow and the light on the board should turn purple! Hit it on the side, and it should light up and play music! Now you have an awesome gift box!

Have questions? Click the 'Feedback? Corrections?' link on the left.

Will this also work on other trinket boards like the Gemma?

Yes, but you might have to solder it differently and change the code.

Credits!

You may not know it, but there are some people behind the scenes who helped me get this guide up!

I'd like to thank Mr. Lady Ada (Phillip) and Kelly for letting me make a guide!

I'd also like to thank @Dan Halbert, @cater, and @nis for helping me get my Gemma M0 to work in the Adafruit Discord.

This guide was first published on Dec 22, 2017. It was last updated on Oct 12, 2018.