Updates from December, 2008 Toggle Comment Threads | Keyboard Shortcuts

  • Yury Gitman 1:16 am on December 24, 2008 Permalink | Reply  

    Antisocial toy 

    After solving the movement issue of servo, I started thinking about how to put all these electronic parts into my plush toy. First, I moved one of power supplies to mini breadboard and attached it on the Arduino board. Here I simply used both hot glue and tape.

    Img_2102

    Img_2098

    Img_2099

    Toys were having fun to hang out together!
    Matt’s toy (with accessories made by Hsiang Ju and me) + Hsiang Ju’s duck

    Img_2105

    The box made of cardboard was used to protect the circuit and provide a platform for servo to stand. Two batteries would be legs of the toy.

    Img_2107

    Img_2110_2

    Everyone was working hard =)

    Img_2112

    Img_2113

    Img_2114

    Img_2117

    I started sewing the skin of my toy. It’s a lot of work, trust me.

    Img_2286

    My toy’s head.

    Img_2289

    I got a plastic clown nose from Halloween Adventure, ha ha, and I used it as the head part, just the perfect size. Servo’s fan was attached on the plastic ball by hot glue, and the same, connected the plastic ball and the fur head skin. So toy’s head would turn to specific angles that I set when motor was triggered.

    Img_2294

    Img_2298

    Img_2317

    Img_2319

    However, I made a mistake here. Without making sure where eyes would be, I hot glued the head skin with the plastic red ball. When I wanted to sew the IR sensor on its head, I found it’s hard to separate the fabric from the ball. Since I couldn’t mount the IR sensor at the right place, toy’s eyes were much lower than I originally expected. 

    Img_2322

    Img_2332

    Putting on its skin continuously.

    Img_2343

    Img_2345

    Img_2350

    Img_2353

    Final review document

    Img_2357

    Img_2359

    Img_2364

    Img_2369_2

    Img_2371

    Img_2373

    the testing video is on the way.
    to be continued…

     
  • Yury Gitman 2:26 am on December 3, 2008 Permalink | Reply  

    antisocial cat_prototype 006 code iteration 

    So, yeah, I figured out what the problems were and finally made the servo work as the way I want! Hooray!
    When the toy detects me (using sensor), it would turn its head and stay at that position until it detects me again and turns its head.

    http://vimeo.com/moogaloop.swf?clip_id=2414067&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    prototype 006 code iteration from maze on Vimeo.

    And here is the code:

    ———————————————————–

    #include <Servo.h>

    Servo myservo; //create servo object to control a servo
    int sensor = 0;  // analog pin used to connect the sensor
    int motorPin=11;
    int val;    // variable to read the value from the analog pin
    boolean status=0; //status of detecting
    int counter=0;

    void setup()
    {
      myservo.attach(11);
      myservo.setMaximumPulse(2200);
     
      Serial.begin(9600);           // set up Serial library at 9600 bps
      pinMode(sensor, INPUT);
      //pinMode(relay, OUTPUT);
      pinMode(motorPin, OUTPUT);
      myservo.setMaximumPulse(2000);
      myservo.setMinimumPulse(700);

      Serial.print("Ready\n");
    }//end of setup

    int getSensor() {
      val = analogRead(sensor);            // reads the value of the potentiometer (value between 0 and 1023)
      val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)

      val=max(val,5);
      val=min(val,180);

      return val;
    } //end of getSensor

    void myRefresh(int delayTime){
      for(int i=0; i < delayTime/20; i++){ //delay is the total ms delay we want, 20 is the delay per iteration of the loop 
          Servo::refresh(); 
          delay(20);
      }
    }

    int move0(){
      Serial.print("servo position 0\n");
      myservo.write(0);
      //Servo::refresh();
      myRefresh(100);
    }//end of move0

    int move90(){
      Serial.print("servo position 90\n");
      myservo.write(90);
      //Servo::refresh();
      myRefresh(100);
    }//end of move90

    int move180(){
      Serial.print("servo position 180\n");
      myservo.write(180);
      //Servo::refresh();
      myRefresh(100);
    }//end of move180

    void loop()
    {
        val=getSensor();
        Serial.println(val);
       
       
        if (val>20){
          if(status==0){
             move180();
             myRefresh(1000);                           // waits for the servo to get there
             counter++;
          }

          else if(status==1){
            move0();
            myRefresh(1000);
            counter++;
          }//end of else

        }//end of if
       
        if(counter%2!=0){
          status=1;
        }else{
        status=0;
        }

        //myservo.write(getSensor());
        //Serial.println(getSensor());
        //delay(15);

      Servo::refresh();
    }

    —————————————————————————–

    I defined a function myRefresh() to make sure the servo would be refreshed every 20ms.
    Then I added 3 moving functions with different angles.
    The tricky part was that how to make servo stop and turn to reverse direction when the sensor detects someone again. By using 2 variables counter and status, I made servo turn to position 180 when the counter is even and turn to position 0 when it is odd.

    In this week, I’ll try to put the prototype that I have so far into the body of my plush prototype.
    The focus of the testing this week will be:
    - redesign the character for prototyping (make it big enough to put all my electronics)
    - building/ sewing the plush toy
    - make the toy’s head move! Think about materials, the skeleton, connections… etc.

     
  • Yury Gitman 12:38 am on December 1, 2008 Permalink | Reply  

    antisocial cat_look and feel prototype 

    character design sketch
    Dscf0276

    tried to draw the paper molds based on my character sketch
    Img_1814

    it’s quite close to the head proportion that I suspected
    Img_1825

    my working scene
    Img_1830

    back
    Img_1896

    front
    Img_1894

     
  • Yury Gitman 11:54 pm on November 30, 2008 Permalink | Reply  

    antisocial cat_ servo prototype 

    Prototype 005
    Materials: PIC16F88, breadboard, servo, pot
    Notes:
    - The servo could keep turning left and right, but I couldn’t control its speed and directions.
    - I found that Arduino has a servo library that is easy to use for controlling servos. So I decided to switch to Arduino board.

    http://vimeo.com/moogaloop.swf?clip_id=2297781&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    servo test from maze on Vimeo.

    Prototype 006
    Materials: Arduino, servo, breadboard, IR sensor
    Notes:
    - In the very beginning, the range of IR sensor was too small. Thus the servo only moved when I almost touched the sensor. Here I scaled the value of IR sensor from 0-1023 to 0-179.
    Img_1905_2

    - The servo had a problem of drawing too much current.

    Picture_1_3

    - So I did iteration by separating power supply for the servo, but joined the grounds of the two power supplies. I also added decoupling capacitors to stabilize my voltage regulator.

    Img_1911

    Img_1912

    Img_1916

    Img_1917

    http://vimeo.com/moogaloop.swf?clip_id=2391917&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    prototype_arduino+servo+ir sensor from maze on Vimeo.

    - Here is the code:
    ——————————————————————————————————–
    #include <Servo.h>

    Servo myservo; //create servo object to control a servo
    int sensor = 0;  // analog pin used to connect the sensor
    int motorPin=11;
    int val;    // variable to read the value from the analog pin

    void setup()
    {
      myservo.attach(11);
      myservo.setMaximumPulse(2200);
     
      Serial.begin(9600);           // set up Serial library at 9600 bps
      pinMode(sensor, INPUT);
      //pinMode(relay, OUTPUT);
      pinMode(motorPin, OUTPUT);
      myservo.setMaximumPulse(2000);
      myservo.setMinimumPulse(700);

      Serial.print("Ready\n");
    }

    int getSensor() {
      val = analogRead(sensor);            // reads the value of the potentiometer (value between 0 and 1023)
      val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)

      val=max(val,5);
      val=min(val,180);

      return val;
    } //end of getSensor

    /*
    int moveFoward() {
      analogWrite(motorPin, getSensor());
      delay(1000);
      digitalWrite(motorPin, LOW);
      delay(1000);
      //digitalWrite(relay, HIGH);
      //Serial.println(getIR());
      delay(1000);
    }

    int moveBackward() {
      analogWrite(motorPin, getSensor());
      delay(1000);
      digitalWrite(motorPin, LOW);
      delay(1000);
      //digitalWrite(relay, LOW);
      //Serial.println(getIR());
      delay(1000);
    }
    */

    void loop()
    {
    /*
        val=getSensor();
        if (val<140){
            val=180;
            myservo.write(val);                  // sets the servo position according to the scaled value
            delay(15);                           // waits for the servo to get there
        }//end of if

      while(getSensor()>30){
        myservo.write(getSensor());
        Serial.println(getSensor());
        delay(15);
      }//end of while
    */
        myservo.write(getSensor());
        Serial.println(getSensor());
        delay(15);

      //moveFoward();
      //moveBackward();
      Servo::refresh();
    }
    ————————————————————————————————-
    - I tried to pause the servo after every time it turns by expanding the delay time of myservo.write(). However, its movement became unpredictable. Then I tried moveFoward() and moveBackward() above, but they didn’t work well either.
    - Another problem I have is the click sound of servo. I was wondering if extreme turning angles like 179 or 180 caused those noise.

     
    • M Bethancourt 8:51 am on December 2, 2008 Permalink | Reply

      Your Servo is probably fine. The USB Over Current notice means that there is a short somewhere in your circuit.

    • M Bethancourt 8:53 am on December 2, 2008 Permalink | Reply

      ps
      That’s a damn cute anti-social cat you’ve got up there.

  • Yury Gitman 6:15 pm on November 18, 2008 Permalink | Reply  

    BOM for the antisocial cat project 

    Materials I’m going to use so far are:

    -Breadboard
    -Arduino
    -Resisters
    -Capacitors
    -Wires
    -Potentiometer
    -PIC16F88 chip
    -LEDs
    -Regulator
    -LCD
    -IR sensor
    -Servo motor

     
  • Yury Gitman 7:16 pm on November 11, 2008 Permalink | Reply  

    antisocial toy project schedule 

    11/11
    look for what kind of sensors and motors I can use in my project
    11/12
    order materials that I need (sensors, motors)
    11/13-11/17
    make a general figure for testing the Servo motors and the IR sensor
    11/18
    show the prototype with basic turning head movement
    trouble shooting and figure out a way for more natural movement
    11/19-11/24
    working on codes for smoothing movements of turning head
    adjust the range of the IR sensor
    11/25
    show refined prototype with more natural movement, more precise range detection and plush toy’s head.
    troubleshooting
    11/26-12/01
    refine toy’s look and try to combine the toy and the electronic part
    12/02
    show refined project with finalized plush toy and circuit
    12/09
    show my prototype that close to the end item
    12/10-12/15
    working on detail adjustments
    document producing process
    12/16
    the final presentation

     
  • Yury Gitman 6:14 pm on November 11, 2008 Permalink | Reply  

    very quick and dirty video prototype 

    http://vimeo.com/moogaloop.swf?clip_id=2217981&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    very quick & dirty video prototype from maze on Vimeo.

     
  • Yury Gitman 12:03 am on November 5, 2008 Permalink | Reply  

    antisocial cat 

    the user scenario
    My idea is to make an antisocial plush toy which is different from toys on the market.
    It won’t say "I love you! I love you!," won’t giggle or play music either.
    You will never be able to talk with it face to face, because the toy hates you!
    Basically the toy hates to talk so it wears headphone to isolate itself!

    Maze001

    Maze002

     
  • Yury Gitman 3:53 pm on November 4, 2008 Permalink | Reply  

    IR sensor + Arduino + Winbond 

    http://vimeo.com/moogaloop.swf?clip_id=2155762&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    IR sensor + Arduino + Winbond from maze on Vimeo.

    I did not change the code I used in my last mini project(IR sensor+ 3 color LEDs) and simply integrated that project with my recorder project(recorder-volume control+fwd). So when the red LED lights up, the "play" function would be triggered at the same time. The chip would execute "forward" when blue LED is on. In the same way, volume changes when the green LED is on. I also keep the switches on the breadboard of the recorder project, so I can control those functions by pressing the buttons, too.

    My circuit:

    Img_1804_2


    Img_1806

    Img_1807

     
  • Yury Gitman 5:59 pm on October 28, 2008 Permalink | Reply  

    recorder (volume control+fwd) 

    http://vimeo.com/moogaloop.swf?clip_id=2105445&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    recorder (volume+fwd) from maze on Vimeo.


    Dscf0186

    Dscf0194

    Dscf0195

    Dscf0196

    Dscf0197


     
  • Yury Gitman 5:46 pm on October 28, 2008 Permalink | Reply  

    IR sensor +3 color LEDs 

    http://vimeo.com/moogaloop.swf?clip_id=2093933&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    IR sensor + 3 color LEDs from maze on Vimeo.

    Dscf0171

    Dscf0173

    Dscf0174

    I didn’t use the average code, actually I didn’t know there’s an average code until Yury mentioned about it.
    Somehow my LEDs wouldn’t flicker a lot.
    So here is my code. It is quite simple.
    Basically I just change the on and off status of each LED in different ranges.

    ——————————————————————————

    /*
    *New Arduino hooked-up to 3 different Super-Bright LEDs.
    *Program the 3 LEDs to turn on/off individually depending on distance of hand.
    *Tzumei M. Hsiao
    */

    // Analog pin settings
    int irIn = 3;    // the IR sensor connected to the analog pin 3

    // Digital pin settings
    int redLED = 9;   // LEDs connected to digital pins 9, 10 and 11
    int blueLED = 10;  //   (Connect cathodes to digital ground)
    int greenLED = 11; 

    // Values
    int irVal = 0;   // the variable to store the input from the IR sensor
    int redVal = 0;   // the variable to store the value of red LED
    int greenVal = 0;  // the variable to store the value of green LED
    int blueVal = 0;  // the variable to store the value of blue LED

    // Variables for comparing values between loops
    int i = 0;            // Loop counter
    int wait = (1000);    // Delay between most recent pot adjustment and output

    int sens         = 3; // Sensitivity threshold, to prevent small changes in
                          // IR sensor values from triggering false reporting
    // FLAGS
    int PRINT = 1; // Set to 1 to output values

    void setup()
    {
      pinMode(redLED, OUTPUT);   // sets the digital pins as output
      pinMode(blueLED, OUTPUT);   
      pinMode(greenLED, OUTPUT);
      Serial.begin(9600);     // Open serial communication for reporting
    }

    void loop()
    {
      i += 1; // Count loop

      irVal = analogRead(irIn);  // read input pins, convert to 0-255 scale
      if (irVal < 300)//if (irVal<341)
      {
        redVal= 255;
        greenVal= 1;
        blueVal= 1;
      }//end of if
      else if (irVal< 600)//else if (irVal< 682)
      {
        redVal= 1;
        greenVal= 1;
        blueVal= 255;
      }//end of else if
      else
      {
        redVal= 1;
        greenVal= 255;
        blueVal= 1;
      }//end of else

      analogWrite(redLED, redVal);    // Send the new value to LEDs
      analogWrite(blueLED, blueVal);
      analogWrite(greenLED, greenVal);

      if (i % wait == 0)                // If enough time has passed…
      {   
        if ( irVal > sens )   // If old and new values differ
                                                      // above sensitivity threshold
        {
          if (PRINT)                    // …and if the PRINT flag is set…
          {
            Serial.print("The value of IR sensor: ");        // …then print the values.
            Serial.print(irVal);         

            PRINT = 0;
          }
        } 
        else
        {
          PRINT = 1;  // Re-set the flag   
        }

      }
    }

     
  • Yury Gitman 7:20 pm on October 21, 2008 Permalink | Reply  

    antisocial animals 

    character design
    Dscn2931_3

    Dscn2932

    I would like to make a bunch of antisocial animal plush toys. They are antisocial and they have antisocial behaviors, but they do cute things.

    Ideas of toy function so far:
    1. stick out tongue
    2. crossed arms
    3. yell "shut up" when it detects words it doesn’t like
    4. puff out cheeks
    5. never be face to face with you
    6. air guitar
    7. it will roll its eyes and say "what ever"
    8. when holding  the toy, it would say "leave me alone"

    They all have the same characteristic: they’ll feel embarrassed after doing "bad things".

     
  • Yury Gitman 6:02 pm on October 9, 2008 Permalink | Reply  

    Color mixer – IR sensor + full-color LED 

    http://vimeo.com/moogaloop.swf?clip_id=1924593&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    Color mixer with a Sharp IR sensor and a full-color LED from maze on Vimeo.

     
  • Yury Gitman 1:18 am on October 1, 2008 Permalink | Reply  

    My color mixer 

    http://vimeo.com/moogaloop.swf?clip_id=1856128&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    my color mixer from maze on Vimeo.

    Materials: Arduino, jumper wires, potentiometer, 9v battery, LEDs, resistors, DC power plug, tracing paper, scotch tape, fiberfill

    Here is my code:
    /*
    *Color Mixer
    *Tzumei M. Hsiao
    *I modified the code from "Coffee-cup" color mixer on Arduino.cc
    */

    // Analog pin settings
    int potIn = 3;    // the potentiometer connected to the analog pin 3

    // Digital pin settings
    int redLED = 9;   // LEDs connected to digital pins 9, 10 and 11
    int blueLED = 10;  //   (Connect cathodes to digital ground)
    int greenLED = 11; 

    // Values
    int potVal = 0;   // the variable to store the input from the potentiometer
    int redVal = 0;   // the variable to store the value of red LED
    int greenVal = 0;  // the variable to store the value of green LED
    int blueVal = 0;  // the variable to store the value of blue LED

    // Variables for comparing values between loops
    int i = 0;            // Loop counter
    int wait = (1000);    // Delay between most recent pot adjustment and output

    int sens         = 3; // Sensitivity threshold, to prevent small changes in
                          // pot values from triggering false reporting
    // FLAGS
    int PRINT = 1; // Set to 1 to output values

    void setup()
    {
      pinMode(redLED, OUTPUT);   // sets the digital pins as output
      pinMode(blueLED, OUTPUT);   
      pinMode(greenLED, OUTPUT);
      Serial.begin(9600);     // Open serial communication for reporting
    }

    void loop()
    {
      i += 1; // Count loop

      potVal = analogRead(potIn);  // read input pins, convert to 0-255 scale

      if (potVal< 341)
      {
        potVal= (potVal* 3) / 4; //normalize to 0-255
        redVal= 255-potVal;
        greenVal= potVal;
        blueVal= 1; //blue off
      } //end of if
      else if (potVal< 682)
      {
        potVal= ((potVal-341)*3) / 4; //normalize to 0-255
        redVal= 1; //red off
        greenVal= 255-potVal;
        blueVal= potVal;
      } //end of else if
      else
      {
        potVal= ((potVal-682)*3)/ 4; //normalize to 0-255
        redVal= potVal;
        greenVal= 1; //green off
        blueVal= 255-potVal;
      } //end of else

      analogWrite(redLED, redVal);    // Send the new value to LEDs
      analogWrite(blueLED, blueVal);
      analogWrite(greenLED, greenVal);

      if (i % wait == 0)                // If enough time has passed…
      {   
        if ( potVal > sens )   // If old and new values differ
                                                      // above sensitivity threshold
        {
          if (PRINT)                    // …and if the PRINT flag is set…
          {
            Serial.print("The value of potentiometer: ");        // …then print the values.
            Serial.print(potVal);         

            PRINT = 0;
          }
        } 
        else
        {
          PRINT = 1;  // Re-set the flag   
        }

      }
    }

     
  • Yury Gitman 4:43 pm on September 13, 2008 Permalink | Reply  

    Shaking music maker, Elmo+Cookie Monster 

    Dscf9795

    Title: 2 of the super stars of Sesame Street
    Description: Just simply press Elmo’s nose then flip or shake the stick to make giggling and silly sounds of Elmo and Cookie Monster.

    Dscf9798

    Title: HA HA HA HA
    Description: Apparently this toy attempts to make people laugh. At least I was enjoying playing with it.

    Dscf9805

    Title: SESAME WORKSHOP
    Description: I just tried to record every text it has on its plastic shell. Everything looked good except the material of this sound maker is not recyclable. If they could use Eco-friendly materials, that would be great!

    Dscf9810

    Title: Dissection
    Description: Inside Elmo’s brain is the place of putting batteries. By looking at little holes on Cookie Monster’s head, we can infer that they put a speaker here.

    Dscf9812

    Title: Let’s see what’s in its body
    Description: Every components are placed stably and neatly in the stick-shaped plastic shell. The nose is bound with a mode switch which I’ll show later.

    Dscf9819_2

    Dscf9814

    Dscf9828 Dscf9827_2

    Title: Stay orderly
    Description: Sensors and switches are covered and fixed with plastic lids. In the right bottom picture, two of wires were soldered to connect the batteries.

    Dscf9822

    Title: Mode switch
    Description: By pressing this tiny button, I could change the mode of music.

    In mode 1 – giggling of Elmo and Cookie Monster
    In mode 2 – silly sounds
    In mode 3 – brisk music

    Dscf9831

    Title: Power switch
    Description: This little switch is used to control the state of power supply.

    0 – cut off the connection with batteries.
    1 – turn on!

    Dscf9838

    Title: Its heart
    Description: The front view of the circuit board. Wires are hidden behind the board.

    Dscf9855

    Title: Turn around
    Description: There are two capacitors on the back and wires are fastened with hot glue.

    Dscf9841

    Title: Time to make some music!
    Description: This is the sensor detecting the toy’s movement and triggering the chip to play music. There are total 2 sensors inside, one is used to trigger Elmo’s giggling while another one is to trigger Cookie Monster’s.

    Dscf9861

    Title: Done!
    Description: These are all the components of the toy include a narrow strip of tape to hold wires.

    After all the work, I put those electronic parts into a sock monkey that I sewed as a prototype of my final project toy. Monkey toy would make sounds when it is shook. And monkey’s nose is the mode switch. Basically, it does the same thing as the elmo music maker but with a soft "container".
    Dscf9865

    Dscf9881

    Picture_2

     
  • Yury Gitman 4:15 pm on September 10, 2008 Permalink | Reply  

    Maze is ready to create her own monster 

    2586823395_df2cdc6357_o_3
    Hey, I’m Maze. My major in college was information management, but I was always so interested in art and design. I taught myself Photoshop, Illustrator that kind of things and did some drawings in my leisure time. Because of my background I don’t feel uncomfortable about coding or making electronic things.

    My favorite childhood toy was paper doll. They are cheap but full of fun. You can change clothes for them and even design your own collections for your dolls. What you need is only a piece of paper and maybe some crayons. Unfortunately, my brother scared me that those paper dolls would come alive at night. They would crawl out of the drawers where I put them in and try to kill me by pinching my neck! I was only 5 or 6 at that time, so I just let him burned all my dolls. Then he convinced me to play video games with him. So I don’t have any picture of my dolls…

    I have lots of childlike personalities, love playing games and toys, and love imaging a wonderland that never exist, love daydreaming. I don’t want to grow up honestly. If I really have to choose something to study, I would be totally into the toys.

    As I mentioned above, based on my personal interests, this semester I’m trying to make a cloth toy for my thesis. I expect myself to get as much basic knowledge of making physical devices as I can and to implement the functions that I need, though they’re not defined yet.

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel
Follow

Get every new post delivered to your Inbox.