limited to 500 mA with a 500 mA fuse on the
Arduino board).
This means that drawing too much current
could blow the fuse on the Arduino or draw too
much current from the PC’s USB port, potentially
damaging it.
You might think I’m exaggerating and
worrying over nothing because you have looked at
the current drain of the servo above and added
them up:
200 mA current draw for ATmega
150 mA current for Servo 1
+150 mA current for Servo 2
500 mA Total
This means that the Arduino plus two servos
should work with the 500 mA from the USB port;
the 150 mA servo figure is based on the servo not
moving and/or not stalled (unable to move to its
commanded position). In these cases, I have
measured current draw per stalled HS-422 servo to
be as high as 450 mA which — with the load of the
other servo and MCU — is enough to blow the fuse
on the Arduino or potentially damage your PC.
The solution is to provide separate power for the
servos and buffer the control signal coming from the
controller (Arduino, in this case) as shown in Figure
7. The buffering of the control signal may seem like
overkill and, in some cases, may seem to be in error
because certain datasheets specify the voltage level
of the control signal going into the servo as being
3V to 5V. Unfortunately, this specification isn’t
consistent (even for the same servos, including the HS-422),
and when I look at the input of servo controller chips (like
the NJM2611: www.njr.com/semicon/PDF/
NJM2611_E.pdf), the inputs are not limited to any set
value.
The buffering of the control signals prevents any
current from the servo’s electronics being driven back into
the controller, which saves power and protects the I/O pin.
The two transistors and three resistors (which can be almost
cut in half as shown below) should only cost $0.10 and
eliminate any potential issues down the road.
The circuit can be assembled onto a breadboard
connected to an Arduino as shown in Figure 8. When I put
the two together, I use the bottom red rail of the
breadboard as the Arduino’s +5V; I refer to it as “Vref” and
external (battery power, in this case) as “Vperif.” This circuit
(with two potentiometers and two servo buffers) will be
used for the example applications throughout the rest of
this article.
The 2.1 mm power plug is used to power the Arduino
from the four AA battery pack when the USB cable has
been withdrawn. Note that there isn’t a ground connection
(to avoid making a ground loop), and that the length of the
wire should be at least 10” ( 25 cm) to reach comfortably
from the breadboard to the Arduino. I use a big physical
connector and cable instead of wire to the Arduino’s Vin
pin so that it is visually obvious when it is plugged in and
interferes with plugging in the USB cable.
Once you have built the circuit, you can test it with the
Arduino application “Application_01_-_Basic_Servo_Signal”
available at the article link. This application will send a pulse
to the servo connected to the Arduino’s pin 9 that is the
intermediate position.
Regardless of how safety conscience I am, there are
more than a few applications where the Arduino’s I/O pins
provide power along with the control signal to a servo (like
in Figure 9) in an effort to minimize the wiring needed for
an application. This is marginal for a servo like the HS-422,
but actually works quite reasonably well for small low
current servos in applications where they are unlikely to
stall.
Regardless of how well it works, I still highly
recommend using the separate power supply and buffering
the input as discussed above. If you are curious, you can try
SERVO 05.2015 71
Figure 7. Proper Arduino servo connection with separate power
supply and buffered servo control signals.
Figure 8. Breadboard wiring of Arduino with separate power supply
and buffered servo control signals.