Skip to content

flutterstarts/AirMouse---App

 
 

Repository files navigation

📱 AirMouse: Controle Remoto Inteligente Este projeto transforma um smartphone em um mouse sem utilizando o giroscópio do dispositivo e comunicação via WebSockets.

🚀 Funcionalidades Controle por Movimento: Utiliza os sensores de giroscópio (Pitch, Roll e Yaw) para traduzir inclinações do celular em deslocamento do cursor no PC.

Baixa Latência: Comunicação em tempo real via WebSockets para uma resposta instantânea.

Suavização Inteligente: Implementação de filtros de processamento de sinal (Low-Pass Filter) para eliminar tremores da mão e garantir um movimento estável em 60 FPS.

Cliques Remotos: Botões dedicados para clique esquerdo e direito integrados à interface.

🛠️ Tecnologias Utilizadas Flutter: Aplicativo mobile para captura e processamento de sensores.

Node.js: Servidor backend para recepção dos comandos. RobotJS: Biblioteca de automação para controle nativo do sistema operacional.

Além dos pacotes:

- provider;
- web_socket_channel;
- mobile_scanner;
- equatable;
- sensors_plus;

🧠 O Desafio Técnico

  • O maior desafio foi a calibração dos eixos do giroscópio para que o movimento parecesse natural ao usuário, além do gerenciamento de pacotes para evitar o gargalo da rede Wi-Fi. Para alcançar uma suavidade mais aceitável, foram implementadas as seguintes técnicas:
  1. Low-Pass Filter Para eliminar os micro-tremores naturais da mão humana, utilizei uma técnica de suavização baseada em média ponderada entre o estado anterior e o atual:
SmoothValue = (PreviousValue * 0.15) + (CurrentRawValue * 0.85) 

Isso cria uma "inércia virtual", garantindo que o cursor deslize de forma orgânica em vez.
  1. Throttling de Dados O sensor do smartphone opera em frequências altíssimas, o que poderia sobrecarregar a rede Wi-Fi e o servidor. Implementei um controle de fluxo que limita o envio de pacotes a cada 13ms, garantindo o equilíbrio perfeito entre baixa latência e estabilidade de rede.
"final now = DateTime.now();
  if (now.difference(_lastSend).inMilliseconds < 13) return;
  _lastSend = now;"
  1. Deadzone Dinâmica Para evitar o drift (quando o mouse se mexe sozinho devido ao ruído do sensor), configurei uma "Zona Morta". O sistema calcula o valor absoluto (abs) do movimento e pega a menor diferença entre os eixos X e Y e só assim envia o comando e dessa forma evitamos o drift.
"if (_smoothDx.abs() < 0.5 && _smoothDy.abs() < 0.5) return;"
  1. Mapeamento de Eixos (Pitch & Yaw) Diferente de um touchpad comum, o AirMouse utiliza:

    Eixo X (Pitch): Para o movimento vertical.

    Eixo Z (Yaw): Para o movimento horizontal (estilo apontador laser).

    Utilizei o Eixo Z porque se usassémos o Eixo Y o programa não iria conseguir identificar que o usuário está apontando o celular para a esquerda ou direita pois, o Eixo Y só funciona pensando na posição vertical do dispositivo, ou seja, com o celular em pé. Com o Eixo Z facilitamos esse movimento para que o cursor siga o dispositivo para que possamos apontar para a tela.


🛠️ Como Executar o Projeto

  1. Pré-requisitos Antes de começar, você precisará ter instalado:
Flutter SDK (para o aplicativo mobile).

Node.js (para o servidor).

RobotJS Dependencies: Dependendo do seu sistema operacional (Windows/Mac/Linux), o RobotJS pode exigir ferramentas de compilação (como Python ou Visual Studio Build Tools).
  1. Configurando o Servidor (Node.js) Navegue até a pasta do servidor:

    cd server/

Instale as dependências:

  npm install

Inicie o servidor:

  node src/index.js

O servidor ficará aguardando conexões na porta 8080.
  1. Configurando o Aplicativo (Flutter) Navegue até a pasta do projeto Flutter:

    cd airmouse_app/

Instale as dependências do Flutter:

  flutter pub get 

Importante: No código, altere o endereço IP para o IP local do seu computador (ex: 192.168.0.XX).

Rode o aplicativo em um dispositivo físico:

  flutter run

Demonstração do AirMouse

Demonstração do AirMouse

Demonstração do AirMouse

About

Controle remoto do PC com o celular

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 39.0%
  • CMake 31.1%
  • Dart 20.0%
  • Swift 3.0%
  • JavaScript 2.4%
  • C 2.3%
  • Other 2.2%