Friday, April 20, 2012

Ongoing Arduino Stuff ...

I recently took some time to refactor my failed Arduino robot code with much better results than previously. I trashed all my old spaghetti C code and created a new motor controller class design, plus a new state machine to govern the behaviour of the thing! Here is a clip of it in action now:

Latest Robot Video

Also, just received my LinkSprite CuHead Wifi Arduino shield (clone of AsyncLabs shield). Already have it on a test arduino, creating a wireless adhoc network with a simple webserver that takes page get requests and performs beeping tone actions based on those requests. All silly fun for now, but eventually this shield will ride atop my robot and interface to the world! More later ...

Tuesday, December 20, 2011

A big career change!

After a seriously long time in software engineering, including five years in health informatics, consulting gigs, hard-core Windows consumer applications, amusement game development, and multimedia API toolkit work, I am about to begin a new chapter in my career development. At the beginning of the year, I am going to start a position with Microsoft, as a Software Development Engineer in Charlotte.

I am very excited about this opportunity, and rightfully nervous about it at the same time. It's going to be challenging I think, but I look forward to the work and meeting lots of interesting people. While I have certainly never been a fanboy, and sometimes encountered those frustrating moments while nose deep in Microsoft APIs ... I have to admit that they have released a tremendous amount of products, services, applications, tools, etc and certainly deserve to be where they are today. It will be an interesting experience to be on the inside and learning as much as I can in the process. I will do my best (as usual) to maintain my integrity and independence as much as I can, but I will learn and walk the Microsoft line and give it my all everyday!

Thanks Microsoft ... I will not let you down. Fanboy powers activate!

Saturday, May 29, 2010

Arduino Robots – A First Attempt!

Hey Arduinoists everywhere! I am proud to proclaim that I am now one of you!!

The Arduino hardware/software platform is awesome in so many ways and has made my job of entry level robot designer much easier! Let me add that I didn't have any prior experience with building robots. This project has helped me quite a bit to jump start the process. While I still have a lot to learn, I can say that I have very quickly acquired a pretty good base to continue building on. It’s exciting and fun! And so, this is the main reason I am posting this blog entry. Read on …

Making Robots
As I mentioned above, this is the first time I have ever attempted an electronics project of this complexity. I had built a simple timer circuit when I was younger, but not much beyond that. Having a casual interest in robotics for a while, I never felt like I had access to the right tools and tech to approach the subject until I heard about the Arduino microcontroller. I read a bit about what people were doing with them online, watched about a hundred Youtube “Hey I Made a Segway Arduino Robot” videos, and then ordered a few boards, sensors and other starter kit stuff. Once the orders arrived at my doorstep, I commenced to begin the basic exploration via the numerous examples available all over the web. Progressing through, blinking LED’s, onto LCD panel output, and then to the PING)) and Compass sensors.

Although I had a general idea in mind for the mechanical bits, I didn’t really know the best way to go with the microcontroller. My robot (i call it bot[Zero]) grew organically. I worked on particular example problems first and then started connecting parts later. Those boards and pieces of example sketches (Arduino programs) later became my current hardware/software prototype.botZero_drawing

Before I go into the details of this design and it’s construction, I want to make reference here of useful resources for beginning Arduino users:

http://arduino.cc ... the master site of the Arduino platform.

Retail websites I used for parts: MakerSHED , Hacktronics
NKC Electronics All Electronics Adafruit Pololu Robot Shop

Design and Construction
About how I first approached the design of this robot ... I didn’t really have a good plan in my head until after I finished a prototype board assembly with the PING and Compass sensors. Once I saw those numbers appear on the LCD panel I rigged, I immediately imagined using that data to steer a three-wheeled robot. Three wheels? Why three? Because, the steering assembly construction appeared to me to be much less complex for a single steering wheel. Plus, I wanted to build it by hand, instead of ordering some chassis kit and assembling that. Don’t get me wrong, those assembly kits seem like great ways to quickly get your project up and running mechanically. But for myself, I was just as interested in the mechanics as in the electronics and control software, so I decided on the tricycle platform for ease of construction.

Now onto the electronics! I will cover the most fundamental points first. At the heart of this design is a pair of Arduino Duemilanove microcontrollers, linked together by a simple serial connection. My robot could have been constructed with a single Arduino board, however, I wanted to make sure I had plenty of room for growth (servos, motors, and various sensors and other micro-peripherals) in the future. Also, I liked the idea of separating the platform into sensor data acquisition and motion control for a more componentized organization. The only problem here is, you can’t just *snap* two of these boards together to make a larger one. They both operate on separate clocks – therefore, I had to create a simple handshaking algorithm for data exchange between the two boards. This was not hard, as like most other things Arduino, there was a good example already on the Arduino site. I will cover the details of the serial communications and handshaking code in a later post, for now let me just say, cross the TX/RX lines and MAKE THAT COMMON GROUND!!

Boards, Sensors, Motors
Now looking at the two Arduinos used in this design, you can see the top most board on the robot is the sensor board. It is connected electrically to a PING))) ultrasonic sensor(ultrasonic echo location chip) and a Hitachi compass module(magnetometer chip). It takes samples from these chips for distance and direction. After each read from these sensors, the data is sent over the serial connection to the second Arduino, the motor control board.

The motor control board also has an Adafruit motor shield attached, which handles all motor and servo control. This motor shield came as a kit in a static bag with some 25+ parts (chips, resistors, capacitors, PCB, etc). I was happy to have successfully soldered the whole together, being that this was my first major small electronics soldering project. The motor shield is supplied an external 9.6 vdc Ni-MH supply that is used for motors control only, servos are still driven off the main onboard 9 vdc supply.The motor control board is also the main Arduino holding all the control logic which drives user switch input, sensor servo, speed and steering decision control.

The Almost Finished Robot!

botZero-imageAHere is bot[Zero], as it is right now … more mechanics refactoring is left for the near future, as I plan to install a front wheel encoder. I want to use this to measure distance traveled and experiment with dynamically constructing a presence map for navigational control. By that I mean, collect historical obstacle distance and heading samples and adjust those values over time based on position changes calculated from wheel encoder data.


Parts assembled on this robot:

2x Arduino Duemilanove
1x Adafruit Motorshield Kit
1x PING))) Ultrasonic Sensor
1x Hitachi HM55B Compass Module
1x Green LED
1x Mini single pole toggle switch (3-5A)
2x Small hobby servos (salvaged from my crap helicoptor)
1x Tamiya Double Gearbox Kit (70168)
2x Tamiya Narrow Tire Set 70145 (4 tires total)
1x Custom build steering fork assembly (found junk furniture caster and scrap aluminum)
1x 4" x 8" Thin sheet aluminum
1x PCB board (radio shack)
2x 9-volt battery holders
1x 9.6 volt NiMH rechargeable battery pack (purchased at local hobby shop)
1x Plastic Box (TB-3)

Complete source available here.