Ks0258 keyestudio 16-channel Servo Motor Drive Shield: Difference between revisions
Keyestudio (talk | contribs) No edit summary |
Keyestudio (talk | contribs) |
||
(8 intermediate revisions by the same user not shown) | |||
Line 39: | Line 39: | ||
*Copy and paste the code below to [http://wiki.keyestudio.com/index.php/How_to_Download_Arduino_IDE Arduino IDE ]. <br> | *Copy and paste the code below to [http://wiki.keyestudio.com/index.php/How_to_Download_Arduino_IDE Arduino IDE ]. <br> | ||
*Or [https://drive.google.com/open?id=1YDzJsMsh73CfSdYTp9wnSdedQanG6fzj click here ]to download the code. <br> | *Or [https://drive.google.com/open?id=1YDzJsMsh73CfSdYTp9wnSdedQanG6fzj click here ]to download the code. <br> | ||
*[https://drive.google.com/open?id=1uSpbRoHXHS3WPgWmKU0ex4NOjDMh0Z5j Click here] to download the libraries ''Adafruit_PWMServoDriver.h'' | *[https://drive.google.com/open?id=1uSpbRoHXHS3WPgWmKU0ex4NOjDMh0Z5j Click here] to download the libraries ''Adafruit_PWMServoDriver.h'' <br> | ||
'''Note:''' Before compile the code, do remember to add the libraries inside the libraries folder of Arduino IDE. | |||
<pre> | <pre> | ||
Line 47: | Line 47: | ||
PWM test - this will drive 16 PWMs in a 'wave' | PWM test - this will drive 16 PWMs in a 'wave' | ||
The Servo Shield uses I2C to communicate, 2 pins are required to | |||
interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4 | interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4 | ||
Line 72: | Line 72: | ||
pwm.begin(); | pwm.begin(); | ||
pwm.setPWMFreq( | pwm.setPWMFreq(50); //maximum is 1600 | ||
// save I2C bitrate | // save I2C bitrate | ||
uint8_t twbrbackup = TWBR; | //uint8_t twbrbackup = TWBR; | ||
// must be changed after calling Wire.begin() (inside pwm.begin()) | // must be changed after calling Wire.begin() (inside pwm.begin()) | ||
TWBR = 12; // upgrade to 400KHz! | //TWBR = 12; // upgrade to 400KHz! | ||
} | } | ||
Line 83: | Line 83: | ||
void loop() { | void loop() { | ||
// Drive each PWM in a 'wave' | // Drive each PWM in a 'wave' | ||
for (uint16_t i= | // "safe" limits of 200 and 400 are used here to protect servos with undetermined end stop points | ||
for (uint16_t i=200; i<400; i += 4) { | |||
for (uint8_t pwmnum=0; pwmnum < 16; pwmnum++) { | for (uint8_t pwmnum=0; pwmnum < 16; pwmnum++) { | ||
pwm.setPWM(pwmnum, 0, | pwm.setPWM(pwmnum, 0, i); | ||
} | |||
delay(2); | |||
} | } | ||
} | } | ||
</pre> | </pre> | ||
<br> | <br> | ||
Line 104: | Line 103: | ||
<br> | <br> | ||
==Resources == | ==Resources == | ||
'''Download | '''Download libraries and code: '''<br> | ||
https:// | |||
https://fs.keyestudio.com/KS0258 | |||
<br> | <br> | ||
==Get One Now == | ==Get One Now == | ||
'''Official Website | *[https://www.keyestudio.com/keyestudio-16-channel-servo-motor-drive-shield-for-arduino-p0339.html '''Official Website'''] | ||
*[https://www.aliexpress.com/store/product/Keyestudio-16-channel-Servo-Motor-Drive-Shield/1452162_32830961097.html?spm=2114.12010612.8148356.64.1e95276fWVKZK9 Shop on Aliexpress] | |||
*[https://www.ebay.com/itm/Keyestudio-16-Channel-12-bit-PCA9685-Servo-Motor-Drive-Module-Board-for-Arduino/132746581592?hash=item1ee8501658:g:hyYAAOSwUC1bV0NP Shop on eBay ] | |||
*[https://www.amazon.com/KEYESTUDIO-16-channel-12-bit-Shield-Arduino/dp/B0797JK4RW Shop on Amazon] | |||
[[Category: Shield]] | [[Category: Shield]] |
Latest revision as of 11:16, 22 December 2023
Introduction
When we are doing robot experiments, it needs to use multiple PWM ports to drive the servo motor, however, the commonly-used Arduino UNO R3 only has 6 PWM ports, really not enough. This allows you to use this expansion board, which is directly stacked on the Arduino UNO R3 board. It can drive up to 16 servos and use I2C input, occupying A4 and A5 pins of UNO.
The shield also comes with PCB double-sided holes, which can be used to solder with components to build up prototyping circuits.
Specifications
- I2C input, controlling 16-channel PWM output
- Servo power independent input V+, up to 6V.
- Logic signal and logic power independent output 3-5V
- Frequency: 40-1000Hz
- Channels: 16-channel
- Resolution: 12-bit
Details
- Dimensions: 69mm x 54mm x 24mm
- Weight: 20g
Interface Explanation
Simple Hookup
Simply stack the shield onto UNO R3 board .
Sample Code
- Copy and paste the code below to Arduino IDE .
- Or click here to download the code.
- Click here to download the libraries Adafruit_PWMServoDriver.h
Note: Before compile the code, do remember to add the libraries inside the libraries folder of Arduino IDE.
/*************************************************** This is an example for our keyestudio 16-channel PWM & Servo driver PWM test - this will drive 16 PWMs in a 'wave' The Servo Shield uses I2C to communicate, 2 pins are required to interface. For Arduino UNOs, thats SCL -> Analog 5, SDA -> Analog 4 keyestudio invests time and resources providing this open source code, please support keyestudio and open-source hardware by purchasing products from keyestudio ! ****************************************************/ #include <Wire.h> #include <Adafruit_PWMServoDriver.h> // called this way, it uses the default address 0x40 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); // you can also call it with a different address you want //Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41); void setup() { Serial.begin(9600); Serial.println("16 channel PWM test!"); // if you want to really speed stuff up, you can go into 'fast 400khz I2C' mode // some i2c devices dont like this so much so if you're sharing the bus, watch // out for this! pwm.begin(); pwm.setPWMFreq(50); //maximum is 1600 // save I2C bitrate //uint8_t twbrbackup = TWBR; // must be changed after calling Wire.begin() (inside pwm.begin()) //TWBR = 12; // upgrade to 400KHz! } void loop() { // Drive each PWM in a 'wave' // "safe" limits of 200 and 400 are used here to protect servos with undetermined end stop points for (uint16_t i=200; i<400; i += 4) { for (uint8_t pwmnum=0; pwmnum < 16; pwmnum++) { pwm.setPWM(pwmnum, 0, i); } delay(2); } }
Test Result
Done uploading the above code to UNO R3. Then connect 16 servo motors shown below, finally you should see 16 servos rotate successively.
Resources
Download libraries and code:
https://fs.keyestudio.com/KS0258