Sarah’s Final Project: Slither

Slither is a desk pedometer, it tracks your steps and displays them visually. It is the perfect product for people who spend too much time at their desk. Instead of relying on your iPhone or Apple watch to remind you to get up from your desk and start walking Slither takes care of those reminders in sleek way. This decorative desk piece lights up to show you your progress towards walking your 50,000 step/week goal.

Slither’s form came from…a snake. Slither actually started as a painting I made for fun it evolved into a vector and now a pedometer. I definitely pushed my boundaries trying to create such a complex shape that contained several pieces.

The Materials

  1. Passion fruit Acrylic
  2. Hall effect sensor + Magnet 
  3. Adafruit HUZZAH ESP8266 wifi Breakout
  4. Wires
  5. Soldering Kit + solder
  6. 2 x Adafruit NeoPixel LED Side Light Strip – Black 90 LED 
  7. Hot Glue gun (with glue) + Gorilla glue
  8. IFTTT + Adafruit IO accounts
  9. Scrap wood
  10. 5V 2A switching power
  11. .75″ PVC pipe
  12. Edge tape
  • Machines
    1. CNC (wood)
    2. Laser Cutter (acrylic)
    3. Sander

The Build
Construction started with the CNC machine. We spent a lot of time together. Probably too much.

Once I calculated the dimensions I would need I CNC-ed my shapes out of plywood. I made sure to add dowel holes so the wooden frames would align properly.

I had to do some extra chiseling and sawing to get the shapes out. I also cut some PVC pipe that would be my on/off switch.

My wood frames needed lots of sanding. Next, I used the dowels to stack the frames on top of each other. Each frame had a layer of wood glue. I clamped that together for 30 mins.

Next I used the laser to cut the same shape out and also some circles for the PVC piece.


My feather huzzah board was connected to both a hall effect sensor and two strips of LED lights. The hall effect sensor is a sensor that turns on in the presence of a magnet.

Not pictured: lots of soldering…and resoldering…and oh no it broke soldering.

Next up, start trying to fit the huzzah board and LEDs.

I glued the acrylic piece to the top wood frame

Next, I glued an acrylic circle to cut PVC pipe. Wet wood strips and molded it to the cylinder volume before gluing.

The Code & Circuit
I used IFTTT to create a trigger for the Fitbit app. Every day the Fitbit app would fire a notification to my Adafruit IO feed with a step count. I set a goal for 50,000 steps. Slither would continue to light up until 50,000 steps was hit. When it hit the goal slither would go dark and reset.

Challenges

The CNC proved to me very time consuming. I think I will be more aware of the time it takes in the future and the problems that may arise with working with a machine like that. Lots of testing had to be done and many of the frames I wasn’t super happy with I ended up using for times sake. Sanding these frames was difficult because of the small spaces between.

If I were to do this again I would definitely probably try not to fit everything into the snake. Trying to fit it all inside caused lots of electrical issues and broke my circuit a few times. If I did try and fit it all inside again, I would make the head larger. I wasn’t able to finish the back pieces because the gap wasn’t large enough.

I wasn’t able to UV print on the acrylic because it was broken. Funnily, the placement for the dowels ended up looking like eyes anyway. If I could make this again I would add a layer of matte clear plastic so you didn’t see the gaps for the LED channel so much.

What I learned

  • 3D print probably would have been easier
  • Don’t get so complicated with shapes for the CNC machine
  • Compressed boards would probably have been better than plywood in terms of chipping
  • Mini LEDs are very difficult and time consuming to solder
  • Hall effect sensors aren’t as sensitive as you’d think
  • Laser cutting is pretty easy
  • You can do weird dancing when PoD is empty

Instructables:
https://www.instructables.com/Slither-a-Visual-Pedometer/

The Code

#define IO_USERNAME    "YOUR IO USERNAME"
#define IO_KEY         "YOUR IO KEY"

#define WIFI_SSID       "PUT WIFI NAME HERE"
#define WIFI_PASS       "PUT PASSWORD HERE"

#include "AdafruitIO_WiFi.h"
AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

/************************ Main Program Starts Here *******************************/
#include <ESP8266WiFi.h>
#include <AdafruitIO.h>
#include <Adafruit_MQTT.h>
#include <ArduinoHttpClient.h>

// #define BUTTON_PIN 4
//#define LED_PIN 13


