Let's Make Robots!

Working on a robot platform for various 'bot experiments

LeftBrain-RightBrain-Layout-Update25FEB12.jpg3.98 MB

A comment about popsicle sticks. <grins> They have become a tried and tested building material for robots.

Schrödinger is no exception. It is very hard to see as they are hidden, but if you look closely at the last picture at the bottom of the page, you may be able to see that the solar cells are not glued directly to the top-cover, but have 3 popsicle sticks as backing on each one. Because the solar cells are thin and glass, I wanted something to help strengthen and protect them, so each one was lined on the back with, --you guessed it, --the famous popsicle sticks. 

Last update: Updated the schematic. I had not finished drawing the solar charging circuit and needed to add the SpeakJet chip and Shrödinger's audio circuitry. Barring any glaring errors, I think that is Shrödinger's circuitry as built.

Schrödinger is now marked as complete.

Many of you know I had "emergency" cancer surgery recently.  What I might add is that this has left me drained of energy to continue working on this robot project, at least at this time. The doctors want me to do chemo-therapy, and if I do, it will continue for 6 months leaving me even less energetic than I am now...  I have decided to mark this robot project completed.

I hope what is here is enough to give people a few good ideas for their own robots. Over time I had added and changed the parameters and scope of this project to include more and more diversity, but Shrödinger, the robot, has already surpassed it original goals. It moves and avoid obstacles. It has "kid appeal" with its flashy-lights display and funky electronic voice. What I did not finish was the real-world mapping using a combination of sensors and the i²c memory chips. What is missing there is software only, as the sensors (visible-light "eyes" plus an infrared and two ultrasonics as well) and the i²c memory board with three memory chips are all in place. This was a more recent addition to the plan over and above the original scope of the project.

What I have planned now is to show this project complete as is, and if I should get energetic later on and work out the mapping software, I will just make that a new project page.  For now, with my low energy levels, I will do well to simply begin planning for a (possible) future 'walker' project.  If I get that planned out and begin the construction stages on it, I may be 'borrowing' (robbing) parts from Shrödinger (especially brain, batteries, the LCDuino readout board {made by PatrickMcCabe} and maybe the i²c memory board as well) for the walker.


Good luck to all of you on your own projects.



Previous Add: Was an updated schematic drawing. I still don't show the SpeakJet chip on this schematic, but I am certain I will be adding it under control of the Right Brain.

Previously Added:     I added a movie demonstrating the SpeakJet chip I have purchased to add a voice to the robot. I should have mentioned the little LCD unit that held Shrödinger's name and credited PatrickMcCabe on a job well-done in making that "LCDuino" board. It is run by an AtMega328 w/Arduino software, which displayed the text and flashed the one LED mounted on it temporarily. The LCD will not be a part of the Shrödinger project (at least no plans for that at this time). I have changed my mind several times as to what I was going to put on Shrödinger, so it is always possible it could end up on the robot as well at some point... --who knows? If I did, I would then have three brains present, two picaxe and one arduino, -all 28 pin types.


     Since all of you name your robots, I have named this robot Schrödinger.  (That was the name of one of the early proponents of Quantum Mechanics. --the "cat-in-the-box" guy.)

     I finally did a spinal cord / brain stem operation and have his head functions hooked up.  Still have to test them and if correct, I will seal up his skull. Ok, I never did seal his skull but left it accessable. I did, however, enclose his spinal cord wires in a protective but flexible covering.

     I've added a third video, to show a little led board I will stick on the robot somewhere.  I stated that I did not have the communications between brains worked out, but that is not totally true. Here is how I set that up:

The LEFT BRAIN sends numbers to the RIGHT BRAIN to tell what it is doing. RIGHT BRAIN absolutely refuses to be called a "slave" or to refer to LEFT BRAIN as its "master".  Don't tell him, but LEFT BRAIN is pretty much in control, at least of the i2c bus.

