- Descrição: O Interruptor Óptico (Fototransistor) TCST2103 é um componente…
Como usar com Arduino – Servo Motor MG946R
– Descrição:
O Servo Motor MG946R tem como principais características o alto torque e resistência. É um componente essencial para projetos de robótica, mecatrônica e diversos outros projetos. Na robótica, o servo motor é responsável por movimentar braços, pernas e mãos dos robôs. No automodelismo o servo motor é utilizado para virar as rodas dianteiras dos carrinhos e no aeromodelismo é utilizado para controlar os flaps das asas dos aviões.
Este Servo Motor MG946R possui engrenagens de metal e o mesmo tem um torque de 10,5 Kg/cm em 4,8VDC e de 13 Kg/cm em 6VDC. As conexões deste servo motor são compatíveis com os padrões Futaba, JR, Hitec ,GWS, Cirrus, Blue Bird, Blue Arrow, Corona, Berg, Spektrum e outros. O modelo MG946R é uma versão atualizada do modelo MG945R.
É importante ressaltar que servos motores de rotação contínua (MG946R, por exemplo) não suportam comandos que especifiquem uma posição de parada do eixo. O Arduino não consegue identificar em qual posição o servo de rotação contínua se encontra. Logo, o valor escrito no pino definirá a velocidade com que o eixo irá se movimentar em uma direção. Caso seja escrito o valor 0 no pino, o eixo irá se mover em sentido horário com velocidade máxima. Escrevendo 180 no pino, o eixo irá se mover em sentido anti-horário na máxima velocidade. Por fim, se escrever um valor próximo de 90 (de 87 até 97), o eixo vai permanecer sem nenhum movimento.
– Especificações e características:
– Modelo: MG946R
– Tensão de operação: 4,8 – 6,6VDC
– Tipo de engrenagem: metálica
– Torque: 10,5 Kg/cm (4,8VDC) / 13 Kg/cm (6VDC)
– Velocidade de operação: 0,20s/60º (4,8VDC) / 0,17s/60º (6VDC)
– Temperatura de operação: 0º a 55º celsius
– Modulação: analógica
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário movimentar partes de um robô, movimentar um braço robótico, virar as rodas dianteiras de um carrinho, controlar flaps das asas de aviões (aeromodelismo) e etc.
– Proposta da prática:
Utilizar o Servo Motor MG946R em conjunto com o Arduino e através de dois botões controlar o sentido de giro do eixo do motor.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Servo Motor MG946R
01 – Módulo Regulador de Tensão Ajustável DC-DC LM317
01 – Fonte DC 9V 1A Bivolt Chaveada
02 – Chave Táctil / Push Button
01 – Protoboard
08 – Cabos Jumper macho-macho
OBS: motores em geral consomem uma corrente maior que o Arduino pode fornecer. Portanto, o ideal é que alimente o motor externamente para garantir o perfeito funcionamento. Por este motivo foi utilizado o regulador de tensão LM317, onde foi aplicado 9VDC na entrada do regulador e a saída foi ajustada para 6VDC. Caso esteja utilizando o LM317, recomendamos que ligue um multímetro na saída e ajuste o trimpot do módulo até encontrar 6VDC. Se você possuir outro modelo de regulador de tensão que forneça 6VDC, poderá utilizar também. Lembre-se também de comutar o GND do regulador de tensão com o GND do Arduino.
– Esquema de ligação da prática:
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <Servo.h> //INCLUSÃO DA BIBLIOTECA const int pinoServo = 9; //PINO DIGITAL UTILIZADO PELO SERVO const int pinoBotaoHor = 10; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON (SENTIDO HORÁRIO) const int pinoBotaoAnt = 11; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON (SENTIDO ANTI-HORÁRIO) Servo s; //OBJETO DO TIPO SERVO void setup() { pinMode(pinoServo, OUTPUT); //DEFINE O PINO COMO SAÍDA pinMode(pinoBotaoHor, INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA / "_PULLUP" É PARA ATIVAR O RESISTOR INTERNO //DO ARDUINO PARA GARANTIR QUE NÃO EXISTA FLUTUAÇÃO ENTRE 0 (LOW) E 1 (HIGH) pinMode(pinoBotaoAnt, INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA / "_PULLUP" É PARA ATIVAR O RESISTOR INTERNO //DO ARDUINO PARA GARANTIR QUE NÃO EXISTA FLUTUAÇÃO ENTRE 0 (LOW) E 1 (HIGH) s.attach(pinoServo); //ASSOCIAÇÃO DO PINO DIGITAL AO OBJETO DO TIPO SERVO } void loop(){ if(digitalRead(pinoBotaoHor) == LOW){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ s.write(0); //ESCREVE 0 NO PINO (VELOCIDADE MÁXIMA NO SENTIDO HORÁRIO) }else{ //SENÃO, FAZ if(digitalRead(pinoBotaoAnt) == LOW){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ s.write(180); //ESCREVE 180 NO PINO (VELOCIDADE MÁXIMA NO SENTIDO ANTI-HORÁRIO) }else{ if((digitalRead(pinoBotaoHor) == HIGH) && (digitalRead(pinoBotaoAnt) == HIGH)){ //SE A LEITURA DO PINO //pinoBotaoHor FOR IGUAL A HIGH E A LEITURA DO pinoBotaoAnt FOR IGUAL A HIGH, FAZ s.write(90); //ESCREVE 90 NO PINO (EIXO PERMANECE PARADO) } } } } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Componentes Passivos – Resistor – Parte 1
Próxima postagem: Como usar com Arduino – Sensor (Detector) de Chuva
Olá, estou querendo usar uma mini ventoinha para que se ative somente quando houver presença usando o sensor ultrassônico HC-SR04, como devo conectá-los no arduino uno? Se puder me ajudar com o código também desde já agradeço!
Abraços.
boa tarde, gostaria de saber se é possivel incluir mais dois servo motor nessa logica com dois botões, ou seja, uma vez que o botão for acionado, acionará 3 motores em vez de apenas 1.
E´possível?
Olá Renilson.
Agradeço pelo comentário!
Sim, é possível.
Olá, eu preciso implementar um avanço sequencial da posição do motor, ou seja: a cada vez que o botão de avanço horário for pressionado, o servo movimenta-se por 10º; utilizando o botão do outro sentido eu possa retornar a cada uso do botão, 10º. Utilizando FOR dentro dos IF/ELSE deste seu sketch, há como fazer esse movimento? Obrigado.