<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Hack a Day &#187; Phil Burgess</title>
	<atom:link href="http://hackaday.com/author/philburgess/feed/" rel="self" type="application/rss+xml" />
	<link>http://hackaday.com</link>
	<description>Fresh hacks every day</description>
	<lastBuildDate>Sun, 12 Feb 2012 08:27:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='hackaday.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/5560f98f805877b0e332f191cb9e0af3?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Hack a Day &#187; Phil Burgess</title>
		<link>http://hackaday.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://hackaday.com/osd.xml" title="Hack a Day" />
	<atom:link rel='hub' href='http://hackaday.com/?pushpress=hub'/>
		<item>
		<title>Hacking cakes with LEDs, the sequel!</title>
		<link>http://hackaday.com/2011/06/12/hacking-cakes-with-leds-the-sequel/</link>
		<comments>http://hackaday.com/2011/06/12/hacking-cakes-with-leds-the-sequel/#comments</comments>
		<pubDate>Sun, 12 Jun 2011 20:01:35 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[arduino hacks]]></category>
		<category><![CDATA[cooking hacks]]></category>
		<category><![CDATA[led hacks]]></category>
		<category><![CDATA[7 segment]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[baking]]></category>
		<category><![CDATA[blinkm]]></category>
		<category><![CDATA[cake]]></category>
		<category><![CDATA[cooking]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[leds]]></category>
		<category><![CDATA[shiftbrite]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=45297</guid>
		<description><![CDATA[A few weeks back we ran a piece about the convergence of making and baking in an attempt to create a cake festooned with working LEDs. The moral was that not every creative idea ends in victory, but we applauded the spirit it takes to post one’s goofs for the whole internet to see and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=45297&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-45298" title="The cake is alight" src="http://hackadaycom.files.wordpress.com/2011/06/geeks-cooking.jpg" alt="" width="470" height="320" /></p>
<p>A few weeks back we ran a piece about the convergence of <em>making</em> and <em>baking</em> in an attempt to <a href="http://hackaday.com/2011/04/23/hacking-cakes-with-leds/">create a cake festooned with working LEDs</a>. The moral was that not every creative idea ends in victory, but we applauded the spirit it takes to post one’s goofs for the whole internet to see and to learn from.</p>
<p>[Craig]’s LED matrix proved unreliable…and the underlying cake didn’t fare much better, resembling that charred lump in the toaster oven in <em>Time Bandits</em>. The cakes-with-lights meme might have died right there if not for a fluke of association…</p>
<p><span id="more-45297"></span>At the time the story ran, some of us were working on an unrelated LED project which involved experimenting with light <a href="http://hackaday.com/2011/01/31/how-to-build-a-ping-pong-ball-display/">diffusers</a>, trying to spread distinct points of LED light to a more soothing glow. Drafting vellum and frosted acrylic both worked well, but small pieces of upholstery foam had proven especially effective.</p>
<p>Between seeing the cake project and handling squares of foam, an idea was jokingly tossed out: backlight a cake from below, using angel food cake as a light diffuser much like the foam we’d been experimenting with. The density, optical properties (and taste) do seem remarkably similar!</p>
<div id="attachment_45299" class="wp-caption alignnone" style="width: 480px"><img class="size-full wp-image-45299 " title="A series of cubes" src="http://hackadaycom.files.wordpress.com/2011/06/cubes.jpg" alt="" width="470" height="250" /><p class="wp-caption-text">(On the left: polyurethane upholstery foam, the sort used in sofa cushions. On the right: angel food cake. Or…wait…is it the other way around?)</p></div>
<p>In the creative afterglow of <a href="http://hackaday.com/2011/05/20/bay-area-maker-faire-hackaday-has-arrived/">Maker Faire</a> (or more likely it was just exhaustion), this idea somehow made the jump from <em>tongue-in-cheek</em> to <em>demo-or-die.</em> The concept would look something like this:</p>
<p><img class="alignnone size-full wp-image-45300" title="Gratuitous cross-sectional diagram" src="http://hackadaycom.files.wordpress.com/2011/06/cross-section.png" alt="" width="470" height="290" /></p>
<p>A custom pedestal would secure the LEDs in place while providing a more prominent perch for the cake. A layer of glass or clear acrylic separates the two, so the LEDs would remain clean for future projects and the cake would not be sullied with any sort of flux or <a href="http://hackaday.com/2008/05/22/how-to-go-green-with-lead-free-solder/">lead</a> or other electronic residue. RoHS compliant cake!</p>
<p>Two questions then remained:</p>
<ul>
<li>What sort of display would we make? Static lighting would be boring, we knew this <em>had</em> to be animated. As a first crack at this sort of thing, we settled on a <a href="http://hackaday.com/2011/05/03/egg-clock-its-egg-ceptional/">single seven-segment display</a>, counting down.</li>
<li>What type of LEDs to use? Instead of wiring up a pile of discrete LEDs, for the sake of a quick prototype we instead opted for serial addressible LEDs. Even then, there are decisions to be made:</li>
</ul>
<div id="attachment_45302" class="wp-caption alignnone" style="width: 480px"><img class="size-full wp-image-45302 " title="Das blinkenlights!" src="http://hackadaycom.files.wordpress.com/2011/06/led-types.jpg" alt="" width="470" height="320" /><p class="wp-caption-text">(Left: BlinkM &quot;smart LED.&quot; Right: MaceTech ShiftBrite. Top: RGB “pixels” available in various types from Adafruit, Bliptronics and Cool Neon.)</p></div>
<p>The choice of what type to use was based more on availability than on engineering: our <a href="http://www.adafruit.com/products/322">Adafruit RGB pixels</a> were tied up in another project, and we didn’t have enough <a href="http://hackaday.com/2011/03/30/converting-the-blinkm-into-the-worlds-tiniest-arduino/">BlinkMs</a> or <a href="http://hackaday.com/2010/02/25/shiftbrite-coffee-table/">ShiftBrites</a> on hand to build our prototype and didn’t want to wait around for shipping. We’d just bought a string of <a href="http://www.coolneon.com/">Cool Neon’s</a> new “Total Control Lighting” LEDs at Maker Faire and were eager to try them in something, so they won by default. Looking back, these proved less than ideal for this particular project due to the diffuse bulbs, but we give them kudos for being among the easiest to program. Over the years we’ve messed with many different addressable LEDs, and have found that there is no One LED to Rule Them All — every one of them has unique and desirable attributes for different tasks.</p>
<p>We then fashioned an LED-holding template in Adobe Illustrator, sized to fit a single page:</p>
<p><img class="alignnone size-full wp-image-45301" title="If you're looking for a witty hidden caption, you won't find it here." src="http://hackadaycom.files.wordpress.com/2011/06/template.png" alt="" width="470" height="310" /></p>
<p>This was printed and glued to a sheet of mat board, then the holes for the LEDs were laboriously cut out with a hobby knife. A <a href="http://hackaday.com/2011/03/02/open-source-laser-cutter-v2/">laser cutter</a> or even just a <a href="http://hackaday.com/2010/11/29/drill-press-for-through-hole-pcb-manufacturing/">drill press</a> would have made this much easier. For scale reference, each of the segments is about 1.5 inches wide, and with this just being a first prototype we didn’t bother with fancy beveled corners.</p>
<p>After cutting LED holes, the sidewalls and some supports were cut from <a href="http://hackaday.com/2011/03/22/paper-mechanical-iris/">foam core</a> board and assembled using a hot glue gun. These added about two inches of height to the pedestal, to accommodate the bullet-shaped LED housings and the wires underneath. Then we punched each LED into place:</p>
<p><img class="alignnone size-full wp-image-45303" title="Wait...what? We're putting LIGHTS under a CAKE?" src="http://hackadaycom.files.wordpress.com/2011/06/led-install.jpg" alt="" width="470" height="400" /></p>
<p>And there’s photographic proof of our first goof. Aside from the whole absurd idea, that is. These LED strings have connectors on both ends for daisy-chaining, with a distinct “in” and “out” end to each string. In our enthusiasm to attach a microcontroller, not thinking this through, we cut the “in” end and soldered our own breadboard wires. Electronically speaking this works just fine, but a better idea would be cutting the “out” connector, making that into our chip-to-LEDs adapter. Then this string would still work fine at the end of any chain, as well as with Cool Neon’s own driver circuits (which use the plug), and we’d have an adapter dongle for future applications with these strings. Lesson learned.</p>
<p><img class="alignnone size-full wp-image-45589" title="RAGE FACE!" src="http://hackadaycom.files.wordpress.com/2011/06/rageface.png" alt="" width="470" height="100" /></p>
<p>The string has 25 LEDs. Our display has <a href="http://hackaday.com/2009/04/11/rgb-7-segment-display/">seven segments</a>, with three LEDs each. The last four LEDs were just wadded up under the pedestal and aren’t used here, but could have been made into ground effects lighting or something suitably corny.</p>
<p>After physical installation of the LEDs, we wrote and tested the code, which runs on an <a href="http://hackaday.com/2011/02/11/how-the-arduino-won-this-is-how-we-can-kill-it/">Arduino</a>, natch. We’ll delve into the source later.</p>
<p>This pic shows the order in which the LEDs were installed and are addressed by the code. Also, the small boxes around each segment (more mat board and hot glue) restrict the diffuse outward glow from the lights and support the top acrylic for the cake:</p>
<p style="text-align:center;"><img class="size-full wp-image-45304 aligncenter" title="Dude, it's like Cribbage or something!" src="http://hackadaycom.files.wordpress.com/2011/06/led-test.jpg" alt="" width="420" height="400" /></p>
<p>We added contact paper to the bottom side of the acrylic, to further control stray light. This was probably overkill, but did help in positioning the cake segments later, as a sort of template. We’re not certain if acrylic is food-safe, so it’s possible that our eventual offspring may be born with tails or something. A small price to pay for <a href="http://hackaday.com/2011/06/06/million-volt-guitar-rocks-the-house-for-science/">SCIENCE</a>!</p>
<p><img class="alignnone size-full wp-image-45305" title="What we find most disturbing isn't that we made an animated LED cake, but that aside from the cake mixes we had EVERY SINGLE PART lying around already." src="http://hackadaycom.files.wordpress.com/2011/06/acrylic.jpg" alt="" width="470" height="320" /></p>
<p>Thus began the baking. And hilarity ensued…</p>
<div id="attachment_45306" class="wp-caption alignnone" style="width: 480px"><img class="size-full wp-image-45306 " title="FIGHT!" src="http://hackadaycom.files.wordpress.com/2011/06/cake-mixes.jpg" alt="" width="470" height="330" /><p class="wp-caption-text">(Devil’s food and angel food. In the same cake. You know this can’t end well.)</p></div>
<p>It was already determined that the segments would be angel food cake. The non-segment parts of the cake needed to be opaque…not just to contain the light, but as a vehicle for frosting, because a cake without frosting is no cake at all! We opted for chocolate, but most anything will do…red velvet, carrot cake, you name it. Not fruitcake though, it has an <a href="http://hackaday.com/2008/09/12/large-hadron-collider-roundup/">intense gravitational field from which not even light can escape</a>.</p>
<p style="text-align:center;"><img class="size-full wp-image-45310 aligncenter" title="This photo contributes absolutely nothing of value to the story but we just had to point out the kitchen mixer for geek cred. It was painted by fantasy artist and novelist Larry Dixon…whom we've never actually had the good fortune of meeting, but a mutual friend had bought it for one of us as a housewarming gift, and Mr. Dixon, suffering fever delirium from the flu at the time, insisted that his decorating the mixer before wrapping it up would be the greatest idea ever. True story." src="http://hackadaycom.files.wordpress.com/2011/06/mixer.jpg" alt="" width="300" height="300" /></p>
<p>The chocolate cake proceeded without incident. After baking and cooling, we trimmed down the risen center portion of the cake to give it a more uniform cross-section…this also provided essential sustenance to carry us through the next phase.</p>
<p><img class="alignnone size-full wp-image-45307" title="You can see the edge of the angel food cake just peeking in from the corner. That's all you're every going to see of the *@&amp;$% thing." src="http://hackadaycom.files.wordpress.com/2011/06/cake-shaving.jpg" alt="" width="470" height="250" /></p>
<p>You’ll notice there are no photographs of the angel food cake being made. Oh, sure, [Craig] may be man enough to show his failures, but not us. We usually take umbrage to those television ads that depict the “man of the house” as an imbecile when confronted with domestic tasks, as if all males are HULK SMASH! brutes who can’t so much as feed or <a href="http://hackaday.com/2008/03/31/diy-heated-vestclothing/">dress</a> themselves. We’ve seen some <a href="http://hackaday.com/2011/04/05/pid-sous-vide-slow-cooker-bon-appetit/">awesome cooking hacks</a> around here and know it’s simply not true. Then we tried baking an angel food cake…</p>
<p>Angel food cake (the name being an obvious conspiracy of marketing to lure us in) is a strange and alien thing, no doubt a product of NASA research that also brought us <a href="http://hackaday.com/2008/03/23/make-your-own-aerogel/">aerogels</a> and space shuttle thermal tiles. The box contains what looks like diatomaceous earth, to which water is added. No eggs or oil or anything resembling, y’know, <em>food.</em> This is frothed in the mixer and poured in a pan, baked (during which it swells to over 6,000 times its original volume) and then, removed from the oven and allowed to cool (very important that it’s on its side, for whatever alien agenda reason) it proceeds to mock you for all eternity as an impenetrable sticky mass that defies all attempts at cutting or removal, like a loaf-pan version of the Blob from <em>X-Men. </em>We could actually hear the garbage disposal <em>chewing</em> as it worked on this. For <em>five minutes.</em></p>
<p><img class="alignnone size-full wp-image-45611" title="MOAR RAGE!" src="http://hackadaycom.files.wordpress.com/2011/06/rageface2.png" alt="" width="470" height="100" /></p>
<p>After that experience, we’re officially declaring a one week moratorium on manly pride. If you see a guy washing his colors and whites together, or <a href="http://hackaday.com/2011/06/09/repairing-a-broken-microwave-keypad/">microwaving</a> Hot Pockets and calling it “dinner,” he is <em>totally</em> fair game for mockery. You have our permission.</p>
<p>So, another trip to the grocery store, returning with a pre-made angel food loaf cake (day old, for extra durability)…which, we’ll note, would have been cheaper than buying the mix in the first place…and we can proceed…</p>
<p>Both cakes were carved into suitably-sized segments and arranged on the acrylic base/template. To help keep the angel food segments spotless and clean of frosting, we pre-frosted the top of the chocolate cake before carving it up, and would touch up the seams after the fact. Had to get creative with the last few rectangles of chocolate cake, but frosting hides all sins. The angel food cake should have been trimmed a bit thinner to match the height of the chocolate cake, but we were getting hungry after the whole emasculating fiasco and just wanted to see if this thing would work or not.</p>
<p><img class="alignnone size-full wp-image-45308" title="Cake Tetris?" src="http://hackadaycom.files.wordpress.com/2011/06/cake-assembly.jpg" alt="" width="470" height="600" /></p>
<p>A quick test with the cake atop the LED pedestal showed a problem: the white cake picked up all diffuse light in the room, entirely washing out the <a href="http://hackaday.com/2010/01/22/lcd-backlight-repair/">backlighting</a>. But we’d seen this problem before…of all things, a <a href="http://www.sparkfun.com/products/9485">SparkFun capacitance meter kit</a>, which suffers the same issue where its red LED segments are washed out by the white diffusers in a bright room. The fix there is to add a piece of smoked acrylic atop the display. So we applied a similar principle here, but wanting to keep everything edible we used fruit roll-ups instead of acrylic. Reflecting on it now, fruit jelly would have tasted better and would slice well with the rest of the cake.</p>
<p style="text-align:center;"><img class="size-full wp-image-45309 aligncenter" title="It's alive! ALIVE!" src="http://hackadaycom.files.wordpress.com/2011/06/its-alive.jpg" alt="" width="360" height="360" /></p>
<p>The fruity fix didn’t address the problem completely, and it was still necessary to operate the cake in <a href="http://hackaday.com/2011/04/06/blu-ray-laser-plotter-writes-on-glow-in-the-dark-screen/">near-darkness</a> for best effect, which may or may not be a problem since programmers normally thrive in <a href="http://hackaday.com/2010/10/02/diy-night-vision-monocle/">low-light conditions</a>. The photo above shows how the number “6” looks under normal room lighting…washed out and nearly indistinguishable from the full “8”. Using brighter, more directional LEDs (but still using the fruit topping) would probably help with this…BlinkMs or ShiftBrites or their <a href="http://thingm.com/products/blinkm-maxm.html">higher-lumen</a> <a href="http://macetech.com/store/index.php?main_page=product_info&amp;cPath=1&amp;products_id=9">equivalents</a>. Not <a href="http://macetech.com/store/index.php?main_page=product_info&amp;cPath=1&amp;products_id=16">too much</a> though, or you’ll go all Easy Bake Oven on it.</p>
<p>Here’s a video of the completed countdown cake in action:</p>
<span style="text-align:center; display: block;"><a href="http://hackaday.com/2011/06/12/hacking-cakes-with-leds-the-sequel/"><img src="http://img.youtube.com/vi/d_o7c2cz0nU/2.jpg" alt="" /></a></span>
<p>So the idea does…kind of…work. Would we try it again? Probably not. It was a fun idea to mess around with – <em>a hack</em> – and any day you get to <a href="http://hackaday.com/2005/09/05/hada01-logo-cake/">eat cake and call it your job</a> is a good day indeed, but the effect ultimately wasn’t worth the effort. Like the original article, we hope this one can be filed under “heroic failure.” It’s progress though, and might give someone <em>food for thought.</em> Maybe third time’s the charm.</p>
<p>A closing thought is that this could be combined with a <a href="http://hackaday.com/2011/04/25/portal-turret-plushie-is-cute-and-harmless/">Wave Shield</a> or the <a href="http://hackaday.com/2011/06/08/chipkit-sketch-mini-polyphonic-sampling-synth/">chipKIT digital audio technique from a prior article</a> to play the Happy Birthday song, creating a cake that’s both fattening <em>and</em> incredibly annoying!</p>
<p>Finally, here’s the Arduino sketch that drives the LED display:</p>
<p><pre class="brush: plain;">
// 7-segment LED Cake Sketch for Arduino.
// Uses Cool Neon's &quot;Total Control Lighting&quot;
// addressible LEDs.  Data issued on Arduino
// digital pin 11, clock on pin 13.

#include &lt;SPI.h&gt;

// 7-segment bitmask for each digit.
// Bit-to-segment mapping is as follows:
//     1
//   2   0
//     6
//   3   5
//     4
// This corresponds to the order in which LEDs
// are mounted in the physical template.
byte segmask[] = {
  B0111111, B0100001, B1011011, // 0 - 2
  B1110011, B1100101, B1110110, // 3 - 5
  B1111110, B0100011, B1111111, // 6 - 8
  B1110111, B1111010,           // 9, ersatz 10
  B0100001, B0110000, B0011000, // Spinny thing
  B0001100, B0000110, B0000011
};

#define N_PIXELS  25
#define GAMMA    2.4
byte gamma[256];

void sendPixel(byte r, byte g, byte b)
{
  SPI.transfer(~((r &gt;&gt; 6)              |
                ((g &gt;&gt; 4) &amp; B00001100) |
                ((b &gt;&gt; 2) &amp; B00110000)));
  SPI.transfer(b);
  SPI.transfer(g);
  SPI.transfer(r);
}

void sendLatch()
{
  for(byte i = 0; i &lt; 4; i++) SPI.transfer(0);
}

void setup()
{
  int i;

  // Initialize SPI communication:
  SPI.begin();
  // The following 3 lines can normally be
  // left out - Arduino's default SPI config
  // appears to be MSB, Mode 0 and runs at
  // 4 MHz (instead of 8 as is done here,
  // but still plenty quick).  But for
  // posterity, here's the full config:
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2); // 8 MHz

  sendLatch(); // Wake up!

  // Set all pixels to initial &quot;off&quot; state:
  for(i = 0; i &lt; N_PIXELS; i++) sendPixel(0, 0, 0);
  sendLatch();

  // Calculate gamma correction table.
  // Provides a perceptually more linear
  // fade between brightness levels.
  for(i = 0; i &lt; 256; i++) {
    gamma[i] = (byte)(255.0 *
      pow((float)i / 255.0, GAMMA));
  }
}

byte digit = 10,
     prev  = 10;

void loop() {
  byte i, bit, x;
  int  fade;

  // Fade from previous to current digit:
  for(fade = 0;fade &lt; 256; fade++ ) {

    // For each of 7 segments:
    for(bit = 0x01; bit &lt; 0x80; bit &lt;&lt;= 1) {

      x = 0; // Assume segment is off by default
      if(segmask[digit] &amp; bit) { // On, or fading on
        x = (segmask[prev] &amp; bit) ? 255 : gamma[fade];
      } else if(segmask[prev] &amp; bit) { // Fading off
        x = gamma[255 - fade];
      }

      // 3 LED &quot;pixels&quot; per segment
      for(i = 0; i &lt; 3; i++) sendPixel(x, x, x);
    }

    // Last 4 pixels are unused and stay off
    for(i = 0; i &lt; 4; i++) sendPixel(0, 0, 0);

    sendLatch(); // Update LEDs
    delay(1);    // ~1000 updates/sec
  }

  // Hold last image for remainder of ~1 sec.
  delay(1000 - 256);

  if(digit &gt; 0) { // Still counting down
    prev = digit;
    digit--;
  } else { // Done counting, reset...
    // But show spinny animation first
    for(int n = 0; n &lt; 5; n++) {
      for(digit = 11; digit &lt;= 16; digit++) {
        for(bit = 0x01; bit &lt; 0x80; bit &lt;&lt;= 1) {
          x = (segmask[digit] &amp; bit) ? 255 : 0;
          for(i = 0; i &lt; 3; i++) sendPixel(x, x, x);
        }
        for(i = 0; i &lt; 4; i++) sendPixel(0, 0, 0);
        sendLatch();
        delay(100);
      }
    }
    digit = prev = 10;
  }
}
</pre></p>
<p>A couple of notes on using the Total Control Lighting LEDs:</p>
<ul>
<li>Red wire = +5V. White = data (Arduino pin 11). Green = clock (Arduino pin 13). Blue = ground.</li>
<li>The datasheet suggests issuing 32 consecutive zero bits to mark the start of a full frame of data, but we’d sometimes see a stray first or last pixel on the initial image. A more reliable approach has been to issue the 32 zeros at the program’s start, then <em>after</em> each full frame. Rock steady.</li>
</ul>
<br />Filed under: <a href='http://hackaday.com/category/arduino-hacks/'>arduino hacks</a>, <a href='http://hackaday.com/category/cooking-hacks/'>cooking hacks</a>, <a href='http://hackaday.com/category/led-hacks/'>led hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/45297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/45297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/45297/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=45297&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/06/12/hacking-cakes-with-leds-the-sequel/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/geeks-cooking.jpg" medium="image">
			<media:title type="html">The cake is alight</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/cubes.jpg" medium="image">
			<media:title type="html">A series of cubes</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/cross-section.png" medium="image">
			<media:title type="html">Gratuitous cross-sectional diagram</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/led-types.jpg" medium="image">
			<media:title type="html">Das blinkenlights!</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/template.png" medium="image">
			<media:title type="html">If you&#039;re looking for a witty hidden caption, you won&#039;t find it here.</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/led-install.jpg" medium="image">
			<media:title type="html">Wait...what? We&#039;re putting LIGHTS under a CAKE?</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/rageface.png" medium="image">
			<media:title type="html">RAGE FACE!</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/led-test.jpg" medium="image">
			<media:title type="html">Dude, it&#039;s like Cribbage or something!</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/acrylic.jpg" medium="image">
			<media:title type="html">What we find most disturbing isn&#039;t that we made an animated LED cake, but that aside from the cake mixes we had EVERY SINGLE PART lying around already.</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/cake-mixes.jpg" medium="image">
			<media:title type="html">FIGHT!</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/mixer.jpg" medium="image">
			<media:title type="html">This photo contributes absolutely nothing of value to the story but we just had to point out the kitchen mixer for geek cred. It was painted by fantasy artist and novelist Larry Dixon…whom we&#039;ve never actually had the good fortune of meeting, but a mutual friend had bought it for one of us as a housewarming gift, and Mr. Dixon, suffering fever delirium from the flu at the time, insisted that his decorating the mixer before wrapping it up would be the greatest idea ever. True story.</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/cake-shaving.jpg" medium="image">
			<media:title type="html">You can see the edge of the angel food cake just peeking in from the corner. That&#039;s all you&#039;re every going to see of the *@&#38;$% thing.</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/rageface2.png" medium="image">
			<media:title type="html">MOAR RAGE!</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/cake-assembly.jpg" medium="image">
			<media:title type="html">Cake Tetris?</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/its-alive.jpg" medium="image">
			<media:title type="html">It&#039;s alive! ALIVE!</media:title>
		</media:content>
	</item>
		<item>
		<title>chipKIT Sketch: Mini Polyphonic Sampling Synth</title>
		<link>http://hackaday.com/2011/06/08/chipkit-sketch-mini-polyphonic-sampling-synth/</link>
		<comments>http://hackaday.com/2011/06/08/chipkit-sketch-mini-polyphonic-sampling-synth/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 15:01:48 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[arduino hacks]]></category>
		<category><![CDATA[digital audio hacks]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[musical hacks]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[chipkit]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[drums]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[Kraftwerk]]></category>
		<category><![CDATA[max32]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[pic32]]></category>
		<category><![CDATA[piezo]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[uno32]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=45011</guid>
		<description><![CDATA[In our hands-on review of the Digilent chipKIT Uno32, we posed the question of what the lasting appeal might be for a 32-bit Arduino work-alike. We felt it needed some novel applications exploiting its special features…not just the same old Arduino sketches with MOAR BITS. After the fractal demo, we’ve hit upon something unique and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=45011&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-45012" title="chipkit-synth-title" src="http://hackadaycom.files.wordpress.com/2011/06/chipkit-synth-title.jpg" alt="" width="470" height="330" /></p>
<p>In our <a href="http://hackaday.com/2011/05/27/chipkit-uno32-first-impressions-and-benchmarks/">hands-on review of the Digilent chipKIT Uno32</a>, we posed the question of what the lasting appeal might be for a 32-bit Arduino work-alike. We felt it needed some novel applications exploiting its special features…not just the same old Arduino sketches with MOAR BITS. After the fractal demo, we’ve hit upon something unique and fun…</p>
<p><span id="more-45011"></span></p>
<p>So just what are the chipKIT’s unique features over a stock Arduino? Until the expected Ethernet shield ships this summer, a few ideas are on hold. Let’s see then…there’s no shortage of MIPS, of course…but there’s also heaps of RAM and flash storage. And with the latter, sampled audio came to mind. There are Arduino shields for just this sort of thing — the <a href="http://hackaday.com/?s=%22wave+shield%22">Adafruit Wave Shield turns up in many projects</a>, using an SD card for sound storage — but if one’s needs are modest, the chipKIT’s PIC32 is perfectly capable of storing brief audio samples in its own flash program space, no cards, adapters or added expense required. We estimate the Max32 can hold nearly a full minute of voice-quality audio.</p>
<p>Playing with the idea, we found we could do one better. Actually, several better. A limitation of SD card-based players like the Wave Shield is that they can only play one sound at a time. Dealing with the FAT filesystem and buffering audio data off the card takes nearly everything the Arduino’s little ATmega chip can muster…polyphonic sound requires <a href="http://hackaday.com/2011/02/27/layering-pinball-audio-using-parallel-wav-shields/">kludges</a>. But our flash-resident audio samples on the chipKIT are trivial to access. With the fast 32-bit CPU, many samples can be processed simultaneously…and then, with gobs of RAM, time-based effects such as reverb can be added. And before we knew it, there was a toy synthesizer sitting on the table:</p>
<p><img class="alignnone size-full wp-image-45013" title="overview" src="http://hackadaycom.files.wordpress.com/2011/06/overview.jpg" alt="" width="470" height="450" /></p>
<p>Having previously dabbled with the PIC32 using Microchip’s tools, we were surprised by the simplicity with which this went together. A few early rough spots aside, the chipKIT and MPIDE environment show major promise for being every bit as simple as Arduino. In fact, the whole build was completed faster than the documentation phase. And then a second surprise, even to us: everything in the parts list, aside from the chipKIT board itself, is common stuff that could be found at <a href="http://hackaday.com/2011/05/27/speak-your-mind-and-help-radioshack-suck-less/">RadioShack</a>. No funky special ICs, components or mail-order shields. Most of the “magic” is in software, thanks to this fast microcontroller.</p>
<p>Here’s a demonstration of the finished mini-synth in action:</p>
<span style="text-align:center; display: block;"><a href="http://hackaday.com/2011/06/08/chipkit-sketch-mini-polyphonic-sampling-synth/"><img src="http://img.youtube.com/vi/hdpQ8LEku90/2.jpg" alt="" /></a></span>
<p>Please excuse the demonstrator’s tragic lack of rhythm and coordination. This is why professional musicians get paid millions while amateurs lead sad lives as technology bloggers. Be thankful that we spared you the blooper reel.</p>
<p>Input is via five <a href="http://hackaday.com/2010/10/01/disco-drumming-with-piezo-sensitive-lighting/">piezoelectric</a> transducers (RadioShack #273-0073, $2.19 each) attached to analog inputs A0 through A4. We could have just used pushbuttons, sure, but we wanted something that could sense the pressure of each hit, and these were cheaper than force-sensitive resistors. Piezo sensors have a specific polarity, and the positive side (red wires) should connect to the analog inputs, and black to ground. There’s also a 2000 Ohm resistor added across each element:</p>
<p><img class="alignnone size-full wp-image-45014" title="schem-pads" src="http://hackadaycom.files.wordpress.com/2011/06/schem-pads.png" alt="" width="470" height="160" /></p>
<p>Input for the reverb effect is straightforward. Two 10K potentiometers on analog inputs A6 and A7 (these are on the second row of analog inputs on the chipKIT Uno32, not present on Arduino). One controls the amplitude, the other controls the delay:</p>
<p><img class="alignnone size-full wp-image-45015" title="schem-pots" src="http://hackadaycom.files.wordpress.com/2011/06/schem-pots.png" alt="" width="470" height="140" /></p>
<p>Finally, sound output uses high-speed PWM output on digital pin 3, passed through a simple low-pass filter to a headphone jack:</p>
<p><img class="alignnone size-full wp-image-45016" title="schem-filter" src="http://hackadaycom.files.wordpress.com/2011/06/schem-filter.png" alt="" width="470" height="150" /></p>
<p>On our breadboard we’re using a handy little <a href="http://www.sparkfun.com/products/10588">headphone breakout board</a> from SparkFun, but one could just solder the appropriate wire leads onto a bare jack from “The Shack” (ugh). You may want to optionally add a 1 Meg pot just before the headphone jack. The circuit worked fine as-is with headphones or an amplified iPod speaker, but totally saturated our camera’s microphone input when fed directly.</p>
<p>This demo uses 16 KHz sound samples. As per <a href="http://en.wikipedia.org/wiki/Nyquist_rate">Nyquist theory</a>, the low-pass filter is then designed for an 8 KHz (-ish) cutoff frequency. For purely voice applications, half those rates should be sufficient (saving flash space and allowing longer samples), and the two resistor values should then be doubled.</p>
<p>And that’s it for parts. Can you believe it? On to the code…</p>
<p>To begin, we need something that can convert sound files into a format the C compiler can use. An ugly little UNIX command-line utility converts WAV files from a very specific format (8-bit mono, uncompressed) into C header files that can be #included by the MPIDE project. Arduino normally would use the PROGMEM directive to put these tables into the code flash space, but that’s not required here. Surprisingly, the much-loved <a href="http://hackaday.com/2011/02/13/modern-freaking-pull-phone-numbers-from-youtube-audio/">Audacity</a> program wouldn&#8217;t export 8-bit WAVs, but we found it possible to batch convert sounds using iTunes.</p>
<p><pre class="brush: plain;">
const signed char sample_drum[] = {
        0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x01,
        0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
        ...HUNDREDS OF LINES OF STUFF...
        0xff,0xff,0xff,0xfd,0xfd,0xff,0x00,0x00,
        0x00,0x00,0x00,0x00,0x02,0x00 };
</pre></p>
<p>We’ll spare you the horror of looking at that code or doing the conversion. You can <a href="http://www.paintyourdragon.com/Synth.zip">download the complete set of project files here</a>, and then adapt it to your own needs. The remainder of this article deals only with the MPIDE code.</p>
<p>But first, one fix is required: in our <a href="http://hackaday.com/2011/05/27/chipkit-uno32-first-impressions-and-benchmarks/">prior article</a>, we encountered an issue with the chipKIT’s analog read speed, and a fix was discussed in the comments. This involves scrounging among the MPIDE source files for “wiring_analog.c” and changing a few lines. The old code resembles:</p>
<p><pre class="brush: plain;">
delayMicroseconds(99);
while ( ! mAD1GetIntFlag() ) { }
analogValue = ReadADC10(0);
mAD1ClearIntFlag();
</pre></p>
<p>This should be changed to:</p>
<p><pre class="brush: plain;">
delayMicroseconds(2);
mAD1ClearIntFlag();
while ( ! mAD1GetIntFlag() ) { }
analogValue = ReadADC10(0);
</pre></p>
<p>We’re told this change will be incorporated into later releases of the toolkit and this won’t be necessary for much longer. If you’re just ripping out the digital audio code from this project and ignoring this drum pad stuff, you can skip the change altogether.</p>
<p>And then there’s our sketch code:</p>
<p><pre class="brush: plain;">
// Mini sampling synthesizer for chipKIT Uno32.

#include &quot;sounds.h&quot;       // N_SAMPLES and data are here
#define PWM_PIN         3 // OC1 PWM output - don't change
#define SAMPLE_RATE 16000 // All samples fixed at 16 KHz
#define MAX_SOUNDS     10 // Polyphonic limit
#define MAX_ECHO     4000 // 1/4 sec fits in Uno32 RAM

short
  echo_data[MAX_ECHO]; // Circular buffer for echo

int
  echo_delay = 0, // Duration of echo effect
  echo_vol   = 0, // Echo effect volume (0-1023)
  echo_pos   = 0; // Current position in echo buffer
volatile int      // May change during interrupt:
  n_sounds   = 0; // Number of sounds currently playing

struct soundStruct {
  int sample; // Index of corresponding audio sample
  int pos;    // Current position within sample
  int vol;    // Playback volume, 0-1023
} sound[MAX_SOUNDS];

#define N_PADS N_SAMPLES // One pad for each sample

struct padStruct {
  short max;       // Max pressure during press (0-1023)
  short count;     // Timer for filtering out noise
  byte  triggered; // If set, currently reading a press
  short add;       // If &gt;0, begin sound at next interrupt
} pad[N_PADS];

void setup()
{
  memset(pad, 0, sizeof(pad));    // Clear drum pad data
  memset(echo_data, 0, sizeof(echo_data)); // Clear echo
  pinMode(PWM_PIN, OUTPUT);     // Enable PWM output pin

  // Open Timer2, 1:1 w/256 tick interval (for 8-bit PWM)
  OpenTimer2(T2_ON | T2_PS_1_1,256);
  OpenOC1(OC_ON | OC_TIMER2_SRC | OC_PWM_FAULT_PIN_DISABLE,
    0,0);

  // Open Timer1 with interrupt for sample mixer (16 KHz)
  ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_3);
  OpenTimer1(T1_ON | T1_PS_1_1, F_CPU / SAMPLE_RATE);

  delay(1);  // Slight delay avoids false trigger at start.
}

// Piezo transducers as input pads are fussy.
// To avoid false positives, a bit of hysteresis is used:
#define PRESS_MIN     20 // Must read at least this force
#define PRESS_COUNT    3 // for this many samples, then...
#define RELEASE_MAX    8 // Must read less than this force
#define RELEASE_COUNT 15 // for this many samples.
// Still imperfect; there are occasional double-triggerings
// and false triggers on adjacent pads.  Could be addressed
// with better mounting and isolation of pads and/or with
// improved input filtering in code or in hardware.

// The loop() function just reads pad and dial inputs; all
// audio work is done in the subsequent interrupt function.

void loop()
{
  int i, a;

  for(i = 0; i &lt; N_PADS; i++) {  // Sample each pad...
    a = analogRead(i);

    if(pad[i].triggered) {    // Previously pressed?
      if(a &lt;= RELEASE_MAX) {  // Yes, released now?
        if(++pad[i].count &gt;= RELEASE_COUNT) {  // Really?
          // Sounds aren't added to play list here, just
          // flagged; they're added to the mix in the
          // interrupt.  This avoids a race condition
          // where this code may be trying to add a sound
          // while the interrupt is removing one.
          pad[i].add       = pad[i].max;
          pad[i].triggered = 0;
          pad[i].count     = 0;
        }
      } else {  // Still pressed...watch for new max
        if(a &gt; pad[i].max) pad[i].max = a;
        pad[i].count = 0;  // Reset release counter
      }
    } else if(a &gt;= PRESS_MIN) {  // Untriggered; new press?
      if(++pad[i].count &gt;= PRESS_COUNT) {  // Really?
        pad[i].triggered = 1; // Flag to watch for release
        pad[i].count     = 0;
        pad[i].max       = a;
      }
    } else {  // Untriggered and below press threshold
      pad[i].count = 0;  // Clear press counter
    }
  }

  // Echo parameters come from potentiometers on A6 and A7
  echo_vol   = analogRead(6);
  echo_delay = map(analogRead(7), 0, 1023, 0, MAX_ECHO);
}

// This is the mixing/sample-playing interrupt,
// invoked at 16 KHz to match the audio sample rate.
// With guidance from Mark Sproul's PIC32 port of
// Brett Hagman's Tone library for Arduino.
extern &quot;C&quot;
{

void __ISR(_TIMER_1_VECTOR,ipl3) playSample(void)
{
  int i = 0, sum = 0;

  mT1ClearIntFlag();  // Clear interrupt flag

  while(i &lt; n_sounds) {  // For each sound playing...
    // Waveform is cumulative, NOT averaged
    sum += (int)sample[sound[i].sample].data[sound[i].pos] *
      sound[i].vol;
    sound[i].pos++;  // Advance counter.  If end hit...
    if(sound[i].pos &gt;= sample[sound[i].sample].size) {
      n_sounds--;  // Decrement number of sounds playing:
      // Move sound at end of list to the slot currently
      // occupied by the vacating sound (unless the same)
      if(i &lt; n_sounds) {
        memcpy(&amp;sound[i], &amp;sound[n_sounds],
          sizeof(soundStruct));
        continue;  // Sound moved; dont advance index
      }
    }
    i++;
  }
  sum /= 1024;

  // Add in echo effect (if enabled) from circular buffer.
  // This takes place before audio level clipping so that
  // any clipping distortion won't be repeated in echo.
  if((echo_delay &gt; 0) &amp;&amp; (echo_vol &gt; 0)) {
    sum += echo_data[echo_pos] * (echo_vol + 1) / 1024;
    echo_data[echo_pos] = sum;
    if(++echo_pos &gt;= echo_delay) echo_pos = 0;
  }

  // Clip audio to 8-bit range.  This may cause distortion
  // when multiple sounds or echo exceed the 8-bit range.
  // Invoking the &quot;quick &amp; dirty&quot; alibi again.
  if(sum &lt; -128)     sum = -128;
  else if(sum &gt; 127) sum =  127;

  SetDCOC1PWM(sum + 128);  // Set PWM output value 0-255

  // Check for any new sounds flagged by loop().
  // Done last because sounds finished above will
  // free up polyphonic slots.
  for(i = 0; i &lt; N_PADS; i++) {
    if(pad[i].add) {
      if(n_sounds &lt; MAX_SOUNDS) {
        sound[n_sounds].sample = i;
        sound[n_sounds].pos    = 0;
        sound[n_sounds].vol    = pad[i].add + 1;
        n_sounds++;
      }
      pad[i].add = 0;  // Clear flag even if not added
    }
  }
}

} // end extern &quot;C&quot;
</pre></p>
<h2>Explanation:</h2>
<p>The setup() function initializes two timers:</p>
<ul>
<li>Timer 2 and Output Compare 1 (hardware features of the PIC32 chip) are used for pulse width modulation (<a href="http://hackaday.com/2011/05/14/optimizing-code-for-pwm-efficiency/">PWM</a>). In conjunction with the filter previously described, this positions the speaker for each audio sample (Google for “PWM DAC” for explanations and examples). The PWM input clock is set to the chip’s full speed of 80 MHz, with an interval of 256 “ticks” (for 8-bit resolution), yielding a PWM waveform at 312,500 Hz. For this sort of DAC filtering it’s recommended that the PWM frequency be at least ten times the sample rate, so this is more than adequate for our needs. This is also why the code bypasses the native Arduino analogWrite() function for PWM, which operates on a much slower clock. Lastly, using Output Compare 1 dictates that we <em>must</em> use digital pin 3 for the audio output; this is one of the five native hardware PWM lines on this chip.</li>
<li>Timer 1 operates at our audio sample frequency (16 KHz) and has an <a href="http://hackaday.com/2010/09/27/beginner-concepts-all-about-avr-interrupts/">interrupt</a> function attached. This function mixes audio samples and changes the PWM duty cycle of Timer2/OC1. The rates on both of these timers are set up once and never need to change, just the one duty cycle is varied.</li>
</ul>
<p>This section of the code (and one line in the interrupt function) is admittedly not very Arduino-like, directly accessing hardware features in a non-portable manner. A more formal implementation would abstract these details into a library to which the novice programmer could just pass data. But for the sake of a simple, single-file demo, there it is, warts and all. In many ways, this is just a starting point to work from.</p>
<p>The loop() function reads the state of the piezo sensors and marks sounds to be played (received by the interrupt, later). There’s some crude <a href="http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/">debouncing</a> of the piezo inputs…this really could use some more sophisticated filtering (which the PIC32 could easily handle), but it was skipped for brevity. The code generally detects varying pressure, but there’s still a fair bit of false triggering going on. In this function the reverb controls are also read: just two analogRead() calls, with the second one then mapped to the full length of the reverb buffer.</p>
<p>The interrupt handler is where all the fun stuff happens, and it’s surprisingly simple.</p>
<p>The extern “C” declaration makes the C++ compiler happy with the interrupt function declaration.</p>
<p>The program is designed for up to ten concurrent sounds, the details of which are held in the “sound” structure array (there’s more than enough CPU performance for greater polyphony, but it’s mostly just a matter that the input pads aren’t terribly practical for this). When a pad hit is sensed, a new item is added to this array (up to the maximum). Structure elements indicate which audio sample is used for this sound, the current playback position within the sample, and the volume level.</p>
<p>Audio samples are stored as signed values (rather than unsigned) because this makes them easier to mix (just add together) and easier to adjust gains (just multiply). Every opportunity is taken to use fixed-point math. From the prior fractal demo, we saw what a massive performance difference this can make — sometimes orders of magnitude. Most of our analog readings (returned as 10 bit integers from 0 to 1023) correspond to a gain (relative volume) value of 0.0 to 1.0 (or 0% to 100%). To perform this scaling in fixed-point units, add 1 to the reading, perform the multiplication (one instruction on the PIC32), then divide by 1024 (a simple shift operation, also one instruction). There’s no loss in accuracy vs. converting to floating-point; the source and destination values are going to be quantized anyway.</p>
<p><pre class="brush: plain;">
// Floating-point, slow:
// scale = float 0.0 to 1.0
out = (int)((float)in * scale);

// Fixed-point, crazy fast:
// scale = integer 0 to 1023
out = in * (scale + 1) / 1024;
</pre></p>
<p>Along these lines, note that where the audio samples are summed, this division is skipped until the end. This saves some cycles and the result works out the same. Algebraically speaking, (A/X)+(B/X)=(A+B)/X, and so forth. The interim 32-bit sum isn’t likely to overflow.</p>
<p>Fixed-point math happens again when applying reverb. The echo volume, in the integer variable echo_vol (10 bit again, from one of the analog knobs) is in the range 0 to 1023, corresponding to 0% (no reverb) to 100% (echo is as loud as the original sound). Reverb (in echo_data[] array) is a circular buffer — as sounds are played, the contents here (scaled by echo_vol) are first added to the output, then the result is placed back in the same position in the array and the position counter is incremented by one. When the end of the array is reached (or a shorter limit indicated by echo_delay) we “wrap around” back to the beginning.</p>
<p>The final resulting audio value is clipped to an 8-bit range. This may introduce clipping distortion when many loud sounds are used simultaneously. For brevity again, bells and whistles have been omitted, but courageous programmers could opt to add “soft clipping” here to limit such distortion. There’s ample CPU muscle.</p>
<p>The final 8-bit signed value is then transposed into the unsigned range and fed into the OC1 duty cycle for PWM output.</p>
<p>Lastly, the interrupt checks for any sounds that the loop() function flagged as being “hit,” and adds these to the concurrent play list. This flag-and-add behavior, rather than adding items directly in loop(), avoids a potentially nasty race condition whereby loop() could be in the midst of adding a sound just as the interrupt is removing others, throwing off the counter.</p>
<p>And that’s all there is to it. This demo only uses about one fourth of the storage on the Uno32, which itself has one fourth the capacity of the Max32…and we’ve yet to exploit any sort of <a href="http://hackaday.com/2010/09/23/codec2-gnu-low-bitrate-speech-codec/">compression</a>. There could be some fun applications here, maybe adding <a href="http://hackaday.com/2011/06/06/retro-video-games-sounds-for-your-toilet/">better Super Mario sounds to toilets</a> or voice prompts to other chipKIT projects (“Your door is ajar”). What other ideas could you see happening here?</p>
<br />Filed under: <a href='http://hackaday.com/category/arduino-hacks/'>arduino hacks</a>, <a href='http://hackaday.com/category/digital-audio-hacks/'>digital audio hacks</a>, <a href='http://hackaday.com/category/how-to/'>how-to</a>, <a href='http://hackaday.com/category/microcontrollers/'>Microcontrollers</a>, <a href='http://hackaday.com/category/musical-hacks/'>musical hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/45011/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/45011/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/45011/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=45011&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/06/08/chipkit-sketch-mini-polyphonic-sampling-synth/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/chipkit-synth-title.jpg" medium="image">
			<media:title type="html">chipkit-synth-title</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/overview.jpg" medium="image">
			<media:title type="html">overview</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/schem-pads.png" medium="image">
			<media:title type="html">schem-pads</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/schem-pots.png" medium="image">
			<media:title type="html">schem-pots</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/06/schem-filter.png" medium="image">
			<media:title type="html">schem-filter</media:title>
		</media:content>
	</item>
		<item>
		<title>chipKIT Uno32: first impressions and benchmarks</title>
		<link>http://hackaday.com/2011/05/27/chipkit-uno32-first-impressions-and-benchmarks/</link>
		<comments>http://hackaday.com/2011/05/27/chipkit-uno32-first-impressions-and-benchmarks/#comments</comments>
		<pubDate>Fri, 27 May 2011 16:01:32 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[arduino hacks]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[32-bit]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[adc]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[bottleneck]]></category>
		<category><![CDATA[chipkit]]></category>
		<category><![CDATA[digilent]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[lcd]]></category>
		<category><![CDATA[mandelbrot]]></category>
		<category><![CDATA[max32]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[pic32]]></category>
		<category><![CDATA[serial]]></category>
		<category><![CDATA[uno]]></category>
		<category><![CDATA[uno32]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43877</guid>
		<description><![CDATA[Following Maker Faire, we’ve had a few days to poke around with Digilent&#8217;s 32-bit Arduino-compatible chipKIT boards and compiler. We have some initial performance figures to report, along with impressions of the hardware and software. Disclaimer: Digilent has provided Hack a Day with Uno32 and Max32 boards for evaluation. chipKIT isn’t the first attempt to extend the Arduino [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43877&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img title="uno-fight" src="http://hackadaycom.files.wordpress.com/2011/05/uno-fight.jpg?w=470&#038;h=200" alt="" width="470" height="200" /></p>
<p>Following <a href="http://hackaday.com/2011/05/20/bay-area-maker-faire-hackaday-has-arrived/">Maker Faire</a>, we’ve had a few days to poke around with Digilent&#8217;s 32-bit <a href="http://hackaday.com/2011/05/12/chipkit-max32-an-arduino-mega-upgrade-with-a-pic32-under-the-hood/">Arduino-compatible chipKIT boards</a> and compiler. We have some initial performance figures to report, along with impressions of the hardware and software.</p>
<p><span id="more-43877"></span></p>
<p>Disclaimer: Digilent has provided Hack a Day with Uno32 and Max32 boards for evaluation.</p>
<p>chipKIT isn’t the first attempt to extend the Arduino form factor to a 32-bit microcontroller core…other products such as <a href="http://hackaday.com/2010/05/24/maple-r3-now-shipping/">Maple</a>, <a href="http://hackaday.com/2011/02/23/self-regulating-water-heater/">Netduino</a> or the FEZ Domino have been around for well over a year…but the chipKIT boards are notable for the effort Digilent has put into creating a seamless transition. The aim is to create a single unified tool both for traditional 8-bit Arduino boards and Digilent’s 32-bit work-alikes, where the same IDE, the same code, and a good number of the same shields can all work despite the different underlying architectures. In fact, they’re hoping the Arduino project accepts their integration method as an official means of adding new hardware to the Arduino IDE — not just for their own product, but for anyone else to use as well.</p>
<p>As noted in <a href="http://hackaday.com/2011/05/21/bamf2011-chipkit-is-arduino-to-the-power-of-32/">our prior report</a>, we were impressed that they do appear to deliver on this promise. The transition between “classic” Arduinos and the 32-bit boards is indeed quite slick. But we’re finding at this early stage that there are still some rough bits to be worked out. So, for the time being, we’re keeping both the Arduino IDE and Mpide (Digilent’s multi-platform derivative) installed on the development system; the latter has not yet obviated the need for the former. But we see how the concept is supposed to work, and we like it.</p>
<p>For the most part, Mpide works as intended as a dual-platform IDE. Just select the appropriate device from the Tools-&gt;Board menu, recompile, and the code is now ready for the corresponding chip. But a couple things have bit us in the rear:</p>
<ul>
<li>The <a href="http://hackaday.com/2010/10/23/avr-programming-introduction/">AVR compiler</a> in Mpide either isn’t fully optimizing, or the floating-point libraries were built sans optimization or something. This threw off our benchmark numbers initially — the results were atrocious! In order to keep the numbers realistic, we’re using the standard Arduino IDE for the corresponding benchmarks. To be fair, they did warn us about this performance issue in person at Maker Faire, but until it’s fixed they could be more forthcoming about it with some documentation or on the web site…otherwise it could look like they’re trying to skew benchmarks more in their favor.</li>
<li>The String() constructor is borked when handling integers. The following line compiles fine for AVR chips, but throws a tizzy fit with the PIC32 compiler:<br />
<pre class="brush: plain;">String foo = String(42);</pre></li>
</ul>
<p>Given that the IDE was wrapped up literally hours before going live online and at Maker Faire, it’s understandable that there are some loose ends. Just be prepared as an early adopter that this won’t be as pain-free a transition as they’re aiming for. The great thing with <a href="http://hackaday.com/?s=open+source">open source</a> is that we can get in there, spot such problems, and offer suggestions and submit fixes…the situation will no doubt improve with time.</p>
<h3>Some Benchmarks</h3>
<p>We wanted to create a fractal demo similar to what they were displaying at Maker Faire. We didn’t have the spiffy <a href="http://www.sparkfun.com/products/9363">SparkFun Color LCD Shield</a> on hand, so instead we had to settle for a serial LCD, <a href="http://www.4dsystems.com.au/prod.php?id=121">4D Systems’ uLCD-144</a>. This does affect the numbers somewhat, as we’ll see.</p>
<p>In MIPS alone, the chipKIT should beat the Arduino by a factor of five. Then there’s the native 32-bit-ness of it: when dealing with larger numbers, the AVR processor at Arduino’s core has to shift and fiddle bits between consecutive 8-bit values in order to achieve 32-bit results. So the PIC32 should show a considerable performance benefit beyond MIPS alone. In practice, this doesn’t always pan out.</p>
<p>The uLCD-144 is a 128 by 128 pixel 16-bit color <a href="http://hackaday.com/2011/03/17/bill-hammack-explains-how-led-backlit-lcd-monitors-work/">LCD</a> with a serial UART interface running at 115,200 bits per second. The graphics commands aren’t terribly efficient, and it’s necessary to send a five byte packet for every pixel drawn. This includes coordinate data; there’s no block write function in serial mode. On the plus side, it’s easy to talk to using the Arduino or chipKIT’s native serial UART.</p>
<p>Here’s the code for the Mandelbrot sketch, using floating-point math:</p>
<p><pre class="brush: plain;">
/* Simple Mandelbrot set renderer for Arduino vs. chipKIT benchmarking
   w/floating-point math, via www.hackaday.com.  This example uses the
   4D Systems uLCD-144(SGC) serial display module, wired as follows:

      uLCD Pin:   RES  GND  RX  TX  VIN
   Arduino Pin:     2  GND   1   0   5V    */

const int
  pixelWidth  = 128,  // LCD dimensions
  pixelHeight = 128,
  iterations  = 255;  // Fractal iteration limit or 'dwell'
const float
  centerReal  = -0.6, // Image center point in complex plane
  centerImag  =  0.0,
  rangeReal   =  3.0, // Image coverage in complex plane
  rangeImag   =  3.0,
  startReal   = centerReal - rangeReal * 0.5,
  startImag   = centerImag + rangeImag * 0.5,
  incReal     = rangeReal / (float)pixelWidth,
  incImag     = rangeImag / (float)pixelHeight;

void setup()
{
  pinMode(13,OUTPUT);   // Arduino status LED
  pinMode(2,OUTPUT);    // LCD reset pin
  digitalWrite(13,LOW); // LED off
  Serial.begin(115200);

  digitalWrite(2,LOW);  // Reset LCD
  delay(10);
  digitalWrite(2,HIGH);
  delay(2000);          // Allow time for reset to complete

  Serial.write(0x55);   // Issue auto-baud command
  while(Serial.read() != 0x06); // Wait for ACK
}

void loop()
{
  unsigned char cmd[20];   // Serial packet for LCD commands
  int           x,y,n;
  float         a,b,a2,b2,posReal,posImag;
  long          startTime,elapsedTime;

  Serial.write(0x45);      // Clear screen
  delay(100);              // Brief pause, else 1st few pixels are lost

  cmd[0] = 0x50;           // 'Pixel' command is issued repeatedly

  digitalWrite(13,HIGH);   // LED on while rendering
  startTime = millis();

  posImag = startImag;
  for(y = 0; y &lt; pixelHeight; y++) {
    cmd[2] = y;            // Y coordinate of pixel
    posReal = startReal;
    for(x = 0; x &lt; pixelWidth; x++) {
      a = posReal;
      b = posImag;
      for(n = iterations; n &gt; 0 ; n--) {
        a2 = a * a;
        b2 = b * b;
        if((a2 + b2) &gt;= 4.0) break;
        b  = posImag + a * b * 2.0;
        a  = posReal + a2 - b2;
      }
      cmd[1] = x;          // X coordinate of pixel
      cmd[3] = n * 29;     // Pixel color MSB
      cmd[4] = n * 67;     // Pixel color LSB
      Serial.write(cmd,5); // Issue LCD command
      posReal += incReal;
    }
    posImag -= incImag;
  }

  elapsedTime = millis() - startTime;
  digitalWrite(13,LOW);    // LED off when done

  // Set text to opaque mode
  cmd[0] = 0x4f;
  cmd[1] = 0x01;
  Serial.write(cmd,2);

  // Seems the chipKIT libs don't yet handle the String(long)
  // constructor, hence this kludge.  Working backward, convert
  // each digit of elapsed time to a char, with &quot; ms&quot; at end
  // and text command at head.  Length is variable, so issue
  // command from final determined head position.
  cmd[19] = 0;
  cmd[18] = 's';
  cmd[17] = 'm';
  cmd[16] = ' ';
  n = 15;
  do {
    cmd[n--] = '0' + elapsedTime % 10;
    elapsedTime /= 10;
  } while(elapsedTime);
  cmd[n--] = 0xff; // Color LSB
  cmd[n--] = 0xff; // Color MSB
  cmd[n--] = 0;    // Use 5x7 font
  cmd[n--] = 0;    // Row
  cmd[n--] = 0;    // Column
  cmd[n] = 0x73;   // ASCII text command
  Serial.write(&amp;cmd[n],20-n);

  delay(5000); // Stall a few seconds, then repeat
}
</pre></p>
<p>And the timing results, in milliseconds, for the Arduino (top) and chipKIT (bottom):</p>
<p><img title="benchmark-float" src="http://hackadaycom.files.wordpress.com/2011/05/benchmark-float.jpg?w=470&#038;h=525" alt="" width="470" height="525" /></p>
<p style="padding-left:30px;">Arduino: 54,329 ms.<br />
chipKIT: 12,417 ms.</p>
<p>To reiterate (pardon the pun), due to some performance issues we used the traditional Arduino compiler, not the one included in Mpide. If you’re curious, the output from that compiler took about <em>8.5 minutes</em> to complete the task! Oof.</p>
<p>So, about a 4.4x speedup. Not bad, but we were expecting a more dramatic difference. Part of this is due to the inherent bottleneck of the serial communication with the LCD…we’ll get back to that in a moment. Another limiting factor is that both chips are emulating floating-point math. If we can use 32-bit integer data types, thePIC32 should really shine. So, a <a href="http://answers.hackaday.com/converting-floating-point-maths-to-int-maths/">fixed-point</a> Mandelbrot generator followed:</p>
<p><pre class="brush: plain;">
/* Simple Mandelbrot set renderer for Arduino vs. chipKIT benchmarking
   w/fixed-point math, via www.hackaday.com.  This example uses the
   4D Systems uLCD-144(SGC) serial display module, wired as follows:

      uLCD Pin:   RES  GND  RX  TX  VIN
   Arduino Pin:     2  GND   1   0   5V    */

const int
  bits        = 12,   // Fractional resolution
  pixelWidth  = 128,  // LCD dimensions
  pixelHeight = 128,
  iterations  = 255;  // Fractal iteration limit or 'dwell'
const float
  centerReal  = -0.6, // Image center point in complex plane
  centerImag  =  0.0,
  rangeReal   =  3.0, // Image coverage in complex plane
  rangeImag   =  3.0;
const long
  startReal   = (long)((centerReal - rangeReal * 0.5)   * (float)(1 &lt;&lt; bits)),
  startImag   = (long)((centerImag + rangeImag * 0.5)   * (float)(1 &lt;&lt; bits)),
  incReal     = (long)((rangeReal / (float)pixelWidth)  * (float)(1 &lt;&lt; bits)),
  incImag     = (long)((rangeImag / (float)pixelHeight) * (float)(1 &lt;&lt; bits));

void setup()
{
  pinMode(13,OUTPUT);   // Arduino status LED
  pinMode(2,OUTPUT);    // LCD reset pin
  digitalWrite(13,LOW); // LED off
  Serial.begin(115200);

  digitalWrite(2,LOW);  // Reset LCD
  delay(10);
  digitalWrite(2,HIGH);
  delay(2000);          // Allow time for reset to complete

  Serial.write(0x55);   // Issue auto-baud command
  while(Serial.read() != 0x06); // Wait for ACK
}

void loop()
{
  unsigned char cmd[20];   // Serial packet for LCD commands
  int           x,y,n;
  long          a,b,a2,b2,posReal,posImag,startTime,elapsedTime;

  Serial.write(0x45);      // Clear screen
  delay(100);              // Brief pause, else 1st few pixels are lost

  cmd[0] = 0x50;           // 'Pixel' command is issued repeatedly

  digitalWrite(13,HIGH);   // LED on while rendering
  startTime = millis();

  posImag = startImag;
  for(y = 0; y &lt; pixelHeight; y++) {
    cmd[2] = y;            // Y coordinate of pixel
    posReal = startReal;
    for(x = 0; x &lt; pixelWidth; x++) {
      a = posReal;
      b = posImag;
      for(n = iterations; n &gt; 0 ; n--) {
        a2 = (a * a) &gt;&gt; bits;
        b2 = (b * b) &gt;&gt; bits;
        if((a2 + b2) &gt;= (4 &lt;&lt; bits)) break;
        b  = posImag + ((a * b) &gt;&gt; (bits - 1));
        a  = posReal + a2 - b2;
      }
      cmd[1] = x;          // X coordinate of pixel
      cmd[3] = n * 29;     // Pixel color MSB
      cmd[4] = n * 67;     // Pixel color LSB
      Serial.write(cmd,5); // Issue LCD command
      posReal += incReal;
    }
    posImag -= incImag;
  }

  elapsedTime = millis() - startTime;
  digitalWrite(13,LOW);    // LED off when done

  // Set text to opaque mode
  cmd[0] = 0x4f;
  cmd[1] = 0x01;
  Serial.write(cmd,2);

  // Seems the chipKIT libs don't yet handle the String(long)
  // constructor, hence this kludge.  Working backward, convert
  // each digit of elapsed time to a char, with &quot; ms&quot; at end
  // and text command at head.  Length is variable, so issue
  // command from final determined head position.
  cmd[19] = 0;
  cmd[18] = 's';
  cmd[17] = 'm';
  cmd[16] = ' ';
  n = 15;
  do {
    cmd[n--] = '0' + elapsedTime % 10;
    elapsedTime /= 10;
  } while(elapsedTime);
  cmd[n--] = 0xff; // Color LSB
  cmd[n--] = 0xff; // Color MSB
  cmd[n--] = 0;    // Use 5x7 font
  cmd[n--] = 0;    // Row
  cmd[n--] = 0;    // Column
  cmd[n] = 0x73;   // ASCII text command
  Serial.write(&amp;cmd[n],20-n);

  delay(5000); // Stall a few seconds, then repeat
}
</pre></p>
<p>And the numbers:</p>
<p><img title="benchmark-fixed" src="http://hackadaycom.files.wordpress.com/2011/05/benchmark-fixed1.jpg?w=470&#038;h=525" alt="" width="470" height="525" /></p>
<p style="padding-left:30px;">Arduino: 27,734 ms.<br />
chipKIT:  7,209 ms.</p>
<p>Now only a 3.8x difference, despite the PIC32 speaking its native tongue. What gives?</p>
<p>Even at 115,200 bits/sec, the serial LCD is seriously holding us back, as the code is going to “block” as each character is output. Some back-of-envelope calculations suggest how much time is being lost there:</p>
<p style="padding-left:30px;">128 x 128 pixels, 5-byte command per pixel = 81,920 bytes.<br />
Including start and stop bits for each byte = 819,200 bits total<br />
819,200 bits / 115,200 bps = ~7.1 seconds.</p>
<p>So our MCU is sitting there for seven seconds with its thumb up its ASCII in order to update the display. Sure enough, if we comment out the Serial.write() command but leave all the calculations in place, the results are significantly more dramatic:</p>
<p>Floating-point:</p>
<p style="padding-left:30px;">Arduino: 49,685 ms.<br />
chipKIT:  5,822 ms.<br />
9.3x improvement.</p>
<p>Fixed-point:</p>
<p style="padding-left:30px;">Arduino: 22,326 ms.<br />
chipKIT:    168 ms<br />
133x improvement. Hot <em>damn.</em> Now we’re talking!</p>
<p>So we could actually render this at interactive frame rates, for the want of a sufficiently fast interface to the LCD. This sort of limitation is going to crop up every time we connect to a real-world device. Not everything is 100% internal code and math…there are finite limits to I/O throughput, and that more than anything can cap the speed of the total application. So we really can’t give a consistent “Everything will be X percent faster” estimate for this board.</p>
<p>The performance looks good for math, especially if an algorithm can work in integer or fixed-point formats. Another thought we had was <a href="http://hackaday.com/2011/02/20/analog-to-digital-converter-build/">analog-to-digital</a> sampling, which has applications in robotics…say for a <a href="http://hackaday.com/2010/09/17/line-following-tank-without-a-microcontroller/">line-follower</a> or <a href="http://hackaday.com/2009/02/19/segway-and-input-filtering/">balancing</a> robot. More frequent samples should yield smoother operation, or multiple samples can be averaged to yield higher-precision results. The PIC32 should <em>scream</em> in that regard. And yet…</p>
<p><pre class="brush: plain;">
void setup()
{
  const int samples = 10000;
  int       i,n;
  long      startTime,elapsedTime;

  Serial.begin(115200);

  startTime = millis();
  for(i = 0; i &lt; samples; i++) {
    n = analogRead(0);
  }
  elapsedTime = millis() - startTime;

  Serial.print(samples);
  Serial.print(&quot; samples in &quot;);
  Serial.print(elapsedTime);
  Serial.print(&quot; ms = &quot;);
  Serial.print(((float)samples * 1000.0) / (float)elapsedTime);
  Serial.println(&quot; samples/sec&quot;);
}

void loop()
{
}
</pre></p>
<p style="padding-left:30px;">Arduino: 10000 samples in 1119 ms = 8936.55 samples/sec<br />
chipKIT: 10000 samples in 1008 ms = 9920.63 samples/sec</p>
<p>Running full-tilt, the PIC32 is capable of up to 1 million ADC samples per second, compared to 125,000 on the Atmel chip. Certainly the library implementation is going to introduce some overhead, but what gives? Rooting through the library source code turns up this gem in wiring_analog.c:</p>
<p><pre class="brush: plain;">
 //*     A delay is needed for the the ADC start up time
 //*     this value started out at 1 millisecond, I dont know how long it needs to be
 //*     99 uSecs will give us the same approximate sampling rate as the AVR chip
 //      delay(1);
 delayMicroseconds(99);
</pre></p>
<p>This raises a couple of red flags. First, why should the sampling rate aim to match the AVR? For time-related functions like delay() and for Serial.begin() bitrates, of course we’d want similar numbers, those relate to temporal increments. But we don’t — or at least shouldn’t — measure time with ADC readings. And secondly, well, why not find out how long the ADC startup time really needs to be? A few minutes’ sifting through Microchip datasheets eventually turned up the correct answer: <em>two microseconds.</em> So, changing the line in wiring_analog.c to:</p>
<p><pre class="brush: plain;">delayMicroseconds(2);</pre></p>
<p>Yields dramatically different results:</p>
<p style="padding-left:30px;">chipKIT: 10000 samples in 101 ms = 99009.90 samples/sec</p>
<p>About a tenfold improvement, and the readings still look valid. This does break like-timing compatibility with the AVR-based Arduinos, but as we said, why? It’s understandable that some decisions may have been made in haste…it’s a monumental project, getting all this code ported to an entirely different chip, and the IDE is still fresh from the oven…but some of these little broken details do have us concerned about what other surprises may still lurk beneath.</p>
<p>Don’t get us wrong…we’re enthusiastic about the chipKIT boards. The technical challenge is met, and just needs some cleaning up. What remains for Digilent now is a marketing challenge: <em>who is this really for?</em> When we talk about things like megasamples and fixed-point algorithms, these aren’t exactly day-one topics familiar to the Arduino’s target audience of first-time programmers. And the more advanced user may have moved on already, leaving Arduino behind. So why keep this form factor? Why keep this IDE?</p>
<p>Obviously, part of the allure is the existing ecosystem of Arduino <a href="http://hackaday.com/2011/05/11/arduino-magnetic-core-memory-shield/">shields</a>. There’s some pretty nifty stuff out there, networking and touch screens and stepper motor drivers, most of which will physically plug right in. Having an existing solution saves development time. Then there’s the ease and familiarity of the Arduino libraries. Even though they’re <a href="http://hackaday.com/2010/01/06/arduino-io-speed-breakdown/">slow and clunky in places</a>, it can be really handy sometimes just to squirt out some status information to a serial port without having to do all the UART setup manually.</p>
<p>The chipKIT boards are cleverly priced to approximate Arduino on a cost basis (even undercutting a bit). That’s a great start, with code and price parity, but where’s the <em>extra</em> value? What the Uno32 and Max32 may need are some killer apps. Ideas that the novice can implement, but that really take advantage of the PIC32 chip’s added performance and capabilities. Speed may be just one part of that. What can we do with the extra RAM and flash space that a normal Arduino just can’t handle, even with the fanciest of shields? Folks have done some mind-blowing stuff with the <a href="http://hackaday.com/2010/05/01/phasor-av-pal-demo-uses-atmega88/">little 8-bit AVR</a>. We’re looking forward to seeing if this is the tool that takes these hacks to the next level.</p>
<br />Filed under: <a href='http://hackaday.com/category/arduino-hacks/'>arduino hacks</a>, <a href='http://hackaday.com/category/microcontrollers/'>Microcontrollers</a>, <a href='http://hackaday.com/category/reviews/'>reviews</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43877/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43877/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43877/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43877&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/27/chipkit-uno32-first-impressions-and-benchmarks/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/uno-fight.jpg" medium="image">
			<media:title type="html">uno-fight</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/benchmark-float.jpg" medium="image">
			<media:title type="html">benchmark-float</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/benchmark-fixed1.jpg" medium="image">
			<media:title type="html">benchmark-fixed</media:title>
		</media:content>
	</item>
		<item>
		<title>BAMF2011: Google’s SKPR Bot, not for arachnophobes</title>
		<link>http://hackaday.com/2011/05/23/bamf2011-google%e2%80%99s-skpr-bot-not-for-arachnophobes/</link>
		<comments>http://hackaday.com/2011/05/23/bamf2011-google%e2%80%99s-skpr-bot-not-for-arachnophobes/#comments</comments>
		<pubDate>Mon, 23 May 2011 11:10:58 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[android hacks]]></category>
		<category><![CDATA[arduino hacks]]></category>
		<category><![CDATA[google hacks]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hexapod]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[ponoko]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[san mateo]]></category>
		<category><![CDATA[servo]]></category>
		<category><![CDATA[skipper]]></category>
		<category><![CDATA[skpr]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43439</guid>
		<description><![CDATA[Google’s Maker Faire exhibit space is swarmed with robots…er, androids. Amidst some cool bipeds and Segway-balancers, our inner sci-fi nerd was most smitten with this hexapod design, which they’ve dubbed SKPR Bot. The “Skipper” is on hand to showcase the ease of various Google technologies: SketchUp, Android OS and the Android Open Accessory Development Kit. The whole project [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43439&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43440" title="skprbot" src="http://hackadaycom.files.wordpress.com/2011/05/skprbot.jpg" alt="" width="470" height="330" /></p>
<p>Google’s Maker Faire exhibit space is swarmed with robots…er, <em>androids.</em> Amidst some cool bipeds and Segway-balancers, our inner sci-fi nerd was most smitten with this hexapod design, which they’ve dubbed <a href="http://goo.gl/skprbot">SKPR Bot</a>. The “Skipper” is on hand to showcase the ease of various Google technologies: <a href="http://hackaday.com/2008/11/17/sketchup-adds-dynamic-components/">SketchUp</a>, <a href="http://hackaday.com/2010/07/12/android-development-101-–-a-tutorial-series/">Android OS</a> and the <a href="http://hackaday.com/2011/05/11/official-android-open-accessory-development-kit-its-an-arduino/">Android Open Accessory Development Kit</a>. The whole project came together in less than six weeks.</p>
<p>18 <a href="http://hackaday.com/2011/01/28/the-openservo-project/">servos</a> are mounted to a framework designed in SketchUp and laser-cut by <a href="http://hackaday.com/2008/12/01/ponoko-launches-subscription-manufacturing/">Ponoko</a>. The low-level servo PWM control is handled by the Dev Kit (essentially a rebadged Arduino Mega, as we’ve seen), while an Android OS phone provides a slick GUI and handles all the inverse <a href="http://hackaday.com/2010/04/27/apod-an-update/">kinematics</a> calculations required as the robot takes each step. The coolest bit is that it’s all up for grabs. At this moment you’ll have to scrounge around the ’net a bit to find the plans and code, but some time post-Faire they plan to bring everything together at the <a href="http://goo.gl/skprbot">SKPR Bot site</a>.</p>
<br />Filed under: <a href='http://hackaday.com/category/android-hacks/'>android hacks</a>, <a href='http://hackaday.com/category/arduino-hacks/'>arduino hacks</a>, <a href='http://hackaday.com/category/google-hacks/'>google hacks</a>, <a href='http://hackaday.com/category/news/'>news</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43439/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43439&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/23/bamf2011-google%e2%80%99s-skpr-bot-not-for-arachnophobes/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/skprbot.jpg" medium="image">
			<media:title type="html">skprbot</media:title>
		</media:content>
	</item>
		<item>
		<title>BAMF2011: Lasersaur is one BIG laser cutter!</title>
		<link>http://hackaday.com/2011/05/22/bamf2011-lasersaur-is-one-big-laser-cutter/</link>
		<comments>http://hackaday.com/2011/05/22/bamf2011-lasersaur-is-one-big-laser-cutter/#comments</comments>
		<pubDate>Sun, 22 May 2011 22:15:08 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[cnc hacks]]></category>
		<category><![CDATA[laser hacks]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[cutter]]></category>
		<category><![CDATA[engraver]]></category>
		<category><![CDATA[laser]]></category>
		<category><![CDATA[lasersaur]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[open source hardware]]></category>
		<category><![CDATA[oshw]]></category>
		<category><![CDATA[san mateo]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43408</guid>
		<description><![CDATA[Psst…wanna buy a laser cutter, but not ready to sell your internal organs? Nortd Labs’ Lasersaur project aims to create an open source large-format laser cutter/engraver that undercuts (har har!) the cost of commercial models by an order of magnitude. A Lasersaur built strictly using componentry from the globally-available bill of materials will set you back [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43408&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43409" title="lasersaur1" src="http://hackadaycom.files.wordpress.com/2011/05/lasersaur1.jpg" alt="" width="470" height="280" /></p>
<p>Psst…wanna buy a laser cutter, but not ready to sell your internal organs? Nortd Labs’ <a href="http://www.lasersaur.com/">Lasersaur</a> project aims to create an open source large-format <a href="http://hackaday.com/2011/03/11/bench-top-laser-engraver-does-some-cutting-too/">laser cutter/engraver</a> that undercuts (<em>har har!</em>) the cost of commercial models by an order of magnitude.</p>
<p><span id="more-43408"></span><img class="alignnone size-full wp-image-43410" title="lasersaur2" src="http://hackadaycom.files.wordpress.com/2011/05/lasersaur2.jpg" alt="" width="470" height="220" /></p>
<div>
<p>A Lasersaur built strictly using componentry from the globally-available bill of materials will set you back about $5,000. But if you can source some of the parts locally…or better yet, if you have a knack for scrounging (the <a href="http://hackaday.com/2011/04/13/cnc-mill-built-from-junk-and-hardware-store-parts/">stepper motors</a>, for example, are common in junked <a href="http://hackaday.com/2011/03/18/direct-to-pcb-resist-printing-requires-minimal-additional-components/">inkjet printers</a>)…it may be possible to knock that down by a grand or more. That’s still a big chunk of change for the lone garage tinkerer…but for schools or <a href="http://hackaday.com/2011/03/10/hackerspace-camera-rig-auto-alerts-the-internets-when-projects-are-finished/">hackerspaces</a>, or anyone who can pool some labor and funding, this could make laser work a lot more practical. Entry-level commercial models can be had for similar cost, but these are tiny in comparison — Lasersaur’s cutting bed is an enormous 140 by 72 centimeters!</p>
<div>
<p>Aside from bringing down the cost, another goal of the project is to break from the Windows/Corel hegemony that’s been the rule with most commercial laser platforms. Lasersaur’s “brain” is <a href="http://hackaday.com/2010/09/27/arduino-uno-and-mega-2560/">Arduino-based</a> and cross-platform by nature. The hardware is interfaced through a custom motor control shield, easily assembled with all through-hole components.</p>
<div>
<p>The Lasersaur project is currently in a closed alpha stage, with the aim of a fully documented 1.0 open source release this summer. Project contributors have early access to the design documents and software, if you’re eager to get crackin’.</p>
</div>
</div>
</div>
<br />Filed under: <a href='http://hackaday.com/category/cnc-hacks/'>cnc hacks</a>, <a href='http://hackaday.com/category/laser-hacks/'>laser hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43408/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43408/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43408/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43408&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/22/bamf2011-lasersaur-is-one-big-laser-cutter/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/lasersaur1.jpg" medium="image">
			<media:title type="html">lasersaur1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/lasersaur2.jpg" medium="image">
			<media:title type="html">lasersaur2</media:title>
		</media:content>
	</item>
		<item>
		<title>BAMF2011: Keyboards built from scratch</title>
		<link>http://hackaday.com/2011/05/21/bamf2011-keyboards-built-from-scratch/</link>
		<comments>http://hackaday.com/2011/05/21/bamf2011-keyboards-built-from-scratch/#comments</comments>
		<pubDate>Sun, 22 May 2011 00:00:39 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[classic hacks]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[ergonomic]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[san mateo]]></category>
		<category><![CDATA[tactile]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43342</guid>
		<description><![CDATA[As the most direct interface between computer and programmer, keyboards can be a deeply personal, sometimes almost religious thing. Some find solace in their vintage IBM Model M, or luxurious leather keyboard, but maker [Carol Chen] took things into her own hands, quite literally. [Carol]’s Maker Faire exhibit has a half dozen specimens of interesting commercial tactile and ergonomic [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43342&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43343" title="keyboards" src="http://hackadaycom.files.wordpress.com/2011/05/keyboards.jpg" alt="" width="470" height="480" /></p>
<p>As the most direct interface between computer and programmer, keyboards can be a deeply personal, sometimes almost <em>religious</em> thing. Some find solace in their vintage <a href="http://hackaday.com/2011/05/18/uber-keyboard-hides-security-tools-in-plain-sight/">IBM Model M</a>, or luxurious <a href="http://hackaday.com/2008/12/14/leather-keyboard/">leather keyboard</a>, but maker [Carol Chen] took things into her own hands, quite literally. [Carol]’s Maker Faire exhibit has a half dozen specimens of interesting commercial tactile and ergonomic options…but [Chen]’s personal keyboard, where she commits to her work as a full-time coder, has been made to her own exacting specifications.</p>
<p><span id="more-43342"></span></p>
<div><em>Cherry switches</em> are available in different colors corresponding to varying tactile feels. These can either be scrounged from existing keyboards (as [Chen] does for the key caps), or vendors such as <a href="http://hackaday.com/2007/11/16/how-to-where-to-find-parts-for-your-projects/">Digi-Key</a> can source the different colors if you want custom pressure for each finger (as on some commercial ergonomic models). A <a href="http://hackaday.com/2011/03/02/open-source-laser-cutter-v2/">laser-cut acrylic</a> backing plate holds the key switches in place, while wiring was soldered in point-to-point fashion rather than <a href="http://hackaday.com/2011/03/03/simple-pcb-etchant-made-from-chemicals-you-can-put-in-your-mouth/">etching a PCB</a>. Custom-fabbing the keyboard allows [Chen] to tailor the layout to her <em>vim</em>-heavy coding style. Note the miniature space bar, and curious placement of modifier and macro keys around the periphery. A YouTube video shows an earlier iteration of the keyboard in action:</div>
<div> <span style="text-align:center; display: block;"><a href="http://hackaday.com/2011/05/21/bamf2011-keyboards-built-from-scratch/"><img src="http://img.youtube.com/vi/Nj6LFgt_mAs/2.jpg" alt="" /></a></span></div>
<br />Filed under: <a href='http://hackaday.com/category/classic-hacks/'>classic hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43342/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43342/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43342/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43342&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/21/bamf2011-keyboards-built-from-scratch/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/keyboards.jpg" medium="image">
			<media:title type="html">keyboards</media:title>
		</media:content>
	</item>
		<item>
		<title>BAMF2011: Bloxes, a building kit with a nifty pedigree</title>
		<link>http://hackaday.com/2011/05/21/bamf2011-bloxes-a-building-kit-with-a-nifty-pedigree/</link>
		<comments>http://hackaday.com/2011/05/21/bamf2011-bloxes-a-building-kit-with-a-nifty-pedigree/#comments</comments>
		<pubDate>Sat, 21 May 2011 23:00:38 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[cons]]></category>
		<category><![CDATA[home hacks]]></category>
		<category><![CDATA[misc hacks]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[bloxes]]></category>
		<category><![CDATA[building]]></category>
		<category><![CDATA[construction]]></category>
		<category><![CDATA[kit]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[raskin]]></category>
		<category><![CDATA[san mateo]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43337</guid>
		<description><![CDATA[Not every cool hack needs to involve microcontrollers, LEDs or other bling. We were initially drawn to the Bloxes display simply because we love a good multipurpose construction set, whether it be Lego, 80/20 aluminum, or in this case, a system of interlocking cubes formed from six identical pieces of corrugated cardboard, cut and scored [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43337&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43338" title="bloxes1" src="http://hackadaycom.files.wordpress.com/2011/05/bloxes1.jpg" alt="" width="470" height="300" /></p>
<p>Not every cool hack needs to involve microcontrollers, LEDs or other bling. We were initially drawn to the <a href="http://bloxes.com/">Bloxes</a> display simply because we love a good multipurpose construction set, whether it be <a href="http://hackaday.com/2011/05/18/lego-technic-super-8-movie-projector/">Lego</a>, <a href="http://hackaday.com/2008/07/13/fabr-another-3d-printing-project/">80/20 aluminum</a>, or in this case, a system of interlocking cubes formed from six identical pieces of corrugated cardboard, cut and scored in such a manner as to form a surprisingly sturdy little building block. They can become simple furniture, groovy <em>Logan’s Run</em>-style room decor, or the all-important kids’ forts…then later dismantled and made into something else.</p>
<p><span id="more-43337"></span><img class="alignnone size-full wp-image-43339" title="bloxes2" src="http://hackadaycom.files.wordpress.com/2011/05/bloxes2.jpg" alt="" width="470" height="350" /></p>
<div>
<p>A elegant concept executed in the humblest of materials…we were already infatuated. We were blown away then to learn of Bloxes’ background: they’re a 1970s brainchild of computer pioneer [<a href="http://en.wikipedia.org/wiki/Jef_Raskin">Jef Raskin</a>], perhaps best known as the “Father of the <a href="http://hackaday.com/2010/10/30/building-the-banana-jr-6000/">Macintosh</a>.” [Raskin]’s son and daughter [Aza] and [Aviva] revived the Bloxes concept in 2008 and now sell kits through their <a href="https://bloxes.myshopify.com/products/bloxes">web site</a>. Even if you’re not at the Faire, they welcomed readers to use the discount code MAKERFAIRE2011 (good through June 12th 2011, limit one per person), which will net you a kit of five Bloxes (30 pieces, some assembly required) for $12.63 vs. the normal $15.59.</p>
</div>
<br />Filed under: <a href='http://hackaday.com/category/cons/'>cons</a>, <a href='http://hackaday.com/category/home-hacks/'>home hacks</a>, <a href='http://hackaday.com/category/misc-hacks/'>misc hacks</a>, <a href='http://hackaday.com/category/news/'>news</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43337&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/21/bamf2011-bloxes-a-building-kit-with-a-nifty-pedigree/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/bloxes1.jpg" medium="image">
			<media:title type="html">bloxes1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/bloxes2.jpg" medium="image">
			<media:title type="html">bloxes2</media:title>
		</media:content>
	</item>
		<item>
		<title>BAMF2011: chipKIT is Arduino to the power of 32</title>
		<link>http://hackaday.com/2011/05/21/bamf2011-chipkit-is-arduino-to-the-power-of-32/</link>
		<comments>http://hackaday.com/2011/05/21/bamf2011-chipkit-is-arduino-to-the-power-of-32/#comments</comments>
		<pubDate>Sat, 21 May 2011 22:00:58 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[arduino hacks]]></category>
		<category><![CDATA[Microcontrollers]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[AVR]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[digilent]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[microchip]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[pic32]]></category>
		<category><![CDATA[san mateo]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43324</guid>
		<description><![CDATA[If you’ve been hungry for more power for your microcontroller projects, but reluctant to dump your investment in Arduino shields or the libraries and community knowledge that go with them all, Digilent has you covered. Their new chipKIT boards are built around the Microchip PIC32 MCU…a powerful 32-bit chip that until recently was left out [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43324&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43325" title="chipkit1" src="http://hackadaycom.files.wordpress.com/2011/05/chipkit1.jpg" alt="" width="470" height="270" /></p>
<p>If you’ve been hungry for more power for your microcontroller projects, but reluctant to dump your investment in Arduino shields or the libraries and community knowledge that go with them all, Digilent has you covered. Their new <a href="http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&amp;Cat=18">chipKIT boards</a> are built around the Microchip PIC32 MCU…a powerful 32-bit chip that until recently was left out of the cross-platform scene. A majority of code and quite a number of Arduino shields will work “out of the box” with the chipKIT, and the familiar development tools are available for all three major operating systems: Windows, Mac and Linux.</p>
<p>We <a href="http://hackaday.com/2011/05/12/chipkit-max32-an-arduino-mega-upgrade-with-a-pic32-under-the-hood/">first mentioned these a couple weeks ago</a>, but the software was unavailable at the time. Seeing the development tools in action was quite unexpected…</p>
<p><span id="more-43324"></span><img class="alignnone size-full wp-image-43327" title="chipkit2" src="http://hackadaycom.files.wordpress.com/2011/05/chipkit21.jpg" alt="" width="470" height="375" /></p>
<p>What&#8217;s really fascinating with chipKIT is that the workflow is <em>exactly</em> Arduino-like. The serial bootloader works with <a href="http://hackaday.com/2010/10/25/avr-programming-02-the-hardware/">avrdude</a>, and you can program both “real” Arduinos and Digilent’s 32-bit work-alikes using the exact same IDE; there’s no need to run two different IDEs for two different boards, as has been the case with Leaf Labs’ 32-bit <a href="http://hackaday.com/2010/05/24/maple-r3-now-shipping/">Maple</a>. As a demonstration, they compiled and ran code for an Arduino Mega with SparkFun LCD shield…then popped the shield off and placed it on the Max32, selected the 32-bit board in the same IDE, and repeated the process. The exact code ran on the new board/shield combo, with stunning performance — all the standard Arduino libraries have been implemented natively for the PIC32; this is not emulation.</p>
<p>Because Digilent didn’t just adapt the Arduino IDE to their one specific board, but rather developed a system by which the IDE can be extended to new hardware, it’s their hope that their work (not an official Arduino project) might be rolled back into the mainline code, and that other developers might jump on the bandwagon to provide Arduino IDE support for their own boards, whether they be based on AVR, PIC32 or a <a href="http://hackaday.com/2011/05/06/digital-audio-on-the-parallax-propeller/">completely different kind of microcontroller altogether</a>. The groundwork has been laid.</p>
<p>The chipKIT comes in two versions: Uno32 and Max32, similar in form factor to the Arduino Uno and Mega 2560, respectively. These can be ordered directly from <a href="http://www.digilentinc.com/Products/Catalog.cfm?NavPath=2,892&amp;Cat=18">Digilent’s web site</a>, and the IDE is freely <a href="https://github.com/chipKIT32/chipKIT32-MAX/downloads">downloadable</a> as of today. We have evaluation hardware in-hand and expect to be providing a proper review in the near future.</p>
<br />Filed under: <a href='http://hackaday.com/category/arduino-hacks/'>arduino hacks</a>, <a href='http://hackaday.com/category/microcontrollers/'>Microcontrollers</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43324/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43324/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43324/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43324&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/21/bamf2011-chipkit-is-arduino-to-the-power-of-32/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/chipkit1.jpg" medium="image">
			<media:title type="html">chipkit1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/chipkit21.jpg" medium="image">
			<media:title type="html">chipkit2</media:title>
		</media:content>
	</item>
		<item>
		<title>Bay Area Maker Faire: Hackaday has arrived!</title>
		<link>http://hackaday.com/2011/05/20/bay-area-maker-faire-hackaday-has-arrived/</link>
		<comments>http://hackaday.com/2011/05/20/bay-area-maker-faire-hackaday-has-arrived/#comments</comments>
		<pubDate>Fri, 20 May 2011 20:09:02 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[cons]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[bamf]]></category>
		<category><![CDATA[colossus]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[makerfaire]]></category>
		<category><![CDATA[Makers]]></category>
		<category><![CDATA[san mateo]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=43289</guid>
		<description><![CDATA[It’s a madhouse already at the 2011 Bay Area Maker Faire. Though the show doesn&#8217;t officially start until tomorrow, Friday is “Education Day”, a special preview for local schools. As makers scramble to set up their displays, a thousand impressionable young minds seek the most cacophonous mixture of taiko drumming, ArcAttack’s musical Tesla coils, and the beeping [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43289&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-43290" title="colossus" src="http://hackadaycom.files.wordpress.com/2011/05/colossus.jpg" alt="" width="470" height="330" /></p>
<p>It’s a madhouse already at the 2011 Bay Area Maker Faire. Though the show doesn&#8217;t officially start until tomorrow, Friday is “Education Day”, a special preview for local schools. As makers scramble to set up their displays, a thousand impressionable young minds seek the most cacophonous mixture of taiko drumming, ArcAttack’s <a href="http://hackaday.com/2008/06/12/singing-tesla-coils/">musical Tesla coils</a>, and the <em>beep</em>ing and <em>boop</em>ing of the <a href="http://hackaday.com/2010/05/27/bamf2010-look-sir-droids/">R2-D2 Builder’s Club</a>.</p>
<div>
<p>Maker Faire is returning for its sixth year at the San Mateo Event Center, and is shaping up to be bigger and zanier than ever. We’ll do our best to provide some live updates through the weekend. As always, <a href="http://makerfaire.com/">check out the official site</a> for pointers on hours, admission, parking and especially public transit options.</p>
<p>(Photo: <em>Colossus,</em> the death-defying centerpiece of the Midway area of the Faire.)</p>
</div>
<br />Filed under: <a href='http://hackaday.com/category/cons/'>cons</a>, <a href='http://hackaday.com/category/news/'>news</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/43289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/43289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/43289/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=43289&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2011/05/20/bay-area-maker-faire-hackaday-has-arrived/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2011/05/colossus.jpg" medium="image">
			<media:title type="html">colossus</media:title>
		</media:content>
	</item>
		<item>
		<title>Oogoo, a home-made Sugru substitute</title>
		<link>http://hackaday.com/2010/10/11/oogoo-a-home-made-sugru-substitute/</link>
		<comments>http://hackaday.com/2010/10/11/oogoo-a-home-made-sugru-substitute/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 13:21:21 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[chemistry hacks]]></category>
		<category><![CDATA[misc hacks]]></category>
		<category><![CDATA[cast]]></category>
		<category><![CDATA[clay]]></category>
		<category><![CDATA[instructables]]></category>
		<category><![CDATA[mold]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[silicone]]></category>
		<category><![CDATA[Sugru]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=29169</guid>
		<description><![CDATA[If you follow Instructables.com, it might seem like every third article lately is about Sugru, the nifty air-drying silicone putty that’s good for all manner of repairs and custom parts. It’s fantastic stuff (and we love their slogan, “Hack things better”), but one can’t (yet!) just drop in on any local hardware store to buy a quick [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=29169&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-29170" title="Blueberry Squishee? Mechanically separated chicken? Nope! It’s Oogoo!" src="http://hackadaycom.files.wordpress.com/2010/10/oogoo1.jpg" alt="" width="470" height="320" /></p>
<div>
<p>If you follow Instructables.com, it might seem like every third article lately is about <em>Sugru,</em> the nifty air-drying silicone putty that’s good for all manner of repairs and custom parts. It’s fantastic stuff (and we love their slogan, “Hack things better”), but one can’t (yet!) just drop in on any local hardware store to buy a quick fix…so [mikey77] has <a href="http://www.instructables.com/id/How-To-Make-Your-Own-Sugru-Substitute/">cooked up a recipe for a basic Sugru work-alike</a>. His “Oogoo” (a name likely inspired by <a href="http://en.wikipedia.org/wiki/Oobleck">oobleck</a>) is a simple mix of <a href="http://hackaday.com/2008/07/11/subwoofer-makes-cornstarch-dance/">corn starch</a> and <a href="http://hackaday.com/2009/10/13/daft-punk-replica-helmet/">silicone</a> caulk.</p>
<div>
<p>A two-ingredient recipe would hardly seem adequate material for an article, but [mikey77]’s left no stone unturned, providing an extensive tutorial not only on mixing the compound, but how to add colors, <a href="http://hackaday.com/2010/02/12/transparent-rubber-enclosures/">cast</a> and carve custom shapes, and how his home-made recipe compares to <a href="http://hackaday.com/2009/12/04/sugru-moldable-silicone-adhesive/">the name brand product</a>. As a bonus, the article then drifts into a little Halloween project where he demonstrates etching conductive cloth, how to make <a href="http://hackaday.com/2009/08/25/wire-glue/">conductive glue</a>, and other hands-on shenanigans.</p>
</div>
</div>
<br />Filed under: <a href='http://hackaday.com/category/chemistry-hacks/'>chemistry hacks</a>, <a href='http://hackaday.com/category/misc-hacks/'>misc hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/29169/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/29169/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/29169/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=29169&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/10/11/oogoo-a-home-made-sugru-substitute/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/10/oogoo1.jpg" medium="image">
			<media:title type="html">Blueberry Squishee? Mechanically separated chicken? Nope! It’s Oogoo!</media:title>
		</media:content>
	</item>
		<item>
		<title>Spy Video TRAKR: software and first hack</title>
		<link>http://hackaday.com/2010/09/02/spy-video-trakr-software-and-first-hack/</link>
		<comments>http://hackaday.com/2010/09/02/spy-video-trakr-software-and-first-hack/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 13:45:17 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[classic hacks]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[robots hacks]]></category>
		<category><![CDATA[toy hacks]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[led]]></category>
		<category><![CDATA[POV]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[shift register]]></category>
		<category><![CDATA[spi]]></category>
		<category><![CDATA[spy]]></category>
		<category><![CDATA[toy]]></category>
		<category><![CDATA[tracker]]></category>
		<category><![CDATA[trakr]]></category>
		<category><![CDATA[wild planet]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=27791</guid>
		<description><![CDATA[Our initial view of the Spy Video TRAKR “App BUILDR” site had us believing this would be an internet-based code editor and compiler, similar to the mbed microcontroller development tools. Delving deeper into the available resources, we’re not entirely sure that’s an accurate assessment — TRAKR may well permit or even require offline development after all. Regardless [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27791&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-27792" title="trakr-hacked" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-hacked.jpg" alt="" width="470" height="350" /></p>
<p><a href="http://hackaday.com/2010/08/27/spy-video-trakr-first-impressions/">Our initial view</a> of the Spy Video TRAKR “App BUILDR” site had us believing this would be an internet-based code editor and compiler, similar to the <a href="http://hackaday.com/2009/11/21/review-mbed-nxp-lpc1768-microcontroller/">mbed microcontroller</a> development tools. <a href="http://hackaday.com/2010/08/30/spy-video-trakr-the-teardown/">Delving deeper</a> into the available resources, we’re not entirely sure that’s an accurate assessment — TRAKR may well permit or even require offline development after all. Regardless of the final plan, in the interim we have sniffed out the early documentation, libraries and standalone C compiler and have beaten it into submission for your entertainment, in order to produce our first TRAKR hack!</p>
<p><span id="more-27791"></span></p>
<p>TRAKR software development at the moment, to phrase it just as politely as we can, has a Wild West flavor to it. The finished tools and reference materials aren’t expected until October. Early documentation is rough — entire sections still missing — so it’s frequently necessary to rummage through their example code to learn how things operate. And the compiler is <em>exceedingly</em> rough right now…it requires a minor patch just to get started, and works only within <a href="http://www.cygwin.com/">Cygwin</a>, a UNIX-like command shell for Windows systems. So tonight we’re gonna program like it’s 1999! To continue, we’ll have to assume you’re at least vaguely familiar with command-line development tools, as explaining the entire process from scratch is more than we can fit here.</p>
<p>It probably goes without saying, but for posterity: these are beta tools and the entire process will almost certainly change as the TRAKR HAKR site nears release, rendering these directions obsolete. Until then, for those wanting to get an early start, here’s how we began building our own TRAKR hacks…</p>
<h2>Getting the compiler</h2>
<p>The C compiler and documentation are presently located on the <a href="http://www.spygear.net/help/apps.php">Apps Help page of the TRAKR web site</a>. Just follow the directions there to download the App Primer (containing the compiler and demo source code), the TRAKR Codebook PDF (an introduction to TRAKR programming), and the Function Reference and code snippets for lighter-weight reference once you’re familiar with the concepts.</p>
<p>The Apps Help page states that the tools work with Linux, but this isn’t entirely true. The App Primer ZIP file contains only the Cygwin (Windows) toolchain, along with the TRAKR libraries and sample code. The C compiler is based on arm-elf-gcc 3.4.6 — Linux users might stand a chance with the pre-built 3.4.3 package from the <a href="http://www.gnuarm.com/">GNU ARM</a> web site. You’ll still need to download the App Primer for the libraries. With Mac OS X, things get ugly…we’ve yet to locate a viable package for Intel Macs. Building the 3.4.6 toolchain from source (or via MacPorts) has brought only frustration, and the TRAKR makefiles don’t play nice with later (but working) arm-elf-gcc editions. Joy. Eager to move ahead, and not wanting to invest a lot of time on beta tools that are certain to change, some of us are simply using the Windows package in <a href="http://www.virtualbox.org/">VirtualBox</a> for now.</p>
<h2>Getting the compiler <em>to actually work</em></h2>
<p>After unpacking the App Primer ZIP file, copy the TRAKR.1 folder inside to a suitable working location within your Cygwin directory. The _MACOSX folder can be deleted — this is just an artifact of the files having passed through a Mac at one point; there are no OS X build tools here.</p>
<p>Just unpacking the Primer and trying to compile the examples, you’ll encounter a slew of “undefined reference” error messages and a failed build. There’s a problem with the TRAKR library — some test data that’s not properly archived — but it’s a straightforward fix. Go into the Internals directory and edit the Makefile using vi (or another editor of choice if you have one installed). Line 22 looks like this:</p>
<div>
<div>
<pre>OBJECTS = $(S_OBJECTS) $(O_OBJECTS)</pre>
</div>
</div>
<p>It should be changed to this:</p>
<div>
<div>
<div>
<pre>OBJECTS = $(S_OBJECTS) $(O_OBJECTS) $(O_IMAGES)</pre>
</div>
</div>
</div>
<p>Save the changes and exit the editor, then (still in the Internals directory) type:</p>
<pre>make trakr.a</pre>
<p>Now you can go back to any of the examples and successfully compile by typing “make”. For example:</p>
<pre>cd ../EX06_Sound
make</pre>
<p>This will create a “.bin” file that can be loaded onto the TRAKR. Attach a USB cable between your computer and the TRAKR vehicle (the power switch can be on or off, it doesn’t matter). In a moment, the TRAKR’s internal storage will show up as a small removable drive. Then just copy the .bin file to the APPs folder on this drive, e.g.:</p>
<pre>cp EX\ Sound.bin E:APPs</pre>
<p>Disconnect the USB cable, power up the TRAKR and remote, press the remote’s Home button and use either stick to navigate to the “EX Sound” menu item, then press the “Go” button. The app should prompt you to record 10 seconds of audio from the TRAKR’s microphone, then plays this back. Cool stuff!</p>
<h2>Writing your own apps</h2>
<p>Each TRAKR app is required to have three functions: Start(), Run() and End(). Your Start() function contains one-time initialization code, such as opening the motors to software control; End() is the complimentary function for when your program finishes, restoring control to normal TRAKR operation. Run() contains the meat of your application…this function is expected to return either “true” or “false” to indicate whether it should run again iteratively, or is ready to exit.</p>
<p>The header file svt.h contains constants and prototypes for the functions described in the Codebook and reference documents. This includes high-level functions for producing graphics and sound, turning the <a href="http://hackaday.com/2009/08/17/adafruit-releases-new-tv-b-gone-kit/">infrared LED</a> on or off, reading the controls, driving the motors and accessing the SD card. This is all the <em>Official Documented Stuff</em> thatApp BUILDR will encourage us to use.</p>
<p>But there’s a second header, JAPI.h, revealing much of the underlying functionality on which the TRAKR library is built. And for the time being, this is the only way to access the really interesting stuff like digital I/O, video processing and USB host. This is most definitely <em>not</em> the Official Documented Stuff, and relying on it now means your code will probably require some changes to work with the Official Stuff later.</p>
<p>There’s something conspicuously absent from both libraries: higher-level digital I/O such as serial <a href="http://hackaday.com/2010/06/24/adding-a-serial-port-to-the-zipit/">UART</a> or precise <a href="http://hackaday.com/2010/08/31/controlling-an-ac-drill-using-one-pwm-connection/">PWM</a> control. We’re not even certain yet whether any the accessible breakout lines correspond to these hardware functions. Maybe it’s something forthcoming, or maybe this will require the chip datasheet, with code talking to the registers directly. Worst case, such I/O will just have to be done with slower <a href="http://hackaday.com/2009/09/22/introduction-to-ftdi-bitbang-mode/">bit-banged</a> methods. Which is exactly what we do with…</p>
<h2>Our first hack</h2>
<p>We really wanted to showcase both the software and hardware hackability of the TRAKR. There isn’t the space for an overly-technical writeup, but neither do we want to send you off with a trivial modification. Hopefully we’ve found a good balance here…mildly esoteric, but most readers with modest prior soldering and programming experience should be able to follow along and create something similar.</p>
<p>Our inspiration came from <a href="http://hackaday.com/2010/08/05/txtbomber/">an earlier Hack a Day article about the txtBomber</a>, a handheld dot-matrix graffiti printer:</p>
<p><img class="alignnone size-full wp-image-27793" title="txtbomber" src="http://hackadaycom.files.wordpress.com/2010/08/txtbomber1.jpg" alt="" width="470" height="200" /></p>
<p>The width of the TRAKR is about the same as a sheet of paper. With <a href="http://hackaday.com/2010/02/17/robo-vibe/">a row of solenoids</a> and some paint markers, we could make a fantastic mess with this…or even simpler, skip the markers and head to the beach, having the TRAKR “comb” messages in the sand.</p>
<p>Problem is, we didn’t have a stack of solenoids on hand, and we wanted to get right into this rather than wait around for parts to arrive. Rooting among the detritus of our <a href="http://hackaday.com/2009/09/21/virtual-pool-real-world-interface/">secret underground vault</a>, we found a great substitute from a prior project: a row of 48 addressable LEDs driven by <a href="http://hackaday.com/2010/08/19/7-segment-sudoku/">shift registers</a>, the board on which they’re mounted perfectly matching the TRAKR’s 10 inch width! So our aim now was to achieve the same effect in light. The TRAKR moves too slowly for retinal <a href="http://hackaday.com/2010/03/20/pov-clock-inside-acrylic-block/">persistence of vision</a> to occur, but we could use <a href="http://hackaday.com/2009/12/28/lightdrawing-robot/">long exposure photography</a> to capture the results.</p>
<p><img class="alignnone size-full wp-image-27794" title="trakr-pov-mounted" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov-mounted.jpg" alt="" width="470" height="220" /></p>
<p>Anyone can buy a TRAKR off the shelf now, but the light bar was something custom-made for a POV project. The good news is that it’s <a href="http://hackaday.com/2010/05/31/beginner-concepts-cascading-shift-registers/">a very common circuit, something we’ve linked to before</a>, and a slightly scaled-back version can be built on a breadboard. Ours has a set of six 75HC595 shift registers with decoupling caps, each driving eight LEDs with associated current-limiting resistors. Very similar to what’s shown in that article, but cascaded out to six chips. You could also do something similar (and <em>way</em> more colorful) <a href="http://hackaday.com/2009/06/29/parts-shiftbrite-rgb-led-module-a6281/">using ShiftBrite LEDs</a>.</p>
<p>The LED board is held to the ’bot with masking tape. Spared no expense!</p>
<p><img class="alignnone size-full wp-image-27888" title="trakr-headers" src="http://hackadaycom.files.wordpress.com/2010/09/trakr-headers.jpg" alt="" width="470" height="280" /></p>
<p>As pointed out in our <a href="http://hackaday.com/2010/08/30/spy-video-trakr-the-teardown/">teardown</a>, the all-important JACK3, containing the GPIO lines, is smack dab in the middle of the TRAKR main board. The unpopulated header USB2, which we’ll use as a power tap, is closer to the outside edge.</p>
<p><img class="alignnone size-full wp-image-27795" title="trakr-pov-wiring" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov-wiring.jpg" alt="" width="470" height="320" /></p>
<p>In our haste to create a presentable demo, we just soldered wires directly to the TRAKR’s circuit board, but at some point intend to dismantle the thing again and solder on a proper header for inserting wires. For +5VDC and ground, the VDD5V and VGND pads of the idle USB connector are used. The shift registers require three data lines (as we’ll explain in a moment), and we opted to use the first GPIO lines on the board, labeled GPC0, GPC1 and GPC2.</p>
<p>The shift register interface, referred to as a <a href="http://hackaday.com/2009/06/30/parts-spi-eeprom-25aa25lc/">3-Wire</a> serial connection or sometimes SPI (Serial Peripheral Interconnect), is a <em>synchronous serial</em> interface, meaning that each bit of data is accompanied by the synchronized tick of a clock bit on another line. A third line, called the <em>latch</em>, signals the end of the data transmission — in the case of an 8-bit shift register, this will output on its 8 parallel data lines the last 8 bits that were “clocked in” over the serial connection.</p>
<p>For our light bar hack, we’ll use GPC0 as the clock line, GPC1 as the data line, and GPC2 as the latch. Most microcontrollers feature some kind of native 3-Wire/SPI support, but as mentioned earlier, with the TRAKR library at present we’ll have to trigger all these bits through software control.</p>
<p>Next thing we need is an image to display on the LEDs, one row at a time. Naturally, we’re going to use the Hack a Day logo:</p>
<p><img class="size-full wp-image-27796 alignnone" title="hadlogo" src="http://hackadaycom.files.wordpress.com/2010/08/hadlogo.png" alt="" width="96" height="120" /></p>
<p>In the source code archive provided later, the image is present as a 1-bit Windows BMP file, simple to work with because the data is uncompressed. The image is turned sideways as it requires less code for the program to decode each horizontal row of the bitmap than it would for processing vertical columns. It’s 48 pixels wide, corresponding to the 48 pixels in the LED bar, and 60 pixels high, including some blank lines at either end so repeated logos don’t run one into the next.</p>
<p>Our example program is hardcoded for this one demo image, which is embedded in the executable. A more sophisticated program might allow the user to load an image from the SD card, and would properly parse the BMP header to query the actual image dimensions. Again, we’re just looking to keep the code simple and not stretching out to hundreds of lines.</p>
<p><pre class="brush: cpp;">
// POV demo for Spy Video TRAKR w/shift register LED bar.

#include &quot;svt.h&quot;  // Official API
#include &quot;JAPI.h&quot; // Secret sauce

#define ROWS  60 // Image height in pixels
#define COLS  6  // Image width in bytes (pixels = 8x this)
#define PAD   (3 - ((COLS - 1) &amp; 3))
extern unsigned char _binary_logo_bmp_start[]; // In logo.o

#define CLOCK (1 &lt;&lt; 0)  // GPC0
#define DATA  (1 &lt;&lt; 1)  // GPC1
#define LATCH (1 &lt;&lt; 2)  // GPC2

void Start()
{
  JAPI_SetIoOutputMode(CLOCK | DATA | LATCH);
}

bool Run()
{
  unsigned char *ptr, byte;
  int r, c, b;

  // 62 byte offset to start of image data within BMP:
  // 14 byte BMP header, 40 byte DIB header, 8 byte palette
  ptr = &amp;_binary_logo_bmp_start[62];

  for(r=0; r&lt;ROWS; r++) {     // Each line in image
    for(c=0; c&lt;COLS; c++) {   // Each byte in line
      byte = *ptr++;
      for(b=128; b; b&gt;&gt;=1) {  // Each bit in byte
        if(byte &amp; b) JAPI_SetIoLow(DATA);
        else         JAPI_SetIoHigh(DATA);
        JAPI_SetIoHigh(CLOCK);
        JAPI_SetIoLow(CLOCK);
      }
    }
    JAPI_SetIoHigh(LATCH);
    JAPI_SetIoLow(LATCH);
    Sleep(20);
    ptr += PAD;  // BMP rows start on 4-byte boundary
  }

  return true;
}

void End()
{
}
</pre></p>
<p>The graphics-related #defines should be clear by now, we know this program is set up for this one specific image. The CLOCK, DATA and LATCH #defines correspond to the individual bits passed to GPIO-related functions, making subsequent code easier to read.</p>
<p>In the Start() function, the call to JAPI_SetIoOutputMode() initializes all three lines as outputs.</p>
<p>Because of the way the image is formatted, there’s minimal work now to be done in the Run() function. For each horizontal row of the image, six bytes of image data are output one bit at a time, 48 bits total: the DATA line is set either high or low to indicate the corresponding 1-bit pixel value, and then the CLOCK line is quickly toggled high and then low to “clock out” the data bit. At the end of each row, the LATCH line is similarly toggled to tell the shift registers to display the new data. A 20 millisecond delay holds the image for a moment so it’s not all scrunched together, given the TRAKR’s limited speed.</p>
<p>The next line advances the image pointer to the start of the next row, if required. In BMP files, rows are always a multiple of 4 bytes wide. Our bitmap is only 48 pixels (6 bytes) across, so this skips the two extra bytes at the end of each row. The final “return true;” line tells the TRAKR library to repeat our Run() function again indefinitely.</p>
<p>The End() function is empty for this program, but it still needs to be present to keep the linker happy.</p>
<p><a href="http://www.paintyourdragon.com/pov.zip">A ZIP file containing the above source code, bitmap image and makefile can be downloaded here</a>. Extract this archive within the Trakr.1 folder, alongside (not within) the Internals directory. “cd” to this directory and type “make”. If all goes as planned, this should produce the file POV.bin, which can be loaded on the TRAKR as described earlier.</p>
<p><img class="alignnone size-full wp-image-27804" title="trakr-pov2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov2.jpg" alt="" width="470" height="230" /></p>
<div>
<p>Something to consider when hanging circuitry off the TRAKR is the proximity to the 2.4 GHz antenna. We wasted a good half hour tracking down a “software bug” that in reality turned out to be our sloppy, long wires picking up radio interference (you can still see a few whacked-out pixels in the image above). Keep wire runs as short as possible, perpendicular to the antenna.</p>
<h2>Bright future</h2>
</div>
<p>Even in this early stage, warts and all, we’re quite excited by the prospects for this toy’s hackability. Wild Planet is to be applauded for their open-minded approach in encouraging software and hardware modifications. A lot of comparisons are already being made to the <a href="http://hackaday.com/2009/05/09/roomba-with-dustpan-style-grasper/">Roomba</a> and <a href="http://hackaday.com/2008/10/20/rovio-teardown/">Rovio</a>, both of which have spawned enthusiast sites and even books. Time will tell if the Spy Video TRAKR catches on the same way.</p>
<p><img class="alignnone size-full wp-image-27805" title="trakr-pov" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov1.jpg" alt="" width="470" height="280" /></p>
<p>So that’s our TRAKR hack…now let’s see yours! When you’ve got something cool to showcase, don’t forget to <a href="http://hackaday.com/contact-hack-a-day/">tip us off</a>!</p>
<br />Filed under: <a href='http://hackaday.com/category/classic-hacks/'>classic hacks</a>, <a href='http://hackaday.com/category/how-to/'>how-to</a>, <a href='http://hackaday.com/category/robots-hacks/'>robots hacks</a>, <a href='http://hackaday.com/category/toy-hacks/'>toy hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/27791/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/27791/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/27791/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27791&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/09/02/spy-video-trakr-software-and-first-hack/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-hacked.jpg" medium="image">
			<media:title type="html">trakr-hacked</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/txtbomber1.jpg" medium="image">
			<media:title type="html">txtbomber</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov-mounted.jpg" medium="image">
			<media:title type="html">trakr-pov-mounted</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/09/trakr-headers.jpg" medium="image">
			<media:title type="html">trakr-headers</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov-wiring.jpg" medium="image">
			<media:title type="html">trakr-pov-wiring</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/hadlogo.png" medium="image">
			<media:title type="html">hadlogo</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov2.jpg" medium="image">
			<media:title type="html">trakr-pov2</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov1.jpg" medium="image">
			<media:title type="html">trakr-pov</media:title>
		</media:content>
	</item>
		<item>
		<title>Spy Video TRAKR: the teardown</title>
		<link>http://hackaday.com/2010/08/30/spy-video-trakr-the-teardown/</link>
		<comments>http://hackaday.com/2010/08/30/spy-video-trakr-the-teardown/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 21:45:50 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[robots hacks]]></category>
		<category><![CDATA[teardown]]></category>
		<category><![CDATA[toy hacks]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[spy]]></category>
		<category><![CDATA[toy]]></category>
		<category><![CDATA[trakr]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[wild planet]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=27697</guid>
		<description><![CDATA[Last Friday we looked at Wild Planet’s Spy Video TRAKR programmable RC vehicle mostly from an end user perspective. Much of our weekend was spent dismantling and photographing the device’s internal works, and poring over code and documentation, in order to better gauge the TRAKR’s true hackability. Our prior review included some erroneous speculation…we can clarify a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27697&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-27736" title="trakr-closeup" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-closeup.jpg" alt="" width="470" height="280" /></p>
<p>Last Friday <a href="http://hackaday.com/2010/08/27/spy-video-trakr-first-impressions/">we looked at Wild Planet’s Spy Video TRAKR</a> programmable RC vehicle mostly from an end user perspective. Much of our weekend was spent dismantling and photographing the device’s internal works, and poring over code and documentation, in order to better gauge the TRAKR’s true hackability. Our prior review included some erroneous speculation…we can clarify a number of details now, and forge ahead with entirely <em>new</em> erroneous speculation!</p>
<p><span id="more-27697"></span></p>
<p>Our plan with this teardown is to establish more concrete details of what’s hackable inside the device, what’s not, and to help nail down some of the unstated hardware specifications.</p>
<p>We incorrectly reported that no programming documentation or compiler is yet available. Turns out all this information was simply tucked away in a <a href="http://www.spygear.net/help/apps.php">help section of the TRAKR web site</a>, not on the “App BUILDR” page where we expected it. <em>Derp!</em> These resources are still in a rough state, yet proved to be a far more valuable source of information than the physical teardown. C code and PDFs aren’t very <a href="http://hackaday.com/2010/08/29/art-piece-from-board-artwork/">photogenic</a> though, so we’ve got plenty of circuit board pr0n to start with!</p>
<h2>Inside the Remote</h2>
<div>
<div>
<p>There’s not as much to see or do inside the TRAKR remote, so we’ll power through that first.</p>
</div>
</div>
<p><img class="alignnone size-full wp-image-27699" title="remote-usb" src="http://hackadaycom.files.wordpress.com/2010/08/remote-usb.jpg" alt="" width="470" height="280" /></p>
<p>The concealed rear USB port was mentioned last time, which we’ve been informed is to allow for field-upgradeable firmware. If you don’t mind being tethered to one spot, we discovered the remote can also be powered from a USB hub, or even from the TRAKR’s own USB host port.</p>
<p>In another nod to tinkerer-friendly design, both the remote and the TRAKR are held together with identical Phillips screws throughout, recessed but not hidden under stickers or rubber pads.</p>
<p><img class="alignnone size-full wp-image-27700" title="remote-internals" src="http://hackadaycom.files.wordpress.com/2010/08/remote-internals.jpg" alt="" width="470" height="260" /></p>
<p>The LCD screen is one typically seen in cell phones, 15-bit color at 160&#215;120 pixels.</p>
<p><img class="alignnone size-full wp-image-27701" title="remote-switches" src="http://hackadaycom.files.wordpress.com/2010/08/remote-switches.jpg" alt="" width="470" height="320" /></p>
<div>
<p>The “Bot Switch PCB” has just some switches and passive components. SW1 and SW4 have dedicated purposes (home menu and power), but the functions of the others are defined by individual apps. If you’re looking for GPIO lines to hack in the remote, this might be your best bet.</p>
</div>
<p><img class="alignnone size-full wp-image-27702" title="remote-pads" src="http://hackadaycom.files.wordpress.com/2010/08/remote-pads.jpg" alt="" width="260" height="360" /></p>
<div>
<div>The underside of the main remote PCB has some exposed pads, but there are no through-hole solder points. The pad labeled “V0_TVOUT” caught our attention, thinking it might provide a <a href="http://hackaday.com/2010/06/30/didj-composite-video-out/">composite video signal</a>, but this turned out not to be the case, or at least it’s not enabled in the present firmware. J9 looks like a <a href="http://hackaday.com/2009/06/25/how-to-the-bus-pirate-v2-with-usb/">JTAG</a> header.</div>
<p><img class="alignnone size-full wp-image-27703" title="remote-morepads" src="http://hackadaycom.files.wordpress.com/2010/08/remote-morepads.jpg" alt="" width="360" height="280" /></p>
<p>A few more test points tucked beneath the LCD.</p>
</div>
<p><img class="alignnone size-full wp-image-27705" title="remote-mem" src="http://hackadaycom.files.wordpress.com/2010/08/remote-mem.jpg" alt="" width="470" height="260" /></p>
<div>
<p>2 megabyte SDRAM and 1 megabyte SPI flash in the remote.</p>
</div>
<p><img class="alignnone size-full wp-image-27706" title="remote-stick" src="http://hackadaycom.files.wordpress.com/2010/08/remote-stick.jpg" alt="" width="470" height="300" /></p>
<div>
<p>We were really hoping that the joysticks might be analog internally, but no such luck…they’re simple forward/reverse switches. Even if replaced with potentiometers, without access to the firmware source there’s no way of communicating this information to the TRAKR.</p>
</div>
<p><img class="alignnone size-full wp-image-27707" title="remote-wireless" src="http://hackadaycom.files.wordpress.com/2010/08/remote-wireless.jpg" alt="" width="470" height="280" /></p>
<p>The remote and TRAKR have outwardly-identical radio transceivers. They’re rather well-sealed and we’ve not dismantled them further yet, but recall hearing they’re based on a Nordic 2.4 GHz part. Wild Planet claims that with a forthcoming firmware change, they’ll be WiFi-capable. We remain hopeful but <a href="http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;file=viewtopic&amp;p=637606">skeptical</a> — it seems far more likely that the remote’s rear USB port will come into play, or in the interim perhaps one of the <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=151">SparkFun Nordic options</a> will prove a viable choice for PC control.</p>
<h2>Inside the TRAKR</h2>
<p><img class="alignnone size-full wp-image-27708" title="trakr-cables" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-cables.jpg" alt="" width="470" height="300" /></p>
<p>Removing the screws is straightforward, but fully removing the lid from the TRAKR requires several cables be detached first — and they’ve all been glued in place for reliability. We just cut through the glue with an X-acto knife and pried a bit, but maybe it can be more delicately dissolved or melted.</p>
<p><img class="alignnone size-full wp-image-27709" title="trakr-pcb1" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb1.jpg" alt="" width="470" height="350" /></p>
<p>The right side of the main board (turned sideways here) focuses on connectivity and the CPU. The ribbon cable at left leads to the camera. The pair of two-pin headers lead to the microphone and front accessory bump switch. The purpose of the unpopulated SW1 isn’t known — it might be that early designs featured an additional rear or top switch, now vestigial. The larger headers lead to the radio module and the trim pots and recessed reset/debug switches on the bot’s undercarriage.</p>
<p>No need to get through that epoxy blob. Digging through configuration files for the compiler, the chip appears to be a Nuvoton <a href="http://www.nuvoton.com/NuvotonMOSS/Community/ProductInfo.aspx?tp_GUID=97c1dcb2-17d8-4bb8-bd40-28c98a3a58b0">W55VA91</a>, featuring an ARM926EJ core running at 192 MHz, and hardware-assisted JPEG codec.</p>
<p><img class="alignnone size-full wp-image-27710" title="trakr-pcb2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb2.jpg" alt="" width="470" height="300" /></p>
<div>
<p>The middle section of the board is what TRAKR-hackers will become most acquainted with. JACK3, the vertical row of pads in the center, contains 8 digital GPIO lines and one analog input, with 0.1&#8243; pin spacing. JACK4 looks like a JTAG port, with 2mm pin spacing. Below that is the connector for the USB host port, and the second (unpopulated) port at the right can be used as a 5V source. It&#8217;s a real shame that power and ground were overlooked on JACK3 despite its proximity to those traces. With the addition of power traces and a row header soldered in place, this would have made a nice standardized riser for small add-ons, much like the ecosystem of Arduino “<a href="http://hackaday.com/2010/07/01/arduino-webserver/">shields</a>” that has taken off.</p>
</div>
<p><img class="alignnone size-full wp-image-27711" title="trakr-pcb3" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb3.jpg" alt="" width="470" height="350" /></p>
<div>
<p>Left side of the board is devoted mainly to power and motor control. The red/black wires at left lead to the battery compartment. Connector above that is for the speaker. The two 3-pin connectors at the bottom lead to the left and right motors, with the H-bridge driver circuit above that.</p>
<p>By the way — if you dismantle your TRAKR, when it comes time to put it back together, there are four screw holes that aren’t actually used despite their labeling on the silkscreen layer. You can see three of these in the photo above, and the fourth in a prior photo near the camera connector. Forcing screws in could damage one of the motor cables underneath!</p>
</div>
<p><img class="alignnone size-full wp-image-27712" title="trakr-pcb-bottom" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb-bottom.jpg" alt="" width="470" height="280" /></p>
<p>Little to see on the underside. Another inactive V0_TVOUT pad taunts us! This side is dominated mostly by the SD card socket, and…</p>
<p><img class="alignnone size-full wp-image-27713" title="trakr-mem" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-mem.jpg" alt="" width="470" height="254" /></p>
<div>…ample 8 megabyte SDRAM, 2 megabyte flash. Together with the SD slot, USB and ARM9 CPU, we’re anticipating <a href="http://hackaday.com/2007/08/30/uclinux-based-embedded-asterix-pbx/">ucLinux</a> and <a href="http://hackaday.com/2010/06/21/psp-homebrew-using-the-half-byte-loader/">DOOM</a> to be ported in 3…2…1…</div>
<p><img class="alignnone size-full wp-image-27714" title="trakr-pcb-misc" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb-misc.jpg" alt="" width="470" height="213" /></p>
<p>The USB host port is on a small daughter board, and each of the motors has some local driver circuitry as well.</p>
<p><img class="alignnone size-full wp-image-27715" title="trakr-gearbox" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-gearbox.jpg" alt="" width="470" height="300" /></p>
<p>Each motor is driven through a reduction <a href="http://hackaday.com/2010/04/08/lego-gearbox-seven-speed-plus-reverse/">gearbox</a>. They operate quietly with only a slight amount of slop. As with the radio, we’ve not further dismantled these yet.</p>
<p><img class="alignnone size-full wp-image-27717" title="trakr-spring" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-spring.jpg" alt="" width="470" height="340" /></p>
<p>Though not powered, the front wheels aren’t as boring as we first thought. This rack and spring mechanism keeps a constant tension on the rubber tread belts, allowing them to flex and maintain traction as the TRAKR drives over various terrain.</p>
<p><img class="alignnone size-full wp-image-27718" title="trakr-camera-slide" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-camera-slide1.jpg" alt="" width="470" height="340" /></p>
<p>The partly-disassembled camera pivot mechanism. Two small rubber pads provide just enough friction to hold the camera in its set position, yet still allow it to pivot easily. If attempting to add <a href="http://hackaday.com/2010/07/18/servo-controller-board/">servo control</a> to the camera, removing those pads will likely help.</p>
<div>
<p>The camera is connected to the main PCB with a 24-conductor flex cable, 0.5mm pitch and about 6 inches long. Mounting the camera in a higher position might best be done by replacing the entire cable with a longer one, but we’ve yet to locate a suitable match from a source such as DigiKey.</p>
</div>
<p><img class="alignnone size-full wp-image-27719" title="trakr-camera-leds" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-camera-leds.jpg" alt="" width="470" height="320" /></p>
<p>Extracting the camera PCB from its housing, we were greeted with a low-hanging hack opportunity: the board was designed to accommodate multiple LEDs, but in practice shipped with just one large one in place. <a href="http://hackaday.com/2010/03/17/woot-how-to-let-there-be-light-for-your-rovio/">Boosting the light output</a> should be a very simple matter of adding the missing resistors and LEDs, though you’ll need to drill holes through the case or run wires to mount the LEDs externally.</p>
<p>We’re not 100% certain of the camera sensor yet. From PR materials at Maker Faire, we know it’s from OmniVision, but don’t know the exact model. Based on size and specifications, the OV7670 looks like a possibility, in which case it <em>should</em> be capable of full VGA resolution, not just the QVGA output we’ve seen.</p>
<p><img class="alignnone size-full wp-image-27720" title="trakr-accessory" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-accessory.jpg" alt="" width="470" height="300" /></p>
<p>The “accessory port” is just a passive attachment point to clip things on; it resembles a headphone jack, but isn’t. There is a pushbutton switch behind it, maybe an interactive cat-poking stick is planned.</p>
<p><img class="alignnone size-full wp-image-27721" title="trakr-name" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-name.jpg" alt="" width="470" height="260" /></p>
<p>The artist’s signature.</p>
<p>Reassembly was straightforward. Cable connectors are keyed for orientation, and for those that aren’t a unique size, the correct positions can be inferred from cable length. And there was no mysterious “extra screw” at the end — everything went together easily and worked on the first try.</p>
<h2>Passengers</h2>
<div>Some readers have asked about <a href="http://hackaday.com/2010/03/05/rc-truck-source-for-robotics-platform/">mounting external microcontrollers</a> or other devices to the rear transport deck. Adding a microcontroller isn’t an entirely ridiculous prospect — even though the TRAKR’s CPU has far more “oomph,” it remains to be seen if the GPIO lines are suited to tasks such as accurate <a href="http://hackaday.com/2009/09/17/software-pulse-width-modulation/">PWM</a> for servo control. Delegating such tasks may prove helpful, or even necessary. The usable area of the transport deck is a bit over five inches wide and three inches deep, and a couple of rubber bands or some foam tape will hold most boards securely. With the deck removed, the recessed notch above the battery bay is such a perfect size for certain things, it’s almost uncanny. Did [Dave] plan this?</div>
<p><img class="alignnone size-full wp-image-27723" title="trakr-back-arduino" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-back-arduino.jpg" alt="" width="470" height="240" /></p>
<p>Arduino, natch. Small devices like this can be powered from the TRAKR’s USB host port, but without an <a href="http://hackaday.com/2009/09/22/introduction-to-ftdi-bitbang-mode/">FTDI</a> driver on the host side this connection can’t be used for serial communication.</p>
<p><img class="alignnone size-full wp-image-27724" title="trakr-back-breadboard2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-back-breadboard2.jpg" alt="" width="470" height="230" /></p>
<p>Half-size and quarter-size breadboards fit exceedingly well, almost snapping into place. But anything placed back here though is going to block access to the SD and USB ports.</p>
<h2>More Hack Ideas</h2>
<p>Having explored the hardware inside and out, we’re already ruminating on the possibilities…</p>
<p>The TRAKR has a big infrared LED on the front (with two more easily added). The firmware for <a href="http://hackaday.com/2009/08/17/adafruit-releases-new-tv-b-gone-kit/">TV-B-Gone</a> is open source. Enough said.</p>
<p><img class="alignnone size-full wp-image-27726" title="trakr-segway" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-segway.jpg" alt="" width="470" height="320" /></p>
<p>With the transport deck removed, the rear wheels of the TRAKR protrude slightly behind the body. With the addition of a gyro sensor, will it be possible to get the TRAKR to stand upright and scoot around <a href="http://hackaday.com/2009/10/20/well-engineered-diy-segway/">Segway</a>-style? The remote’s joysticks are non-proportional, but software control of the motors allows for very fine speed adjustment. It’s <a href="http://hackaday.com/2009/04/21/wii-controlled-segway-style-nxt-bot/">been done with LEGO NXT</a>, so we think the practicality of this idea will come down to the responsiveness of the TRAKR’s motors. (Yes, we <em>know</em> it’s just propped up against the back wall there. <em>Shhh!</em>)</p>
<p><img class="alignnone size-full wp-image-27728" title="trakr-pov" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov.jpg" alt="" width="470" height="280" /></p>
<div>
<p>The wide stance of the TRAKR has us contemplating a <a href="http://hackaday.com/2009/07/09/chalkbot-vs-graffitiwriter/">Chalkbot</a> or <a href="http://hackaday.com/2010/08/05/txtbomber/">txtBomber</a> printer attachment: the eight GPIO lines could be used to control a <a href="http://hackaday.com/2010/02/17/robo-vibe/">row of solenoids</a> attached to paint markers or chalk hoppers. We didn’t have the parts on hand to build a physical printer right away, but we did have some <a href="http://hackaday.com/2010/05/31/beginner-concepts-cascading-shift-registers/">addressable LED bars</a> from another project, so a proof-of-concept was possible using <a href="http://hackaday.com/2009/12/02/worlds-largest-pov-display/">long-exposure photography</a>. And <em>it works!</em> We’ll elaborate on this hack in a subsequent article as we get our hands dirty…<em>very</em> dirty…with the TRAKR C compiler.</p>
</div>
<br />Filed under: <a href='http://hackaday.com/category/robots-hacks/'>robots hacks</a>, <a href='http://hackaday.com/category/teardown/'>teardown</a>, <a href='http://hackaday.com/category/toy-hacks/'>toy hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/27697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/27697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/27697/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27697&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/08/30/spy-video-trakr-the-teardown/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-closeup.jpg" medium="image">
			<media:title type="html">trakr-closeup</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-usb.jpg" medium="image">
			<media:title type="html">remote-usb</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-internals.jpg" medium="image">
			<media:title type="html">remote-internals</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-switches.jpg" medium="image">
			<media:title type="html">remote-switches</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-pads.jpg" medium="image">
			<media:title type="html">remote-pads</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-morepads.jpg" medium="image">
			<media:title type="html">remote-morepads</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-mem.jpg" medium="image">
			<media:title type="html">remote-mem</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-stick.jpg" medium="image">
			<media:title type="html">remote-stick</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/remote-wireless.jpg" medium="image">
			<media:title type="html">remote-wireless</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-cables.jpg" medium="image">
			<media:title type="html">trakr-cables</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb1.jpg" medium="image">
			<media:title type="html">trakr-pcb1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb2.jpg" medium="image">
			<media:title type="html">trakr-pcb2</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb3.jpg" medium="image">
			<media:title type="html">trakr-pcb3</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb-bottom.jpg" medium="image">
			<media:title type="html">trakr-pcb-bottom</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-mem.jpg" medium="image">
			<media:title type="html">trakr-mem</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pcb-misc.jpg" medium="image">
			<media:title type="html">trakr-pcb-misc</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-gearbox.jpg" medium="image">
			<media:title type="html">trakr-gearbox</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-spring.jpg" medium="image">
			<media:title type="html">trakr-spring</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-camera-slide1.jpg" medium="image">
			<media:title type="html">trakr-camera-slide</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-camera-leds.jpg" medium="image">
			<media:title type="html">trakr-camera-leds</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-accessory.jpg" medium="image">
			<media:title type="html">trakr-accessory</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-name.jpg" medium="image">
			<media:title type="html">trakr-name</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-back-arduino.jpg" medium="image">
			<media:title type="html">trakr-back-arduino</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-back-breadboard2.jpg" medium="image">
			<media:title type="html">trakr-back-breadboard2</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-segway.jpg" medium="image">
			<media:title type="html">trakr-segway</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-pov.jpg" medium="image">
			<media:title type="html">trakr-pov</media:title>
		</media:content>
	</item>
		<item>
		<title>Spy Video TRAKR: first impressions</title>
		<link>http://hackaday.com/2010/08/27/spy-video-trakr-first-impressions/</link>
		<comments>http://hackaday.com/2010/08/27/spy-video-trakr-first-impressions/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 11:32:17 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[reviews]]></category>
		<category><![CDATA[robots hacks]]></category>
		<category><![CDATA[toy hacks]]></category>
		<category><![CDATA[maker faire]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[spy]]></category>
		<category><![CDATA[toy]]></category>
		<category><![CDATA[tracker]]></category>
		<category><![CDATA[trakr]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[wild planet]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=27491</guid>
		<description><![CDATA[At the Bay Area Maker Faire this past May, we had our first glimpse of Wild Planet’s Spy Video TRAKR, a $130 radio-controlled toy with some surprises under the hood. On the surface, the Spy Video TRAKR — the latest addition to the popular Spy Gear toy line — is an R/C tank with a video camera and night [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27491&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-27492" title="trakr-window" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-window.jpg" alt="" width="470" height="250" /></p>
<p>At the Bay Area Maker Faire this past May, we had our <a href="http://hackaday.com/2010/05/24/bamf2010-spy-trakr-no-lasers-14861-cheaper/">first glimpse of Wild Planet’s Spy Video TRAKR</a>, a $130 radio-controlled toy with some surprises under the hood.</p>
<p>On the surface, the Spy Video TRAKR — the latest addition to the popular <em>Spy Gear</em> toy line — is an R/C tank with a video camera and night vision, with the added ability to download new “apps” from the internet for extra functions. With a little detective work, one uncovers the TRAKR’s secret double life: it’s also an eminently hackable robotics platform! Prior Spy Gear toys have been popular hack targets, providing inexpensive, mass-produced sources of unusual items such as head-mounted displays. Rather than throw up barriers, Wild Planet has chosen to embrace this secondary market, with plans to release development tools and documentation making it possible to extend the device’s capabilities.</p>
<p>Read on for our image-heavy unboxing and initial impressions.</p>
<div><span id="more-27491"></span>Wild Planet provided us a unit for testing, with their assurance that this is identical to the package now arriving on store shelves.</p>
<p><img class="alignnone size-full wp-image-27493" title="trakr-box-front" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-front.jpg" alt="" width="470" height="360" /></p>
</div>
<p><img class="alignnone size-full wp-image-27494" title="trakr-box-back" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-back.jpg" alt="" width="470" height="340" /></p>
<p>The packaging is outwardly consumer-oriented — this is, first and foremost, a kids toy after all — and the “USB Connected” and “Download &amp; Build Custom Apps” labels are about as technical as it gets on the outside.</p>
<p><img class="alignnone size-full wp-image-27495" title="trakr-box-details" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-details.jpg" alt="" width="470" height="230" /></p>
<p>Batteries not included. You’ll need plenty. And did you ever expect to see Linux mentioned by name on anything at Toys R Us? Awesome!</p>
<p><img class="alignnone size-full wp-image-27496" title="trakr-packaging" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-packaging.jpg" alt="" width="470" height="360" /></p>
<p>Internal packaging is minimalist and largely <a href="http://hackaday.com/2009/10/17/the-glass-recycling-game/">recyclable</a>. No twist ties, no staples, no plastic bubbles, no registration cards or catalogs. Much appreciated! We’ve seen much <a href="http://hackaday.com/2010/03/28/leapfrog-didj/">smaller toys with far more gratuitous packaging</a>, so this was a welcome relief.</p>
<p><img class="alignnone size-full wp-image-27497" title="trakr-contents" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-contents.jpg" alt="" width="470" height="350" /></p>
<p>The entire contents of the box are as follows:</p>
<div>
<ul>
<li>The TRAKR vehicle itself, with antenna in the stowed position.</li>
<li>Snap-on “transport deck,” seems to be of little use other than to provide a seat for G.I. Joe or the adorable tiny kitten in the looming flood of YouTube videos.</li>
<li>Remote control unit.</li>
<li>Single page instruction sheet.</li>
<li>Four foot long banana yellow USB A to mini-B cable.</li>
</ul>
</div>
<p><img class="alignnone size-full wp-image-27498" title="trakr-front" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-front.jpg" alt="" width="470" height="470" /></p>
<p><img class="alignnone size-full wp-image-27499" title="trakr-side" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-side.jpg" alt="" width="470" height="420" /></p>
<p><img class="alignnone size-full wp-image-27500" title="trakr-back" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-back.jpg" alt="" width="470" height="470" /></p>
<p><img class="alignnone size-full wp-image-27501" title="trakr-bottom" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-bottom.jpg" alt="" width="470" height="350" /></p>
<p>The TRAKR vehicle is a stubby, squat tank, measuring about 10 inches wide and 7 inches long. Six AA cells install behind a cover on the underside of the unit. The total weight with alkaline cells is 1065 grams, or about 2 pounds 5 oz. Picks up easily with one hand.</p>
<p><img class="alignnone size-full wp-image-27502" title="trakr-sensors" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-sensors.jpg" alt="" width="470" height="300" /></p>
<p>The front of the TRAKR vehicle features a number of sensors. Left to right, these include: microphone (the white circle at the left), a presently-unused accessory connection port which appears to contain a bump switch, the color video camera and infrared LED for <a href="http://hackaday.com/2005/01/26/homemade-night-vision-scope/">night vision</a>, and speaker (larger white circle at the right). The camera can be pivoted from straight ahead to about 30 degrees upward, but there is no <a href="http://hackaday.com/2009/11/06/servo-database/">servo</a> control of this function; it must be manually positioned.</p>
<p><img class="alignnone size-full wp-image-27503" title="trakr-wheels" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-wheels.jpg" alt="" width="470" height="350" /></p>
<div>
<p>The rear wheels of the TRAKR have independent electric motors; the front wheels are passive, driven by rubber treads. All the wheels are held on by triangle security screws, so replacing these with fancy R/C car tires probably won’t come easy.</p>
</div>
<p><img class="alignnone size-full wp-image-27504" title="trakr-ports" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-ports.jpg" alt="" width="470" height="310" /></p>
<p>With the transport deck removed we can see the ports on the back of the TRAKR: an <a href="http://hackaday.com/2010/03/14/storage-for-your-hacking-needs/">SD card</a> slot for storing photos and video (also SDHC compatible), the USB mini-B connector for attaching to a PC (or Mac, etc.), and a USB type A connector that currently serves no purpose, but might be related to future accessories (and hacks, of course).</p>
<p>When connected to a host computer, the TRAKR appears as a 1-megabyte FAT12 filesystem. New apps, downloaded from the Spy Video TRAKR web site, are installed by simply copying the corresponding .bin file to the APPs directory on this flash drive. It’s quite a bit like the <a href="http://hackaday.com/2009/11/21/review-mbed-nxp-lpc1768-microcontroller/">mbed microcontroller</a> in this regard. With the three factory apps pre-loaded, there’s about 900K free space remaining. Additionally, the TRAKR can function as an SD card reader when attached via USB.</p>
<p><img class="alignnone size-full wp-image-27505" title="trakr-remote" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-remote.jpg" alt="" width="470" height="460" /></p>
<p>The remote control unit is a bit over 5 inches high and wide. Four AA cells install behind a back cover, and the total weight is 392 grams, or about 13.5 oz. The size and heft of the controller is sufficiently comfortable for both young and adult hands. There are two single-axis sticks for driving the tank <em>Battlezone</em>-style, five buttons (one dedicated to the “home” function, the rest being app-specific), a power and volume switch, speaker, and a 1.75&#8243; color LCD screen in the center. Though the sticks have an analog feel, in practice they appear to be simple non-proportional controls.</p>
<p><img class="alignnone size-full wp-image-27506" title="trakr-remote-on" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-remote-on.jpg" alt="" width="470" height="340" /></p>
<p><img class="alignnone size-full wp-image-27507" title="trakr-screen" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-screen.jpg" alt="" width="470" height="340" /></p>
<p>The LCD looks to be half-QVGA resolution (160&#215;120). The video feed averages a good 15 frames per second over the device’s wireless (2.4 GHz, but not WiFi) connection.</p>
<p><img class="alignnone size-full wp-image-27508" title="trakr-night" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-night.jpg" alt="" width="470" height="320" /></p>
<p>Night vision is provided by a single 8mm near-infrared LED, with a range of about six feet.</p>
<p>The camera can also take QVGA (320&#215;240) color stills, and half-QVGA (160&#215;120) video, recorded to the SD card as JPEG and AVI, respectively. Here are some unprocessed stills directly from the memory card:</p>
<p><img class="alignnone size-full wp-image-27509" title="trakr-photo1" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-photo1.jpg" alt="" width="320" height="240" /></p>
<p><img class="alignnone size-full wp-image-27510" title="trakr-photo2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-photo2.jpg" alt="" width="320" height="240" /></p>
<div>
<p>Something interesting we noticed with outdoor use is that most trees appear red, due to the camera’s sensitivity to infrared light. This generally isn’t a problem with images taken indoors under normal lighting.</p>
</div>
<div>
<p>The TRAKR ran a bit quieter than we expected, and had no problem clearing door thresholds or running across and between different floor surfaces. Having a camera barely over two inches off the ground may seem to be of questionable utility — the <a href="http://hackaday.com/2010/03/17/woot-how-to-let-there-be-light-for-your-rovio/">WowWee Rovio mobile webcam</a>, for example, can raise its point of view about a foot for a better perspective — and, to be honest, at first the whole thing seemed a bit pointless. But the more time we spent driving around, getting into the mindset and reliving the countless hours of our youth spent with a <a href="http://en.wikipedia.org/wiki/Big_Trak">Big Trak</a> (sort of a 1980s progenitor to the TRAKR), the more apparent it was that this is the ideal perspective for the toy’s intended audience: kids aren’t contemplating edge filters and object tracking algorithms…they’re doing <em>important kid things</em>, running James Bond spy missions, knocking over action figures and army men and chasing after the cat. And as you see above, the camera is set perfectly at action-figure-and-cat-terrorizing height!</p>
</div>
<p>So that’s an overview of the TRAKR as it comes straight from the box. To do more, we begin by visiting the Spy Video TRAKR web site:</p>
<p><img class="alignnone size-full wp-image-27511" title="trakr-web1" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-web1.jpg" alt="" width="470" height="244" /></p>
<p>The “Download Apps” link currently leads to a list of about a dozen simple apps developed in-house:</p>
<p><img class="alignnone size-full wp-image-27512" title="trakr-web2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-web2.jpg" alt="" width="470" height="300" /></p>
<p>None of the apps is particularly outstanding; they appear to be for illustrative purposes, each one demonstrating a single idea and not wanting to overwhelm the budding programmer. Most range from about 20 to 40 kilobytes.</p>
<p><img class="alignnone size-full wp-image-27513" title="trakr-web3" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-web3.jpg" alt="" width="470" height="280" /></p>
<p>Clicking an app name reveals more information — a description, download link for the compiled app, and also a source code link for us geeks. Unfortunately, that’s where the fun ends for now. “APP BUILDR,” the code editor and compiler which works online (again like the aforementioned <a href="http://hackaday.com/2010/06/17/no-nonsense-mbed-development-demo/">mbed</a> microcontroller), is not yet accessible:</p>
<p><img class="alignnone size-full wp-image-27514" title="trakr-web4" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-web4.jpg" alt="" width="470" height="470" /></p>
<p>NOOOOOOOOOOOO!</p>
<p>The Spy Video TRAKR was originally slated to ship this fall for the holiday shopping season. Wild Planet managed a great head start at getting the TRAKR into production and distribution — we have the toy in-hand and you can already find this at a number of retailers — but the software is still on its original schedule for an October release. We understand software timelines and are sympathetic to that reality, but this does mean there’s little sense of urgency if your main interest in the TRAKR was for programming. It can wait.</p>
<p>In the interim, we can start to deconstruct the development process with the small bits of information available. From Maker Faire, we do know that the TRAKR contains an <a href="http://hackaday.com/2009/12/23/reverse-engineering-off-brand-media-players/">ARM9</a> processor, and is programmed in C. And while the code editor isn’t yet online, we can follow the “Download Source” link for an app to retrieve its source code. Here’s an excerpt from one of the demonstration programs:</p>
<p><img class="alignnone size-full wp-image-27515" title="trakr-code" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-code.png" alt="" width="470" height="380" /></p>
<p>Indeed it’s C, with just a light wrapping of functions (e.g. Start() and Run() instead of a main() function). There’s clearly a Spy Video TRAKR-specific API (svt.h) for accessing hardware functionality like the TRAKR’s motors or the controller’s buttons and display, but documentation for this library isn’t available online yet.</p>
<p>At this point, we’re still dealing entirely with standard, as-advertised, out-of-the-box capabilities. The thing about the TRAKR that really made us stop and take notice at <a href="http://hackaday.com/2010/05/24/bay-area-maker-faire-2010-in-pictures/">Maker Faire</a>, the thing that has us genuinely enthusiastic about the product even though this article probably sounds like a total corporate shill by now (we approached them first, honest), has everything to do with the toy’s Easter egg:</p>
<p><img class="alignnone size-full wp-image-27516" title="trakr-window" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-window1.jpg" alt="" width="470" height="250" /></p>
<p>It’s a sublime detail: the clear letters on the otherwise frosted cover just above the rear ports hint at intriguing stuff within. The cover is held on with just a couple of ordinary Phillips screws. Say, were you the sort of curious kid who’d dismantle their toys to see what makes them work? We thought so.</p>
<p><img class="alignnone size-full wp-image-27517" title="trakr-opened" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-opened.jpg" alt="" width="470" height="320" /></p>
<p>On the outside: the URL for the consumer. On the inside: the URL for the inquisitive. Just a fraction of an inch and a thin sheet of plastic apart. It’s absolutely brilliant, and there’s no mention of this on the packaging or the standard web site.</p>
<p>So — in addition to the standard app web site, a second web site (and sadly an equally unfinished one at this time) is planned to delve even deeper into the system’s inner workings. But even without this information, we can see hints of what’s ahead just by examining the board, which they’ve thoughtfully labeled. We can make out an unpopulated third USB port, an unpopulated switch connector, a breakout header that appears to have eight <a href="http://hackaday.com/2008/12/05/working-with-relays/">GPIO</a> lines and one analog input, and a smaller breakout header for an <a href="http://hackaday.com/2009/12/22/modular-systems-using-spi/">SPI</a> port of some sort (perhaps debugging).</p>
<p>Additionally, both the TRAKR and the remote control have switches and ports concealed under access panels:</p>
<p><img class="alignnone size-full wp-image-27518" title="trakr-debug1" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-debug1.jpg" alt="" width="470" height="300" /></p>
<p><img class="alignnone size-full wp-image-27519" title="trakr-debug2" src="http://hackadaycom.files.wordpress.com/2010/08/trakr-debug2.jpg" alt="" width="470" height="320" /></p>
<p>The trim pots on the TRAKR are almost certainly for tuning the radio transceiver. The switches on both units are labeled “USB” for one position and “SPI” for the other, and this appears to be related to debugging or flash memory programming. Both switches ship in the “SPI” position.</p>
<div>
<p>It’s encouraging to see the Spy Video TRAKR following the lead of other open robots like the <a href="http://hackaday.com/2010/04/08/roomba-dissection-videos/">Roomba</a> and <a href="http://hackaday.com/2010/04/28/mind-controlled-rovio/">Rovi</a>, and we hope to see it gain a similar following. There may still be more surprises within. With our basic review completed, watch Hack a Day for a full <a href="http://hackaday.com/2009/11/27/four-tear-downs-for-your-friday-afternoon/">teardown</a> in the future.</p>
<p>So, readers, what hacks can you envision for such a device? Telescoping camera stalk? Hexapod legs? Weaponry? Are there any particular features you’d like to see more closely investigated in our teardown? Let’s hear about it in the comments!</p>
</div>
<br />Filed under: <a href='http://hackaday.com/category/reviews/'>reviews</a>, <a href='http://hackaday.com/category/robots-hacks/'>robots hacks</a>, <a href='http://hackaday.com/category/toy-hacks/'>toy hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/27491/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/27491/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/27491/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=27491&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/08/27/spy-video-trakr-first-impressions/feed/</wfw:commentRss>
		<slash:comments>65</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-window.jpg" medium="image">
			<media:title type="html">trakr-window</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-front.jpg" medium="image">
			<media:title type="html">trakr-box-front</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-back.jpg" medium="image">
			<media:title type="html">trakr-box-back</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-box-details.jpg" medium="image">
			<media:title type="html">trakr-box-details</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-packaging.jpg" medium="image">
			<media:title type="html">trakr-packaging</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-contents.jpg" medium="image">
			<media:title type="html">trakr-contents</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-front.jpg" medium="image">
			<media:title type="html">trakr-front</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-side.jpg" medium="image">
			<media:title type="html">trakr-side</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-back.jpg" medium="image">
			<media:title type="html">trakr-back</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-bottom.jpg" medium="image">
			<media:title type="html">trakr-bottom</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-sensors.jpg" medium="image">
			<media:title type="html">trakr-sensors</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-wheels.jpg" medium="image">
			<media:title type="html">trakr-wheels</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-ports.jpg" medium="image">
			<media:title type="html">trakr-ports</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-remote.jpg" medium="image">
			<media:title type="html">trakr-remote</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-remote-on.jpg" medium="image">
			<media:title type="html">trakr-remote-on</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-screen.jpg" medium="image">
			<media:title type="html">trakr-screen</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-night.jpg" medium="image">
			<media:title type="html">trakr-night</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-photo1.jpg" medium="image">
			<media:title type="html">trakr-photo1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-photo2.jpg" medium="image">
			<media:title type="html">trakr-photo2</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-web1.jpg" medium="image">
			<media:title type="html">trakr-web1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-web2.jpg" medium="image">
			<media:title type="html">trakr-web2</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-web3.jpg" medium="image">
			<media:title type="html">trakr-web3</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-web4.jpg" medium="image">
			<media:title type="html">trakr-web4</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-code.png" medium="image">
			<media:title type="html">trakr-code</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-window1.jpg" medium="image">
			<media:title type="html">trakr-window</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-opened.jpg" medium="image">
			<media:title type="html">trakr-opened</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-debug1.jpg" medium="image">
			<media:title type="html">trakr-debug1</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/trakr-debug2.jpg" medium="image">
			<media:title type="html">trakr-debug2</media:title>
		</media:content>
	</item>
		<item>
		<title>Behind the scenes of a 1K graphics demo</title>
		<link>http://hackaday.com/2010/08/08/behind-the-scenes-of-a-1k-graphics-demo/</link>
		<comments>http://hackaday.com/2010/08/08/behind-the-scenes-of-a-1k-graphics-demo/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 19:00:01 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[misc hacks]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[1K]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[demoscene]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=26950</guid>
		<description><![CDATA[Programmer/designer [Steven Wittens] has posted a fantastic write-up on the black art of producing compact demo code, dissecting his own entry in the 1K JavaScript Demo Contest. The goal is to produce the best JavaScript demo that can be expressed in 1024 characters or less and works reliably across all standards-compliant web browsers. [Wittens] details several techniques [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=26950&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-26957" title="1kdemo2" src="http://hackadaycom.files.wordpress.com/2010/08/1kdemo2.jpg" alt="" width="470" height="200" /></p>
<p>Programmer/designer [Steven Wittens] has posted a fantastic write-up on the <a href="http://acko.net/blog/js1k-demo-the-making-of">black art of producing compact demo code</a>, dissecting his own entry in the <a href="http://js1k.com/home">1K JavaScript Demo Contest</a>. The goal is to produce the best <a href="http://hackaday.com/2008/10/18/chrome-and-firefox-showing-javascript-improvements/">JavaScript</a> demo that can be expressed in 1024 characters or less and works reliably across all standards-compliant web browsers.</p>
<p>[Wittens] details several techniques for creating a lot of visual flash in very few bytes, including the use of <em>procedural graphics</em> rather than fixed datasets, exploiting <em>prime numbers</em> to avoid obvious repetitions in movement, and strategically <em>fudging</em> formulas to save space while adding visual interest. These methods are just as applicable to other memory-constrained situations, not just JavaScript — some of the contest entries bear a resemblance to the compact microcontroller demos we’ve <a href="http://hackaday.com/2010/05/01/phasor-av-pal-demo-uses-atmega88/">previously showcased</a>, except running in your browser window.</p>
<p>The contest runs through September 10th, allowing ample time to come up with something even more clever. Whether he wins or not, we think [Steven] deserves special merit on account of having one of the most stylish blogs in recent memory!</p>
<br />Filed under: <a href='http://hackaday.com/category/misc-hacks/'>misc hacks</a>, <a href='http://hackaday.com/category/software-development/'>Software Development</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/26950/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/26950/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/26950/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=26950&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/08/08/behind-the-scenes-of-a-1k-graphics-demo/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/1kdemo2.jpg" medium="image">
			<media:title type="html">1kdemo2</media:title>
		</media:content>
	</item>
		<item>
		<title>Cray-inspired PC case</title>
		<link>http://hackaday.com/2010/08/05/cray-inspired-pc-case/</link>
		<comments>http://hackaday.com/2010/08/05/cray-inspired-pc-case/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 16:00:39 +0000</pubDate>
		<dc:creator>Phil Burgess</dc:creator>
				<category><![CDATA[pcs hacks]]></category>
		<category><![CDATA[case]]></category>
		<category><![CDATA[casemod]]></category>
		<category><![CDATA[cray]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[supercomputer]]></category>

		<guid isPermaLink="false">http://hackaday.com/?p=26872</guid>
		<description><![CDATA[35 years following its introduction, and despite fewer than 100 systems deployed, the Cray-1 remains one of the most recognizable computers in history; it is a timeless icon of pure supercomputer badassery. Custom case builder [Daryl Brach] pays homage to this classic with his third-scale model housing two modern PC motherboards. In an interesting reversal, the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=26872&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-26873" title="minicray" src="http://hackadaycom.files.wordpress.com/2010/08/minicray.jpg" alt="" width="470" height="440" /></p>
<p>35 years following its introduction, and despite fewer than 100 systems deployed, the Cray-1 remains one of the most recognizable computers in history; it is a timeless icon of pure supercomputer badassery. Custom case builder [Daryl Brach] pays homage to this classic with his <a href="http://www.bit-tech.net/modding/case-mod/2010/07/28/cray-1-by-daryl-brach/1">third-scale model housing two modern PC motherboards</a>.</p>
<p>In an interesting reversal, the base of the model — the upholstered bench that housed cooling and power distribution for the original Cray — holds the PC motherboards and storage, while the upper section is currently just for show but may house a <a href="http://hackaday.com/2008/02/11/window-unit-turned-pc-water-cooler/">water cooling</a> rig in the future. The paint scheme is inspired by the Cray-1 on display at the Smithsonian, though Daryl’s model does make a few modern concessions such as <a href="http://hackaday.com/2010/02/28/extreme-piano-transplant/">LED</a> lighting. Hinged panels in the base flip open to access the systems’ optical drives (perhaps to watch <em>Tron</em> on DVD).</p>
<p>The Cray-1 ran at <a href="http://hackaday.com/2009/08/26/propeller-platform/">80 MHz</a> and could house up to eight megabytes of memory…just about unfathomable performance in its day. It’s not clear what processors [Daryl] chose to outfit his system with, but regardless, even an entry-level modern PC doesn’t just run <em>circles</em> around its progenitor, it runs <em>ray-traced glass spheres</em> around it. Technology marches on, but good design never goes out of style.</p>
<br />Filed under: <a href='http://hackaday.com/category/pcs-hacks/'>pcs hacks</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/hackadaycom.wordpress.com/26872/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/hackadaycom.wordpress.com/26872/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/hackadaycom.wordpress.com/26872/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=hackaday.com&amp;blog=4779443&amp;post=26872&amp;subd=hackadaycom&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://hackaday.com/2010/08/05/cray-inspired-pc-case/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">philburgess</media:title>
		</media:content>

		<media:content url="http://hackadaycom.files.wordpress.com/2010/08/minicray.jpg" medium="image">
			<media:title type="html">minicray</media:title>
		</media:content>
	</item>
	</channel>
</rss>
