r e s u l t s
We probably set our sights too high when we decided to dive in to this plethora of projects. We started out by working a lot on the higher level code like Java3D and C++ routines to recognize objects via the Quickcam, which were very interesting to work on, but we underestimated how difficult it would be to control the motors and perform accurate position sensing. A lot of our schedule was built around the fact that the robotics kit that we ordered didn't arrive until 2 weeks before the project was due, so we had to get other stuff done earlier. By the time the kit arrived, we had some good working code on the software side of things, and the object recognition and Java3D program worked great individually.
But our main trouble had to do with controlling the various motors to the arm and other mechanical related issues. First, we created an h-bridge and logic circuit to select PWM, direction, and motor to move. This gave us endless problems. For some reason the current coming out of the h-bridge was too low to power any of our relays except 5V reed relays, and 5V reed relays are NOT PLENTIFUL in Ithaca!! These relays were the only ones that we found that were reliable, but unfortunately we only found enough to be able to control 4 out of the 5 motors.
Working with the 4 motors, everything went great! We were able to manipulate the arm in 4 different ways on the Java3D interface on the computer and send the positions to the microcontroller, and then the microcontroller executed the necessary moves of the joints to get to that specific position. We found that the motor speed was also a little too fast, so we slowed it down using a home-brewed PID control.
On a different note, it was very difficult to physically install the position sensors (trimpots) to the arm itself. We tried soldering, gluing, and all sorts of things. Finally we got a couple working but we ran into issues with trimpots not being completely reliable-- all this added some unreliability into what the arm actually did when we "told it" what to do. Not every signal sent to the microcontroller worked exactly- but it was definitely a sight to see when you program up the GUI and then the arm executes exactly what you specified! Cool!