Shun Cheng’s Final project (updated)

I combine all my projects in making class into a theme game called “zombie rush”

In this game, you can play games with the gears you choose

If you score high enough you can get a real one as a reward

Instructables:

Rocket shoes:https://www.instructables.com/Rocket-Shoesinfinity-MirrorRGBLED/

Ray gun: https://www.instructables.com/RayGunZoombierushgear/

Continue reading “Shun Cheng’s Final project (updated)”

Shun Cheng’s final project ray gun

I’m such a big fan of toys and products that’s my passion and reason for studying Products of design at SVA. In my final project, I want to make a ray gun that combines sound and light effects. Having fun while building this ray gun is my goal and learn how to use an Arduino soundboard.

Main Scene

  1. enter the RPG game scene
  2. gear store
  3. select your gear
  4. show gear detail
  5. ready to go

I may also ask for help our classmate’s help if they want to show their Halloween project in the video

Power Shoes

I was trying to build power boots with an infinity mirror. Based on cosplay foam crafting skills and infinity mirror effect.

I used pekakura Designer and a buzz lightyear armor template to build my project

Material list

A pair of shoes

2X GEMMA

Black foam sheet

RGB strip

Arcrylic

double side mirror film

plastic mirror

hot glue gun!

Thanks to Becky’s tutorial, I can easily create these project

https://www.instructables.com/Easy-Infinity-Mirror-With-Arduino-Gemma-NeoPixels/

Code:

//based on NeoPixel library sample sketch byttoncycler.ino by Tony Dicola for Adafruit: https://github.com/adafruit/Adafruit_NeoPixel/blob/master/examples/buttoncycler/buttoncycler.ino

#include <Adafruit_NeoPixel.h>

#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    1    // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 50
#define BRIGHTNESS 80

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream, correct if colors are swapped upon testing
//   NEO_RGBW    Pixels are wired for RGBW bistream
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.setBrightness(BRIGHTNESS);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Get current button state.
  bool newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if (newState == LOW && oldState == HIGH) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {
      showType++;
      if (showType > 6)
        showType=0;
      startShow(showType);
    }
  }

  // Set the last button state to the old state.
  oldState = newState;
}

void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color(0, 0, 0), 50);    // Red
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Red
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Green
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: pulseWhite(5); 
            break;
    case 5: rainbowFade2White(3,3,1);
            break;
    case 6: fullWhite();
            break;
  }
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

void pulseWhite(uint8_t wait) {
  for(int j = 0; j < 256 ; j++){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,0, j ) );
        }
        delay(wait);
        strip.show();
      }

  for(int j = 255; j >= 0 ; j--){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
          strip.setPixelColor(i, strip.Color(0,0,0, j ) );
        }
        delay(wait);
        strip.show();
      }
}


void rainbowFade2White(uint8_t wait, int rainbowLoops, int whiteLoops) {
  float fadeMax = 100.0;
  int fadeVal = 0;
  uint32_t wheelVal;
  int redVal, greenVal, blueVal;

  for(int k = 0 ; k < rainbowLoops ; k ++){
    
    for(int j=0; j<256; j++) { // 5 cycles of all colors on wheel

      for(int i=0; i< strip.numPixels(); i++) {

        wheelVal = Wheel(((i * 256 / strip.numPixels()) + j) & 255);

        redVal = red(wheelVal) * float(fadeVal/fadeMax);
        greenVal = green(wheelVal) * float(fadeVal/fadeMax);
        blueVal = blue(wheelVal) * float(fadeVal/fadeMax);

        strip.setPixelColor( i, strip.Color( redVal, greenVal, blueVal ) );

      }

      //First loop, fade in!
      if(k == 0 && fadeVal < fadeMax-1) {
          fadeVal++;
      }

      //Last loop, fade out!
      else if(k == rainbowLoops - 1 && j > 255 - fadeMax ){
          fadeVal--;
      }

        strip.show();
        delay(wait);
    }
  
  }



  delay(500);


  for(int k = 0 ; k < whiteLoops ; k ++){

    for(int j = 0; j < 256 ; j++){

        for(uint16_t i=0; i < strip.numPixels(); i++) {
            strip.setPixelColor(i, strip.Color(0,0,0, j ) );
          }
          strip.show();
        }

        delay(2000);
    for(int j = 255; j >= 0 ; j--){

        for(uint16_t i=0; i < strip.numPixels(); i++) {
            strip.setPixelColor(i, strip.Color(0,0,0, j ) );
          }
          strip.show();
        }
  }

  delay(500);


}


