I have been attempting to design and build a 6-DOF robotic arm, using MG996 servos and an Arduino Uno. I have run into a couple of problems, so I would greatly appreciate any help!
Firstly, I accidentally bought MG996 360 servos without realizing that these have no positional control, and can only have their direction and rotational speed programmed. Thankfully, they have enough torque to move the arm (3D printed with PLA, plus bearings at each joint). However, they do not hold the arm in place between movements (falls back down), and I am assuming that this is because of the lack of positional feedback control? If I were to replace these with MG996 180 servos, would they be capable to hold the arm in place?
For these tests I am just using the 5V pin on the Arduino board (to one servo), and the USB connection to my computer. My initial plan was to use a 6V 3A AC/DC wall adapter (link below) into a PCA9685PW driver, but it seems like I might need more current than this to power all six servos?
Would something like this 5V 10A AC/DC wall adapter be better?
You should never attempt to power motors or servos from the Arduino 5V. That is intended for at most a couple of LEDs or sensors.
For the MG996, the servo power supply must able to supply 4.8 to 6V at more than 1 Ampere per servo. For the MG996R, the start/stall current is 2.5 Amperes, so budget 2.5 Amperes per servo (6 servos => 15 Amperes). If less, you will just have jittering motions.
Do you think this 5V 100W (so 20A) power supply would be suitable?
I would connect the input with the wires from a basic computer cable?
I understand that it is a good idea to power the Arduino with a separate power supply, so I was planning on powering that directly through a USB cable. Is this fine?
Also just confirming my previous question that MG996 180 servos will be able to hold the robotic arm position unlike the MG996 360 servos, because of the positional feedback control (see thread above)?
Note that there are two types of "360" servos. One type does have feedback and can be controlled over that range (or larger -- see 2.5 turn sail winch servos). The other, more commonly known as continuous rotation, has no feedback. You can control only direction of rotation and to a lesser extent, the rotational rate.
But to be clear, that's not normally feedback to the user. It's internal feedback so that the servo can try to go to the commanded position. If it can't get there, perhaps due to a mechanical jam, you don't normally get to know that and might blithely assume it arrived.
There are some servos that bring the feedback out to the user, such as this one at adafruit, (note the extra wire) and it's sometimes possible to do a diy mod.
The servo.read() command doesn't actually read back the actual position of the servo: it tells you the last commanded position.