<?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>Limina.Log &#187; Physical Computing</title>
	<atom:link href="http://log.liminastudio.com/tag/physical-computing/feed" rel="self" type="application/rss+xml" />
	<link>http://log.liminastudio.com</link>
	<description>Research &#38; Development at Limina.Studio</description>
	<lastBuildDate>Sun, 15 Jan 2012 21:25:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Using the RN-XV WiFi Module as a Remote Switch</title>
		<link>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch#comments</comments>
		<pubDate>Wed, 21 Dec 2011 00:40:57 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[RN-XV]]></category>
		<category><![CDATA[WiFi]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=959</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch' addthis:title='Using the RN-XV WiFi Module as a Remote Switch '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>It&#8217;s been a struggle, but I finally figured out how to use a Roving Networks RN-XV WiFi module as a remote switch.  It&#8217;s not hard now that I know how it works, but figuring out was quite difficult, as the manual is apparently incorrect and the firmware it shipped with was causing problems.  Read on [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch' addthis:title='Using the RN-XV WiFi Module as a Remote Switch '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://log.liminastudio.com/wp-content/uploads/2011/12/IMG_2464.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-960" title="RN-XV remote switch" src="http://log.liminastudio.com/wp-content/uploads/2011/12/IMG_2464-224x300.jpg" alt="" width="224" height="300" /></a>It&#8217;s been a struggle, but I finally figured out how to use a Roving Networks RN-XV WiFi module as a remote switch.  It&#8217;s not hard now that I know how it works, but figuring out was quite difficult, as the manual is apparently incorrect and the firmware it shipped with was causing problems.  Read on for the solution!</p>
<p><strong>Hardware</strong></p>
<p>Simple! Here&#8217;s all you need:</p>
<ul>
<li>An <a href="http://www.sparkfun.com/products/8276">XBee breakout board</a> (so you can plug it into your breadboard)</li>
<li>An <a href="http://www.sparkfun.com/products/8687">XBee Explorer</a> (not necessary with ad-hoc mode, but I had one around so this tutorial will use it)</li>
<li>3.3V regulator (ONLY—the module has a 10% tolerance, so anything beyond that will either not work or damage the module).</li>
<li>10µF and 0.1µF capacitors for good measure (clean power is especially important when using radio devices)</li>
<li>Power and Ground (Pins 1 and 10, the top and bottom pins on the left side of the module)</li>
<li>An LED connected to pin 9.  In practice you&#8217;d want to put a current-limiting resistor on it, i.e. 220 ohms, but for a quick test it won&#8217;t matter.  The module only drives 8mA on this pin.</li>
<li>That&#8217;s it!</li>
</ul>
<div><strong>Setup</strong></div>
<div></div>
<div>Although the module has an ad-hoc setup mode, where it broadcasts its own ad-hoc wifi network that you connect to with your computer, I found it faster to just plug it in directly to my computer using a serial adapter such as the XBee Explorer.  When you connect with ad-hoc mode, you talk to the module over telnet, when you use direct serial, you use a serial terminal such as <a href="http://freeware.the-meiers.org/">CoolTerm</a>, which the following instructions will use.</div>
<div></div>
<div>With your module plugged into USB, open up the port in CoolTerm.  You may see some data from the unit or a status message (it&#8217;s ok if you don&#8217;t).  Type $$$ (without hitting return) to enter command mode.  Now you can setup the module&#8217;s wifi settings (hit return after each command):</div>
<div></div>
<pre>set wlan phrase &lt;your wpa password&gt;
set wlan ssid &lt;your ssid&gt;
save
reboot</pre>
<p>&nbsp;</p>
<div></div>
<div>The module will power-cycle and the green status LED will start blinking.  After 5-10 seconds it should start blinking more slowly, which indicates that it has successfully connected to your WiFi network.  If your terminal session is still open, you should see a status message that indicates its success and its IP address (which you&#8217;ll need soon).</div>
<div></div>
<div>Now we need to update the firmware.  Luckily, they made this extremely easy!  Just do this:</div>
<div></div>
<pre>ftp u</pre>
<div></div>
<div>And it will take care of the rest—connecting to the Roving Networks FTP server, downloading the newest firmware image and &#8216;installing&#8217; it.</div>
<div></div>
<div>Once that&#8217;s done, you can transfer your module to your breadboard.  The rest of the work happens over telnet, so make sure your computer and module are connecting to the same WiFi network!  When the module is on your board and it&#8217;s joined your network, open a shell on your computer and do:</div>
<div></div>
<pre>telnet &lt;module's ip address&gt; 2000</pre>
<div></div>
<div>You should see a &#8216;*HELLO*&#8217; message.  Congratulations!  Now you can talk to your breadboarded module from anywhere!  To switch the LED on and off, first set the I/O direction mask:</div>
<div></div>
<pre>set sys mask 0x21f2</pre>
<div></div>
<div>This adds GPIO (General-Purpose Input/Output) Pin 1 (hex 0&#215;2) to the default mask, setting it as an output.  To switch it high, do:</div>
<div></div>
<pre>set sys output 2 2</pre>
<div></div>
<div>Similarly, to switch it low:</div>
<div></div>
<pre>set sys output 0 2</pre>
<div></div>
<div>And that&#8217;s it!  You can now, for instance, have a web server connect directly to that port and issue those commands dynamically to control your hardware remotely.  Try hooking up a relay to switch a house light!</div>
<p><strong>References</strong></p>
<ul>
<li><a href="http://www.rovingnetworks.com/files/resources/WiFly-RN-UM.pdf">RN-XV User Manual</a> (API reference, etc.)</li>
<li><a href="http://www.rovingnetworks.com/files/resources/WiFly-RN-XV-DS.pdf">RN-XV Datasheet</a> (pinout and electrical characteristics)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Getting started with the RN-XV WiFi Module &amp; Node.js</title>
		<link>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js</link>
		<comments>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js#comments</comments>
		<pubDate>Thu, 08 Dec 2011 04:08:54 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Sockets]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=951</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js' addthis:title='Getting started with the RN-XV WiFi Module &#38; Node.js '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>The RN-XV WiFi module is a nifty little WiFi module designed to fit the same pinout as an XBee, so it&#8217;s intended to be a drop-in replacement. Tonight I whipped up a little test of the module to get a joystick to talk to a Node.js server over WiFi.  I attached +3V power and ground [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js' addthis:title='Getting started with the RN-XV WiFi Module &amp; Node.js '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>The <a href="http://www.sparkfun.com/products/10822">RN-XV WiFi module</a> is a nifty little WiFi module designed to fit the same pinout as an XBee, so it&#8217;s intended to be a drop-in replacement.</p>
<p>Tonight I whipped up a little test of the module to get <a href="http://www.sparkfun.com/products/9032">a joystick</a> to talk to a <a href="http://nodejs.org/">Node.js</a> server over WiFi.  I attached +3V power and ground to the module (pins 1 and 10, respectively), pin 2 (TX) to Arduino digital pin 0 (RX), and pin 1 (RX) to Arduino digital pin 1 (TX).  That&#8217;s all the hardware setup you need.</p>
<p>I used <a href="https://github.com/jcrouchley/WiFly-Shield">this WiFly library</a> to handle the connection.  All it does is talk to the WiFly module over serial and send control commands, so the library abstracts that a bit.  Here&#8217;s the Arduino sketch I built:<span id="more-951"></span></p>
<pre>#include "WiFly.h"

#define PIN_VERT      0  // analog
#define PIN_HOR       1  // analog

#define PIN_PUSH      2
#define PIN_LED_RED   3
#define PIN_LED_GRN   4

int vert = 0;
int hor = 0;
bool push;

char* ssid = "yourNetwork";
char* pass = "yourPassword";

char* serverAddress = "yourServer";
int serverPort = 1337;

Client client(serverAddress, serverPort);

void setup(){
  pinMode(PIN_PUSH, INPUT);
  pinMode(PIN_LED_RED, OUTPUT);
  pinMode(PIN_LED_GRN, OUTPUT);

  digitalWrite(PIN_PUSH, HIGH);    // set pull-up resistor
  digitalWrite(PIN_LED_RED, LOW);  // start off
  digitalWrite(PIN_LED_GRN, LOW);

  Serial.begin(9600);
  WiFly.setUart(&amp;Serial);
  WiFly.begin();

  if (!WiFly.join(ssid, pass, true)) {
    digitalWrite(PIN_LED_RED, HIGH);
    while (1) {
      // Hang on failure.
    }
  }

  digitalWrite(PIN_LED_GRN, HIGH);

  if (client.connect()) {
    client.println("ohai!");
    client.println();
  } else {
    // do nothing
  }
}

void loop(){
  vert = analogRead(PIN_VERT);
  hor = analogRead(PIN_HOR);
  push = digitalRead(PIN_PUSH);

  digitalWrite(PIN_LED_RED, !push);

  client.print(vert);
  client.print('\t');
  client.print(hor);
  client.print('\t');
  client.print(push);
  client.println();
  delay(10);
}</pre>
<p>And here&#8217;s the very basic Node.js server that just prints out the values it receives:</p>
<pre>var net = require('net');

var server = net.createServer(function(socket) { //'connection' listener
	console.log('server connected');

	socket.setEncoding('ascii');

	socket.on('end', function() {
		console.log('server disconnected');
	});

	socket.on('data', function(data){
		console.log(data);
	});
});

server.listen(1337, function() { //'listening' listener
	console.log('server bound');
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Programming an ATMega With No Bootloader Using the USBtinyISP</title>
		<link>http://log.liminastudio.com/itp/physical-computing/programming-an-atmega-with-no-bootloader-using-the-usbtinyisp</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/programming-an-atmega-with-no-bootloader-using-the-usbtinyisp#comments</comments>
		<pubDate>Mon, 15 Aug 2011 03:38:09 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[ATMega]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[avrdude]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=914</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/programming-an-atmega-with-no-bootloader-using-the-usbtinyisp' addthis:title='Programming an ATMega With No Bootloader Using the USBtinyISP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>The title says it all: for my &#8220;Deconspectrum&#8221; installation, I am burning a program onto a bunch of ATMega328 chips using a USBtinyISP (In-System Programmer).  At first I was running into a perplexing problem: the program was running much slower than it should have been.  I could tell immediately because I had a short POST [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/programming-an-atmega-with-no-bootloader-using-the-usbtinyisp' addthis:title='Programming an ATMega With No Bootloader Using the USBtinyISP '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>The title says it all: for my <a href="http://log.liminastudio.com/projects/deconspectrum">&#8220;Deconspectrum&#8221; installation</a>, I am burning a program onto a bunch of ATMega328 chips using a USBtinyISP (In-System Programmer).  At first I was running into a perplexing problem: the program was running much slower than it should have been.  I could tell immediately because I had a short POST (Power-On Self Test) at the beginning of the program that flashes the LED Red-Green-Blue, and it was going far slower than it should have been.<span id="more-914"></span></p>
<p>My first thought was that there was a problem with the ATMega &#8220;fuses,&#8221; which are just settings for various esoteric details of the chip&#8217;s functioning, including clock rate.  But I had never had to bother with them before.  Then I made a further discovery that the only time the program ran correctly was if I installed the Arduino bootloader first and uploaded the program using it.  What gives?</p>
<p>Thanks to the plucky denizens of the ITP Physical Computing list, I learned that indeed, it was a matter of fuses—the Arduino IDE apparently only sets the correct fuses when burning the bootloader, not when burning a program directly using an ISP.</p>
<p>The solution: use avrdude, the program that Arduino uses to actually program the chip behind the scenes, directly.  This turned out to not only solve my problem, but to make the programming process much faster and simpler.  Avrdude takes a &#8220;hex&#8221; file as an input to transfer to the chip, which is the compiled bytecode that the ATMega actually runs.  This way, I only have to compile the program once, and burn it directly—and since I&#8217;m programming about 40 chips, this makes things far faster.</p>
<p>All you need to do is get the <a href="http://www.obdev.at/products/crosspack/index.html">AVR &#8220;CrossPack&#8221;</a> installed (for OSX; for Windows you can use AVR Studio or a number of other packages) and then find your hex file.  In the Arduino IDE, hold Shift while pressing the &#8220;Verify&#8221; button to produce a verbose debug output.  In there you&#8217;ll see a path like this:</p>
<pre>/var/folders/9t/7qf1680d2pqgd0hy6qbfkqsr0000gn/T/build5025172614724793636.tmp/myProgram.cpp.hex</pre>
<p>You can then copy that file to your project directory:</p>
<pre>cp /var/folders/.../myProgram.cpp.hex ~/Projects/myProject/myProgram.cpp.hex</pre>
<p>And program your chip like so:</p>
<pre>avrdude -c usbtiny -p m328p -b 57600 -U flash:w:myProgram.cpp.hex:i -U efuse:w:0x05:m -U hfuse:w:0xde:m -U lfuse:w:0xff:m</pre>
<p>Those settings are for the ATMega328; for the 168 use:</p>
<pre>-p m168</pre>
<p>To get a list of parts, type:</p>
<pre>avrdude -c avrisp</pre>
<p>And there you have it! You&#8217;ll find that this saves a lot of time if you have to program lots of chips. Besides, not using the Arduino bootloader will save a little space on your chip <img src='http://log.liminastudio.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/programming-an-atmega-with-no-bootloader-using-the-usbtinyisp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino: Controlling an RGB LED by Hue</title>
		<link>http://log.liminastudio.com/itp/physical-computing/arduino-controlling-an-rgb-led-by-hue</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/arduino-controlling-an-rgb-led-by-hue#comments</comments>
		<pubDate>Thu, 04 Aug 2011 19:54:08 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[RGB LED]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=902</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/arduino-controlling-an-rgb-led-by-hue' addthis:title='Arduino: Controlling an RGB LED by Hue '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Hooking up an RGB LED to an Arduino isn&#8217;t hard by itself, but controlling it can be—if you know what color you want to display, how do you know what R, G and B values that is? Here&#8217;s some Arduino code, adapted and simplified from Kasper Kamperman, that I am using in my Deconspectrum art [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/arduino-controlling-an-rgb-led-by-hue' addthis:title='Arduino: Controlling an RGB LED by Hue '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Hooking up an RGB LED to an Arduino isn&#8217;t hard by itself, but controlling it can be—if you know what color you want to display, how do you know what R, G and B values that is?</p>
<p>Here&#8217;s some Arduino code, adapted and simplified from <a href="http://www.kasperkamperman.com/blog/arduino/arduino-programming-hsb-to-rgb/">Kasper Kamperman</a>, that I am using in my <a href="http://log.liminastudio.com/projects/deconspectrum">Deconspectrum art installation</a> to do just that:<span id="more-902"></span></p>
<pre>void setLED(int hue, int l){
	int col[3] = {0,0,0};
	getRGB(hue, 255, l, col);
	ledWrite(col[0], col[1], col[2]);
}

void getRGB(int hue, int sat, int val, int colors[3]) {
	// hue: 0-259, sat: 0-255, val (lightness): 0-255
	int r, g, b, base;

	if (sat == 0) { // Achromatic color (gray).
		colors[0]=val;
		colors[1]=val;
		colors[2]=val;
	} else  {
		base = ((255 - sat) * val)&gt;&gt;8;
		switch(hue/60) {
			case 0:
				r = val;
				g = (((val-base)*hue)/60)+base;
				b = base;
				break;
			case 1:
				r = (((val-base)*(60-(hue%60)))/60)+base;
				g = val;
				b = base;
				break;
			case 2:
				r = base;
				g = val;
				b = (((val-base)*(hue%60))/60)+base;
				break;
			case 3:
				r = base;
				g = (((val-base)*(60-(hue%60)))/60)+base;
				b = val;
				break;
			case 4:
				r = (((val-base)*(hue%60))/60)+base;
				g = base;
				b = val;
				break;
			case 5:
				r = val;
				g = base;
				b = (((val-base)*(60-(hue%60)))/60)+base;
				break;
		}
		colors[0]=r;
		colors[1]=g;
		colors[2]=b;
	}
}

void ledWrite(int r, int g, int b){
	analogWrite(LED_RED, 255-r);
	analogWrite(LED_GREEN, 255-g);
	analogWrite(LED_BLUE, 255-b);
}</pre>
<p>This gives you a very straightforward setLED function that takes a Hue from 0-359 and a Lightness from 0-255 (it could easily be adapted to specify the Saturation as well, which I have fixed at the maximum).</p>
<p>Note that the ledWrite function is designed for common-anode LEDs, where the microprocessor is current-sinking instead of sourcing; if you are current-sourcing, just take out the 255-val inversion.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/arduino-controlling-an-rgb-led-by-hue/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Wireless Projects over the Web: Digi Dia for Hackers Part 1</title>
		<link>http://log.liminastudio.com/itp/physical-computing/wireless-projects-over-the-web-digi-dia-for-hackers</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/wireless-projects-over-the-web-digi-dia-for-hackers#comments</comments>
		<pubDate>Mon, 02 May 2011 21:18:20 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ConnectPort]]></category>
		<category><![CDATA[Digi Dia]]></category>
		<category><![CDATA[xbee]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=836</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/wireless-projects-over-the-web-digi-dia-for-hackers' addthis:title='Wireless Projects over the Web: Digi Dia for Hackers Part 1 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>Suppose you want to log data from a group of sensors, like temperatures around the house, or turn lights on and off remotely via a webpage, and you want to do this wirelessly.  You could use a WiFi shield for an Arduino, but they&#8217;re notoriously hard to set up and stay reliably connected. My preferred [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/wireless-projects-over-the-web-digi-dia-for-hackers' addthis:title='Wireless Projects over the Web: Digi Dia for Hackers Part 1 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><div>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/Dia_Schematic.png"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-871" title="Dia_Schematic" src="http://log.liminastudio.com/wp-content/uploads/2011/05/Dia_Schematic-275x300.png" alt="" width="275" height="300" /></a>Suppose you want to log data from a group of sensors, like temperatures around the house, or turn lights on and off remotely via a webpage, and you want to do this wirelessly.  You could use a WiFi shield for an Arduino, but they&#8217;re notoriously hard to set up and stay reliably connected.</p>
<p>My preferred way uses Digi XBee radio modules with the <a href="http://www.digi.com/products/wireless-routers-gateways/gateways/">ConnectPort gateway</a>, which connects a network of XBee modules with a LAN over ethernet.  So far, easy: build your microcontroller project that sends and receives data via an XBee ZigBee module (using &#8220;Series 2&#8243; hardware), and the ConnectPort is your mesh&#8217;s coordinator.</p>
<p>Then the question becomes how to send and receive the data from the coordinator.  If you had the coordinator plugged into a computer, you could write an interface however you liked.  Lucky for us, the ConnectPort is basically a tiny computer that runs Python!  So how do you access your project&#8217;s data via the ConnectPort over the web?<span id="more-836"></span>There are two overall approaches: transmit to another webserver, or use the ConnectPort as a webserver itself.  XBee fiend <a href="http://www.faludi.com/">Rob Faludi</a> and I developed a handy way to do the first approach, called the <a href="http://code.google.com/p/xig/">XBee Internet Gateway</a> (XIG), and Digi mastermind Jordan Husney vastly improved it.</p>
<p>XIG&#8217;s one ability is simple but hugely useful: it allows your Arduino to retreive a URL from the Internet.  Say you&#8217;re collecting temperatures from sensors via your microcontroller.  With XIG, you can post the values to a web script on a server somewhere by sending this string to the ConnectPort: &#8220;http://my.server.com/myscript.php?val1=6&amp;val2=10&amp;etc=etc&#8221;.  Your script can then optionally return some string for your Arduino to parse and use.</p>
<p>This is fast, easy, and effective!  Its only downside is that you need an external webserver to get the data moving.  For many of us, this is no problem, but wouldn&#8217;t it be nice to cut out the middleman?</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/Screen-shot-2011-05-02-at-5.03.53-PM.png"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-870" title="Screen shot 2011-05-02 at 5.03.53 PM" src="http://log.liminastudio.com/wp-content/uploads/2011/05/Screen-shot-2011-05-02-at-5.03.53-PM-300x92.png" alt="" width="300" height="92" /></a>Enter Digi&#8217;s <a href="http://www.digi.com/wiki/developer/index.php/IDigi_Dia_Wiki">Dia platform</a>.  Dia (Device Integration Application) is a Python program that runs on the ConnectPort that talks to your XBees and—the important part—runs its own web server so you can talk directly to the ConnectPort instead of using an external web server.</p>
<p>Now, Dia is a fairly new platform, and definitely designed for engineers more than hackers like ourselves.  So I did a deep dive into the platform recently and have brought the results to you!  Stay tuned for the next part!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/wireless-projects-over-the-web-digi-dia-for-hackers/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Easy programming for breadboard Arduinos</title>
		<link>http://log.liminastudio.com/itp/physical-computing/easy-programming-for-breadboard-arduinos</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/easy-programming-for-breadboard-arduinos#comments</comments>
		<pubDate>Mon, 02 May 2011 17:55:57 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[arduino]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=838</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/easy-programming-for-breadboard-arduinos' addthis:title='Easy programming for breadboard Arduinos '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>If you&#8217;ve never made a breadboard Arduino, you really ought to try it (I have a quick tutorial)—you&#8217;ll suddenly discover that you rarely need an actual (and expensive) Arduino anymore.  The Arduino is built around the Atmel ATmega microprocessor, which you can buy from various places for roughly only $4-5! However, there are a few [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/easy-programming-for-breadboard-arduinos' addthis:title='Easy programming for breadboard Arduinos '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0728.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-850" title="Breadboard Arduino + Programming Board" src="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0728-300x224.jpg" alt="" width="300" height="224" /></a>If you&#8217;ve never made a breadboard Arduino, you really ought to try it (<a href="http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun">I have a quick tutorial</a>)—you&#8217;ll suddenly discover that you rarely need an actual (and expensive) Arduino anymore.  The Arduino is built around the Atmel ATmega microprocessor, which you can buy from various places for roughly only $4-5!</p>
<p>However, there are a few things about it that aren&#8217;t obvious at first, such as how to connect it to your computer via USB and make it programmable.<br />
<span id="more-838"></span> First off, be sure that your ATmega chip has the Arduino bootloader on it.  If you bought it from a major supplier such as Mouser or Digi-Key, it does not have the bootloader.  Sparkfun (among others) sells them with bootloaders.</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0720.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-855" title="Programming Header" src="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0720-300x224.jpg" alt="" width="300" height="224" /></a>Second, you&#8217;ll need an <a href="http://www.sparkfun.com/products/9873">FTDI USB breakout board</a>.  This connects to the TX and RX serial pins on the microprocessor and supplies a USB interface and firmware that your computer can recognize and use.  You&#8217;ll need the FTDI drivers for your system, which come with the Arduino software.</p>
<p>Third: the real work.  You need to connect some pins from the USB board to your breadboard:</p>
<ul>
<li>GND</li>
<li>TX</li>
<li>RX</li>
<li>DTR</li>
<li>Optional: 5V (if your breakout board supplies it)</li>
</ul>
<p>As you can see in the photo, I soldered up a handy little header so I can plug it right into a breadboard.  The serial pins are connected like so: TX→RX, RX→TX.  DTR is connected to a .1µF capacitor that goes to the RESET pin on the ATmega (pin 1).  That pin must also be connected to +5V via a 10kΩ resistor.</p>
<p>The DTR pin is the secret sauce: it pulls the reset pin down, which the Arduino bootloader requires to be programmed.  If you didn&#8217;t have this, you&#8217;d have to reset it by hand.  This way, it&#8217;s completely automatic, just like a regular Arduino board.</p>
<p>Let me know if this works for you!  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/easy-programming-for-breadboard-arduinos/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Breadboard Arduino: Fast, Cheap and Fun</title>
		<link>http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun#comments</comments>
		<pubDate>Mon, 02 May 2011 17:34:15 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[arduino]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=849</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun' addthis:title='Breadboard Arduino: Fast, Cheap and Fun '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>If you&#8217;ve been enjoying making stuff with the Arduino, but don&#8217;t want to buy more Arduino boards just to make a new project, fear not—you don&#8217;t need them! The Arduino board is just a convenient wrapper around the ATmega microprocessor, and it&#8217;s easy to recreate on a breadboard.  Here&#8217;s what you&#8217;ll need: ATmega328 (with Arduino [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun' addthis:title='Breadboard Arduino: Fast, Cheap and Fun '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>If you&#8217;ve been enjoying making stuff with the Arduino, but don&#8217;t want to buy more Arduino boards just to make a new project, fear not—you don&#8217;t need them!</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0731.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-851" title="Breadboard Arduino" src="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0731-224x300.jpg" alt="" width="224" height="300" /></a>The Arduino board is just a convenient wrapper around the ATmega microprocessor, and it&#8217;s easy to recreate on a breadboard.  Here&#8217;s what you&#8217;ll need:<br />
<span id="more-849"></span></p>
<ul>
<li><a href="http://www.sparkfun.com/products/10524">ATmega328</a> (with Arduino bootloader)</li>
<li><a href="http://www.sparkfun.com/products/107">5V regulator</a> (i.e. L7805)</li>
<li><a href="http://www.sparkfun.com/products/8375">.1µF capacitor</a> (the little yellowish disc kind that says &#8220;104&#8243; on it)</li>
<li><a href="http://www.sparkfun.com/products/9420">16mhz resonator</a></li>
<li>10kΩ resistor</li>
<li>&gt;5V power supply (can be any power supply you have, such as wall-warts, since we&#8217;re using our own regulator)</li>
<li>Optional: <a href="http://www.sparkfun.com/products/9716">FTDI USB breakout board</a> (for programming from a computer)</li>
</ul>
<p>The bootloader is what makes the microprocessor easy to program with the Arduino environment.  You can also buy ATmegas <a href="http://www.sparkfun.com/products/9061">without the bootloader</a> for about a dollar cheaper, but they must have the bootloader manually loaded on to use Arduino.</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0728.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-850" title="Breadboard Arduino + Programming Board" src="http://log.liminastudio.com/wp-content/uploads/2011/05/IMG_0728-300x224.jpg" alt="" width="300" height="224" /></a>The resonator is a handy package that combines a crystal, which is where the microprocessor gets its clock signal from, and two capacitors, so all you have to do is plug it into the ATmega.</p>
<p>If you have an ATmega that&#8217;s already loaded with your program, you can just build this board as-is without the capacitor and leave pin 1 (RESET) connected to +5V via the 10k &#8220;pull-up&#8221; resistor.  You can even program a chip on an Arduino, remove it and plug it into your breadboard setup.</p>
<p>The one part remaining that I haven&#8217;t mentioned is the programming header I made, on the top right of the top photo (fully visible in the second photo).  This connects to the FTDI USB board I describe in my <a href="http://log.liminastudio.com/uncategorized/easy-programming-for-breadboard-arduinos">easy breadboard Arduino programming tutorial</a>.  The pins are, from top to bottom: Ground (Black), RX (White), TX (Green), DTR (Yellow).</p>
<p>Lastly, though not pictured here, it is good practice to use decoupling capacitors on your power supply to protect your microcontroller from any irregularities, as described in <a href="http://www.sparkfun.com/tutorials/57">this tutorial</a> (a few pages down).</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/breadboard-arduino-fast-cheap-and-fun/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The World&#8217;s Cheapest Wii Sensor Bar</title>
		<link>http://log.liminastudio.com/projects/the-worlds-cheapest-wii-sensor-bar</link>
		<comments>http://log.liminastudio.com/projects/the-worlds-cheapest-wii-sensor-bar#comments</comments>
		<pubDate>Tue, 19 Apr 2011 20:55:44 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[electronics]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Physical Computing]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=825</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/projects/the-worlds-cheapest-wii-sensor-bar' addthis:title='The World&#8217;s Cheapest Wii Sensor Bar '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>A few months ago I accidentally fried my Wii Sensor Bar (a misnomer as it does not contain sensors of any kind) by powering it with an unregulated 12V power supply—whoops. So instead of buying a new one, which I&#8217;m loath to do given the typical prices, I built a new one with some infrared [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/projects/the-worlds-cheapest-wii-sensor-bar' addthis:title='The World&#8217;s Cheapest Wii Sensor Bar '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p><a href="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0473.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-826" title="IMG_0473" src="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0473-300x224.jpg" alt="" width="300" height="224" /></a>A few months ago I accidentally fried my Wii Sensor Bar (a misnomer as it does not contain sensors of any kind) by powering it with an unregulated 12V power supply—whoops.  So instead of buying a new one, which I&#8217;m loath to do given the typical prices, I built a new one with some <a href="http://www.radioshack.com/product/index.jsp?productId=2062565">infrared LEDs</a>, a <a href="http://www.sparkfun.com/products/8269">regulated power supply</a> and—yes—a piece of cardboard.</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0481.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-828" title="IMG_0481" src="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0481-300x224.jpg" alt="" width="300" height="224" /></a>Just solder up each LED after a 220 ohm resistor in parallel with each other—not in series.  This can be done with two &#8220;rail&#8221; wires, one connecting the positive leads, one connecting the grounds.  Then connect the rails to a standard barrel power connector and plug in your power supply.  I also added a green LED for visible power feedback.  Enjoy!</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0483.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-829" title="IMG_0483" src="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0483-300x224.jpg" alt="" width="300" height="224" /></a><a href="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0488.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-831" title="IMG_0488" src="http://log.liminastudio.com/wp-content/uploads/2011/04/IMG_0488-224x300.jpg" alt="" width="224" height="300" /></a></p>
<p><br style="clear:both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/projects/the-worlds-cheapest-wii-sensor-bar/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to read a chain of TMP421 Temperature Sensors with an Arduino</title>
		<link>http://log.liminastudio.com/programming/how-to-read-a-chain-of-tmp421-temperature-sensors-with-an-arduino</link>
		<comments>http://log.liminastudio.com/programming/how-to-read-a-chain-of-tmp421-temperature-sensors-with-an-arduino#comments</comments>
		<pubDate>Thu, 07 Apr 2011 21:12:56 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Sensors]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=815</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/programming/how-to-read-a-chain-of-tmp421-temperature-sensors-with-an-arduino' addthis:title='How to read a chain of TMP421 Temperature Sensors with an Arduino '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>I recently made some minor modifications to the Liquidware Arduino Temperature Sensor Library which is designed to read from a single TMP421 sensor from Modern Device (the chip is made by TI).  You can download my modified library, LibTemperature2. Instantiate a LibTemperature2 object with the address of the sensor, which is determined by the A0 [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/programming/how-to-read-a-chain-of-tmp421-temperature-sensors-with-an-arduino' addthis:title='How to read a chain of TMP421 Temperature Sensors with an Arduino '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>I recently made some minor modifications to the Liquidware Arduino Temperature Sensor Library which is designed to read from a single TMP421 sensor from Modern Device (the chip is made by TI).  You can download my modified library, <a href="http://log.liminastudio.com/wp-content/uploads/2011/04/LibTemperature2.zip">LibTemperature2</a>.</p>
<p>Instantiate a LibTemperature2 object with the address of the sensor, which is determined by the A0 and A1 pins on the breakout board according to this chart:</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/04/Screen-shot-2011-04-07-at-5.07.59-PM.png"  rel="lightbox[roadtrip]"><img class="size-full wp-image-817 alignnone" title="Screen shot 2011-04-07 at 5.07.59 PM" src="http://log.liminastudio.com/wp-content/uploads/2011/04/Screen-shot-2011-04-07-at-5.07.59-PM.png" alt="" width="394" height="259" /></a></p>
<p>&#8217;0&#8242; means Ground, &#8217;1&#8242; means Vcc, and &#8216;Float&#8217; means unconnected.  So to address 0x1C (0011100b), connect A0 to ground and leave A1 unconnected.  Note that the default address is 0x2A.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/how-to-read-a-chain-of-tmp421-temperature-sensors-with-an-arduino/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing Cryptophasia</title>
		<link>http://log.liminastudio.com/projects/developing-cryptophasia</link>
		<comments>http://log.liminastudio.com/projects/developing-cryptophasia#comments</comments>
		<pubDate>Tue, 29 Mar 2011 20:20:31 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Installation Art]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Physical Computing]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=806</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/projects/developing-cryptophasia' addthis:title='Developing Cryptophasia '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>&#8220;Cryptophasia&#8221; is the working title of a language machine installation that I&#8217;ve been working on. Cryptophasia, according to Wikipedia, is &#8220;a peculiar phenomenon of a language developed by twins (identical or fraternal) that only the two children could understand. The word has its roots from crypto meaning secret and phasia meaning speech disorder. Most linguists [...]]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://log.liminastudio.com/projects/developing-cryptophasia' addthis:title='Developing Cryptophasia '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div><p>&#8220;Cryptophasia&#8221; is the working title of a language machine installation that I&#8217;ve been working on.  Cryptophasia, according to <a href="http://en.wikipedia.org/wiki/Cryptophasia">Wikipedia</a>, is &#8220;a peculiar phenomenon of a language developed by twins (identical or fraternal) that only the two children could understand. The word has its roots from crypto meaning secret and phasia meaning speech disorder. Most linguists associate cryptophasia with idioglossia, which is literally the same, but cryptophasia also includes mirrored actions like twin-walk and identical mannerisms. Little is known about cryptophasia.&#8221;</p>
<p>The installation consists of two motorized drafting machine arms that write to each other, emerging their own glyphic writing system as they do so.  It is a continuation of my &#8220;language machines&#8221; research/art.</p>
<p>These are closeups of the joints of the drafting machine arm:<br />
<a href="http://log.liminastudio.com/wp-content/uploads/2011/03/IMG_0428.jpg"  rel="lightbox[roadtrip]"></a></p>

<a href='http://log.liminastudio.com/projects/developing-cryptophasia/attachment/img_0428' title='IMG_0428'><img width="150" height="150" src="http://log.liminastudio.com/wp-content/uploads/2011/03/IMG_0428-150x150.jpg" class="attachment-thumbnail" alt="IMG_0428" title="IMG_0428" /></a>
<a href='http://log.liminastudio.com/projects/developing-cryptophasia/attachment/img_0430' title='IMG_0430'><img width="150" height="150" src="http://log.liminastudio.com/wp-content/uploads/2011/03/IMG_0430-150x150.jpg" class="attachment-thumbnail" alt="IMG_0430" title="IMG_0430" /></a>
<a href='http://log.liminastudio.com/projects/developing-cryptophasia/attachment/img_0432' title='IMG_0432'><img width="150" height="150" src="http://log.liminastudio.com/wp-content/uploads/2011/03/IMG_0432-150x150.jpg" class="attachment-thumbnail" alt="IMG_0432" title="IMG_0432" /></a>

]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/projects/developing-cryptophasia/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

