Let's Make Robots!

Junior

Maps enviroment, explores with arm, falls over.
AttachmentSize
Juniors_Schematic.jpg1.02 MB

Sun 7th Dec 2008

Had a few setbacks with the old NiMh battery pack dying and the new LiPo battery packs not fitting where I hoped. Compare the old photo to the new one below. On the upside the new batteries have twice the amp/hour rating and a friend helped me get some polymorph plastic which I put to good use on Junior.

Junior_closeup_of_sonar__small_.jpgI've used the polymorph to make a base / mounting plate for the batteries, a bracket to mount the servo assembly and another small bracket to mount the sonar. As you can see I was in a bit of a hurry to get the sonar up and going so I've just hot glued two small servos together. They are cheap enough that I don't care if they stay that way and it was the most compact neck joint I could make.

 

 

 

 

 

 

 

 

 Junior_EEprom__small_.jpg

Because the new batteries did not fit between the motor control boards I ended up with a space under the new batteries. This turned out to be perfect for my i2c eeprom expansion board.

As you can see it's a perfect fit. Just have to workout where to fit the RTC.

 

 

 

 

 

 

 

 

 

Junior_sideview1__small_.jpg

 Junior's looking like a "Saturday Night Fever" contestant at the moment. He's posed this way because I can no longer access his motor wires to manually adjust his position and this pose is the safest while I'm developing the code to move his arm. In this position any joint can move a fair bit without a collision.

One advantage of the bigger batteries is that they are about 50% heavier than the NiMh battery pack and are a perfect counter weight when Juniors arm bends over backwards, even at full extension. The batteries are a higher voltage, typically 7.4V so the motors get a bit more juice. The servos are not affected as they run of the 5V supply. The biggest setback with the LiPo batteries is they have special needs for charging and can explode if not treated with the proper respect. This means that ultimately I need to build a special charger/docking station. These batteries cannot be trickle charged!  Read this fact page before considering LIpO for your robot.

 

 

 

 

 

 

 

 

 

 

 


 

Tue 2nd Dec 2008

He's nearly ready for his first video! I just have to write something more sophisticated than diagnostic routines. I've saved the schematic as a jpeg so that you dont need special software to read it but it is big so save it and view it with a photo editing program.

Updated with more pictures and a full schematic of both Junior and the Laser RF MkII. I'm trying a lot of new ideas at the moment so I'm not certain when he'll be ready to video. Everything has been tested to some degree individually so hopefully he will be done in the next week or two.

Have had a lot of destractions with new sensors to make and play with. The laser RF MkII was a disapointment as it was unable to give me the resolution I had hoped for and Rover was going to be too big for Junior even if it did work.

Another reason I've taken so long is that I had some problems with my first motor control board that had to be corrected before I could make the second one. Now they are both finished and tested.

Junior_motor_control_boards_front.jpg

As you can see they have been shaped to fit behind / between the tracks and the wheels as this was the only way to fit so many parts on such a small robot.

Junior_motor_control_boards_back.jpg

I had considered making custom boards but prototype board was quicker and cheaper. Considering I made a mistake with the first one I'm glad I didn't do custom boards.

Junior_motor_control_boards_test.jpg

This is the first board being tested. I've plugged in some motors I removed from a toy dinosaur and wrote a test routine that slowly increased the motor speed in both forward and reverse. I was worried that with all the mucking around I might have damaged a transistor with too much heat or zapped a FET gate with static but all went well. No magic smoke.

Junior_s_wire_nest.jpg

This is Junior with both motor control boards fitted. You can also see my IR sensors on the front. These are just general obstacle detection sensors to prevent Junior hitting anything too small or low for his sonar to detect. Until I can sort out the laser range finder I've decided to go with sonar. I'm using a Maxbotix EZ1 because of it's small size and because it has a pulse width output as well as analog so I can use a spare digital input and the pulsin command.

Junior_s_rear_IR_sensor.jpg

This is the double version of my IR sensor on the back. It can detect an object over a wider range and being mounted on the rotating base give it the ability to look around a bit.

Junior_s_mainboard_layout__small_.jpg

This is how I remember which wire goes where. From time to time I will add a new circuit and then this photo and the schematic have to be updated. The servo outputs were added for testing my object tracker but will come in handy plus in my schematic I've worked out how to add two more if required.

 


 

Laser_RF_MkII.jpg

The new range finder uses a pulsed 1mW laser pointer instead of a spinning mirror. This eliminates the mixer. Should have better resolution.

Hall effect sensors for position sensors.

The gripper will have a sense of touch using antistatic foam and "wire glue". I'll do a Tip/walkthrough on this once I work it out.

Multiplexed PWM control with multiplexed feedback. Allows the MCU to control 8 motors (in pairs) and determine load/stall conditions of each motor.

Junior is going to be my test bed where I can practice my programming and try out new sensors. That Picaxe 40X1 is gonna cop a hiding!

He's a bit top heavy and can fall over if the arm extends too far in any direction but this will be good for experimenting with balance and balance sensors.

The MkII sensor board shown on the right was originally designed with a picaxe 08M but by changing to a  14M it is capable of driving two mini servos that will make up a neck. With another two mini servo's set up for continuous rotation as drive motors it will be a robot in it's own right called Rover. I'm thinking of setting up junior so that he can use his arm to attach/detach Rover.  What could be better, a robotic boy and his robotic dog? I suppose I could have called it K9 but since it will rove about...

All this is going to require a big program so Juniors main board has an i2c interface for a RTC and a eeprom miniboard I've ordered from futurlec that has 4x24LC32 eeproms. http://www.futurlec.com/Mini_EEPROM.shtml Hopefully this will be enough. There's still a lot to work out but once the parts arrive I'll get a basic program running and post a video.

