<?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>Pixel Punchout &#187; TweetChime</title>
	<atom:link href="http://pixelpunchout.com/tag/tweetchime/feed/" rel="self" type="application/rss+xml" />
	<link>http://pixelpunchout.com</link>
	<description>digital/social media, technology, internet phenomena, + design (ninjas)</description>
	<lastBuildDate>Tue, 07 Sep 2010 06:33:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Meet TweetChime</title>
		<link>http://pixelpunchout.com/2009/12/meet-tweetchime/</link>
		<comments>http://pixelpunchout.com/2009/12/meet-tweetchime/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 06:05:33 +0000</pubDate>
		<dc:creator>Cindy</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Intro to Computational Media]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[TweetChime]]></category>

		<guid isPermaLink="false">http://www.pixelpunchout.com/?p=560</guid>
		<description><![CDATA[TweetChime Live Demo from cindy wong on Vimeo. Helping people overcome long distances, TweetChime is a melodic chime that communicates people&#8217;s sentiments and transmits them into melody. So, no matter where you are, you can let your loved ones know you&#8217;re thinking of them and they can hear your sentiment in real-time in sound. By [...]]]></description>
			<content:encoded><![CDATA[<p><object width="500" height="375" data="http://vimeo.com/moogaloop.swf?clip_id=8017119&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8017119&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /></object></p>
<p><a href="http://vimeo.com/8017119">TweetChime Live Demo</a> from <a href="http://vimeo.com/user758179">cindy wong</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Helping people overcome long distances, <a href="http://itp.nyu.edu/~cw1028/pcomp/tweetchime.html" target="_blank">TweetChime</a> is a melodic chime that communicates people&#8217;s sentiments and transmits them into melody. So, no matter where you are, you can let your loved ones know you&#8217;re thinking of them and they can hear your sentiment in real-time in sound. By using Twitter, you can send your preferred sentiment, anytime and anywhere at your convenience.</p>
<p>In this case, in the video above, my brother, Pat has sent me this coded message: &#8220;<a onclick="pageTracker._trackPageview('/exit/to/tweetchime')" href="http://twitter.com/tweetchime" target="_blank"><strong>@tweetchime</strong></a> [dinnertime] awww yeah!&#8221; Why? Because he has an odd sense of humor  from living in Mobile, Al. which somehow is lost on me  in New York City. Ah, family.</p>
<h2>Who Could Use TweetChime?</h2>
<p>TweetChime is great for ambient contact technology. In other words, you can keep yourself open to others without them having to actively message you (through phone/IM/email). Vice versa, they can quickly tweet you and have the satisfaction of knowing that you will hear their tweet melody in real time on your side.  The TweetChime is unobtrusive and (if prototyped further) can blend into your household.</p>
<ul>
<li>Long distance friends/family</li>
<li>Parents who want to communicate with their kids (who can&#8217;t read time, distinguish technology)</li>
<li>Visually Impaired</li>
</ul>
<h2>Interact with TweetChime:</h2>
<p>Would you like to send a sentiment to me? Please tweet to <strong>@tweetchime</strong>, the TweetChime&#8217;s Twitter account.</p>
<p><strong>How to Send: </strong>TweetChime recognizes the coded message within the brackets [ ]. The TweetChime website will scan Twitter&#8217;s search results looking for messages aimed at @tweetchime.</p>
<p>I have programmed a reply that TweetChime can recognize from a Twitter message. Choose your choice below:</p>
<ul>
<li>@tweetchime [be happy]</li>
<li>@tweetchime [congratulations]</li>
<li>@tweetchime [missing you]</li>
<li>@tweetchime [holla]</li>
<li>@tweetchime [coming home]</li>
<li>@tweetchime [dinner time]</li>
</ul>
<p><em>ex: cwong08 says: &#8220;@tweetchime [dinner time] Mom is serving mashed potatoes and turkey! Mmmm!</em></p>
<p><strong>Where Does My Tweet Go?</strong><a href="http://itp.nyu.edu/~cw1028/pcomp/tweetchime_beta.html" target="_blank"></a></p>
<p><a href="http://itp.nyu.edu/~cw1028/pcomp/tweetchime_beta.html" target="_blank">TweetChime</a> will be searching for all mentions of itself (@tweetchime) through Twitter&#8217;s public search time line. When it finds the coded tweet (1 of the 6 above), it&#8217;ll understand it and output into a short melody that the TweetChime owner will understand.</p>
<p><strong>See It In Action</strong></p>
<h2><span id="more-560"></span></h2>
<h2><strong>Software Setup:</strong></h2>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/picture-1.png"></a><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/screengrab_tweetchimewebsite.png" title="screengrab_tweetchimewebsite" rel="lightbox[560]"><img class="alignnone size-full wp-image-592" title="screengrab_tweetchimewebsite" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/screengrab_tweetchimewebsite.png" alt="screengrab_tweetchimewebsite" width="500" height="392" /></a></p>
<p><em>TweetChime &#8211; home page for the TweetChime machine</em></p>
<p>So, what&#8217;s running the online component of TweetChime? TweetChime involves 2 websites: TweetChime, the <a href="http://itp.nyu.edu/~cw1028/pcomp/tweetchime.html" target="_blank">html site </a>and a <a href="http://itp.nyu.edu/~cw1028/pcomp/tweetchime_rss.php" target="_blank">php site</a>. The recipient of all these TweetChime melodies has the TweetChime website open in their web browser. The TweetChime website is constantly communicating to its PHP site (via AJAX) which is  checking a RSS feed of Twitter&#8217;s search results for mentions of @tweetchime [coded message here]. The ones that are properly formatted get grabbed to TweetChime&#8217;s html website. That website has Javascript coding which allows serial communication between the PC and the Arduino. The website passes the encoded values (for example, [be happy] = byte value 65)  within the Twitter messages to the Arduino which can understand them and output the commands associated with each coded byte value. The beauty is that TweetChime will only play fresh tweets so that folks will always know that the tweet melody heard is something that was sent by someone in real time.</p>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/picture-31.png"></a><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/phpcode.jpg" title="phpcode" rel="lightbox[560]"><img class="alignnone size-large wp-image-593" title="phpcode" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/phpcode-1024x575.jpg" alt="phpcode" width="500" height="284" /></a></p>
<p><em>PHP site that is parsing the tweets that people are sending to @tweetchime</em></p>
<p><em><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/serialcommunication_javascript.gif" title="serialcommunication_javascript" rel="lightbox[560]"><img class="alignnone size-large wp-image-594" title="serialcommunication_javascript" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/serialcommunication_javascript-1024x421.gif" alt="serialcommunication_javascript" width="500" height="205" /></a></em></p>
<p><em>Javascript receives the parsed tweets and transmits to Arduino to output to TweetChime</em></p>
<ul>
<li><strong>Update: </strong>Managed to parse Twitter RSS data to now include the current Twitter sender, Twitter sender&#8217;s icon<em><br />
</em></li>
</ul>
<h2>Physical Setup</h2>
<p>Ingredients: 5 Servo Motors, 1 Arduino, 1 BreadBoard, 22-gauge wires, 5 large metal wind chimes, 5 tiny metal chime pipes (to act as knockers), plywood, DC jack, 12V DC adapter, voltage regulator, heat shield (to protect the voltage regulator from overheating)</p>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/sany0006.jpg" title="TweetChime Machine Setup" rel="lightbox[560]"><img class="alignnone size-large wp-image-564" title="TweetChime Machine Setup" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/sany0006-1024x775.jpg" alt="TweetChime Machine Setup" width="500" height="375" /></a></p>
<p>Servo Motors are mounted to a back board. Attached to each servo motor is a smaller wind chime pipe that acts as a knocker to produce a clear ring against the hanging wind chime tube pipe.<em> </em>The Arduino and breadboard are mounted behind the back board.</p>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/backoftweetchime.jpg" title="backoftweetchime" rel="lightbox[560]"><img class="alignnone size-full wp-image-565" title="backoftweetchime" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/backoftweetchime.jpg" alt="backoftweetchime" width="500" height="400" /></a></p>
<p><strong>Arduino Coding:</strong><br />
Did you know that the servo library can now handle multiple servos without it overloading the timing involved in it? I originally wrote my Arduino code to include delays with the Servo Library and for whatever reason, when I added my 4th servo motor, it got jittery, ran abruptly and sometimes went on randomly. It may or may not have been a power issue involving a misplaced wire. However, after talking to my professor Tom Igoe, he managed to demonstrate a way for me to orderly arrange my servo motors (with arrays rather then explicitly listing each servo motors and it&#8217;s individual slot pin). I also learned that when you use the Servo Library, you don&#8217;t have to deal with mounting servo motors on only PWM slots on the Arduino – you can use ANY slot (which in my case was ANY digital slot). Here&#8217;s the code I ended up with:</p>
<pre class="postCode">#include
// an array of instances of the Servo library:
Servo myServos[5];
int incomingByte = 0;  //SETS UP AS ZERO INTERACTION @ START.
int pos = 0;   

void setup() {
 Serial.begin(9600);
 // opens serial port, sets data rate to 9600 bps

 // initialize the servos in the array on pins 2,3,4,5,6
 // servo 0 = pin 2; servo 1 = pin 3, servo 2 = pin 4, servo 3 = pin 5, servo 4 = pin 6
 for (int thisServo = 0; thisServo &lt; 5; thisServo++) {
  int thisPin = thisServo + 2;
  myServos[thisServo].attach(thisPin);
 }

}

void loop() {
  if (Serial.available() &gt; 0) {
   // read the incoming byte:
   incomingByte = Serial.read(); // CHECKS FOR INCOMING SERIAL DATA.

   if(incomingByte == 70) {      // IF INCOMING DATA = 70, REACT.
       // MELODY 68 =  Chime Sequence = 0,5,0,5 = coming home

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {

            myServos[2].write(180); //  servo in array; swing forward in 180 deg.
            delay(500);

            myServos[2].write(100); //  servo in array; swing back 100 deg.
            delay(500);

            myServos[3].write(180);
            delay(500);

            myServos[3].write(100);
            delay(500);

            myServos[1].write(180);
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100);
            delay(500);

           myServos[2].write(180);
            delay(500);

            myServos[2].write(100);
            delay(500);

            myServos[3].write(180);
            delay(500);

            myServos[3].write(100);
            delay(500);

            myServos[1].write(180);
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100);
            delay(500);
            }
       } 

    if(incomingByte == 69) {      // IF INCOMING DATA = 69, REACT.
       // MELODY 68 =  Chime Sequence = 0,5,0,5 = dinner time

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {
            // move to 0 degrees:
            myServos[0].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[0].write(100);
            delay(500);

            myServos[4].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[4].write(100);
            delay(500);

            myServos[0].write(180); // 3rd servo in array; swing forward
            delay(900);
            // move to 0 degrees:
            myServos[0].write(100); // 3rd servo in array; swing back
            delay(900);

            myServos[4].write(180); // first servo in array; swing forward
            delay(900);
            // move to 0 degrees:
            myServos[4].write(100);
            delay(900);

            }
       } 

     if(incomingByte == 68) {      // IF INCOMING DATA = 67, REACT.
       // MELODY 68 =  Chime Sequence = 2,1,0,4,3 = HOLLA

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {
            // move to 0 degrees:
            myServos[2].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[2].write(100);
            delay(500);

            myServos[3].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[3].write(100);
            delay(500);

            myServos[1].write(180); // 3rd servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100); // 3rd servo in array; swing back
            delay(500);

          myServos[2].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[2].write(100);
            delay(500);

            myServos[3].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[3].write(100);
            delay(500);

            myServos[1].write(180); // 3rd servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100); // 3rd servo in array; swing back
            delay(500);
            }
       } 

       if(incomingByte == 67) {      // IF INCOMING DATA = 67, REACT.
         // MELODY 67 =  Chime Sequence = 1,3,1,2,0 = MISSING YOU

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {
            // move to 0 degrees:
            myServos[1].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100);
            delay(500);

            myServos[3].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[3].write(100);
            delay(500);

            myServos[1].write(180); // 3rd servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100); // 3rd servo in array; swing back
            delay(500);

            myServos[2].write(180); // 4th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[2].write(100); // 4th servo in array; swing back
            delay(500);

            myServos[0].write(180); // 5th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[0].write(100); // 5th servo in array; swing back
            delay(500);
            }
       }
             if(incomingByte == 66) {      // IF INCOMING DATA = 65, REACT.
       // MELODY 66 =  Chime Sequence 0, 2, 4, 1, 3 = CONGRATULATIONS

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {
            // move to 0 degrees:
            myServos[0].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[0].write(100);
            delay(500);

            myServos[1].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100);
            delay(500);

            myServos[2].write(180); // 3rd servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[2].write(100); // 3rd servo in array; swing back
            delay(500);

            myServos[3].write(180); // 4th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[3].write(100); // 4th servo in array; swing back
            delay(500);

            myServos[4].write(180); // 5th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[4].write(100); // 5th servo in array; swing back
            delay(500);
            }
      }

    if(incomingByte == 65) {      // IF INCOMING DATA = 65, REACT.
       // MELODY 65 =  Chime Sequence 4,3,2,1,0

            for (int thisServo = 0; thisServo &lt; 1; thisServo++) {
            // move to 0 degrees:
            myServos[4].write(180); // first servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[4].write(100);
            delay(500);

            myServos[3].write(180); // 2nd servo in array; swing back
            delay(500);
            // move to 0 degrees:
            myServos[3].write(100);
            delay(500);

            myServos[2].write(180); // 3rd servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[2].write(100); // 3rd servo in array; swing back
            delay(500);

            myServos[1].write(180); // 4th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[1].write(100); // 4th servo in array; swing back
            delay(500);

            myServos[0].write(180); // 5th servo in array; swing forward
            delay(500);
            // move to 0 degrees:
            myServos[0].write(100); // 5th servo in array; swing back
            delay(500);
            }
       }
    }
  }</pre>
]]></content:encoded>
			<wfw:commentRss>http://pixelpunchout.com/2009/12/meet-tweetchime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TweetChime in Progress!</title>
		<link>http://pixelpunchout.com/2009/12/tweetchime-in-progress/</link>
		<comments>http://pixelpunchout.com/2009/12/tweetchime-in-progress/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 03:59:51 +0000</pubDate>
		<dc:creator>Cindy</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[TweetChime]]></category>

		<guid isPermaLink="false">http://www.pixelpunchout.com/?p=556</guid>
		<description><![CDATA[TweetChime in Progress! from cindy wong on Vimeo. I managed to make it work! Here&#8217;s it in action: Five Servomotors using the servo library within Arduino to function within sequence with room for a delay so each servomotor can complete their action before proceeding to the next action. New things I learned: 1) Servo library [...]]]></description>
			<content:encoded><![CDATA[<p><object width="500" height="375" data="http://vimeo.com/moogaloop.swf?clip_id=7951263&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7951263&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /></object></p>
<p><a href="http://vimeo.com/7951263">TweetChime in Progress!</a> from <a href="http://vimeo.com/user758179">cindy wong</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>I managed to make it work! Here&#8217;s it in action: Five Servomotors using the servo library within Arduino to function within sequence with room for a delay so each servomotor can complete their action before proceeding to the next action.</p>
<p>New things I learned:</p>
<p>1) Servo library can be used on non-PWM slots on the Arduino. You are not limited by slots 3, 5, 6, 9, 10, 11.</p>
<p>2) Heat shields are a must-have on a voltage regulator where you plan to have your device on for anything above 5 minutes (IMHO)</p>
<p>Photo of my breadboard setup -</p>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/12/img_6987.jpg" title="img_6987" rel="lightbox[556]"><img class="alignnone size-medium wp-image-554" title="img_6987" src="http://www.pixelpunchout.com/wp-content/uploads/2009/12/img_6987-300x225.jpg" alt="img_6987" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelpunchout.com/2009/12/tweetchime-in-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meet TweetChime, ITP Final Project</title>
		<link>http://pixelpunchout.com/2009/11/final-project-for-physical-computing/</link>
		<comments>http://pixelpunchout.com/2009/11/final-project-for-physical-computing/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 05:40:33 +0000</pubDate>
		<dc:creator>Cindy</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Intro to Computational Media]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[TweetChime]]></category>

		<guid isPermaLink="false">http://www.pixelpunchout.com/?p=486</guid>
		<description><![CDATA[For my Final Project, I decided to combine my ICMW and PComp classes together and produce a single idea: Meet TweetChime. TweetChime is an interactive music chime that  that will take specially coded Twitter messages people send to you and transforms them into melody where you are. What makes that so special? Whether a friend [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/11/pcompgraphic1.jpg" title="pcompgraphic1" rel="lightbox[486]"><img class="alignnone size-large wp-image-543" title="pcompgraphic1" src="http://www.pixelpunchout.com/wp-content/uploads/2009/11/pcompgraphic1-1024x568.jpg" alt="pcompgraphic1" width="563" height="301" /></a></p>
<p>For my Final Project, I decided to combine my ICMW and PComp classes together and produce a single idea: Meet <a href="http://itp.nyu.eud/~cw1028/pcomp/tweetchime.html" target="_blank">TweetChime</a>. TweetChime is an interactive music chime that  that will take specially coded Twitter messages people send to you and transforms them into melody where you are. What makes that so special?</p>
<p>Whether a friend wants to express &#8220;Good Luck!&#8221;, &#8220;Congratulations!&#8221;, &#8220;Have a Great Day&#8221; or &#8220;Thinking Of You&#8221;, TweetChime transforms their greeting in a harmonious patterned musical chime melody in real time. Be pleasantly surprised when you hear the ringing of notes and know that someone – out there– is thinking of you. As an owner, you can decipher what people are messaging you based on the musical melody overheard.</p>
<p><strong>Interaction: </strong>Person tweets a message through a special code setup. Example: <em>@cwong08 says, &#8220;@tweetchime 65 #tweetchime.</em><br />
Among the selected messages are examples like &#8220;Have a Good Day!&#8221; &#8220;Miss You,&#8221; &#8220;Good Luck!&#8221;, &#8220;I Love You,&#8221; that are given specific number codes etc. Currently, numbers 65-68 are coded. The owner of the TweetChime machine will log on to the <a href="http://itp.nyu.eud/~cw1028/pcomp/tweetchime.html" target="_blank">TweetChime</a> website and activate their device. From there, the TweetChime website scans an RSS feed for impending tweets  for @tweetchime and refreshes your website with appropriate melody when triggered by friends and family&#8217;s tweets.</p>
<p><strong>Under the Hood:</strong> TweetChime is powered by Javascript, PHP, and an Arduino. The <a href="http://itp.nyu.eud/~cw1028/pcomp/tweetchime.html" target="_blank">TweetChime</a> website is built with Javascript to interact serially with the Arduino (via USB port). <a href="http://itp.nyu.eud/~cw1028/pcomp/tweetchime.html" target="_blank">TweetChime </a> website uses AJAX to scoop data from a PHP script that reads a Twitter RSS feed and parses numerical codes from people&#8217;s submitted tweets.  From there, it passes those byte values to the Arduino which then outputs it into the message&#8217;s cued  melody.</p>
<p><a href="http://www.pixelpunchout.com/wp-content/uploads/2009/11/pcompmotorlayout1.jpg" title="pcompmotorlayout1" rel="lightbox[486]"><img class="alignnone size-full wp-image-533" title="pcompmotorlayout1" src="http://www.pixelpunchout.com/wp-content/uploads/2009/11/pcompmotorlayout1.jpg" alt="pcompmotorlayout1" width="500" height="500" /></a></p>
<p><strong>Setup</strong>: Arduino, PHP, Javascript, 5 wind chime tubes, servo motors, 5 mini metal tubes (strikers)</p>
<p>Each wind chime is paired with a servo motor that is wired to the Arduino.  When the Arduino checks for digital read messages, it will receive the values and trigger the servo motor to tap the chime in series. A message like &#8220;Have a Good Day!&#8221; would sound differently then a message like &#8220;Miss You.&#8221;</p>
<p>Here&#8217;s a video of me testing the sensor motors against the wind chimes I purchased to see if they&#8217;d resonate.<br />
<object width="500" height="375" data="http://vimeo.com/moogaloop.swf?clip_id=7676984&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7676984&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /></object></p>
<p><a href="http://vimeo.com/7676984">Testing Servo Motor for Final Project Use</a> from <a href="http://vimeo.com/user758179">cindy wong</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="500" height="281" data="http://vimeo.com/moogaloop.swf?clip_id=7780825&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7780825&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /></object></p>
<p><a href="http://vimeo.com/7780825">Testing Prototype: TweetChime Web/ServoMotor Interaction</a> from <a href="http://vimeo.com/user758179">cindy wong</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="500" height="281" data="http://vimeo.com/moogaloop.swf?clip_id=7790314&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7790314&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /></object></p>
<p><a href="http://vimeo.com/7790314">Physical Construction of TweetChime</a> from <a href="http://vimeo.com/user758179">cindy wong</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pixelpunchout.com/2009/11/final-project-for-physical-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
