loading

My family loves the movie Inside Out. So I thought it would be great if I made a shirt that would show emotions. I decided the Linkit One would be perfect for this as it would give you wireless access to the controls

Step 1: Tools/Materials

Tools

  • Computer
  • USB cable
  • Soldering Iron
  • Wire Cutters
  • Needle
  • Scissors
  • Wire Strippers
  • Helping Hands

Materials

  • Linkit One
  • Battery for Linkit One
  • Wifi Cable for Linkit One
  • 3 - RGB LED (common anode)
  • 1 - Circular Circuit Board
  • 1- Breadboard
  • 1- Wires (Most of my wires were scavenged from old computers)
  • Solder
  • 1- Shirt
  • Thread
  • Extra Fabric
  • Super Glue
  • 1 - Half a small plastic sphere about the size of the circular circuit board (I got mine from a quarter machine)
  • Poly-fil
  • Two Part Putty Epoxy (Water Weld)

Step 2: Code

This code is designed to light up certain colors of the RGB LED. It is set up in such a way that you can activate the color that corresponds with the colors of the emotions in Inside Out.

<p>//#include <b64.h><br>#include <httpclient.h>
#include <ltask.h>
#include <lwifi.h>
#include <lwificlient.h>
#include <ldatetime.h>
#define WIFI_AP ""
#define WIFI_PASSWORD ""
#define WIFI_AUTH LWIFI_WPA  // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP.
#define per 50
#define per1 3
#define DEVICEID "" // Input your deviceId
#define DEVICEKEY "" // Input your deviceKey
#define SITE_URL "api.mediatek.com"</ldatetime.h></lwificlient.h></lwifi.h></ltask.h></httpclient.h></b64.h></p><p>LWiFiClient c;
unsigned int rtc;
unsigned int lrtc;
unsigned int rtc1;
unsigned int lrtc1;
char port[4]={0};
char connection_info[21]={0};
char ip[21]={0};             
int portnum;
int val = 0;
String tcpdata = String(DEVICEID) + "," + String(DEVICEKEY) + ",0";
String upload_led;
String tcpcmd_ledJoy_on = "LED_ControlJoy,1";
String tcpcmd_ledJoy_off = "LED_ControlJoy,0";</p><p>String tcpcmd_ledAnger_on = "LED_ControlAnger,1";
String tcpcmd_ledAnger_off = "LED_ControlAnger,0";</p><p>String tcpcmd_ledDisgust_on = "LED_ControlDisgust,1";
String tcpcmd_ledDisgust_off = "LED_ControlDisgust,0";</p><p>String tcpcmd_ledFear_on = "LED_ControlFear,1";
String tcpcmd_ledFear_off = "LED_ControlFear,0";</p><p>String tcpcmd_ledSad_on = "LED_ControlSad,1";
String tcpcmd_ledSad_off = "LED_ControlSad,0";</p><p>LWiFiClient c2;
HttpClient http(c2);</p><p>void setup()
{
  
  LTask.begin();
  LWiFi.begin();
  Serial.begin(115200);
  /*while(!Serial) delay(1000); /* comment out this line when Serial is not present, ie. run this demo without connect to PC */</p><p>  Serial.println("Connecting to AP");
  while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD)))
  {
    delay(1000);
  }
  
  Serial.println("calling connection");</p><p>  while (!c2.connect(SITE_URL, 80))
  {
    Serial.println("Re-Connecting to WebSite");
    delay(1000);
  }
  delay(100);</p><p>  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  getconnectInfo();
  connectTCP();
}</p><p>void getconnectInfo(){
  //calling RESTful API to get TCP socket connection
  c2.print("GET /mcs/v2/devices/");
  c2.print(DEVICEID);
  c2.println("/connections.csv HTTP/1.1");
  c2.print("Host: ");
  c2.println(SITE_URL);
  c2.print("deviceKey: ");
  c2.println(DEVICEKEY);
  c2.println("Connection: close");
  c2.println();
  
  delay(500);</p><p>  int errorcount = 0;
  while (!c2.available())
  {
    Serial.println("waiting HTTP response: ");
    Serial.println(errorcount);
    errorcount += 1;
    if (errorcount > 10) {
      c2.stop();
      return;
    }
    delay(100);
  }
  int err = http.skipResponseHeaders();</p><p>  int bodyLen = http.contentLength();
  Serial.print("Content length is: ");
  Serial.println(bodyLen);
  Serial.println();
  char c;
  int ipcount = 0;
  int count = 0;
  int separater = 0;
  while (c2)
  {
    int v = c2.read();
    if (v != -1)
    {
      c = v;
      Serial.print(c);
      connection_info[ipcount]=c;
      if(c==',')
      separater=ipcount;
      ipcount++;    
    }
    else
    {
      Serial.println("no more content, disconnect");
      c2.stop();</p><p>    }
    
  }
  Serial.print("The connection info: ");
  Serial.println(connection_info);
  int i;
  for(i=0;i<separater;i++)  ="" {=""  ip[i]="connection_info[i];" }="" int="" j="0;" separater++;="" for(i="separater;i<21" &&="" j<5;i++)=""  port[j]="connection_info[i];"  j++;="" serial.println("the="" tcp="" socket="" connection="" instructions:");="" serial.print("ip:="" ");="" serial.println(ip);="" serial.print("port:="" serial.println(port);="" portnum="atoi" (port);="" serial.println(portnum);<="" p=""></separater;i++)></p><p>} //getconnectInfo</p><p>void uploadstatus(){
  //calling RESTful API to upload datapoint to MCS to report LED status
  Serial.println("calling connection");
  LWiFiClient c2;  </p><p>  while (!c2.connect(SITE_URL, 80))
  {
    Serial.println("Re-Connecting to WebSite");
    delay(1000);
  }
  delay(100);
  if(digitalRead(13)==1)
  upload_led = "LED_Display,,1";
  else
  upload_led = "LED_Display,,0";
  int thislength = upload_led.length();
  HttpClient http(c2);
  c2.print("POST /mcs/v2/devices/");
  c2.print(DEVICEID);
  c2.println("/datapoints.csv HTTP/1.1");
  c2.print("Host: ");
  c2.println(SITE_URL);
  c2.print("deviceKey: ");
  c2.println(DEVICEKEY);
  c2.print("Content-Length: ");
  c2.println(thislength);
  c2.println("Content-Type: text/csv");
  c2.println("Connection: close");
  c2.println();
  c2.println(upload_led);
  
  delay(500);</p><p>  int errorcount = 0;
  while (!c2.available())
  {
    Serial.print("waiting HTTP response: ");
    Serial.println(errorcount);
    errorcount += 1;
    if (errorcount > 10) {
      c2.stop();
      return;
    }
    delay(100);
  }
  int err = http.skipResponseHeaders();</p><p>  int bodyLen = http.contentLength();
  Serial.print("Content length is: ");
  Serial.println(bodyLen);
  Serial.println();
  while (c2)
  {
    int v = c2.read();
    if (v != -1)
    {
      Serial.print(char(v));
    }
    else
    {
      Serial.println("no more content, disconnect");
      c2.stop();</p><p>    }
    
  }
}</p><p>void connectTCP(){
  //establish TCP connection with TCP Server with designate IP and Port
  c.stop();
  Serial.println("Connecting to TCP");
  Serial.println(ip);
  Serial.println(portnum);
  while (0 == c.connect(ip, portnum))
  {
    Serial.println("Re-Connecting to TCP");    
    delay(1000);
  }  
  Serial.println("send TCP connect");
  c.println(tcpdata);
  c.println();
  Serial.println("waiting TCP response:");
} //connectTCP</p><p>void heartBeat(){
  Serial.println("send TCP heartBeat");
  c.println(tcpdata);
  c.println();
    
} //heartBeat</p><p>void loop()
//Red led 
{
  //Check for TCP socket command from MCS Server 
  String tcpcmd="";
  while (c.available())
   {
      int v = c.read();
      if (v != -1)
      {
        Serial.print((char)v);
        tcpcmd += (char)v;
        if (tcpcmd.substring(40).equals(tcpcmd_ledAnger_on)){
          digitalWrite(4, HIGH);
          digitalWrite(3, HIGH);
          digitalWrite(2, HIGH);
          Serial.print("Switch LED ON ");
          tcpcmd="";
        }
        else if(tcpcmd.substring(40).equals(tcpcmd_ledAnger_off)){  
          digitalWrite(4, LOW);
          digitalWrite(3, LOW);
          digitalWrite(2, LOW);
          Serial.print("Switch LED OFF");
          tcpcmd="";
        }
        else if(tcpcmd.substring(40).equals(tcpcmd_ledJoy_on)){
          digitalWrite(4, HIGH);
          digitalWrite(3, HIGH);
          digitalWrite(2, HIGH);
          digitalWrite(10, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(8, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(5, HIGH);
          Serial.print("Switch LED ON ");
          tcpcmd="";
        }
        else if(tcpcmd.substring(40).equals(tcpcmd_ledJoy_off)){  
          digitalWrite(4, LOW);
          digitalWrite(3, LOW);
          digitalWrite(2, LOW);
          digitalWrite(10, LOW);
          digitalWrite(9, LOW);
          digitalWrite(8, LOW);
          digitalWrite(7, LOW);
          digitalWrite(6, LOW);
          digitalWrite(5, LOW);
          Serial.print("Switch LED OFF");
          tcpcmd="";
        }
        else if(tcpcmd.substring(40).equals(tcpcmd_ledDisgust_on)){
          digitalWrite(10, HIGH);
          digitalWrite(9, HIGH);
          digitalWrite(8, HIGH);
          Serial.print("Switch LED ON ");
          tcpcmd="";
        }
        else if(tcpcmd.substring(40).equals(tcpcmd_ledDisgust_off)){  
          digitalWrite(10, LOW);
          digitalWrite(9, LOW);
          digitalWrite(8, LOW);
          Serial.print("Switch LED OFF");
          tcpcmd="";
        }
        
        else if(tcpcmd.substring(40).equals(tcpcmd_ledFear_on)){  
          digitalWrite(4, HIGH);
          digitalWrite(3, HIGH);
          digitalWrite(2, HIGH);
          digitalWrite(7, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(5, HIGH);
          Serial.print("Switch LED ON");
          tcpcmd="";
        }
        
        else if(tcpcmd.substring(40).equals(tcpcmd_ledFear_off)){  
          digitalWrite(4, LOW);
          digitalWrite(3, LOW);
          digitalWrite(2, LOW);
          digitalWrite(7, LOW);
          digitalWrite(6, LOW);
          digitalWrite(5, LOW);
          Serial.print("Switch LED OFF");
          tcpcmd="";
        }</p><p>        
        else if(tcpcmd.substring(40).equals(tcpcmd_ledSad_on)){  
          digitalWrite(7, HIGH);
          digitalWrite(6, HIGH);
          digitalWrite(5, HIGH);
          Serial.print("Switch LED ON");
          tcpcmd="";
        }
        
        else if(tcpcmd.substring(40).equals(tcpcmd_ledSad_off)){  
          digitalWrite(7, LOW);
          digitalWrite(6, LOW);
          digitalWrite(5, LOW);
          Serial.print("Switch LED OFF");
          tcpcmd="";
        }
      }
   }</p><p>  LDateTime.getRtc(&rtc);
  if ((rtc - lrtc) >= per) {
    heartBeat();
    lrtc = rtc;
  }
  //Check for report datapoint status interval
  LDateTime.getRtc(&rtc1);
  if ((rtc1 - lrtc1) >= per1) {
    uploadstatus();
    lrtc1 = rtc1;
  }
  
}</p>

Step 3: Testing

After working out my code I needed to test it. I set up three LEDs on my breadboard and wired them to the Linkit One. I wired the red leads of the three LEDs into digital pins 2, 3, and 4. I wired the blue leads of the three LEDs into digital pins 5, 6, and 7. I wired the green leads of the three LEDs into digital pins 8, 9, and 10. Then I wired in the ground from the LEDs to the ground of the board.

Step 4: Making the Light

I bent the ground lead on the RGB LEDs out. I placed the three LEDs in the circle so that the ground leads are near each other. I soldered these three together with the wire for the ground. I trimmed the leads of the LEDs as I soldered wires to them. I soldered the wires to the other leads of the LEDs. I used the left over leads that I cut and soldered them to the other end of the wire to help them fit into the ports of the Linkit One. I used heat shrink tubing to keep the wires together and to protect from shorts. Then I put the wires in the Linkit One in the same pins as I did for the testing step. I used water weld to hold the wires in place. Then I put a small amount of Poly-fil around the LEDs. This helps diffuse the light. Then I put half a small plastic sphere from a cheap plastic toy over the Poly-fil and lights. This gives it a nice rounded look and helps it resemble the memories from the movie Inside Out. I used super glue to hold the plastic onto the lights.

Step 5: Making the Shirt

I selected a shirt with a pocket to hide the cut I made for the wiring of the light. I cut a small hole behind the fabric of the pocket where the light would fit through. Then I cut a square of fabric that would act as a pocket inside the shirt for the Linkit One. I folded the edges of the fabric over and used a simple stitch to attach it to the bottom of the shirt on the same side as the light.

Step 6: Putting It All Together

I put the light in the pocket and then connected it to Linkit One. I made sure the battery and wifi antenna were connected. I switched the Linkit One to battery.

About This Instructable

1,094views

10favorites

License:

Bio: I am a former English teacher turned Interactive Media Instructor. I like to make, fix, and take apart. Few things are more fun than taking ... More »
More by ehudwill:Star Wars Lightsaber Utensils Musical Activated Light Up Christmas Tree Wireless Weather Indicator 
Add instructable to: