How to setup the Raspberry Pi to interface with multiple servos utilizing a 16 channel servo controller along with Adafruit’s Servo Driver Library.
*Note – Servo Controller input voltage should be 5-6 volts instead of the suggested 9 volts
PARTS:
RPI 3 – https://amzn.to/2VA9pQY
4 Amp Power Adapter – https://amzn.to/2CTptWu
16GB micro SD – https://amzn.to/2SFMwd3
16-Channel Servo Controller: https://amzn.to/2CasoIK
6 x 1.5V AA Battery Holder: https://amzn.to/2LW10mq
5.5×2.1mm Male+Female DC Power Socket: https://amzn.to/2VA5ZNW
120 pcs jumper cable: https://ebay.to/2VAb9cY
9g Servos: https://amzn.to/2VAvcrF
SCHEMATIC:
MODIFIED CODE:
Original Git Project: https://github.com/adafruit/Adafruit_Python_PCA9685
import time # Simple demo of of the PCA9685 PWM servo/LED controller library. # This will move channel 0 from min to max position repeatedly. # Author: Tony DiCola # License: Public Domain from __future__ import division import time # Import the PCA9685 module. import Adafruit_PCA9685 # Uncomment to enable debug output. #import logging #logging.basicConfig(level=logging.DEBUG) # Initialise the PCA9685 using the default address (0x40). pwm = Adafruit_PCA9685.PCA9685() # Alternatively specify a different address and/or bus: #pwm = Adafruit_PCA9685.PCA9685(address=0x41, busnum=2) # Configure min and max servo pulse lengths servo_min = 150 # Min pulse length out of 4096 servo_max = 600 # Max pulse length out of 4096 servo_mid = 350 # Helper function to make setting a servo pulse width simpler. def set_servo_pulse(channel, pulse): pulse_length = 1000000 # 1,000,000 us per second pulse_length //= 60 # 60 Hz print('{0}us per period'.format(pulse_length)) pulse_length //= 4096 # 12 bits of resolution print('{0}us per bit'.format(pulse_length)) pulse *= 1000 pulse //= pulse_length pwm.set_pwm(channel, 0, pulse) # Set frequency to 60hz, good for servos. pwm.set_pwm_freq(60) print('Moving servo on channel 0, press Ctrl-C to quit...') while True: # Move servo on channel O between extremes. pwm.set_pwm(0, 0, servo_min) time.sleep(1) pwm.set_pwm(0, 0, servo_max) time.sleep(1) pwm.set_pwm(1, 0, servo_min) time.sleep(1) pwm.set_pwm(1, 0, servo_mid) time.sleep(1)