3d Printed Neopixel Tactile Switch Buttons

Similar documents
Alohamora Bottle. Created by Erin St Blaine. Last updated on :58:53 PM UTC

Galaxy Pendant. Created by Erin St Blaine. Last updated on :44:15 PM UTC

Bunny Ears with MakeCode

LED Campfire. Created by Erin St Blaine. Last updated on :34:11 PM UTC

3D Printed Camera LED Ring

Neon LED Signs. Created by John Park. Last updated on :11:09 PM UTC

Interior Purse Light. Created by Becky Stern. Last updated on :41:08 PM UTC

Feather Weather Lamp. Created by Ruiz Brothers. Last updated on :54:26 PM UTC

Simple LED Unicorn Horn

Tent Lantern. Created by Timothy Reese. Last updated on :17:25 AM UTC

Adafruit LED Sequins. Created by Becky Stern. Last updated on :02:00 AM UTC

Glowing Viking Rune wayfinder

Glowing Neopixel Resin River Table

Sewable NeoPixels. Created by Becky Stern. Last updated on :50:14 PM EDT

Celebration Spectacles

Adafruit TPL5110 Power Timer Breakout

NeoPixel Ring Bangle Bracelet

NeoPixel Fairy Crown. Created by Erin St Blaine. Last updated on :22:47 AM UTC

Portable Apple Watch Charger

NeoPixie Dust Bag with Circuit Playground Express

Bluetooth Controlled NeoPixel Headphones

Adafruit LED Sequins. Created by Becky Stern. Last updated on :00:06 PM EST

Infinity Mirror Valentine's Candy Box

Circuit Playground Digital Input

Arduino Lesson 6. Digital Inputs

Lie Ren's Stormflower Gun Blade

Unicorn Hat with Moving Ears

Adafruit TPL5111 Reset Enable Timer Breakout

NeoPixel LED Cortana Costume

NeoPixel Bike Light. Created by Ruiz Brothers. Last updated on :43:46 PM UTC

3D Printed LED Goggles

Light-Up Angler Fish Embroidery

Adafruit Color Sensors

Guardian Shield+ Zelda Breath of the Wild

Jewel Hair Stick. Created by Leslie Birch. Last updated on :47:17 PM UTC

Trinket NeoPixel LED Longboard

Interactive Gift Box. Created by codingpro. Last updated on :47:40 AM UTC

3D Printed LED Knuckle Jewelry

3D Printed LED Buckle

LED Stego Flex Spike Hoodie

NeoPixel Basketball Hoop

Remote Controlled LED Tea Light Sconce

Clockwork Goggles. Created by John Park. Last updated on :03:10 PM UTC

Chirping Plush Owl Toy

Flora Brake Light Backpack

Phone-Activated Talking Dog Collar

Coffee Detonator: The TNT Plunger Grinder

NeoMatrix 8x8 Word Clock

ISS Pin. Created by Leslie Birch. Last updated on :27:30 PM UTC

Mystical LED Halloween Hood

Adabot Operation Game

FLORA and GEMMA ICSP. Created by Becky Stern. Last updated on :42:16 PM UTC

NeoPixel Manicure. Created by Sophy Wong. Last updated on :50:38 PM UTC

GPS Logging Dog Harness

Circuit Playground Yoyo

Bike Wheel POV Display

Morning Star POV Double Staffs

Con Badge with Circuit Playground Express

PyPortal NeoPixel Color Picker Created by Kattni Rembor. Last updated on :42:41 PM UTC

Sword & Wand Prop Effects with Circuit Playground

Mad Science Test Tube Rack

Getting Started with FLORA

FLORA TV-B-Gone. Created by Becky Stern. Last updated on :32:57 PM UTC

i2c/spi LCD Backpack Created by lady ada Last updated on :11:04 PM UTC

Trellis 3D Printed Enclosure

Crawling Animatronic Hand

