Usando placa Arduino Leonardo como teclado e mouse
O placa Arduino Leonardo é mais uma da (grande) família Arduino. Neste post, vamos usar a placa Arduino Leonardo para emular um teclado e um mouse, ou seja, você poderá controlar e enviar comandos para o seu computador usando este projeto.
O Arduino Leonardo funciona da mesma maneira que as outras placas Arduino, mas tem uma funcionalidade adicional que vamos abordar nesse post, que é a possibilidade de utilizá-lo como se fosse um mouse ou um teclado.
A placa Arduino Leonardo
A placa utiliza o microcontrolador ATmega32u4 com comunicação USB embutida, o que dispensa o uso de circuitos auxiliares para comunicação. Essa placa possui 20 pinos de entrada/saída, sendo que 7 podem ser usados como saídas PWM, e 12 como portas analógicas. O clock é de 16 Mhz.
Fisicamente, o Arduino Leonardo tem as mesmas dimensões que o Arduino Uno, e os conectores também estão dispostos de forma semelhante: na parte de cima, as portas digitais de 0 a 13, e os pinos GND, AREF, SDA e SCL. Na parte de baixo, as portas analógicas de 0 a 5 e os pinos de RESET, GND, 5v e 3.3v:
Para conexão ao computador é utilizado um cabo micro-usb e a instalação no Windows não exigiu a utilização de nenhum driver específico. Ao conectar o cabo, foram detectados três dispositivos: o Arduino Leonardo na porta serial COM13, o USB Composite Device e o USB Input Device:
Finalizada a instalação da placa, a utilização é igual à de outras placas Arduino: carregue a IDE, e no menu Ferramentas => Placas selecione Arduino Leonardo. Em Ferramentas => Porta Serial, selecione a porta serial detectada no momento da instalação da placa (no nosso caso, COM13).
Para demonstrar a capacidade do Leonardo em ser utilizado como um teclado e um mouse, vamos montar um circuito composto por um push-button (será o nosso teclado), que vai enviar uma sequência de caracteres para o computador, e também um módulo joystick (o nosso mouse), que vai determinar o movimento do cursor na tela do computador:
No programa que vai controlar tudo isso (baseado no programa original do site oficial do Arduino), veremos novos comandos como o Keyboard.begin() e o Mouse.begin().
Programa Arduino Leonardo teclado e mouse
O Keyboard.begin() é o comando que inicia a emulação do teclado no Leonardo, ou seja, diz para a placa que a partir daquele momento ela pode se comportar como um teclado e enviar caracteres ao computador.
O Mouse.begin() faz a mesma coisa, mas com as funções de mouse. No programa, vamos ler as informações recebidas do joystick pelas portas A1 (eixo X) e A2 (eixo Y), e movimentar o cursor na tela do computador.
O push-button ligado à porta 7, cada vez que é acionado, executa o comando
Keyboard.println(“Arduino e Cia !”)
e envia a sequência de caracteres para o computador como se fosse um teclado. Você pode testar isso utilizando qualquer programa de edição de texto, como por exemplo o Bloco de Notas (notepad).
//Programa: Teclado e Mouse com o Arduino Leonardo //Alteracoes e adaptacoes: Arduino e Cia //Pino do push-button int botao_msg = 7; //Armazena estado do push-button int previousButtonState = HIGH; const int xAxis = A1; //Pino entrada eixo X const int yAxis = A2; //Pino entrada eixo Y int range = 2; // output range of X or Y movement int responseDelay = 2; // response delay of the mouse, in ms int threshold = range/4; // resting threshold int center = range/2; // resting position value int minima[] = { 1023, 1023}; // actual analogRead minima for {x, y} int maxima[] = { 0,0}; // actual analogRead maxima for {x, y} int axis[] = { xAxis, yAxis}; // pin numbers for {x, y} int mouseReading[2]; // final mouse readings for {x, y} void setup() { pinMode(botao_msg, INPUT); //Inicializa teclado Keyboard.begin(); //Inicializa mouse Mouse.begin(); } void loop() { //Checa se o push-button foi pressionado int valor = digitalRead(botao_msg); if ((valor != previousButtonState) && (valor == LOW)) { Keyboard.println("Arduino e Cia !"); } //Salva o estado do botao para comparacao no proximo loop previousButtonState = valor; // read and scale the two axes: int xReading = readAxis(0); int yReading = readAxis(1); // move the mouse: Mouse.move(xReading, yReading, 0); delay(responseDelay); } /* reads an axis (0 or 1 for x or y) and scales the analog input range to a range from 0 to <range> */ int readAxis(int axisNumber) { int distance = 0; // distance from center of the output range // read the analog input: int reading = analogRead(axis[axisNumber]); // of the current reading exceeds the max or min for this axis, // reset the max or min: if (reading < minima[axisNumber]) { minima[axisNumber] = reading; } if (reading > maxima[axisNumber]) { maxima[axisNumber] = reading; } // map the reading from the analog input range to the output range: reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range); // if the output reading is outside from the // rest position threshold, use it: if (abs(reading - center) > threshold) { distance = (reading - center); } // the Y axis needs to be inverted in order to // map the movemment correctly: if (axisNumber == 1) { distance = -distance; } // return the distance for this axis: return distance; }
Uma relação completa dos comandos de teclado e mouse que você pode utilizar no Arduino Leonardo estão na página oficial do Arduino. Acesse esta página com os comandos do teclado e esta página com os comandos do mouse.
Abaixo você confere um vídeo do circuito em funcionamento:
Por último, uma observação sobre as funcionalidades de teclado e mouse do Arduino Leonardo. Funções como Mouse.move() e Keyboard.print() enviarão comandos diretamente para o seu computador, e isso pode dificultar um pouco a operação se por acaso algum comando errado for executado. O cursor do seu mouse, por exemplo, pode ficar em algum canto da tela, ou se mover de forma estranha.
Para evitar isso, é recomendável incluir no programa algum tipo de chave para que você possa ligar e desligar essas funções, utilizando-se dos comandos Mouse.begin(), Mouse.end() e Keyboard.begin() e Keyboard.end().
Gostou? Confira também este outro post onde ensino a usar o Arduino Leonardo para controlar o microfone do Google Meet!
da para fazer o mesmo com arduino nano?
Bom dia Matheus,
Veja este exemplo com o Uno. creio que seja possível fazer com o Nano:
http://www.practicalarduino.com/projects/virtual-usb-keyboard
Abraço!
In file included from C:UsersÃ?taloDocumentsProjetosteste kb2TESTATESTA.ino:1:0:
C:Program Files (x86)ArduinolibrariesMousesrc/Mouse.h:29:2: warning: #warning "Using legacy HID core (non pluggable)" [-Wcpp]
#warning "Using legacy HID core (non pluggable)"
^
In file included from C:UsersÃ?taloDocumentsProjetosteste kb2TESTATESTA.ino:4:0:
C:Program Files (x86)ArduinolibrariesKeyboardsrc/Keyboard.h:29:2: warning: #warning "Using legacy HID core (non pluggable)" [-Wcpp]
#warning "Using legacy HID core (non pluggable)"
^
C:UsersÃ?taloDocumentsProjetosteste kb2TESTATESTA.ino: In function 'void setup()':
TESTA:36: error: 'Keyboard' não encontrado. Existe a linha '#include ' no seu sketch?
TESTA:38: error: 'Mouse' não encontrado. Existe a linha '#include ' no seu sketch?
C:UsersÃ?taloDocumentsProjetosteste kb2TESTATESTA.ino: In function 'void loop()':
TESTA:47: error: 'Keyboard' não encontrado. Existe a linha '#include ' no seu sketch?
TESTA:57: error: 'Mouse' não encontrado. Existe a linha '#include ' no seu sketch?
exit status 1
'Keyboard' não encontrado. Existe a linha '#include ' no seu sketch?
Aparece esse erro. Mesmo tendo importado. as 2 lib. o que fazer?
Bom dia Italo,
Não sei exatamente, mas me parece que mudou algo na versão nova da IDE. Tente colocar os includes no inicio do programa para o keyboard.h e mouse.h. Aqui eu coloquei e funcionou normalmente. vou atualizar o programa do post:
#include "Keyboard.h"
#include "Mouse.h"
Abraço!
Olá amigo, mesmo colocando os includes
#warning "Using legacy HID core (non pluggable)"
o mesmo erro permanece, tens alguma solução?? obrigado as dicas
olá, gostaria de saber se há a possibilidade de usar o botao direito do mouse
Oi Lucas,
Dá sim, veja este link, por favor: https://www.arduino.cc/en/Reference/MouseClick
Abraço!
Muito legal o post. Funciona com Arduino Pro Micro Atmega32u4???
Boa tarde,
funciona sim. 🙂
Abraço!
Gostaria de saber se alguém poderia me ajudar, como ficaria a programação usando as teclas direita e esquerda do teclado, mas usando o arduino via Bluetooth , para eventualmente usá-lo como um virador, passador de páginas no pdf ou slide do power point
Funciona no Windows 10?
Boa noite,
Teoricamente não tem nenhuma restrição, já que o Leonardo vai aparecer no computador como um dispositivo "HID", que é como aparece um mouse ou teclado USB, por exemplo.
Abraço!
consigo com o arduino leonardo, fazer um usb controler para game?
Sim. Consegue
Olá estou tentando imprimir com teclas padrao abnt mas só sai os caracteres como US, qual seria a solução para abnt? ja existe a biblioteca abnt para arduino?
No lugar do Joystick Arduino 3 Eixos, poderia ser usado eletrodos(Ag/AgCl) capturando o sinal EMG(Eletromiografia) e através da intensidade do sinal fizesse a emulação do mouse? Como ficaria o código?
uma dúvida: tem limite de quantos botões dá para colocar?
tipo, eu queria fazer uma réplica de um teclado comum de pc, algo em torno de uns 80 botões. cada botão iria emular o equivalente a uma tecla o teclado.
daria para fazer, ou o limite de botões é o de quantidade de contatos na placa?
Oi Enio,
Não necessariamente, você pode usar CI’s expansores de porta, como o PCF8574 e o PCF8575, por exemplo.
Abraço!
Adilson
ei amigo/a… tem como me ajudar?
usei seu projeto para me basear no meu… e esqueci de configurar o negocio para desligar o mouse… agora o arduino IDE não reconhece o arduino como arduino, só como mouse… como reverter isso?
caso seja util: estou usando um leonardo, IDE mais recente, no linux, e coloquei só a parte do mouse.h… não coloquei o do teclado não
Oi Nicolas,
Entendi… vc já tentou pressionar o botão de reset do Leonardo na hora em que a IDE vai fazer o upload do sketch?
Abraço!
Adilson