Mouse Bluetooth Controlado por Smartphone: Construa Seu Próprio Joystick Virtual
Componentes e Materiais
| Arduino UNO | 1 |
| Módulo Bluetooth HC-05 | 1 |
| Fios jumpers (genéricos) | 1 |
Aplicativos e Serviços Online
- Arduino IDE
- IDLE (Python GUI)
- MIT App Inventor – Bluetooth Mouse Control
Sobre o Projeto
Este projeto é semelhante ao meu trabalho anterior onde usei um joystick físico para controlar o cursor do PC. A diferença principal é que criei um aplicativo para smartphone contendo dois joysticks virtuais para mover o cursor, rolar a tela e realizar cliques esquerdo e direito, como um trackpad comum.
Funcionamento
O aplicativo no smartphone envia os dados dos eixos X e Y dos joysticks, status de rolagem, clique esquerdo e direito via Bluetooth para o Arduino Uno conectado ao módulo HC-05. O Arduino manipula esses dados para calcular a nova posição do cursor. O resultado, junto com status de rolagem e botões, é enviado via Serial para ser lido por um script Python que executa as ações do mouse usando a biblioteca mouse.

Sobre o Aplicativo
O aplicativo foi criado com o MIT App Inventor. A tela principal mostra dois joysticks virtuais.

Antes de enviar os dados principais, o app envia um byte de início (255). A sequência de transmissão é:
- Envia '255' (início)
- Envia 1 byte: valor do eixo X do joystick
- Envia 1 byte: valor do eixo Y do joystick
- Envia 1 byte: status de clique esquerdo, direito e rolagem
Os dados são enviados a cada 20 milissegundos.
Lado do Arduino
O Arduino recebe os bytes via HC-05. Mantém as coordenadas atuais do cursor (X: 0–1279, Y: 0–799), obtidas via mouse.get_position() no Python. Com base nos dados do joystick, atualiza as coordenadas somando/subtraindo os valores recebidos. O resultado é impresso no Serial no formato:
X:Y:CLICKS

Essa sequência é lida pelo programa Python. Será necessário instalar os módulos mouse e pyserial.
Programação em Python
O usuário deve ter o Python 3 instalado (download aqui).
Windows:
- Após instalar, copie o caminho do executável do Python.
- Abra o Prompt de Comando e execute:
cd <caminho_do_python> py -m pip install --upgrade pip py -m pip install mouse py -m pip install pyserial
O módulo mouse executa ações do mouse; pyserial comunica com o Arduino.

Execução
- Instale o app Bluetooth Mouse Control no smartphone.
- Carregue o sketch no Arduino Uno e monte o circuito conforme o esquemático.
- Lado Python:
- Copie o código Python para um arquivo
.py. Altere a porta COM para a do seu Arduino e salve. - Abra no IDLE do Python e execute.
- Copie o código Python para um arquivo
- Conecte o app ao módulo Bluetooth. O cursor moverá conforme os joysticks virtuais.

Código
Código Arduino
int datareceived[5] = {0,0,0,0};
int in_byte = 0;
int array_index = 0;
int l_prev=0, r_prev=0;
void setup() {
Serial.begin(9600);
}
int height=0, width=0;
void loop() {
int clicks=0;
int sensitivity=20;
int xpos=0, ypos=0;
if (Serial.available() > 0) {
in_byte = Serial.read();
if (in_byte == 255) array_index = 0;
datareceived[array_index] = in_byte;
array_index++;
if (datareceived[1] >= 110) xpos = map(datareceived[1], 110, 172, 0, sensitivity);
if (datareceived[1] <= 70) xpos = map(datareceived[1], 60, 1, 0, -sensitivity);
if (datareceived[2] >= 110) ypos = map(datareceived[2], 110, 255, 0, sensitivity);
if (datareceived[2] <= 60) ypos = map(datareceived[2], 70, 1, 0, -sensitivity);
if (datareceived[3]==1 && l_prev==0) clicks=1;
else if (datareceived[3]==2 && r_prev==0) clicks=2;
else if (datareceived[3]==3 || datareceived[3]==4) clicks=datareceived[3];
l_prev = datareceived[3];
r_prev = datareceived[3];
if (xpos!=0 || ypos!=0 || clicks!=0) {
height += ypos;
width += xpos;
height = constrain(height, 0, 799);
width = constrain(width, 0, 1279);
Serial.print(width); Serial.print(":");
Serial.print(height); Serial.print(":");
Serial.println(clicks);
clicks=0;
}
}
}
Código Python
import mouse, sys
import time
import serial
mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('COM3', 9600) # Ajuste a porta COM
time.sleep(1)
while True:
data = str(ArduinoSerial.readline().decode('ascii'))
x, y, z = data.split(":")
x, y = int(x), int(y)
mouse.move(x, y)
if '1' in z: mouse.click(button="left")
elif '2' in z: mouse.click(button="right")
elif '3' in z: mouse.wheel(delta=-1)
elif '4' in z: mouse.wheel(delta=1)
Esquemático

Processo de manufatura
- Construa um Robô Raspberry Pi Controlado por Bluetooth com Feedback de Áudio
- Lâmpada de Mesa RGB Controlada por Gestos – Iluminação Interativa e Sem Toque
- Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
- Controlar LEDs com Alexa via Raspberry Pi – Guia Passo a Passo Fácil
- Transforme um Carro RC Antigo em Veículo Controlado por Joystick com Arduino
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples
- Braço Robótico 6 GDL Controlado por Nunchuk com Arduino Mega
- Construa um Robô Controlado por Voz com Arduino Nano
- MobBob: Construa Seu Próprio Robô Arduino, Controlado via Smartphone Android
- Eletrodomésticos Ativados por Voz: Controle Bluetooth com Google Assistant