Intermediário - Projeto 24
Suporte Pan-Tilt e Arduino como apontador laser controlado por joystic
Objetivo
Durante uma apresentação, apontar manualmente para regiões específicas da tela pode ser impreciso ou até inviável quando o projetor está distante. Uma solução interessante é construir um apontador laser controlado eletronicamente, capaz de movimentar o feixe de luz com precisão.
Neste projeto, vamos desenvolver um sistema de apontamento baseado em Arduino, utilizando:
Neste projeto, vamos desenvolver um apontador laser com controle eletrônico baseado em Arduino, utilizando:
-
um joystick analógico para controle manual
-
um mecanismo pan-tilt com dois servomotores
-
um módulo laser ou diodo laser "cru"
Com esse conjunto, o usuário poderá mover o laser horizontalmente (pan) e verticalmente (tilt), apontando com certa precisão para qualquer ponto da tela de apresentação.
Além de ser útil, este projeto também introduz conceitos importantes de controle de posição com servos, leitura analógica e mapeamento de sinais, muito utilizados em robótica.
Construir um sistema de apontamento laser controlado por joystick capaz de:
-
movimentar o laser no eixo horizontal (pan)
-
movimentar o laser no eixo vertical (tilt)
-
permitir controle proporcional e suave da posição
-
demonstrar na prática o uso de servomotores com Arduino
Definições
1 . Suporte "pan tilt" para Arduino é um acessório mecânico amplamente utilizado em projetos de eletrônica e robótica para movimentação precisa de componentes, como sensores, câmeras ou LEDs. Ele é composto por uma estrutura articulada que permite o movimento em dois eixos principais:
Pan (giro horizontal): Permite a rotação no eixo horizontal, movimentando o componente de um lado para o outro (esquerda e direita).
Tilt (giro vertical): Permite a rotação no eixo vertical, movimentando o componente para cima e para baixo.

No projeto, o pan-tilt permitirá direcionar o feixe do laser para qualquer ponto da tela.
2. 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.
Os servos mais comuns usados com Arduino possuem rotação aproximada de 0° a 180°. Eles são controlados por um sinal PWM (Pulse Width Modulation) enviado pelo Arduino.

No projeto, dois servos serão utilizados: servo pan (movimento horizontal) e servo tilt (movimento vertical).
3. 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.

O Joystick KY-023 é formado por dois potenciômetros analógicos que controlam os eixos x e y e um push button que controla o eixo z. O seu princípio de funcionamento consiste no controle dos dois potenciômetros conectados entre si por um bastão de controle, composto por um potenciômetro para o movimento do eixo x e outro para o movimento eixo y. O botão de pressão push button corresponde ao eixo z, cuja leitura é digital: 1 quando neutro e 0 quando pressionado (circuito pull up).
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.

O módulo joystick produz uma saída de cerca de 2.5V nos eixos x e y, quando o bastão do joystick estiver na posição de repouso (centro). Quando movemos o bastão, a saída nos eixos irá variar de 0V a 5V, dependendo da direção.
O Arduino lê essas variações usando suas entradas analógicas, convertendo a tensão em valores numéricos entre:
Esses valores serão utilizados para determinar a posição dos servomotores.
4. Módulo Laser: O módulo laser é um dispositivo que emite um feixe de luz altamente concentrado.
Nos projetos com Arduino, normalmente utilizam-se módulos de 5V, que podem ser:
No nosso sistema, o laser será usado como apontador visual, permitindo destacar elementos em uma apresentação.
Referências
Aplicações
Este projeto funciona tanto como um apontador laser para apresentações quanto como uma plataforma didática completa para aprendizado de eletrônica, controle de movimento e introdução à robótica.
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)
|
| Suporte Pan Tilt |
Suporte Pan Tilt plástico
|
1 |
 |
Suporte plástico para sistema Pan Tilt Deverão ser utilizados 2 micros servos motores 9G como atuadores
S1 - Montagem Suporte Pan Tilt
|
| Diodo Laser "cru" |
Diodo Laser 5v 6MM
|
1 |
 |
