Início
/
Projetos Arduino
/
Projetos Squids
/
Intermediário
/
I22 - Como Controlar 2 Micro Servos Motores 9g com Joystick e Arduino
I22 - Como Controlar 2 Micro Servos Motores 9g com Joystick e Arduino
Angelo Luis Ferreira | 18/05/2023
Acessos: 4.456
Intermediário - Projeto 22
Controlando servo motores com o módulo Joystic KY-023 e Arduino
Objetivo
Neste tutorial, nosso objetivo é mostrar como controlar dois micros servos motores 9g utilizando um módulo de joystick KY-023 e programação através da plataforma Arduino. Vamos simular um sistema "pan tilt", onde o primeiro servo motor será responsável pelo movimento horizontal de 180º (pan) e o segundo servo motor controlará o movimento vertical de 180º (tilt).
Definições
1. Pan Til: O sistema "pan tilt" é amplamente utilizado em câmeras fotográficas e câmeras de vídeo para controlar os movimentos da lente. Ele consiste em:
1.1. Pan horizontal (Pan): Esse movimento permite que a câmera gire em torno de seu próprio eixo na horizontal.
1.2. Pan vertical (Tilt): Esse movimento permite que a câmera gire em torno de seu próprio eixo na vertical.
Obs.: (Pan) significa visão panorâmica.
2. Módulo Joystick 3 eixos (modelo KY-023): É um módulo eletrônico que trabalha como um direcional analógico para controlar diversos aparelhos, componentes e sistemas robóticos que operam com informações de posicionamento cartesiano nos eixos x e y, e ainda um botão de pressão no eixo z.

3. Micro servo motor 9g: É um micro atuador eletromecânico que apresenta rotação do seu eixo proporcional ao comando emitido por um sinal digital, que pode ser por um microcontrolador, como pela placa Arduino, por exemplo. Portanto, com um micro servo motor é possível controlar a posição e a velocidade de rotação do seu eixo com precisão. Por estas características, os servos motores são muito utilizados em projetos de robótica e mecatrônica.

Referências
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.
"refletância", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2020,
https://dicionario.priberam.org/reflet%C3%A2ncia [consultado em 04-08-2020].
Relação entre o fluxo de radiação que incide numa superfície e o fluxo de radiação que é .refletido.
Aplicação
Para fins didáticos e uso com câmeras e projetos para sistemas robóticos.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
 |
No mínimo utilizar protoboard com 400 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
 |
|
Micro Servo Motor |
Micro Servo 9g SG90
|
2 |

|
Voltagem de Operação 3,0 - 7,2V Ângulo de rotação 180 graus Velocidade 0,12 seg/60Graus (4,8V) sem carga Torque 1,2 kg.cm (4,8V) e 1,6 kg.cm (6,0V) Temperatura de Operação -30C ~ +60C Tipo de Engrenagem Nylon Tamanho cabo 245mm Dimensões 32 x 30 x 12mm Peso 9g
(datasheet)
|
Módulo Joystick 3 eixos |
Módulo JoystickKY-023 |
1 |
 |
- Tensão de Operação: 3,3-5V - Modelo: KY-023 - Fácil instalação: 4 Furos - Dimensões: 3.7 x 2.5 x 3.2cm - Peso: 15g
Sinal de saída (Eixo X e Y): Saída analógica; Sinal de saída (Eixo Z): Sinal digital (0 ou 5V);
Datasheet: Módulo Joystick 3 eixos
|
Suporte Pan Tilt (opcional) |
Suporte Pan Tilt plástico (opcional)
|
1 |
 |
Suporte plástico para sistema Pan Tilt Deverão ser utilizados 2 micro servos motores 9G como atuadores
S1 - Montagem Suporte Pan Tilt
|
Arduino UNO |
Arduino UNO R3 |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da energia elétrica enquanto você monta o circuito.

Atenção
1. A montagem do módulo micro servo motor 9g SG90 deve seguir a configuração abaixo:
- Cabo marrom (ou preto em algumas marcas) - Deve ser conectado ao pino GND do Arduino ou ao polo negativo de uma fonte de alimentação externa
- Cabo vermelho - Deve ser conectado a um pino 5V do Arduino ou ao polo positivo de uma fonte de alimentação externa
- Cabo laranja - Deve ser conectado a um pino digital do Arduino configurado como saída. No projeto, utilizamos o pino 9 do Arduino para o motor 1 (motor pan - horizontal) e o pino 10 para o motor 2 (motor tilt - vertical).

1.1. Utilize "jumpers" macho-macho para fazer as conexões com o Arduino.
1.2. No projeto usamos as seguintes conexões:
Micro Servo Motor |
Pino Digital Arduino |
(Servo 1) base (pan) |
9 |
(Servo 2) inclinação (tilt) |
10 |
2 2. Para a montagem do módulo JoystickKY-023 no circuito faça a conexão como mostra a figura abaixo:

