Raspberry Pi GPIO driving Servo
I have experimented with GPIO on the Raspberry Pi, just turning an LED on and off here. But since then Ben Croston has improved the RPi GPIO Python library to do most of the work in C and I can confirm that it is a lot faster. Driving servo motors requires precise timing, so I decided to see how the Pi would perform this task.
Here is a video of the servo in action. It is set to stay on the left for a few seconds, then move to the middle position, then swing all the way to the right, then scoot back to the left.
I did not like the idea of using the GPIO pin to directly drive the control signal for the servo. You may get away with it, but I wouldn’t risk it, and it may not work as the GPIO pins are 3V where as the servo expects a 5V control signal.
The transistor I used was a BC548, but any similar NPN transistor (like the 2N2222) should do the trick.
To build this prototype, I used Adafruit’s Cobbler. This very handy little gadget allows you to link the GPIO connector to breadboard.
You might want to open this up to full size to see what’s going on.
The transistor is in the bottom three rows. The bottom most row being connected to GND on the cobbler, the base connection (second row up) is linked by a 1kΩ resistor to #17 on the cobbler.
An external 5V power supply was used to provide the power to the servo. I tried using the 5V connection from the servo, but even with big (2200µF) and small capacitors across the supply, the load from the servo was enough to crash the Pi. This external power supply was connected to the red and green jumper leads to the left.
A second 1kΩ resistor is connected from the external +5V to the collector of the transistor (third row up) using another 1kΩ resistor.
The connections to the servo are GND, +5V (from the external supply) and the control signal from the collector of the transistor (yellow lead).
For more detail: Raspberry Pi GPIO driving Servo
Current Project / Post can also be found using:
- raspberry servo drive