Home | Store | Showcase | Forums | Examples | Guides | Reviews | Support | Download | About Us

tinybot3.jpg (102945 bytes)
With Cover

TinyBot

tinybot4.jpg (47161 bytes)
Without Cover
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

tinybot14.JPG (59634 bytes)
Current Chassis Design

chargingjack.jpg (122777 bytes)
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. 

sensors1.jpg (137473 bytes) 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