LEFT BRAIN sends status updates like: 1-scanning with IR,  2-object found with IR,  3-scanning with sonics,  4-object found with sonics,  5-object too close,  6-full stop,  7-backing away,  8-contemplating which way to turn,  9-quick scan,  10-turning,  11-forward,  12-bumper switch (interrupt),  13-light scan (eyes),  14-need more light (asking right brain to open covers or turn on headlights),  15-area too bright (asking right brain to close covers or turn off headlights), ...  and so forth. Then it marks the interrupt line high going to RIGHT BRAIN.

Over at the RIGHT BRAIN, it gets the interrupt and reads the first (status) byte from i2c memory.the RIGHT BRAIN, having less work to do, uses this input to adjust its "emotions", displays emotions via mouth LEDs, eye covers, switch on/off the headlights and this little LED (flashy lights) activity board, which uses patterns to display brain activities.  Once the RIGHT BRAIN has picked up the number(s) being sent from the LEFT, it stores a number of its own in the same memory slot. When LEFT BRAIN sees this number (%11111111) appear, it knows RIGHT BRAIN got the last status byte it sent (so it can send another). It stores the next status and switches its interrupt line to RIGHT BRAIN high, to interrupt RIGHT BRAIN and tell it, that it has another new status to read.

In some of the pictures, you see a coil of wires on the left front corner of the chassis that is earlier pictures of his "spinal cord" wires, used to connect the head functions (eyes, mouth, eye-covers & headlights) Those have been hooked up now. The wiring of the main board is done. The top-cover has the IR distance sensor with servo and two ultrasonic distance sensors. It also carries the solar cells for charging the main logic batteries, and a small board (underneath) with the charging circuitry as well. All that shows in the first video is head-turning & steering servos plus the drive motors.  Since that video was made, I got hold of better batteries and have much less problems with batteries going dead. I found out that one of the brand new NiMH batteries is bad. It does not hold a charge more than a couple minutes under load, even though the other three in that set are just fine. I got a second set, and a new motor driver battery and it runs fine without rapid brown-outs.

     For the full schematic as I have it drawn so far, see file attachment (JPG file).

     I feel like mentioning something about the price and project costs... The page where we list the robots asked for a monetary amount but that is still unknown. I already have spent about three hundred US dollars on it. I have about everything I need for this project now but if I think of something I would like better, the price could go up.  My basic budget is somewhere between a $5 toy and a multimillion dollar Mars Rover. --So I am well within my budget limits...!  As to how much time I have put into it, I have no clue about that, either.  I fiddle with it whenever I get free time, and being retired, I have quite a bit of that.  I just keep trying different things. My biggest problem was the programming.  On a complex robot like this, there were a lot of sub-routines, and problems getting them to work together.