#include <Adafruit_NeoPixel.h>

#define PIXELS_PIN 15
#define NUM_LEDS 180
#define BRIGHTNESS 50
#define HALL_SENSOR 2

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIXELS_PIN, NEO_GRB + NEO_KHZ800);

int state = 0;
int TotalSteps = 0;
int ledlevel = 1;


// button state
//int current = 0;
//int last = 0;
//int sensorValue = 0;

// set up the 'command' feed
AdafruitIO_Feed *slither = io.feed("slither");



void setup() {

  // set button pin as an input
  // pinMode(BUTTON_PIN, INPUT_PULLUP);
 // pinMode(TotalSteps, INPUT);
  pinMode(HALL_SENSOR, INPUT);


  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'


  // start the serial connection
  Serial.begin(115200);

  // connect to io.adafruit.com
  Serial.print("Connecting to Adafruit IO");
  io.connect();
  
  // set up a message handler for the 'command' feed.
  // the handleMessage function (defined below)
  // will be called whenever a message is
  // received from adafruit io.
 slither->onMessage(handleMessage);

  // wait for a connection
  while(io.status() < AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  // we are connected
  Serial.println();
  Serial.println(io.statusText());

}

void loop() {

  // io.run(); is required for all sketches.
  // it should always be present at the top of your loop
  // function. it keeps the client connected to
  // io.adafruit.com, and processes any incoming data.
  io.run();
  ledlevel = map(TotalSteps,0,50000,0,strip.numPixels());


  state = digitalRead(HALL_SENSOR);
  if (state == LOW){
    Serial.println("Hall Effect Sensor Activated");
    Serial.print("LEDs to light up: ");
    Serial.println(ledlevel);
for(int i=0; i<ledlevel; i++) { 
   strip.setPixelColor(i, strip.Color(100,0,30)); //on
   strip.show();
}  
delay(10);

  }
  else {
    Serial.println("no magnet detected");
for(int i=0; i<strip.numPixels(); i++) { 
strip.setPixelColor(i, strip.Color(0,0,0,0)); //off
   strip.show(); 


    }
  }
}






// this function is called whenever a 'command' message
// is received from Adafruit IO. it was attached to
// the command feed in the setup() function above.
void handleMessage(AdafruitIO_Data *data) {

  //int command = data->toInt();
  TotalSteps = TotalSteps+ (data->toInt());


Serial.print("steps counted: ");
    Serial.println(data->value());
    

if (TotalSteps >= 50000){
  TotalSteps = 0; 

}

// else {

    //Serial.println("no steps");
    
  

//
//
//  //change NeoPixel color here using format strip.Color(R,G,B,W)
//     strip.setPixelColor(0, strip.Color(0,0,0,100)); //turn off NeoPixel
//     strip.setPixelColor(1, strip.Color(1,0,100,0)); //turn off NeoPixel
//     strip.setPixelColor(2, strip.Color(2,100,0,0)); //turn off NeoPixel
//     strip.setPixelColor(3, strip.Color(3,100,100,0)); //turn off NeoPixel
//     strip.setPixelColor(4, strip.Color(4,0,80,40)); //turn off NeoPixel
//     strip.setPixelColor(5, strip.Color(5,90,0,20)); //turn off NeoPixel
//     strip.show(); //always remember to call strip.show() to display changes
//
//     
//     delay(500);
//
//     strip.setPixelColor(0, strip.Color(0,0,0,0)); //turn off NeoPixel
//     strip.setPixelColor(1, strip.Color(0,0,0,0)); //turn off NeoPixel
//     strip.setPixelColor(2, strip.Color(0,0,0,0)); //turn off NeoPixel
//     strip.setPixelColor(3, strip.Color(0,0,0,0)); //turn off NeoPixel
//     strip.setPixelColor(4, strip.Color(0,0,0,0)); //turn off NeoPixel
//     strip.setPixelColor(5, strip.Color(0,0,0,0)); //turn off NeoPixel
//
//     strip.show(); //always remember to call strip.show() to display changes
//     
//  } 
}

Sarah’s Final Project Progress

Circuit

I started testing my circuit on Tinkercad. I’m using a Feather Huzzah board to connect to 2 sets of LEDs and a Hall Effect Sensor (HES). Because the HES turns the LED’s on/off I’m unsure whether the HES output is the LED input. I know the LED needs to receive code info from the Arduino so I made two circuits. One where the HES output in the LED input and the other where they are both connected to different pin #s. I’m confused if either is correct.

Form

Front view
Cylindrical shape will hold a magnet that will activate the Hall effect sensor in the end of body of the snake shape.

Acrylic front with decal. Sides are wooden CNC frames stacked on top of each other.

Instructable Profile

Project Video link

Project Tutorial Outline link

Issues

I linked the IFTTT Fitbit applet to Adafruit IO. The applet should trigger at a certain time and send Adafruit IO information on my daily steps but so far it has not worked. It was saying that the ‘there is an issue with the trigger’ I reconnected my Fitbit app to IFTTT it no longer says there is an issue but it has not fired and there has been no update on the IO.

Questions:

I assume I will have to set multiple of these applets for the different times of day I want to be updated on my steps instead of it automatically updating.

I am using the Fitbit App on my phone as my step calculator. Could that be the issue?

Sarah’s IOT homework & final project update

IOT

Lesson 4
Adafruit IO email update:

PIR motion sensor:

Lesson 5

Button widget to activate LED

Project Proposal: SLITHER

My final project is going to be desk pedometer. This product will be used instead of relying on your iPhone or Apple watch to remind you to get up from your desk and start walking. It is a decorative desk piece that will light up to show you your progress towards walking 5,000 steps.

Materials
Passion fruit Acrylic
Dimmer for LEDs (amazon) OR Potentiometer + Metal knob OR Hall effect sensor + Magnet (on/off)
Adafruit HUZZAH ESP8266 Breakout
LEDS + Silicon Strip
Hot Glue + Gorilla glue
IFTTT + Adafruit IO
Scrap wood (+maybe wood stain)
Decal materials
Dowels

Machines
CNC (wood)
Laser Cutter (acrylic)
Sander
Printer (decals)

Sarah’s IoT work & Final Proposal

Internet of Things homework:

Connecting to my wifi:

Soldering ESP8266 

Final Project Proposals

  1. What can my laptop charger cook?

I’ve always wondered as my laptop/charger burned my skin wtf it gets so hot.

I was curious if it was possible to use an overheating laptop/charger to cook something…turns out there is thanks to the internet I found this tweet.

I want to create a satirical product that lets you know when your laptop or charger is hot enough to cook with.

The product can come in two pieces. One piece will take the temperature of an electronic like an Apple charger. And it send the temp information to a visual thermometer which will tell you how hot your charger is in relation to what it can cook.

180° F = chocolate chip cookie
250° F = fried egg

2. Womens Sports on TV

I have recently gotten more into sports and try to specifically watch women’s sports. They are crazily underfunded and under supported.

Women make up 40% of all participants in sports—yet somehow receive only 4% of sports media coverage. 

Because women’s sports aren’t highly publicized or marketed I often miss women’s games. I want to create an object that lets me know when a women’s game is coming on TV. It will show the sport, the channel, and the time. I will do this using the ESPN’s API.

  • Extension
  • I’d also like to expand upon the product so I can make more of a statement about this gender disparity in sports. If possible, I’d like each day to total the amount of mens sports that was shown on TV in comparison to women’s and create a twitter account that will automatically tweet this data directly at ESPN.

3. SLITHER

Often when I work at a desk I don’t walk around enough. I want to make a decorative device, SLITHER, that I can place at my desk to remind me of how much I’ve walked that day. Each full curve will represent 1,000 steps equalling a 5,000 step goal. LED lights will light up the snake from back to front as my steps increases.

I’d like this to be pink acrylic with wooden edges. I think both the wood and the pink acrylic would have to be laser cut to get these narrow cuts.

Front view of SLITHER

Sarah’s Halloween Costume Final

Combo of flash and non-flash photo
No-flash photo

The Costume Summary
My costume is a headless skeleton holding their own glowing crystal skull. I made it because I thought it was an interesting concept to try and pull off. I’ve never worn or created a headless costume. I also loved the idea of creating resin crystals that would light up. The crystals light up with light pulses and then a rainbow animation.

Wearability
In terms of wearability. The skeleton is easy comfortable outfit. It’s made from an existing skeleton costume with reflect vinyl bones cut out and pasted over the top of the bones. The head is the delicate part. It is not completely secure so that the crystals can be removed and the LED and batteries inserted.

My Takeaways
The process took much longer than I expected. The skull took the majority of the time because making the crystal piece took lots of playing around to get right. Cutting the vinyl bones was also tedious.

Overall, I really loved making the skull it was really satisfying to see it all come together. It look a lot of problem solving in terms of figuring out how to get the LED and crystals to sit properly in the skull. Next time, I’d anticipate spending more time on problems solving for something I’ve never made before. Also the resin took a lot longer because of the cure time and because I ended up making many more crystals since the molds were smaller than expected.

For the future, I wouldn’t want to shy away from doing something that seems difficult or that there is no real reference point for. I learned a lot it just takes longer!

Materials
plastic skull
Crystal Resin molds
Resin mix + UV curing light
Flexible NeoPixel LED strip (60 LED) – cut into 2 pieces (14 LEDS/strip)
Gemma MO – adafruit
Li-Ion 500 mAh Battery
Blue Foam
Hot Glue & X-acto knife
Gorilla glue
Small plastic Tupperware container
Flexible plastic cutting board

Arduino Code


#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 we suggest changing this to 1:
#define LED_PIN   A1

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT  30

// 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(LED_COUNT, 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)

// Change These Variables
int maxBrightness = 100;
int minBrightness = 6;
int fadeSpeed = 15;

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() { 
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(240, 40, 140), fadeSpeed); // Pink
    pulseColor(strip.Color(27, 0, 240), fadeSpeed); // Blue
    rainbow(13); 

}

