<?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>GregRob: Large Format Photography</title>
	<atom:link href="http://gregrob.ca/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregrob.ca/blog</link>
	<description>Shoot big!</description>
	<lastBuildDate>Thu, 06 Sep 2012 03:15:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Chronodot RTC for Viobot</title>
		<link>http://gregrob.ca/blog/2012/09/chronodot-rtc-for-viobot/</link>
		<comments>http://gregrob.ca/blog/2012/09/chronodot-rtc-for-viobot/#comments</comments>
		<pubDate>Thu, 06 Sep 2012 02:01:40 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=598</guid>
		<description><![CDATA[Viobot is being designed to send output, such as the webcam stream back to a tablet or other network connected device. She is also going to take input suggestions on what to do/say from the same device. So all this required network connectivity. At the moment she simply logs into my home network and away [...]]]></description>
			<content:encoded><![CDATA[<p>Viobot is being designed to send output, such as the webcam stream back to a tablet or other network connected device.  She is also going to take input suggestions on what to do/say from the same device.  So all this required network connectivity.  At the moment she simply logs into my home network and away we go, but this will need to change if she is away from home.  So in the future she will be her own WiFi hotspot, and instead of logging into my home network other devices will log into her.  </p>
<p>But if she is the network, then this means she will not have access to NTP (Network Time Protocol), and the Raspberry Pi, which is her brain, doesn&#8217;t come with a real time clock(RTC).  So I order an I2C connected <a href="https://www.adafruit.com/products/255">Chronodot</a> from <a href="http://www.adafruit.com/">Adafruit</a>, and now Viobot has her own accurate RTC, and she no longer depends on NTP for time information.</p>
<p><a href="http://www.flickr.com/photos/macetech/5396629003/"><img src="http://farm6.staticflickr.com/5173/5396629003_86712776db_m.jpg" alt="Chronodot" /></a><br />
Image from flickr user <a href="http://www.flickr.com/photos/macetech/">macetech</a></p>
<p>The actual wiring of the Chronodot to the Raspberry Pi was simple.  I connected the GND and VCC pins to my 3.3V bus, and I connected the SDA and SCL pins from the Chronodot to the SDA(pin 3) and SCL(pin 5)  pins on the Raspberry Pi GPIO header.</p>
<p>Getting this clock to work with the Raspberry Pi was pretty simple, but did take a big of digging around different sites for all the right information.  So here I will present what I did to get the Chronodot to work with the Raspberry PI on Viobot.</p>
<p>Some background first:  Viobot&#8217;s OS is the GNU/Linux variant from the Raspberry PI foundation called, &#8220;<a href="http://www.raspberrypi.org/downloads">Raspbian wheezy</a>&#8221;</p>
<p>My kernel and image are fully up to date, which is done by running the following as root:</p>
<pre>apt-get update &#038;&#038; apt-get dist-upgrade 
rpi-update</pre>
<p>After the rpi-update command you have to reboot the Raspberry Pi, and we see the kernel is now version 3.2.27+</p>
<pre>gregrob@rPI-a3d79a ~ $ uname -r
3.2.27+</pre>
<p>Now I added some i2c packages</p>
<pre>apt-get install i2c-tools libi2c-dev</pre>
<p>By default the Raspberry Pi Raspbian config doesn&#8217;t load the I2C modules at boot.  To change this we need to comment out or delete the I2C entry from the file: /etc/modprobe.d/raspi-blacklist.conf</p>
<p>And here we see I have commented out the I2C line:</p>
<pre>root@rPI-a3d79a:/etc/modprobe.d# cat /etc/modprobe.d/raspi-blacklist.conf
# blacklist spi and i2c by default (many users don't need them)

blacklist spi-bcm2708
#blacklist i2c-bcm2708</pre>
<p>In addition to the i2c-bcm2708 module we also want to specify some additional modules to load, and we do this by adding them to the file: /etc/modules</p>
<pre>root@rPI-a3d79a:/etc# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
8192cu
i2c-bcm2708
i2c-dev
rtc-ds1307</pre>
<p>So the basic i2c module is loaded, the i2c-dev module is loaded, and finally the real time clock module is loaded.  Here it appears we are loading the driver for only a ds1307 RTC module, but if you look into the source in the module you see the module now supports quite a few clock chips:</p>
<pre>enum ds_type {
         ds_1307,
         ds_1337,
         ds_1338,
         ds_1339,
         ds_1340,
         ds_1388,
         ds_3231,
         m41t00,
         rx_8025,
         // rs5c372 too?  different address...
};</pre>
<p>And the Chronodot is a DS3231, which is in the list.  </p>
<p>The final step to get the RTC clock online is to let the i2c subsystem know it is out there on the bus.  We do this by adding the following command to the /etc/rc.local file:</p>
<pre>echo ds3231 0x68 > /sys/class/i2c-adapter/i2c-0/new_device</pre>
<p>We can now reboot, and after the system comes up I found my RTC had been set to the NTP automatically.  Thus the RTC was now aware of the actual time, and going forward I could now shutdown NTP and set the system clock from the RTC at startup.  So I removed the current fake hardware clock and NTP files from the init folders by using the following commands:</p>
<pre>update-rc.d -f  fake-hwclock remove
update-rc.d -f  ntp remove</pre>
<p>Then I added another line to rc.local to read the RTC time into the system time:</p>
<pre>/sbin/hwclock -s</pre>
<p>A final reboot, and the Raspberry Pi came up, and without NTP running the system clock was correct.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/09/chronodot-rtc-for-viobot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tripping over her own feet</title>
		<link>http://gregrob.ca/blog/2012/09/tripfeet/</link>
		<comments>http://gregrob.ca/blog/2012/09/tripfeet/#comments</comments>
		<pubDate>Wed, 05 Sep 2012 15:18:59 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=592</guid>
		<description><![CDATA[Viobot had a little technological stumble, partly expected, but then becoming frustrating. As previously mentioned I am adding IR proximity sensors as &#8220;bumpers&#8221; to the front and back of Viobot to make sure she doesn&#8217;t run into things, and that she doesn&#8217;t drive off any edges. Here is the front bumper assembly with 4 IR [...]]]></description>
			<content:encoded><![CDATA[<p>Viobot had a little technological stumble, partly expected, but then becoming frustrating.  As previously mentioned I am adding IR proximity sensors as &#8220;bumpers&#8221; to the front and back of Viobot to make sure she doesn&#8217;t run into things, and that she doesn&#8217;t drive off any edges.</p>
<p>Here is the front bumper assembly with 4 IR proximity sensors:<br />
<a href="http://www.flickr.com/photos/gregrob/7918956286/"><img src="http://farm9.staticflickr.com/8446/7918956286_b4bac97ded.jpg" alt="Viobot Front Bumper" /></a></p>
<p>So these sensors sit such that each pair is riding directly in front of the main robot running wheels.  These are simple sensors that drive a line high if anything comes within 10cm of them.  A single pair sits at the back of Viobot  along her centre line.  The sensors facing down detect that the ground is present, and the sensors facing outwards from Viobot detect if any object / wall / cat / etc&#8230; get too close.  these all work fine, and charging full speed at a precipice the Arduino was able to stop the wheel motors in time to avert catastrophe.</p>
<p>So what is the problem?  Well as also previously mentioned one of Viobot&#8217;s three means of sensing her environment is an IR distance sensor.  This sensor is co-mounted with the webcam on a pan/tilt head and cam measure the distance to object out to 30cm away.<br />
<a href="http://www.flickr.com/photos/gregrob/7756629524/"><img src="http://farm9.staticflickr.com/8302/7756629524_422ab81f7b.jpg" alt="IR ranging and webcam" /></a></p>
<p>Since this sensor is also IR I expected there was a fair chance it would get interference from the proximity sensors, and it does.  So, this was expected and I try a simple fix next, but a baffle between the proximity sensors and the ranging sensor, but no luck as expected.</p>
<p>At this point there are two approaches I could take, one is fairly simple which is to wire up the power feed to the front bumper such that it is controlled by an Arduino signal.  A resistor and transistor should do the trick quite simply.  But having read some of the info on the proximity sensors I know that they come with an &#8220;enable&#8221; connection which can be activated and wired out.  In my mind the first is simpler to implement, but the second is more elegant.  being the geek I am I went for the elegant solution.  </p>
<p>This meant un-mounting all four front bumper IR sensors, cutting the trace that was holding the enable signal high, and soldering on new leads to a small pad on the bottom of the circuit board to bring the enable signal out to an Arduino pin.  Once this was done I modified my Arduino sketch to enable the bumpers at start-up, and to disable them 40ms prior to taking a range reading from the ranging sensor.</p>
<p>The IR range sensor still didn&#8217;t work.</p>
<p> <img src='http://gregrob.ca/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>So it turns out the enable pin on the proximity sensors puts them into a low power mode, but does not appear to actually stop the IR transmitters.  Thus the interference continues even when the sensors are disabled.  So now I&#8217;ll have to go back and implement the control on the power feed to the front bumper, and all the time I spent on the &#8220;elegant&#8221; solution is wasted.</p>
<p>I have also uncovered a couple of power bugs that I need to trace down.  1) For some reason the 5V feed from the SSC-32 is actually producing 6 volts.  2) When the Raspberry PI is powered, but I have the 5V devices shut down at the battery, there is still 1.2 volts appearing on the 5V rail.  </p>
<p>The SSC-32 is now buried pretty deep in Viobot&#8217;s guts.  Where it is now I have access to the servor headers, but nothing else.  I am not looking forward to pulling it out to figure out the 6V problem.  And on the 1.2V problem I have already disconnected many leads that connect between the two halves of Viobot, but have not yet found where this power is flowing from.</p>
<p>Howto: So nothing has to be disconnected, but a lot of things have to be moved around to get at the SSC-32.  1) Drop the battery pack off the rear bumper to make room for -> 2) Rotate the Raspberry PI up on the hinged stand offs to clear the -> 3) Lift the pan/tilt assembly up an away from the top of the SSC-32 and finally -> 4) Access the SSC-32.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/09/tripfeet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A week of highs and lows</title>
		<link>http://gregrob.ca/blog/2012/09/highslows/</link>
		<comments>http://gregrob.ca/blog/2012/09/highslows/#comments</comments>
		<pubDate>Mon, 03 Sep 2012 02:36:18 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=573</guid>
		<description><![CDATA[In my view of the world of photography it has been a week of highs and of lows. There has been good news, and wonderful photos to be seen, there has been bad news, and feelings of dread for the future. So to start with the bad news, Kodak annouced, in a cryptic manner, that [...]]]></description>
			<content:encoded><![CDATA[<p>In my view of the world of photography it has been a week of highs and of lows.  There has been good news, and wonderful photos to be seen, there has been bad news, and feelings of dread for the future.</p>
<p>So to start with the bad news, Kodak annouced, in a cryptic manner, that they are planning to sell their film and paper business. <a href="http://www.kodak.com/ek/US/en/Kodak_Takes_Next_Steps_toward_Successful_Emergence.htm">http://www.kodak.com/ek/US/en/Kodak_Takes_Next_Steps_toward_Successful_Emergence.htm</a>.<br />
Now actually the press release was last week, but it takes some time to really appreciate what this may mean in the bigger scope of silver based photography.  It is this week that their announcement has begun to strike me as something very bad.  Kodak is currently in bankruptcy protection, and in case you don&#8217;t know, that means they are not bankrupt, but are re-organising in order to avoid becoming bankrupt.  Many were hopeful that bankruptcy protection would have allowed them to restructure and right-size the film and paper business to match today&#8217;s actual market for such, which is very different than the market that their machinery and organisation was created to support.  But instead they are throwing in the towel, and I can&#8217;t imagine anybody who would be looking to buy it.</p>
<p>The second bad news of the week, which struck me much harder than the Kodak announcement, as I do not actually shoot very much Kodak film any more, was that Efke is going to shut down their production of paper and film.  Their coater has broken, and they do not think it is worth the investment to fix it based on their current revenue projections.  Now you may say, I thought you mainly shoot Ilford, what does Efke have to do with anything?  Well the thing is, I have shot Efke once to try it out, but that is not my interest; my interest is in <a href="http://new55project.blogspot.ca/">New55</a> which is a project led by Bob Crowley to produce a modern replacement for Polaroid Type 55 positive/negative film, which was an excellent product for use in 4&#215;5 cameras.  It was like using any other Polaroid product in that you had an instant result, but it was like almost no other product in that the result was a beautiful 4&#215;5 negative. </p>
<p><a href="http://www.flickr.com/photos/gregrob/5574572045/in/pool-new55">Efke 25 shot, developed in a monobath</a>:<br />
<a href="http://www.flickr.com/photos/gregrob/5574572045/in/pool-new55"><img src="http://farm6.staticflickr.com/5105/5574572045_d67cc04037.jpg" alt="Callum &#038; Gemma" /></a></p>
<p>So how do Efke and New55 come together?  Well the thing was in the planned New55 product the actual film inside the envelope was likely going to be Efke film.  And if Efke is no longer going to be producing film then Bob is going to have to find some other source of film.  It can&#8217;t just be any film, for what he is trying to do it needs to have certain characteristics that the Efke film has/had and that modern black &#038; white films do not.  Thus the death of Efke may be the death of New55.</p>
<p>But now we come to the positives, and the for the first, which I thought was just wonderful, we come back to New55; We are told by Bob on the <a href="http://new55project.blogspot.ca/2012/09/zoe-wisemans-new55-experience.html">New55 blog</a>, that a handmade batch of New55 was produced and a few envelopes were sent out to some real world photographers.  And here we have actual results that look wonderful of actual use of New55: (Warning link NSFW) <a href="http://www.zoewiseman.com/ZW/2012/09/02/new55-film/">http://www.zoewiseman.com/ZW/2012/09/02/new55-film/</a></p>
<p>New55 and Polaroid Type 55 positives side by side:<br />
<a href="http://www.zoewiseman.com/ZW/2012/09/02/new55-film/"><img src="http://www.zoewiseman.com/ZW/wp-content/uploads/2012/09/new55andtype55sidexside.jpg" alt="New55 and Polaroid55 side by side" width="560" height="440" /></a><br />
<a href="http://www.zoewiseman.com/ZW/">©2012 Zoe Wiseman</a></p>
<p>Reading Zoe&#8217;s blog this morning made me want to go out and shoot today, it showed me that all is not lost, and art with large format cameras is still here today with us.  It also gave me hope that Bob is the right person to figure out how to get New55 off the ground despite the pitfalls currently occurring.</p>
<p>The other good news this week, and this is not as great as what is happening with New55, but is still pretty good; <a href="http://the-impossible-project.com/">The Impossible Project</a> announced the general availability of their <a href="http://shop.the-impossible-project.com/newsletters/?date=2012-08-30&#038;start=0">8&#215;10 instant film</a> solution.  The price is quite high, and at first glance the quality still has a long way to go, but it was enough to show that things are moving in the right direction, and that despite the bad news this week, film is not yet dead.  I even ended up ordering a box of 10 sheets, to be be shipped Sept 12th, and look forward to the adventure that should be.</p>
<p>FYI, here are a couple of old posts in which the image shown was shot using Polaroid Type 55:<br />
<a href="http://gregrob.ca/blog/2009/07/on-flickr/">http://gregrob.ca/blog/2009/07/on-flickr/</a><br />
<a href="http://gregrob.ca/blog/2009/03/macro-test-image/">http://gregrob.ca/blog/2009/03/macro-test-image/</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/09/highslows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Angel sat for me</title>
		<link>http://gregrob.ca/blog/2012/08/an-angel-sat-for-me/</link>
		<comments>http://gregrob.ca/blog/2012/08/an-angel-sat-for-me/#comments</comments>
		<pubDate>Mon, 27 Aug 2012 05:18:46 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[4x5]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=548</guid>
		<description><![CDATA[I went on a Photo Walk this morning with the Brampton Photo group, and was able to take this lovely portrait of an angel.]]></description>
			<content:encoded><![CDATA[<p>I went on a Photo Walk this morning with the <a href="http://www.bramptonphotogroup.com/">Brampton Photo group</a>, and was able to take this lovely portrait of an angel.</p>
<p><a href="http://www.flickr.com/photos/gregrob/7869295662/"><img src="http://farm9.staticflickr.com/8423/7869295662_a086d335ff_z.jpg" alt="Angel" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/08/an-angel-sat-for-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Viobot Arduino Sketch V0.1</title>
		<link>http://gregrob.ca/blog/2012/08/viobot-arduino-sketch-v0-1/</link>
		<comments>http://gregrob.ca/blog/2012/08/viobot-arduino-sketch-v0-1/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 13:54:48 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=541</guid>
		<description><![CDATA[This is the current sketch on the Arduino. This is simply to demonstrate that the sensors are working, and to power the wheel motor relay. A lot of work is still to be done here before we have an autonomous robot. /* Viobot test sketch Turns on and off a light emitting diode(LED) Measures distance [...]]]></description>
			<content:encoded><![CDATA[<p>This is the current sketch on the Arduino. This is simply to demonstrate that the sensors are working, and to power the wheel motor relay. A lot of work is still to be done here before we have an autonomous robot.</p>
<pre>/* Viobot test sketch

Turns on and off a light emitting diode(LED)
Measures distance using IR sensor
Measure distance using ultrasonic sensor
Energise relay for wheel motors

*/

// constants won't change
int pingDPin = 4;
int relayDPin =3;
int ledDPin = 2;
int ir1APin = 0;

// Variables will change:
unsigned long currentMillis;
long previousMillisLED = 0; // will store last time LED was updated
long previousMillisPing = 0; // will store the last time the Ping was run
long previousMillisIR1 = 0; // will store the last time the IR1 sensor was run
long duration, pingcm;
float ir1voltage;
int ir1cm;

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long intervalLED = 500; // interval at which to blink (milliseconds)
long intervalPing = 2000; // interval at which to measer sonar distance
long intervalIR1 = 100; // interval at which to measure Sharp IR distance
int state = 0; // heartbeat LED state (previously scanned multiples LEDs)
// this array is an encoding of the Sharp GP2D120 IR Range Sensor voltage to distance as measured
// the key is 10 * the measured voltage
// valid values should be 4 thru 30cm
int sharpGP2D120[32] = {0, 0, 30, 27, 24, 17, 14, 11, 10, 9, 8, 8, 7, 7, 7, 6, 6, 5, 5, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

void setup() {
// set the digital pin as output:
 pinMode(pingDPin, INPUT);
 pinMode(relayDPin, OUTPUT);
 digitalWrite(relayDPin, HIGH); // motors can run
 pinMode(ledDPin, OUTPUT);
 digitalWrite(ledDPin, LOW); // Arduino heartbeat LED off
 Serial.begin(115200);
}

void loop()
{
 currentMillis = millis(); // start of loop get the current time

 if(currentMillis - previousMillisLED &gt; intervalLED) {
   // save the last time you blinked the LED
   previousMillisLED = currentMillis;
   state = state + 1;
   if(state == 3) {
     state = 1;
   }
   switch (state) {
     case 1:
       digitalWrite(ledDPin, LOW);
       break;
     case 2:
       digitalWrite(ledDPin, HIGH);
       break;
   }
 } // end of if blink LEDs, the LED code is more complex than necessary as it previously did a lot more
 // and may again do more in the future
 currentMillis = millis();

 if(currentMillis - previousMillisPing &gt; intervalPing) {
   // save the last time you measured the distance
   previousMillisPing = currentMillis;
   pinMode(pingDPin, OUTPUT); // send a short high pulse to the sensor to tell it to begin a measurement cycle
   digitalWrite(pingDPin, LOW);
   delayMicroseconds(2); // these are very short delays
   digitalWrite(pingDPin, HIGH);
   delayMicroseconds(5);
   digitalWrite(pingDPin, LOW);
   pinMode(pingDPin, INPUT);
   duration = pulseIn(pingDPin, HIGH, 17400); // timeout = 3 m * 100 cm/m * 29 ms/cm * 2(roundtrip)
   if(duration != 0) {
     pingcm = (duration / 29 / 2) + 1; // 29 microseconds per cm, divide by 2 for round trip, plus 1 cm fudge factor
     Serial.print("Ping: ");
     Serial.print(pingcm);
     Serial.println(" cm");
   }
 } // End of if PING
 currentMillis = millis();

 if(currentMillis - previousMillisIR1 &gt; intervalIR1) {
   // save the last time you measured the distance
   previousMillisIR1 = currentMillis;
   ir1voltage = analogRead(ir1APin) / 1024.0 * 3.0; // (measured_voltage / steps * max_output_voltage)
   if(ir1voltage&gt;0.25) {
     ir1cm = sharpGP2D120[int(ir1voltage*10+0.5)];
     if(ir1cm &gt; 0) {
       Serial.print("IR1: ");
       Serial.print(ir1cm);
       Serial.println(" cm");
     }
   }
 } // End of if IR1
} // End of sketch</pre>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/08/viobot-arduino-sketch-v0-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lotsa Wiring Today</title>
		<link>http://gregrob.ca/blog/2012/08/lotsawiring/</link>
		<comments>http://gregrob.ca/blog/2012/08/lotsawiring/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 05:13:50 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=535</guid>
		<description><![CDATA[We got back from a week up at camp on Geneva lake yesterday, and feeling full of energy I spent a significant portion of the day wiring the majority of the components of Viobot together. As far as physical connections, still to come are: 1) IR sensors for front bumpers. 2) A 6000 mAh LiPo [...]]]></description>
			<content:encoded><![CDATA[<p>We got back from a week up at camp on Geneva lake yesterday, and feeling full of energy I spent a significant portion of the day wiring the majority of the components of Viobot together.  </p>
<p><a href="http://www.flickr.com/photos/gregrob/7812517014/"><img src="http://farm9.staticflickr.com/8431/7812517014_6055c098ee_z.jpg" alt="Integrated Viobot" /></a></p>
<p>As far as physical connections, still to come are: 1) IR sensors for front bumpers. 2) A 6000 mAh LiPo battery and charging system to run the Raspberry Pi, I expect it to come in the mail on Monday.  3) I still haven&#8217;t found a USB WiFi adapter that works well with a Raspberry Pi.  I have ordered a couple of old b/g adapters online but do not know when one may arrive.</p>
<p>The next step is software integration, and more about that will come in a subsequent post.  For now some details on the system integration.</p>
<p>I decided that instead of trying to get the sensors to work with the Raspberry Pi, that I would instead hook them up to an Arduino Nano.  This eliminates all of the headaches of trying to get realtime sensors that need precise timing to work with a non-realtime operating system.  In addition I decided that the Arduino should be capable of stopping Viobot from crashing into objects.  So the Arduino controls a relay which in turn controls the power flow to the wheel motors.  Thus in case of impending doom the Arduino will first try and tell the Raspberry PI to stop the motion, but if the Raspberry Pi doesn&#8217;t react in time the Arduino will cut the power to the wheels.  At the same time power to the motors in the sensor pan/tilt heads will remain on.</p>
<p>So integration: <strong>Part 1, Power</strong><br />
The lower level of Viobot consists of the Lynxmotion SSC-32 Servo motor controller, the Arduino Nano, and a relay board.  These are all running off of 5V.  The supply for this power comes from 4xAA batteries mounted under Viobot&#8217;s deck.  The 6V from the AAs is fed to a power switch and then splits 3 ways: 1) Direct to the SSC-32 Logic input, which feeds a 5V regulator on the SSC-32 and from there all of the logic chips on board.  2) Direct to to 1/2 of the motor power inputs on the SSC-32. This feeds the motors on the pan/tilt heads.  3) To the relay controlled by the Arduino.  Then from the normally open terminal of the relay to the second 1/2 of the motor power inputs on the SSC-32.  This feeds Viobot&#8217;s wheel motors.</p>
<p>The 5V regulated supply on the SSC-32 is available on some header pins in the middle of the board, and from here some jumpers feed 5V into the Arduino Nano, and also feeds the 5V supply required by the relay board.  This  ground at this point also connects to the upper level of Viobot.</p>
<p>On the top level of Viobot we are dealing with 5V supply, but with a 3.3V logic levels.  The 5V is brought in through a USB hub which is acting both as a hub for the Raspberry Pi, and also the power supply for the Raspberry Pi.  I hacked a <a href="http://www.canadacomputers.com/product_info.php?cPath=48_794_259&#038;item_id=038391">$9.99 hub</a> that I had picked up from Canada Computers. So that it could take in external power, without taking power out of the PI USB port.  One of the leads feeds the Micro-B power supply connector on the Pi, and another lead was lenghted, and the power cut to feed serial communications to the Arduino Nano.  The following illustrates the idea:<br />
<a href="http://www.flickr.com/photos/gregrob/7812664240/"><img src="http://farm9.staticflickr.com/8285/7812664240_c17ab475ab_c.jpg" alt="USB hub hacked" /></a><br />
I have not tested this under full load yet.</p>
<p><strong>Part 2, Logic</strong><br />
The second part of the integration was to wire all the separate components signals together.  The Arduino Nano is sitting on a small breadboard so this was plug-and-play action.  I also have a small breadboard power strip on the lower level for 5V power.  Another small power strip on the top level provides connections for 3.3V power.  I have a cut out in the plexi-glass above the Raspberry Pi that allows easy access to the GPIO pins and plugged jumper wires directly onto them.</p>
<p>The signal connection from the Raspberry Pi to the Arduino is USB, and was completed by simply plugging in the lengthened Mini-B connected from the USB hub into the Nano.  There is no power on this lead as the 5V devices are running from the AA batteries.  This connection appears as /dev/ttyUSB0 on the pi, and as the primary hardware serial port in the nano.  The USB link is used to program the Nano from the Pi using command line Makefile from <a href="http://mjo.tc/atelier/2009/02/arduino-cli.html">Martin&#8217;s Atelier.</a>  This same USB link is then later used for the nano to communicate sensor data back to the pi.</p>
<p>The signal connection from the Raspberry Pi to the Lynxmotion SSC-32 is TTL serial, but the pi is 3.3V and the SSC-32 is 5V, so a <a href="http://www.robotshop.com/ca/productinfo.aspx?pc=RB-Spa-144&#038;lang=en-US">level converter</a> had to be used.  So the TxD and RxD pins on the GPIO are connected to low voltage side of the converter, and then from the high voltage side we connect to the RxD and TxD pins on the SSC-32.  This connection appears as /dev/AMA0 on the pi.  </p>
<p>The sensors connect very easily to the Nano.  The Sharp IR sensor connects to an analog pin, and produces a voltage from 0 to 3 volts representing the distance measured by the sensor.  The Parallax Ping))) is connected to a digital pin, and the length of the pulse received is equal to the time is took for the sound waves to travel from the transmitter to the target and back to the receiver.  The relay is connected to a digital pin which at this point is energised as long as the nano is running.  There is also a hearbeat LED on another digital pin so that I know my sketch is operating.</p>
<p>At the end of the day today I have used minicom on the Pi to observe sensor readings coming from the nano on /dev/ttyUSB0, and also used it to send motor commands to the SSC-32 on /dev/ttyAMA0.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/08/lotsawiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Viobot the robot</title>
		<link>http://gregrob.ca/blog/2012/08/viobot-the-robot/</link>
		<comments>http://gregrob.ca/blog/2012/08/viobot-the-robot/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 04:02:02 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=528</guid>
		<description><![CDATA[Gemma and I are embarking on a project to build an autonomous wheeled robot. This robot has been named Viobot by Gemma. The name is a combination of Violet, and Boe-bot. Violet was the name that Gemma preferred for Callum had he turned out to be a girl, and the primary physical chassis for this [...]]]></description>
			<content:encoded><![CDATA[<p>Gemma and I are embarking on a project to build an autonomous wheeled robot.  This robot has been named Viobot by Gemma.  The name is a combination of Violet, and Boe-bot.  Violet was the name that Gemma preferred for Callum had he turned out to be a girl, and the primary physical chassis for this robot is a <a href="http://www.parallax.com/go/boebot">Parallax Boe-Bot</a>.</p>
<p>So the base assembly here is going to be a Boe-bot two-wheel chassis and motors. The Boe-Bot I purchased is the parts only kit.  It doesn&#8217;t come in the retail box, it doesn&#8217;t include the 300 page manual/textbook, it doesn&#8217;t include the Boe-Board, it doesn&#8217;t have a USB interface.  It does cost only half the price of the full Boe-Bot kit, and what I plan to stack on top is a few orders of magnitude more powerful than the standard kit.</p>
<p>Instead of the Boe-Board I am using two different components.  To drive the servo-motors I purchased a <a href="http://www.lynxmotion.com/p-395-ssc-32-servo-controller.aspx">Lynxmotion SSC-32 servo motor controller</a>.  This is a really dynamic board with a TTL serial interface that can be used for simple commands, or with complex stored sequencing.  The SSC-32 is a significant upgrade from the 4 simple servo ports in the standard kit.  This board may have a future in a walking robot but that will not be soon as I cannot afford that many servos.  </p>
<p>The second component replacing functions on the Boe-Board is the brains, in this case a <a href="http://www.raspberrypi.org/">Raspberry PI</a> GNU/Linux computer.  This is a full fledged computer, which gives us a ton of flexibility in development, and taps into the enormous reservoir of pre-exisiting applications and source code.  Again a significant upgrade from the Basic stamp used for brains in the standard kit.</p>
<p>Here are a few pics of the project so far.  At this point we have a fancy remote-control car driven over bluetooth from my desktop PC.</p>
<p><a href="http://www.flickr.com/photos/gregrob/7737354952/" title="Robot parts"><img src="http://farm8.staticflickr.com/7264/7737354952_a2295b7c58_z.jpg" alt="Robot parts" /></a><br />
Robot Parts (click on the picture to go to flickr if you want to see more detail and notes)</p>
<p><a href="http://www.flickr.com/photos/gregrob/7737355832/"><img src="http://farm9.staticflickr.com/8288/7737355832_437c4ebcae_z.jpg" alt="Brains" /></a><br />
Robot Brains</p>
<p><a href="http://www.flickr.com/photos/gregrob/7737357436/" title="Assembled Chassis"><img src="http://farm9.staticflickr.com/8293/7737357436_ef8ebe4b0c_z.jpg" alt="Assembled Chassis" /></a><br />
Assembled Chassis</p>
<p>I think I will re-do the mount for the SSC-32.  I need to drill some more holes in the deck of the Boe-bot, and then flip the whole SSC assembly over.  The next step after that will be to figure out how to mount the Raspberry PI, I&#8217;ll be hand cutting some Lexan parts for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/08/viobot-the-robot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If I won the lottery&#8230;.</title>
		<link>http://gregrob.ca/blog/2012/08/if-i-won-the-lottery/</link>
		<comments>http://gregrob.ca/blog/2012/08/if-i-won-the-lottery/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 16:07:04 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=523</guid>
		<description><![CDATA[I have many things I would like to do if I were to get a big win in the lottery.  Doing something similar to what Ian Ruhter is up to would be on my list. &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>I have many things I would like to do if I were to get a big win in the lottery.  Doing something similar to what Ian Ruhter is up to would be on my list.</p>
<p>&nbsp;</p>
<p>&nbsp;<br />
<iframe src="http://player.vimeo.com/video/45348888?title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff" width="400" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/08/if-i-won-the-lottery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuring the DFRobot BluetoothV3</title>
		<link>http://gregrob.ca/blog/2012/07/configure_bluetoothv3/</link>
		<comments>http://gregrob.ca/blog/2012/07/configure_bluetoothv3/#comments</comments>
		<pubDate>Mon, 23 Jul 2012 17:17:19 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=512</guid>
		<description><![CDATA[aka: What to do when your computer&#8217;s serial port uses different voltages than your bluetooth modem. As part of the brainstorming on things I may want to do with my Raspberry PI, one thing that had occurred to me (and many others) would be to inter-work it with an Arduino. Now, this could be done [...]]]></description>
			<content:encoded><![CDATA[<p>aka: What to do when your computer&#8217;s serial port uses different voltages than your bluetooth modem.</p>
<p>As part of the brainstorming on things I may want to do with my Raspberry PI, one thing that had occurred to me (and many others) would be to inter-work it with an Arduino. Now, this could be done via a USB cable, but I like to explore, and so instead I looked into a Bluetooth connection. I found on the <a href="http://www.robotshop.com/ca/">Robotshop</a> site a nice little module from DFRobot for $24 that could connect directly to the TTL serial port on an Arduino.</p>
<p><a href="http://www.robotshop.com/ca/productinfo.aspx?pc=RB-Dfr-10&amp;lang=en-US">http://www.robotshop.com/ca/productinfo.aspx?pc=RB-Dfr-10&amp;lang=en-US</a></p>
<p>But once I had this in hand, the question was how I am going to program it, set the baud rate etc? I comes set at 9600, and I wanted to turn it up to 38400. Since it uses TTL serial instead of RS-232 levels I could not directly connect it to a normal computer unless I used a level shifter. I didn&#8217;t at the time have a level shifter. My solution was to use the Arduino to act as an interface between the USB port on my computer and the TTL serial interface on the BluetoothV3.</p>
<p>I put a simple sketch onto the Arduino to connect the BluetoothV3 via a softserial port on pins D9 and D10. I then used the serial monitor that comes installed in the Arduino package to talk thru the Arduino the the Bluetooth device.</p>
<p>Notes:<br />
1) In the serial monitor set it so that you are sending CR/LF terminations or else you won&#8217;t ever get a response from the BluetoothV3<br />
2) On the BluetoothV3 you need to set the AT DIP switch to, &#8220;on&#8221; to indicate that the device should look for AT commands. Slide it back to off once you have completed your programming.<br />
3) The BluetoothV3 does not remember pairing during a power cycle. Thus when communicating via bluetooth with other devices you may have to delete and re-pair the V3 after start-up. For example from an Android tablet, the tablet believed it was still paired with the V3, but would return a &#8220;Connect failed&#8221; error when trying to connect to the V3; but if I deleted the V3 from the Android&#8217;s known devices list it would then pair and connect without issue.</p>
<p>References:<br />
1) This document lists the AT commands that the BluetoothV3 accepts: <a href="http://www.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf">http://www.dfrobot.com/image/data/TEL0026/TEL0026_Datasheet.pdf</a></p>
<p>Here is the sketch that I ran on the Arduino. Change the baud rate in procedure, &#8220;setupBlueToothConnection&#8221; to 9600 for when you first start with the programming. Change it to 38400 after you have sent an, &#8220;AT+ORGL&#8221; command. Or set it the whatever speed you have set using an, &#8220;AT+UART&#8221; command.</p>
<pre>/*
Based on example code from others

Uses softserial on D9 (RxD),D10 (TxD) to talk to bluetooth modem
*/

#include &lt;SoftwareSerial.h&gt; //Software Serial Port
#define RxD 9
#define TxD 10
SoftwareSerial blueToothSerial(RxD,TxD);
char incoming;
void setup()
{
  Serial.begin(9600);
  delay(1000);
  pinMode(RxD, INPUT);
  pinMode(TxD, OUTPUT);
  setupBlueToothConnection();
  Serial.println("Started");
}
void setupBlueToothConnection()
{
  blueToothSerial.begin(38400); //Set BluetoothV3 baud rate to 38400
  delay(1000);
}

void loop()
{
  if (blueToothSerial.available())
    Serial.write(blueToothSerial.read());
  if (Serial.available())
    blueToothSerial.write(Serial.read());
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/07/configure_bluetoothv3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notta photo: Geeking out with a Raspberry PI</title>
		<link>http://gregrob.ca/blog/2012/07/pi-geek/</link>
		<comments>http://gregrob.ca/blog/2012/07/pi-geek/#comments</comments>
		<pubDate>Fri, 20 Jul 2012 03:16:25 +0000</pubDate>
		<dc:creator>GregRob</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://gregrob.ca/blog/?p=483</guid>
		<description><![CDATA[So I am sitting at my Windows 7 PC, running Cygwin-X Xwin server, and I have this xterm window open which is connecting me via wired ethernet to the command line interface of a Raspberry PI (GNU/Linux computer). The Raspberry PI is running headless (no keyboard, monitor, nor mouse) and has the SSH daemon running [...]]]></description>
			<content:encoded><![CDATA[<p>So I am sitting at my Windows 7 PC, running Cygwin-X Xwin server, and I have this xterm window open which is connecting me via wired ethernet to the command line interface of a Raspberry PI (GNU/Linux computer). The Raspberry PI is running headless (no keyboard, monitor, nor mouse) and has the SSH daemon running for remote access. Now on this Raspberry PI I have inserted a Bluetooth dongle, and over said dongle I am then running minicom through bluetooth SP protocol using the Bluez package. The other end of this wireless link is a DFRobots BluetoothV3 modem. The bluetooth modem is connected via a soft-serial port on an Arduino Nano micro-controller which is running a simple sketch which listens to the serial port for numerals 1 through 4. If/when the Arduino receives any of these numerals it then toggles the state of one of 4 LEDs connected to the Arduino GPIO pins. So in the end of this chain of improbably connected hardware and software I can make some lights go on and off, on and off, on and off, on and off&#8230;</p>
<p>So the simple drawing:</p>
<p>PC &#8211;ethernet&#8211;&gt; RaspberryPI &#8211;USB&#8211;&gt; BluetoothDongle &#8211;wireless&#8211;&gt; BlutoothModem &#8211;TTLserial&#8211;&gt; ArduinoNano &#8211;&gt; shiny lights</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>And some pictures since this sometimes is a photo blog:<br />
<a href="http://www.flickr.com/photos/gregrob/7606927016/"><img src="http://farm8.staticflickr.com/7267/7606927016_f9923aa8f3.jpg" alt="The PC (a terminal)" /></a>\<br />
The PC, basically a terminal</p>
<p><a href="http://www.flickr.com/photos/gregrob/7606926434/"><img src="http://farm8.staticflickr.com/7272/7606926434_2dd9ca6a19.jpg" alt="Raspberry PI GNU/Linux computer" /></a><br />
The Raspberry PI GNU/Linux computer with USB Bluetooth dongle</p>
<p><a href="http://www.flickr.com/photos/gregrob/7606925642/"><img src="http://farm9.staticflickr.com/8015/7606925642_40e1e2e379.jpg" alt="Arduino Nano and Bluetooth modem" /></a><br />
The Arduino Nano and the Bluetooth modem/serial adapter</p>
<p><img src="http://farm9.staticflickr.com/8010/7606924822_fc2ff27b54_m.jpg" alt="Blinkenlights" /><br />
<strong>ACHTUNG!</strong><br />
ALLES TURISTEN UND NONTEKNISCHEN LOOKENPEEPERS!<br />
DAS KOMPUTERMASCHINE IST NICHT FÜR DER GEFINGERPOKEN UND MITTENGRABEN! ODERWISE IST EASY TO SCHNAPPEN DER SPRINGENWERK, BLOWENFUSEN UND POPPENCORKEN MIT SPITZENSPARKSEN.<br />
IST NICHT FÜR GEWERKEN BEI DUMMKOPFEN. DER RUBBERNECKEN SIGHTSEEREN KEEPEN DAS COTTONPICKEN HÄNDER IN DAS POCKETS MUSS.<br />
ZO RELAXEN UND WATSCHEN DER BLINKENLICHTEN.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>So getting the Raspberry PI to pair and then communicate with the DF Robots Bluetooth modem took a lot longer than I expected. In the end the problem was that I need to use the appplication, &#8220;bluetooth-agent&#8221; to provide the PIN to pair the devices. This was not clear as most online references for bluez refer to either using the GUI, or using &#8220;/etc/bluetooth/hcid.conf&#8221;.  But I eventually found some info that said hcid.conf was no longer part of bluez, and that for command line pairing you could use bluetooth-agent.  </p>
<p>For all of this example I am running linux image: <strong>2012-07-15-wheezy-raspbian</strong> </p>
<p>A short summary of commands, all of these are run as root or using sudo:<br />
1) To install bluez and minicom</p>
<pre>apt-get install bluez minicom</pre>
<p>2) Make sure bluetooth services are running</p>
<pre>/etc/init.d/bluetooth start</pre>
<p>3) Clean up before we start</p>
<pre>rfcomm release hci0
hciconfig -a hci0 reset</pre>
<p>4) Check that your bluetooth device is working (third line of response says UP)</p>
<pre>hciconfig -a
 <strong>hci0: Type: BR/EDR Bus: USB
 BD Address: 00:15:83:3D:0A:57 ACL MTU: 192:8 SCO MTU: 64:8
 UP RUNNING PSCAN
 RX bytes:12234 acl:112 sco:0 events:427 errors:0
 TX bytes:3253 acl:78 sco:0 commands:177 errors:0
 ...
 </strong></pre>
<p>5) Find the address for the far-end bluetooth modem (address is XX:XX:XX:XX:XX:XX in response)</p>
<pre>hcitool scan
<strong> Scanning ...
 00:12:04:20:50:55 H-C-2010-06-01
</strong></pre>
<p>6) Optionall try pinging to see if we can talk to the far device</p>
<pre>l2ping 00:12:04:20:50:55 
 <strong>Ping: 00:12:04:20:50:55 from 00:15:83:3D:0A:57 (data size 44) ...
 4 bytes from 00:12:04:20:50:55 id 0 time 13.51ms
 4 bytes from 00:12:04:20:50:55 id 1 time 75.69ms
 4 bytes from 00:12:04:20:50:55 id 2 time 36.93ms</strong>
</pre>
<p>7) Find the channel used for SP (serial protocol) on the far-end bluetooth modem (channel info in protocol descriptor section)</p>
<pre>sdptool search SP 00:12:04:20:50:55
 Inquiring ...
 Searching for SP on 00:12:04:20:50:55 ...
 Service Name: Dev B
 Service RecHandle: 0x10000
 Service Class ID List:
   "Serial Port" (0x1101)
 Protocol Descriptor List:
   "L2CAP" (0x0100)
   "RFCOMM" (0x0003)
     Channel: 1
 Language Base Attr List:
   code_ISO639: 0x656e
   encoding:    0x6a
   base_offset: 0x100</pre>
<p>8. Start (and leave running) the bluetooth agent to send the PIN to the far end when it is asked for.  In this case my PIN is 1234.</p>
<pre>bluetooth-agent 1234 hci0 &#038;</pre>
<p>9) Start the connection from /dev/rfcomm0 device to the far end.  Here we use our address and channel &#8220;00:12:04:20:50:55 1&#8243;</p>
<pre>sudo rfcomm connect hci0  00:12:04:20:50:55 1</pre>
<p>11) Now in another window, as a regular user, we can use minicom to connect over the link.  In this case I am using 38,400 bps as this is what is in my Arduino sketch and what is set in the DF Robot BluetoothV3.</p>
<pre>sudo minicom -D /dev/rfcomm0 -b 38400</pre>
<p>-or to run minicom without using sudo-</p>
<pre>sudo ln /dev/rfcomm0 /dev/ttyS0
sudo chmod 766 /dev/ttyS0
minicom -D /dev/ttyS0 -b 38400</pre>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Wow, that was a lot of crap.<br />
 But how did you initially setup the DFRobot BluetoothV3?<br />
  What sketch is running on the Arduino?</p>
<p>I&#8217;ll do that in another post.  It is getting late.</p>
]]></content:encoded>
			<wfw:commentRss>http://gregrob.ca/blog/2012/07/pi-geek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
