No Blog BRAIN da Eletrogate, já existe um tutorial sobre Braço Robótico. Mas controlado com potenciômetros.
Kit Braço Robótico MDF com Arduino
Para facilitar o controle do Braço Robótico, criei esse novo tutorial. Com Joysticks, o manuseio do braço fica bem interessante! Controlando com potenciômetros, o braço ajusta os movimentos de acordo com os valores da tensões nos Pots. Se você gira o potenciômetro, o servomotor vai movimentar-se e parar no valor PWM correspondente à tensão no Pot.
Usando Joysticks, o controle da movimentação é diferente. Se você soltar a manete do Joystick, ele volta para a posição inicial. Portanto não é possível usar a mesma programação do Braço Robótico com potenciômetros. Irei explicar detalhadamente como tudo funciona. Leia todo o tutorial até o final.
Para quem não conhece um Joystick, é um mecanismo de controle, que possui dois potenciômetros (5 K ohms) e um botão que pode ser acionado quando a manete é pressionada. Esse é um diagrama de um Joystick:
Para que o Arduino possa fazer a leitura da tensão sobre cada Joystick, ele precisa estar conectado no pino +5 V e no pino terra (GND). Assim as tensões nas portas analógicas poderão variar entre 5 e Zero Volts. O joystick com a manete liberada (posição inicial) corresponde à tensão de aproximadamente 2,5V.
Se você ainda não montou as peças do Braço Robótico, eu criei esse manual com dezenas de figuras ilustrativas, que irão facilitar bastante a montagem. Baixe o manual no link abaixo :
Manual de montagem do Braço Robótico
Recomendo que faça a montagem do Braço Robótico e dos dois Joysticks sobre uma base de madeira. Prenda as peças com parafusos. A base de madeira deve ter no mínimo 20 x 25 cm. Monte o Arduino na base do Braço Robótico (já tem furação para isso). Para facilitar a montagem, use também um Sensor Shield. Esse Sensor Shield V 5.0 deve ser montado sobre o Arduino.
Sensor Shield V5.0 para Arduino
Na fiação do servomotor da Garra sugiro montar uma extensão (três fios) , para permitir maior flexibilidade do braço.
Faça a montagem das ligações de acordo com os diagramas abaixo. Os joysticks devem ser conectados nas portas analógicas e os servomotores nas portas digitais do Arduino.
O Joystick de controle da Garra e da Base eu deixei no lado esquerdo. E o Joystick que controla a altura e a profundidade do Braço, eu deixei no lado direito. Veja no diagrama que as portas A0, A1, A2 e A3 do Arduino devem ser conectadas nos Joysticks. Não se esqueça de conectar o +5V e terra nos dois módulos de Joystick também.
Os Servomotores devem ser conectados de acordo com o diagrama abaixo:
Conecte os fios vermelhos (+VCC) do Servomotor nos pinos V do Sensor Shield. E os fios marrons (GND) nos pinos G. Os fios Laranjas (PWM) conecte-os nas portas digitais correspondentes à cada servomotor.
O servomotor que controla a Altura fica no lado esquerdo do Braço Robótico. E o servomotor que controla a Profundidade fica no lado direito. (olhando por trás do braço robótico).
Para a alimentação de todo o conjunto do Braço Robótico, use uma fonte de alimentação de 5V com a corrente mínima de 1 A. Os fios da fonte deverão ser ligados no conector azul do Sensor Shield. Atenção para a polaridade! Negativo da fonte no terra (GND) e o positivo no +5V.
Para evitar problemas de ruídos na fonte, poderá conectar também um capacitor de 1000 uF/16V no mesmo conector azul. Atenção também para a polaridade.
Ao lado do conector azul, tem um jumper. Mantenha-o conectado nos pinos.
Não use esse braço robótico, conectando o Arduino no seu computador sem usar uma fonte externa. Pois sobrecarregará o regulador de 5V do Arduino e assim danificá-lo.
Depois de tudo montado, carregue a programação do Arduino. Desenvolvi a programação, permitindo a movimentação das partes do Braço Robótico, controlada pelos joysticks. Enquanto o joystick for acionado para uma das posições, o servomotor estará se movimentando. Quando parar de acionar o joystick, o servomotor também irá parar. E ficará paralisado na posição escolhida. O controle da garra é diferente, devido à rapidez do movimento. Para manter a garra presa, por exemplo, deverá manter o joystick na posição correspondente.
Logo abaixo está o programa Sketch que eu desenvolvi para esse projeto. Se ainda não instalou a biblioteca Servo na Arduino IDE use o procedimento através da própria Arduino IDE. Clique em Sketch / Incluir Biblioteca / Gerenciar Biblioteca. Após a abertura da janela do Gerenciador de Bibliotecas, procure pela biblioteca Servo e instale-a.
// BLOG Eletrogate // Kit Braço Robótico controlado com Joysticks // https://blog.eletrogate.com/braco-robotico-com-joystick/ // Gustavo Murta 01/julho/2020 #define potGarra 0 // porta A0 Joystick esquerda POT X #define potBase 1 // porta A1 Joystick esquerda POT Y #define potAltura 2 // porta A2 Joystick direita POT X #define potProfundidade 3 // porta A3 Joystick direita POT Y int atraso = 20; // atraso de 20 milisegundos int valorGarra ; int valorBase ; int valorAltura ; int valorProfundidade; int valorGarraFinal ; int valorBaseFinal ; int valorAlturaFinal ; int valorProfundidadeFinal; #include <Servo.h> // Biblioteca Servo Servo myservoBase; // Objeto servo para controlar a base Servo myservoGarra; // Objeto servo para controlar a garra Servo myservoAltura; // Objeto servo para controlar a altura do braço Servo myservoProfundidade; // Objeto servo para profundidade a altura do braço void setup() { myservoBase.attach(9); //Associa cada objeto a um pino pwm myservoGarra.attach(10); myservoAltura.attach(11); myservoProfundidade.attach(6); Serial.begin(9600); // console serial 9600 Bps valorBaseFinal = 90; // valores usados para o controle dos servomotores valorAlturaFinal = 90; valorProfundidadeFinal = 90; } void leituraJoysticks () { valorGarra = map(analogRead(potGarra), 10, 1000, 179, 0); // leitura do Joystick POT Garra Serial.print(" Valor Garra ="); Serial.println(valorGarra); // print Valor Garra valorBase = map(analogRead(potBase), 10, 1000, 0, 179); // leitura do Joystick POT Base Serial.print(" Valor Base ="); Serial.println(valorBaseFinal); // print Valor Base valorAltura = map(analogRead(potAltura), 10, 1000, 0, 179); // leitura do Joystick POT Altura Serial.print(" Valor Altura ="); Serial.println(valorAlturaFinal); // print Valor Altura valorProfundidade = map(analogRead(potProfundidade), 10, 1000, 0, 179); // leitura do Joystick POT Profundidade Serial.print(" Valor Profundidade ="); Serial.println(valorProfundidadeFinal); // print Valor Profundidade Serial.println(); Serial.println(); // salta duas linhas } void loop() { leituraJoysticks (); // leitura dos POTs dos Joysticks myservoGarra.write(valorGarra); // comando PWM para o servomotor Garra if (valorBase > 95) // se Valor do POT Base > 95 { valorBaseFinal = valorBaseFinal + 1; // incrementa Valor Base if (valorBaseFinal > 180) valorBaseFinal = 180; // limita Valor Base máximo até 180 delay (atraso); // atraso } if (valorBase < 80) // se Valor do POT Base < 80 { valorBaseFinal = valorBaseFinal - 1; // decrementa Valor Base if (valorBaseFinal < 0) valorBaseFinal = 0; // limita Valor Base mínimo até 0 delay (atraso); // atraso } myservoBase.write(valorBaseFinal); // comando PWM para o servomotor Base if (valorAltura > 95) // se Valor do POT Altura > 95 { valorAlturaFinal = valorAlturaFinal + 1; // incrementa Valor Altura if (valorAlturaFinal > 160) valorAlturaFinal = 160; // limita Valor Base máximo até 160 delay (atraso); // atraso } if (valorAltura < 80) // se Valor do POT Altura < 80 { valorAlturaFinal = valorAlturaFinal - 1; // decrementa Valor Altura if (valorAlturaFinal < 30) valorAlturaFinal = 30; // limita Valor Base mínimo até 30 delay (atraso); // atraso } myservoAltura.write(valorAlturaFinal); // comando PWM para o servomotor Altura if (valorProfundidade > 95) // se Valor do POT Profundidade > 95 { valorProfundidadeFinal = valorProfundidadeFinal + 1; // incrementa Valor Profundidade if (valorProfundidadeFinal > 150) valorProfundidadeFinal = 150; // limita Valor Base máximo até 150 delay (atraso); // atraso } if (valorProfundidade < 80) // se Valor do POT Profundiade < 80 { valorProfundidadeFinal = valorProfundidadeFinal - 1; // decrementa Valor Profundidade if (valorProfundidadeFinal < 30) valorProfundidadeFinal = 30; // limita Valor Base Profundidade até 30 delay (atraso); // atraso } myservoProfundidade.write(valorProfundidadeFinal); // comando PWM para o servomotor Profundidade }
Você já deve saber que o servomotor gira 180 graus. Portanto o Arduino pode ajustar esse movimento entre os valores de 0 a 180 com o sinal PWM enviado para o servomotor. Como alguns servomotores do Braço Robótico não tem toda essa liberdade de movimentação de 180 graus, eu limitei algumas delas. Como no caso do servomotor Altura, os valores estão limitados entre 30 e 160 graus. Isso é importantes para não forçar os motores!
Para poder visualizar os valores do ajustes dos servomotores, os valores são enviados na console serial. Como a leitura precisa ser rápida, se quiser visualizar os valores clique em auto-rolagem para parar a listagem na console. Mas fiz isso só para você entender como funciona o controle do Braço Robótico com Joystick. Não interfere em nada no funcionamento.
Mais uma observação – inseri um atraso (delay) de 20 milisegundos durante cada avanço dos servomotores. Se você quiser a movimentação mais rápida, diminua esse valor.
Mas fica um desafio para você! Imagine uma programação automática de uma sequência de movimentos. Mas terá que fazer a conexão dos botões dos Joysticks com o Arduino.
Explicando melhor – a ideia é a seguinte. Você ajusta uma posição do Braço com o Joystick e pressiona o botão para memorizar essa posição. Assim você , vai gravando todas as movimentações do braço, pressionando o botão para cada posição. Depois de todas as movimentações gravadas, dê o comando para o Arduino executar toda a sequência! Só não fiz isso aqui no tutorial, pois é uma programação complexa e grande.
Fica para você esse desafio. Se concluir o desafio, compartilhe com a gente e você entrará para o Hall da Fama!
Site do idealizador do Projeto do Braço Robótico Me Arm: https://mearm.com/
Video com a montagem do Braço Robótico Me Arm: https://www.youtube.com/watch?v=zFBsEE7_NbQ
Se gostar ou tiver alguma dúvida, deixe um comentário!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!