void pulseColor(uint32_t c, uint8_t wait) {
  //Increase Brightness / Fade In
  for(int i=minBrightness; i<maxBrightness; i++) {
      strip.setBrightness(i);
      for(int x=0; x<strip.numPixels(); x++){
        strip.setPixelColor(x,c);
      }
      strip.show();
      delay(wait);
  }
  //Lower Brightness / Fade Out
  for(int i=maxBrightness; i>minBrightness; i--) {
       strip.setBrightness(i);
      for(int x=0; x<strip.numPixels(); x++){
        strip.setPixelColor(x,c);
      }
      strip.show();
      delay(wait);
  }
}

//GRADIENT RAINBOW

void rainbowFade2White(int wait, int rainbowLoops, int whiteLoops) {
  int fadeVal=0, fadeMax=100;

  // Hue of first pixel runs 'rainbowLoops' complete loops through the color
  // wheel. Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to rainbowLoops*65536, using steps of 256 so we
  // advance around the wheel at a decent clip.
  for(uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops*65536;
    firstPixelHue += 256) {

    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...

      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());

      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the three-argument variant, though the
      // second value (saturation) is a constant 255.
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue, 255,
        255 * fadeVal / fadeMax)));
    }

    strip.show();
    
    delay(wait);

    if(firstPixelHue < 65536) {                              // First loop,
      if(fadeVal < fadeMax) fadeVal++;                       // fade in
    } else if(firstPixelHue >= ((rainbowLoops-1) * 65536)) { // Last loop,
      if(fadeVal > 0) fadeVal--;                             // fade out
      } else {
      fadeVal = fadeMax; // Interim loop, make sure fade is at max
    }
  }

}

 // Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
  // Hue of first pixel runs 5 complete loops through the color wheel.
  // Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
  // means we'll make 5*65536/256 = 1280 passes through this outer loop:
  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the single-argument hue variant. The result
      // is passed through strip.gamma32() to provide 'truer' colors
      // before assigning to each pixel:
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
    }
    strip.show(); // Update strip with new contents
    delay(wait);  // Pause for a moment
  }
}