Pinos do Arduino utilizados no projeto
Joystick |
Descrição |
Arduino
|
GND |
Conexão com o GND |
GND |
Vcc |
Conexão com o pino 5V |
Vcc (5V) |
VRx |
Eixo x - porta analógica (INPUT) |
A0 |
VRy |
Eixo y - porta analógica (INPUT) |
A1 |
SW |
Push button - sinal digital (INPUT_PULLUP) |
2 |
2.1. Veja abaixo a montagem do módulo Joystick no Arduino, conforme determinamos neste projeto:

2.2. ATENÇÃO: A figura abaixo mostra o posicionamento dos eixos perpendiculares x, e y, cuja a posição de referência do joystick é com os pinos conexão para baixo. Observe que quando o joystick fica nesta posição de referência, o eixo y irá controlar o movimento horizontal do bastão e o eixo x irá controlar o movimento vertical do bastão.

3. Se desejar utilizar o suporte Pan Tilt para Arduino, acesse o link e veja como montá-lo: S1 - Montagem Suporte Pan Tilt controlado com Arduino e Micro Servos Motores.
4. A montagem do nosso projeto foi realizada em um protoboard 400 pontos:

Testando o módulo Joystick KY-023
1. Para verificarmos se a montagem do circuito está correta e o módulo joystick funcionando, rode o sketch abaixo e verifique:
1.1. Copie o código e cole no IDE do Arduino. Com o Arduino conectado no PC, rode o programa.
int joyX = A0; // pino analógico do eixo X
int joyY = A1; // pino analógico do eixo Y
int joyButton = 2; // pino digital do botão de pressão
void setup() {
Serial.begin(9600); // inicia comunicação serial
pinMode(joyX, INPUT); // entrada leitura eixo X joystick
pinMode(joyY, INPUT); // entrada leitura eixo y joystick
pinMode(joyButton, INPUT_PULLUP); // entrada resistor interno pull up pusch button
}
void loop() {
int x = analogRead(joyX); // faz a leitura do eixo x (0 a 1023) - analógico
int y = analogRead(joyY); // faz a leitura do eixo y (0 a 1023) - analógico
int button = digitalRead(joyButton); // faz a leitura do eixo z (0 ou 1) - digital
Serial.print("X: ");
Serial.print(x);
Serial.print(", Y: ");
Serial.print(y);
Serial.print(", Button: ");
Serial.println(button);
delay(100);
}
1.2. Abra o Monitor Serial do IDE do Arduino.
1.3. Movimente o bastão (botão) do joystick em várias posições: para cima, para baixo, para a esquerda, para a direita e nas diagonais, verificando os valores apresentados no monitor serial.

1.4. Compare os o valores com a imagem abaixo. ATENÇÃO: Tome como referência a posição dos pinos de conexão do módulo joystick.

Código do Projeto (Sketch)
1) Faça o dowload e abra o arquivo projetoI22.ino no IDE do Arduino: DOWNLOAD - projetoI22.ino
Se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* I22: Controlando 2 micro-servos motores com joystick - Arduino
* Autor: Angelo Luis Ferreira
* Data: 25/05/2023
*
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <Servo.h>
Servo servo1; // Cria um objeto servo1
Servo servo2; // Cria um objeto servo2
int portPan; // Cria uma variável para armazenar dados do Joystick
int portTilt; // Cria uma variável para armazenar dados do Joystick
byte servo1Pin = 9; // Pino digital 9 conectado no servo1 (base - pan)
byte servo2Pin = 10; // Pino digital 10 conectado no servo2 (inclinação - tilt)
void setup(){
servo1.attach(servo1Pin); // Inicializa servo1
servo1.write(90); // Inicia o servo1 em 90 graus
servo2.attach(servo2Pin); // Inicializa servo2
servo1.write(90); // Inicia o servo2 em 90 graus
}
void loop(){
portPan = analogRead(A1); // Pino y do Joystick para receber dados
portTilt = analogRead(A0); // Pino x do Joystick para receber dados
// Faz um mapeamento dos dados recebidos
portPan = map(portPan, 0, 1023, 1, 180);
portTilt = map(portTilt, 0, 1023, 1, 180);
// O servo se movimenta de acordo com a posição do Joystick
servo1.write(portPan);
servo2.write(portTilt);
delay(15); // Tempo leitura dos pinos analógicos A0 e A1
}
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, os 2 microcontroladores deverão ficar na posição de 90º.
2. Ao movimentar o eixo do joystick no sentido Y da figura abaixo, movimentaremos o servo motor 1 (base - pan).
2.1. Vamos tomar como referência o módulo joystick na posição em que os pinos de conexão fiquem para baixo (como mostra a imagem abaixo)
3. Ao movimentar o eixo do joystick no sentido X, movimentaremos o servo motor 2 (inclinação - tilt).
Desafios
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários