<?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>Ed&#039;s World &#187; BlinkM</title>
	<atom:link href="http://www.jellard.co.uk/tag/blinkm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jellard.co.uk</link>
	<description>Bringing data into real life in a meaningful way</description>
	<lastBuildDate>Fri, 14 May 2010 15:00:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating an Ambilight mood light for your television</title>
		<link>http://www.jellard.co.uk/2009/12/creating-an-ambilight-mood-light-for-television/</link>
		<comments>http://www.jellard.co.uk/2009/12/creating-an-ambilight-mood-light-for-television/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 23:01:58 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ambilight]]></category>
		<category><![CDATA[BlinkM]]></category>
		<category><![CDATA[boblight]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[tv]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=120</guid>
		<description><![CDATA[In the struggle to find more cool things to do with the arduino, I thought I&#8217;d do what someone on twitter had done, make an &#8220;Ambilight&#8221;, an ambient light behind your TV that colours whatever is behind your TV the same colour as the average colour on your screen &#8211; pretty cool!  Some Philips TV [...]]]></description>
			<content:encoded><![CDATA[<p>In the struggle to find more cool things to do with the arduino, I thought I&#8217;d do what someone on twitter had done, make an &#8220;Ambilight&#8221;, an ambient light behind your TV that colours whatever is behind your TV the same colour as the average colour on your screen &#8211; pretty cool!  Some Philips TV have this, but I&#8217;m not willing to spend extra on that (and I have a TV).  I read <a href="http://geekswithblogs.net/kobush/Default.aspx">Szymon Kobalczyk&#8217;s Blog</a> and thought I&#8217;d give it a whirl.  Currently I&#8217;m using one of my existing BlinkMs, but I&#8217;ve ordered two RGB LED strips and the necessary (hopefully) components from farnell.</p>
<p>The core idea is:</p>
<ul>
<li>Run &#8220;Boblightd&#8221;, which monitors the screen (excuse the pun) and calculates the average colour, passing it to a program that sends the message via serial to&#8230;</li>
<li>An arduino listening for colours, and changes the colour of the BlinkM/RGB LED strip accordingly</li>
</ul>
<p>This is the result of mine on my computer monitor, looks much better in real life (skip to 30-40s for best demo).  Will be even better when the RGB LED strip arrives &#8211; that&#8217;ll be going behind my 42&#8243; TV downstairs.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/uG-n-HkXHG4&#038;hl=en_GB&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uG-n-HkXHG4&#038;hl=en_GB&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<span id="more-120"></span><br />
<strong>Installing Boblightd on Ubuntu Karmic</strong></p>
<p>Installing Boblightd wasn&#8217;t quite so straightforward as I&#8217;d hoped as it requires a whole bunch of dependencies, and on my two machines, it needed a different bunch (despite both being the most up to date Ubuntu Karmic).  For some reason, the boblightd webserver is blocking my IP address (not a static IP address) but fortunately, downloads still work &#8211; I&#8217;m using <a href="http://www.xs4all.nl/~loosen/boblight/boblight-1.3.tar.gz">version 1.3</a></p>
<p>First, the dependencies:</p>
<p>sudo apt-get install libx11-dev libxpm-dev x11proto-xext-dev libxext-dev libx11-dev libxrender-dev libavcodec-dev libavformat-dev libswscale-dev libavdevice-dev libportaudio-dev mesa-common-dev</p>
<p>Then, run ./configure, make and sudo make install</p>
<p>Grab my <a href="http://www.jellard.co.uk/wp-content/uploads/2009/12/popen.conf" target="_blank">config file</a> and change the script location to wherever you will be putting the following script.</p>
<p><strong>The Perl Script</strong></p>
<p>Boblightd runs a specified program, and prints three floats to stdin, space separated, and then a new line, and repeats.  This perl script is one loop that gets the standard in, splits it on the space, converts the floats to ints, and then to hex, and then writes it to the serial port (after checking it is different from the last one, just to save arduino processing time).  Change ttyUSB1 to wherever your arduino is.</p>
<pre>#!/usr/bin/perl -w
use Device::SerialPort qw( <img src='http://www.jellard.co.uk/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ARAM :STAT 0.07 );
use Time::localtime;
my $PORT = "/dev/ttyUSB1";

my $ob = Device::SerialPort-&gt;new($PORT);
$ob-&gt;baudrate(115200);
$ob-&gt;write_settings;
open(SERIAL, "+&lt;$PORT");
$lastOutput = "";
while (1) {
        $in = &lt;STDIN&gt;;
        @rgb = split(/ /, $in);
        $r = int($rgb[0] * 255);
        $g = int($rgb[1] * 255);
        $b = int($rgb[2] * 255);

        $rHex = sprintf("%02X", $r);
        $gHex = sprintf("%02X", $g);
        $bHex = sprintf("%02X", $b);

        $output = "$rHex$gHex$bHex\n";
        if ($lastOutput ne $output) {
                print SERIAL $output;
                print $output;
                $lastOutput = $output;
        }
}</pre>
<p>If you haven&#8217;t already got Device::SerialPort, run these (as root):</p>
<p>perl -MCPAN -e shell</p>
<p>install Device::SerialPort</p>
<p><strong>The Arduino Code</strong></p>
<p>The Arduino code is very simple, hacked from the BlinkM Tester example.  Remember to Sketch &gt; Add File and include the BlinkM_funcs.h file before trying to run this.  Change blinkm_addr to the address of your BlinkM (probably 0&#215;09).</p>
<p><code> </code></p>
<pre>#include "Wire.h"
#include "BlinkM_funcs.h"
#define BLINKM_ARDUINO_POWERED 0
byte blinkm_addr = 0x01;
#include
char serInStr[30];

void setup()
{
  BlinkM_begin();
  delay(100);
  Serial.begin(115200);
  BlinkM_stopScript( blinkm_addr );
  BlinkM_setRGB( blinkm_addr, 0,0,0);
}

void loop()
{
  if( readSerialString() ) {
     byte r = toHex( serInStr[0],serInStr[1] );
     byte g = toHex( serInStr[2],serInStr[3] );
     byte b = toHex( serInStr[4],serInStr[5] );
     BlinkM_setRGB( blinkm_addr, r,g,b);
  }
}
#include
uint8_t toHex(char hi, char lo)
{
  uint8_t b;
  hi = toupper(hi);
  if( isxdigit(hi) ) {
    if( hi &gt; '9' ) hi -= 7;
    hi -= 0x30;
    b = hi&lt;&lt;4;
    lo = toupper(lo);
    if( isxdigit(lo) ) {
      if( lo &gt; '9' ) lo -= 7;
      lo -= 0x30;
      b = b + lo;
      return b;
    }
  }
  return 0;
}
uint8_t readSerialString()
{
  if(!Serial.available()) {
    return 0;
  }
  delay(5);
  int i = 0;
  while (Serial.available()) {
    serInStr[i] = Serial.read();
    i++;
  }
  serInStr[i] = 0;
  return i;
}</pre>
<p><strong>Putting it all together</strong></p>
<p>Upload the arduino code.</p>
<p>Run boblightd -c popen.conf</p>
<p>Run boblight-X11</p>
<p>And now watch a movie, simple!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/12/creating-an-ambilight-mood-light-for-television/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scout racing lights &#8211; naturally arduino powered!</title>
		<link>http://www.jellard.co.uk/2009/11/scout-racing-lights-naturally-arduino-powered/</link>
		<comments>http://www.jellard.co.uk/2009/11/scout-racing-lights-naturally-arduino-powered/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 22:23:22 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ambient light]]></category>
		<category><![CDATA[BlinkM]]></category>
		<category><![CDATA[scouts]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=101</guid>
		<description><![CDATA[Inspired by techcobweb&#8217;s SlotCarDuino, the night before our scout group&#8217;s &#8220;Pinewood Derby&#8221; (cars made by the kids from a block of wood race down a track, powered by gravity), I decided to make a traffic-light system, and an indicator to say which car one (as there&#8217;s sometimes a debate)!
So, in between power cuts (6 days on [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by techcobweb&#8217;s <a href="http://techcobweb.wordpress.com/2009/09/02/slot-car-challenge/">SlotCarDuino</a>, the night before our scout group&#8217;s &#8220;Pinewood Derby&#8221; (cars made by the kids from a block of wood race down a track, powered by gravity), I decided to make a traffic-light system, and an indicator to say which car one (as there&#8217;s sometimes a debate)!</p>
<p>So, in between power cuts (6 days on the trot of less than 8hrs of power per day), with only a few hours of awake time before the event, I dismantled my home automation system (no loss, given there&#8217;s barely any power for the heating) and connected up the breadboard, ambient lights and a couple of wires that will act as trip wires.  As there are no pull-down resistors, and I have absolutely no components, the trip-wire is connected to ground and then digital pin 3.  Running digitalWrite(3, HIGH); enables the pull-up resistor, so whenever the circuit is complete (i.e. car hasn&#8217;t driven through the wire) it reads 0.</p>
<p>The way I made the trip-wire was to stick one wire over the track, and rest it in a small uninsulated loop of wire.  A quick trip to the scout hut proved this worked, although was in serious need of some debouncing as the vibrations on the track caused the wire to jump around a little.</p>
<p><a href="http://www.jellard.co.uk/wp-content/uploads/2009/11/RaceSwitch.jpg"><img width="277" height="300" src="http://www.jellard.co.uk/wp-content/uploads/2009/11/RaceSwitch-277x300.jpg" class="attachment-medium" alt="Simple but reasonable effective race switch" title="Race Switch" /></a></p>
<p>The main loop of the code is very simple, it reads the two trip wire readings, and if one changes it increments a winning counter.  If that counter is more than 7000 (fairly random number that seems to work), it turns that lane&#8217;s ambient light green.  After that happens, when the next trip wire is broken, the appropriate light goes red.</p>
<p>I stole the one component I did have, a switch, from the B&amp;Q ambient light, and wired that up in a similar way to the trip wires.  At the start of the loop, it checks this value to see if it has changed (the button is a normal switch, not a temporary push-button), and if it has changed (after some debouncing), it resets some variables, checks the trip-wires have been reconnected (and if not, flash the appropriate light), then runs the red-amber-green starting sequence.</p>
<p>The kids seemed to like it, and other than the odd dodgy connection, and a particularly streamlined car going under the wire, it worked perfectly!!</p>
<p>Next year will be a little more high-tech as I&#8217;ll change the trip-wires to some kind of optical sensor, and possibly have one at the start of the race so we can display track times, speeds etc.  May even make an automatic releaser, we shall see&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/11/scout-racing-lights-naturally-arduino-powered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ambient Light and Arduino boxed up and ready to rumble</title>
		<link>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/</link>
		<comments>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:30:30 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[AM comms]]></category>
		<category><![CDATA[ambient light]]></category>
		<category><![CDATA[BlinkM]]></category>
		<category><![CDATA[central heating ctrl]]></category>
		<category><![CDATA[current cost]]></category>
		<category><![CDATA[home easy]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=99</guid>
		<description><![CDATA[One bitsbox order and a trip to buy some deodorant later, and my arduino is boxed up, and ambient light has a stand!

The cap off an addidas deoderant can makes a nice enough base for the orb from a B&#38;Q disco lamp (no link as can&#8217;t find it online).  I soldered the ends of some [...]]]></description>
			<content:encoded><![CDATA[<p>One bitsbox order and a trip to buy some deodorant later, and my arduino is boxed up, and ambient light has a stand!</p>
<p><a href="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4495.JPG"><img class="attachment-medium" title="Ambient Light and Box" src="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4495-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p>The cap off an addidas deoderant can makes a nice enough base for the orb from a B&amp;Q disco lamp (no link as can&#8217;t find it online).  I soldered the ends of some CAT5 to the BlinkM, and left the other ends loose to be shoved into the arduino.</p>
<p><a href="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4500.JPG"><img class="attachment-medium" title="The insides" src="http://www.jellard.co.uk/wp-content/uploads/2009/11/IMG_4500-300x199.jpg" alt="" width="300" height="199" /></a></p>
<p>As I&#8217;ve got an arduino and ethernet shield, I went for the second <a href="http://www.bitsbox.co.uk/boxes.html">largest ABS box</a> and even then, I had to break off the screw connectors on one side so that the plugs could stick through the outside.  I soldered the AM receiver and transmitter onto a small piece of stripboard (also from bitsbox), added a couple of wires for aerials (with a knot in each to prevent someone pulling it out the circuit).  So that&#8217;s pretty much the finished product, what a shame!  I will add a thermometer to it so it can become a thermostat in another room &#8211; eventually this&#8217;ll go in the sitting room, so will have the current cost meter producing one temperature reading from the kitchen, this one in the sitting room, and have just ordered another arduino for my bedroom&#8217;s ambient light/thermometer/development board.</p>
<p>The java code has been working nicely, turning the heating on and off via the hacked home-easy plug!  I sent a text from my phone to turn the heating on, very proud of actually finding a use for it as I was stuck in traffic but had friends coming round so the heating would have cut out at 5.30 (it heats up til 5.30, then waits for movement) &#8211; only to find there was a street power cut that has lasted 3 days (intermittently)!  So, if the power holds up a little longer, I should get a tweet tomorrow telling me how long the central heating was on for, fingers crossed!</p>
<p>So, time to write the web interface, pretty dull <img src='http://www.jellard.co.uk/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/11/ambient-light-and-arduino-boxed-up-and-ready-to-rumble/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BlinkM Arrived</title>
		<link>http://www.jellard.co.uk/2009/10/blinkm-arrived/</link>
		<comments>http://www.jellard.co.uk/2009/10/blinkm-arrived/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 01:36:17 +0000</pubDate>
		<dc:creator>Ed</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[ambient light]]></category>
		<category><![CDATA[BlinkM]]></category>

		<guid isPermaLink="false">http://www.jellard.co.uk/?p=20</guid>
		<description><![CDATA[BlinkM turned out to be incredibly easy to get going, and will make a great ambient light source.]]></description>
			<content:encoded><![CDATA[<p>BlinkM, 6xAA power-pack container arrived from <a href="http://oomlout.co.uk/">oomlout</a> (arrived next day, despite being in the middle of postal strikes), along with a free RGB LED &#8211; seem like a good place to buy from.</p>
<p>Downloaded the <a href="http://thingm.com/products/blinkm">examples</a> and got it working within a few mins.  Slight gotcha was that after I told it to change colour, it changed, then did something else.  Turned out that  a sequence was still running, so I now stop the sequences in the setup() method with  BlinkM_stopScript( blinkm_addr );</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jellard.co.uk/2009/10/blinkm-arrived/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
