This is the story of my pet robot. The idea came to mind when my sons relentless begging for owning a dog drived me crazy. Instead of having a dog I decided to make one :)
Saturday, July 15, 2017
I'm working on the software side. Nothing special to show.
Trying to figure out if there is any slippage and rotational differences between the right and the left wheels.
Still want to see some uninteresting moves? Here is the video.
The battery (currently a Lion 3 cell battery) is temporarily attached to the tail, it will go inside the body in the end. Now it comes handy to access it easily to charge or unplug.
To power Raspberri Pi, I'm using a buck (DC to DC) converter, it's just a few dollars worth but produces pretty stable output voltage. I've tried it with my adhustable power supply between 11-15v and it stays 5 volt without fluctuating. I think it uses LM 2596. The datasheet says it can output 2A steady current which is enough for me since I don't use RPi to power anything yet.
One important thing to express again is that there are three different voltages going around the robot; 12 volt, 5 volt and 3.3 volt. If you are not careful you can easily burn things out or damage badly.
It's been some time, but I'm back.
During this time I decided to make some changes / improvements to my robot.
First, I've moved from Arduino to Raspberry Pi 3. It's much more powerful with Quad Core 1.2GHz 64bit CPU, and comes with Wifi and Bluetooth, runs Linux, has direct HDMI outputs.
Second, I upgraded my motors with the ones come with encoder units. And also, the motors produce 320 rpm. With my wheels (6 cm radius) the robot can travel as much as 201 cm/sec which is more appropriate in my opinion. As you can see in the below pictures I put a supporting aliminum u profile under the top body panel to eliminate sagging of the body due to the weight.
Third, I bought Pololu Dual MC33926 Motor Driver Carrier that has a wide operating range of 5 – 28 V and can deliver almost 3 A continuously (5 A peak) to each of its two motor channels. I thought that Parallax HB-25 H bridges were overkill with 25 A and took much more space comparing this new tiny pcb.
And lastly, I've changed my IR sensors from analog to digital. They are from Sharp and 5 cm sensitive.
Curious of the black plastic thing above the sensors?
It's plastic tie lock bumper to absorbe any crash force and to keep sensors safe ;)
Actually, I've already purchased an infrared distance sensor with LM393. They say that it can work between 2 to 80 cm, but haven't tested it yet. I didn't give much attention when I bought it maybe because it was fairly cheap but if I'm not wrong it just warns you with a low digital signal when it senses a reflection from a predetermined distance, that distance can be adjusted with a potentiometer, though.
I think that the Sharp IR sensor which is also sold by Parallax is a better solution in terms of IR technology. Instead of telling only yes or no, it speaks analog and gives a voltage corresponding to the distance of the object. I haven't had any experience with that yet, and I don't know how narrow the IR beam is. For example; will it be able to detect a thin wooden chair leg correctly? We'll see.
Now that I've almost come near to finish my hardware part of the robot, I should be focusing on the more enjoyable episode which is programming. I have tried to come up with the concept of a state to make my robot have an idea what it is doing at any given time. Until I add image sensing capabilities, my robot has very simple vision tools, so its obstacle avoidance method will also be simple. Actually, it will only be equipped with ultrasonic distance sensors at the beginning. When it detecs an object ahead it should rotate in place and check if the 'new front' is empty to move forward.
When I power it on, it will begin in [initialize & wait] state until it receives a move command via bluetooth module which puts it in [moving forward] state.
Below, you will find my first and simple state diagram. I will build my software on top of it and the state diagram will surely change and improve over time.
I've been trying to figure out how to arrange and place the modules on the robot. My main principle on this issue is modularity. Everything should be easy to replace, change and upgrade. Especially, after spending so many hours on the main plates, I strongly refrain from drilling or damaging the main plates needlessly. So I ended up putting the boards on a seperate small plate.
Later, I started experimenting with ultrasonic sensors. Much to my surprise, these sensors are really sensitive and precise, almost in the rate of half a centimeter. And there is more, I thought it would be a great idea to have a permanent display on the bot for debugging, displaying the state of the program, etc. Thus, I assembled a 4x20 character display. My code is still in a spagetti state therefore I didn't post it yet. But I will post it when it is ready and beautified.
Here are some pictures of the top plate and mentioned elements on top of it;
I had hopes that it would not be a challenging work, but it was not as easy as I thought. First things first, I didn't invent this pan/tilt mechanism, the one comes with Pixy is a similar solution. So if there is credit it goes to the project team. I got the inspiration (!) from them.
The old friend HDPE comes to the stage again. Why do I use this stuff for everything, because;
I have it,
It's durable, a little flexible but not brittle,
It's machineable, drillable, sandable and can be filed like soft metals, and can be cut with any small teeth saw.
and it looks good.
Below are the stages for creating the pan/tilt mechanism. Pan servo is fastened with screws, but tilt servo is kept only with the bracket (painted in black, later) and there is a small trick to keep it in place. I made a small groove on the plate and filed one side of the mount of servo to fit in that groove, so that it doesn't move back and forth.
After months of waiting, I received my Pixi. I mentioned before, it was one of the Kickstarter projects that I backed. The guys from Charmed Labs and Carnegie Mellon are behind it. It's a vision sensor that can quickly be taught new objects, and it can be connected directly to Arduino. Which suits me nicely because for this project I'm using another Arduino compatible board DigiX. It's also from Kickstarter but another story.
Here are the first pictures of the product, mounting brackets fastened.
It processes images at a frame rate of 50 Hz and support multiple interfaces: UART serial, SPI, I2C, digital out, or analog out. I must say that from my point of view, the result of the project was the best one so far coming from Kickstarter. There was also an optional purposefully built pan/tilt kit but I thought that I could make it by myself by using servos out of the house-stock.
It's been a time since my last post. Business and other stuff as expected. Thank you guys for your comments and feedback.
In the meantime I purchased some parts for my robot. I'm not sure yet how I can make use of them in the end but we'll see.
One of the items that I bought is Sparkfun Robotic Claw MK II with its Pan/Tilt Bracket. The claw is made from metal and has a spring clutch, I hope it will save the servo from ruining. The more complex looking claw is surprisingly cheaper than the bracket, but the bracket comes with its servo. Even though it says the bracket is made especially for the claw there is no easy way to put them together. The assembly instructions are really poor and the proposed method doesn't fit my liking so I decide to make a U shape piece as an adapter between to screw them together.
Here you can see the pictures, I just installed the servos;
So far I've spent much of the time on mechanics rather than the electronics. But, I'm not in a hurry and try to get the joy of doing things slow but steady. The chassis is almost done, I'll add some handles and maybe some protective rubber caps, just in case it decides to run away and hit somewhere.
I have two stock motors from Parallax, they are 7.2 volt and 310 rpm. My concern is that they are a little bit faster than I want them to be. I see that many people replace them, anyway. I'd prefer torque over speed, and I think a higher gear ratio will make it more stable. BTW, I'd like to thank Erco for finding the lower rpm replacement motors on Ebay. I guess I'll use the similar ones which are 70 rpms but 12 volt. I don't know yet if my 6 cells 7.2 volt NIMh battery pack would provide enough juice for them.
After a few busy weeks, found some time to work on my robot again. I brushed the aluminum tail that I cut from 2 mm sheet. It looked straightforward in the video I mentioned previously, but believe me it is a long and laborious process. It took me almost half an hour just to brush one side with 180 grade sand paper. The pictures were taken ten minutes apart.
The tail assembly would become sturdier if there is a support from the buttom upward. And here is he solution. It's the same kind of aluminum, 2 mm thick. Cut and filed by manual tools.
I have nothing but an old vise to use for bending. But the trick is; first make a groove around (0.5 mm) on the plate where you want to bend with a dremel cutting disc, and then bend it slowly. Before bending, I made some brushing with 240 grit sand paper. I'm very happy with the result, it's just great, isn't it?