Intel OTIS Robot Build With Pololu Robotics Parts
Part 2: Electronics
In Part 1 of this tutorial, we built up a rolling chassis for OTIS with motors and ball-casters from the Pololu product line. In Part 2, we’re going to cover a an approach to quickly building out the electronics used for the drive system of the robot. We’ll show how we built and tested the circuitry using a basic solderless breadboard.
Parts List Recap
To recap, we decided to see if we could build OTIS exclusively out of parts available from Pololu Robotics, as they are one of the best sources for robot parts on the Internet, and are very reliable and quick to ship parts on every order we have placed there. Hands down, if you’re trying to make a robot, Pololu is the place to start.
We were happy to find parts that fit the bill at Pololu. Here is our Bill of Materials (BOM):
- Wheels – 2 x Solarbotics GMPW-R Red Wheel (Many different colours are available depending on your intended paint scheme for OTIS)
- Ball Casters – 2 x Pololu Ball Caster with 1″ Plastic Ball (We used the Old Version because these casters seemed to line up properly with the bolt pattern in the base of the OTIS model)
- Motors – 2 x 120:1 Plastic Gear Motor, 90 Degree Output
- Motor Driver – 1 x TB6612FNG Dual Motor Driver Carrier (Handles two motors)
- Battery Holder – 1 x 4-AA Battery Holder (We initially started with a 3-AA battery holder, but the extra voltage from the 4th cell is definitely helpful for propelling OTIS, so we switched to 4 cells)
- Header Pins and Sockets – You will find it useful to have some pins and sockets that match the pitch of Arduino and the Motor controller. Grab a handful. You can cut or break them to the sizes you want.
- Small Breadboard or Protoboard – We started by temporarily wiring up to a small breadboard, and then once everything was working, we soldered down onto a protoboard.
- Assorted Wire, Etc. – If you don’t already have a bench with wires, tools, soldering, etc. that’s a bit of a different topic. We used some solid core, and some braided wire. There are lots of options and tutorials on stocking a bench. We’ll assume you’ve got those supplies.
The TB6612FNG Dual Motor Driver Carrier from Pololu is straight forward to wire up to an Arduino. You require the following connections:
- Power – The board can handle 4.5v – 13.5v. We initially started at 4.5v and decided that OTIS benefitted from a little more horsepower and added a 4th cell to move to 6v. The operating voltage for the 120:1 Plastic Gear Motor, 90 Degree Output from Pololu is actually 3-12V, so there is some headroom there in case you want to turbocharge OTIS in the future with more voltage, or even a 6-cell RC battery pack.
- Motors – Obviously, the output of the motor driver is the to 120:1 Plastic Gear Motor, 90 Degree Output gear motor boxes mounted on the chassis.
- Logic – The driver requires 1 x PWM-enabled + 2 x GPIO pins per motor in order to specify what direction to travel along with how fast to travel. We cover this below in more detail and explain how we connected the pins to the Arduino UNO.
TB6612FNG Pins and What They Do
- GND – Ground. Connected to the common ground of the system
- VCC – Power supply pin for the board. We end up using the output of the voltage regulator on the Arduino to provide this voltage.
- A01/02, B01/02 – These the the output pins that are connected to drive motor A and B.
- VMOT – Motor voltage. As noted, the motors specified in our BOM can handle up to 12v. This is where you connect your battery or other voltage source that will drive the motors. This should not be connected to the Arduino as the onboard regulators will not handle enough current to drive the motors.
- PWMA/PWMB – These pins are connected to PWM outputs on the Arduino and are used to control the speed of the motor rotation.
- AIN1/2, BIN1/2 – These are connected to GPIO pins on the Arduino and are used to specify the direction of the motor rotation for Motor A/B, or to put the controlled into “short brake” mode which basically holds motor position. You can see the truth table for how these are set in the Datasheet for the TB6612FNG.
- STBY – Standby pin. This basically turns the board on and off. In our case, we just hard-wired this to “on” but you could utilize it to provide a software kill switch or low power states.
For our first attempt, we set up our motor driver on a solderless breadboard. We thought it would be nice to be able to quickly modify things “just in case” it didn’t come together as planned.
We started with our power connections and moved outward. Our assumption was basically that the two rails on the breadboard would both be at VCC level provided by the Arduino regulator.
We also wired the STBY pin to the VCC rail to ensure the board was always “on”. As noted above, this could be wired to a pin to be able to turn the driver on and off, but we thought it probably wasn’t necessary for OTIS.
We used GND pins on either side of the board to tie together the negative rails on the breadboard. Don’t forget the red wire at the top tying together the + rails on either side of the board also, or else your STBY pin will not be energized and the board will be off!
The Motor Output pins A01/02 and B01/02 are connected to the terminals of the gear motors. We soldered the wires onto the motor side, and then plugged them into the breadboard. The polarity of the wiring is important, but not critical – you can always swap a logic pin if your motors end up rotating the wrong way, so don’t sweat it too much.
As we noted, initially, we started with a 3-cell battery holder with AA cells for a total of 4.5V. When we tested, OTIS was a bit sluggish, so we moved up to 4-cells shortly after. Really, anything above 3V will work – and the motors and controller will handle up to 12v, so you’ve got a lot of power options.
We ran the battery leads through a hole in the chassis and then soldered in some simple pin headers to allow us to plug them into the breadboard into VMOT and the GND pin right beside it.
Polarity Warning – Be careful with the pins. The pin headers have no form of polarity control. You need to ensure that + from your battery pack is going to VMOT, and – is going to GND.
Arduino Power and Logic Connections
As we noted above, the motor controllers require 3 pins per motor to control the direction and speed of the motors connected to the TB6612FNG.
- 2 x GPIO Pin Connections – Used to control the direction of the motor. You can see the truth table in the TB6612FNG Datasheet provided by Toshiba. The pins are used to control whether the motor will spin forward or backward, but also support features such as braking and hold, which you may want to explore further and leverage on your bot in the future.
- 1 x PWM Pin Connection – The PWM signal is essentially the “throttle” for the motor controlling how fast it will rotate from 0-100%.
In our build, we colour coded the wires to keep things straight, and then braided two sets of them together with enough length to run up to the upper deck of OTIS, as we intended to leave our motor controller down in the chassis:
Our convention was as follows:
- Orange = PWM Wire
- Green = Direction Pin 2
- Purple = Direction Pin 1
We also plugged in a couple of long jumper wires into the rail so that we would be able to run logic voltage and GND back up to the Arduino, as we powered the logic of our motor controller from the Arduino board itself:
Wiring connections to the Arduino are pictured above:
- Pin 2/3 Arduino = Motor 1 Logic Lines
- Pin 4/5 Arduino = Motor 2 Logic Lines
- Pin 9 Arduino = Motor 1 PWM Line
- Pin 10 Arduino = Motor 2 PWM Line
- +5V = Positive rail on breadboard down below
- GND = Negative rail on breadboard down below
At this point, you should be good to go! You can merge back into the main OTIS Tutorials from the Euclid Community Site. The hardware and wiring provided in this tutorial should be compatible out-of-the box with the remaining tutorials and code provided by Intel. In particular, we follow the same convention as the Intel Euclid Arduino Motor Control sketch which is the backbone for locomotion in most of the Euclid demos.