ArmDroid – Highschool final exam
admin | September 1, 2010
Spring 2007, the young codewarrior Lucas gets ready to face his Electronics and Telecommunications highschool exam..
Well, good memories about that project! Practically we had this robotic arm (ARMDROID) in the laboratory, and as it often happens with laboratory goodies, nobody was using it. Few people knew of its existence, even less knew how to make it work. Great occasion to dive into that and make it work by brute force
Using Visual Basic I developed a graphic user interface which consisted in a buttons board, each one controlling a separate motor on the machine. Visual Basic was actually not taking care of the automation: When the logic of the program required a movement of the robot (or better said, a stepper motor to activate), VB would output a package of information via the RS232 data interface using a custom communication protocol. On the other side of the cable a microprocessor would be waiting to be fed info..! After having translated the information received according to the communication protocol, an Assembly program running on the micro would manage all the logic needed to set the state of the pins of a parallel socket, only way to connect to the robot (yeps, it was THAT vintage!).
Long story short, Visual Basic -> serial -> Assembly -> parallel -> something unknown going on in the robot itself.
And that’s how the magic happens.
With time the project began to grow in scope, including a virtual representation of the robot itself (always in VB).
This was actually the power horse of the whole thing: Having been too lazy to study the maths required to do matrix calculation (i wanted to drive a robot, not study maths.), I ended up having to do all the calculations required to show a pseudo-3D object in an orthogonal view using basic trigonometry.
Pretty funny stuff, here how the calculation of one coordinate of one extreme of one line would look like:
Line15.X1 = Line3.X2 + (Cos(mano * Kmano * pgreco / 360) * Cos(polsoA * KpolsoA * pgreco / 720) -- Sin(mano * Kmano * pgreco / 360) * Sin(polsoA * KpolsoA * pgreco / 720)) * (Cos(mano * Kmano * pgreco / 360) * Cos(base * Kbase * pgreco / 360) -- Sin(mano * Kmano * pgreco / 360) * Sin(base * Kbase * pgreco / 360)) * LungDito
But hey, it got the job done!
So, having had this virtual representation of the robot running, I implemented a new control mode: It was now possible to pilot ArmDroid using a multifunction joystick.
Last goodie? How about having a “Learn mode” that would allow an operator to record “waypoints”, and having the robot automatically follow them? Yes we can!
When time for the exam came, ArmDroid was capable of executing a prerecorded program, while also granting manual control via a buttons board or using a joystick.
Now I’m awaiting for Skynet to become self aware, to crosscode it with ArmDroid and finally have a cute little robotic arm pet.
Like a handicapped puppy, with only one arm. A big orange metallic one.