Much earlier notes:

     Not long ago, I discovered the Picaxe chip(s) and am using those for this project. I currently have three PICAXE 28X2s (post-Dec.2010) available for this project, but may only use two in the robot itself.  Having lots of miscellaneous bits and pieces laying about, (from 40 years in electronics) and wanting to try out the Picaxe, I decided to make a "testbed" robot upon which I could mount various things and change them around at will.  Also, I generally visit one of my brothers every weekend and he has small children underfoot quite often, so I decided further that I should make it "Child Resistant". (Nothing is totally "Child Proof", after all.)  Consequently, most of the robot is metal construction. 

     While I have no movies of the project, but I do lots of photos.

     Collecting things that look like they want to be part of the robot platform project... Looks like I have enough to get started.  It is funny, but in this picture are some of the things I originally planned to use for this robot, and now that I look at the picture, I notice that less than half of them actually got used. I keep making changes.  Well, I did say it was a "platform" for experimentation...

     That motor controller board is actually part of what will be on the robot. It will be mounted directly above the main "brain board".

     Some people may wonder how I can work on such a "messy" desk... Here is a little (true) story you may find interesting:

     Years ago, when I was in an engineering deptartment, the head of the department (I'll call him "Pinhead") was always very neat. That is, his desk was always clear of everything. (No baskets; no telephone... just a bare desktop.) He would take out a letter or spec-sheet or proposal and stare at it for hours, before putting it away and getting out another.

     One day he came back to where I was working and commented, "Your desk is always cluttered. Don't you realize that a cluttered desk is the sign of a cluttered mind?"

     My immediate answer to him was, "...then thank goodness I don't have an empty desk!"

     "Pinhead" didn't get it. --Not sure he ever did. <grins>


     Yes, I think this will work...

     I got this old lathe when someone owed me $50 and asked if I would take the lathe as payment.  Not sure if my eyes lit up like beacons, but I know I felt like saying, "I might if you twist my arm and force me to take it." <grins> --Even an old lathe like this one would sell for hundreds, easy. Since that I have put a couple hundred in it, making it smoother and more accurate.

     Here (above) you can see one of the aluminium hub inserts with its bearings.

     Trying the mouth LEDs. I had to put in several diodes to make the different expressions, since some of the LEDs are used for multiple expressions. (Later changed the plastic piece holding them to a metal one, since the plastic one got melted a bit.)

     The motors have now been replaced, since the old ones were only strong enough to move the robot on flat terrain, --no bumps.

     I was not happy with the power of the first stepper motors, so I ordered new ones. (Sanyo B00224s, what I actually received was the upgraded version called the B00324) Running them at 10 volts, they seem to work fantastically (compared to the other ones.)


     I had already tested the new motors and unhooked the wires from this controller and the picaxe breadboard, when I thought of snapping this picture.

     Both the old motors and the new ones had shafts that were too long for the space in my chassis.  I had to (carefully) grind them down and sand off the ends so they didn't hit on the other motor when the suspension goes up and down on one side or the other. (and take care to not get any metal dust/filings in the motors.)

     The white "tie-rods" are pieces cut from cheap wire coat-hangers and bent into shape with needle-nosed pliers. Another odd bit; I planned this servo placement to be temporary, but it worked fine, so I just added a cable tie (aka tie-wrap) and locked it in place as is.

     Ok, after finding the wheels did not turn far enough, I decided to drill a couple new adjustment holes in the steering arms. (See next photo.)  The middle holes seem to give me what I want, but I may tweak the steering further after the controllers, batteries, and driver chips are mounted and I can actually test how it handles when sitting on its wheels.

     I put in place ten of the bright white LEDs (scavanged from an LED light bulb). I decided to mount them over the CdS eyes, since the cadmium sulfide sensors will need the help in low light conditions.  I am setting it up for 'medium' light conditions and adding headlights for dark places, and eye covers for too bright conditions. (I could always use a dual op-amp in a comparator circuit, but not sure that will be needed.)

     I'm using wires stripped from a telephone line cord between the brain compartment and the head because they were designed to flex back and forth thousands of times without breaking. Being fine strands wrapped around cord, they are a bit hard to work with (and solder to) but it can be done.

     I was going to mount eyebrows for kid-appeal, but after I decided to put the headlights above the eyes, I won't have room for the other two servos.

     I think I have decided the only place I can mount this unit is fixed on the front of the vehicle. It will only give reading for movement straight ahead... (and I can calibrate it with a reading on a "fixed" object, while the 'Bot is moving. Mostly the proximity detection will be done with the eyes and a ultra-sonic sensors. I also added an infrared sensor mounted on the "top cover" of the body (below the head).


     Have the mouth LEDs mounted on the metal replacement part and wired up.  Mounted it on the head soon after. Next I mounted the servos for the "dust covers" for the eyes. Next picture shows them hooked to the picaxe breadboard and being tested.

     The eye covers are working just the way I want them to. In case of light that is too bright, I can rotate them partially closed to limit incoming light, or if the light is too low, I can turn on the headlights (10 ultra-bright white-light LEDs)


     The SR-04 ultra-sonic sensor worked so well, I sent for another one.  Most people seem to be using "name brand" ones that cost much more, but these work fine and only cost $8.49 USD. I am starting to think that the number of sensors, lights and servos must always expand to use up all available I/O pins.  :-)

     I am still thinking of adding a gripper arm on the robot, but have not commited to that yet.  If I do, I could either forego adding the LED display matrix and that will give me 7 additional I/O pins, or else add a separate brain to control arm movement.  I already verified that servos will work just fine on any I/O pin if I use the PULSOUT command instead of the SERVO or SERVOPOS commands.

     Here is a list of my I/O's as I currently see them (Still trying to get these to all work together the best way. Doing a lot of programming and testing. I think this will do it.

V+                                                                              20                                        +5 volts
GND (0V)                                                                    19 & 8                                   0 volts
Output 0 (B.0)                                                              21                         0              Ultrasonic PING Left         (Output)
Output 1 (B.1)                                                              22                         1              Ultrasonic PING Right       (Output)
Output 2 (B.2)                                                              23                         2              Head-Turning Servo           (Output)
Output 3 (B.3)                                                              24                         3              Steering Servo                  (Output)
Output 4 (B.4)                                                              25                         4              R Drive Step Motor 3 (&4)  (Output)
Output 5 (B.5)                                                              26                         5              R Drive Step Motor 1 (&2)  (Output)
Output 6 (B.6)                                                              27                         6              L Drive Step Motor 3 (&4)   (Output)
Output 7 (B.7)                                                              28                         7              L Drive Step Motor 1 (&2)   (Output)

In 0 / Out c0 / Infrain                                                     11                         8              Interrupt Out to Right Brain (Output)
In 1 / Output c1 / PWM 1                                              12                         9              Read Left Ultrasonic            (Input)
In 2 / Output c2 / PWM 2                                              13                        10              Read Right Ultrasonic         (Input)
In 3 / Output c3 / I2C SCI / SPI SCK                              14                        11              Memory I2C SCL 
In 4 / Output c4 / I2C SDA / SPI SDI                              15                        12              Memory I2C SDA
In 5 / Output c5 / SPI SDO                                            16                        13              Interrupt From Right Brain   (Input)
In 6 / Output c6 / Kbrd Clk / SER TX                               17                       14              Right Front Bumper Switch  (Input)
In 7 / Output c7 / Kbrd Data / SER RX                            18                        15              Left Front Bumper Switch    (Input)

ADC 0 / In a0 / ULPWU                                                  2                        16              InfraRed SERVO control    (Output)
ADC 1 / In a1                                                                 3                        17              InfraRed Measurement   (ADC in)
ADC 2 / In a2                                                                 4                        18              Right Eye                     (ADC in)
ADC 3 / In a3                                                                 5                        19              Left Eye                        (ADC in)

Serial In                                                                         6
Serial Out / A.4 / ADC 4?                                                7
Resonator                                                                      9 & 10
Reset                                                                            1

V+                                                                               20                                         +5 volts
GND (0V)                                                                     19 & 8                                    0 volts
Output 0 (B.0)                                                              21                         0               Red LEDs -common
Output 1 (B.1)                                                              22                         1                ...available
Output 2 (B.2)                                                              23                         2               Interrupt In from Left Brain
Output 3 (B.3)                                                              24                         3               Interrupt Out to Left Brain
Output 4 (B.4)                                                              25                         4               Right Eye Cover Servo     (Output)
Output 5 (B.5)                                                              26                         5               Left Eye Cover Servo   (Output)
Output 6 (B.6)                                                              27                         6                ...available
Output 7 (B.7)                                                              28                         7               Brake Light (transistor driver)
In 0 / Out c0 / Infrain                                                     11                         8               Mouth - Happy              (Output)
In 1 / Output c1 / PWM 1                                              12                         9               Mouth - Sad                  (Output)
In 2 / Output c2 / PWM 2                                              13                       10               Mouth - Normal              (Output)
In 3 / Output c3 / I2C SCI / SPI SCK                              14                       11               Memory I2C SCL 
In 4 / Output c4 / I2C SDA / SPI SDI                              15                       12               Memory I2C SDA
In 5 / Output C5 / SPI SDO                                           16                       13               \
In 6 / Output c6 / Kbrd Clk / SER TX                              17                       14                 > LED matrix board
In 7 / Output c7 / Kbrd Data / SER RX                           18                        15               /    (horizontal)
ADC 0 / In a0 / ULPWU                                                 2                        16               Headlights (transistor driver)
ADC 1 / In a1                                                                3                        17               \
ADC 2 / In a2                                                                4                        18                 > LED matrix board
ADC 3 / In a3                                                                5                        19               /    (vertical)

Serial In                                                                        6
Serial Out / A.4 / ADC 4?                                               7
Resonator                                                                     9 & 10
Reset                                                                           1


     As to the concerns about the steppers: I've ordered a couple new steppers plus new 32 pitch gears to fit them and have them mounted on the chassis where the others were.

     I am including my current working schematic for the robot as a file attachment (.jpg available above). If you spot anything that does not look like it will work properly, be sure and tell me, so I can change it before testing for maximum smoke in the picaxes.      <grin>

     Oh, something I did not list there. The NPN transistors are 2N3904s and the PNPs are 2N4036s but more or less any common transistors would do.  Those are ones I happened to have lying about. I considered using 2N404s, but decided I might need those germaniums for something special some day --(like in the solar battery charger, for instance).

     As to the dual transistor arrangement on the "mouth" lights, I would not have needed that, but I have already wired the diode matrix that runs them for switched positive rather than ground, so I threw in an extra PNP in each circuit to reverse the logic polarity.

     I also did not show the batteries, power switches and solar charger on the schematic yet. (The solar charger circuit is an option. I may or may not use it on this unit.)

     Main battery:  4 x NiMH,  [5 V by 2.5 AH]  -I have ordered another identical battery pack, to help increase the instantaneous available current for running servos, headlights and so forth at the same time.

     Additional battery to boost Stepper Motors (only) on up to 10 volts:  8 x NiCd,  [5 V by 2.0 AH]

     I listed these rechargeables as 5 volts, not 4.8 volts as that is what both sets actually read.



     The code above is the MOVEMENT section (only three readings for shorter pauses while moving. Takes 1 second plus.

     (Both that and the next one should speed up a little when not needing to send characters to the terminal at 9600 baud.)

     The one below is in the MAPPING section of the code (more readings, but takes 9 - 10 seconds to produce results).

As mentioned before, the program code is still in the process of development.


     I needed a miniature double-pole switch to turn on both batteries at once, and finally found some small slide switches in a parts drawer that were DPST.  One of those worked fine.

     If I do use the solar cells on this robot, I have to figure out a circuit that will charge both batteries --as in, disconnect them from the robot electronics (at least the motor "boost" battery) and charge them in paralell. Once they are charged up, they would then automatically switch back to series mode to power the robot.  I would also like them to swing out of the way when not in use, and align to the sun (or brightest light) when the battery gets low. However, this robot is probably complex enough.  I may not even add the solar cells on this one. If I do, I will probably mount them on the top cover (not shown in these pictures yet).

     I have decided not to use the X-band motion detector.  I already have plenty of sensors and not enough room to mount it on this 'Bot.  Basically, it won't be useful to have it there.


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Dan, you truly are a "maker".

What can I say?  I like to stay busy, even if I am not "working".

Mega neat ! Seems rugged as well !


Great explanation Dan,thanks.  Actualy I'm using both the PICAXE 28x1 or Arduino Duelaminove board.  I also have the Darlington with I can use as you mentionned above (sorry I should have look firs in the manual). I will use the illustrations as a guide line.

Not too sure about the why use of an inverter though. I imagine with the proper coding it should work fine too.

Thanks again Dan :-)

The reason for inverters is that if you check the logic of the stepper switching, you will see that any time 1 is low, 2 must be high and vice versa. They drive different ends of the same coil. If they were both low or both high, no current would flow through the coil and the motor would not step.  The same is true with 3 and 4, -opposite ends of the same coil.

You can drive coil ends 1 and 3 from different outputs on the μC (micro controller), but to make the motor step, the opposite ends of those coils (2 & 4) are always the inverse logic.  For this reason, only one wire is needed per coil. You can get the inverse logic pulse by running to an inverter, so only one μC output wire is needed per coil. You will only need two outputs from the μC instead of four, and four total for both motors instead of eight.

Hi Dan, very interesting stuff here,thanks for sharing. Very nice project as well and I enjoy watching.

One question for you...I own 2 of these steppers and I was wandering how to connect them to a board to have them running continously? Thanks

Korel :)

