<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Robotics</title>
        <link>http://geekswithblogs.net/kobush/category/10322.aspx</link>
        <description>Robotics</description>
        <language>pl-PL</language>
        <copyright>Szymon Kobalczyk</copyright>
        <managingEditor>skobalczyk@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>.NET Micro Framework &amp;ndash; Using alphanumeric LCDs</title>
            <link>http://geekswithblogs.net/kobush/archive/2010/09/05/netmf_liquid_crystal.aspx</link>
            <description>&lt;p&gt;.NET Micro Framework includes reach graphics capabilities with WPF-like libraries, and quite a few high end development boards (&lt;a href="http://devicesolutions.net/Products/TahoeII.aspx"&gt;Tahoe II&lt;/a&gt;, &lt;a href="http://www.ghielectronics.com/product/125"&gt;ChipworkX&lt;/a&gt;, or &lt;a href="http://www.tinyclr.com/hardware/12/fez-cobra/"&gt;FEZ Cobra&lt;/a&gt; to name a few) include fancy graphic TFT screens, often with touch input thrown in as well. But this comes at a significantly higher costs, and requires a speedy CPU. Thus it might seem that if you are using a much cheaper board such as Netduino or one of FEZ family, you are doomed to rely on blinking LEDs only. Not quite so. In most scenarios an alphanumeric LCD might be a cheap alternative (or if you have higher budget you might consider using &lt;a href="http://www.microsofttranslator.com/bv.aspx?ref=Internal&amp;amp;from=ja&amp;amp;to=en&amp;amp;a=http%3a%2f%2fecrafts.g.hatena.ne.jp%2fLynx-EyED%2f20100821"&gt;an OLED screen that also works with Netduino&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/c4aab237777c_6D5E/_MG_1262_4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 3px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="LCD 16x2 display with Netduino" border="0" alt="alt" align="left" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/c4aab237777c_6D5E/_MG_1262_thumb_1.jpg" width="346" height="484" /&gt;&lt;/a&gt;For a larger project I’m working on I plan to use an alphanumeric LCD to display all sorts of status information. Practically all popular LCDs are controlled by a &lt;a href="http://www.sparkfun.com/datasheets/LCD/HD44780.pdf"&gt;HD44780&lt;/a&gt; compatible parallel interface chipset. There is wide range of these screens available in various combinations of backlight and text color. The common size is 16x2 characters (16 columns in 2 rows). Take a look at the &lt;a href="http://www.sparkfun.com/commerce/advanced_search_result.php?keywords=Character+LCD&amp;amp;search_section=products"&gt;wide selection of LCDs available from SparkFun&lt;/a&gt;. I got mine from local electronics store that has very cool looking combination white text on blue background.&lt;/p&gt;  &lt;p&gt;When you buy the LCD take notice if you get the 5V or 3V3 version. I’m sure both work fine with Netduino (which uses 3V3 logic) but make sure to wire them to correct power source pin.&lt;/p&gt;  &lt;p&gt;These LCDs are quite easy to wire and program. If you look at the above picture notice the 16pin header on top of the display. The &lt;strong&gt;HD44780&lt;/strong&gt; chipset uses parallel interface for data communication and supports 8bit and 4bit modes. In the former case it will use at least 10 digital output pins from the microcontroller, in the later at least 6. The R/W pin (read write) bit can be permanently wired to ground. You can find the &lt;a href="http://arduino.cc/en/Tutorial/LiquidCrystal"&gt;wiring instructions&lt;/a&gt; in the examples for the Arduino Liquid Crystal library – it will work the same way on the Netduino. To avoid soldering you can also try to use the &lt;a href="http://www.robotshop.com/dfrobot-lcd-keypad-shield-arduino-3.html"&gt;DFRobot LCD Keypad Shield for Arduino&lt;/a&gt;, and I learned via twitter that Mr. Kogoro Kotobuki (&lt;a href="http://twitter.com/kotobuki"&gt;@kotobuki&lt;/a&gt;), is designing a similar LCD shield that &lt;a href="http://www.microsofttranslator.com/bv.aspx?ref=Internal&amp;amp;from=&amp;amp;to=en&amp;amp;a=http%3a%2f%2fblog.goo.ne.jp%2fsim00%2fe%2f6945512c735f8648fb04e41e770d1554"&gt;appears to work great with Netduino&lt;/a&gt;. I was told it’s a prototype and not yet sold, but it looks very nice (see one more &lt;a href="http://www.flickr.com/photos/25323104@N00/4810450822/in/photostream/"&gt;photo&lt;/a&gt; and the &lt;a href="http://www.flickr.com/photos/25323104@N00/4808180438/in/photostream/"&gt;schematics&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;However if we take the direct approach, the LCD will use at least six of available digital pins. If you use a microcontroller that exposes a massive number of IO ports (like &lt;a href="http://www.tinyclr.com/hardware/14/fez-rhino/"&gt;FEZ Rhino&lt;/a&gt; or upcoming &lt;a href="http://www.tinyclr.com/forum/14/"&gt;FEZ Panda&lt;/a&gt;) this might be okay, but in case of &lt;a href="http://netduino.com/netduino/specs.htm"&gt;Netduino&lt;/a&gt; or similar board that has only a handful of digital pins this might be not suitable. In this case you might want to multiplex the output over fewer lines. In my previous post I already talked about using shift registers to work around such situation and in this case we can reduce the number of outputs to only three.&lt;/p&gt;  &lt;p&gt;Another alternative could be to buy a &lt;a href="http://www.sparkfun.com/commerce/advanced_search_result.php?keywords=serial+enabled+LCD&amp;amp;search_section=products"&gt;Serial Enabled LCD&lt;/a&gt;. Usually they include as special daughter board on the back (hence called a “backpack”) that has a MCU responsible for translating the UART communication to the interface of the LCD. So if you can sacrifice one of the UART ports on the Netduino this might be a good option, but they usually cost about $10 more than regular LCDs. You can also buy the serial backpack alone, for example the one from &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=258"&gt;Sparkfun&lt;/a&gt; or &lt;a href="http://www.moderndevice.com/products/lcd117-kit"&gt;the LCD117 Serial LCD Kit from Modern Devices&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For my project I will be using the same &lt;strong&gt;74HC595&lt;/strong&gt; shift register that I used in my earlier demo. &lt;a href="http://bansky.net/blog"&gt;Pavel Bánský&lt;/a&gt; already demonstrated how to do this on .NET Micro Framework devices. In &lt;a href="http://bansky.net/blog/2008/10/interfacing-lcd-with-3-wires-from-net-micro-framework"&gt;his first post&lt;/a&gt; he shows how to interface LCD with 3 wires using the 4094 shift register, and then in the &lt;a href="http://bansky.net/blog/2008/10/interfacing-lcd-using-i2c-port-extender/"&gt;second post&lt;/a&gt; he added support for an I&lt;sup&gt;2&lt;/sup&gt;C 8-bit port extender. I have modified and extended his library to include functionality available in the &lt;a href="http://arduino.cc/en/Reference/LiquidCrystal"&gt;Arduino LiquidCrystal library&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Pavel introduced a nice abstraction in his implementation to separate the LCD high level functions from underlying transport interface into separate classes. Thus the constructor of top level class &lt;strong&gt;LiquidCrystal&lt;/strong&gt; requires you to provide an instance of a class implementing the &lt;strong&gt;ILiquidCrystalTransferProvider &lt;/strong&gt;interface. This enables to use this library with all the methods of communication described above. In the source code you will already find an &lt;strong&gt;GpioLiquidCrystalTransferProvider &lt;/strong&gt;and &lt;strong&gt;Shifter74Hc595LiquidCrystalTransferProvider &lt;/strong&gt;for the &lt;strong&gt;74HC595&lt;/strong&gt; shift register. Later I’m going to add support for the I&lt;sup&gt;2&lt;/sup&gt;C port expander. I got a nice &lt;a href="http://shop.jeelabs.com/products/lcd-plug"&gt;LCD backpack from JeeLabs shop&lt;/a&gt; that uses the &lt;strong&gt;MCP23008&lt;/strong&gt; chip but I don’t know yet how much different it is from Pavel’s &lt;strong&gt;PCF8574P&lt;/strong&gt;. In preparation for this some common bit handling code is already abstracted in the &lt;strong&gt;BaseShifterLiquidCrystalTransferProvicer&lt;/strong&gt; class.&lt;/p&gt;  &lt;p&gt;Here you can see the wiring I used:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="title" border="0" alt="Wiring 16x2 LCD to Netduino via shift register" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/Windows-Live-Writer/c4aab237777c_6D5E/lcd_wiring_3.png" width="480" height="694" /&gt;&lt;/p&gt;  &lt;p&gt;Notice that because this time I’m going to use SPI interface the serial data is connected to pin 11 (MOSI) and pin clock is connected to pin 13 (SPCK). Pin 10 is connected to the latch pin, and in the code it is passed as Slave Select pin to the &lt;strong&gt;SPIConfiguration &lt;/strong&gt;object. Since we are going to use seven outputs from the shift register the one remaining output is connected via &lt;strong&gt;2N2222A transistor&lt;/strong&gt; to control the LCD backlight. This allows us to turn the backlight on or off from code. Finally the 10K potentiometer is used to control the display contrast.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/c4aab237777c_6D5E/_MG_1274_4.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px 2px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="_MG_1274" border="0" alt="_MG_1274" align="right" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/c4aab237777c_6D5E/_MG_1274_thumb_1.jpg" width="307" height="464" /&gt;&lt;/a&gt;Photo on the right shows the backpack I created for my LCD (I’ll cut the board later along the marked lines). Notice that because the board will be mounted “upside down” the outputs from the shift register to LCD are reversed, but it’s easy to correct it in the code (&lt;strong&gt;Shifter74Hc595LiquidCrystalTransferProvider&lt;/strong&gt; constructor has the optional BitOrder option).&lt;/p&gt;  &lt;p&gt;Below you can find a list of methods exposed by the &lt;strong&gt;LiquidCrystal &lt;/strong&gt;class:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Begin(columns, lines)&lt;/strong&gt; - Use this method to initialize the LCD. Specifies the dimensions (width and height) of the display. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Clear()&lt;/strong&gt; - Clears the LCD screen and positions the cursor in the upper-left corner. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Home()&lt;/strong&gt; - Positions the cursor in the upper-left of the LCD. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SetCursorPosition(column, row)&lt;/strong&gt; - Position the LCD cursor; that is, set the location at which subsequent text written to the LCD will be displayed. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ScrollDisplayLeft() &lt;/strong&gt;- Scrolls the contents of the display (text and cursor) one space to the left. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ScrollDisplayRight()&lt;/strong&gt; - Scrolls the contents of the display (text and cursor) one space to the right. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Write(text) - Writes a text to the LCD.&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Write(buffer, offset, count)&lt;/strong&gt; - Writes a specified number of bytes to the display using data from a buffer. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;WriteByte(data)&lt;/strong&gt; - Sends one data byte to the display. &lt;/li&gt;    &lt;li&gt;CreateChar(location, charmap) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And its properties:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Backlight &lt;/strong&gt;- Turns the LCD backlight on or off. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;BlinkCursor &lt;/strong&gt;- Display or hide the blinking block cursor at the position to which the next character will be written. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;ShowCursor &lt;/strong&gt;- Display or hide the LCD cursor: an underscore (line) at the position to which the next character will be written. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Visible &lt;/strong&gt;- Turns the LCD display on or off. This will restore the text (and cursor) that was on the display. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Encoding &lt;/strong&gt;- Get or set the encoding used to map the string into bytes codes that are sent LCD. UTF8 is used by default. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Finally let’s look at the sample code. Here is a simple “hello world” demo:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:300d2c8b-25cb-47b7-89c7-4f9be4b4704d" class="wlWriterEditableSmartContent"&gt;&lt;pre class="brush: c#;"&gt;public static void Main()
{
    // create the transfer provider
    var lcdProvider = new Shifter74Hc595LiquidCrystalTransferProvider(SPI_Devices.SPI1, 
        SecretLabs.NETMF.Hardware.Netduino.Pins.GPIO_PIN_D10);

    // create the LCD interface
    var lcd = new LiquidCrystal(lcdProvider);

    // set up the LCD's number of columns and rows: 
    lcd.Begin(16, 2);

    // Print a message to the LCD.
    lcd.Write("hello, world!");

    while (true)
    {
        // set the cursor to column 0, line 1
        lcd.SetCursorPosition(0, 1);

        // print the number of seconds since reset:
        lcd.Write((Utility.GetMachineTime().Ticks / 10000).ToString());

        Thread.Sleep(100);
    }
}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strike&gt;You can download the source code for this project below. Please keep in mind that not all functions are implemented yet, and some other are not tested.&lt;/strike&gt;&lt;/p&gt;
&lt;strong&gt;Update 2010-09-06: &lt;/strong&gt;Eric D. Burdo figured out how to use this library with LCD from &lt;a href="http://www.makershed.com/ProductDetails.asp?ProductCode=MKSP8"&gt;Seedstudio Electronic Brick Starter Kit&lt;/a&gt;. The connections were a little tricky but he shows the proper pin assignment for the GpioLiquidCrystalTransferProvider in &lt;a href="http://brick-labs.com/netduino/268/using-a-lcd-with-the-netduino/"&gt;his blog post&lt;/a&gt;. Thanks for sharing! 

&lt;p&gt;&lt;strong&gt;Update 2010-09-22: &lt;/strong&gt;The library is now available on CodePlex at &lt;a title="http://microliquidcrystal.codeplex.com/" href="http://microliquidcrystal.codeplex.com/"&gt;http://microliquidcrystal.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/kobush/aggbug/141633.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2010/09/05/netmf_liquid_crystal.aspx</guid>
            <pubDate>Sun, 05 Sep 2010 16:27:22 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/141633.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2010/09/05/netmf_liquid_crystal.aspx#feedback</comments>
            <slash:comments>11</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/141633.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/141633.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET Micro Framework – Netduino Controlled Servo Robot</title>
            <link>http://geekswithblogs.net/kobush/archive/2010/08/31/netduino-controlled-servo-robot.aspx</link>
            <description>&lt;p&gt;For my next project I decided to try to upgrade my SERB robot &lt;a href="http://geekswithblogs.net/kobush/archive/2009/07/06/133277.aspx"&gt;that I showed here last year&lt;/a&gt; to use Netduino. This robot was designed by great inventors from &lt;a href="http://oomlout.com/a/products/serb/"&gt;oomlout&lt;/a&gt; and you can buy it as a nicely packaged kit from them. However because the design is open source you can also &lt;a href="http://www.instructables.com/id/How-to-Make-an-Arduino-Controlled-Servo-Robot-SER/"&gt;download the project files&lt;/a&gt; and if you have access to a laser cutter order all the acrylic pieces there. It is also very easy to build following the &lt;a href="http://www.instructables.com/id/How-to-Make-an-Arduino-Controlled-Servo-Robot-SER/"&gt;instructable&lt;/a&gt; (you can find &lt;a href="http://cid-4c7ec0c2176a0b0d.skydrive.live.com/browse.aspx/Robots"&gt;few more photos from my build here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/78bdb1ec39a0_A7AC/_MG_1175_4.jpg"&gt;&lt;img title="Netduino Controlled Servo Robot" border="0" alt="Netduino Controlled Servo Robot" width="660" height="474" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/78bdb1ec39a0_A7AC/_MG_1175_thumb_1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The original SERB robot uses Arduino as its brain, so it was quick upgrade to Netduino thanks to the same form factor and pin layout. On the above photo you can see the Netduino is mounted on the back below the &lt;a href="http://www.adafruit.com/index.php?main_page=product_info&amp;amp;cPath=17_21&amp;amp;products_id=51"&gt;prototyping shield&lt;/a&gt;. Oomlout’s instructable suggests to use separate 9V battery for the board, but I found that it works just fine using only 4xAA batteries to power whole setup (Netduino, Servos and Xbee).&lt;/p&gt;
&lt;h2&gt;Robot drive system&lt;/h2&gt;
&lt;p&gt;The robot is driven by pair of continuous rotation servos. You can buy such servos from various hobby &lt;a href="http://www.parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/ProductID/102/List/1/Default.aspx?SortField=UnitCost,ProductName"&gt;electronics&lt;/a&gt; and &lt;a href="http://www.robotmarketplace.com/products/0-HRC31425CR.html"&gt;robotics&lt;/a&gt; shops, but most ordinary servos can be modified this way. Some require to remove potentiometer and &lt;a href="http://www.acroname.com/robotics/info/ideas/continuous/continuous.html"&gt;replace it with resistor divider&lt;/a&gt;, while with others you can &lt;a href="http://www.instructables.com/id/Modify-a-Futaba-S3001-servo-for-continuous-rotatio/"&gt;leave potentiometer in place&lt;/a&gt; but release it from rotating and hold it in centered position. You can do it even with &lt;a href="http://todbot.com/blog/2009/04/11/tiny-servos-as-continuous-rotation-gearmotors/"&gt;tiny servos&lt;/a&gt;. Either way you get a very cheap high torque reversible DC gearmotor. And the best part is that you can control it just as any other servo using PWM, with no need for additional motor driver circuits. Thus I could use the &lt;a href="http://forums.netduino.com/index.php?/topic/160-netduino-servo-class/page__p__953__hl__servo__fromsearch__1#entry953"&gt;Netduino Servo class&lt;/a&gt; that was already written by Chris Seto (I only adjusted the pulse range so it matches default values from &lt;a href="http://www.arduino.cc/playground/ComponentLib/Servo"&gt;Arduino Servo library&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But with all good said above, the one drawback with using a servo is that we don’t have a much control over it’s speed. For most values it will jump right to the max speed. I made few test measuring how far my robot would drive at various power levels (by setting servo from 0 to 90 degrees). As you can see on the graph below for values above 20 it will always drive at maximum speed. However for values from 0 to 16 the speed increase is almost linear thus in my code I’m scaling the speed values to this range. I’m also using a timer to ramp up the speed in smaller increments so the robot doesn’t accelerate or stop to fast. Please keep in mind that this works well with the particular model of servos I’m using (Futaba S3001) but you might need to adjust it for your robot.&lt;/p&gt;
&lt;p&gt;&lt;img title="image" border="0" alt="image" width="649" height="413" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/78bdb1ec39a0_A7AC/image_5.png" /&gt;&lt;/p&gt;
&lt;p&gt;I encapsulated the code used to drive the robot in the &lt;strong&gt;Serb&lt;/strong&gt; class located in the &lt;strong&gt;NetduinoSerbDemo &lt;/strong&gt;project. It controls both motors and provides helper classes for various commands. The class &lt;strong&gt;RandomTest&lt;/strong&gt; implements a simple random movement pattern using these commands.&lt;/p&gt;
&lt;h2&gt;Joystick&lt;/h2&gt;
&lt;p&gt;Now that we know that the basic drive operations work we can build some applications on top of it. Before we make the robot go around in full autonomous mode (which requires adding few more sensors so robot can navigate in its small world) lets drive it manually with remote control. It would be nice to have some kind of joystick for it, wouldn’t it? Sure you could use the &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9760."&gt;Sparkfun’s joystick shield&lt;/a&gt; (which you need to &lt;a href="http://forums.netduino.com/index.php?/topic/147-sfe-joystick-shield"&gt;modify a little bit&lt;/a&gt;). But since I don’t have one at hand for this project I’m going to use a Nintentdo Wii Nunchuck (besides oomlout uses the same in &lt;a href="http://www.instructables.com/id/How-to-Control-Your-Robot-Using-a-Wii-Nunchuck-an/"&gt;another instructable&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;You see, &lt;a href="http://wiibrew.org/wiki/Wiimote/Extension_Controllers"&gt;smart people found out&lt;/a&gt; that Nintendo accessories are communicating with Wiimotes using the I2C bus, so it’s quite easy to interface with them from the microcontroller once you know the protocol. There is also available a handy &lt;a href="http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/"&gt;adapter called WiiChuck&lt;/a&gt; that plugs directly to Arduino. In the end it’s a cheap way to get a good quality device with analog stick, two buttons and an accelerometer. I bought mine for under $10 – it’s not original but works just fine.&lt;/p&gt;
&lt;p&gt;The I2C pins on Netduino are in the same place as on Arduino (SDA on analog pin4, and  SCL on analog 5), but Arduino can be also set to provide required power on neighboring pins (analog pin 2 for ground, and analog pin 3 for +5V). It seems that this can’t be done on Netduino so I had to plug the adapter to the breadboard and wire it properly instead.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/78bdb1ec39a0_A7AC/_MG_1206_4.jpg"&gt;&lt;img title="_MG_1206" border="0" alt="_MG_1206" width="660" height="447" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/78bdb1ec39a0_A7AC/_MG_1206_thumb_1.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The second project called &lt;strong&gt;NetduinoSerbRemote &lt;/strong&gt;contains the &lt;strong&gt;WiiChuck &lt;/strong&gt;class with my implementation of .NET MF driver for Wii Nunchuck. It is based on the &lt;a href="http://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/"&gt;oryginal code by Tod E. Kurt&lt;/a&gt;, but I extended it with information found on WiiBrew, Arduino and other forums. For example it implements &lt;a href="http://web.archive.org/web/20080725180459/http://www.wiili.org/index.php/Motion_analysis"&gt;motion calculations&lt;/a&gt; to calibrate the accelerometer output (&lt;a href="http://oomlout.com/tmp/SERB_WiiNunChuckControl.txt"&gt;found in the oomlout version&lt;/a&gt;). It also has &lt;a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259091426"&gt;new I2C device initialization&lt;/a&gt; procedure that should disable encryption (this might improve compatibility with some wireless Nunchucks).&lt;/p&gt;
&lt;p&gt;After creating the WiiChuck instance, you simply call the &lt;strong&gt;GetData &lt;/strong&gt;method, and it will return &lt;strong&gt;true &lt;/strong&gt;if it succeeded, or &lt;strong&gt;false &lt;/strong&gt;otherwise.  Then you can get the extracted values from properties representing position of analog stick, buttons, and accelerometer. For the robot I’m simply mapping the joystick position to directly to speed and direction. Another mode is activated when you press and hold the Z button. Then it will use values from accelerometer instead of the joystick.&lt;/p&gt;
&lt;h2&gt;Remote control&lt;/h2&gt;
&lt;p&gt;Looking at the previous photos some of you might already guessed that I’m going to use XBee radios for communication from my remote to the robot. In fact this is the easiest way to add wireless communication between two microcontrollers. It uses serial ports, thus you only need to connect the corresponding UART pins to the radios to get it working.&lt;/p&gt;
&lt;p&gt;Note that there are several models of XBee modules on the market. Some provide many advanced capabilities including mesh networking. But if you are going to use them only to transmit data from one device to another you should get an older version now called XBee 802.15.4 (series 1) that can be easily configures for point-to-point networking. I got mine &lt;a href="http://www.adafruit.com/index.php?main_page=product_info&amp;amp;cPath=29&amp;amp;products_id=128"&gt;from Adafruit&lt;/a&gt; with corresponding &lt;a href="http://www.adafruit.com/index.php?main_page=product_info&amp;amp;cPath=29&amp;amp;products_id=126"&gt;adapters&lt;/a&gt; that make it easy to plug the module on breadboard or directly to the USB FTDI-TTL-232 cable. You can learn much more &lt;a href="http://www.ladyada.net/make/xbee/"&gt;from Lady Ada’s website&lt;/a&gt; and from Tom Igoe’s book &lt;a href="http://oreilly.com/catalog/9780596510510"&gt;Making Things Talk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this project I decided to use UART1 on both Netduinos, so I put a wire from Netduino digital pin 0 to TX pin on XBee, and from pin 1 to RX (and of course connected it to +5V and ground as well). For communication I adapted the simple protocol used in &lt;a href="http://www.instructables.com/id/How-to-Make-a-Web-Connected-Robot-for-about-500/"&gt;yet another instructable from oomlout&lt;/a&gt;. Each message begins with header ‘AAA’, followed by single letter command code, and optional parameter. Thus messages are always 5 bytes long. Here are currently implemented command codes:&lt;/p&gt;
&lt;div id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:6e2563ad-d2c7-4265-a6e0-aa9e2df33064" class="wlWriterEditableSmartContent" style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"&gt;
&lt;pre class="brush: c#;"&gt;
private static class Command
{
   public const char Unknown = '?';
   public const char Forward = 'F';
   public const char Backward = 'B';
   public const char Left = 'L';
   public const char Right = 'R';
   public const char SetPower = 'P';
   public const char Stop = 'S';
   public const char SetSpeedLeft = 'X';
   public const char SetSpeedRight = 'Y';
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;On the Netduino acting as the remote the values are read from Wii Nunchuck, mapped to &lt;strong&gt;SetSpeedLeft &lt;/strong&gt;and &lt;strong&gt;SetSpeedRight &lt;/strong&gt;commands, and send to serial port. On the other side the &lt;strong&gt;SerbRemoteClient &lt;/strong&gt;class parses incoming data, and interprets these commands accordingly. I hope the code will be easy to follow for everyone.&lt;/p&gt;
&lt;p&gt;The solution also contains a very simple WPF application that I used for testing. To use this app I connected one of the XBee modules to PC via with FTDI USB cable. The name and baud rate of the serial port can be set in the app.config file.&lt;/p&gt;
&lt;p&gt;Here is the source code for this project:&lt;/p&gt;
&lt;p&gt;&lt;iframe title="Preview" marginheight="0" src="http://cid-4c7ec0c2176a0b0d.office.live.com/embedicon.aspx/Blog/NetduinoSerb^_20100831.zip" frameborder="0" marginwidth="0" scrolling="no" style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;img src="http://geekswithblogs.net/kobush/aggbug/141569.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2010/08/31/netduino-controlled-servo-robot.aspx</guid>
            <pubDate>Tue, 31 Aug 2010 17:24:23 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/141569.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2010/08/31/netduino-controlled-servo-robot.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/141569.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/141569.aspx</trackback:ping>
        </item>
        <item>
            <title>First day with FEZ Mini Robot Kit</title>
            <link>http://geekswithblogs.net/kobush/archive/2010/02/25/138163.aspx</link>
            <description>&lt;p&gt;Yesterday I picked up a nice package from &lt;a href="http://www.tinyclr.com/"&gt;TinyCLR.com&lt;/a&gt;. Yes, it is yet another robot (third in fact), &lt;strong&gt;but this time&lt;/strong&gt; &lt;strong&gt;it runs .NET!&lt;/strong&gt; How freaking cool is that!&lt;/p&gt;
&lt;p&gt;&lt;img title="FEZ Mini Robot Kit" border="0" alt="FEZ Mini Robot Kit" width="660" height="500" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/FirstdaywithFEZMiniRobotKit_7C96/P1150656s_3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;This robot is controlled by &lt;a href="http://www.tinyclr.com/hardware/2/fez-mini/"&gt;FEZ Mini&lt;/a&gt; board that runs &lt;a href="http://www.microsoft.com/netmf/default.mspx"&gt;.NET Micro Framework&lt;/a&gt;. What’s interesting is that this board has pin-out compatible with &lt;a href="http://www.parallax.com/"&gt;Basic Stamp from Parallax&lt;/a&gt;. You can also uses it easily on a breadboard for prototyping (just like &lt;a href="http://www.ladyada.net/make/boarduino/"&gt;Boarduino&lt;/a&gt;). TinyCLR.com also offers a larger board called &lt;a href="http://www.tinyclr.com/hardware/1/fez-domino/"&gt;FEZ Domino&lt;/a&gt; that has pin-out compatible with &lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt; so you can use your existing shields. It is more expensive but notice that this board already includes microSD card reader and USB host connector. Both boards are based on &lt;a href="http://www.ghielectronics.com/products"&gt;USBizi chipset from GHI Electronics&lt;/a&gt; that in turns runs on 72Mhz NXP ARM processor.&lt;/p&gt;
&lt;p align="center"&gt;&lt;img title="FEZ Mini" alt="FEZ Mini" width="209" height="240" src="http://www.ghielectronics.com/images/extras/FEZ-Mini-large.jpg" /&gt;&lt;img title="FEZ Domino" alt="FEZ Domino" width="380" height="267" src="http://www.ghielectronics.com/images/extras/FEZ-Domino-large.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;But the huge thing for me is that I can program this robot in Visual Studio and benefit from all the debugging goodies (breakpoints, variable inspection, stepping, etc.).&lt;/p&gt;
&lt;p&gt;The robot kit itself comes from &lt;a href="http://www.inexglobal.com/"&gt;INEX Robotics&lt;/a&gt; – company that makes many interesting educational kits for robotics and electronics. Over there the robot kit is called &lt;a href="http://www.inexglobal.com/products.php?type=ROBOTKIT&amp;amp;cat=ROBOTKIT&amp;amp;model=popbot"&gt;POP-BOT&lt;/a&gt; and only difference is that it is controlled by Arduino compatible board. But you can also download the &lt;a href="http://www.inexglobal.com/downloads/POP-BOT_e_small.pdf"&gt;POP-BOT Manual&lt;/a&gt; that has 130 pages of many cool project ideas (line tracking, object avoiding, controlling servo motor, and serial LCD). I’m sure it will be lots of fun converting these projects to .NET Micro Framework.&lt;/p&gt;
&lt;p&gt;&lt;img title="FEZ Mini Robot" border="0" alt="FEZ Mini Robot" width="660" height="500" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/FirstdaywithFEZMiniRobotKit_7C96/P1150672_1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Two reflective sensors are included in the kit (useful for line following and edge detection projects), and you can order additional components both from &lt;a href="http://www.tinyclr.com/hardware/2/fez-mini/"&gt;TinyCLR.com&lt;/a&gt; and other robotics sites. Many construction parts are included in the kit so it is very easy to attach additional sensors or other parts. As you can see on the picture above, I already added a Sharp IR distance sensor in front (so I can teach the robot to not bump on walls). I also added an Xbee expansion board on the back so one day I can control the robot remotely (and my Holy Grail is to connect the robot to Microsoft Robotics Developer Studio).&lt;/p&gt;
&lt;p&gt;Here is a video of the robot running the default program:&lt;/p&gt;
&lt;p align="center"&gt;&lt;object width="610" height="458"&gt;
&lt;param value="true" name="allowfullscreen" /&gt;
&lt;param value="always" name="allowscriptaccess" /&gt;
&lt;param value="http://vimeo.com/moogaloop.swf?clip_id=9724631&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=01AAEA&amp;amp;fullscreen=1" name="movie" /&gt;&lt;embed width="610" height="458" allowscriptaccess="always" allowfullscreen="true" type="application/x-shockwave-flash" src="http://vimeo.com/moogaloop.swf?clip_id=9724631&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=01AAEA&amp;amp;fullscreen=1"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;And here is my little robot builder crew at work:&lt;/p&gt;
&lt;p&gt;&lt;img title="Antoś builds a robot" border="0" alt="Antoś builds a robot" width="660" height="492" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" src="http://geekswithblogs.net/images/geekswithblogs_net/kobush/WindowsLiveWriter/FirstdaywithFEZMiniRobotKit_7C96/P1150664%20(2)_3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Of course both FEZ Mini and FEZ Domino boards can be used not only for robotics, but also in many different applications. Go to the &lt;a href="http://tinyclr.com/"&gt;TinyCLR.com&lt;/a&gt; website and check out the Projects tab. For quick introduction to .NET MF you should also download the &lt;a href="http://www.tinyclr.com/downloads/Beginners%20guide%20to%20NETMF.pdf"&gt;Beginners Guide to C# and .NET Micro Framework&lt;/a&gt;, free ebook from Gus Issa.&lt;/p&gt;
&lt;p&gt;In my &lt;a href="http://geekswithblogs.net/kobush/archive/2010/01/04/137328.aspx"&gt;previous post&lt;/a&gt; I complained how upset I’m that there is no cheap .NET Micro Framework hardware for hobbyists. Now I can take it back. IMHO we finally have a very powerful alternative to Arduino and similar platforms, with the price that won’t break the bank (especially with FEZ Mini).&lt;/p&gt; &lt;img src="http://geekswithblogs.net/kobush/aggbug/138163.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2010/02/25/138163.aspx</guid>
            <pubDate>Thu, 25 Feb 2010 01:49:51 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/138163.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2010/02/25/138163.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/138163.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/138163.aspx</trackback:ping>
        </item>
        <item>
            <title>More fun with robots</title>
            <link>http://geekswithblogs.net/kobush/archive/2009/07/06/133277.aspx</link>
            <description>&lt;p&gt;Last Friday I’ve received new Futaba S3001 servos. Turns out they are more easier to modify to Hitec’s, and at the same seem more reliable. I’ve simply followed this &lt;a href="http://www.instructables.com/id/Modify_a_Futaba_S3001_servo_for_continuous_rotatio/" target="_blank"&gt;Instructable&lt;/a&gt;, and you can also find some &lt;a href="http://cid-4c7ec0c2176a0b0d.skydrive.live.com/browse.aspx/Robots" target="_blank"&gt;additional photos in my gallery&lt;/a&gt;. What most important the servos are also easier to calibrate, so now my SERB will actually stop in place when I want it. &lt;/p&gt;  &lt;p&gt;Below is a short video of the completed SERB robot where it just runs in random directions:&lt;/p&gt; &lt;object width="610" height="458"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5470356&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=01AAEA&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=5470356&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=01AAEA&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="610" height="458"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;This weekend I’ve also started looking at &lt;a href="http://www.microsoft.com/robotics/" target="_blank"&gt;Microsoft Robotics Development Studio 2008&lt;/a&gt;. This environment promises easy entry level to robotics. However this is true only when you have a compatible robotics platform (like Lego Mindstorms NXT, fishertechnik, iRobot and few others). There are pretty good tutorials on how to control these robots both from C# and from VPL. However before I can apply them to my SERB robot, first I need to implement the hardware interface and generic services to control the robot. Not much information on this and closest what I found so for is the &lt;a href="http://msdn.microsoft.com/en-us/library/bb483043.aspx" target="_blank"&gt;Robotics Tutorial 6 – Remotely Connected Robots&lt;/a&gt;. It would be cool to get more detailed example on writing such services, but fortunately source code of services for other robots is included. In particular I’m trying to understand the code for iRobot and &lt;a href="http://vexmsrs.codeplex.com/" target="_blank"&gt;this additional service for VEX Robotics&lt;/a&gt;. If you know of any other good examples or tutorials please let me know. &lt;/p&gt; &lt;img src="http://geekswithblogs.net/kobush/aggbug/133277.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2009/07/06/133277.aspx</guid>
            <pubDate>Mon, 06 Jul 2009 02:27:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/133277.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2009/07/06/133277.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/133277.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/133277.aspx</trackback:ping>
        </item>
        <item>
            <title>Building Arduino Controlled Servo Robot (SERB)</title>
            <link>http://geekswithblogs.net/kobush/archive/2009/07/02/133213.aspx</link>
            <description>&lt;p&gt;Few weeks ego we went to an exhibition in one of Kraków’s malls to celebrate the 100 year anniversary of robotics. Besides some nice exhibits there was also a place where kids could try to build a robot from &lt;a href="http://mindstorms.lego.com/eng/New_York_dest/default.aspx" target="_blank"&gt;Lego Mindstorms NXT&lt;/a&gt; and &lt;a href="http://www.robotshop.ca/fischertechnik-robot-construction-kits-2.html" target="_blank"&gt;Fishertechnik&lt;/a&gt; sets. We spent few hours there with my older son Jaś and even managed to build a walking robot.&lt;/p&gt;  &lt;p&gt;It was fun for both of us so I started looking if we could continue playing with robots at home. Unfortunately most of the sets I found are pretty expensive (starting at $200). This is where my good pal &lt;a href="http://geekswithblogs.net/Marks/Default.aspx" target="_blank"&gt;Marcin Książek&lt;/a&gt; turned me to the &lt;a href="http://www.arduino.cc/" target="_blank"&gt;Arduino electronic prototyping platform&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Arduino is really a simple and cheap microcontroller kit that can be easily connected to a PC and programmed. What makes it fun is that there are also many extensions that come as “shields” and adapters for the board and add capabilities such as &lt;a href="http://www.ladyada.net/make/xbee/arduino.html" target="_blank"&gt;XBee&lt;/a&gt; and &lt;a href="http://www.ladyada.net/make/eshield/" target="_blank"&gt;Ethernet&lt;/a&gt; communication, &lt;a href="http://www.physical-computing.nl/arduino/modules/accelerometer-shield" target="_blank"&gt;accelerometer&lt;/a&gt;, &lt;a href="http://www.ladyada.net/make/mshield/" target="_blank"&gt;DC motor control&lt;/a&gt;, &lt;a href="http://www.ladyada.net/make/gpsshield/" target="_blank"&gt;GPS&lt;/a&gt; or even a &lt;a href="http://www.coolcomponents.co.uk/catalog/product_info.php?products_id=187" target="_blank"&gt;touch LCD&lt;/a&gt;. The platform is open source so there are tons of information and fun projects on the web. Good place to start would be the &lt;a href="http://www.instructables.com/id/Arduino-Expermentation-Kit-How-to-get-Started-wi/" target="_blank"&gt;Arduino Experimentation Kit (ARDX)&lt;/a&gt; – you can buy the kit from &lt;a href="http://www.oomlout.co.uk/arduino-experimentation-kit-ardx-p-183.html?zenid=3c1tg3scids31j7mslu3kuhea3" target="_blank"&gt;oomlout&lt;/a&gt;, but it’s also open source so you can download all guides and buy the parts in your local electronics store yourself. I also enjoy reading the book “&lt;a href="http://oreilly.com/catalog/9780596155513/" target="_blank"&gt;Getting started with Arduino&lt;/a&gt;” by Massimo Banzi. And make sure to send the &lt;a href="http://www.instructables.com/id/Arduino_gift_guide_1/" target="_blank"&gt;Arduino gift guide&lt;/a&gt; to your relatives. There are even Arduino user groups such as &lt;a href="http://www.howduino.com/" target="_blank"&gt;Howduino in Liverpool&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;[In Poland you can buy Arduino from &lt;a href="http://nettigo.pl/" target="_blank"&gt;Nettigo&lt;/a&gt;]&lt;/p&gt;  &lt;p&gt;All of this makes Arduino a great basis for building a simple robot. And in fact there is already a project on Instructables that shows exactly &lt;a href="http://www.instructables.com/id/How_to_Make_an_Arduino_Controlled_Servo_Robot_SER/" target="_blank"&gt;How to build a Arduino Controlled Servo Robot&lt;/a&gt;. Again this project is open source so you can &lt;a href="http://www.makershed.com/ProductDetails.asp?ProductCode=MKOMT1" target="_blank"&gt;buy a kit from oomlout&lt;/a&gt; or download the blueprints and find all the parts yourself. The body of the robot is done from acrylic sheets and I found a local shop with a laser cutter that could cut the parts for me. Most of the other parts can be easily found in your local DIY store. &lt;/p&gt;  &lt;p&gt;One exception are the servo motors. Normal servos for RC models are constrained to movement in 180 degrees range, but what we need here is a “Continuous Rotation” servo. You can get one that was pre-modified such as &lt;a href="http://www.parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/txtSearch/900-00008/List/1/ProductID/102/Default.aspx?SortField=ProductName%2CProductName" target="_blank"&gt;Parallax&lt;/a&gt;, &lt;a href="http://www.robotshop.ca/gws-s35-std-continuous-rotation-servo-3.html" target="_blank"&gt;GWS S35&lt;/a&gt; or &lt;a href="http://www.robotshop.ca/hitec-hsr-1425cr-continuous-rotation-servo-1.html" target="_blank"&gt;Hitec HSR-1425CR&lt;/a&gt;. Another option is to modify the servo yourself, and there are also many instructions on how to do it on the web. I found that it’s really not hard to do, but you have to work a bit on the calibration. &lt;/p&gt;  &lt;p&gt;So having all the parts I could finally begin the assembly. Below you can see is a photo gallery where we build our first SERB robot. As you can see I’m one happy geek dad, because both kids were pretty interested with this. &lt;/p&gt; &lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 94px; padding-right: 0px; height: 94px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-4c7ec0c2176a0b0d.skydrive.live.com/embedgrid.aspx/Robots" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Right now the robot can’t do much besides running around in random directions, but I have some plans to make it smarter.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add remote control via Xbox pad or WiiMote. There is already a project showing how to &lt;a href="http://www.instructables.com/id/How_to_Make_a_Web_Connected_Robot_for_about_500/" target="_blank"&gt;use a netbook to control the robot via Skype&lt;/a&gt;. But being a .NET geek I would like to use &lt;a href="http://msdn.microsoft.com/en-us/robotics/default.aspx" target="_blank"&gt;Microsoft Robotics Studio&lt;/a&gt; for this. &lt;/li&gt;    &lt;li&gt;Add wireless connection with XBee so that robot can roam freely without cables the but still being controlled from the PC. &lt;/li&gt;    &lt;li&gt;Add some sensors so the robot gets more information from the world. I think first I would add bumpers to detect obstacles as &lt;a href="http://www.instructables.com/id/How_to_Add_Obstacle_Detecting_Whiskers_to_Your_Rob/" target="_blank"&gt;shown in this project&lt;/a&gt;. Later I might also add wheel encoders (such as &lt;a href="http://www.nubotics.com/products/ww01/index.html" target="_blank"&gt;Nubotics WheelWatcher&lt;/a&gt;) for odometry. &lt;/li&gt;    &lt;li&gt;Play with some AI algorithms. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So it looks like I already have found myself a summer project :-)&lt;/p&gt; &lt;img src="http://geekswithblogs.net/kobush/aggbug/133213.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Szymon Kobalczyk</dc:creator>
            <guid>http://geekswithblogs.net/kobush/archive/2009/07/02/133213.aspx</guid>
            <pubDate>Thu, 02 Jul 2009 00:05:25 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/kobush/comments/133213.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/kobush/archive/2009/07/02/133213.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/kobush/comments/commentRss/133213.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/kobush/services/trackbacks/133213.aspx</trackback:ping>
        </item>
    </channel>
</rss>
