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!