Written by admin
Con los nuevos materiales montados, vamos a probar su funcionamiento. Conectamos los cables a la controladora, conectamos los servos y cargamos un programa de prueba.
// Hace un barrido de todos los ejes del brazo, en orden
// Versión 3 con placa controladora de servos SPI
/***************************************************
This is an example for our Adafruit 16-channel PWM & Servo driver
Servo test - this will drive 8 servos, one after the other on the
first 8 pins of the PCA9685
Pick one up today in the adafruit shop!
------> http://www.adafruit.com/products/815
These drivers use I2C to communicate, 2 pins are required to
interface.
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
// Dirección por defecto 0x40
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
#define SERVOMIN 150 // This is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX 600 // This is the 'maximum' pulse length count (out of 4096)
#define USMIN 600 // This is the rounded 'minimum' microsecond length based on the minimum pulse of 150
#define USMAX 2400 // This is the rounded 'maximum' microsecond length based on the maximum pulse of 600
#define SERVO_FREQ 50 // Analog servos run at ~50 Hz updates
// Contador de eje
uint8_t servonum = 0;
void setup() {
Serial.begin(9600);
Serial.println("Prueba de barrido de ejes");
pwm.begin();
pwm.setOscillatorFrequency(27000000); // The int.osc. is closer to 27MHz
pwm.setPWMFreq(SERVO_FREQ); // Analog servos run at ~50 Hz updates
delay(10);
}
//--------------------------------------------------------------------------------
void loop()
{
// Drive each servo one at a time using setPWM()
Serial.println(servonum);
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++)
{
pwm.setPWM(servonum, 0, pulselen);
delay(5);
}
delay(500);
for (uint16_t pulselen = SERVOMAX; pulselen > SERVOMIN; pulselen--)
{
pwm.setPWM(servonum, 0, pulselen);
delay(5);
}
delay(500);
servonum++;
if (servonum > 5) servonum = 0;
}
Tenemos el siguiente resultado:
El movimiento parece fluido, aunque el ángulo de rotación no llega a 180 grados. Probaremos a cambiar algunos parámetros, sobre todo para el eje 1, que necesita una gran apertura.
Deja una respuesta