Learning with LEDs. Created by Rick Winscot. Last updated on :39:11 PM UTC

Snake Charmer Box. Created by Dano Wall. Last updated on :07:25 PM UTC

Trinket-Powered Conference Room Occupancy Display

Adafruit PCF8523 Real Time Clock

Adafruit IO Basics: Digital Input

'Sup Brows. Created by Kate Hartman. Last updated on :52:04 PM UTC

Adafruit Feather 32u4 Basic Proto

Magical Mistletoe. Created by Leslie Birch. Last updated on :45:29 PM UTC

Toy Car Speed Timer. Created by Kirby Griese. Last updated on :13:49 PM UTC

Getting Started with FLORA

NeoPixel Punk Collar. Created by Becky Stern. Last updated on :41:18 PM UTC

LED Lightbox. Created by Sam Clippinger. Last updated on :50:00 AM UTC

Crickit Dancing Marionette Kit Created by Dano Wall. Last updated on :03:11 PM UTC

No-Sew LED Wristband. Created by Kathy Ceceri. Last updated on :23:40 PM UTC

Ping Pong Ball Launcher

FLORA and GEMMA ICSP. Created by Becky Stern. Last updated on :30:55 PM EST

Adafruit MMA8451 Accelerometer Breakout

FeatherWing Proto, Doubler and Tripler

Pushrod Garage. Created by John Park. Last updated on :07:30 PM UTC

Naughty or Nice Machine

Camera LED Ring Light

Cyberpunk Spikes. Created by Becky Stern. Last updated on :07:06 PM UTC

TRON Bag. Created by Becky Stern

Adafruit APDS9960 breakout

Slider Crank Mechanism -- from Cardboard and Craft Sticks

Crawling Baby Sea Turtle Robot

Adafruit Prototyping Pi Plate. Created by Ladyada

3D Printed Google AIY Voice Kit

Secret Hollow Book Intrusion Detector

Adafruit Si7021 Temperature + Humidity Sensor

Hammer Time Mini Golf Hazard with Crickit

3D Printed Case for Adafruit Feather

MCP Bit DAC Tutorial

Android GBoard Morse Code Control with Circuit Playground Express

Transcription:

3d Printed Neopixel Tactile Switch Buttons Created by Erin St Blaine Last updated on 2017-06-16 06:05:01 PM UTC

Guide Contents Guide Contents Introduction Materials Tools 3d Printing Testing Setup If this is your first time using Arduino Wiring it Up Switch Wiring Neopixel Wiring Install Buttons Make them Do Stuff Sample Code Install the FastLED Library 2 3 3 3 4 6 6 8 8 9 12 17 17 18 Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 2 of 21

