| Tinybot is my first attempt at a micro-scale
robot. While perusing ServoCity's
website, I found the smallest servos I've ever seen - The
Hitec HS-50 Sub-Micro "Feather". These tiny servos
inspired me to try using them as the drivetrain for an ultra small robot.
So TinyBot was born. Tiny measures in at 2-1/2" wide,
2-3/4" long and 1-1/4" tall.
This is the smallest bot I have built so far, but I
still think I can squeeze the size even further given a usable small motor
to drive it. I am very happy how it turned out, but it is slow as
molasses.
|
The Design
TinyBot is finally operational. I experimented with multiple designs
and made many changes to just about every aspect of the bot. The challenge
was power - batteries are not usually small and the ones that are obviously don't have
much capacity. I tried everything from an expense camera battery, to
a 3-cell cordless phone battery. The final solution that worked is a
4-cell pack designed from rectangular cell phone batteries with about
400mah capacity.
|
|

First Chassis Design

Current Chassis Design

Charging Jack
|
The Chassis
As usual, I'm working with polystyrene for the chassis. The dimensions
were kept at the absolute minimum. The first chassis design
incorporated a 6v camera battery. This worked very nicely, but the battery
just didn't have the power this bot would need. The servos pull a
whopping 150ma each at 4.8v, so I had to go with a much larger capacity
battery, which ended up on top of the chassis. I had room in the chassis
to freeform a SN754410 dual motor driver chip (see "Current Chassis
Design" on left). The chassis now contains everything needed
- the drivetrain, dual h-bridge, 4.8v rechargeable batter, on/off switch,
charging jack and microcontroller board. The
weight is now up to 4.5 oz.
|
The Drive Train
The drive train used by Tinybot utilizes the smallest known cased servos. The
Hitec HS-50 Sub-Micro "Feather". These tiny servos
were hacked in the usual method, but a little more carefully. The potentiometer
actually acts as the drive gear's axle. This made it necessary to hack the
potentiometer itself to allow for free turning. The resistor wiper and the
metal stops had to be removed from inside the potentiometer. Then a small
plastic tab needed to be clipped off the top part of the case. The
electronics were easily pulled and discarded. I will be driving the motors
with an SN754410 dual h-bridge instead of treating them like servos.
There are no screws in the servo case at all! It simply snaps together.
|

|
 |
The Sensors
To save power and since the bot is so slow, I
decided to use only 2 line sensors. Tinybot is able to easily track
a 3/4" line with to Optek 706A sensors setting about 5/8" apart
center-to-center. The logic is very simple:
|
Left Sensor |
Right Sensor |
Action |
|
Line |
Line |
Both Motors On |
|
Line |
No Line |
Right Motor On, Left
Motor Off |
|
No Line |
Line |
Left motor On, Right
Motor Off |
|
No Line |
No Line |
Make no Changes to
Motor State |
The sensors provide excellent visibility to the line
and the size was perfect for Tiny bot's minimal frame. I
use a 2x10 female right angle header to hold the sensors in place, which
let me experiment with different positions before settling on the spacing
you see in the picture |
| The Circuit
I am finishing the circuit schematic soon. I
made several changes to the first circuit that needs to be reflected on
the schematic.
I originally envisioned a circuit board sitting on
top of Tinybot, but when I changed the batteries I had a small amount of
room available to hold some of the electronics. A Mega8 could fit in
the space, but didn't allow for much else. Since I was looking at
needing 6 I/O lines for the motor control and 2 input lines for the
sensors, a Mega8 was overkill. I decided to forego some of the
functionality I had planned and use a 2313 microcontroller. The 2313
only has 1 PWM channel and no ADC, so there is only the simplest control
available. The 706A sensors swing wide enough that they achieve a
logical Hi or Low consistently. Steering is done by simply turning on or
off the motors as needed. With no way to adjust the motor speed, Tiny does
have a slight tendency to turn left. This is probably the result of one
motor turning in the opposite direction of the other, making it slightly
slower.
|
|
| |
|
|

|
The Program The
program is very simple. I think I'll add the ability to detect white line
or black line automatically in the future, but it isn't needed for the
Chibots line following contest which is always white line on black
surface. Bascom Source Code: (Click
here to download file) 'Tiny
Bot Version 2
'By Eddy Wright
'Wright Hobbies, LLC
'http://www.wrighthobbies.net
'Dimension Variables
Dim
Sensors As
Byte
'Used to hold a 2-bit
representation of the sensors
'Configure ports
Config
Portd.4
=
Input
Config
Portd.5
=
Input
Config
Portb
=
Output
'Turn on internal
pull-up resistors
Portd.4
=
1
Portd.5
=
1
'Set all output on
portB to low
Portb
=
0
'Create friendly
names for all ports
Leftenable Alias
Portb.1
Rightenable Alias
Portb.4
Leftin1 Alias
Portb.0
Leftin2 Alias
Portb.2
Rightin1 Alias
Portb.3
Rightin2 Alias
Portb.5
Leftsensor Alias
Pind.5
Rightsensor Alias
Pind.4
'Wait for 10 seconds
before starting up
Wait
10
'Turn on the Motors
Leftenable =
1
Leftin1 =
1
Leftin2 =
0
Rightenable =
1
Rightin1 =
0
Rightin2 =
1
'Main Loop
Do
'Check
sensor state and put into sensors var
Sensors =
Leftsensor
Sensors =
Sensors *
2
Sensors =
Sensors +
Rightsensor
'Using
a Select Case statement is overkill
'for
2 sensors but it greatly enhances the
'legibility
of the logic used and allows me
'to
add more sensors easily
Select
Case
Sensors
Case
&B00
'Over the line
Rightenable =
1
Leftenable =
1
Case
&B01
'Left sees line but
right doesn't
Rightenable =
1
Leftenable =
0
Case
&B10
'Right sees line but
left doesn't
Rightenable =
0
Leftenable =
1
Case
&B11
'Lost the line
'In
this case, make no changes
'Continue
in the direction prior to losing
'the
line
End
Select
Waitms
10
Loop |
|
|
|
|