Ir ao conteúdo

Arduino codigo para controlar um braço robotico com o esp32 e dualshock4


Ir à solução Resolvido por .if,

Posts recomendados

Postado

Olá amigos, estou num projeto de braço robotico com 4 servomotores, e não sei muito sobre programação.
Gostaria que alguém me fornecesse um codigo para o esp32 que controle os 4 servomotores com o dualshock4, e que imprimisse a posiçºao do servomotor no monitor serial.

Observação: tentei usar o ChatGPT, porém ele sempre que criava um codigo ele controlava os servomotores pela movimentação em tempo real do joystick e quando largava o joystick o servo ia para 90º, me ajudem por favor.

  • Membro VIP
  • Solução
Postado

Mostre o que já fez com fotos, desenhos e esquemas. Mostre o fonte criado pela IA mas o importante: mostre que entendeu 100% ele.

Servo motor geralmente é controlado por pwm. Pesquise/copie/altere algum programa com ele.

21 horas atrás, Lord258 disse:

controle os 4 servomotores com o dualshock4

Desconheço tal treco mas tente fazer 1 controle pwm apenas pra você pegar o jeito da coisa.

obs... Cliquei em dualshock4 arduino clique e aparece bastante coisa .. não li nenhuma, ok?

Postado

@.if Olá, obrigado por me tentares ajudar, ja consegui que a IA gera-se o codigo que eu queria, mesmo assim, obrigado pela a ajuda, se quiseres podes rever o codigo e tentar melhorar algo.
As ligações são bem simples, simplesmente uma fonte de 5v que da energia ao esp32 e aos servomotores, e os cabos de sinal que enviam os pulsos para os servomotores.

 

#include <PS4Controller.h>
#include <ESP32Servo.h>

// Definição dos pinos onde os servos estão conectados
#define SERVO1_PIN  18
#define SERVO2_PIN  19
#define SERVO3_PIN  21
#define SERVO4_PIN  22

// Criação dos objetos Servo
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

// Variáveis para armazenar a posição dos servos
int servo1Pos = 90; // Posição inicial
int servo2Pos = 90; // Posição inicial
int servo3Pos = 90; // Posição inicial
int servo4Pos = 90; // Posição inicial

// Definição da deadzone
const int DEADZONE = 50;

void setup() {
  Serial.begin(115200);
  
  // Inicia os servos
  servo1.attach(SERVO1_PIN);
  servo2.attach(SERVO2_PIN);
  servo3.attach(SERVO3_PIN);
  servo4.attach(SERVO4_PIN);
  
  // Define a posição inicial dos servos
  servo1.write(servo1Pos);
  servo2.write(servo2Pos);
  servo3.write(servo3Pos);
  servo4.write(servo4Pos);
  
  // Inicializa o controle PS4
  if (!PS4.begin("A0:DD:6C:10:7D:CA")) {
    Serial.println("Erro ao conectar com o controle PS4");
    while (1); // Para o programa se não conectar
  }
}

void loop() {
  // Verifica se o controle PS4 está conectado
  if (PS4.isConnected()) {
    
    // Leitura dos valores dos joysticks usando os métodos atualizados
    int lx = PS4.LStickX(); // Eixo X do joystick esquerdo
    int ly = PS4.LStickY(); // Eixo Y do joystick esquerdo
    int rx = PS4.RStickX(); // Eixo X do joystick direito
    int ry = PS4.RStickY(); // Eixo Y do joystick direito
    
    // Atualiza a posição dos servos apenas se o joystick foi movido além da deadzone
    if (ly > DEADZONE) { // Se o joystick esquerdo Y for movido para cima
      servo1Pos = constrain(servo1Pos + 3, 0, 180); // Aumenta o ângulo do Servo 1
    } else if (ly < -DEADZONE) { // Se o joystick esquerdo Y for movido para baixo
      servo1Pos = constrain(servo1Pos - 3, 0, 180); // Diminui o ângulo do Servo 1
    }
    
    if (lx > DEADZONE) { // Se o joystick esquerdo X for movido para cima
      servo2Pos = constrain(servo2Pos + 3, 0, 180); // Aumenta o ângulo do Servo 2
    } else if (lx < -DEADZONE) { // Se o joystick direito Y for movido para baixo
      servo2Pos = constrain(servo2Pos - 3, 0, 180); // Diminui o ângulo do Servo 2
    }

    if (ry > DEADZONE) { // Se o joystick direito Y for movido para a direita
      servo3Pos = constrain(servo3Pos + 3, 0, 180); // Aumenta o ângulo do Servo 3
    } else if (ry < -DEADZONE) { // Se o joystick esquerdo X for movido para a esquerda
      servo3Pos = constrain(servo3Pos - 3, 0, 180); // Diminui o ângulo do Servo 3
    }
    
    if (rx > DEADZONE) { // Se o joystick direito X for movido para a direita
      servo4Pos = constrain(servo4Pos + 3, 0, 180); // Aumenta o ângulo do Servo 4
    } else if (rx < -DEADZONE) { // Se o joystick direito X for movido para a esquerda
      servo4Pos = constrain(servo4Pos - 3, 0, 180); // Diminui o ângulo do Servo 4
    }
    
    // Move os servos para a nova posição
    servo1.write(servo1Pos);
    servo2.write(servo2Pos);
    servo3.write(servo3Pos);
    servo4.write(servo4Pos);
    
    // Imprime as posições no monitor serial
    Serial.print("Servo 1: "); Serial.print(servo1Pos);
    Serial.print(" | Servo 2: "); Serial.print(servo2Pos);
    Serial.print(" | Servo 3: "); Serial.print(servo3Pos);
    Serial.print(" | Servo 4: "); Serial.println(servo4Pos);
    
    delay(50); // Delay para suavizar a leitura
  }
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!