
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cwwang.com &#187; Arduino</title>
	<atom:link href="http://cwwang.com/category/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>http://cwwang.com</link>
	<description>Che-Wei Wang</description>
	<lastBuildDate>Sat, 06 Nov 2010 15:58:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Counting to a Billion</title>
		<link>http://cwwang.com/2009/05/05/counting-to-a-billion/</link>
		<comments>http://cwwang.com/2009/05/05/counting-to-a-billion/#comments</comments>
		<pubDate>Tue, 05 May 2009 22:02:09 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[For Sale]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Sculpture]]></category>
		<category><![CDATA[Time]]></category>

		<guid isPermaLink="false">http://cwwang.com/?p=1089</guid>
		<description><![CDATA[As a child, I remember challenging myself to count to 1000, 1 million, or 1 billion. I don’t think I ever made it. Why do we aimlessly count? How long would it take to count to a billion? Counting to a Billion is a device created to fulfill the desire to count. The electronics consists [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc18431-1024x682.jpg" alt="_dsc1843" title="_dsc1843" width="570" height="379" class="alignnone size-large wp-image-1294" /><br />
</br><br />
<a href="http://cwwang.com/wordpress/wp-content/uploads/_dsc1847.jpg" rel="lightbox[1089]" title="_dsc1847" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/_dsc1847.thumbnail.jpg" alt="_dsc1847" width="128" height="85" class="attachment wp-att-1096 " /></a> <a href="http://cwwang.com/wordpress/wp-content/uploads/_dsc1851.jpg" rel="lightbox[1089]" title="_dsc1851" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/_dsc1851.thumbnail.jpg" alt="_dsc1851" width="128" height="85" class="attachment wp-att-1097 " /></a><br />
As a child, I remember challenging myself to count to 1000, 1 million, or 1 billion.  I don’t think I ever made it.<br />
Why do we aimlessly count?  How long would it take to count to a billion?</p>
<p>Counting to a Billion is a device created to fulfill the desire to count.  The electronics consists of a microcontroller, a speech module, and a speaker powered by a rechargeable battery.  There is no/off switch. The voice will keep counting when the device is unplugged and if the battery is drained, the count will pick up where it left off when the battery recharges. The voice begins counting at one, two, three and continues counting up until it reaches one billion at which point in time it will stop.</p>
<p>If it took a second to utter each string of numbers, it would take 1 billion seconds or 31.7 years for the device to reach its end.  But since it takes more than a second to vocalize many of the numbers in the sequence, it may take upwards of 60 years to complete.</p>
<p>The unit is housed in a solid block of aluminum, cnc milled into a vessel that was designed to withstand substantial abuse over many years.</p>
<p>Counting to a Billion is for sale as an edition of 5.</p>
<p>Materials: Aluminum, custom electronics<br />
Dimensions: 4” (10cm) diameter, 6” (15cm) height, freestanding</p>
<p><object width="480" height="360"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4499358&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4499358&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="360"></embed></object>
<p><a href="http://vimeo.com/4499358">Counting to a Billion</a> from <a href="http://vimeo.com/user271044">che-wei wang</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2009/05/05/counting-to-a-billion/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>GSR Reader</title>
		<link>http://cwwang.com/2008/04/13/gsr-reader/</link>
		<comments>http://cwwang.com/2008/04/13/gsr-reader/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 06:31:16 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/?p=731</guid>
		<description><![CDATA[Galvanic skin response readings are simply the measurement of electrical resistance through the body. Two leads are attached to two fingertips. One lead sends current while the other measures the difference. This setup measures GSR every 50 milliseconds. Each reading is graphed, while peaks are highlighted and an average is calculated to smooth out the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/img_09491.jpg" rel="lightbox[731]" title="img_09491" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_09491.thumbnail.jpg" alt="" width="128" height="96" class="attachment wp-att-733 " /></a> <a href="http://cwwang.com/wordpress/wp-content/uploads/img_09451.jpg" rel="lightbox[731]" title="img_09451" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_09451.thumbnail.jpg" alt="" width="128" height="96" class="attachment wp-att-732 " /></a></p>
<p>Galvanic skin response readings are simply the measurement of electrical resistance through the body.  Two leads are attached to two fingertips.  One lead sends current while the other measures the difference.  This setup measures GSR every 50 milliseconds.  Each reading is graphed, while peaks are highlighted and an average is calculated to smooth out the values.  A baseline reading is taken for 10 seconds if the readings go flat (fingers removed from leads).</p>
<p><span id="more-731"></span></p>
<p><object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=892300&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=892300&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/892300?pg=embed&amp;sec=892300">GSR Reader</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=892300">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=892300">Vimeo</a>.</p>
<p><object width="480" height="240"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=892210&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=892210&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="240"></embed></object><br /><a href="http://vimeo.com/892210?pg=embed&amp;sec=892210">GSR readings in processing</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=892210">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=892210">Vimeo</a>.</p>
<p>Arduino Code:</p>
<pre><code>void setup(){
  Serial.begin(9600);
}

void loop(){
  int a=analogRead(0);
  if (Serial.available() &gt; 0) {

    byte inbyte=Serial.read();
    if(inbyte=='a'){
      Serial.print(a,BYTE);

    }
  }
}</code></pre>
<p>Processing Code:</p>
<pre><code>import processing.serial.*;
Serial myPort;  

int hPosition = 1;     // the horizontal position on the graph
float currentReading;
float lastReading;
int count=0;
int zeroLinePos=0;

float gsrAverage,prevGsrAverage;
float baseLine=0;
long lastFlatLine=0;
color graphColor=color(255,255,255);
int baselineTimer=10000;
int gsrValue;
int gsrZeroCount=0;
float gsrRange=0;
int downhillCount=0;
int uphillCount=0;
boolean downhill;
boolean peaked=false;
float peak, valley;

void setup () {
  size(900, 450);
  // List all the available serial ports
  //println(Serial.list());

  myPort = new Serial(this, Serial.list()[0], 9600);
  currentReading=0;
  lastReading=0;
  gsrAverage=0;
  background(0);

  smooth();
}

void draw () {
  //best delay setting for gsr readings
  delay(50);
  //image(myMovie, 0, 0);

  if (gsrValue&lt;15 &amp;&amp;gsrValue&gt;-15){
    if( gsrZeroCount&gt;10){
      currentReading=0;//flatline
      gsrAverage=0;
      baseLine=0;
      lastFlatLine=millis();
      gsrZeroCount=0;
      // println("reset");

    }
    gsrZeroCount++;
  }
  else{
    currentReading=gsrValue-baseLine;
    gsrZeroCount=0;
  }

  if(millis()-lastFlatLine&gt;baselineTimer){
    baseLine=gsrAverage;
  }

  //graph colors
  if(gsrAverage&gt;0 &amp;&amp; gsrAverage&lt;height/2.0*.25) graphColor=color(255,255,255);
  else if(gsrAverage&gt;height/2.0*.25 &amp;&amp; gsrAverage&lt;height/2.0*.5) graphColor=color(255,250,100);
  else if(gsrAverage&gt;height/2.0*.5 &amp;&amp; gsrAverage&lt;height/2.0*.75) graphColor=color(255,250,0);
  else if(gsrAverage&gt;height/2.0*.75) graphColor=color(255,100,0);

  gsrRange=peak-valley;

  // at the edge of the screen, go back to the beginning:
  if (hPosition &gt;= width) {
    hPosition = 0;

    //cover last drawing
    fill(0,200);
    noStroke();
    rect(0,0,width,height);
  }
  else {
    hPosition+=1;
  }

  gsrAverage=smooth(currentReading,.97,gsrAverage);

  //draw stuff

  //spike
  noStroke();
  if(gsrRange&gt;200){
    fill(255);
    ellipse(10,10,20,20);
  }
  else{
    fill(0);
    ellipse(10,10,20,20);
  }

  //graph
  strokeWeight(.5);
  stroke(graphColor);
  line(hPosition-1, height/2.0-lastReading, hPosition, height/2.0-currentReading);
  stroke(255,0,100);
  line(hPosition-1,height/2.0-prevGsrAverage,hPosition,height/2.0-gsrAverage);

  //draw peaks
  int thres=7;

  noFill();
  stroke(255,0,0);
  strokeWeight(2);

  if (currentReading-thres&gt;lastReading&amp;&amp; peaked==true){
    downhill=false;
    //println(downhillCount);
    uphillCount++;
    downhillCount=0;
    point(hPosition-1, height/2.0-lastReading);
    valley=lastReading;
    peaked=false;

  }
  if(currentReading+thres&lt;lastReading &amp;&amp; peaked==false){
    //println(uphillCount);
    downhill=true;
    uphillCount=0;
    downhillCount++;
    point(hPosition-1, height/2.0-lastReading);
    peak=lastReading;
    peaked=true;
  }

  prevGsrAverage=gsrAverage;
  lastReading=currentReading;
  //send 'a' for more bytes
  myPort.write('a');
}

void serialEvent (Serial myPort) {
  int inByte=myPort.read();
  //0-255
  gsrValue=inByte;
}

void keyPressed(){
  if (keyCode==DOWN)zeroLinePos+=3;
  if (keyCode==UP)zeroLinePos-=3;

  strokeWeight(1);
  stroke(255,0,0);
  line(0,zeroLinePos,2,zeroLinePos);
}

int smooth(float data, float filterVal, float smoothedVal){
  if (filterVal &gt; 1){      // check to make sure param's are within range
    filterVal = .99;
  }
  else if (filterVal &lt;= 0){
    filterVal = 0;
  }
  smoothedVal = (data * (1 - filterVal)) + (smoothedVal  *  filterVal);
  return (int)smoothedVal;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/04/13/gsr-reader/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Ornos: Prototype 02</title>
		<link>http://cwwang.com/2008/03/27/ornos-prototype-01-test/</link>
		<comments>http://cwwang.com/2008/03/27/ornos-prototype-01-test/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 15:24:28 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Telepresence]]></category>
		<category><![CDATA[Urban Computing]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/03/27/ornos-prototype-01-test/</guid>
		<description><![CDATA[Here&#8217;s the first test with Ornos. The compass readings are behaving pretty well considering it&#8217;s right underneath a spinning hard drive. The 1.2Ghz processor and 512 RAM don&#8217;t seem to be enough to download and render the image quickly enough, so I&#8217;m going to have to figure out how to speed things up. Ornos : [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/dsc00490.jpg" title="dsc00490.jpg" rel="lightbox[717]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc00490.thumbnail.jpg" width="128" height="85" alt="dsc00490.jpg" class="imageframe" /></a></p>
<p>Here&#8217;s the first test with Ornos.  The compass readings are behaving pretty well considering it&#8217;s right underneath a spinning hard drive.  The 1.2Ghz processor and 512 RAM don&#8217;t seem to be enough to download and render the image quickly enough, so I&#8217;m going to have to figure out how to speed things up.</p>
<p><span id="more-717"></span><br />
<object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=830568&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=830568&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/830568?pg=embed&amp;sec=830568">Ornos : Prototype 01</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=830568">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=830568">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/03/27/ornos-prototype-01-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Etek EB-85A GPS Example Code</title>
		<link>http://cwwang.com/2008/03/13/etek-eb-85a-gps-example-code/</link>
		<comments>http://cwwang.com/2008/03/13/etek-eb-85a-gps-example-code/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 03:41:24 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/03/13/etek-eb-85a-gps-example-code/</guid>
		<description><![CDATA[Here&#8217;s some example Arduino code for getting a Etek EB-85A module up and reading latitude and longitude (will probably work with most GPS modules). You can purchase a module from Sparkfun. The module only needs power, ground, rx and tx. Most modules like the Etek start sending NMEA strings as soon as it has power. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/etekgps5hz-02-m.jpg" title="etekgps5hz-02-m.jpg" rel="lightbox[673]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/etekgps5hz-02-m.thumbnail.jpg" alt="etekgps5hz-02-m.jpg" class="imageframe" height="90" width="128" /></a></p>
<p>Here&#8217;s some example Arduino code for getting a Etek EB-85A module up and reading latitude and longitude (will probably work with most GPS modules).  You can purchase a module from <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8266">Sparkfun</a>.</p>
<p>The module only needs power, ground, rx and tx.  Most modules like the Etek start sending NMEA strings as soon as it has power.  The Etek module takes a minute or two to get a satellite fix from a cold start in urban environments.  Signals drop out once in a while between tall buildings at street level even with DGPS and SBAS.  On a clear day, if you&#8217;re lucky, you can get a signal sitting by the window in urban canyons.</p>
<pre><code>//Etek GPS EB-85A Module Example
//by Che-Wei Wang and Kristin O'Friel
//32 Channel etek GPS unit
//modified from original code by Igor González Martín. http://www.arduino.cc/playground/Tutorials/GPS
boolean startingUp=true;
boolean gpsConnected=false;
boolean satelliteLock=false;

long myLatitude,myLongitude;

//GPS
#include &lt;string.h&gt;
#include &lt;ctype.h&gt;
int rxPin = 0;                    // RX PIN
int txPin = 1;                    // TX TX
int byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup() {
  //GPS
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);

  for (int i=0;i&lt;300;i++){       // Initialize a buffer for received data
    linea[i]=' ';
  }
    Serial.begin(4800);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printInfo(){

  Serial.print("myLat: ");
  Serial.println(myLatitude);
  Serial.print("myLong: ");
  Serial.println(myLongitude);

  if(gpsConnected==true){
    Serial.println("GPS connected");
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//convert NMEA gps syntax of degrees and minutes to + or - decimal point degrees
long decimalMinutes( long l, char dir){
  //latitude ddmmmmmm
  //longitude dddmmmmmm
  long decimal;                 //ddmmmmmm
  float ll=(float)l/1000000.0;  //dd.mmmmmmm
  int dd=floor(ll);             //dd.mmmmmm
  float mmmmmm=(ll-dd);         //  .mmmmmm
  float dddddd=mmmmmm/6.0*10.0; //  .mmmmmm convert minutes to decimal degrees .dddddd
  decimal=(float)(dd+dddddd)*1000000.0;

  if(dir=='W'||dir=='S')decimal=decimal*-1.0;
  return decimal;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void readGPS() {
  byteGPS=Serial.read();         // Read a byte of the serial port
  if (byteGPS == -1) {           // See if the port is empty yet
    //delay(100);
    gpsConnected=false;
  }
  else {
    gpsConnected=true;
    linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
    conta++;                      

    //printByte(byteGPS); //print raw rx

    if (byteGPS==13){            // If the received byte is = to 13, end of transmission
      cont=0;
      bien=0;
      for (int i=1;i&lt;7;i++){     // Verifies if the received command starts with $GPR
        if (linea[i]==comandoGPR[i-1]) bien++;
      }

      if(bien==6){               // If yes, continue and process the data
        for (int i=0;i&lt;300;i++){
          if (linea[i]==','){    // check for the position of the  "," separator
            indices[cont]=i;
            cont++;
          }
          if (linea[i]=='*'){    // ... and the "*"
            indices[12]=i;
            cont++;
          }
        }

        //satellite lock
        char satLock;
        for (int j=indices[1];j&lt;(indices[2]-1);j++){
          // Serial.print(linea[j+1]);
          // Serial.println("");
          if(linea[j+1]=='V')satelliteLock=false;
          else satelliteLock=true;
          satLock=linea[j+1];
        }

        //latitude
        char NS;
        char tempLat[9];
        int tempLatCount=0;
        for (int j=indices[2];j&lt;(indices[3]-1);j++){
          //print raw
          if(linea[j+1]!='.'){//remove decimal
            //Serial.print(linea[j+1]);
            tempLat[tempLatCount]=linea[j+1];
            tempLatCount++;
          }
        }

        //Serial.println("");
        for (int j=indices[3];j&lt;(indices[4]-1);j++){
          //Serial.println(linea[j+1]);
          NS=linea[j+1];
        }

        // myLatitude=strtol(tempLat);
        long myLat=strtol(tempLat, NULL, 10);
        //convert degrees and minutes to decimal degrees
        myLatitude=decimalMinutes(myLat,NS); 

        //longitude
        char EW;
        char tempLong[10];
        int tempLongCount=0;

        for (int j=indices[4];j&lt;(indices[5]-1);j++){
          //print raw
          if(linea[j+1]!='.'){//remove decimal
            //Serial.print(linea[j+1]);
            tempLong[tempLongCount]=linea[j+1];
            tempLongCount++;
          }
        }
        //Serial.println("");

        for (int j=indices[5];j&lt;(indices[6]-1);j++){
          // Serial.println(linea[j+1]);
          EW=linea[j+1];
        }

        long myLong=strtol(tempLong, NULL, 10);
        //convert degrees and minutes to decimal degrees
        myLongitude=decimalMinutes(myLong,EW);

        if (startingUp){
          //gps setup strings for Etek GPS modul
          Serial.print("$PMTK501,2*28rn");//turn on dgps
          Serial.print("$PMTK313,1*2Ern");//turn on sbas
          Serial.print("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29rn");//gprmc only
          startingUp=false;
        }
      }
      conta=0; // Reset the buffer
      for (int i=0;i&lt;300;i++){
        linea[i]=' ';
      }
    }
  }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void loop() {
  readGPS();
  printInfo();
  //do stuff here
  //myLatitude is a long like 40689667 which is 40.689667 degrees
  //or -73946641 which is -73.94641

}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/03/13/etek-eb-85a-gps-example-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ornos :  Prototype 01</title>
		<link>http://cwwang.com/2008/03/12/ornos-prototype-01/</link>
		<comments>http://cwwang.com/2008/03/12/ornos-prototype-01/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 04:22:43 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Telepresence]]></category>
		<category><![CDATA[Urban Computing]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/03/12/ornos-prototype-01/</guid>
		<description><![CDATA[I was going to cover the lasercut masonite with a leather sleeve, but I&#8217;m going to go with cnc milled RenShape with a painted finish for the next prototype. The compass needs to be calibrated to the offsets caused by the magnetized computer hardware and I need to tweak some code to get the frames [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/dsc00367.jpg" title="dsc00367.jpg" rel="lightbox[652]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc00367.thumbnail.jpg" width="128" height="85" alt="dsc00367.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/dsc00371.jpg" title="dsc00371.jpg" rel="lightbox[652]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc00371.thumbnail.jpg" width="128" height="85" alt="dsc00371.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/dsc00373.jpg" title="dsc00373.jpg" rel="lightbox[652]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc00373.thumbnail.jpg" width="128" height="85" alt="dsc00373.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/dsc00490.jpg" title="dsc00490.jpg" rel="lightbox[652]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/dsc00490.thumbnail.jpg" width="128" height="85" alt="dsc00490.jpg" class="imageframe" /></a></p>
<p>I was going to cover the lasercut masonite with a leather sleeve, but I&#8217;m going to go with cnc milled RenShape with a painted finish for the next prototype.  The compass needs to be calibrated to the offsets caused by the magnetized computer hardware and I need to tweak some code to get the frames to load faster and smoother.  I&#8217;ll post a video as soon as that part is worked out.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/03/12/ornos-prototype-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stabilize : Accelerometer + 4 Servo Motors</title>
		<link>http://cwwang.com/2008/02/25/stabilize-accelerometer-4-servo-motors/</link>
		<comments>http://cwwang.com/2008/02/25/stabilize-accelerometer-4-servo-motors/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 14:49:46 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/02/25/stabilize-accelerometer-4-servo-motors/</guid>
		<description><![CDATA[So far, the Arduino reads the x and y tilt values and translates them into motion across 4 servos to maintain a horizontal platform at the top. Next, I need to get the z tilt values to reverse the x and y tilts, so you can tilt the whole thing up side down and still [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0921.jpg" title="img_0921.jpg" rel="lightbox[642]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0921.thumbnail.jpg" width="128" height="96" alt="img_0921.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0924.jpg" title="img_0924.jpg" rel="lightbox[642]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0924.thumbnail.jpg" width="128" height="96" alt="img_0924.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0926.jpg" title="img_0926.jpg" rel="lightbox[642]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0926.thumbnail.jpg" width="128" height="96" alt="img_0926.jpg" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0925.jpg" title="img_0925.jpg" rel="lightbox[642]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0925.thumbnail.jpg" width="128" height="96" alt="img_0925.jpg" class="imageframe" /></a></p>
<p>So far, the Arduino reads the x and y tilt values and translates them into motion across 4 servos to maintain a horizontal platform at the top.  Next, I need to get the z tilt values to reverse the x and y tilts, so you can tilt the whole thing up side down and still have the top platform facing up.</p>
<p><object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=725271&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=725271&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/725271?pg=embed&amp;sec=725271">Accelerometer + 4 servo motors</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=725271">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=725271">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/02/25/stabilize-accelerometer-4-servo-motors/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ornos : A View from Above</title>
		<link>http://cwwang.com/2008/02/24/ornos-a-view-from-above/</link>
		<comments>http://cwwang.com/2008/02/24/ornos-a-view-from-above/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 21:28:45 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Telepresence]]></category>
		<category><![CDATA[Urban Computing]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/02/24/ornos-a-view-from-above/</guid>
		<description><![CDATA[Since the first hand drawn maps of the stars to satellite imagery and GPS navigation today, our frame of reference and our perception of space has been molded into a view from above. Our understanding of place is often linked to an abstract representation on a map rather than a physical relational comprehension. You could [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/picture-4.png" title="picture-4.png" rel="lightbox[634]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/picture-4.thumbnail.png" width="128" height="80" alt="picture-4.png" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/picture-3.png" title="picture-3.png" rel="lightbox[634]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/picture-3.thumbnail.png" width="128" height="80" alt="picture-3.png" class="imageframe" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/picture-2.png" title="picture-2.png" rel="lightbox[634]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/picture-2.thumbnail.png" width="128" height="80" alt="picture-2.png" class="imageframe" /></a></p>
<p>Since the first hand drawn maps of the stars to satellite imagery and GPS navigation today, our frame of reference and our perception of space has been molded into a view from above.  Our understanding of place is often linked to an abstract representation on a map rather than a physical relational comprehension.  You could probably point out Azerbaijan on a map, but how many of us can simply point in its direction across the globe?  The image of the globe projected onto a vertical surface is so pervasive, we often associate &#8220;up&#8221; with north as we project ourselves into a mental image of map.  </p>
<p>The accessibility of GPS and online map services have continued to reinforce the &#8220;up&#8221; vector while creating a greater divide between the physical world and its virtual representations.  Today, we view from above, as primarily experienced on our screens, in an elevation view without any regard to its physical context.  We project our presence into the screen through multiple translations of orientation.  Viewing a map on a computer screen requires one to find a location on the screen that represents a position, then the abstracted orientation of the vertical screen must be translated and scaled into the physical context of the current position.  We&#8217;ve lost a step in comprehension without the compass and the horizontal map.  The traditional map and compass gave an intuitive understanding of a current position in relation to physical space by rotating the map to align with the space it represented.  What appeared one inch to the left of my location on the map could be confirmed by looking up to my left.</p>
<p><strong>Ornos</strong> is a telescopic view from above.  The horizontal screen reconstructs a view from a position directly above itself using satellite imagery and maps.  Exploring your current surroundings is as simple as sliding the device on any surface to pan across the globe.  Zooming is controlled by rotating the device itself.  The onboard digital compass and GPS modules orient the image on the screen to reflect your physical surroundings while satellite imagery and maps are dynamically loaded from Google, Microsoft, or Yahoo. </p>
<p><object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=830568&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=830568&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/830568?pg=embed&amp;sec=830568">Ornos : Prototype 01</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=830568">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=830568">Vimeo</a>.</p>
<p>Here&#8217;s the first test with Ornos.  The compass readings are behaving pretty well considering it&#8217;s right underneath a spinning hard drive.  The 1.2Ghz processor and 512 RAM don&#8217;t seem to be enough to download and render the image quickly enough, so I&#8217;m going to have to figure out how to speed things up.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/02/24/ornos-a-view-from-above/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Micromag 3 Axis</title>
		<link>http://cwwang.com/2008/02/20/micromag-3-axis/</link>
		<comments>http://cwwang.com/2008/02/20/micromag-3-axis/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 06:29:37 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/2008/02/20/micromag-3-axis/</guid>
		<description><![CDATA[Here&#8217;s some modified code from Sensor Workshop to get heading values in Arduino from the Micromag 3 axis magneto sensor. Next up, accelerometer calculations on the magneto sensor to get tilt compensation on the compass readings. //heading calcuations added from Daniel's processing code to get a heading value of 0-3600 in Arduino //edited by Che-Wei [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s some modified code from <a href="http://itp.nyu.edu/physcomp/sensors/Reports/ThreeAxisMag2">Sensor Workshop</a> to get heading values in Arduino from the Micromag 3 axis magneto sensor. Next up, accelerometer calculations on the magneto sensor to get tilt compensation on the compass readings.<br />
<span id="more-631"></span></p>
<pre><code>//heading calcuations added from Daniel's processing code to get a heading value of 0-3600 in Arduino
//edited by Che-Wei Wang
//tested on MICROMAG 3-AXIS V1.00
//clockwise rotation is positive

//Original Arduino code for controlling a MicroMag3 magnetometer through SPI
//by Daniel Soltis

#define SCLK 7 //the clock to pulse (#1 on breakout)
#define MISO 6 //master in, slave out (#2 on breakout)
#define MOSI 5 //master out, slave in (#3 on breakout)
#define SSNOT 4 //when low, the device is enabled (#4 on breakout)
#define DRDY 3 //this is low after a reset, high when data is ready (#5 on breakout)
#define RESET 2 //this needs to be toggled low-high-low before each measurement (#6 on breakout)

#include &lt;math.h&gt;

int x = 0;
int y = 0;
int z = 0;
int heading = 0;

void setup(){
  Serial.begin(9600);

  pinMode(SSNOT, OUTPUT);
  pinMode(RESET, OUTPUT);
  pinMode(MOSI, OUTPUT);
  pinMode(MISO, INPUT);
  pinMode(DRDY, INPUT);
  pinMode(SCLK, OUTPUT);

  //i could just ground this line, but this at least marks it as
  //something that one could change if needed
  digitalWrite(SSNOT, LOW);
}

void loop(){

  x=readaxis(0);
  y=readaxis(1);
  z=readaxis(2);
  getHeading(x,y,z);

}

void send_bit(int _high){

  //this sends the bit on the rising edge of the clock

  digitalWrite(MOSI, _high);
  delay(2);
  digitalWrite(SCLK, HIGH);
  delay(2);
  digitalWrite(SCLK, LOW);
  delay(2);
}

int receive_bit(){

  //this receives the data on the falling edge of the clock

  digitalWrite(SCLK, HIGH);
  delay(2);
  int bit = digitalRead(MISO);
  delay(2);
  digitalWrite(SCLK, LOW);
  delay(2);
  return bit;
}

float readaxis(int _axis){
  //this function sends eight bits, waits until the data is ready
  //and receives 16 bits

    //pulse the reset
  digitalWrite(RESET, LOW);
  delay(2);
  digitalWrite(RESET, HIGH);
  delay(2);
  digitalWrite(RESET, LOW);
  delay(2);

  //send the command byte

  //this sends data that we are not in debug mode
  //and sets the amount of time to read the magnetic sensors (the ASIC period)
  //as /2048
  send_bit(LOW);
  send_bit(HIGH);
  send_bit(HIGH);
  send_bit(LOW);
  send_bit(LOW);
  send_bit(LOW);

  //the last two bits select the axis
  if (_axis == 0){ //x axis
    send_bit(LOW);
    send_bit(HIGH);
  }
  else if (_axis == 1){ //y axis
    send_bit(HIGH);
    send_bit(LOW);
  }
  else{ //z axis
    send_bit(HIGH);
    send_bit(HIGH);
  }

  //wait until the drdy line is high
  while (digitalRead(DRDY) == LOW){
    //wait
    //Serial.println("waiting");
  }
  //Serial.println("data!");

  long runningtotal = 0;

  //receive the results and tally them up as they come in 

  //the leftmost bit signs the number as positive or negative
  long sign = receive_bit();

  //the remaining bits need to be translated from individual bits into an integer
  for (int i = 14; i &gt;= 0; i = i - 1){
    long thisbit = receive_bit();
    thisbit = thisbit &lt;&lt; i;
    runningtotal = runningtotal | thisbit;
  }

  if (sign == 1){
    runningtotal = runningtotal - 32768;
  }

  //this sends the data over the serial line, as a string separated by commas
  if (_axis == 0){
    x = runningtotal;
    Serial.print(x,DEC);
    Serial.print(44, BYTE);
  }
  else if (_axis == 1){
    y = runningtotal;
    Serial.print(y,DEC);
    Serial.print(44, BYTE);
  }
  else{
    z = runningtotal;
    Serial.print(z,DEC);
    Serial.print(44, BYTE);
  }
  return runningtotal;
}

int getHeading(float x, float y, float z){
  int heading=0;
  if (x==0 &amp;&amp; y&lt;0) heading=900.0;
  if(x==0 &amp;&amp; y&gt;0) heading=2700.0;
  if (x &lt; 0) heading = (PI - atan(y/x))/TWO_PI*3600.0;
  if (x &gt; 0 &amp;&amp; y &lt; 0) heading = (-1*atan(y/x))/TWO_PI*3600.0;
  if (x &gt; 0 &amp;&amp; y &gt; 0) heading = (2.0*PI - atan(y/x))/TWO_PI*3600.0;
  Serial.print("heading: ");
  Serial.println(int(heading));
  return heading;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2008/02/20/micromag-3-axis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AGS : Haiku Shake V02</title>
		<link>http://cwwang.com/2007/12/25/ags-haiku-shake-v02/</link>
		<comments>http://cwwang.com/2007/12/25/ags-haiku-shake-v02/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 00:49:38 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://cwwang.com/wordpress/2007/12/25/ags-haiku-shake-v02/</guid>
		<description><![CDATA[AGS aka Haiku Shake is a haiku generator. Tilting to the left begins the trickling of the haiku. Each haiku is generated randomly based on 3 haiku forms and a set of preselected words. To generate a new haiku, just shake it. Ags has 3 haiku forms along with a list of words hard coded [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0696.jpg" title="img_0696.jpg" rel="lightbox[524]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0696.thumbnail.jpg" alt="img_0696.jpg" class="imageframe" height="96" width="128" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0698.jpg" title="img_0698.jpg" rel="lightbox[524]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0698.thumbnail.jpg" alt="img_0698.jpg" class="imageframe" height="96" width="128" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0699.jpg" title="img_0699.jpg" rel="lightbox[524]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0699.thumbnail.jpg" alt="img_0699.jpg" class="imageframe" height="96" width="128" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0700.jpg" title="img_0700.jpg" rel="lightbox[524]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0700.thumbnail.jpg" alt="img_0700.jpg" class="imageframe" height="96" width="128" /></a></p>
<p>AGS aka Haiku Shake is a haiku generator. Tilting to the left begins the trickling of the haiku. Each haiku is generated randomly based on 3 haiku forms and a set of preselected words. To generate a new haiku, just shake it.</p>
<p><span id="more-524"></span></p>
<p>Ags has 3 haiku forms along with a list of words hard coded onto the chip.  Each shake generates a random selection of words to fit the 5 7 5 syllable format as well as 3 predetermined haiku forms.</p>
<pre>form1:
article adjective noun
article noun verb preposition article noun
adjective adjective noun

form2:
noun preposition article noun
article adjective noun preposition article noun
adjective noun

form3:
article adjective adjective noun
preposition article adjective noun
article noun verb</pre>
<p><strong>Examples</strong> of some randomly generated haikus from Ags:<br />
either funny hand<br />
a bank flies on which treasure<br />
constant brutal hand</p>
<p>this perfect grapefruit<br />
a grapefruit brings for this tree<br />
warming smiling clown</p>
<p>sea on a flower<br />
which hidden beat with a clown<br />
warming harmony</p>
<p>a patient light sky<br />
but a perfect umbrella<br />
flowing flower hugs</p>
<p>which pretty white rain<br />
against a pretty puddle<br />
hidden puddle</p>
<p>gate for either dish<br />
which brutal breeze through that room<br />
smiling umbrella</p>
<p>a forgiving sky<br />
a spoon juggles but a clown<br />
warming constant sky</p>
<p><strong>Verson 02</strong> features:<br />
-expanded word set (80 nouns, 40 adjs, 60 verbs, 7 articles, and 20 preps)<br />
-uses flash memory on chip to store words (PROGMEM)<br />
-syllable checking for haiku form<br />
-3 haiku forms<br />
-simple article choosing function between ‘a’ or ‘an’ before vowels<br />
-trickling text based on tilt<br />
-shake sensor to generate a new haiku</p>
<p><object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=452905&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=452905&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/452905?pg=embed&amp;sec=452905">AGS : Haiku Shake V02</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=452905">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=452905">Vimeo</a>.</p>
<p><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0701.jpg" title="img_0701.jpg" rel="lightbox[524]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0701.thumbnail.jpg" alt="img_0701.jpg" class="imageframe" height="96" width="128" /></a></p>
<p>Components:<br />
Arduino Mini<br />
Accelerometer<br />
SerLCD 2.5<br />
1 AA battery stepped up to 5VDC<br />
Toggle switch<br />
Altoids tin<br />
Arduino Code :<a href="http://cwwang.com/wordpress/wp-content/uploads/haikushake10formspde.txt" title="haikushake10formspde.txt"> haikushake10forms.pde</a></p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2007/12/25/ags-haiku-shake-v02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AGS : Haiku Shake V01 Shell</title>
		<link>http://cwwang.com/2007/12/25/ags-haiku-shake-v01-shell/</link>
		<comments>http://cwwang.com/2007/12/25/ags-haiku-shake-v01-shell/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 00:49:20 +0000</pubDate>
		<dc:creator>che-wei wang</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ITP]]></category>
		<category><![CDATA[Work in Progress]]></category>

		<guid isPermaLink="false">http://cwwang.com/wordpress/2007/12/25/ags-haiku-shake-v01-shell/</guid>
		<description><![CDATA[4 layers of industrial felt hold all the pieces together. 4 AA Batteries, one arduino with an accelerometer and an LCD panel. AGS : Haiku Shake V01 Felt Shell from che-wei wang on Vimeo.]]></description>
			<content:encoded><![CDATA[<p> <a href="http://cwwang.com/wordpress/wp-content/uploads/img_0704.jpg" title="img_0704.jpg" rel="lightbox[515]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0704.thumbnail.jpg" alt="img_0704.jpg" class="imageframe" height="96" width="128" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0705.jpg" title="img_0705.jpg" rel="lightbox[515]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0705.thumbnail.jpg" alt="img_0705.jpg" class="imageframe" height="96" width="128" /></a><a href="http://cwwang.com/wordpress/wp-content/uploads/img_0677.jpg" title="img_0677.jpg" rel="lightbox[515]" rel="lightbox"><img src="http://cwwang.com/wordpress/wp-content/uploads/img_0677.thumbnail.jpg" alt="img_0677.jpg" class="imageframe" height="96" width="128" /></a></p>
<p>4 layers of industrial felt hold all the pieces together.  4 AA Batteries, one arduino with an accelerometer and an LCD panel.</p>
<p><span id="more-515"></span><br />
<object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=452889&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=452889&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object><br /><a href="http://vimeo.com/452889?pg=embed&amp;sec=452889">AGS : Haiku Shake V01 Felt Shell</a> from <a href="http://vimeo.com/user271044?pg=embed&amp;sec=452889">che-wei wang</a> on <a href="http://vimeo.com?pg=embed&amp;sec=452889">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://cwwang.com/2007/12/25/ags-haiku-shake-v01-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

