This project is an advanced version of this project that I completed during high-school in 9th grade. This time I want to add more features such as wifi control, video streaming, and stronger robotic arm. My idea is that once the robot is done, I can share the design with my friends and we can build more of the same robot. Then we can come together and control the robot from our computers, and drive our robots together outside to the narrow places that we wouldn’t go physically. Then we can control the robotic arms to interact with the environment that the robot is in.
I actually have another dream that sounds impossible for me now since the limitations of current technology. So now we can build huge and super strong machines right? But imagine making a tiny robot that has a size of an insect, and imagine controlling that robot from your computer using the tiny camera on the robot. And imagine interacting with ants, and being able to drive the robot to narrow places that only ants can go. My dream would be to make that robot, in fact I would need super small motors with high precision, and also tiny microcontroller and camera electronics. I can’t make a tiny robot like that, but I can make a big version of this idea. So let me tell some more details:
Design Of the Robot
- Stable and strong robotic arm
- Track drive system with high torque and decent speed
- Horizontal rotation for the robotic arm
- Camera video streaming with image compression
- High torque custom servos controlled with I2C
- Basic light system
- Software to control the robot from PC
- Long life Li-ion batteries
- Different Claw designs
Making a Custom Servo Motor for Robotic Arm
One option would be to use high torque double shafted servo motors, in fact these kind of high quality servo motors are super expensive and they still do not give the most efficient configuration for my robot. So I decided to make my own custom servo motor which would have super high torque, and super precise.
I bought this 12V DC motor with magnetic encoder, and a worm geared and double shafted high torque output. This one below is only 10 rpm, but its torques is around 20kg*cm, and it is also cheap. But since it is only a DC motor, I needed to make controller for this to use it just like a servo motor. I used pin change interrupt to read encoder pulses, and used high speed PWM feature on the attiny MCU. Then, I implemented a PID algorithm in an AVR MCU, and finally the MCU could rotate the motor just enough so that the shaft could get to the desired angle. By further fine tuning the PID parameters, and setting a limit to the Integral of the PID calculation, I made a precise servo motor.
October 10 2019
Two-wire (I2C) Communication
I needed to make a custom driver to control each dc motor. I wanted each driver to communicate with the main MCU using the I2C or TWI method since this method only required 2 lines, and it is possbile to connect all the client drivers on the same line in a parallel way which will reduce the amount of wiring and make the robot look clean.
In the image below, the MCU at the left side is the I2C master that send data to the small MCU at the right side of the breadboard using only 2 lines. Then, the small client MCU displays the received data using LEDs for testing.
Finally, I added a circular queue buffer, to which received data is enqueued, and used data can be dequeued in the program. In this way, the incoming data will be stored in this queue so that client will “remember” the last n data. Otherwise it would miss some data without using it.
October 21 2019
Finalizing The Driver on Breadboard
In this stage I used an smt h-bridge to control the DC motor instead of a motor controller module. Then I made sure everything worked. At the end the master MCU was able send shaft position data to the TWI client which rotated the motor to that position.
Producing Motor Driver PBC and Assembling Components
I made pcb boards ,then I soldered the smt components, finally I loaded the AVR program into the MCU using ATMEL-ICE.
Finished motor controller