Junior_gripper.jpgIn the centre of the gripper you can see the white LED torch that came as part of the robot arm kit. I've mounted a LDR above it so that the robot can determine if an object is between the pincers. The pincer on the left has my home made touch sensor mounted on it. I lost 3mm of clearance between the pincers but can now tell roughly how hard the robot is gripping an object. Because there are two touch sensors it can also tell where the object is placed within the gripper. I'm posting a walkthrough on how to make this sensor for anyone interested.

 

 

 

 

 

 

 

 

 

 

 

Most of my parts have arrived except for some minature servos for a neck to mount the MKII Laser RF.

Junior_so_much_stuff.jpg

As you can see it's a lot of parts for one small robot. especially those eight motor control relays and 5W shunt resistors. The shunt resistors perform two functions, they limit the stall current to just over 1A per motor and they allow the picaxe to measure the current drawn by the motors so that it can tell how hard a motor is working. You can also see one of the IR proximity sensors and my eeprom and RTC mini boards from Futurlec.

Junior_Mainboard.jpg

This is Junior's main board, with the TLC1543 10bit 11channel ADC in the upper right and two 4052 dual 1 of 4analog switches below. The TLC1543 brings my total number of analog inputs to 18 and the 4052s allow me to multiplex my PWM and directional outputs to control 8 motors in 4 pairs. This was necessary because the 40X1 only has two PWM outputs and therefor I can only control 2 motors at a time. Other features of this board include the i2c port at the bottom of the 40X1, IR communication, internal serial connection to communicate with slave boards like the MkII laser RF. Battery monitoring with warning LED.

Junior_fitting_motor_board.jpg

This is my solution to lack of space, the motor control circuitry is divided onto two boards and mounted either side with the relays, shunt resistors and drive FETs mounted between the tracks and idler wheels. The sheer number of wires and connectors are proving a problem because of the space they take up.

Junior_hotglue_washer.jpg

As you can see in this picture I needed some insulating washers, since I didn't have any I cut two slices of a gluestick and melted a hole in the middle with the soldering iron. You gotta love those glue sticks!

Junior_oh_what_a_mess.jpg

This is the other side still waiting for it's motor control board. I'm quickly running out of space and I haven't even mounted the IR sensors and wheel encoders let alone the laser range finder.

As soon as I have him going I'll post some video's.  Once I've worked out his software I'll try to get him to write LMR with a pen.


 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
At this stage the Laser RF MkII, will mount on the front somehow or maybe on the arm. The circuitry for additional sensors is already there on the mainboard. The mini boards (eeprom, rtc) could mount underneath between the wheels but I hope to mount pressure sensors underneath for balance. My biggest problem is code. The 40X1 may not hold enough and I can't work out how to store additional code on the eeproms. I tried a forum with no luck. Your probably the expert on programming robots in picaxe basic, any suggestions?

I am getting pretty good at compressing the code, so my suggestion would be to hand it all over to me when done building the HW.

If that is not applicable,  here are some general & random thoughts: (Still dont know what to write, but let's see what my hands will type now)

 

  1.  Make one piece work at a time. and I mean piece. Small piece. Tiny piece. Make subroutines for everything. No coding in the main program when you finish. It saves space because you will be forced to make reusable code / you will start reuse code instead of re-inventing. It will make your code overall smaller, because "large complex overall sollutions thought up" tends to be massive and complex. Also making small, tiny subroutines work, and build them in new routines that is then build into new routines gives a much more "live" feeling in the final behaivour!
  2. You can sometimes optimize by using alternative ways of writing the same. Working as described in number one above here, will enable you to first work and then later optimize for space, by re-writing parts.
  3. Make sure to get an X2 component, I do believe the space is better used, and you have more variables etc.
  4. This actually should have ben an example in number 2: Try to use all the commands available. THere are really many cool commands. A command like "max" can save youu a few if-then's, just as a command like "select". Commands like "inc" can even get you a few extra bits compared to using "let".. and not to forget; These nice commands makesour life easier, and your code more fun to write! Be sure to "play some mario in the manual" (find all the secrets)
  5. Be sure to understand how the extra memory can be used; There are commands like EEPROM/DATA, PEEK/POKE & bptr
If sticking to this, I am pretty sure there will be plenty overhead in your Picaxe 40! Plenty.

 

I've been looking around for the 28X2 or the 40X2, but the websites I look at (like picaxe UK) sell the X1 components as NEW PRODUCT!. No mention of the X2 parts except for the manuals.
Same here, but it's pin for pin compatable so when it becomes available it'll be an easy upgrade :)
Good advise. I do much of that now, particularly testing each piece of code since multiple faults can be impossible to debug. thank you for your offer to help, I'll try not to take you up on that as I don't want to hold up your next brilliant creation.
Awesome concept for a bot ... I want to see how this turns out!  You know what would be really awesome is an arm on each side like a humanoid robot.  ... hmmm ...
I agree but in Juniors case one is enough for me to experiment with.  BoozeBot will have two arms but so far I only have the elbow joints (grinder gearboxes) and one shoulder joint.
Yah, I know.  I'm just sayin it would be cool for a future bot.

you should add tilt sensors and teach the robot to right it self depending on witch way it falls

looks realy good !!

I'm looking into that. Tilt sensors will be good for telling what position the bot is in when he falls over. I'm also looking at pressure sensors on some of the axles so it can tell where it's centre of gravity is when upright to try and avoid falling over. I'll probably use a similar set up to the gripper touch sensor I'm about to post.