Process Photos

Initial sketch. It evolved to use reflective vinyl for the skeleton.
I used a bandsaw and drill to cut opening in plastic skull
The beginning of my crystals from the silicon molds.
The UV light I used. A few crystals curing after they are removed from the molds.
Post-soldering of Gemma and 2 LED strips
Testing opacity of crystals over LED lights
I cut a blue foam insert and super glued the LEDs onto the insert.
I used a small plastic Tupperware contain and a piece of flexible plastic (flexible cutting board mat) to create a base for the skull. This inserted into the skull opening and sat on top of the LED/Blue foam base.
Cutting reflective vinyl after tracing bones
Don’t be too precious with your work!

Sarah’s Halloween Progress

My headless crystal skeleton is meant to freak people out at night. Since the body suit and head cover is black it should blend into darkness while the reflective bones shimmer and the skull glows. The intention is for it to look like a headless skeleton is holding it’s own glowing-crystal head.

First Sketch (Now reflective vinyl bones & one piece bodysuit)

Progress

Testing Reflective Vinyl in dark room
Making Crystal Piece using different size silicon crystal molds
Near finished crystal piece
Cutting plastic skull to insert base that will hold LED, Gemma, battery & crystals
Top open. Cutting out base.

CODE
Tinkercad is not working but it is working on my Neopixel. Below is my current code that will be further tweaked to have to gaps between the rainbow effect and color pulses.