Pode ser utilizado um módulo Laser 5V abaixo
|
| Módulo Laser |
Módulo Laser 6mm 5mW Vermelho KY-008
|
|
 |
- Tensão de operação: 3,3 - 5VDC; - Potência: 5mW; - Comprimento da onda: 650nm; - Corrente de operação: < 40mA; - Temperatura de operação: -10°C < 40°C; |
| Resistor |
Resistor 150Ω
|
1 |
|
1 Resistores de 150Ω ou superior |
| Módulo Joystick 3 eixos |
Módulo Joystick KY-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
|
| Arduino UNO |
Arduino UNO R3 |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito

Atenção
1. Faça a montagem do suporte "pan tilt" conforme o tutorial: S1 - Montagem Suporte Pan Tilt controlado com Arduino e Micro Servos Motores.

⚠️ Observação importante:
Para que o sistema tenha maior alcance na projeção do laser na tela, o micro servo do eixo vertical deve ser montado com ângulo inicial de 0º em relação à base, diferente da montagem apresentada no tutorial.
Quando montado inclinado (como ~60º), o movimento fica limitado (≈120º), reduzindo a área de atuação. Ajustando para 0º, o servo aproveita melhor seu curso, permitindo uma amplitude maior e mais eficiente de apontamento.
Para garantir maior alcance do laser, ajuste o servo vertical para iniciar em 0º (alinhado à base). Para isso:
- Localize o parafuso de fixação do servo no suporte (indicado na imagem).
- Remova o parafuso com cuidado, utilizando uma chave adequada.
- Segure o conjunto firmemente para não forçar o suporte ou o eixo do servo.
- Reposicione o servo até que ele fique totalmente alinhado com a base (0º).
- Reencaixe corretamente no suporte e
- Reaperte o parafuso, garantindo fixação firme, sem excesso de força.
Com esse ajuste, o servo passa a utilizar melhor seu curso, aumentando a amplitude vertical do movimento e melhorando significativamente a cobertura do laser na tela.
2. A montagem dos módulos 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).

2.1. Utilize "jumpers" macho-macho para fazer as conexões com o Arduino.
2.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 |
3. Para a montagem do módulo joystick 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 |
3.1. Veja abaixo a montagem do módulo Joystick no Arduino, conforme determinamos neste projeto:

4. Montagem do diodo laser
4.1. Posicionamento do diodo laser
O diodo laser deve ser fixado na parte superior do mecanismo pan-tilt (eixo TILT), pois é essa região que define a direção final do feixe.
Recomendações:
- Posicione o laser alinhado com o eixo central do suporte
- O feixe deve sair reto e paralelo à base
- Utilize:
- cola quente
- abraçadeiras
- fita adesiva (só para teste)
- suporte impresso 3D (ideal)
4.2. Organização dos fios (muito importante)
O movimento do pan-tilt exige atenção com os cabos.
Obs.: Se estiver utilizando um diodo lazer ("diodo cru") faça a emenda dos fios com um conector 2 vias, como por exemplo:

Regras fundamentais:
- Use fios com comprimento suficiente para o movimento total
- Evite fios:
- muito curtos → podem puxar o conjunto
- muito longos → podem enroscar
Boa prática
- Deixe uma folga leve em forma de curva
- Posicione os fios pela lateral do suporte
- Se possível, prenda com:
Isso evita interferência mecânica no movimento.
4.3. Montagem com o arduino
a) Se você estiver usando diodo laser sem módulo, é obrigatório usar resistor (150Ω ou superior).
Indentificação dos terminais do diodo laser (polaridade)
- Ânodo (+) → terminal positivo → cabo vermelho
- Cátodo (–) → terminal negativo → cabo azul
Montagem do diodo laser sem módulo com Arduino:

b) Se você estiver usando um módulo laser KY0008 não será necessário o uso de resistor.

MÓDULO LASER KY-008
Montagem do módulo SKY-008 com Arduino:

Código do Projeto (Sketch)
1) Faça o download e abra o arquivo projetoI24.ino no IDE do Arduino: DOWNLOAD - projetoI24.ino
Se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* I24: Apontador Laser Pan-Tilt com Arduino e Joystick
* Autor: Angelo Luis Ferreira
* Data: 21/03/2026
*
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <Servo.h>
// Servos
Servo servoPan;
Servo servoTilt;
// Joystick
int pinX = A1;
int pinY = A0;
// Botão e laser
int pinButton = 2;
int pinLaser = 7;
// Posição dos servos
int posPan;
int posTilt;
// Estado do laser
bool estadoLaser = false;
bool ultimoBotao = HIGH;
// Controle de tempo
unsigned long tempoBotao = 0;
unsigned long tempoServo = 0;
const int debounceDelay = 200;
const int intervaloServo = 20;
// LIMITES DE MOVIMENTO (ajuste fino aqui)
const int panMin = 60;
const int panMax = 120;
const int tiltMin = 70;
const int tiltMax = 110;
// Zona morta do joystick
const int deadZone = 30;
void setup()
{
servoPan.attach(9);
servoTilt.attach(10);
pinMode(pinButton, INPUT_PULLUP);
pinMode(pinLaser, OUTPUT);
digitalWrite(pinLaser, LOW);
// Centraliza os servos
servoPan.write((panMin + panMax) / 2);
servoTilt.write((tiltMin + tiltMax) / 2);
}
void loop()
{
unsigned long agora = millis();
// Atualização dos servos
if (agora - tempoServo >= intervaloServo)
{
tempoServo = agora;
int x = analogRead(pinX);
int y = analogRead(pinY);
// Aplica zona morta
if (abs(x - 512) < deadZone) x = 512;
if (abs(y - 512) < deadZone) y = 512;
// Mapeamento com faixa reduzida
posPan = map(x, 0, 1023, panMin, panMax);
posTilt = map(y, 0, 1023, tiltMin, tiltMax);
servoPan.write(posPan);
servoTilt.write(posTilt);
}
// Leitura do botão
bool leituraBotao = digitalRead(pinButton);
if (leituraBotao == LOW && ultimoBotao == HIGH && (agora - tempoBotao > debounceDelay))
{
tempoBotao = agora;
estadoLaser = !estadoLaser;
digitalWrite(pinLaser, estadoLaser);
}
ultimoBotao = leituraBotao;
}
Como o projeto deve funcionar
Ao ligar o sistema, o Arduino inicializa os servomotores e posiciona o conjunto pan-tilt no centro da área de atuação, fazendo com que o laser aponte inicialmente para o centro da tela.
1. Controle do laser (liga/desliga)
O botão integrado ao joystick permite controlar o estado do laser:
- Ao pressionar uma vez → o laser liga
- Ao pressionar novamente → o laser desliga
Esse comportamento funciona em modo toggle, facilitando o uso durante a apresentação.
2. Controle pelo joystick
O joystick é responsável por comandar o movimento do laser:
- Movimento para a esquerda/direita → controla o servo PAN (horizontal)
- Movimento para cima/baixo → controla o servo TILT (vertical)
Esses movimentos são lidos pelo Arduino como sinais analógicos e convertidos em ângulos de posicionamento dos servos.
Como o sistema utiliza limites de movimento reduzidos, o laser permanece restrito a uma área específica, evitando sair da região da tela.
3. Movimento do laser
Os servos movimentam o suporte pan-tilt, direcionando o laser de forma:
- razoavelmente suave
- proporcional ao movimento do joystick
- precisa dentro da área definida
Isso permite ao usuário apontar exatamente para:
- textos
- gráficos
- elementos específicos da apresentação
4. Controle de tempo do sistema
O projeto utiliza controle de tempo com millis(), permitindo:
- leitura contínua do joystick
- resposta imediata ao botão
- movimentação fluida dos servos
Tudo isso ocorre sem travar o funcionamento do sistema.
5. Comportamento esperado
Durante o uso, o sistema deve apresentar:
- Laser estável e sem tremores excessivos
- Movimento controlado dentro da tela
- Resposta rápida ao joystick
- Facilidade de uso durante apresentações
Observações Importantes e Ajustes do Projeto
1. Ajuste da área de atuação (ângulos dos servos)
A área onde o laser atua é definida diretamente no código:
Como ajustar:
- Aumentar a área → ampliar os valores (ex: 40 a 140)
- Diminuir a área (mais precisão) → reduzir os valores (ex: 80 a 100)
Esse ajuste deve ser feito de acordo com:
- distância da tela
- posição do equipamento
- tamanho da projeção
2. Calibração mecânica (muito importante)
Antes de ajustar via código, verifique:
- posição inicial dos servos
- alinhamento do laser com a tela
- montagem do pan-tilt
Se o servo não estiver alinhado corretamente (ex: não começa em 0º), o movimento pode ficar limitado ou impreciso.
Como fazer a calibração mecânica passo a passo:
a. Ligue o Arduino com este código:
b. Com os servos centralizados:
- solte o parafuso do braço (horn)
- reposicione o braço na posição correta (alinhado com a base/tela)
- aperte novamente
c. Ajuste o laser para apontar para o centro da tela
Resultado: movimento simétrico e preciso
3. Ajuste da sensibilidade do joystick
A zona morta pode ser alterada:
Ajustes:
- Menor valor (ex: 10) → mais sensível
- Maior valor (ex: 50) → mais estável
Ideal para eliminar tremores no centro.
5. Inversão de movimento (caso necessário)
Se o movimento estiver invertido:
Isso corrige:
- esquerda/direita invertida
- cima/baixo invertido
6. Alimentação dos servos
Servos podem causar instabilidade se alimentados direto do Arduino.
Recomenda-se:
- usar fonte externa 5V
- conectar GND em comum com o Arduino
6. Segurança com o laser
- Nunca aponte para os olhos
- Evite superfícies refletivas
- Use apenas em ambientes controlados
7. Organização dos fios
- Evite fios tensionados
- Deixe folga para o movimento do pan-tilt
- Prenda os cabos para evitar interferência
Explicando o código (ajuste fino do projeto)
Para que o apontador funcione de forma precisa, estável e mais profissional, dois ajustes são fundamentais no código:
- Limitação da faixa de ângulos (janela de atuação)
- Aplicação de zona morta (dead zone)
Esses dois conceitos trabalham juntos para melhorar o controle do laser.
1. Faixa de ângulos (controle da área de atuação)
No código, os servos não utilizam toda a faixa de 0° a 180°. Em vez disso, foi criada uma faixa reduzida:
Como isso funciona
Normalmente, o joystick seria mapeado assim:
Mas no projeto usamos:
Ou seja:
- quando o joystick está no mínimo → servo vai para
panMin
- quando está no máximo → vai para
panMax
2. Lógica empregada
Em vez de usar todo o curso do servo, limitamos o movimento para: apenas a região útil da tela
Isso traz vantagens:
- evita que o laser saia da tela
- aumenta a precisão do apontamento
- reduz movimentos exagerados
Ajuste prático
- Quer mais área? → aumente a faixa
- Quer mais precisão? → diminua a faixa
3. Zona morta (dead zone)
A zona morta evita que pequenas variações do joystick causem tremores no laser.
No código:
Como funciona
O valor central do joystick é aproximadamente:
512
Mas na prática, ele nunca fica exatamente nesse valor — há ruídos como:
Isso faria o servo ficar tremendo.
Lógica aplicada
Se o valor estiver próximo do centro:
Então forçamos:
Resultado
- elimina tremores
- mantém o laser parado quando o joystick está no centro
- melhora a estabilidade visual
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários