Work seems to have taken over life, but I managed to get the final steps of this Arduino robot build worked out thanks to projects by other people. This version is known as the Simplebot since it uses @ajfisher's plans for the body. I'll resume the turtlebot with a 3D printed body. Here is the complete project for OSX Yosemite:

parts

I am usually anti-clone buying because I think it is important to fund the Arduino project by buying authentic products from authentic vendors. I decided to do this build using Chinese vendors to evaluate a lower cost alternative for folks that can't afford to pay full price for an arduino nano. If you believe in supporting the Arduino project like I do, and you can afford to pay a bit more, buy it from an approved distributor. Prices are approximate and include shipping and duties to me in Canada.

  • arduino nano $5
  • HC-05 or HC-06 bluetooth module $7
  • continuous rotation servo $15 for two. These are also called 360 degree servos. Plastic gear servos are cheaper and work just fine when compared to metal gear servos.
  • mini breadboard $3. You want to make sure this isn't too small as you need space for the arduino, the bluetooth module, the servo pins and extra room for upgrades!
  • body $10. Plans for the body from Nodebots AU are available here. For the body I used dibond (aka epanel) that I was getting cut for my 3D printer. The overall cost was much more, but pro-rated, my cost was $10. You can cut thick cardboard with a sharp blade or laser cut thin wood sheets to do the same. I have some spare dibond bodies here too, contact me for a price.
  • caster or smooth block Free. I had a caster sitting around at home. You want something smooth that will prop up the back end of the bot while it moves around. Around 40mm tall.
  • 6 AA battery holder $3. I bought this at a local electronic parts shop.
  • 6 AA batteries $6. For a total of 9 volts. From a local shop.
  • prototype wiring $4. You can also buy solid core wire as long as it is thin enough to fit in the breadboard holes.

total cost: $53

build

setup arduino

The version of the arduino that I used for this build uses a CH340 USB chip instead of the usual FTDI chip found on most previous arduino boards and their clones.

Drivers for Yosemite and other operating systems can be found on this site.

One thing to note on Yosemite - After you have installed the driver,run this on the command line:

sudo nvram boot-args="kext-dev-mode=1"

Restart your computer.

setup bluetooth

The Firmata software that we will eventually upload to the Arduino board runs at 57600 baud, so we will have to tell the bluetooth module to run at that rate too. We will use your Arduino board to change the baud rate of your Bluetooth module.

Connect the Bluetooth module to your Arduino like this:

Arduino and HC-05

Bluetooth to Arduino connections:

VCC to 5V
GND to GND
TXD to D10
RXD to D11

Hook the Arduino up to your computer with a USB cable and flash it with this script.

Open the serial monitor in the Arduino IDE. If you see the same message as shown below, you're ready for the next step.

Starting config  
OK  
OKlinvorV1.8  
OKsetPIN  
OKsetname  
OK57600  
Done!  

install firmata

Plug the arduino into your computer and upload the latest Firmata to it. Do this by opening the Arduino IDE and selecting Examples > Firmata > Standard Firmata. Upload it to your Arduino.

mount hardware to body

Use double sided tape, velcro, twist ties or wire to mount up the servos, battery pack and breadboard. Put wheels on your servos and put batteries in the battery pack.

Here is Andrew Fisher's video for assembling the SimpleBot.

Simplebot body

More Simplebot body

Still more Simplebot

wire everything up

Bluetooth: Hook the Bluetooth module up to your Arduino as shown below. It basically hooks up a serial connection between your computer and the Arduino, kind of like the USB cable would usually do.

Arduino Nano and HC-06

Bluetooth to Arduino connections:

VCC to 5V
GND to GND
TXD to RX
RXD to TX

Servos: Connect your two servos as shown.

Simplebot servos

Battery pack: Finally, connect your 9V battery pack with batteries to your breadboard. Just be careful not to short any bare wires on anything metal like the body, other components or any tools. I usually leave the ground wire of the battery pack detached from the board until I want to power up the robot. You might want to add a switch.

Your final circuit build should look something like this.

Completed Simplebot

This is my Simplebot all wired up and ready to go:

Simplebot completed

Another angle of Simplebot

One more angle of Simplebot

johnny-five

Now you are ready to talk to your robot. Power it up and you should see LEDs light up on the Bluetooth module as well as on the Arduino. If you don't smell any smoke, keep going!

You will need to have node.js running on your computer in order to use the Johnny-Five library.

Get an installer here.

Choose a project folder on your computer and go there. In the command line, type:

npm init

go through the prompts and then run:

npm install johnny-five

Create a file called index.js in your project folder with this code in it:

var five = require("johnny-five"),  
  keypress = require("keypress"),
  board;

  keypress(process.stdin);

  board = new five.Board({
    port : "/dev/tty.SimpleBot-DevB"
  });

board.on("ready", function() {

  var leftWheel = new five.Servo({
    pin : 11,
    type : "continuous"
  }).stop();
  var rightWheel = new five.Servo({
    pin : 12,
    type : "continuous"
  }).stop();

  process.stdin.resume();
  process.stdin.setEncoding("utf8");
  process.stdin.setRawMode(true);

  process.stdin.on("keypress", function(ch, key){
    if (!key) {
      console.log("returning");
      return;
    }
    switch (key.name) {
        case "up":
          console.log("forward");
          leftWheel.cw(0.25);
          rightWheel.ccw(0.25);
          break;
        case "down":
          console.log("back");
          leftWheel.ccw(0.25);
          rightWheel.cw(0.25);
          break;
        case "left":
          console.log("left");
          leftWheel.cw(0.05);
          rightWheel.ccw(0.25);
          break;
        case "right":
          console.log("right");
          leftWheel.cw(0.25);
          rightWheel.ccw(0.05);
          break;
        case "space":
          console.log("stop");
          leftWheel.stop(0.5);
          rightWheel.stop(0.5);
          break;
      }
  });


});

Save your file and then run it with:

node index.js

Use your arrow keys to drive the robot and the space bar to stop. That's it!

Definitely read the Johnny-Five repository and wiki for more information on what kind of things you can do. Add joystick control, a ping sensor for distance. Sky's the limit!