The crystal should pulse aqua blue a few times. Then pulse pink, pulse dark blue. Rainbow gradient effect and repeat.

#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 we suggest changing this to 1:
#define LED_PIN     6

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT  60

// 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(LED_COUNT, LED_PIN, NEO_GRBW + 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)

// Change These Variables
int maxBrightness = 100;
int minBrightness = 10;
int fadeSpeed = 15;



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() { 
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(27, 103, 107), fadeSpeed); // Teal
    pulseColor(strip.Color(240, 40, 140), fadeSpeed); // Pink
    pulseColor(strip.Color(27, 0, 240), fadeSpeed); // Blue

  
    rainbowFade2White(3, 3, 1);


}


void pulseColor(uint32_t c, uint8_t wait) {
  //Increase Brightness / Fade In
  for(int i=minBrightness; i<maxBrightness; i++) {
      strip.setBrightness(i);
      for(int x=0; x<strip.numPixels(); x++){
        strip.setPixelColor(x,c);
      }
      strip.show();
      delay(wait);
  }
  //Lower Brightness / Fade Out
  for(int i=maxBrightness; i>minBrightness; i--) {
       strip.setBrightness(i);
      for(int x=0; x<strip.numPixels(); x++){
        strip.setPixelColor(x,c);
      }
      strip.show();
      delay(wait);
  }
}



//GRADIENT RAINBOW



void rainbowFade2White(int wait, int rainbowLoops, int whiteLoops) {
  int fadeVal=0, fadeMax=100;

  // Hue of first pixel runs 'rainbowLoops' complete loops through the color
  // wheel. Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to rainbowLoops*65536, using steps of 256 so we
  // advance around the wheel at a decent clip.
  for(uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops*65536;
    firstPixelHue += 256) {

    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...

      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());

      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the three-argument variant, though the
      // second value (saturation) is a constant 255.
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue, 255,
        255 * fadeVal / fadeMax)));
    }

    strip.show();
    
    delay(wait);

    if(firstPixelHue < 65536) {                              // First loop,
      if(fadeVal < fadeMax) fadeVal++;                       // fade in
    } else if(firstPixelHue >= ((rainbowLoops-1) * 65536)) { // Last loop,
      if(fadeVal > 0) fadeVal--;                             // fade out
    } else {
      fadeVal = fadeMax; // Interim loop, make sure fade is at max
    }
  }
}

Crystal Skeleton Materials
Reflective vinyl – iron on
Black ‘party suit
Black lycra mask
plastic skull
Crystal Resin molds
Resin mix + UV curing light
Flexible NeoPixel LED strip (60 LED)
Gemma MO – adafruit
Li-Ion 500 mAh Battery
White Spray Paint
Blue Foam
Hot Glue & X-acto knife


To -Do List

  1. Finalize Arduino code & test on both of my LED strip
  2. Solder Gemma/LED
  3. Finish making resin crystal
  4. Finish base that will hold crystal and LED/battery/Gemma
  5. Place base in skull, secure it, finish any decorative coverup
  6. Trace skeleton bones on Vinyl & cut
  7. Adhere Vinyl bones onto black body suit

Sarah’s Halloween Costume

Crystal Skeleton Materials
Reflective vinyl – iron on
Black long sleeve t-shirt
Black pants
Black lycra mask
Durable plastic skull
Crystal molds
Resin mix + UV curing
Flexible NeoPixel LED strip & battery pack – I plan on using 2-3 strips of 8 LED’s

I’ve adjusted by costume to account for the low light up time of glow in the dark paper. I’ve switched to use reflective vinyl. I think this will still look great and reflect any ambient light around me.

I’m also thinking I’ll cut this flexible LED into 2 -3 strips.

