Você já pensou em controlar seu computador com um Arduino? Ou melhor, que tal agilizar seu trabalho criando atalhos e executando-os a distância com push buttons? É que vamos ver hoje no post “Arduino Leonardo Projeto Interface Teclado de Computador”.
O Leonardo é uma placa que possui uma interface USB direta com o microcontrolador, ou seja, conseguimos controlar a comunicação com o computador como se ele fosse um mouse e/ou um teclado, dessa forma podemos desde usá lo como um teclado convencional ( colocar botões que representam cada tecla, dessa forma cada vez que você pressionar um botão ele irá digitar uma letra/tecla no seu computador), ou usar ele até mesmo para jogar algum jogo, por exemplo, enfim, as possibilidades com ele são infinitas, hoje veremos uma delas.
O que é Arduino Leonardo?
O Arduino Leonardo é um microcontrolador desenvolvido para projetos que possui alguns peculiaridades em relação ao seu irmão UNO R3. Ele como podemos ver na imagem a baixo, não possui nenhum chip para fazer a comunicação com o computador, ou seja, ele mesmo faz essa comunicação usb, a qual conseguimos entender bem na folha de dados do microcontrolador Atmega32u4, dessa forma podemos programar ele pra executar diversas tarefas no computador.
O Arduino Uno R3, que é o modelo que geralmente usamos em nossos projetos, como podemos ver abaixo, possui o microcontrolador que é o Atmega328 e ao lado possui um chip que faz a “tradução” do sinal que vem pela USB e o envia para o microcontrolador.
Alguns exemplos de momento em que usamos esse chip é quando vamos programar o Arduino, também na comunicação serial com o computador, carregar o bootloader, enfim várias funções. Como é esse chip que faz a comunicação com o computador, e programamos somente o Atmega328, não podemos controlar o computador como ocorre no Arduino Leonardo.
Materiais para o Projeto Arduino Leonardo como Interface Teclado
No projeto de hoje iremos utilizar poucos materiais e a montagem é relativamente simples precisando somente de:
- 1 x Arduino Leonardo;
- 3x Push Buttons;
- 3 x Resistores 10k;
- 5 x Jumpers;
- 1 x Protoboard;
Esquema de ligação
O esquema de ligação é bem simples consiste basicamente de 3 push buttons com resistores que vão enviar esses sinais para o Arduino Leonardo.
Código de Programação
O código é relativamente simples, basicamente ele vai detectar quando um dos botões for pressionado e ao fazer essa detecção o Arduino irá enviar um comando para o computador que no nesse caso será os atalhos: Ctrl + a , Ctrl + c e Ctrl + v , lembrando que você pode alterar esses atalhos de acordo com a sua programação ou alterando o código abaixo.
Segue abaixo o código todo comentado e explicado todas as funções e condições, um detalhe que vale a pena ressaltar que eu utilizei a técnica de debouncing por software, que nada mais é que uma verificação para evitar as interferências causado pelas oscilações mecânicas do botão.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#include "Keyboard.h" // inclui a biblioteca de controle do teclado //declaraçao de variaveis unsigned long lastmillis1 = 0; unsigned long lastmillis2 = 0; unsigned long lastmillis3 = 0; bool lastRead1 = 0; bool lastRead2 = 0; bool lastRead3 = 0; bool buttonState1 = 0; bool buttonState2 = 0; bool buttonState3 = 0; //tempo para evitar interferencia #define debounceDelay 50 void setup() { //declara os pinos dos botoes como entrada pinMode(2, INPUT); pinMode(3, INPUT); pinMode(4, INPUT); Keyboard.begin(); // inicia a keyboard } void loop() { //armazena os valores dos botoes bool leitura1 = digitalRead(2); bool leitura2 = digitalRead(3); bool leitura3 = digitalRead(4); //verifica a quanto tempo foi pressionado pela ultima if (leitura1 != lastRead1) { lastmillis1 = millis(); } if (leitura2 != lastRead2) { lastmillis2 = millis(); } if (leitura3 != lastRead3) { lastmillis3 = millis(); } if ((millis() - lastmillis1) > debounceDelay) { //se ja faz 50 milisegundos if (leitura1 != buttonState1) {// e o botao foi precionado ou mudou de estado buttonState1 = leitura1; if (buttonState1 == HIGH) { // e tiver em high Keyboard.press(KEY_LEFT_CTRL); // pressiona a tecla ctrl Keyboard.press('c'); // preciona a tecla c delay(500); // espera 500 ms Keyboard.releaseAll(); // solta os botoes Serial.println("ctrl c"); } } } lastRead1 = leitura1;// atribui para o valor anterior //repete esse mesmo processo para os outros botoes if ((millis() - lastmillis2) > debounceDelay) { if (leitura2 != buttonState2) { buttonState2 = leitura2; if (buttonState2 == HIGH) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('v'); delay(500); Keyboard.releaseAll(); Serial.println("ctrl v"); } } } lastRead2 = leitura2; if ((millis() - lastmillis3) > debounceDelay) { if (leitura3 != buttonState3) { buttonState3 = leitura3; if (buttonState3 == HIGH) { Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); Serial.println("ctrl a"); } } } lastRead3 = leitura3; } |
Conclusão
No artigo de hoje “Esquemático Arduino Leonardo Projeto Interface Teclado de Computador” vimos como podemos utilizar um microcontrolador em especial para controlar o seu computador, lembrando que você pode usar o projeto do artigo como base para algo mais complexo.
As possibilidades são infinitas, uma utilização muito interessante seria preencher os valores de uma tabela com os dados de um sensor por exemplo. Você pode comentar deixar melhorias e sugerir futuros artigos, assim podendo ajudar várias pessoas que possam vir a ter os mesmos problemas que você teve.
Por hoje é isso, aguarde o próximo artigo e fique ligado no nosso Blog.
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?
Opa tudo bem?
Em casos que necessite mais botoes poderia utilizar teclado matricial(talvez ate construir um) ou algum multiplexador.
espero ter ajudado.
Amigo uma dúvida o fio vermelho é um só né? porque você mostra 4 na imagem, nunca mexi no ardoino
Olá Gilmar! Um fio irá sair do pino de alimentação do Arduino e irá alimentar toda a linha da protoboard, depois disto, você utilizará qualquer ponto desta linha e para ligar o jumper deste, com o respectivo pino do push button.
Muito bom o projeto embora bastante complexo.
Usando um ESP32 sempre espera-se que a máxima automatização seja possível, como por exemplo um controle automatizado de temperadora para chocadeiras utilizando a biblioteca PID e um sensor NTC.
Fica a sugestão para umo projeto nesse sentido.