The robot uses an arduino 101 as the main control board, but can be outfitted to use a raspberry pi or other micro computer. The board takes inputs in from the wheel encoders as well as from any periphery sensors attached, and outputs to the motor driver.
The motor driver was created from scratch and takes in an analog or digital voltage (with low current and voltage), and amplifies the signal for use on the motors.
The motors can turn at speeds dictated by the voltage then, and can change speed or direction based on what the control board outputs to it.
This project started as a way for the disabled or a telepresent person to interact with a whiteboard or chalkboard easily. Now, it is currently being used as a way for me to hone my programming abilities, sensor interaction, and general robotics.
First was to identify the materials needed, then design the frame around those parts. The parts list and project files can be found here, and the code ca be found here.
Then was to create the body, this was done using Autodesk Inventor and a 3D printer.
Then came the creation of the motor control board. After determining that the basic circuit in the orignal scematic (shown on the left) was not nearly enough to control the motors, I created a new board from scratch using a modified version of this circuit, taking in four data inputs of any voltage, amplifying them (to get a large voltage), then applying that voltage to the bases of two BJT's (one npn 2n2222, one pnp 2n2907 to achieve high current flow) so that the motor can turn forward and backwards.
Because the data in can only be between 0 and n volts (generally 3.3 or 5), the board divides it in half and sets the n/2 volts to be the ground state of the amplifier so that it can have + or - n/2 volts as an input, then amplify to + or - 9v. The new board (on the right) has this circuit applied four times (the number of motors, and the number of amplifiers on an LM324 chip).
From there comes the wiring and the addition of gearboxes to the motors so that they can convert the speed to torque (in the next set of pictures, the wiring had been completed, however gearboxes had yet to be ordered).
After this point, the robot sat for quite a while before being able to be picked up again, and was not in an operable mode without the gearboxes. It sat in a proof of concept.
After obtaining gearboxes and applying body modifications to where the motors were originally mounted, I added the gearboxes and combined wires into "ports." The axels also needed to be re-printed due to the new output shafts.
I then zip-tied the gearboxes in place and added the wheels and axels.
One battery, no controls
Both batteries, tele-operated controls via USB
Autonomous driving using preprogrammed commands
Some problems to solve in the near future are:
- Power - the current battery configuration does not provide enough current to effectively drive the motors at a reasonable speed
- Weight - the robot is currently too light to properly engage the wheels and provide traction
- Computing - driving with arduino does not give enough flexibility to expand and give more controls
- Sensors - the robot is currently blind and deaf and has no bearing on the outside world. Giving it sensors would enable it to interact more and be more useful
- Durability - the axels and gearboxes tend to slip, so they will need to be resdesigned and modified