I will cut open the top of the plastic skull head and insert my crystal set. I’m thinking of using blue foam to hold the crystals as well as the led strip/arduino set up. The LED strip(s) will sit inside the blue foam base.

Arduino Techniques:
I want my LED strip(s) to pulse blue light. I will will adjust the brightness of the LEDs to do this. Following this repetitive blue light pulse I want the strips to perform a rainbow display before switching back to the blue pulse.

Sarah Neopixel practice/Halloween proposals

Neopixel work

Tinkercad

Halloween Costume Sketches

Materials for Dino costume
Cardboard
Green felt, white felt
Resin triangular mold
Resin mix
Hinge for opening mouth
LED strip cut in 3 parts (set in resin), wires, battery pack, batteries

Gameboy materials
Cardboard, foam board
Acrylic paint or spray paint
LED strip – green and red
Straps – to connect two sides

Skeleton Materials
Glow in the dark sticker paper – blue
Black long sleeve t-shirt
Black pants
Black lycra mask
Durable plastic skull
Crystal molds
Resin mix
LED strip & battery pack- blue
***If I add glowing eyes – ping pong balls, 4 blue LEDs + battery pack / or a PIR sensor in nose hooked up to LED strips

Night Eyes by Sarah

These plush toy eyeglasses are a cuddle friendly night light. They are meant to be used by people who have poor vision or just have a hard time navigating in the dark. The idea originated from difficulty finding my own eye glasses at night. The arms of the plush toy have a thin wire inside so it can be propped besides your bed during day and folded and cuddled at night. The toy is meant to be less harsh than turning on your bedside lamp. This plush toy can help you get around without disturbing your sleeping partner. The user should feel more confident in their night time navigating

Materials
Pink cashmere mix fabric for the of the body eyeglasses
White Nylon for the lenses
6 5mm blue LED lights
Thin wire – inside the arms of the eyeglasses
Foam board -is used as insert to keep the LEDs in place/for diffusion
Poly fil – toy stuffing for cushion and diffusion
2x 2032 3V batteries & battery pack
Wires
Solder
6x 100Ohms resistors

Project Journey
The original design for the eyeglasses was fairly straight forward. I would say the prototype I made really informed my final version. I learned I needed to make the edges of my glasses much thicker and the plush toy larger overall. I also learned cutting the seams of curved edges helps get a clean curve which is why the final version is much more defined.

Soldering was definitely a challenge as I had several LEDS attached to one battery pack. Also because I needed 3 sets of lights in two different locations my circuit became difficult and prone to breaking. In the future I would create a small case inside the toy to protect the electrical work from being damaged.

First pattern for prototype
Prototype

Circuit design
Final fabric pattern
First sewn pieces
LED battery pack
Test for foam board insert that holds LEDs in place and diffuses light

Sarah’s Plush Night Light

Three Brainstorm sketches

Anglerfish. This concept was meant for kids that were interested in aquatic animals.

VW plush toy. This concept was for car passengers. Like an air freshener it would hang from the car mirror. It would act as a soft light when you don’t want to distract the driver when they are driving in the dark.

Chosen idea: Night vision eyeglasses.

This night light eyeglasses are meant for people that have difficulty finding their way around when they wake up at night. It can help you get around without disturbing your sleeping partner. The intent is for people to keep this soft toy in bed with them. When they wake up they can switch on the eyeglasses and find their way to wherever they need to go. It can be especially helpful when you can’t find your real eyeglasses in the dark.

The two lens on the plush toy will glow and the arms of the eyeglasses will have flexible wire that make it bendable and foldable. During the day the arms of the toy can be unfolded and sat on a surface. At night the arms can be folded up for cuddling.

The Pattern
For this toy, there will need to be two fabric cutouts of the font/back of the glasses. The arms of the glasses will be cut out 4 times. The eyeglass frame will be cut out twice.

Materials
soft Pink fabric for body eyeglasses
Sheer white fabric for lens (nylon or another fabric)
8 5mm blue LED lights
Wire – meant to make the arms of the eyeglasses bendable
foam board -may be used as an insert to keep the LEDs in place/for diffusion
Poly fil – toy stuffing
Battery case /batteries
Wires
Resistors

Prototype

My unstuffed prototype helped me realize I need to make the edge of the frame wider so it’s not as difficult to sew. I will probably also add fabric to the back to give it more room for stuffing and the batteries and LEDs.