void fullWhite() {
  
    for(uint16_t i=0; i<strip.numPixels(); i++) {
        strip.setPixelColor(i, strip.Color(0,0,0, 255 ) );
    }
      strip.show();
}


// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

uint8_t red(uint32_t c) {
  return (c >> 8);
}
uint8_t green(uint32_t c) {
  return (c >> 16);
}
uint8_t blue(uint32_t c) {
  return (c);
}

Friendly Ghost – Ghosty

shun cheng’s plush night light project

Sketch

The innitiall idea was having a ghost shape toy for children to hold when they go to toilet at night. With a toy, they have something to hold this can make them more sucure. I imagine the toy can be their friendly ghost to protect in the way at night. The eyes can be used as flash light, so they can have better sight going to the toilet.

Materials

Soft gabric *1

Two LED circit *1

Themoplastic beads eyes *2

Red fabric mouth *1

Process of making Ghosty

girl holding ghosty

A little scary but still cute

Shun Cheng’s Light Proposal

I want to create a ghost toy for kids. At night, they can hold the ghost toy to go to the toilet. Giving them a hugging ghost toy will make them more comfortable with the ghost concept. Doing so may increase the chance for them to go to the toilet by themself.

Ghost Toy

The eyes will be led and can be used as a flashlight.

Soft Fabric

This fabric is soft which is pretty friendly for kids to hold.

Microsoft Arc Touch Mouse Teardown-shun cheng hsieh

It was such an elegant and well built wireless mouse

At the first glance, I thought this is a PowerPoint wireless controller.

However, I notice the part made out of silicon seems floppy and has some wrinkles on it. I tried to bend it through its wrinkles, and after a “click” sound it become a shape that can support our hand. At that time, I realize this is a mouse. After removing the battery cap and the name of this product “Microsoft Arc Touch Mouse” indicates itself as a mouse.

It’s hard to find screws these days. After searching, I realize the first two screws were hidden under the sticker. Remove these two screws and you will notice there are more screws above the silicone part. After removing those, you can easily take off the silicone part.

At the silicone part you can notice parting line on the side which indicates this part is an silicone injection part. soft material injection are widely used in shoes outsole and remote control button. Soft material injection usually have more visable part line and surplus materials may need hand trimming. Therefore, it’s easier to tell their part line. The glossy parts of this mouse are also made throuht injection modling. The material may be ABS or PLA.

The arc part is pretty complex the parts are fastend by aluminum rivets. I tried to reomove all these rivets but I only cut a little piece of rivet. That’s why I assuming the materials of riverts are made of aluminum. I aslo found some nice clean explosion view of this product.

credit: Carbon Design Group

In this project I use mostly small screwdriver and sometimes diagnoal cutting plies. It was pretty surprised that screwdriver can disassameble most part of this mouse.

The interesting part of this product must be magnatic part that can hold use connector. It may not have enough sapce for designer to put controllor in battery cabinet as most wireless mouse do because this mouse is very thin.

magnetic holder

The second design part I really appreciate is the arc part. It’s comeplex and delicate and this series have arc type of structure in every generation. The 1st generation was simply a fold structure. This concept may want to save some storage space for user. I’m pretty impressed by the hard work of both designer and engineer. Can’t wait to see next generation of Arc Touch!

Arc Mouse 2012 ver.