Introduction Control your wearable project in style with low-profile, clothing-friendly illuminated push buttons. These buttons make it easy to control LED brightness, change pattern modes, play sounds, or whatever you can dream up. They're appealing and clicky, adding a fun element of interactivity to any wearable project, and they're small and low-profile enough for even a tight top or pants button. Check out this fully finished hoodie project (http://adafru.it/xar) using these buttons! Materials Flora RGB Smart NeoPixel version 2 (http://adafru.it/1260) (one per button) 6mm Momentary switch (http://adafru.it/367) (one per button) 30awg wire in various colors (http://adafru.it/ekf) Microcontroller of your choice -- I'm using a Gemma (http://adafru.it/1222) for testing and a Metro Mini (http://adafru.it/2590) for my finished project 3d printer (optional) Button cover (or 3d print your own) Tools Soldering iron & accessories E6000 or other mighty strong glue Needle & thread Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 3 of 21

3d Printing There are two pieces to this button: the button cover and the backing which holds the neopixel and switch. I've uploaded a plain version of my button cover as well as a version with an "om" symbol etched into the top. However, you don't need to use the 3d printed button -- jewels, bakelite, plastic, or even coated metal will work just fine. Play with some different ideas to discover what you like. Download files from Thingiverse http://adafru.it/oaf If you don't have a 3d printer you can order the buttons from Shapeways (button Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 4 of 21

front (Om) (http://adafru.it/pfr) or button front (smooth) (http://adafru.it/pfs) and button back (http://adafru.it/oah)), or you can make your own out of PVC tubing or posterboard. The backing is just the right size to fit the electronic components inside, and the wire holes will perfectly accommodate 30awg wire. There are a few extra holes in the base for sewing the button to your project. Print the pieces you'd like in ABS or PLA. I found that white ABS had a nice diffusion to it, but ended up using glow in the dark PLA (http://adafru.it/msf) for my final buttons. This stuff has a lovely translucence to it, making the buttons look prettier when the lights are off.. and of course, there's the added bonus that they glow in the dark quite vigorously after the buttons have been turned on for even a minute or two. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 5 of 21

Testing Setup This project involves lots of small fiddly bits, moving parts, and lots and lots of wires. In order to make success more likely you will definitely want to test your components at each step of the process, so you don't spend hours of time soldering only to find that it all mysteriously doesn't work. Testing at each step means you'll catch any shorts or mistakes early. 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 is using a Gemma microcontroller and some alligator clips. The Gemma is inexpensive and really easy to use for prototyping. You can test any combination of wires without soldering or mucking about with breadboards and headers. If this is your first time using Arduino Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 6 of 21

Check out the getting started guide here (http://adafru.it/jdq). You'll need to make sure you have Adafruit's boards installed as well as the Adafruit Neopixel library (http://adafru.it/nbf). Plug your Gemma in to your computer using its USB port. Open your Arduino IDE and select Adafruit Gemma from your Boards menu. Go to File > Examples > Adafruit_Neopixel > buttoncycler and open the buttoncycler code. Find these lines at the top: #define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be // driven with a pull-up resistor so the switch should // pull the pin to ground momentarily. On a high -> low // transition the button press logic will execute. #define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels. #define PIXEL_COUNT 16 Change BUTTON_PIN to 0 and PIXEL_PIN to 1. Change the PIXEL_COUNT to reflect the number of buttons you are planning to make. 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: Red > Gemma Vout Black > Gemma G White > Gemma D1 Green > Gemma D0 The clips' colors will correspond to the wire colors used in the rest of this project. You can power the Gemma from the USB port or plug a battery in to the JST connector. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 7 of 21

Wiring it Up One leg of the tactile switch will wire to the '-' pin on its corresponding neopixel. The second leg of each button will get wired to a data pin on your microcontroller. The NeoPixels will be wired in series, connected to + and - and another data pin on your microcontroller. Switch Wiring Get out your push button switch and flatten out all the legs. Cut off the two adjacent legs on one side. Trim the remaining two legs to about half their length and solder a short black wire and a long green wire onto these legs. Cover each leg with a miniscule amount of heat shrink -- as little as you can get away with since we need this to fit into a very small space. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 8 of 21

Neopixel Wiring Cut a medium-length red and black wire and use your fingernail or a lighter to break and spread apart the sheilding in the middle of the wire. Thread the red wire through the + hole on the neopixel, twist it around and solder. Solder a white wire to the "in" hole and a yellow wire to the "out" hole of each neopixel. Trim the black wire coming from your button to about 1/2" and strip Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 9 of 21

the end. Twist it neatly around the bare spot in the middle of your black wire. Thread the black wires through the - hole on the Neopixel, twist around and solder. Carefully bend the button around so the clicky part is pressed against the back of the neopixel. Glue it in place with E6000 or epoxy, being careful not to get the glue into the button's workings. Thread the wires through the holes in your 3d printed cup, leaving every other hole open (you can fit 2 wires through each hole as needed). Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 10 of 21

Clip the button's wires to your Gemma running the buttoncycle test code. Your button should turn on with the first press and change colors with each subsequent press. If everything is working, add a dab of glue inside the cup to hold the button and neopixel assembly down tight. Repeat until all your buttons are wired, glued, and tested. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 11 of 21

Install Buttons Mark the inside of your garment where you want the buttons to go. Use a thread ripper or an awl to make 4 holes around your mark, at 12:00, 3:00, 6:00 and 9:00. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 12 of 21

Use a needle threader or a beading needle to pull the wires through the holes. It helps to keep all the buttons oriented the same way (i.e. the red wire is always on the left). Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 13 of 21

Flip your garment over and pat yourself on the back for being consistent with your wire color coding. Pull the green button wires out of the way for now. Then starting at the "in" end, hook up all the power and ground wires, then hook all the "out" yellow wires to the "in" white wires of the next button in line. Hook up the power, ground, datain and button wires coming from your first button to your tester Gemma once again. Be sure the whole strand comes on and reacts when you press the first button. Test the other buttons by hooking each green wire up to your gemma one at a time. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 14 of 21

Once you're sure everything works, sew the buttons tightly to your garment through the remaining holes in the 3d printed cups. Be careful not to get thread tangled in the button workings! Glue the caps onto the buttons using E6000 or epoxy. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 15 of 21

Play with your clicky buttons and watch them twinkle! You'll notice that the buttons respond very nicely to the first few presses -- the non-animated patterns. As soon as the neopixel patterns become animated the buttons don't respond as well. Neopixels don't like to be interrupted when they've been given a task, and the Adafruit Neopixel library's animated modes don't play well with button presses. We'll fix this by using the FastLED library and fancier microcontrollers in the next section. Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 16 of 21

Make them Do Stuff How do you want to use these buttons in your project? With a bank of blinky buttons, the sky is the limit. Control the colors or properties of the buttons themselves Control other LED arrays in the same project Trigger sound events Send someone an SMS message with Fona Trigger a web based event with a Feather Wifi Here is one example of how to wire 7 buttons to an Adafruit Metro Mini (http://adafru.it/fto). In this example, the data line is wired to pin 2 on the Metro Mini, and the buttons are wired to pins 3-9. Pins 0 and 1 are left available for serial connections or debugging. Sample Code Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 17 of 21

Here is some sample code that shows one simple way to address all 7 buttons. In this code, the buttons are running a color palette-based gradient animation, and the animation's color changes whenever you press a button. Install the FastLED Library FastLED is a very powerful tool for creating all kinds of LED lighting patterns and effects. Learn more and find lots of yummy code samples at the FastLED Google Plus (http://adafru.it/ebn) community page. Use the Library Manager in the Arduino IDE to install the FastLED library (Sketch Include Library Manage Libraries ). Once you've got the library installed, select your Arduino board from the Tools Board menu and upload the code. #include <FastLED.h> // Because conditional #includes don't work w/arduino sketches... //#include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET #include <avr/power.h> // ENABLE THIS LINE FOR GEMMA OR TRINKET #define DATA_PIN 2 #define COLOR_ORDER GRB #define NUM_LEDS 7 #define DEBOUNCE 10 // button debouncer, how many ms to debounce, 5+ ms is usually plenty int HUE=15; int SATURATION=255; int BRIGHTNESS=150; int SPEEDO=10; int STEPS=25; CRGB leds[num_leds]; TBlendType currentblending; CRGBPalette16 currentpalette; // here is where we define the buttons that we'll use. button "1" is the first, button "6" is the 6th, etc byte buttons[] = {3,4,5,6,7,8,9; // This handy macro lets us determine how big the array up above is, by checking the size #define NUMBUTTONS sizeof(buttons) // we will track if a button is just pressed, just released, or 'currently pressed' byte pressed[numbuttons], justpressed[numbuttons], justreleased[numbuttons]; void setup() { byte i; // Make input & enable pull-up resistors on switch pins for (i=0; i<numbuttons; i++){ pinmode(buttons[i], INPUT_PULLUP); Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 18 of 21

// pin13 LED pinmode(13, OUTPUT); //FastLED.setMaxPowerInVoltsAndMilliamps( VOLTS, MAX_MA); FastLED.addLeds<WS2812B,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); void loop() { Gradient(); digitalwrite(13, LOW); check_switches(); // when we check the switches we'll get the current state for (byte i = 0; i<numbuttons; i++){ if (pressed[i]) { digitalwrite(13, HIGH); // is the button pressed down at this moment if (justreleased[i]) { if (i == 0){ HUE=190; else if (i == 1){ HUE=170; else if (i == 2){ HUE=140; else if (i == 3){ HUE=100; else if (i == 4){ HUE=70; else if (i == 5){ HUE=30; else if (i == 6){ HUE=0; for (byte i=0; i<numbuttons; i++){ // remember, check_switches() will necessitate clearing the 'just pressed' flag justpressed[i] = 0; void check_switches() { static byte previousstate[numbuttons]; static byte currentstate[numbuttons]; static long lasttime; byte index; Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 19 of 21

if (millis() < lasttime){ // we wrapped around, lets just try again lasttime = millis(); if ((lasttime + DEBOUNCE) > millis()) { // not enough time has passed to debounce return; // ok we have waited DEBOUNCE milliseconds, lets reset the timer lasttime = millis(); for (index = 0; index<numbuttons; index++){ // when we start, we clear out the "just" indicators justreleased[index] = 0; currentstate[index] = digitalread(buttons[index]); // read the button if (currentstate[index] == previousstate[index]) { if ((pressed[index] == LOW) && (currentstate[index] == LOW)) { // just pressed justpressed[index] = 1; else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) { // just released justreleased[index] = 1; pressed[index] =!currentstate[index]; // remember, digital HIGH means NOT pressed //Serial.println(pressed[index], DEC); previousstate[index] = currentstate[index]; // keep a running tally of the buttons // GRADIENT -------------------------------------------------------------- void Gradient() { SetupGradientPalette(); static uint8_t startindex = 0; startindex = startindex + 2; // motion SPEEDO FillLEDsFromPaletteColors( startindex); FastLED.show(); FastLED.delay(SPEEDO); void SetupGradientPalette() { CRGB light = CHSV( HUE + 5, SATURATION - 15, BRIGHTNESS); CRGB light1 = CHSV( HUE + 10, SATURATION - 10, BRIGHTNESS); CRGB light2 = CHSV( HUE + 15, SATURATION - 20, BRIGHTNESS); CRGB medium = CHSV ( HUE - 3, SATURATION, BRIGHTNESS); CRGB medium1 = CHSV ( HUE - 7, SATURATION, BRIGHTNESS); Adafruit Industries https://learn.adafruit.com/3d-printed-neopixel-tactile-switch-buttons Page 20 of 21

CRGB medium2 = CHSV ( HUE - 11, SATURATION, BRIGHTNESS); CRGB dark = CHSV( HUE + 3, SATURATION - 30, BRIGHTNESS); CRGB dark1 = CHSV( HUE, SATURATION - 20, BRIGHTNESS); CRGB dark2 = CHSV( HUE -3, SATURATION - 15, BRIGHTNESS); currentpalette = CRGBPalette16( light, light1, light2, light1, medium, medium1, medium2, medium1, dark, dark1, dark2, dark1, medium, medium1, medium2, medium1 ); void FillLEDsFromPaletteColors( uint8_t colorindex) { uint8_t brightness = BRIGHTNESS; for( int i = 0; i < NUM_LEDS; i++) { leds[i] = ColorFromPalette( currentpalette, colorindex, brightness, currentblending); colorindex += STEPS; Having a button array is a very powerful, effective and interactive way to control your project. What will you control? Adafruit Industries Last Updated: 2017-06-16 06:04:59 PM UTC Page 21 of 21