<?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>Tinkerlog &#187; led</title>
	<atom:link href="http://tinkerlog.com/category/led/feed/" rel="self" type="application/rss+xml" />
	<link>http://tinkerlog.com</link>
	<description>Alex' blog</description>
	<lastBuildDate>Fri, 03 Sep 2010 18:39:47 +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>Fireflies at the Fira de la Ciència</title>
		<link>http://tinkerlog.com/2010/05/17/fireflies-at-the-fira-de-la-ciencia/</link>
		<comments>http://tinkerlog.com/2010/05/17/fireflies-at-the-fira-de-la-ciencia/#comments</comments>
		<pubDate>Mon, 17 May 2010 14:29:48 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[simulation]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=1105</guid>
		<description><![CDATA[
A couple of months ago, some nice guys of the IFISC (Institute for Cross-Disciplinary Physics and Complex Systems) contacted me. They saw the Synchronizing Fireflies and wanted them to demonstrate how simple rules can make patterns emerge from chaos. The main research of the institute is in Nonlinear Physics and Complex Systems. 

But why would [...]]]></description>
			<content:encoded><![CDATA[<p><object width="490" height="276"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11804408&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=11804408&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="276"></embed></object></p>
<p>A couple of months ago, some nice guys of the <a target="_blank" href="http://ifisc.uib.es/">IFISC</a> (Institute for Cross-Disciplinary Physics and Complex Systems) contacted me. They saw the <a href="http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/">Synchronizing Fireflies</a> and wanted them to demonstrate how simple rules can make patterns emerge from chaos. The main research of the institute is in Nonlinear Physics and Complex Systems. </p>
<p><span id="more-1105"></span></p>
<p>But why would they want electronic gimicks? Every year, there is a science fair, the &#8220;<a target="_blank" href="http://fira2010.balearsfaciencia.org/">Fira de la ciència</a>&#8221; in Palma de Mallorca. The fair is aimed at young students, to introduce them to science with many hands-on projects and experiments. The IFISC is part of this fair and decided to use my fireflies as a demonstration of self organizing systems for one of their projects. </p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2010/05/310320100741.jpg" alt="" title="Fireflies in the palm tree" width="450" height="600" class="alignnone size-full wp-image-1116" /></p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2010/05/310320100721.jpg" alt="" title="Fireflies in the palm tree" width="450" height="600" class="alignnone size-full wp-image-1115" /></p>
<p>It took a while to figure out how to present the fireflies best. Here are two pictures of the palm tree to which the fireflies are tied. Great idea and it came out really beautiful.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2010/05/DSC_0042-11.jpg" alt="" title="Synchronizing Fireflies" width="417" height="700" class="alignnone size-full wp-image-1118" /></p>
<p>For the fair they built a small cubicle with the palm tree inside. The cubicle was neccessary because the fireflies need an almost pitch back environment to see each other flashes.</p>
<p>As the fair was at Palma de Mallorca, I couldn&#8217;t resist to see it in person. Last week my girlfriend and I took some days off and travelled to Mallorca. We visited the fair and met some really nice staff members of IFISC. And there it was, a tiny black cube with a palm tree and fireflies within. Wohoo!</p>
<p>After all I have to say thank you all so much for the warm welcome and showing and explaining all your projects. Thanks for the cool t-shirt, I feel almost as a IFISC member now <img src='http://tinkerlog.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
And especially thanks to Pep for pushing this project further and further and making it possible. It has been a fantastic experience. You guys rock.</p>
<h3>Links</h3>
<ul>
<li><a href="http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/">64 Synchronizing Fireflies</a></li>
<li><a target="_blank" href="http://store.tinkerlog.com/store/index.php?main_page=product_info&#038;cPath=2&#038;products_id=2">Synchronizing Firefly Kit</a></li>
<li><a target="_blank" href="http://www.youtube.com/user/pepdecanvalent">Some more videos</a> of the test setup, done by Pep</li>
<li><a target="_blank" href="http://ifisc.uib.es/">IFICS</a> (Instituto de Física Interdisciplinar y Sistemas Complejos)</li>
<li><a target="_blank" href="http://fira2010.balearsfaciencia.org/">Fira de la ciència</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2010/05/17/fireflies-at-the-fira-de-la-ciencia/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Geeky Advent</title>
		<link>http://tinkerlog.com/2009/12/12/geeky-advent/</link>
		<comments>http://tinkerlog.com/2009/12/12/geeky-advent/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 10:44:23 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=860</guid>
		<description><![CDATA[
It&#8217;s Advent season. And what do you do to let your geek shine? An LED Advent wreath of course.

The idea came to me after seeing Sprite&#8217;s minimalistic version of the Hackaday&#8217;s Flickering LED circuit. It&#8217;s a simple circuit that flickers LEDs and detects darkness. I thought that this could make a great little Advent wreath. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_00261.JPG"><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_0026.JPG" alt="LED Advent" title="LED Advent" width="480" height="344" class="alignnone size-full wp-image-879" /></a></p>
<p>It&#8217;s Advent season. And what do you do to let your geek shine? An LED Advent wreath of course.</p>
<p><span id="more-860"></span></p>
<p>The idea came to me after seeing <a target="_blank" href="http://spritesmods.com/?art=minimalism">Sprite&#8217;s minimalistic version</a> of the Hackaday&#8217;s <a target="_blank" href="http://hackaday.com/2008/10/30/flickering-led-circuit/">Flickering LED circuit</a>. It&#8217;s a simple circuit that flickers LEDs and detects darkness. I thought that this could make a great little Advent wreath. My version should have 4 LEDs and should be support first, second, third and fourth Advent. </p>
<h3>Parts and Schematic</h3>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/advent.png" alt="advent schematic" title="advent schematic" width="490" height="172" class="alignnone size-full wp-image-887" /></p>
<p>The parts list is rather short:</p>
<ul>
<li>ATtiny13V, 8-bit microcontroller, 1k flash RAM, 64 bytes SRAM</li>
<li>4 * 3mm LEDs, yellow or orange, forward voltage ~ 2.0 V</li>
<li>CR2032 coin cell, 3 V, 230 mAh</li>
<li>Paperclip</li>
</ul>
<p>There are no current limiting resistors in this circuit. Normally operating LEDs without them is not advisable because the LEDs will get damaged. But under certain conditions the resistors can be left out. For more on this topic, see <a target="_blank" href="http://spritesmods.com/?art=minimalism&#038;page=2">Sprite&#8217;s computation</a> or mine <a href="http://tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/">here</a>.</p>
<h3>How does it work</h3>
<p><a href="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_00031.JPG"><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_0003.JPG" alt="LED Advent wreath" title="LED Advent wreath" width="480" height="342" class="alignnone size-full wp-image-866" /></a></p>
<p>The nice thing about this circuit is, that it needs no special components to detect darkness. It uses an LED for that. An LED is also a photodiode that can detect light of the same wavelength it emits. See <a target="_blank" href="http://www.merl.com/publications/TR2003-035/">here</a> for more details. Sprite used an available ADC of the ATtiny13 instead of the &#8220;Reverse Bias&#8221; method. </p>
<h3>Software</h3>
<p>The software is heavily based on Sprite&#8217;s version. Things I&#8217;ve changed:</p>
<ul>
<li>Added support for four LEDs.</li>
<li>Removed calibration, replaced with hard wired values.</li>
<li>Added a bit sampling to the light measurements, because the values were a bit erratic.</li>
<li>Added a mode for first, second, third and fourth Advent, stored in EEPROM. Gets incremented at every reset.</li>
<li>Modified the watchdog code a bit to keep it generating interrupts instead of resets.
</ul>
<p>After power up, the watchdog gets enabled to generate an interrupt every two seconds. Then the current mode (0-3) is read from EEPROM, incremented and stored back. Then the endless loop is entered, where random values are used to flicker the LEDs. The ISR checks the ambient lighting and if it is higher than a certain level, sets a sleep flag. This flag is monitored in the main loop. If set it sends the controller in to power down mode to save battery power. The next interrupt will wake up the main loop.</p>
<h3>Assembly</h3>
<p><a href="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_00191.JPG"><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_0019.JPG" alt="2nd Advent" title="2nd Advent" width="480" height="343" class="alignnone size-full wp-image-873" /></a></p>
<p>This circuit is soldered in &#8220;free form&#8221;, so no PCBs. It takes some time to get it done but it&#8217;s worth it.<br />
All cathodes of the LEDs are connected to form the ring. The anodes are bent inwards to be soldered to pin 2, 3, 6 and 7 of the ATtiny13. A short piece of wire is connected to the common cathode and soldered to the GND pin.</p>
<p><a href="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_00131.JPG"><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_0013.JPG" alt="Dead bug style" title="Dead bug style" width="480" height="344" class="alignnone size-full wp-image-863" /></a></p>
<p>The microcontroller lies &#8220;dead bug&#8221; style on the coin cell. The GND pin is bent to the top, now connecting to GND of the battery. The VCC pin is bent to the bottom and soldered to the coin cell holder. The coin cell holder works as a clip, pressing the microcontroller onto the cell.</p>
<p>Some random notes: </p>
<ul>
<li>Be patient.</li>
<li>Use as less solder as possible.</li>
<li>Don&#8217;t heat the pins of the controller for too long.</li>
<li>Be gentle while bending the controller pins. They come off easily. I added a tiny bit of solder.</li>
<li>BE patient <img src='http://tinkerlog.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<h3>The Result</h3>
<p><object width="490" height="276"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8134511&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=8134511&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="276"></embed></object></p>
<p><a href="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_00311.JPG"><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/DSC_0031.JPG" alt="LED Advent wreath" title="LED Advent wreath" width="480" height="344" class="alignnone size-full wp-image-868" /></a></p>
<p>If you make one, please let me know. Send me a picture or post it on the <a target="_blank" href="http://www.flickr.com/groups/1145324@N23/">tinkerlog flickr pool</a>.</p>
<p>Happy third Advent &#8230; </p>
<h3>Downloads and Links</h3>
<ul>
<li>Source <a href='http://tinkerlog.com/wordpress/wp-content/uploads/2009/12/advent.zip'>advent.zip</a>
<li><a target="_blank" href="http://spritesmods.com/?art=minimalism">Minimalistic flickering LEDs</a> at Spritesmods</li>
<li><a target="_blank" href="http://hackaday.com/2008/10/30/flickering-led-circuit/">Flickering LED circuit</a> at Hackaday
<li><a href="http://evilmadscience.com/component/content/article/155">LED Menorah</a>, also free form at Evil Mad Science</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2009/12/12/geeky-advent/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Synchronizing audible fireflies</title>
		<link>http://tinkerlog.com/2009/10/30/synchronizing-audible-fireflies/</link>
		<comments>http://tinkerlog.com/2009/10/30/synchronizing-audible-fireflies/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 09:35:15 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[led]]></category>
		<category><![CDATA[firefly]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=818</guid>
		<description><![CDATA[
Niklas did an amazing job, letting fireflies play some tunes. It&#8217;s almost as if they are alive.
Niklas, I owe you a beer (or Club-Mate or whatever), should we ever met. You made my day!
]]></description>
			<content:encoded><![CDATA[<p><object width="490" height="368"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5916130&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5916130&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="368"></embed></object></p>
<p>Niklas did an <a target="_blank" href="http://petterniklas.wordpress.com/2009/08/04/synchronizing-soundflies/">amazing job</a>, letting <a href="http://tinkerlog.com/howto/synchronizing-firefly-how-to/">fireflies</a> play some tunes. It&#8217;s almost as if they are alive.</p>
<p>Niklas, I owe you a beer (or Club-Mate or whatever), should we ever met. You made my day!</p>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2009/10/30/synchronizing-audible-fireflies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>64 Synchronizing Fireflies</title>
		<link>http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/</link>
		<comments>http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 09:27:09 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[simulation]]></category>
		<category><![CDATA[firefly]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=760</guid>
		<description><![CDATA[
Last week I invested some time to solder 64 Firefly boards. Only 2.432 solder joints later I was ready for some videos. 
Every firefly acts completely autonomously, it has its own tiny controller, eye and luminary. They are all connected for power supply only. 

Here are some different configurations. 



Links

See how it&#8217;s done in the [...]]]></description>
			<content:encoded><![CDATA[<p><object width="490" height="282"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5317886&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5317886&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="282"></embed></object></p>
<p>Last week I invested some time to solder 64 <a target="_blank" href="http://tinkerlog.com/howto/synchronizing-firefly-how-to/">Firefly</a> boards. Only 2.432 solder joints later I was ready for some videos. </p>
<p>Every firefly acts completely autonomously, it has its own tiny controller, eye and luminary. They are all connected for power supply only. </p>
<p><object width="490" height="282"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5318234&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5318234&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="282"></embed></object></p>
<p>Here are some different configurations. </p>
<p><span id="more-760"></span></p>
<p><object width="490" height="282"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5318396&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5318396&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="282"></embed></object></p>
<p><object width="490" height="282"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5318548&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5318548&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="490" height="282"></embed></object></p>
<h3>Links</h3>
<ul>
<li>See how it&#8217;s done in the <a href="http://tinkerlog.com/howto/synchronizing-firefly-how-to/">Synchronizing Firefly Howto</a></li>
<li>Grab a <a href="http://store.tinkerlog.com/store/index.php?main_page=product_info&#038;cPath=2&#038;products_id=2">Firefly kit</a> at the Tinker Store</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2009/06/25/64-synchronizing-fireflies/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Driving an LED with or without a resistor</title>
		<link>http://tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/</link>
		<comments>http://tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 13:27:05 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=579</guid>
		<description><![CDATA[In this post I will try to show, why it&#8217;s a good idea to use a current limiting resistor for an LED. And when it&#8217;s save to drive the LED without any resistor.
If you read about LEDs, you will notice that everyone tells you, that you need a current limiting resistor. But mostly they do [...]]]></description>
			<content:encoded><![CDATA[<p>In this post I will try to show, why it&#8217;s a good idea to use a current limiting resistor for an LED. And when it&#8217;s save to drive the LED without any resistor.</p>
<p>If you read about LEDs, you will notice that everyone tells you, that you need a current limiting resistor. But mostly they do not tell you why.</p>
<h3>LED with current limiting resistor</h3>
<p>If you look at a datasheet of an LED, you will notice that graphs shown are not linear. An LED is a diode, a semiconductor and behaves differently compared to a resistor.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/s_led-res.png" alt="" title="Resitor and LED" width="480" height="267" class="alignnone size-full wp-image-583" /></p>
<p>If you apply a specific voltage to a resistor, you can compute the resulting current with:</p>
<p><code><br />
I = V / R  Example: I = 5 Volt / 100 Ohm = 50 mA<br />
</code></p>
<p><span id="more-579"></span></p>
<p>Obviously that does not work with LEDs because they don&#8217;t behave like a linear resistor. If you look at the graph above, you can rise the voltage from 0 Volt to 1.6 Volt without resulting in noticeable current. Apply a bit more voltage and there is current and the LED lights up. We have reached the Forward Voltage which is needed to open the pn-gate. Forward Voltage (VF) for a typical red LED is 1.7 to 2.2 Volt. Now small changes in the voltage produce large effects on the resulting forward current (IF). Datasheets normally state at least the absolute maximum ratings for IF, eg. 25 mA. If you apply a voltage that results in a larger current, the LED may be destroyed. </p>
<p>So it&#8217;s vital to stay within the limits of the LED. If you would attach an LED to a 5 Volt power supply directly, you would burn it instantly. The high current would destroy the pn-gate. That&#8217;s the point where the current limiting resistor comes in.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/resistor_led1.png" alt="" title="LED with current limitting resistor" width="400" height="311" class="alignnone size-full wp-image-587" /></p>
<p>Assuming, we have a red LED with maximum rating of IF: 25 mA at VF: 2.1 Volt. Its VF related to IF is like the curve in the graph at the top. If we want to use it at 5 Volt, we have to use a resistor to dissipate the remaining 2.9 Volt. To compute the resitor, we use:</p>
<p><code><br />
R = V / I = (5 Volt - 2.1 Volt) / 25 mA = 116 Ohm.<br />
</code></p>
<p>To be safe we use a 120, or better, 150 Ohm resistor. That way we don&#8217;t drive the LED near it&#8217;s maximum rating. We choose 20 mA, take a look at the curve and see a corresponding VF of 2 Volts. Now we recalculate the resistor.</p>
<p><code><br />
R = V / I = (5 Volt - 2 Volt) / 20 mA = 150 Ohm.<br />
</code></p>
<p>Ok, 150 Ohm is fine. To be safe with the resistor, we have to take a look at the power dissipation. It calculates as:</p>
<p><code><br />
P = V * I = 3 Volt * 20 mA = 60 mW<br />
</code></p>
<p>So it&#8217;s safe to choose a 150 Ohm resistor with 1/4 Watt rating.</p>
<p>Ok, so far the typical use of an LED with an current limitting resistor.</p>
<h3>LED without current limitting resistor</h3>
<p>First of all, why would you want to get rid of the resistor? There are two reasons. First is, it wastes energy. It converts electrical energy into heat. But we want to light up an LED. Not good. Second is, you can reduce the number of components. The circuit gets cheaper, because we saved a resistor and maybe space on a PCB.</p>
<p>There are two ways to bypass the resistor. One way is to lower the input voltage. If you are able to run your complete circuit with the same voltage as forward voltage of the LED, perfect. No resistor needed. </p>
<p>Another method is to use pulse width modulation (PWM). That means we are switching the LED on and off. If we are switching fast enough, the human eye can not tell the difference. It integrates the brightness over time, so to speak. Often there is a Peak Forward Current (IF(peak)) rating in the datasheet. As an example:</p>
<blockquote><p>
IF(peak) = 160 mA<br />
Condition: Pulse Width <= 1 msec and Duty <= 1/10
</p></blockquote>
<p>Which means, it is safe to switch the LED with 1 kHz, where the LED is on for 0.1 msec and off for 0.9 msecs.</p>
<p>Most of the times there is no voltage given for IF(peak), so we can not be sure at what voltage we will reach the 160 mA in the example. Looking at the graph, I would assume that you could go up to 3 V, maybe 3.2 V, but I haven&#8217;t tested it out.</p>
<p>I used both methods for my <a href="http://tinkerlog.com/howto/64pixels/">64pixels</a>, where I attached an LED matrix directly to a microcontroller without any current limitting resistors.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/dsc_0061.jpg" alt="" title="LED matrix attached directly to an ATtiny2313" width="480" height="343" class="alignnone size-full wp-image-591" /></p>
<p>The input voltage is 3 Volts, if used with 2 AA batteries or about 2.4 Volts with 2 AA rechargeables. That helps to get closer to VF of the LEDs. </p>
<p>The matrix lets you address only one row at a time. So you set all column bits for row one and enable row one. Then you disable row one, set all bits for row two and enable row two, and so on. So you are cycling through all rows. This is done so fast, that you wont see any flickering. Every row is updated with nearly 2 kHz and with a duty cycle of 1/8 (because of the 8 rows).</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/ledwmicro.png" alt="" title="LED with source and sink pins" width="440" height="303" class="alignnone size-full wp-image-589" /></p>
<p>If you are using a microcontroller for driving an LED or LED matrix, you have to take care of the current ratings of the microcontroller as well. Every I/O pin can only deliver (source) or receive (sink) a specific amount of current. I used an ATtiny2313 and from the datasheet on page 181, I read </p>
<blockquote><p>Absolute Maximum Ratings:<br />
* DC Current per I/O pin: 40.0 mA
</p></blockquote>
<p>And on page 182 as a note:</p>
<blockquote><p>4. Although each I/O port can sink more than the test conditions (10 mA at VCC = 5V, 5 mA at VCC = 3V) under steady state conditions (non-transient), the following must be observed: 1] The sum of all IOL, for all ports, should not exceed 60 mA. If IOL exceeds the test condition, VOL may exceed the related specification. Pins are not guaranteed to sink current greater than the listed test condition.
</p></blockquote>
<p>As I understand that, if you are trying to source or sink more than 10 mA, the voltage VOL (Output Low Voltage) or VOH (Output High-voltage) may drop or rise and exeed the specified values.</p>
<p>Looking at two graphs from the datasheet may help to clear things up.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/fig106.png" alt="" title="Source current vs. Output voltage (used with permission)." width="480" height="328" class="alignnone size-full wp-image-592" /></p>
<p>This figure shows how the output voltage of a source pin is related to the current that it sources at 2.7 V input voltage. 2.7 is not 3 Volts as 2 AA cells can deliver, but close enough for now. What we see, is that the output voltage drops, if we demand more and more current. At 5 mA we have a voltage of 2.5 Volts, but at 15 mA the voltage drops to 2.1 Volts.</p>
<p><img src="http://tinkerlog.com/wordpress/wp-content/uploads/2009/04/fig109.png" alt="" title="Sink current vs. Ouput Voltage (used with permission)" width="480" height="315" class="alignnone size-full wp-image-593" /></p>
<p>This figure shows how the output voltage of a sink pin is related to the current that it sinks. This time the ouput voltage rises, if we demand the pin to sink more current. At 5 mA the voltage is 0.15 Volts but rises to 0.5 Volts at 15 mA.</p>
<p>To check if we are using the ATtiny2313 and the matrix within their specifications, we have to do some math. For the matrix, there is no datasheet with nice graphs but some numbers.</p>
<blockquote><p>
Forward Voltage: 1.80 &#8211; 2.20 V<br />
Maximum Rating: Forward Current: 25 mA
</p></blockquote>
<p>We assume the LED runs at 1.8 Volts with 5 mA. That looks reasonable when you take a look at other datasheets. Now, if we insert the 5 mA into the two figures above, we get: 2.5 Volt for the source pin and 0.15 V for the sink pin.</p>
<p><code><br />
2.5 V - 0.15 V = 2.35 V<br />
</code></p>
<p>So we get that 2.35 V is left for the LED. That is more than we have assumed (1.8 V). Higher voltage for the LED means more current. So this time we will compute with 10 mA. Inserting that again, we get 2.3 V for the source pin and 0.3 V for the sink pin.</p>
<p><code><br />
2.3 V - 0.3 V = 2.0 V<br />
</code></p>
<p>As you see, if the voltage over the LED rises, the current through it raises as well. But the rising current results in lower/higher output voltage from the source/sink pin. And that means lower current. It is, as if they are fighting each other. </p>
<p>2.0 V at 10 mA looks ok for the LED and the microcontroller.</p>
<p>That was one LED on two I/O pins. What, if we want to control a complete row of eight LEDs?</p>
<p>This time eight source pins, eight LEDs and one sink pin. From the example above, 10 mA per LED sums up to 80 mA (!). That&#8217;s a lot. Looking it up on the figure is not even possible. Lets assume, it all sums up to only 25 mA, that would be 3.125 mA per LED. That gives us 2.6 V at every source pin and 1.0 V for the single sink pin.</p>
<p><code><br />
2.6 V - 1.0 V = 1.6 V<br />
</code></p>
<p>That means, 1.6 V is left for every LED, we are a bit beneath the forward voltage of the LED. So the LED may be a bit dimmer. Again, if the LEDs would suck more current, the microcontroller would deliver less output voltage for the LEDs. </p>
<p>If you look thoroughly at the 64 pixels display, you may notice, that the rows with few pixels lit are a bit brighter than the others.</p>
<p>After all this computing and datasheet staring I think it is safe to let out the current limiting resistor in some cases. You have to take a closer look at specs to get an idea on how it will work out.</p>
<p>If I get something wrong or mixed things up, please feel free to comment on this.</p>
<h3>Links</h3>
<ul>
<li>Datasheet for <a href="http://www.atmel.com/dyn/resources/prod_documents/doc2543.pdf">Atmel ATtiny2313</a></li>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/Light-emitting_diode">LED</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>64pixels are enough</title>
		<link>http://tinkerlog.com/2009/03/21/64pixels-are-enough/</link>
		<comments>http://tinkerlog.com/2009/03/21/64pixels-are-enough/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 13:03:52 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/?p=563</guid>
		<description><![CDATA[
I love Blinkenlights. And all kinds of other blinking and flashing LED stuff. I think, it&#8217;s already a form of addiction. When I ran across an LED matrix with square pixels, I thought it would be cool to build a small animated display with it. To keep things simple, the display is attached directly to [...]]]></description>
			<content:encoded><![CDATA[<p><object width="441" height="254"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3787969&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3787969&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="441" height="254"></embed></object></p>
<p>I love <a href="http://www.blinkenlights.net/">Blinkenlights</a>. And all kinds of other blinking and flashing LED stuff. I think, it&#8217;s already a form of addiction. When I ran across an LED matrix with square pixels, I thought it would be cool to build a small animated display with it. To keep things simple, the display is attached directly to the microcontroller the <a href="http://www.evilmadscientist.com/article.php/microreader2">&#8220;Evil-Mad-Scientist-way&#8221;</a>.</p>
<p>The display performs really well, the pixels are bright and the batteries last for over two weeks running non-stop. The microcontroller has 2 k flash RAM. That&#8217;s enough for three simple animations and a couple of messages.</p>
<p>If you want to see the guts, then follow me to the <a href="http://tinkerlog.com/howto/64pixels/">64pixels howto</a>. </p>
<p>And grab a <a href="http://store.tinkerlog.com/store/index.php?main_page=product_info&#038;cPath=4&#038;products_id=9">64pixels kit</a> from the Tinker Store, if you want to build your very own.</p>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2009/03/21/64pixels-are-enough/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>LED matrix projector</title>
		<link>http://tinkerlog.com/2008/08/31/led-matrix-projector/</link>
		<comments>http://tinkerlog.com/2008/08/31/led-matrix-projector/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 13:13:20 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[led]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/2008/08/31/led-matrix-projector/</guid>
		<description><![CDATA[
Lately I was playing with my dual color LED matrix from Sparkfun. It is a matrix of 8 by 8 dual color (red and green) LEDs that measures 5 cm by 5 cm. I just had some sprites flickering across the matrix as the magnifying glass of my &#8220;third hand&#8221; came in the way. I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tinkerlog.com/wp-content/uploads/2008/08/ldsc_0025.JPG" title="LED matrix"><img src="http://tinkerlog.com/wp-content/uploads/2008/08/sdsc_0025.JPG" alt="LED matrix" /></a></p>
<p>Lately I was playing with my <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=682" title="Sparkfun: Dual color LED matrix" target="_blank">dual color LED matrix</a> from Sparkfun. It is a matrix of 8 by 8 dual color (red and green) LEDs that measures 5 cm by 5 cm. I just had some sprites flickering across the matrix as the magnifying glass of my &#8220;third hand&#8221; came in the way. I realized, that, if in the right distance, it will project the sprites on the ceiling. Although the projection is not very bright, it works, if the room is dark enough. Disco, here I come.</p>
<p><span id="more-162"></span></p>
<h3>Materials</h3>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/08/ldsc_0157.JPG" title="Dual color LED matrix"><img src="http://tinkerlog.com/wp-content/uploads/2008/08/sdsc_0157.JPG" alt="Dual color LED matrix" /></a></p>
<p>So here is, what you need to build one:</p>
<ul>
<li>Arduino, <a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=19&amp;products_id=91" title="Adafruits: USB Boarduino" target="_blank">Boarduino</a> from Adafruits for the breadboard</li>
<li><a href="http://www.sparkfun.com/commerce/product_info.php?products_id=682" title="Sparkfun: Dual color LED matrix" target="_blank">Dual color LED matrix</a> from Sparkfun</li>
<li>2 * 74HC595 shift register</li>
<li>1 * ULN2803 darlington sink driver</li>
<li>16 * 100R resistors</li>
<li>1 * 10kR potentiometer</li>
<li>magnifying glass</li>
</ul>
<h3>Schematic</h3>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/08/l_matrix_schematic.png" title="Schematic dual color led matrix"><img src="http://tinkerlog.com/wp-content/uploads/2008/08/s_matrix_schematic.png" alt="Schematic dual color matrix" /></a><br />
The matrix is orgranized in 8 rows and 16 columns (8 red and 8 green). To address a single LED in the matrix, you have to set one of the 16 column bits and enable the coresponding row. Note that there is always only a single row active. If every row is activated fast enough, a steady picture comes into being. The shift registers are used to provide column data. 16 bits are are loaded serially and put out parallely.</p>
<p>The rows are handled by an ULN2803, an array of darlington transistors. This chip is used to sink the current of the activated row. If every LED in a single row is activated, the current for this row will sum up to 320 mA (16 * 20 mA). Definately too much for a single pin of a microcontroller. The ULN2803 is able to sink up to 500 mA per channel and cheap (about 30 euro cent).</p>
<h3>Software</h3>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/08/ldsc_0163.JPG" title="LED matrix projector"><img src="http://tinkerlog.com/wp-content/uploads/2008/08/sdsc_0163.JPG" alt="LED matrix projector" /></a></p>
<p>To generate a steady picture, we have to provide 16 bit of data, at least every 2.5 msÂ  (50 Hz * 8 rows). For this purpose the timer 2 of the ATMega168 is used. This timer normally controlls PWM channels 3 and 11 for Arduinos, so they are no longer accessible. The ISR (Interrupt Service Routine) for this timer takes the 16 bits for the current row and shifts them out. Next time it is called, it will output the data for the next row. Take a look at the great <a href="http://www.uchobby.com/index.php/2007/11/24/arduino-interrupts/" title="uc Hobby: Interrupt tutorial" target="_blank">uc Hobby tutorial on Arduino interrupts</a> for more details.</p>
<p>The sprites are organized in 8 bytes (8 * 8 bits). So every sprite can cover the whole matrix for a single color. The screen memory is organized as 16 bytes, 8 bytes for red and green. That way you can print a sprite in red or green. If you print it in red and green, the result is orange.</p>
<p>To control the sprites, I hacked a tiny script language. The scripts are arranged in small sequences. Every sequence consists of commands of one or two bytes. Available commands are:</p>
<ul>
<li>select page (none, red, green, orange)</li>
<li>select sprite</li>
<li>move sprite (up, down, left, right)</li>
<li>print selected sprite and selected page</li>
<li>sleep</li>
<li>call sub sequence</li>
</ul>
<p>With the possibility to structure commands in sequences and subsequences it is possible to create more complex animation as with simple frame by frame animation. That may be handy if the memory is limited as it is for the ATMega168 with 16kB SRAM.</p>
<h3>Demo</h3>
<p><object width="441" height="249"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1635169&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1635169&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="441" height="249"></embed></object></p>
<p>As you can see, the projection is not bright enough to show up on my camera. So I had to switch to &#8220;night mode&#8221;. That worked but lacked the speed of the animation. It looks much better in real.</p>
<h3>Links and downloads</h3>
<ul>
<li><a href="http://www.sparkfun.com/commerce/product_info.php?products_id=682" title="Sparkfun: Dual color LED matrix" target="_blank">Dual color LED matrix</a> at Sparkfun</li>
<li><a href="http://www.uchobby.com/index.php/2007/11/24/arduino-interrupts/" title="uc Hobby: Interrupt tutorial" target="_blank">Arduino interrupt tutorial</a> at uc Hobby</li>
<li><a href="http://www.arduino.cc/en/Tutorial/ShiftOut" title="Arduino.cc: Shift register tutorial" target="_blank">Arduino 74595 tutorial</a></li>
<li>Source sketch <a href="http://tinkerlog.com/wp-content/uploads/2008/08/matrix.zip" title="matrix.zip">matrix.zip</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2008/08/31/led-matrix-projector/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Synchronizing Fireflies NG</title>
		<link>http://tinkerlog.com/2008/07/27/synchronizing-fireflies-ng/</link>
		<comments>http://tinkerlog.com/2008/07/27/synchronizing-fireflies-ng/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 17:26:07 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[simulation]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/2008/07/27/synchronizing-fireflies-ng/</guid>
		<description><![CDATA[

Update 04. Dec. 2008: This article is replaced by the new howto.
This is a remake of the fireflies which I did a year ago. I was always fascinated by the emergence of patterns. One I like most is the synchronization of hundreds or thousands of fireflies. First they flash randomly but after some time and [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Firefly" href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0080.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0080.JPG" alt="s-dsc_0080.JPG" /></a></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="440" height="268" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AcTSXgA" /><embed type="application/x-shockwave-flash" width="440" height="268" src="http://blip.tv/play/AcTSXgA"></embed></object></p>
<p><strong>Update 04. Dec. 2008</strong>: This article is replaced by the new <a title="Synchronizing Firefly HowTo" href="http://tinkerlog.com/howto/synchronizing-firefly-how-to/" target="_self">howto</a>.</p>
<p>This is a remake of the <a title="Tinkerlog: Synchronizing fireflies" href="http://tinkerlog.com/2007/05/11/synchronizing-fireflies/" target="_blank">fireflies</a> which I did a year ago. I was always fascinated by the emergence of patterns. One I like most is the synchronization of hundreds or thousands of fireflies. First they flash randomly but after some time and influencing each other, they flash in sync.</p>
<p>This circuit simulates fireflies with small microcontrollers. Note that every firefly acts completely autonomously, it is not a preprogrammed pattern. It is a <a title="Wikipedia: Self organizing system" href="http://en.wikipedia.org/wiki/Self-organization" target="_blank">self organizing system</a>.</p>
<p>The NG version uses a small PCB (Printed Circuit Board) and a RGB-LED.</p>
<p><span id="more-117"></span></p>
<h3>Software</h3>
<p>Each firefly has a value that stands for the power to flash. This value rises over time. If the power reaches a certain limit, the firefly flashes and the power is reset to zero. If the firefly detects another flash nearby, it increases the power by a small boost value. That way it will flash slightly earlier than last time. Doing so over and over again may lead to all fireflies flashing in sync.</p>
<p>The RGB-firefly uses color to express its mood. If all is in sync, it will flash in relaxed and cool blue. If it detects flashes that are not in sync, it will get a bit uncomfortable and the color will slightly change to green, yellow and red.</p>
<h3>The circuit</h3>
<p><a title="Firefly schematic" href="http://tinkerlog.com/wp-content/uploads/2008/07/l-rgb_firefly.png"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/rgb_firefly.png" alt="Firefly schematic" /></a></p>
<p>The circuit is rather simple. Main parts are the microcontroller, the light sensor and the RGB-LED. The sensor and R4 are forming a voltage divider. An ADC (Analog Digital Conversion) channel at pin 3 is used to read the values of the sensor. The circuit is designed for 5V power supply. It has no integrated power regulator.</p>
<h3>Parts</h3>
<p><a title="Parts for a firefly" href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0008.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/dsc_0008-s.JPG" alt="dsc_0008-s.JPG" /></a></p>
<p>Here are the parts, that are needed for a single firefly.</p>
<ul>
<li>Firefly PCB</li>
<li>ATtiny13v, <a href="http://www.digikey.com/scripts/DkSearch/dksus.dll?PName?Name=ATTINY13V-10PU-ND" target="_blank">digi-key</a></li>
<li>RGB-LED, 4000 mcd, generic</li>
<li>8-pin socket, generic</li>
<li>3 * 100R resistor, R1, R2, R3, generic</li>
<li>1 * 4.7kR resistor, R4, generic</li>
<li>Photoresistor (<a title="Wikipedia: LDR" href="http://en.wikipedia.org/wiki/Light_Dependent_Resistor" target="_blank">LDR</a>), 4k to 11kR</li>
<li>pin header and socket (used for power supply)</li>
<li>ping pong ball</li>
</ul>
<p>Various types of photoresistors exist. I tried two different versions and both work well. Only resistor R4 has to be adjusted, as R4 and the photoresistor are building a voltage divider. Choose R4 in a way, that gives you a good range of voltage and still limits the current through the photoresistor.</p>
<p>My latest experiments showed that a <a title="Wikipedia: Phototransistor" href="http://en.wikipedia.org/wiki/Phototransistor" target="_blank">phototransistor</a> seems even better suited. Compared to the LDR, it does not have a memory effect and reacts faster (~5ms compared to ~50ms). I chose the <a title="SHF 3310 Datasheet" href="http://catalog.osram-os.com/catalogue/catalogue.do;jsessionid=FFAB8C81BA9688B547D698650FD47E37?act=downloadFile&amp;favOid=02000002000062a5000200b6" target="_blank">SFH 3310</a> and 100k for R4.</p>
<p>One thing to remember while choosing a light sensor, is that the spectral sensitivity of the sensor has to match the humans eye sensitivity (~400 nm &#8211; ~700 nm).</p>
<h3>Solder it</h3>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0011.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0011.JPG" alt="s-dsc_0011.JPG" /></a></p>
<p>First solder the power connectors. Having a female and male connectors on the boards makes it easy to power a couple in a row.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0012.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0012.JPG" alt="s-dsc_0012.JPG" /></a></p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0013.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0013.JPG" alt="s-dsc_0013.JPG" /></a></p>
<p>Next insert the resistors. R1-3 are 100R, R4 is 4.7kR (depends on the sensor).</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0015.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0015.JPG" alt="s-dsc_0015.JPG" /></a></p>
<p>Solder them.</p>
<p><a title="s-dsc_0016.JPG" href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0016.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0016.JPG" alt="s-dsc_0016.JPG" /></a></p>
<p>Cut off the legs.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0018.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0018.JPG" alt="s-dsc_0018.JPG" /></a></p>
<p>Next insert the 8-pin header for the controller. Note that the notch of the header points up.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0017.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0017.JPG" alt="s-dsc_0017.JPG" /></a></p>
<p>Solder the header.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0020.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0020.JPG" alt="s-dsc_0020.JPG" /></a></p>
<p>Next insert the LDR. For the LDR the orientation does not matter. For the phototransistor it does! The phototransistor has a long (emitter) and a short leg (collector). Insert it with the long leg at the bottom. And solder it.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0021.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/t-dsc_0021.JPG" alt="t-dsc_0021.JPG" /></a> <a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0022.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/t-dsc_0022.JPG" alt="t-dsc_0022.JPG" /></a></p>
<p>Now prepare the LED. Mine are clear and have a lens on top. Use sandpaper to roughen the surface. That way the light of the LED will be emitted in all directions.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0023.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0023.JPG" alt="s-dsc_0023.JPG" /></a></p>
<p>The RGB-LED has four pins. Mine is a common cathode.</p>
<ol>
<li>green (short)</li>
<li>blue (longer)</li>
<li>GND (longest)</li>
<li>red (shortest)</li>
</ol>
<p>Bend the two inner legs a bit off.<br />
<a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0024.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0024.JPG" alt="s-dsc_0024.JPG" /></a></p>
<p>Insert the LED. Be sure to have pin 1 in the hole with the square solder pad. The longest leg is in the diagonal opposite corner. Now solder it.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0025.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0025.JPG" alt="s-dsc_0025.JPG" /></a></p>
<p>Now it should look like this and we are almost done.</p>
<p><a href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0026.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0026.JPG" alt="s-dsc_0026.JPG" /></a></p>
<p>Drill a 4mm hole in the ping pong ball. Use a file to widen the hole a bit. Try to put it on the LED.</p>
<p>Program the controller and insert it into the socket. Take care of the notch.</p>
<p><a title="s-dsc_0027.JPG" href="http://tinkerlog.com/wp-content/uploads/2008/07/l-dsc_0027.JPG"><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0027.JPG" alt="s-dsc_0027.JPG" /></a></p>
<p>Here is the final result, the first firefly. Ready for some action.</p>
<h3>Issues</h3>
<p>There are minor issues that I want to have fixed for the next batch of PCBs.</p>
<ul>
<li>I will make the PCB a bit larger to make it more stable.</li>
<li>The circuit is missing bypass capacitors (100nF and 100uF). It works great without but it&#8217;s best practice to have them.</li>
<li>The sockets for the power supply are not protected against polarity reversal. Not quite sure how to fix this.</li>
</ul>
<h3>Conclusion</h3>
<p><img src="http://tinkerlog.com/wp-content/uploads/2008/07/s-dsc_0087.jpg" alt="Firefly" /></p>
<p>Playing with these fireflies is really mesmerizing. It&#8217;s not like most computer controlled things because it is non deterministic. Every time you start it, it will produce new patterns and behave differently.</p>
<p>I am quite happy how well the PCB worked out. It was my second design that I have had produced. Now I am feeling confident enough to go for a bigger batch of PCBs.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="440" height="268" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AcTTaAA" /><embed type="application/x-shockwave-flash" width="440" height="268" src="http://blip.tv/play/AcTTaAA"></embed></object></p>
<h3>Downloads and Links</h3>
<ul>
<li>Buy a kit at the <a title="Firefly Kit" href="http://store.tinkerlog.com/store/index.php?main_page=product_info&amp;cPath=2&amp;products_id=2" target="_blank">Tinker Store</a></li>
<li>Source and schematics (Eagle) <a title="rgb_firefly.zip" href="http://tinkerlog.com/wp-content/uploads/2008/07/rgb_firefly.zip">rgb_firefly.zip</a></li>
<li>Phototransistor <a title="Datasheet" href="http://catalog.osram-os.com/catalogue/catalogue.do;jsessionid=FFAB8C81BA9688B547D698650FD47E37?act=downloadFile&amp;favOid=02000002000062a5000200b6" target="_blank">SFH 3310 Datasheet</a></li>
<li><a href="http://tinkerlog.com/2007/05/11/synchronizing-fireflies/">Synchronizing Fireflies</a> (first version)</li>
<li><a title="Instructables: Synchronizing Fireflies" href="http://www.instructables.com/id/STP50NJF05JJP4N/">Synchronizing Fireflies</a> (at Instructables)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2008/07/27/synchronizing-fireflies-ng/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>Tengu clone on PCB</title>
		<link>http://tinkerlog.com/2008/05/03/tengu-clone-on-pcb/</link>
		<comments>http://tinkerlog.com/2008/05/03/tengu-clone-on-pcb/#comments</comments>
		<pubDate>Sat, 03 May 2008 11:29:54 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[PCB]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[sound]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/2008/05/03/tengu-clone-on-pcb/</guid>
		<description><![CDATA[
This is a new version of my Tengu clone. This time on a printed circuit board (PCB).  I have them produced by Olimex and I am very pleased with the quality. The PCB worked on the first try and has some minor issues only.

Materials


Tengu PCB
Everlight 8*5 LED dot matrix
ATmega48, 4kB Flash RAM,  512 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://tinkerlog.com/wp-content/uploads/2008/05/dsc_0498_s.jpg" alt="dsc_0498_s.jpg" /></p>
<p>This is a new version of my <a href="http://tinkerlog.com/2007/10/22/diy-tengu-on-a-breadboard/" title="DIY Tengu">Tengu clone</a>. This time on a printed circuit board (PCB).  I have them produced by <a href="http://tinkerlog.com/2008/04/04/pcbs-from-olimex/" title="PCBs from Olimex" target="_blank">Olimex</a> and I am very pleased with the quality. The PCB worked on the first try and has some minor issues only.</p>
<p><span id="more-99"></span></p>
<h3>Materials</h3>
<p><img src="http://tinkerlog.com/wp-content/uploads/2008/05/dsc_0497_s.jpg" alt="dsc_0497_s.jpg" /></p>
<ul>
<li>Tengu PCB</li>
<li>Everlight 8*5 LED dot matrix</li>
<li>ATmega48, 4kB Flash RAM,  512 bytes RAM</li>
<li>4 MHz crystal</li>
<li>LM386 Op-Amp</li>
<li>28 pin header</li>
<li>8 pin header</li>
<li>2 * 22pF capacitors</li>
<li>3 * 100nF capacitors</li>
<li>10k potentiometer</li>
<li>100k potentiometer</li>
<li>100k resistor</li>
<li>5 * 1k resistors</li>
<li>2 * 7 pin header sockets</li>
<li>2 pin headers for power supply and microphone (optional)</li>
<li>Electret microphone (not on the picture)</li>
</ul>
<p>Note, that the electret microphone has a polarity. On the PCB the inner pin is the positive one. If you connect it the wrong way, it is heating up really quick.</p>
<p>The microphone that I used here has an impedance of 2k. You may have to experiement a bit with different microphones.</p>
<p>The capacitor C2 is used to control the amplification of the LM386. I used 0.1uF but you can use up to 10uF to get a stronger amplification. Here is the <a href="http://www.josepino.com/circuits/index?mini_amplifier_lm386.jpc" title="Mini amplifier with LM386" target="_blank">amplifier circuit</a> that I used.</p>
<h3>PCB design issues</h3>
<p><img src="http://tinkerlog.com/wp-content/uploads/2008/05/dsc_0506_s.jpg" alt="dsc_0506_s.jpg" /></p>
<p>As this is my first design, there are a couple of things that I would redesign.</p>
<p>As I tried to insert the pin header sockets, I realized that the drill holes were a bit too narrow. You have to use a bit of strength to insert the headers, but it works.</p>
<p>All solder pads used for resistors and capacitors are a bit too small. It was a bit difficult to solder them. I would make them a larger next time.</p>
<p>I think I should use a bit less of the silk layer. Some solder pads are covered with silk. Most of the time that does not hurt as it is on the top side. But there are pins that you may wont to solder on the top side, e.g. the power connector.</p>
<h3>Improvements</h3>
<p>The component count could be reduced if I had dropped crystal. For the animation of the LED matrix the internal oscillator would be sufficient. On the other hand, with a suited crystal, this circuit could be modified to display the time.</p>
<p>I would add an ISP (in system programming) header for easier programming. Now you have to flip off the display, take out the controller, program it, re-insert it and put the display back in place. Not a fast turn around if you want to modify the firmware.</p>
<p>What would you think of an Arduino version of this circuit? The controller could be replaced with an Arduino compatible ATmega168. Or maybe as an Arduino shield?</p>
<h3>Conclusion</h3>
<p>It is great to see your first produced PCB. Even better if it works on the first try. Maybe I can even build a kit out of it with the next revision of the board.</p>
<p><object type="application/x-shockwave-flash" data="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&amp;feedurl=http%3A%2F%2F9600baud%2Eblip%2Etv%2Frss&amp;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F881117%3Freferrer%3Dblip%2Etv%26source%3D1&amp;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf" allowfullscreen="true" id="showplayer" height="255" width="400"><param name="movie" value="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&amp;feedurl=http%3A%2F%2F9600baud%2Eblip%2Etv%2Frss&amp;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F881117%3Freferrer%3Dblip%2Etv%26source%3D1&amp;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf"></param><param name="quality" value="best"></param><ibed quality="best" width="400" height="255" name="showplayer" type="application/x-shockwave-flash"></ibed></p>
<p></object>As I have still two boards left, you can email me at alex at this domain and I will send you the PCB for free. The only requirement would be, that you really want to build it and that you give me feedback on how it worked, what you would change or how you modded it.</p>
<h3>Links and Downloads</h3>
<ul>
<li><a href="http://www.mr-jones.org/tengu/index.html" title="Crispni Jones Tengu" target="_blank">Crispin Jones Tengu</a>, the original idea of this device</li>
<li><a href="http://www.josepino.com/circuits/index?mini_amplifier_lm386.jpc" title="Mini amplifier with LM386" target="_blank">Mini Amplifier with LM386</a></li>
<li><a href="http://tinkerlog.com/2007/11/10/tengu-clone-update/" title="Tengu clone on prototype board">Tengu clone on prototype board</a></li>
<li><a href="http://tinkerlog.com/2007/10/22/diy-tengu-on-a-breadboard/" title="Tengu clone on a breadboard">Tengu clone on a breadboard</a></li>
<li><a href="http://tinkerlog.com/wp-content/uploads/2008/05/tengu-clone-rev-10a.zip" title="tengu-clone-rev-10a.zip">tengu-clone-rev-1.0a.zip</a> source and Eagle schematics</li>
</ul>
<p>More at Flickr.<br />
<!-- Start of Flickr Badge --></p>
<style type="text/css"> #flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;} #flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;} #flickr_icon_td {padding:0 5px 0 0 !important;} .flickr_badge_image {text-align:center !important;} .flickr_badge_image img {border: 1px solid black !important;} #flickr_www {display:block; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;} #flickr_badge_uber_wrapper a:hover, #flickr_badge_uber_wrapper a:link, #flickr_badge_uber_wrapper a:active, #flickr_badge_uber_wrapper a:visited {text-decoration:none !important; background:inherit !important;color:#3993ff;} #flickr_badge_wrapper {background-color:#ffffff;border: solid 1px #000000} #flickr_badge_source {padding:0 !important; font: 11px Arial, Helvetica, Sans serif !important; color:#666666 !important;} </style>
<table id="flickr_badge_uber_wrapper" border="0" cellpadding="0" cellspacing="10">
<tr>
<td><a href="http://www.flickr.com" id="flickr_www">www.<strong style="color: #3993ff">flick<span style="color: #ff1c92">r</span></strong>.com</a></p>
<table id="flickr_badge_wrapper" border="0" cellpadding="0" cellspacing="10">
<tr><script src="http://www.flickr.com/badge_code_v2.gne?count=3&amp;display=random&amp;size=t&amp;layout=h&amp;source=user_tag&amp;user=8123185%40N02&amp;tag=tengu" type="text/javascript"></script></tr>
</table>
</td>
</tr>
</table>
<p><!-- End of Flickr Badge --></p>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2008/05/03/tengu-clone-on-pcb/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Nervous BlinkM</title>
		<link>http://tinkerlog.com/2008/03/15/nervous-blinkm/</link>
		<comments>http://tinkerlog.com/2008/03/15/nervous-blinkm/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 09:51:47 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[sensor]]></category>

		<guid isPermaLink="false">http://tinkerlog.com/2008/03/15/nervous-blinkm/</guid>
		<description><![CDATA[BlinkM is a smart LED, developed by Tod E. Kurt from ThingM. In a way it is a cousin of the Programmable LED. It is a microcontroller with an attached RGB LED. The idea is to implement PWM to control the color and brightness of the LED and put it in the controller. That means [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://thingm.com/products/blinkm" title="BlinkM" target="_blank">BlinkM</a> is a <a href="http://todbot.com/blog/2007/07/03/smart-interface-components-my-sketching07-talk/" title="Smart interfaces" target="_blank">smart LED</a>, developed by Tod E. Kurt from ThingM. In a way it is a cousin of the <a href="http://tinkerlog.com/2007/05/09/programmable-led/" title="Prgrammable LED" target="_blank">Programmable LED</a>. It is a microcontroller with an attached RGB LED. The idea is to implement PWM to control the color and brightness of the LED and put it in the controller. That means you have an abstraction level to make your programming easier. You can simply order &#8220;fade to red&#8221; or &#8220;fade to blue&#8221;.</p>
<p><img src="http://tinkerlog.com/wp-content/uploads/2008/03/dsc_0010_1.jpg" alt="dsc_0010_1.jpg" /></p>
<p><span id="more-94"></span>As a demo, I built a &#8220;nervous&#8221; BlinkM. It is getting nervous, if something moves in its view. And the more it moves, the more it gets nervous.<br />
It consists of my <a href="http://tinkerlog.com/2008/01/07/arduino-on-a-prototype-board/" title="Arduino on a proto board" target="_blank">Boarduino clone</a>, a <a href="http://www.gorobotics.net/Articles/Sensors/Effectively-Using-the-Sharp-GP2D12-Rangefinder/" title="Sharp GP2D12 Howto" target="_blank">Sharp GP2D12</a> range sensor and a BlinkM. The Arduino reads the range of the range sensor and computes a value for the nervousness.</p>
<h3>Talk to the BlinkM</h3>
<p>Interfacing an Arduino with the BlinkM is easy as the BlinkM comes with lots of sample code. You just have to copy an include file (BlinkM_funcs.h) and place it beside your Arduino sketch and include it. All the I2C stuff is taken care of.</p>
<p>After initializing the BlinkM you can send commands to it. You can, e.g.</p>
<ul>
<li>fade to a color, defined by RGB</li>
<li>fade to a color, defined by HSB</li>
<li>set fading speed</li>
<li>write a script</li>
<li>play a script</li>
</ul>
<h3>Code</h3>
<p>My two sketches are really simple. One changes the color, the other changes the frequency. Here is the code for the first one.</p>
<pre name="code" class="c">
/*
 * Nervous Blinkm
 * Change the color depending on range changes
 * 2008/03/14
 * http://tinkerlog.com
 */

#include "Wire.h"
#include "BlinkM_funcs.h"

#define RANGER_PIN 3              // pin for the sharp gp2d12 range sensor
#define DELTA_THRESHOLD 10        // threshold for the range sensor
#define MAX_RANGE_CHANGE 50       // max range change that can be detected
#define CALMED_HUE 172            // hue value for calmed state

int blinkm_addr = 0x10; // the address we're going to set the BlinkM to
int distance = 0;
int oldDistance = 0;
int nervous = 0;
int delta = 0;
byte i = 0;

void setup() {
  BlinkM_begin();
  BlinkM_setAddress(blinkm_addr);
  Serial.begin(19200);
  byte rc = BlinkM_checkAddress(blinkm_addr);
  if (rc == -1) {
    Serial.println("rnno response");
  }
  else if (rc == 1) {
    Serial.println("rnaddr mismatch");
  }
  BlinkM_stopScript(blinkm_addr);
  BlinkM_fadeToHSB(blinkm_addr, CALMED_HUE, 0xff, 0xff);
  BlinkM_setFadeSpeed(blinkm_addr, 0x10);
  nervous = 0;
}

void loop() {

  // do 4 samples of the distance to reduce the jitter of the range sensor
  distance = 0;
  for (i = 0; i &lt; 4; i++) {
    distance += analogRead(RANGER_PIN);
    delay(10);
  }
  distance = distance &gt;&gt; 2;
  Serial.print("distance: ");  Serial.print(distance);

  // compute the distance change
  delta = min(abs(oldDistance - distance), MAX_RANGE_CHANGE);
  // sum up (only if delta is noteable)
  nervous += (delta &gt; DELTA_THRESHOLD) ? (delta - DELTA_THRESHOLD) : 0;
  if (nervous &gt; CALMED_HUE) {    // limit the nervousness
    nervous = CALMED_HUE;
  }
  Serial.print(", nervous: ");  Serial.println(nervous);

  // In HSB the hue 172 stands for blue and 0 stands for red.
  // So subtracting the nervous value of the initial hue (blue) results in:
  //   "more nervous" --&gt; "more red"
  BlinkM_fadeToHSB(blinkm_addr, CALMED_HUE - nervous, 0xff, 0xff);
  oldDistance = distance;
  nervous = nervous * 0.9;       // reduce the nervousness with every cycle
  delay(50);
}</pre>
<h3>Demo</h3>
<p><object type="application/x-shockwave-flash" data="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&amp;feedurl=http%3A%2F%2F9600baud%2Eblip%2Etv%2Frss&amp;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F749676&amp;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf" allowfullscreen="true" id="showplayer" height="280" width="440"><param name="movie" value="http://blip.tv/scripts/flash/showplayer.swf?enablejs=true&amp;feedurl=http%3A%2F%2F9600baud%2Eblip%2Etv%2Frss&amp;file=http%3A%2F%2Fblip%2Etv%2Frss%2Fflash%2F749676&amp;showplayerpath=http%3A%2F%2Fblip%2Etv%2Fscripts%2Fflash%2Fshowplayer%2Eswf"></param><param name="quality" value="best"></param><ibed quality="best" width="440" height="280" name="showplayer" type="application/x-shockwave-flash"></ibed></p>
<p></object> Unfortunately it is not possible to combine the two sketches into one to control the color and the frequency.</p>
<h3>Conclusion</h3>
<p>The BlinkM is a cute little circuit. It has some computing power on its own and a real bright RGB LED. It is easy to program and you don&#8217;t have to bother about PWM. You can even script it. On the other hand it could get pricy if you want to make something that needs more devices than a hand full.</p>
<h3>Links</h3>
<ul>
<li><a href="http://blinkm.thingm.com/" title="BlinkM" target="_blank">BlinkM</a></li>
<li><a href="http://thingm.com/" title="ThingM" target="_blank">ThingM</a>, the makers of BlinkM</li>
<li>Shop a BlinkM at <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8579" title="BlinkM at Sparkfun" target="_blank">Sparkfun</a></li>
<li><a href="http://tinkerlog.com/2007/05/09/programmable-led/" title="Programmable LED">Programmable LED</a></li>
<li>Sketch to change the frequency, <a href="http://tinkerlog.com/wp-content/uploads/2008/03/nervous_blinkm_freq.pde">nervous_blinkm_freq.pde</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tinkerlog.com/2008/03/15/nervous-blinkm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
