Introduction: Experimental Robotic Platform
Hi ! My name is Andrew, and I am a Computer Science student.
I started working on this robot for both fun and as part of my Bachelor Thesis.
It all started when I bought a robot kit from a site called Conrad: Link
It seemed as a good start-up kit, at a decent price.
Even though it was fine at first, when I assembled it, I started to see that the original designed was flawed, so I decided to improve the original design, by making it an experimental platform.
Why did I improve the original design?
- The IR sensors were not accurate enough.
- The odometer module didn't work as it should have.
- The wheels didn't have enough traction.
- The microcontroller was based on Atmel ATmega 128/L - a low power AVR 8-bit IC, quite powerful, but poorly designed, with proprietary frequency and pin-out.
- The programming language was Compact-C: based on C language, but with a lot of additions; the programming IDE was riddled with bugs.
- It only had a single I2C expansion port. It lacked the expansion capability of average Arduino boards.
- The wheel rod and toothed wheel rod were soldered on the pcb; this is a HUGE downside. If you're not careful enough, you can solder them in a different angle, thus changing the stepping of the toothed wheels, resulting in different wheel speeds. Also, anything soldered can be broken quite easily, the traces just peel off, if you hit it by accident, or it falls down from, let's say your desk.
- The LEDs were small, 3mm, you couldn't even notice them.
- The toothed wheels get crooked in time(right in the center): decent build, poor material(plastic).
- You had to use hot glue to keep the motors in place.
- Low battery pack capacity (4x AAA) batteries. Even though it was a low powered robot, the batteries didn't last that much.
- The robot was balanced using two halves of a ping-pong ball. This is a poorly implemented design, due to high friction with just about any surface, low ground clearance, and squishy plastic material that would deform when pressure is applied. Also, those ping-pong ball halves were hot glued on the pcb, giving it a cheap and ugly look.
- You had to press Boot button and Reset button at once, then release Reset, then Boot for it to go in programming mode. This was really annoying.
Step 1: Building the Original Kit
In the pictures you can see the components, the mcu, and all the parts that I've used to build the original kit.
It took me 2 to 4 hours to finish this build, because I was extra careful with mounting the components, I didn't want to leave room for mistakes, then to repeat everything.
Step 2: Improving the Stability
Those ping-pong balls were slowing the robot down, due to high friction with any surface it encountered. They were also lowering the ground clearance. I used an office chair wheel and a piece of thick cardboard for my first test. The office chair wheel was too big, causing direction problems when going backwards. But the idea was good, though.
The next test was with a different platform, a more flexible one, made of plastic. Also, I've used a smaller wheel. But then I realized that the platform I've build in the back of the robot was covering my battery pack, and I couldn't remove them without disassembling the whole platform, so I've mounted the battery pack on top of the platform.
The small wheel also had the same problem as the office chair wheel: it changed the direction of the robot, which was a really bad thing.
The solution was to replace the small wheel with a ball caster wheel, solving the direction problem.
I also upgraded the battery pack to a 4x AA battery pack, instead of the 4x AAA batteries. The batteries now last for up to 4-5 times more than the AAA batteries.
Also, switched from regular batteries to NI-MH rechargeable batteries.
The first anti-collision system test: Link
Step 3: Replacing the Mcu and Expansion Board
As I've said in the intro, the mcu was limited by the manufacturing company, and used a proprietary system. Also, it had to go in programming mode before you could upload anything on it.
The expansion board was useless to me, so I just removed it.
Then I added a piece of plastic, which I painted in red (so it would match the robot's main color).
The following were added on top of the plastic board:
- Arduino Mega 2560 rev. 3 (chinese clone, using CH340)
- Sensor shield for Mega 2560
- Bluetooth HC-06 module
- 16x02 LCD
- RTC module
- On/Off switch
- Tower Pro Micro Servo 9g SG90 with mounting bracket and ultrasonic sensor bracket
- HC-SR04 ultrasonic sensor
I've used the old mcu socket on the pcb to run wires to arduino. So far, I've used the LEDs, Motors, Speaker, Mic, and AREF pin.
To do list: - IR sensors.
It looks like a big mess of wires, but that was the whole point: an experimental platform ! you have full access to plug anything on top, and use it later on. However, I will do some wire management, when the project will be almost done.
This is a test using ArduDroid on Android OS, and the robot is running the ArduBot sketch from TechBitar: Link
Also, small driving test using Java app I've developed: Link
Step 4: Replacing Original Driving System
I have replaced the original driving system with a gearbox-type system. The motors now work independently, the weight of the robot(load) won't affect the axles, and it can be easily configured in 4 different ratios.
The gearbox system is this one: Link
I had to modify the axles, because they were way too short.
I used some 3mm rods laying around from and old printer that I scavenged for parts long time ago. They are made of steel, the 3mm original hex ones were made of some weird metal, that could easily break when applied high forces.
The wheels are 42x19 mm like the ones in this link: Link
The inner part was D-shaped, and i had to glue them to the rods.
The wheels have crests inside, for the rotary encoders. The wheels and rotary encoders were designed for small gearbox motors, and I had to modify them to work with the gearbox I mounted.
After connecting the motors, and encoders, I tested them with my oscilloscope, and they seem to work exactly as advertised. However, software speaking there is a slight glitch, and they kind of backfire from time to time.
Step 5: Adding Caster Wheel, Antenna and Bigger LEDs. Wire Management.
The caster wheel is lightweight and helps the robot balance.
I intended to use the antenna (made of copper from a thick wire - 1.5mm diameter) for showing off rather than an actual use.
But then I realized that since I've built it, I could try and connect it to the Bluetooth module's pcb antenna, by soldering a jumper wire from the pcb antenna to the antenna I just build.
I was surprised to see a huge boost in range. Without the antenna, the Bluetooth module stopped working within 2m and a wall in between the laptop and the robot. Now, I tested it from 20-25m away, and it works without any problems.
I have removed the Bluetooth state SMD LED and replaced it with a 10mm LED on top of the antenna. I masked the wires going down from the led to the Bluetooth module with heatshrink tubing. I have also added a 10mm green LED near the on/off switch, on top of the board, and replaced all the 3mm LEDs with 10mm LEDs.
Instead of the red LED used for the line following module in the original kit, I have used a 10mm white LED, to make some light when you need it most (at night, poor illuminated environment etc.).
Connection status LED: Link
Night test and LED show-off + drive: Link
Step 6: RTC Module Test
I have uploaded the sketch into the Arduino, and it seems pretty fine. I will use the RTC module as part of an event-triggered data-logger.
Step 7: AREF Voltage Monitoring Tool
This is an experimental battery monitoring system that I will use to detect the capacity of the battery pack.
Step 8: Implementing the Odometer. Driving on a Predefined Path.
This is a test using the odometer system. Robot drives in a triangular shape, with equal sides. Also, 5cm stepping on a piece of paper.
Step 9: To Do List
- Solar panel rechargeable battery pack using a power bank for mobile phones.
- Line following.
- Predefined path telemetry - timed events.
- Object avoidance and terrain mapping.
- Blinking system using the LEDs to indicate the path in which the robot is headed
If you liked this instructable, please vote it for the Robotics Contest and/or Tech Contest.
Thank you for going through this material !