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.

arduino leonardo teclado mouse

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:

Arduino Leonardo - Detalhes

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:

Arduino Leonardo - Drivers

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:

circuito Arduino Leonardo joystick push-button

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!

5/5 - (1 vote)