diciembre 20, 2019

4RAYA-Prueba de los nuevos servos

Written by

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.

Category : 4 EN RAYA ROBÓTICO

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Proudly powered by WordPress and Sweet Tech Theme