sábado, 17 de dezembro de 2022

 Braço Robótico 3D Arduino


DESCRIÇÃO

Kit Braço Robótico 3D + Servos + Parafusos + Arduino + joystick


Itens Inclusos:


1 Kit braço robótico impresso em impressora 3D;
4 Servos 9g
1 Arduino uno R3
2 Joystick

1 Base joystick
1 Kit de parafusos para montagem
1 Cabo USB
1 shield V5


Observações:
* O braço segue desmontado.

*** Dimensões: aproximadamente 15cm de altura e o braço estendido aproximadamente 20cm.

________________________________________________

Braço robótico 3D Arduino com Joystick

Neste projeto vamos aprender a montar e programar um braço robótico controlado pelo Arduino Uno e joystick. 

Para iniciar vamos carregar o código no Arduino Uno e montar o braço, o manual de montagem está disponível AQUI e o código está no final.

Obs: Caso o kit que possua seja do tipo impresso em 3D com joystick duplo no shield  veja a ligação AQUI.


Conecte o shield ao Arduino:



Carregue o código no Arduino.

O código está no final, copie o código cole no Arduino IDE e faça a carga.

Este LINK tem as instruções de como carregar um código no Arduino utilizando o Arduino IDE, o código pode ser copiado e colado na tela do Arduno IDE para ser carregado.


Monte o braço em etapas.

Importante: 

-  Conforme for montado o braço conecte os servos ao shield para testar e centralizar os servos.

- Antes de carregar o código instale a biblioteca VarSpeedServo no Arduino IDE, baixe ela AQUI.


Para conectar os servos ao  shield veja as instruções abaixo:

-  D9 do shield deve ser conectado no servo da Base;

-  D10 do shield deve ser conectado no servo da Garra;

-  D11 do shield deve ser conectado no servo da Profundidade;

-  D6  do shield deve ser conectado  no servo da Altura;

Conecte cada grupo de 3 pinos do servo as saídas do shield correspondentes.


Para conectar os joysticks ao  shield veja o desenho abaixo.


Código:

#include "VarSpeedServo.h"//Para usar a biblioteca VarSpeedServo
//Definição dos objetos servos do braço robótico
VarSpeedServo servo1;//Base
VarSpeedServo servo2;//Extensão
VarSpeedServo servo3;//Altura
VarSpeedServo servo4;//Garra
//Definição das entradas analogicas do Joytick
//Joystick Esquerdo
int potpin1 = A0;//VRy
int potpin2 = A1;//VRx
//Joystick Direito
int potpin3 = A2;//VRx
int potpin4 = A3;//VRy
//Variaveis
int val1;
int val2;
int val3;
int val4;
//Valores iniciais de posição de cada servo
static int s1 = 70;
static int s2 = 110;
static int s3 = 100;
static int s4 = 80;
/*
A função setup() é executada apenas uma vez no inicio do programa.
Emite instruções para preparar o programa antes que o loop principal
seja executado.
*/
void setup()
{
 Serial.begin(9600);//Inicia a porta serial, configura a taxa de dados para 9600bps
 //Anexa o objeto servo ao pino
 servo1.attach(9); //Base, pino digital 11
 servo2.attach(11); //Extensão, pino digital 10
 servo3.attach(6); //Altura, pino digital 9
 servo4.attach(10); //Garra, pino digital 6
 //Move todo o braco para posicao inicial
 servo1.write(70);//Base
 servo2.write(110);//Extensão
 servo3.write(100);//Altura
 servo4.write(90);//Garra
}
//A função loop()executa continuamente enquanto o Arduino estiver ligado
void loop()
{
 //Controle da base do braço
 val1 = analogRead(potpin1);//Lê o valor do pino analógico especificado(A0VRy, joystick Esquerdo)
 
 //Para direita
 if (val1 < 100)
 {
 s1 = s1 - 2;
 if (s1 <= 10)
 {
 s1 = 10;
 }
 servo1.write(s1);//Posição em graus para o servo
 delay(50);//Espera 50 milessegundos
 }
 
//Para esquerda
 if (val1 > 900)
 {
 s1 = s1 + 2;//soma
 if (s1 >= 170)
 {
 s1 = 170;
 }
 servo1.write(s1);
 delay(50);
 }
 
 // Controle da extensão do braço
 val2 = analogRead(potpin2);
 //Para trás
 if (val2 > 900)
 {
 s2 = s2 - 2;
 if (s2 <= 10)
 {
 s2 = 10;
 }
 servo2.write(s2);
 delay(50);
 }
 //Para frente
 if (val2 < 100)
 {
 s2 = s2 + 2;
 if (s2 >= 170)
 {
 s2 = 170;
 }
 servo2.write(s2);
 delay(50);
 }
 // Controle da altura do braço
 
//Abaixar o braço
 val3 = analogRead(potpin3);
 if (val3 < 100)
 {
 s3 = s3 - 2;
 if (s3 <= 10)
 {
 s3 = 10;
 }
 servo3.write(s3);
 delay(50);
 }
 //Levantar o braço
 if (val3 > 900)
 {
 s3 = s3 + 2;
 if (s3 >= 170)
 {
 s3 = 170;
 }
 servo3.write(s3);
 delay(50);
 }
 
 // Controle da garra do braço
 val4 = analogRead(potpin4);
 
 //Abrir a garra
 if (val4 < 100)
 {
 s4 = s4 - 2;
 if (s4 <= 60)
 {
 s4 = 60;
 }
 servo4.write(s4);
 delay(50);
 }
//Fechar a garra
 if (val4 > 900)
 {
 s4 = s4 + 2;
 if (s4 >= 150)
 {
 s4 = 150;
 }
 servo4.write(s4);
 delay(50);
 }
 //Exibe os valores analogicos na tela
 Serial.print(val1);
 Serial.print(" : ");
 Serial.print(val2);
 Serial.print(" : ");
 Serial.print(val3);
 Serial.print(" : ");
 Serial.print(val4);
 Serial.println();
}