I recently bought a tiny stepper motor driver board (A4983) from pololu, size of a postage stamp.   basically its a breakout board for the main chip.   it has the dual h-bridge all built in.  it has 4 wires out to the stepper motor, and it only requires 2 pins from the MCU.  1 for Step, and 1 for Direction.   I presume my code will have to keep raising the STEP pin high to step the motor, and high or low on the Direction pin to control forward or reverse.    for not a lot of money (less than $20?), it solves a lot of hardware design issues and reduces code complexity.

Sounds like a step in the right direction (pun intended).  

I also saw an Arduino Special Motor Drive Shield L293D*2 at a buy-now price of $18.99  It has two L293D chips and says it drives two steppers and two servos from the same board.  You said you already bought the other one, but you can keep it in mind for next time.

If you feel like building your own, the L293D drivers are selling for $1.50, but there is another $2 for shipping. I do see where you can buy 10 of them for $17 and shipping is free. [Mental calculations... $1.50 x 10 = $15 plus (the same) $2 for shipping would be $17... ---hmmm, I wonder.]   --The hex inverters are only about 25 cents each.

I also save old surplus boards to get parts for experimenting as well. (Don't get them too hot.  Unsoldering chips off a board is something you have to practice at... Shoot for applying solder-melting heat for no more than 5 seconds and ten at the most.)

Alright, what you were wondering is easy enough. Describing it properly may not be --ha ha.

If you are not using controller chip(s), you can make a pulse width modulation source using a 555 timer chip, however most of the people here are more likely using a micro-controller (μC), so I will proceed along that line of thought.

About all the micro's in common usage have a few outputs capable of PWM (pulse width modulation) which is what is needed to drive the steppers. If you are running 2 motors continuously, you will only need (at least) 2 outputs for each. I don't know which controller chip you might use, but the principle is the same no matter which one, so for illustration purposes, let me direct you to the PICAXE manual -part 3. It is available for free download at: http://www.rev-ed.co.uk/docs/picaxe_manual3.pdf 

On page 16 of that manual, you will see one "typical" circuit you could use. You do not have to use the ULN2003, but can use any inverting driver capable of enough drive current. For example the ULN2801 thru ULN2805 are also darlington arrays in IC form and would work the same.  Another method would be using (2) x L293D motor driver chips (one for each stepper) and a common 74LS04 hex inverter.

On page 18 of that same manual is a diagram of the L293D. Where that drawing has Motor A and Motor B, you would substitute two winding sets of a single stepper. If your steppers are the 6-wire Unipolars, yellow and orange is one winding set and black and brown (or purple) is the other set (ignore the red and green wires). You can find / verify these for continuity with an ohm meter.

In similar fashion to the drawing on page 16, you can use only 2 outputs from the μC (micro-controller). Connect these outputs to L293D inputs 1 and 3 and also to inputs of two sections of the inverter chip. The outputs of those inverter sections will connect to inputs 2 and 4 respectively on the same L293D driver. That way, whatever (high or low) is on input 1, the opposite will appear on input 2. Ditto for coil 3-4 of the L293D. If you do not use the inverter IC you can drive the L293Ds directly from the μC, but you must use 4 connections per motor to the 4 L293D inputs for a total of 8 PWM outputs needed from the μC.

If you were not running the motors continuously, you can turn them off by enabling/disabling the L293D chips with 1 or 2 more leads from the μC.  On the other hand, simply not sending step-pulses is the easiest.

Not sure if I explained that well enough; I hope it was at least partially clear.  :-)

I thought about making a forum post for this question, but I guess you'll answer it really well ;) (I mean your 40 years of experience in electronics). I never really understood how to step down voltage or boost it up while not necessarily losing power (current?). Actually, I'm thinking of powering a wireless camera and an Arduino mini (maybe even two) with a standart 9v battery and then step it down to 5v to power some 12 servos (still not sure about the amount of servos, but the voltage remains the same). I also don't mind adding some RGB LEDs. Do I also need to regulate voltage for them?

Great thanks