<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Circuits@Home</title>
	
	<link>http://www.circuitsathome.com</link>
	<description>A Solder Joint</description>
	<lastBuildDate>Wed, 28 Jul 2010 20:45:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/chome" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="chome" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Arduino USB Host Mini – first prototype.</title>
		<link>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-first-prototype</link>
		<comments>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-first-prototype#comments</comments>
		<pubDate>Wed, 28 Jul 2010 20:45:00 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[USB Shield]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[mini]]></category>
		<category><![CDATA[pro]]></category>
		<category><![CDATA[PTP]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3706</guid>
		<description><![CDATA[<p class="wp-caption-text">First prototype of USB Host Mini</p>
<p>This is the status update on Arduino USB Host Mini development, announced 3 weeks ago. I received rev.0 PCBs last Saturday &#8211; BatchPCB is faster than ever! I made a test build (see title picture) and after fixing one major and several minor mistakes placed an order for what [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3707" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/UHS_mini_r0_proto.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/UHS_mini_r0_proto-288x216.jpg" alt="First prototype of USB Host Mini" title="First prototype of USB Host Mini" width="288" height="216" class="size-thumbnail wp-image-3707" /></a><p class="wp-caption-text">First prototype of USB Host Mini</p></div>
<p>This is the status update on Arduino USB Host Mini development, <a href="/mcu/programming/arduino-usb-host-mini-initial-revision">announced 3 weeks ago</a>. I received rev.0 PCBs last Saturday &#8211; BatchPCB is faster than ever! I made a test build (see title picture) and after fixing one major and several minor mistakes placed an order for what I&#8217;m hoping will be the final pre-production sample.</p>
<p>The prototype was built to sit on top of Arduino Pro Mini to make access to the parts easier during troubleshooting. On the final board USB connector is placed slightly further away from the pins; it will be possible to place Arduino on top of the shield so that the height of the &#8220;sandwich&#8221; will be less or equal to the height of USB connector.</p>
<p>In 2-3 weeks I&#8217;m hoping to finalize the design and start producing the USB Host Mini. Stay tuned!</p>
<p>Oleg. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-first-prototype/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controlling robotic arm with Arduino and USB mouse</title>
		<link>http://www.circuitsathome.com/mcu/programming/controlling-robotic-arm-with-arduino-and-usb-mouse</link>
		<comments>http://www.circuitsathome.com/mcu/programming/controlling-robotic-arm-with-arduino-and-usb-mouse#comments</comments>
		<pubDate>Sat, 17 Jul 2010 02:14:13 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[USB Shield]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[inverse]]></category>
		<category><![CDATA[kinematics]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[robotic]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3656</guid>
		<description><![CDATA[<p>Many people asked me to post a video showing an arm from inverse kinematics article in action. While making a video, I realized that shots of the arm following a pattern of computer-generated coordinates is going to be less than exciting and decided to add manual control. The video below shows the result. In addition [...]]]></description>
			<content:encoded><![CDATA[<p>Many people asked me to post a video showing an <a href="/mcu/programming/robotic-arm-inverse-kinematics-on-arduino">arm from inverse kinematics article</a> in action. While making a video, I realized that shots of the arm following a pattern of computer-generated coordinates is going to be less than exciting and decided to add manual control. The video below shows the result. In addition to the video, a <a href="/communicating-arduino-with-hid-devices-part-1">HID introductory page</a> has been written describing HID communication basics as well as some simple Arduino code. Enjoy! ( <a href="http://www.youtube.com/watch?v=nz_tgDD8FNw">Youtube link</a>, where HD quality video can be selected ).</p>
<p><a href="http://github.com/felis/USB_Host_Shield/blob/master/examples/arm_mouse.pde">Arduino sketch written for this video</a> is on gitHub.</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/nz_tgDD8FNw&amp;hl=en_US&amp;fs=1?rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/nz_tgDD8FNw&amp;hl=en_US&amp;fs=1?rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/controlling-robotic-arm-with-arduino-and-usb-mouse/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arduino USB Host Mini – initial revision</title>
		<link>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-initial-revision</link>
		<comments>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-initial-revision#comments</comments>
		<pubDate>Thu, 08 Jul 2010 12:00:45 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[USB Shield]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[mini]]></category>
		<category><![CDATA[pro]]></category>
		<category><![CDATA[PTP]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3633</guid>
		<description><![CDATA[<p class="wp-caption-text">USB Host mini rev.0</p>
<p>This post announces starting of development of new Arduino USB Host Shield variant. There are several projects in the works (thanks, guys for letting me know!), where standard size Arduino board is too big. Since electronics of USB Host Shield is pretty simple, it was decided to shrink the board as [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3632" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/UHS_mini_r0.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/UHS_mini_r0-288x216.jpg" alt="USB Host mini rev.0" title="UHS_mini_r0" width="288" height="216" class="size-thumbnail wp-image-3632" /></a><p class="wp-caption-text">USB Host mini rev.0</p></div>
<p>This post announces starting of development of new Arduino USB Host Shield variant. There are several projects in the works (thanks, guys for letting me know!), where standard size Arduino board is too big. Since electronics of USB Host Shield is pretty simple, it was decided to shrink the board as much as possible. Here is the first iteration.</p>
<p>The initial revision of USB Host Shield in Mini form factor is shown on title picture, It is intended to be used with Sparkfun&#8217;s <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9220">3.3V Arduino Pro Mini</a>. Intended applications include digital camera control devices, robots, as well as any other projects where size and weight has to be minimized. The Gerbers was sent to BatchPCB; I&#8217;m expecting boards back in couple of weeks. The main goals of this first prototype are manufacturability check as well as checking claims made below.</p>
<p>The Mini Host is simplified version of full-sized shield; only USB and GPIO are available. By default, VBUS is routed to VCC, therefore only self-powered USB devices are expected to function (even though I have at least one USB flash drive which works fine powered from 3.3V VBUS). I also provided extra pads to simplify signal re-routing, however, since there was no place left for jumpers a trace has to be cut instead.  The same has been arranged for VBUS &#8211; if 5V power is necessary, Arduino Pro Mini/Shield combination can be powered with 5V on RAW pin, the VCC trace cut off VBUS and RAW and VBUS connected.</p>
<p>As soon as first prototype is tested, I will post CAD files and also make boards available at BatchPCB. Stay tuned!</p>
<p>Oleg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/arduino-usb-host-mini-initial-revision/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Towards an FT232 Driver for the USB Host Shield- Part 0</title>
		<link>http://www.circuitsathome.com/mcu/towards-an-ft232-driver-for-the-usb-host-shield-part-0</link>
		<comments>http://www.circuitsathome.com/mcu/towards-an-ft232-driver-for-the-usb-host-shield-part-0#comments</comments>
		<pubDate>Sat, 03 Jul 2010 16:16:15 +0000</pubDate>
		<dc:creator>I-Bot</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[USB Shield]]></category>
		<category><![CDATA[FT232]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[MAX3421E]]></category>
		<category><![CDATA[shield]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3581</guid>
		<description><![CDATA[<p class="wp-caption-text">FTDI232RL IC on a breakout board</p>
<p>Based on some discussion on the Arduino Forum, Richard has added this blog entry as work in progress on developing a library to support FTDI Serial port devices on the USB Host Shield. While cautious to publish at this early testing stage, the content here should help parallel developers.</p>
<p>My [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3611" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/ftdi232_01.jpg"><img src="/wp/wp-content/uploads/ftdi232_01-288x216.jpg" alt="FTDI232RL IC on a breakout board" width="288" height="216" class="size-thumbnail wp-image-3611" /></a><p class="wp-caption-text">FTDI232RL IC on a breakout board</p></div>
<p>Based on some discussion on the Arduino Forum, Richard has added this blog entry as work in progress on developing a library to support FTDI Serial port devices on the USB Host Shield. While cautious to publish at this early testing stage, the content here should help parallel developers.</p>
<p>My thoughts last year were that an FT232 driver for the Host Shield was not really useful. It seemed rather reverse to add a USB host plus a USB device to achieve something that can be done with a piece of wire. However USB is coming to be the baseline interface and is now the only interface offered on many serial devices.</p>
<p><strong>USB Shield Hardware</strong><br />
Since my last blog update, Sparkfun have released their own version of the USB Host Shield. Great to have another source of the shield, with good stock at many International Sparkfun distributors. However they did add a couple of problems too:<br />
Sparkfun swapped the <strong>RESET</strong> and the <strong>GPX</strong> pins from the original from Oleg. This means the shield will not work with the libraries from Oleg without a modification.<br />
The current <em>Max3421e_constants.h</em> from Oleg has:<br />
<code><br />
/* Arduino pin definitions for USB Host Shield signals. They can be changed here or while calling constructor */<br />
#define MAX_SS 10<br />
#define MAX_INT 9<br />
//#define MAX_GPX 8<br />
#define MAX_RESET 7<br />
</code><br />
These work for the shield from Oleg, and existing published code and libraries without change.</p>
<p>However for the Sparkfun Shield they must be changed in <em>Max3421e_constants.h</em>, or optionally changed when the constructor is called to:</p>
<p><code><br />
#define MAX_SS 10<br />
#define MAX_INT 9<br />
//#define MAX_GPX 7<br />
#define MAX_RESET 8<br />
</code></p>
<p><span id="more-3581"></span></p>
<p>To add further complication, In the FTDI code I will describe below MAX_GPX is used, so must be uncommented in <em>Max3421e_constants.h</em> or added as a #define in the sketch. Again this should match the shield type as above.</p>
<p>The other common problem with the Sparkfun shield is that it is powered differently from the shield from Oleg. The Sparkfun Shield and the connected USB device is powered from Vin via voltage regulators. While the Arduino 5V and 3.3V supplies can be provided by either Vin or Vusb, Vin cannot be provided by Vusb. This means the Sparkfun shield must have an external Vin supply to work, while the shield from Oleg does not need this.</p>
<p><strong>Library Updates</strong><br />
There have been some library updated from Oleg over the last months to include a number of changes to support latest applications. The latest version from Oleg should be backward compatible to existing sketches and examples.<br />
Here again, I will propose another addtional change to the usb.h library. The reason for this is that the existing devices which have been used on the USB Host Shield, all returned either a known number of bytes during an in transfer, or the data bytes contained the length within the data itself. The FTDI device, does not do this and sends a variable length packet, without length indication within the data. Thus we need to pass the data length back to the sketch in some other way.<br />
To maintain backward compatibility I added an new version of the in transfer:<br />
In usb.h<br />
<code>byte inTransfern( byte addr, byte ep, unsigned int* nbytes, char* data, unsigned int nak_limit = USB_NAK_LIMIT );<br />
</code><br />
and in usb.cpp</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* Version with pointer to nbytes, to return actual number */</span>
<span style="color: #808080; font-style: italic;">/* IN transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */</span>
<span style="color: #808080; font-style: italic;">/* Keep sending INs and writes data to memory area pointed by 'data' */</span>
<span style="color: #808080; font-style: italic;">/* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
fe USB xfer timeout */</span>
byte USB<span style="color: #339933;">::</span><span style="color: #202020;">inTransfern</span><span style="color: #009900;">&#40;</span> byte addr<span style="color: #339933;">,</span> byte ep<span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span><span style="color: #339933;">*</span> nbytes<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> data<span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> nak_limit <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 byte rcode<span style="color: #339933;">;</span>
 byte pktsize<span style="color: #339933;">;</span>
 byte maxpktsize <span style="color: #339933;">=</span> devtable<span style="color: #009900;">&#91;</span> addr <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">epinfo</span><span style="color: #009900;">&#91;</span> ep <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">MaxPktSize</span><span style="color: #339933;">;</span>
 <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> xfrlen <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  regWr<span style="color: #009900;">&#40;</span> rHCTL<span style="color: #339933;">,</span> devtable<span style="color: #009900;">&#91;</span> addr <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">epinfo</span><span style="color: #009900;">&#91;</span> ep <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">rcvToggle</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//set toggle value</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// use a 'return' to exit this loop</span>
    rcode <span style="color: #339933;">=</span> dispatchPkt<span style="color: #009900;">&#40;</span> tokIN<span style="color: #339933;">,</span> ep<span style="color: #339933;">,</span> nak_limit <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//IN packet to EP-'endpoint'. Function takes care of NAKS.</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> rcode <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span> rcode <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//should be 0, indicating ACK. Else return error code.</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #808080; font-style: italic;">/* check for RCVDAVIRQ and generate error if not present */</span>
    <span style="color: #808080; font-style: italic;">/* the only case when absense of RCVDAVIRQ makes sense is when toggle error occured. Need to add handling for that */</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> regRd<span style="color: #009900;">&#40;</span> rHIRQ <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> bmRCVDAVIRQ <span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span> <span style="color: #208080;">0xf0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//receive error</span>
    <span style="color: #009900;">&#125;</span>
    pktsize <span style="color: #339933;">=</span> regRd<span style="color: #009900;">&#40;</span> rRCVBC <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//number of received bytes</span>
    data <span style="color: #339933;">=</span> bytesRd<span style="color: #009900;">&#40;</span> rRCVFIFO<span style="color: #339933;">,</span> pktsize<span style="color: #339933;">,</span> data <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    regWr<span style="color: #009900;">&#40;</span> rHIRQ<span style="color: #339933;">,</span> bmRCVDAVIRQ <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Clear the IRQ &amp;amp; free the buffer</span>
    xfrlen <span style="color: #339933;">+=</span> pktsize<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// add this packet's byte count to total transfer length</span>
    <span style="color: #808080; font-style: italic;">/* The transfer is complete under two conditions: */</span>
    <span style="color: #808080; font-style: italic;">/* 1. The device sent a short packet (L.T. maxPacketSize) */</span>
    <span style="color: #808080; font-style: italic;">/* 2. 'nbytes' have been transferred. */</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> pktsize <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>nbytes <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// have we transferred 'nbytes' bytes?</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> regRd<span style="color: #009900;">&#40;</span> rHRSL <span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> bmRCVTOGRD <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//save toggle value</span>
        devtable<span style="color: #009900;">&#91;</span> addr <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">epinfo</span><span style="color: #009900;">&#91;</span> ep <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">rcvToggle</span> <span style="color: #339933;">=</span> bmRCVTOG1<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        devtable<span style="color: #009900;">&#91;</span> addr <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">epinfo</span><span style="color: #009900;">&#91;</span> ep <span style="color: #009900;">&#93;</span>.<span style="color: #202020;">rcvToggle</span> <span style="color: #339933;">=</span> bmRCVTOG0<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #339933;">*</span>nbytes <span style="color: #339933;">=</span> xfrlen<span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//if (( pktsize = *nbytes ))...</span>
  <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//while( 1 )...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>FTDI FT232 devices</strong><br />
The FT232 range of devices from FTDI is now fairly large and quite a lot of data is available on the <a href="http://www.ftdichip.com/FTDocuments.htm">FTDI Website</a>.<br />
Further information was taken from linux driver sources and other USB Host sources.<br />
I did not get a chance to test devices other than the FT232B and FT232R at this time.</p>
<p><strong>Blocking vs. Unblocking code</strong><br />
The eventual objective is to create a version of the serial library which supports the FTDI Serial port over the USB Host Shield. The existing serial libraries allow for blocking code, especially when waiting for input. It was therefore decided to use interrupts to perform the regular tasks required for the USB protocol layers, so the FTDI libraries could appear identical to the existing serial drivers.</p>
<p>The MAX3421e MAX_GPX pin is set up to send a pulse output at the SOF rate of the USB (1 per ms) and this generates a pin change interrupt on the Arduino. This interrupt routine then performs the required USB tasks without need for the sketch to repeatedly call them. Some protection is also added to ensure that USB transactions generated outside the interrupt routine and any associated temporary data, are protected from the interrupt routines.</p>
<p><strong>Buffer Management</strong><br />
Seperate data buffers are created for the transmit and receive directions.<br />
The transmit buffer is filled by the calls to send a serial byte via the FTDI. If the buffer is filled by the byte the data is sent over the USB immediately, other wise it is sent at the next SOF interrupt.</p>
<p>Calls to read the receive buffer check for any characters locally, and return them if found. If there are no characters in the local buffer, a read is made to the remote FTDI device to check if any data is ready there. This process is to reduce the local buffer requirement. The first two bytes returned over USB are status bytes, not data, and these are also sent at regular intervals without data. I am not sure whether this is the best way to handle the receive buffers.</p>
<p>Code is <a href="http://github.com/ribbotson/USB-Host/tree/master/FTDI/">here on github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/towards-an-ft232-driver-for-the-usb-host-shield-part-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PTPDevinfo in 16K</title>
		<link>http://www.circuitsathome.com/mcu/programming/ptpdevinfo-in-16k</link>
		<comments>http://www.circuitsathome.com/mcu/programming/ptpdevinfo-in-16k#comments</comments>
		<pubDate>Mon, 28 Jun 2010 23:02:39 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[USB Shield]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[device]]></category>
		<category><![CDATA[digital]]></category>
		<category><![CDATA[getdevinfo]]></category>
		<category><![CDATA[host]]></category>
		<category><![CDATA[info]]></category>
		<category><![CDATA[PTP]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3573</guid>
		<description><![CDATA[<p class="wp-caption-text">Blue Arduino USB Host Shield tied to telephoto lens mount</p>
<p>Developer Si Li shared his version of PTPDevinfo.pde, which fits into older Aduinos. Si wanted to get PTP device information from Canon EOS 500D, but he only has 16K Seeduino at hand. So he stripped devinfoparser off all unnecessary strings leaving only ones essential for [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3572" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/blue_aus_telephoto.jpg"><img src="/wp/wp-content/uploads/blue_aus_telephoto-288x216.jpg" alt="Blue Arduino USB Host Shield tied to telephoto lens mount" title="Blue Arduino USB Host Shield tied to telephoto lens mount" width="288" height="216" class="size-thumbnail wp-image-3572" /></a><p class="wp-caption-text">Blue Arduino USB Host Shield tied to telephoto lens mount</p></div>
<p>Developer Si Li shared his version of PTPDevinfo.pde, which fits into older Aduinos. Si wanted to get PTP device information from Canon EOS 500D, but he only has 16K Seeduino at hand. So he stripped devinfoparser off all unnecessary strings leaving only ones essential for parsing Canon EOS camera device info.</p>
<p>The <a href="/chome_downloads/si_devinfoparser.zip">modified devinfoparser files</a> are available from &#8220;Downloads&#8221; section.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/ptpdevinfo-in-16k/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A reel of ADuM4160 ICs has arrived</title>
		<link>http://www.circuitsathome.com/news/a-reel-of-adum4160-ics-has-arrived</link>
		<comments>http://www.circuitsathome.com/news/a-reel-of-adum4160-ics-has-arrived#comments</comments>
		<pubDate>Fri, 14 May 2010 11:00:57 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Production]]></category>
		<category><![CDATA[Store]]></category>
		<category><![CDATA[adum4160]]></category>
		<category><![CDATA[isolator]]></category>
		<category><![CDATA[USB]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3380</guid>
		<description><![CDATA[<p><p class="wp-caption-text">A reel of ADuM4160s</p>
I&#8217;m pleased to announce that the long wait is finally over &#8211; I&#8217;m now in possession of a reel (this is 1000 pcs!) of ADuM4160 &#8211; the core chip of USB Isolator. I will be shipping back orders today and tomorrow &#8211; if you have ordered any of USB Isolator products [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_3393" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/adum4160_reel.jpg"><img src="/wp/wp-content/uploads/adum4160_reel-288x216.jpg" alt="A reel of ADuM4160s" title="adum4160_reel" width="288" height="216" class="size-thumbnail wp-image-3393" /></a><p class="wp-caption-text">A reel of ADuM4160s</p></div><br />
I&#8217;m pleased to announce that the long wait is finally over &#8211; I&#8217;m now in possession of a reel (this is 1000 pcs!) of ADuM4160 &#8211; the core chip of <a href="/mcu/usb/usb-isolator">USB Isolator</a>. I will be shipping back orders today and tomorrow &#8211; if you have ordered any of USB Isolator products from me in February, March, or April, and will not have gotten shipping notification by Monday, please contact me.</p>
<p>USB Isolators are <a href="/products-page/usb-interfaces">back in stock</a>. By popular demand, I also started selling ADuM4160 in single quantities &#8211; look in <a href="/products-page/components">components section</a> of the store.</p>
<p>On a side note, I received an e-mail from a company in Denmark offering ADuM4160-based USB Isolators in &#8220;complete&#8221; form &#8211; sporting a nice looking case and bus-powered supply for the peripheral side. I bought one yesterday to take a look. I&#8217;m going to write a review and, if I like it, start reselling it.</p>
<p>Oleg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/news/a-reel-of-adum4160-ics-has-arrived/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Robotic Arm Inverse Kinematics on Arduino</title>
		<link>http://www.circuitsathome.com/mcu/programming/robotic-arm-inverse-kinematics-on-arduino</link>
		<comments>http://www.circuitsathome.com/mcu/programming/robotic-arm-inverse-kinematics-on-arduino#comments</comments>
		<pubDate>Wed, 12 May 2010 12:00:47 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[inverse]]></category>
		<category><![CDATA[kinematics]]></category>
		<category><![CDATA[robotic]]></category>
		<category><![CDATA[servo]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3289</guid>
		<description><![CDATA[<p><p class="wp-caption-text">Lynxmotion AL5D robotic arm</p>
I&#8217;m proud owner of Lynxmotion AL5D robotic arm. The parts kit is of very high quality, and as a result, the arm is very strong and versatile. I wanted my arm to be portable and independent of big computers and all currently available controllers lack flexibility that I needed, therefore I [...]]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_3288" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/IK_title.jpg"><img src="/wp/wp-content/uploads/IK_title-288x216.jpg" alt="Lynxmotion AL5D robotic arm" title="Lynxmotion AL5D robotic arm" width="288" height="216" class="size-thumbnail wp-image-3288" /></a><p class="wp-caption-text">Lynxmotion AL5D robotic arm</p></div><br />
I&#8217;m proud owner of <a href="http://www.lynxmotion.com/Category.aspx?CategoryID=27">Lynxmotion AL5D robotic arm</a>. The parts kit is of very high quality, and as a result, the arm is very strong and versatile. I wanted my arm to be portable and independent of big computers and all currently available controllers lack flexibility that I needed, therefore I started building my own controller around Arduino platform. This article shows first preliminary result of this work &#8211; inverse kinematics code which would be used to position the arm.</p>
<p>In robotics, <a href="http://en.wikipedia.org/wiki/Inverse_kinematics">inverse kinematics</a> is a method to position a tip of some linked stricture in 3D space by calculating joint angles from tip X, Y, and Z coordinates. Much information about the subject exists on the web, for example,  this <a href="http://www.learnaboutrobots.com/inverseKinematics.htm">introductory article</a> explains the subject using simple trigonometry. </p>
<p>To move the arm, six servos need to be controlled ( five for the arm without wrist rotate ). Given that large amount of processing time would be spent calculating servo angles, I decided not to drive servos directly from Arduino pins and made simple servo shield using <a href="http://www.renbotics.com/products/servoshield.php">Renbotics</a> schematic and library code. I built only half of the circuit using single 4017 counter &#8211; this gives me seven servo control channels, which is plenty.</p>
<p>In addition to the article linked above, I&#8217;d like to mention two other resources, which helped me tremendously during code development. First is <a href="http://www.micromegacorp.com/appnotes.html">Micromega Application Note 44</a>, which shows inverse kinematics equations for similar arm. They also have nice video of working arm. It should be noted that gripper of AL5D arm has much simpler geometry, therefore second order polynomial calculations are not necessary. The second one is this <a href="http://www.lynxmotion.com/images/html/proj057.htm">Lynxmotion project page</a> with Excel spreadsheet. Many formulas from the spreadsheet were used in my code; I also used the spreadsheet during debugging after modifying arm dimensions.</p>
<p>Below is first working draft of inverse kinematics code. It can be used as-is or transformed into a library. As presented, it shall be used with caution &#8211; no boundary check is performed so it is quite easy to inadvertently send the arm flying into your forehead or the control board. The code uses single-precision floating point math, which seems to be adequate for the task. </p>
<p><span id="more-3289"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;ServoShield.h&gt;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Servo control for AL5D arm */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Arm dimensions( mm ) */</span>
<span style="color: #339933;">#define BASE_HGT 67.31      //base hight 2.65&quot;</span>
<span style="color: #339933;">#define HUMERUS 146.05      //shoulder-to-elbow &quot;bone&quot; 5.75&quot;</span>
<span style="color: #339933;">#define ULNA 187.325        //elbow-to-wrist &quot;bone&quot; 7.375&quot;   </span>
<span style="color: #339933;">#define GRIPPER 100.00          //gripper (incl.heavy duty wrist rotate mechanism) length 3.94&quot;</span>
&nbsp;
<span style="color: #339933;">#define ftl(x) ((x)&gt;=0?(long)((x)+0.5):(long)((x)-0.5))  //float to long conversion</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Servo names/numbers */</span>
<span style="color: #808080; font-style: italic;">/* Base servo HS-485HB */</span>
<span style="color: #339933;">#define BAS_SERVO 0</span>
<span style="color: #808080; font-style: italic;">/* Shoulder Servo HS-5745-MG */</span>
<span style="color: #339933;">#define SHL_SERVO 1</span>
<span style="color: #808080; font-style: italic;">/* Elbow Servo HS-5745-MG */</span>
<span style="color: #339933;">#define ELB_SERVO 2</span>
<span style="color: #808080; font-style: italic;">/* Wrist servo HS-645MG */</span>
<span style="color: #339933;">#define WRI_SERVO 3</span>
<span style="color: #808080; font-style: italic;">/* Wrist rotate servo HS-485HB */</span>
<span style="color: #339933;">#define WRO_SERVO 4</span>
<span style="color: #808080; font-style: italic;">/* Gripper servo HS-422 */</span>
<span style="color: #339933;">#define GRI_SERVO 5</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* pre-calculations */</span>
<span style="color: #993333;">float</span> hum_sq <span style="color: #339933;">=</span> HUMERUS<span style="color: #339933;">*</span>HUMERUS<span style="color: #339933;">;</span>
<span style="color: #993333;">float</span> uln_sq <span style="color: #339933;">=</span> ULNA<span style="color: #339933;">*</span>ULNA<span style="color: #339933;">;</span>
&nbsp;
ServoShield servos<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//ServoShield object</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> BAS_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">900</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2100</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> SHL_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2100</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> ELB_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">900</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2100</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> WRI_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2400</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> WRO_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2400</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setbounds</span><span style="color: #009900;">&#40;</span> GRI_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">600</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2400</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/**/</span>
  servos.<span style="color: #202020;">start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//Start the servo shield</span>
  servo_park<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">115200</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Start&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">500</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//zero_x();</span>
  <span style="color: #666666; font-style: italic;">//line();</span>
  circle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* arm positioning routine utilizing inverse kinematics */</span>
<span style="color: #808080; font-style: italic;">/* z is height, y is distance from base center out, x is side to side. y,z can only be positive */</span>
<span style="color: #666666; font-style: italic;">//void set_arm( uint16_t x, uint16_t y, uint16_t z, uint16_t grip_angle )</span>
<span style="color: #993333;">void</span> set_arm<span style="color: #009900;">&#40;</span> <span style="color: #993333;">float</span> x<span style="color: #339933;">,</span> <span style="color: #993333;">float</span> y<span style="color: #339933;">,</span> <span style="color: #993333;">float</span> z<span style="color: #339933;">,</span> <span style="color: #993333;">float</span> grip_angle_d <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">float</span> grip_angle_r <span style="color: #339933;">=</span> radians<span style="color: #009900;">&#40;</span> grip_angle_d <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">//grip angle in radians for use in calculations</span>
  <span style="color: #808080; font-style: italic;">/* Base angle and radial distance from x,y coordinates */</span>
  <span style="color: #993333;">float</span> bas_angle_r <span style="color: #339933;">=</span> atan2<span style="color: #009900;">&#40;</span> x<span style="color: #339933;">,</span> y <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> rdist <span style="color: #339933;">=</span> sqrt<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> x <span style="color: #339933;">*</span> x <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> y <span style="color: #339933;">*</span> y <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* rdist is y coordinate for the arm */</span>
  y <span style="color: #339933;">=</span> rdist<span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* Grip offsets calculated based on grip angle */</span>
  <span style="color: #993333;">float</span> grip_off_z <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> sin<span style="color: #009900;">&#40;</span> grip_angle_r <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> GRIPPER<span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> grip_off_y <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> cos<span style="color: #009900;">&#40;</span> grip_angle_r <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> GRIPPER<span style="color: #339933;">;</span> 
  <span style="color: #808080; font-style: italic;">/* Wrist position */</span>
  <span style="color: #993333;">float</span> wrist_z <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> z <span style="color: #339933;">-</span> grip_off_z <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> BASE_HGT<span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> wrist_y <span style="color: #339933;">=</span> y <span style="color: #339933;">-</span> grip_off_y<span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* Shoulder to wrist distance ( AKA sw ) */</span>
  <span style="color: #993333;">float</span> s_w <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> wrist_z <span style="color: #339933;">*</span> wrist_z <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> wrist_y <span style="color: #339933;">*</span> wrist_y <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> s_w_sqrt <span style="color: #339933;">=</span> sqrt<span style="color: #009900;">&#40;</span> s_w <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* s_w angle to ground */</span>
  <span style="color: #666666; font-style: italic;">//float a1 = atan2( wrist_y, wrist_z ); </span>
  <span style="color: #993333;">float</span> a1 <span style="color: #339933;">=</span> atan2<span style="color: #009900;">&#40;</span> wrist_z<span style="color: #339933;">,</span> wrist_y <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* s_w angle to humerus */</span>
  <span style="color: #993333;">float</span> a2 <span style="color: #339933;">=</span> acos<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> hum_sq <span style="color: #339933;">-</span> uln_sq <span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> s_w <span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">*</span> HUMERUS <span style="color: #339933;">*</span> s_w_sqrt <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* shoulder angle */</span>
  <span style="color: #993333;">float</span> shl_angle_r <span style="color: #339933;">=</span> a1 <span style="color: #339933;">+</span> a2<span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> shl_angle_d <span style="color: #339933;">=</span> degrees<span style="color: #009900;">&#40;</span> shl_angle_r <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #808080; font-style: italic;">/* elbow angle */</span>
  <span style="color: #993333;">float</span> elb_angle_r <span style="color: #339933;">=</span> acos<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> hum_sq <span style="color: #339933;">+</span> uln_sq <span style="color: #339933;">-</span> s_w <span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">2</span> <span style="color: #339933;">*</span> HUMERUS <span style="color: #339933;">*</span> ULNA <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> elb_angle_d <span style="color: #339933;">=</span> degrees<span style="color: #009900;">&#40;</span> elb_angle_r <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> elb_angle_dn <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span> <span style="color:#800080;">180.0</span> <span style="color: #339933;">-</span> elb_angle_d <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #808080; font-style: italic;">/* wrist angle */</span>
  <span style="color: #993333;">float</span> wri_angle_d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span> grip_angle_d <span style="color: #339933;">-</span> elb_angle_dn <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> shl_angle_d<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Servo pulses */</span>
  <span style="color: #993333;">float</span> bas_servopulse <span style="color: #339933;">=</span> <span style="color:#800080;">1500.0</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> degrees<span style="color: #009900;">&#40;</span> bas_angle_r <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color:#800080;">11.11</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> shl_servopulse <span style="color: #339933;">=</span> <span style="color:#800080;">1500.0</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> shl_angle_d <span style="color: #339933;">-</span> <span style="color:#800080;">90.0</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color:#800080;">6.6</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> elb_servopulse <span style="color: #339933;">=</span> <span style="color:#800080;">1500.0</span> <span style="color: #339933;">-</span>  <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span> elb_angle_d <span style="color: #339933;">-</span> <span style="color:#800080;">90.0</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color:#800080;">6.6</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">float</span> wri_servopulse <span style="color: #339933;">=</span> <span style="color: #0000dd;">1500</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> wri_angle_d  <span style="color: #339933;">*</span> <span style="color:#800080;">11.1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Set servos */</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> BAS_SERVO<span style="color: #339933;">,</span> ftl<span style="color: #009900;">&#40;</span> bas_servopulse <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> WRI_SERVO<span style="color: #339933;">,</span> ftl<span style="color: #009900;">&#40;</span> wri_servopulse <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> SHL_SERVO<span style="color: #339933;">,</span> ftl<span style="color: #009900;">&#40;</span> shl_servopulse <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> ELB_SERVO<span style="color: #339933;">,</span> ftl<span style="color: #009900;">&#40;</span> elb_servopulse <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* move servos to parking position */</span>
<span style="color: #993333;">void</span> servo_park<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> BAS_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">1715</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> SHL_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">2100</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> ELB_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">2100</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> WRI_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">1800</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> WRO_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">600</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  servos.<span style="color: #202020;">setposition</span><span style="color: #009900;">&#40;</span> GRI_SERVO<span style="color: #339933;">,</span> <span style="color: #0000dd;">900</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> zero_x<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> yaxis <span style="color: #339933;">=</span> <span style="color:#800080;">150.0</span><span style="color: #339933;">;</span> yaxis <span style="color: #339933;">&lt;</span> <span style="color:#800080;">356.0</span><span style="color: #339933;">;</span> yaxis <span style="color: #339933;">+=</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    set_arm<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> yaxis<span style="color: #339933;">,</span> <span style="color:#800080;">127.0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> yaxis <span style="color: #339933;">=</span> <span style="color:#800080;">356.0</span><span style="color: #339933;">;</span> yaxis <span style="color: #339933;">&gt;</span> <span style="color:#800080;">150.0</span><span style="color: #339933;">;</span> yaxis <span style="color: #339933;">-=</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    set_arm<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> yaxis<span style="color: #339933;">,</span> <span style="color:#800080;">127.0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* moves arm in a straight line */</span>
<span style="color: #993333;">void</span> line<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">double</span> xaxis <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color:#800080;">100.0</span><span style="color: #339933;">;</span> xaxis <span style="color: #339933;">&lt;</span> <span style="color:#800080;">100.0</span><span style="color: #339933;">;</span> xaxis <span style="color: #339933;">+=</span> <span style="color:#800080;">0.5</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      set_arm<span style="color: #009900;">&#40;</span> xaxis<span style="color: #339933;">,</span> <span style="color: #0000dd;">250</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">float</span> xaxis <span style="color: #339933;">=</span> <span style="color:#800080;">100.0</span><span style="color: #339933;">;</span> xaxis <span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span><span style="color:#800080;">100.0</span><span style="color: #339933;">;</span> xaxis <span style="color: #339933;">-=</span> <span style="color:#800080;">0.5</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      set_arm<span style="color: #009900;">&#40;</span> xaxis<span style="color: #339933;">,</span> <span style="color: #0000dd;">250</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">10</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> circle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #339933;">#define RADIUS 80.0</span>
  <span style="color: #666666; font-style: italic;">//float angle = 0;</span>
  <span style="color: #993333;">float</span> zaxis<span style="color: #339933;">,</span>yaxis<span style="color: #339933;">;</span>  
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">float</span> angle <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span> angle <span style="color: #339933;">&lt;</span> <span style="color:#800080;">360.0</span><span style="color: #339933;">;</span> angle <span style="color: #339933;">+=</span> <span style="color:#800080;">1.0</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      yaxis <span style="color: #339933;">=</span> RADIUS <span style="color: #339933;">*</span> sin<span style="color: #009900;">&#40;</span> radians<span style="color: #009900;">&#40;</span> angle <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">200</span><span style="color: #339933;">;</span>
      zaxis <span style="color: #339933;">=</span> RADIUS <span style="color: #339933;">*</span> cos<span style="color: #009900;">&#40;</span> radians<span style="color: #009900;">&#40;</span> angle <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">200</span><span style="color: #339933;">;</span>
      set_arm<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> yaxis<span style="color: #339933;">,</span> zaxis<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      delay<span style="color: #009900;">&#40;</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Here is a short description of the code. The coordinate space follows one in Micromega AN44. <strong>set_arm()</strong> takes 3 coordinates and grip angle and sets servo angles for base, elbow, shoulder and wrist. Arm dimensions are defined in millimeters at the beginning of the sketch. Three short functions are written to demonstrate the functionality. <strong>zero_x()</strong> moves the arm in a straight line along the y-axis, <strong>line()</strong> moves the arm side to side and <strong>circle()</strong> moves the arm in a circle in y-z plane. In all 3 functions, wrist angle is set to 0 degrees, it can be changed to some other value to make motion more interesting.</p>
<p>Resources mentioned before the code listing are very helpful in understanding the calculations and problem solving approach. If they are not enough, please don&#8217;t hesitate to ask questions. I will be posting my progress as more code is developed. Stay tuned.</p>
<p>Oleg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/robotic-arm-inverse-kinematics-on-arduino/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Magnetic Probe Amplifier. Final board design.</title>
		<link>http://www.circuitsathome.com/measurements/magnetic-probe-amplifier-final-board-design</link>
		<comments>http://www.circuitsathome.com/measurements/magnetic-probe-amplifier-final-board-design#comments</comments>
		<pubDate>Mon, 10 May 2010 21:50:46 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[DC-DC]]></category>
		<category><![CDATA[Measurements]]></category>
		<category><![CDATA[amplifier]]></category>
		<category><![CDATA[mag]]></category>
		<category><![CDATA[magnetic]]></category>
		<category><![CDATA[probe]]></category>
		<category><![CDATA[trigger]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3313</guid>
		<description><![CDATA[<p class="wp-caption-text">Magnetic probe amplifier connected to external trigger input</p>
<p>I made (hopefully) last iteration of magnetic probe amplifier board. Schematic remains the same. Layout, however, is slightly different. First, I made it more narrow to better fit Tektronix 7000-series time base plugins external trigger input, as can be seen on the title picture. Second, the amplified [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_3311" class="wp-caption alignright" style="width: 298px"><a href="/wp/wp-content/uploads/tpa2_title.jpg"><img src="/wp/wp-content/uploads/tpa2_title-288x216.jpg" alt="Magnetic probe amplifier connected to external trigger input" title="Magnetic probe amplifier connected to external trigger input" width="288" height="216" class="size-thumbnail wp-image-3311" /></a><p class="wp-caption-text">Magnetic probe amplifier connected to external trigger input</p></div>
<p>I made (hopefully) last iteration of <a href="/measurements/trigger-probe-amplifier">magnetic probe amplifier</a> board. Schematic remains the same. Layout, however, is slightly different. First, I made it more narrow to better fit Tektronix 7000-series time base plugins external trigger input, as can be seen on the title picture. Second, the amplified probe output is made via SMx type connector &#8211; PCB-mounted SMA and SMB all have the same footprint. I used straight SMB since I have a surplus of Tektronix P6041 cables. The board layout permits soldering right-angle connector here as well. This arrangement is much handier than previous one.</p>
<p>Since publishing initial design I haven&#8217;t seen much interest in it, so instead of ordering a bunch of PCBs I made this board <a href="http://www.batchpcb.com/index.php/Products/27182">available on BatcPCB Marketplace</a>. <a href="/chome_downloads/Mag_probe_amp_r1_0rc.zip">Schematic and board layout</a> in Eagle 5.x format are also available. I built one board and haven&#8217;t found any errors on copper or silkscreen &#8211; if you find any, please let me know.</p>
<p>Oleg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/measurements/magnetic-probe-amplifier-final-board-design/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital camera control from Arduino-hosted webpage</title>
		<link>http://www.circuitsathome.com/mcu/programming/digital-camera-control-from-arduino-hosted-webpage</link>
		<comments>http://www.circuitsathome.com/mcu/programming/digital-camera-control-from-arduino-hosted-webpage#comments</comments>
		<pubDate>Wed, 05 May 2010 23:23:20 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[MCU]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[wireless]]></category>
		<category><![CDATA[control]]></category>
		<category><![CDATA[digital camera]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[wishield]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3296</guid>
		<description><![CDATA[<p></p>
<p>I found this little video while looking for ideas for my digital camera controller. There is also project description and  summary page. Device consists of Arduino board mated with Asynclabs WiShield controlling shutter release of SLR camera via cable release port.  Arduino runs TCP/IP stack and Web server while access to pre-focus, time [...]]]></description>
			<content:encoded><![CDATA[<p><object width="660" height="405"><param name="movie" value="http://www.youtube.com/v/GbUsvdtd64o&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GbUsvdtd64o&#038;hl=en_US&#038;fs=1&#038;rel=0&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"></embed></object></p>
<p>I found this little video while looking for ideas for my digital camera controller. There is also <a href="http://svbreakaway.info/tp.php#cc">project description</a> and <a href="http://svbreakaway.info/tp-cc.php"> summary page</a>. Device consists of Arduino board mated with <a href="http://asynclabs.com/wiki/index.php?title=WiShield_2.0">Asynclabs WiShield</a> controlling shutter release of SLR camera via cable release port.  Arduino runs TCP/IP stack and Web server while access to pre-focus, time interval and other settings is done via web browser on an iPod. In addition, it is possible to release shutter using signal from proximity sensor or even set conditions based on states of different Arduino pins.</p>
<p>The web interface is well designed &#8211; watch this little movie and see it for yourself. There is also a <a href="http://svbreakaway.info/tp/cc/r.html">demo page</a>, where you can play with controller functions.  The &#8220;Adm&#8221; page is my favourite. I&#8217;m looking forward to see the code, which author is going to publish soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/mcu/programming/digital-camera-control-from-arduino-hosted-webpage/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sparkfun 2010 Autonomous Vehicle Competition</title>
		<link>http://www.circuitsathome.com/uncategorized/sparkfun-2010-autonomous-vehicle-competition</link>
		<comments>http://www.circuitsathome.com/uncategorized/sparkfun-2010-autonomous-vehicle-competition#comments</comments>
		<pubDate>Sun, 18 Apr 2010 02:38:36 +0000</pubDate>
		<dc:creator>oleg</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[autonomous]]></category>
		<category><![CDATA[avc]]></category>
		<category><![CDATA[competition]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[sparkfun]]></category>
		<category><![CDATA[vehicle]]></category>

		<guid isPermaLink="false">http://www.circuitsathome.com/?p=3227</guid>
		<description><![CDATA[<p>Despite less than perfect weather, this year&#8217;s AVC was a remarkable event. On land as well as in the air, several vehicles were able to finish 100% of the track. In addition, certain airplanes demonstrated autonomous takeoff and landing. The official event page and Twitter trend contain much information about the event; I just wanted [...]]]></description>
			<content:encoded><![CDATA[<p>Despite less than perfect weather, this year&#8217;s AVC was a remarkable event. On land as well as in the air, several vehicles were able to finish 100% of the track. In addition, certain airplanes demonstrated autonomous takeoff and landing. The <a href="http://www.sparkfun.com/commerce/news.php?id=349">official event page</a> and <a href="http://twitter.com/#search?q=sparkfunavc">Twitter trend</a> contain much information about the event; I just wanted to share several pictures that I&#8217;ve made while spectating. Enjoy,</p>
<p>Oleg.</p>
<div id="attachment_3236" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/tobor02.jpg"><img src="/wp/wp-content/uploads/tobor02.jpg" alt="Team Tobor, 1st on land" title="Team Tobor, 1st on land" width="1024" height="768" class="size-full wp-image-3236" /></a><p class="wp-caption-text">Team Tobor, 1st on land</p></div>
<p><span id="more-3227"></span></p>
<div id="attachment_3241" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/tobor01.jpg"><img src="/wp/wp-content/uploads/tobor01.jpg" alt="Team Tobor on the track" title="Team Tobor on the track" width="1024" height="768" class="size-full wp-image-3241" /></a><p class="wp-caption-text">Team Tobor on the track</p></div>
<div id="attachment_3244" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/robota03.jpg"><img src="/wp/wp-content/uploads/robota03.jpg" alt="Robota - first in the air" title="Robota - first in the air" width="1024" height="768" class="size-full wp-image-3244" /></a><p class="wp-caption-text">Robota - first in the air</p></div>
<div id="attachment_3247" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/robota02.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/robota02.jpg" alt="Robota in the air" title="Robota in the air" width="1024" height="768" class="size-full wp-image-3247" /></a><p class="wp-caption-text">Robota in the air</p></div>
<div id="attachment_3248" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/robota04.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/robota04.jpg" alt="Robota on land" title="Robota on land" width="1024" height="768" class="size-full wp-image-3248" /></a><p class="wp-caption-text">Robota on land</p></div>
<div id="attachment_3251" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/bonscott01.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/bonscott01.jpg" alt="Bon Scott - second place" title="Bon Scott - second place" width="1024" height="768" class="size-full wp-image-3251" /></a><p class="wp-caption-text">Bon Scott - second place</p></div>
<div id="attachment_3252" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/bonscott02.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/bonscott02.jpg" alt="Bon Scott racing" title="Bon Scott racing" width="1024" height="768" class="size-full wp-image-3252" /></a><p class="wp-caption-text">Bon Scott racing. Two GPSes are better than one :-)</p></div>
<div id="attachment_3256" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/dpt01.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/dpt01.jpg" alt="Death by Pine Tree (second place) launching" title="Death by Pine Tree (second place) launching" width="1024" height="768" class="size-full wp-image-3256" /></a><p class="wp-caption-text">Death by Pine Tree (second place) launching</p></div>
<div id="attachment_3259" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/dpt02.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/dpt02.jpg" alt="DPT Closeup" title="DPT Closeup" width="1024" height="768" class="size-full wp-image-3259" /></a><p class="wp-caption-text">DPT Closeup</p></div>
<div id="attachment_3260" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/teamoutocrusher_start.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/teamoutocrusher_start.jpg" alt="Team Auto Crusher - 3rd place" title="Team Auto Crusher - 3rd place" width="1024" height="768" class="size-full wp-image-3260" /></a><p class="wp-caption-text">Team Auto Crusher - 3rd place</p></div>
<div id="attachment_3261" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/teamoutocrusher_speeding.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/teamoutocrusher_speeding.jpg" alt="Auto Crusher speeding. The only vehicle completing the track all 3 times" title="Auto Crusher speeding. The only vehicle completing the track all 3 times" width="1024" height="768" class="size-full wp-image-3261" /></a><p class="wp-caption-text">Auto Crusher speeding. The only vehicle completing the track all 3 times</p></div>
<div id="attachment_3262" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/teamoutocrusher_finishing.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/teamoutocrusher_finishing.jpg" alt="On finish line" title="On finish line" width="1024" height="768" class="size-full wp-image-3262" /></a><p class="wp-caption-text">On finish line</p></div>
<div id="attachment_3265" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/uoa02.jpg"><img src="/wp/wp-content/uploads/uoa02.jpg" alt="University of Arizona Paparazzi in the air - 3rd place" title="University of Arizona Paparazzi in the air - 3rd place" width="1024" height="768" class="size-full wp-image-3265" /></a><p class="wp-caption-text">University of Arizona Paparazzi in the air - 3rd place</p></div>
<div id="attachment_3266" class="wp-caption aligncenter" style="width: 1034px"><a href="/wp/wp-content/uploads/uoa01.jpg"><img src="/wp/wp-content/uploads/uoa01.jpg" alt="Paparazzi performs autonomous landing" title="Paparazzi performs autonomous landing" width="1024" height="768" class="size-full wp-image-3266" /></a><p class="wp-caption-text">Paparazzi performs autonomous landing</p></div>
<div id="attachment_3270" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/elmo011.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/elmo011.jpg" alt="Autobanh - cute little thing made from kid&#039;s toys" title="Autobanh - cute little thing made from kid&#039;s toys" width="1024" height="768" class="size-full wp-image-3270" /></a><p class="wp-caption-text">Autobanh - cute little thing made from kid's toys</p></div>
<div id="attachment_3271" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/elmo04.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/elmo04.jpg" alt="Requires two people to control in manual mode" title="Requires two people to control in manual mode" width="1024" height="768" class="size-full wp-image-3271" /></a><p class="wp-caption-text">Requires two people to control in manual mode</p></div>
<div id="attachment_3272" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/elmo03.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/elmo03.jpg" alt="Cruising" title="Cruising" width="1024" height="768" class="size-full wp-image-3272" /></a><p class="wp-caption-text">Cruising</p></div>
<div id="attachment_3275" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/diydrones01.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/diydrones01.jpg" alt="DIY Drones - last year leader. 4th place this time" title="DIY Drones - last year leader. 4th place this time" width="1024" height="768" class="size-full wp-image-3275" /></a><p class="wp-caption-text">DIY Drones - last year leader. 4th place this time</p></div>
<div id="attachment_3276" class="wp-caption aligncenter" style="width: 1034px"><a href="https://www.circuitsathome.com/wp/wp-content/uploads/referees.jpg"><img src="https://www.circuitsathome.com/wp/wp-content/uploads/referees.jpg" alt="Referees" title="Referees" width="1024" height="768" class="size-full wp-image-3276" /></a><p class="wp-caption-text">Referees</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.circuitsathome.com/uncategorized/sparkfun-2010-autonomous-vehicle-competition/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.419 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-07-28 14:45:09 -->
