Xiaohan’s Final Project-Crystal House

Couples and families who are separated due to long distance often feel the longing for connection. Crystal House is built for couples and families to connect with each other through lights. Crystal Houses are connected with wifi signals. When you press the button on one Crystal House, the other Crystal House’s lights receives the signal and will be turned on.

This whole project is hand crafted which gives the project uniqueness. Crystal House is timeless. The outside structure is made from wood and decorated with plastic crystal. It has a minimalistic structure and also very colorful at the same time. You can easily recharge your battery is it dies.

Process Photo

Video and Instructables


Xiaohan’s final project update

Draft Tutorial

This product is built for couples and families to connect with each other through two lamps. Two lamps connected with wifi signals, so when you press the button on a lamp, the other lamp receives the signal and will be turned on. The materials will include Feather Huzzah. I will be going through step by step from materials/tools used, building/testing circuit using arduino and how to build the structure of the lamp. 


Feather Huzzah ESP8266(assembled) 2*


Perma-Proto Half-sized Breadboard PCB 2*

Lithium Battery -3.7v 1200mAh 2*

Mini On/Off Push-Button Switch 4*

Wires/Prototyping wires

Soldering Iron


Wire Cutter

Protection glasses

Building Circuit and code

Description for Video

Scene 1

A guy got home, he turns on this lamp. 

Scene 2

He is reading a book. Then the other lights on the lamp suddenly lights up.

Scene 3

Then he called his significant others, and they talked and laughed a lot

Xiaohan’s Arduino Homework 11+Final Project Proposal

PIR Sensor

Circuit Displays Internet Data

Add NeoPixels

Weather Data with NeoPixels

Inputs and Outputs Code

Final Project Proposal

My final project idea is to create two devices that can communicate with each other by lights. The two devices will be looking like miniature houses. One Neo Pixels will be adding into each miniature houses.

How does it work?

There are two devices(device 1 and device 2) both contains a Neo Pixels and a switch. If a person turns the switch on from device 1, the lights on device 2 will be turned on. Vice Versa.

Circuit Diagram

This is a diagram for one of the device. I plan to use the same circuit for both two device. In this circuit diagram, I switch the button to switch because I want the lights constantly on unless the person turned off the the lights.


Cardboard/Glasses/Neo Pixels/Feather Huzzah

Xiaohan’s final project proposal

This is a system which help parents to understand where the allowance their children spent and how much they have left.

This is a lightning system connect through Internet for separated couples and families. When they touch the “beans”, the lights inside will be diffused in different colors so the other person could feel their presents.

This is a shape of an old Chinese money. The idea is to help people manage their money by showing the money they have left on this object.

Xiaohan’s Halloween Costume

Fox Spirit

My costume consists a skirt, a fox mask and a fan with Neo pixel lights.


The first three pictures are the ideas about the outfit and how the lights are set up. And the two on the bottom are the references.


In the end of the process, I attached the Neo pixel to a traditional Chinese fan to show a beauty of Chinese culture.

Materials and Tools Used

Fabric/ Paper/ Arduino software/ Soldering Station/ Silicone wire/ Neo Pixel


The whole process is challenging but really fun. I really like that we have this opportunity to make a halloween costume. This is the first time I went to a parade, and it is amazing. I first settled down with the outfit idea, and started to make a circuit, then put the circuit onto the costume. My costume is pretty comfortable to wear, and I realized the more LED you have on your costume, the greater attention you will get from the audience. I am glad that we elaborate LED into our costume.


// A basic everyday NeoPixel strip test program.

// NEOPIXEL BEST PRACTICES for most reliable operation:
// – Add 1000 uF CAPACITOR between NeoPixel strip’s + and – connections.
// – MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
// – NeoPixel strip’s DATA-IN should pass through a 300-500 OHM RESISTOR.
// – AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
// connect GROUND (-) first, then +, then data.
// – When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
// (Skipping these may work OK on your workbench but can fail in the field)


ifdef AVR

#include // Required for 16 MHz Adafruit Trinket


// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:

define LED_PIN 1

// How many NeoPixels are attached to the Arduino?

define LED_COUNT 60

// 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)

// setup() function — runs once at startup ——————————–

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)



// END of Trinket-specific code.

strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)

// loop() function — runs repeatedly as long as board is on —————

void loop() {
// Fill along the length of the strip in various colors…
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color( 0, 255, 0), 10); // Green
colorWipe(strip.Color( 0, 0, 255), 50); // Blue

// Do a theater marquee effect in various colors…
// theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
// theaterChase(strip.Color(127, 0, 0), 50); // Red, half brightness
// theaterChase(strip.Color( 0, 0, 127), 50); // Blue, half brightness
// rainbow(10); // Flowing rainbow cycle along the whole strip
// theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant

// Some functions of our own for creating animated effects —————–

// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single ‘packed’ 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip…
strip.setPixelColor(i, color); // Set pixel’s color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment

// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void theaterChase(uint32_t color, int wait) {
for(int a=0; a<10; a++) { // Repeat 10 times…
for(int b=0; b<3; b++) { // ‘b’ counts from 0 to 2…
strip.clear(); // Set all pixels in RAM to 0 (off)
// ‘c’ counts up from ‘b’ to end of strip in steps of 3…
for(int c=b; c<strip.numPixels(); c += 3) {
strip.setPixelColor(c, color); // Set pixel ‘c’ to value ‘color’
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment

// 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 565536. Adding 256 to firstPixelHue each time // means we’ll make 565536/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

// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a=0; a<30; a++) { // Repeat 30 times… for(int b=0; b<3; b++) { // ‘b’ counts from 0 to 2… strip.clear(); // Set all pixels in RAM to 0 (off) // ‘c’ counts up from ‘b’ to end of strip in increments of 3… for(int c=b; c RGB
strip.setPixelColor(c, color); // Set pixel ‘c’ to value ‘color’
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames

Xiaohan’s Halloween Costume(work in progress)

Still in Progress

Circuit Diagram


This is how the circuit looks like so far. There are four Neo pixel lights connected to the Gemma. I am still having trouble lighting the Neo pixel lights because I am having some problems with Arduino.

I will be updating more information the progress tomorrow after I figure out the problem with finding Gemma fort on Arduino.

Xiaohan’s Halloween Costume Proposal-Chinese Fox Spirits


These three ideas are based on the same costume with three different lights set up. They all include a fox face mask and one or two outer jackets.

For the first one, Neo Pixel strip lights will be on the outer jacket on the collar area and the small RGB Neo Pixel will be distributed all over the front of the jackets. There will be an second layer on top to diffuse the lights.

For the second one, the mask lights only. There will be Neo Pixel distributed evenly at the top front of the mask. In that case, only one layer of jacket is needed.

For the third one, there will be two Neo Pixel strip on the collar and two on the sleeves.

For the materials of the costume, I am thinking using the paper mache for the mask and some soft and semi transparent for the jackets.



In Chinese history, people perceive Fox spirits as beautiful but sneaky. They have a bad reputation. For my halloween costume, I would like be a cool fox spirits and hopefully change the perception of fox spirit among Chinese people, or at least among our classes. At the same time, there are different fox spirits in different Asian countries too. Therefore, for the design of the jackets and masks, I would use patterns or color palette in different countries as references. Therefore, I would say this costume is more like oriental style costume.

Xiaohan’s Week 5 Assignment

A Moment for Motors

The motor one for me is not very successful. I couldn’t make the motor spin. Then I turned the NPN transistor into a different direction, the motor started to make noise but still couldn’t spin. I am not sure where it went wrong but I will read other students assignment on the website and try to figure out the problem.

Neo Pixel Strip


define PIN 6

define NUM_LEDS 4

define BRIGHTNESS 50

// 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 bitstream
// 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(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

void setup() {

strip.show(); // Initialize all pixels to ‘off’

void loop() {
// Some example procedures showing how to display to the pixels:
colorWipe(strip.Color(0, 255, 255), 0); // Red
colorWipe(strip.Color(59, 60, 7), 50); // Green
colorWipe(strip.Color(0, 0, 500), 50); // Blue
colorWipe(strip.Color(0, 0, 0, 0), 50); // White


// 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);

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 ) );

Gugu (Plush Night Light)


Story Behind Gugu

My grandmother makes the best dumplings in the world. Wait! You may think I am exaggerating. But not until you try them. She would make her dumpling wrapper starts from the flour. She has a special filling that has green pepper, onions, and pork in it. On every occasion, she would make dumplings for our family, and our family would come together and celebrate the occasion. Still today, every time I eat dumplings, I think about her. I had a lot of happy moments with her, but now we are separated, and I couldn’t see her that much. My memories about her are far beyond dumplings, but I think dumplings are the representation of her and her love towards us. So from now on, whenever I miss her and feel homesick, I will turn on the lights and lights shining through the dumpling will remind me of her.

Gugu is for people who miss their hometown or beloved, regardless of culture and background. It has two LEDs inside(one green and one blue). The blue LED has a cooler tone which represents the feeling of missing. The green LED represent the vegetable fillings. Due to the realistic dumpling shape of Gugu, I think the abstraction of colors would give it a more interesting twist. Gugu does not only function as a night light but also can be seen as a small toy. It is fluffy and soft for people to touch and play around. How can you resist such sensational and cute night light in the dark?


original ideas
First prototype
I changed the fabric to a softer and wool-like fabric. It is made from cotton(80% and polyester 20%)
I sewed the top of the dumplin’ first and then opened a small opening to put the filling and the circuit in.)
This is the circuit
I made it!
Final Look.

Circuit Diagram