We will discuss all the problems we encountered while building this robot, and discuss the solutions we decided to implement. Some problems were never fixed and there can always be some improvements made to the design. Some of these solutions and improvements will be discussed below, by category.
Mechanics:
In the build of the arm, we used our biggest servo engine as the fixed point to which the arm was connected to the ground plate. The small servo was placed on top of the first arm piece. If we would start our project over, we would've decided to use a different approach in which we placed both servos on the ground plate to reduce the weight the arm had to move, thus making us able to use two small servos and a differential. An example of such an improved set-up can be seen here:
Another improvement would be redesigning the attachment of the big servo motor to the set-up. Right now it a wooden construction is used that isn't stable enough to provide accurate positioning.
Possible improvements in the robot arm would be the addition of bearings in the joints, but with small weight and accuracies necessary in this project these weren't really necessary. It was also harder to implement, because the servos only allowed for certain parts to be mounted on top. We could also reduce the weight of the arm drastically by removing the center of the aluminum plates, but the working staff was too busy to bother them with this task. All these improvements would decrease the deflection of the sowing head. Another cure for this problem would be to add a calibration procedure into our code to correct the mistakes in the positioning.
Possible improvements on the design of the sowing head would be related to the seeds not being stuck at the parts connecting the hole in the wheel and the sowing head support part. Planting multiple seeds at once or breaking them are also two issues that come up from time to time, but this has everything to do with the random shape of different seeds. Another improvement would be fixing the transparent cover to the sowing head in a better way, so no seeds can get stuck between the cover and the support part.
Electronics:
Right now, a manual switch is present to provide power to all the electronics on our PCB unit. It would be advantageous to be able to control this switch with the arduino, by using a transisitor of some sort. We discovered the servo motors run rampant whenever a transfer of information to the arduino happens, so turning of the power to the servos would solve this problem if we would somehow need to transport information from the computer to the arduino.
Another major problem is that our IR sensor operates very unpredictable because the alignment of the IR sensor, the hole in the sowing head and the IR sensor needs to be perfect. This can be solved by using an analog IR sensor with a threshold instead of a digital sensor.
Another improvement would be building a better cover for our PCB.
Programming and microprocessor:
The greatest difficulty we faced in the general programming of the robot was transferring the coordinates where to saw from the computer program to the arduino. At first we tried to send each coordinate seperatly from the computer to the arduino while the arduino was running, this could be done at each time the microprocessor needed a new coordinate or all coordinates could be sent one by one in the beginning of the operation and saved in an array. This however proved very difficult because the microprocessor behaves instable when sending data to it via USB.
A second idea for transferring the data was to let the arduino read out the coordinates from a saved file on the computer. This saved file could be made by the program on the computer. However, we did not find any libraries that contain procedures to read from a saved file on the computer and making this procedure ourselves would be very difficult and time-consuming.
The final idea was to simply let the computer program alter the arduino coding before it is send to the microcontroller. The real programming of the microcontroller would stay the same, but in de the declaration of variables the computer program would make an array containing the coordinates. When the user has indicated where to saw, the computer program will save the arduino coding in a .pde file and this file will be loaded into the microcontroller. This is not a very refined approach but it was the only solution we could think of that could be accomplished in the remaining time.