_________________________________________________________________________


Após a montagem teste os comandos, mudanças podem ser feitas para tornar a operação do braço mais adequada ao usuário.

Para um funcionamento melhor um carregador de celular pode ser ligado a USB do Arduino, após a carga do código, já que a USB do computador fornece uma corrente limitada. 


quinta-feira, 6 de outubro de 2022

Carro 4wd Arduino

Nesta postagem vamos montar e programar um carro 4WD que desvia de obstáculos;



Imagem meramente ilustrativa

Para o projeto iremos utilizar:

-  Kit Chassi 4wd;

-  Arduino uno;

-  Micro servo 9G SG90;

-  Sensor ultrassônico HC-SR04; 

-  Driver motor Ponte H L298n;

-  Suporte para 4 pilhas AA;

-  Suporte Pan Tilt;

- Jumpers macho/macho;

- Jumpers macho/fêmea;

- Jumpers fêmea/fêmea;


Faça a montagem do chassi 4WD, para detalhes acesse AQUI;

Faça as ligações conforme desenho abaixo:



Obs: Se na hora de testar o carrinho as rodas tiverem rotação invertida, inverta as ligações aos pinos digitais.

Em alguns códigos de programação deve ser alterada a entrada A0 e  A1 por A1 e A2 no Arduino, verifique o desenho e o código.


Copie e cole o código no arduino no IDE e carregue o programa no arduino ou acesse o link com o código AQUI

Obs: Adicione as bibliotecas Servo.h e NewPing.h ao arduino IDE, caso não tenha;

#include <Servo.h>          //Servo motor library. This is standard library
#include <NewPing.h>        //Ultrasonic sensor function library. You must install this library

//our L298N control pins
const int LeftMotorForward = 7;
const int LeftMotorBackward = 6;
const int RightMotorForward = 4;
const int RightMotorBackward = 5;

//sensor pins
#define trig_pin A1 //analog input 1
#define echo_pin A2 //analog input 2

#define maximum_distance 250
boolean goesForward = false;
int distance = 150;

NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
Servo servo_motor; //our servo name


void setup(){

  Serial.begin(9600);

  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  
  servo_motor.attach(10); //our servo pin

  servo_motor.write(115);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop(){

  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 20){
    moveStop();
    delay(300);
    moveBackward();
    delay(400);
    moveStop();
    delay(300);
    distanceRight = lookRight();
    delay(300);
    distanceLeft = lookLeft();
    delay(300);

    if (distance >= distanceLeft){
      turnRight();
      moveStop();
    }
    else{
      turnLeft();
      moveStop();
    }
  }
  else{
    moveForward(); 
  }
    distance = readPing();
}

int lookRight(){  
  servo_motor.write(50);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
}

int lookLeft(){
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){
  
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
}

void moveForward(){

  if(!goesForward){

    Serial.println("==moveForward==");

    goesForward=true;
    
    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(RightMotorForward, HIGH);
  
    digitalWrite(LeftMotorBackward, LOW);
    digitalWrite(RightMotorBackward, LOW); 
  }
}

void moveBackward(){

  goesForward=false;

  Serial.println("==moveBackward==");

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorForward, LOW);
  
}

void turnRight(){

  Serial.println("==turnRight==");

  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorBackward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorForward, LOW);
  
  delay(500);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
 
  
  
}

void turnLeft(){

  Serial.println("==turnLeft==");

  digitalWrite(LeftMotorBackward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);

  delay(500);
  
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
}


Acione o carrinho e boa diversão.


Para comprar o Kit, acesse o link AQUI;