- Pré-requisitos
- Diagrama de circuito
- Fluxo do processo para o Air Mouse
- Programando o Arduino for Air Mouse
- Python Driver Script
- Testando o Arduino Air Mouse
Já se perguntou como nosso mundo está se movendo em direção à realidade imersiva. Estamos continuamente encontrando novas maneiras e métodos de interagir com o que nos rodeia usando realidade virtual, realidade mista, realidade aumentada, etc. Novos dispositivos estão surgindo todos os dias com essas tecnologias de ritmo rápido para nos impressionar com suas novas tecnologias interativas.
Essas tecnologias imersivas são usadas em jogos, atividades interativas, entretenimento e muitas outras aplicações. Neste tutorial, vamos conhecer um método interativo que oferece uma nova maneira de interagir com seu sistema em vez de usar um mouse chato. Nossos geeks de jogos devem saber que alguns anos atrás, a Nintendo, uma empresa de jogos, vende a ideia de um método interativo 3D para interagir com seus consoles com a ajuda de um controlador de mão conhecido como controlador de Wii. Ele usa o acelerômetro para localizar seus gestos para um jogo e enviá-los ao sistema sem fio. Se você quiser saber mais sobre esta tecnologia, você pode verificar a patente EP1854518B1, que lhe dará uma ideia completa de como essa tecnologia funciona.
Inspirados nesta ideia, faremos um "mouse aéreo", para interagir com os sistemas apenas movendo o console no ar, mas em vez de usar referências de coordenadas tridimensionais, usaremos apenas referências de coordenadas bidimensionais. podemos imitar as ações do mouse do computador, já que o mouse funciona em duas dimensões X e Y.
O conceito por trás deste Wireless 3D Air Mouse é muito simples, usaremos um acelerômetro para obter o valor da aceleração das ações e movimentos do "Air mouse" ao longo dos eixos xey, e então com base nos valores de o acelerômetro, vamos controlar o cursor do mouse e realizar certas ações com a ajuda dos drivers do software python em execução no computador.
Pré-requisitos
- Arduino Nano (qualquer modelo)
- Módulo Acelerômetro ADXL335
- Módulo Bluetooth HC-05
- Apertar botões
- Python instalado computador
Para saber mais sobre como instalar o python no computador, siga o tutorial anterior sobre Arduino-Python LED Controlling.
Diagrama de circuito
Para controlar seu computador com os movimentos de sua mão, você precisa de um acelerômetro que fornece a aceleração ao longo dos eixos X e Y e para tornar todo o sistema sem fio, um módulo Bluetooth é usado para transferir o sinal sem fio para o seu sistema.
Aqui, um acelerômetro ADXL335 é usado, é um módulo de eixo triplo baseado em MEMS que produz a aceleração ao longo dos eixos X, Y e Z, mas como dito anteriormente para controlar o mouse, precisaríamos apenas da aceleração apenas ao longo dos eixos X e Y. Saiba mais sobre como usar o acelerômetro ADXL335 com Arduino com nossos projetos anteriores:
- Sistema de Alerta de Acidente de Veículo baseado em Arduino usando GPS, GSM e acelerômetro
- Jogo Ping Pong usando Arduino e acelerômetro
- Robô controlado por gestos manuais baseado em acelerômetro usando Arduino
- Alarme do detector de terremoto usando Arduino
Aqui, os pinos Xout e Yout do acelerômetro são conectados aos pinos Analógico, A0 e A1 do Arduino e para transmitir os sinais do Arduino para o sistema, o módulo Bluetooth HC-05 é usado aqui, uma vez que o Bluetooth funciona sobre o Tx e Rx conexões de pinos, portanto, usamos os pinos seriais de software D2 e D3. Ele é conectado usando o software serial porque se conectarmos o Bluetooth com o serial do hardware e começarmos a obter as leituras no console Python, ele mostrará erros para a taxa de transmissão incompatível, pois o Bluetooth estaria se comunicando com o Python em sua própria taxa de transmissão. Saiba mais sobre como usar o módulo Bluetooth, passando por vários projetos baseados em Bluetooth usando diferentes microcontroladores, incluindo Arduino.
Aqui, usamos três botões - um para acionar o mouse Air e outros dois para clicar com a esquerda e direita, conforme mostrado na imagem abaixo:
Fluxo do processo para o Air Mouse
O fluxograma mostra o fluxo do processo do Air Mouse baseado em Arduino:
1. O sistema verifica continuamente se o gatilho mecânico deve ser pressionado até que ele não seja pressionado, podemos trabalhar normalmente com o mouse do computador.
2. Quando o sistema detecta o pressionamento de um botão, o controle do mouse é transferido para o air mouse.
3. Conforme o botão de disparo é pressionado, o sistema começa a transferir as leituras do mouse para o computador. A leitura do sistema consiste nas leituras do acelerômetro e nas leituras do clique esquerdo e direito.
4. As leituras do sistema consistem no fluxo de dados de 1 byte ou 8 bits, em que os três primeiros bits consistem nas coordenadas X, os três bits seguintes consistem nas coordenadas Y, o segundo último bit é o bit de status para obter o status do clique esquerdo do mouse e o último bit é o bit de status para obter o status do clique direito.
5. O valor dos três primeiros bits, ou seja, a coordenada X pode variar de 100 <= Xcord <= 999, enquanto o valor da coordenada Y pode variar de 100 <= Ycord <= 800. Os valores para o clique direito e esquerdo são os valores binários 0 ou 1, em que 1 indica que o clique foi feito e 0 que o clique não foi feito pelo usuário.
6. Para não deixar o salto do botão afetar a posição do cursor, um atraso conhecido de 4 segundos é mantido após cada clique do botão de disparo do mouse.
7. Para o clique direito e esquerdo no air mouse, temos que primeiro pressionar o botão esquerdo ou direito e, depois disso, temos que pressionar o botão de disparo para mover para a posição do air mouse onde queremos.
Programando o Arduino for Air Mouse
O Arduino deve ser programado para ler os valores de aceleração nos eixos X e Y. O programa completo é fornecido no final, abaixo estão os trechos importantes do código.
Configurando as variáveis globais
Como dito anteriormente, conectaremos o módulo Bluetooth com os pinos seriais do software. Portanto, para definir o serial do software, precisamos declarar a biblioteca do serial do software e configurar os pinos para Tx e Rx. No Arduino Nano e no Uno os pinos 2 e 3 podem funcionar como um software serial. Em seguida, declaramos o objeto Bluetooth da biblioteca serial do software para configurar o pino para o Tx e Rx.
#incluir
Configuração nula ()
Na função de configuração , vamos definir as variáveis para dizer ao programa se elas agirão como entrada ou saída. O botão de disparo seria configurado como pull-up de entrada, e os cliques esquerdo e direito são declarados como entrada e configurados como Alto para fazê-los agir como pullups de entrada.
Defina também a taxa de transmissão para a comunicação serial e Bluetooth para 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Laço vazio ()
Como seria preciso botão de disparo de dizer quando precisamos enviar o sistema de fluxo de dados, por isso montamos todo o código dentro da enquanto ciclo que irá monitorar continuamente o estado digital do disparador pull-up, uma vez que vai de baixo que vai passe adiante para o processamento.
Como já anexado um LED para deixar-nos saber o estado do sistema para quando o botão de disparo é pressionado, inicialmente definir o levou a baixa fora da enquanto laço como é condição padrão e de alta dentro da enquanto ciclo que irá acender o LED sempre que o botão de disparo é pressionado.
Para ler o status do botão de clique esquerdo e direito, declaramos globalmente duas variáveis lclick e rclick cujos valores foram inicialmente configurados para 0.
E no loop , defina o valor dessas variáveis de acordo com o status digital do botão de clique esquerdo e direito para verificar se os botões estão pressionados ou não.
Estaríamos lendo os valores dos pinos de saída X e Y do acelerômetro usando a função analogRead e mapearíamos esses valores para o tamanho da tela para mover o ponteiro do mouse por toda a tela. Uma vez que o tamanho da tela são os pixels na tela, precisamos configurá-lo de acordo e como precisamos que o valor de saída seja de três dígitos, definimos deliberadamente o intervalo para o X como 100 <= X <= 999 e da mesma forma o valor para Y como 100 <= Y <= 800. Lembre-se, os pixels estão sendo lidos a partir do canto superior esquerdo, ou seja, o canto superior esquerdo tem o valor (0,0), mas como declaramos três dígitos para xey, nossos valores seriam lidos a partir do ponto (100,100).
Além disso, imprima o valor das coordenadas e o status do clique no serial e Bluetooth com a ajuda das funções Serial.print e bluetooth.print que ajudam a obter os valores no monitor serial e no seu sistema via Bluetooth.
Por fim, devido ao salto de um botão, um único valor pode ser repetido, o que faria com que o cursor do mouse permanecesse sobre uma única posição, portanto, para nos livrarmos disso, temos que adicionar este atraso.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclique); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = map (xh, 286.429.100.999); ycord = map (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); senão Serial.print (0); if (rstate == LOW) Serial.print (1); senão Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); outro bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); atraso (4000); }}
Python Driver Script
A partir de agora, concluímos o hardware e sua parte de firmware, agora para fazer o air mouse funcionar, precisamos ter um script de driver que pudesse decodificar os sinais do air mouse em movimentos do cursor, então para isso, escolhemos Pitão. Python é uma linguagem de script e por script aqui queremos dizer que nos ajuda a obter o controle do outro programa, pois aqui estamos controlando o cursor do mouse.
Portanto, abra seu shell Python e instale as seguintes bibliotecas usando os comandos abaixo:
pip install serial pip install pyautogui
A serial é uma biblioteca para python que nos ajuda a obter os dados de interfaces seriais, como portas com e também nos permite manipulá-los, enquanto pyautogui é uma biblioteca para python para obter controle sobre os recursos da GUI, neste caso, o mouse.
Agora vamos ao código dos drivers, a primeira coisa que precisamos fazer é importar as bibliotecas serial e pyautogui, e então da biblioteca serial, temos que definir a porta de comunicação para a comunicação com uma taxa de transmissão de 9600, o mesmo que Bluetooth.serial está operando em. Para isso, você deve conectar o módulo Bluetooth ao seu sistema e, em seguida, nas configurações do sistema, verificar a qual porta de comunicação ele está conectado.
O próximo passo é ler a comunicação serial do Bluetooth para o sistema e mantê-la funcionando continuamente, manter o resto do código em um loop contínuo com a ajuda de while 1.
Como dito anteriormente, o Arduino está enviando 8 bits, os primeiros 6 para as coordenadas e os dois últimos para o status dos botões de clique. Portanto, leia todos os bits com a ajuda de ser.read e configure seu comprimento para 8 bits.
Em seguida, divida os bits para as coordenadas do cursor e cliques, fatiando-os e, a seguir, divida os bits do cursor em coordenadas X e Y separadamente. O mesmo vale para o clique esquerdo e direito.
Agora, da comunicação, estamos obtendo uma string de bytes e precisamos convertê-la em um inteiro para que elas possam se encaixar nas coordenadas. Fazemos isso decodificando-as e depois convertendo-as em inteiros.
Agora, para mover o cursor, usamos a função pyautogui moveto , que toma como argumentos essas coordenadas inteiras e move o cursor para essa posição.
Em seguida, verifique os cliques, fazemos isso usando os dois últimos bits e a função de clique do pyautogui, seu clique padrão é o esquerdo, no entanto, podemos defini-lo como direito declarando o valor do botão à direita, também podemos definir o número de cliques para defina-o como um clique duplo configurando o parâmetro de cliques para 2.
Abaixo está o código Python completo para ser executado no computador:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k clique = k x = cursor y = cursor l = clique r = clique xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) se l == 49: pyautogui.click (cliques = 2) elif r = = 49: pyautogui.click (botão = 'direito', cliques = 2)
Testando o Arduino Air Mouse
Portanto, para operar o Air Mouse, conecte uma fonte de alimentação a ele. Pode ser do slot USB do Arduino Nano ou da fonte de alimentação regulada de 5v usando 7805 IC. Em seguida, execute o script do driver python definindo a porta de comunicação à qual o Bluetooth está conectado. Conforme o script é executado, você verá um lapso de tempo no piscar do Bluetooth, isso significa que ele está conectado ao seu sistema. Então, para operá-lo, clique no botão de disparo e você verá que a posição das coordenadas mudará e se você quiser o clique esquerdo ou direito, primeiro pressione o botão esquerdo ou direito e o botão de disparo juntos, você verá a ação do clique em uma localização alterada do cursor.
Verifique o vídeo de trabalho detalhado abaixo.