Braço robótico com Módulo Controlador PWM PCA9685

Imagem de apresentação do post sobre o braço robotico
Font Size

Olá, caro(a) leitor(a)! Hoje vamos ver como é possível utilizar o Módulo Controlador PWM PCA9685 para facilitar a implementação de um braço robótico DIY que é controlado por 4 servomotores!

Imagem 1 – Módulo PCA9685

Imagem 2 – Braço Robótico DIY

Materiais Utilizados:

Se você procura detalhes da montagem do braço, cheque nossa série de posts direcionados a esse Kit

Por que utilizar o PCA9685 nesse projeto ?

De forma geral, controlar múltiplos servomotores pode ser um pouco desafiador, principalmente no que diz respeito à alimentação e conexões, pois cada servo deve ser ligado à fonte e a uma porta PWM do microcontrolador.

Usando o PCA9685, você pode otimizar bastante as conexões, pois pode ligar todos os servomotores  diretamente a ele dessa forma:

Imagem 3 – Conectando um servo ao PCA9685

 

A alimentação também é facilitada, e além disso, você pode anexar o sistema  ao microcontrolador utilizando apenas 2 portas lógicas para controlar todos os servomotores!

Conhecendo o módulo:

O PCA9685 é um controlador de PWM que tem design especializado para lidar com servos, ele utiliza o protocolo I2C, e assim, pode usar apenas uma porta SDA  e uma SCL para controlar não somente os 4 necessários para esse projeto, mas até 16 servomotores diferentes!

Imagem 4 – Ligações do Módulo em um Arduino Nano

 

Lembre-se de verificar quais são as portas SDA e SCL no seu microcontrolador, a imagem acima se refere às conexões no Arduino Nano.

Você pode ligar o pino VCC  à porta 5V do controlador, pois ele não servirá para alimentar o servos, apenas o módulo e seu microchip interno. Para isso você precisa de uma fonte de energia que mantenha entre 2A e 3A de corrente, e ligá-la nessa parte do módulo:

Imagem 5 – Canais de alimentação dos Servomotores

 

A faixa de corrente mencionada de 2A a 3A é suficiente para operar 4 servos, pois cada um deles consome entre 250mA a 650mA. Já em um projeto com mais servos, se faz necessário o uso de uma fonte mais potente.

Preparando o código:

Para utilizar o componente, você precisa de 2 bibliotecas disponíveis no Arduino IDE, são elas:

  • Adafruit PWM Servo Driver Library (deve ser instalada, serve para lidar com o módulo)
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// Criar uma instância do controlador PWM
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

Em seguida, é preciso definir a faixa dos pulsos PWM

#define SERVOMIN  150 // Valor mínimo para o servo
#define SERVOMAX  600 // Valor máximo para o servo

Esses valores correspondem à duração dos pulsos, ou seja, definimos que ao receber 150 no PWM, o servo ficará na posição de 0°, se receber 600, fará o giro de 180° (ou o máximo que o seu servo permitir), e qualquer outro ângulo será expresso por um valor dentro desse intervalo.

Setup

void setup() {

  // Iniciar o driver PWM
  pwm.begin();

  // Ajustar a frequência para 60 Hz
  pwm.setPWMFreq(60);
}

O setup é bem simples para o Driver, basta iniciá-lo e declarar a frequência do sinal como 60Hz, pois é um valor ideal para comunicação com servos

Função de controle

 

  pwm.setPWM(0, 0, 375);

Veja como é uma função simples! Basta adicionar 3 parâmetros a ela, o primeiro define o canal, ou seja, qual dos servos você quer controlar no nosso caso será um número entre 0 e 3, pois vamos inserir os servos nos primeiros canais, como na imagem a seguir:

Imagem 6 – Servos Conectados à placa

 

Imagem 7 – Correspondência dos canais com cada servomotor

 

O segundo parâmetro é o início do pulso, portanto iremos sempre utilizar 0 nessa aplicação, o que nos leva ao terceiro e último parâmetro, o valor correspondente ao ângulo desejado, que irá influenciar o braço da seguinte forma:

Imagem 8 – Esquemático da movimentação do braço

E pronto!!!

Agora que você já sabe como interagir com cada um dos servos usando o módulo, assim como conhece o mapeamento dos movimentos, já pode utilizar o braço normalmente, mapeando seus movimentos com potenciômetros, joysticks, ou conforme preferir.

 

Por último, vamos deixar o código de exemplo para que o braço realize a animação do segundo vídeo:

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

// Criar uma instância do driver PWM
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

#define SERVOMIN  150 // Valor mínimo para o servo
#define SERVOMAX  600 // Valor máximo para o servo
int pwmValue = SERVOMIN;

void setup() {
  // Inicializar o driver PWM
  pwm.begin();

  // Ajustar a frequência para 60 Hz
  pwm.setPWMFreq(60);
}

void loop() {
//posição inicial
  pwm.setPWM(0, 0, 150);
  delay(1000);
  pwm.setPWM(1, 0, 375);
  delay(1000);
  pwm.setPWM(2, 0, 375);
  delay(1000);
  pwm.setPWM(3, 0, 600);
  delay(1000);
//vira para frente
  pwm.setPWM(0, 0, 375);
  delay(1000);
  //balança
  pwm.setPWM(2, 0, 480);
  delay(500);
  pwm.setPWM(2, 0, 375);
  delay(500);
  pwm.setPWM(2, 0, 480);
  delay(500);
  pwm.setPWM(2, 0, 375);
  delay(500);
  pwm.setPWM(2, 0, 480);
  delay(500);
  pwm.setPWM(2, 0, 375);
  delay(1000);
  //abre e fecha a garra
  pwm.setPWM(3, 0, 150);
  delay(1000);
  pwm.setPWM(3, 0, 600);
  delay(1000);
  //ao final ele volta à posição inicial
}

Até a próxima…

Obrigado pela leitura e aproveite para contar pra gente o que você achou, nos comentários abaixo!!!

 

Posts relacionados

Aprenda a utilizar o sensor de tensão com Arduino

por autocore
8 anos ago

Aprendendo a utilizar teclado membrana com Arduino

por autocore
8 anos ago

Conheça a ESP32 Base Board

por Bruno Raniere
3 anos ago
Sair da versão mobile