Digispark Attiny85: Transformando em um Teclado Personalizado

Rafael Alves de Lima 22 de agosto de 20247 minutos

Se você é um entusiasta da eletrônica e está buscando um projeto simples e gratificante, transformar um Digispark com ATtiny85 em um teclado personalizado é uma excelente maneira de explorar suas habilidades e aprender novas aplicações desta pequena placa. Neste guia, vamos mostrar como você pode criar um teclado personalizado e facilmente personalizável usando o pequeno e “poderoso” ATtiny85, um microcontrolador que se destaca por seu tamanho compacto e versatilidade.


O Que é o Digispark?

O Digispark é uma placa de desenvolvimento baseado no microcontrolador ATtiny85 da Atmel (agora Microchip). Com apenas 6 pinos de I/O’s e 3 pinos de alimentação, com 8KB de memória Flash (com 1,5KB consumidos pelo Bootloader), ele pode parecer limitado, mas é surpreendentemente capaz quando tratamos de projeto relacionados a emulação de Dispositivos de Interface Humana (HID). Sua compatibilidade com a plataforma Arduino facilita a programação e a integração com diversos sensores e dispositivos. Para uma visão mais detalhada sobre o Digispark, confira outro post aqui do blog, onde exploramos em profundidade as funcionalidades, a instalação na Arduino IDE e aplicações desse microcontrolador fascinante.


Por que transformar um Digispark em um teclado?

Criar um teclado personalizado com o Digispark oferece várias vantagens:

  • Customização Total: Você pode programar o teclado para envio de combinações de teclas específicas, macros, ou comandos personalizados que atendam às suas necessidades.
  • Aprendizado Prático: O projeto oferece uma oportunidade para aprender sobre a comunicação USB, programação de microcontroladores e a manipulação de entradas e saídas.
  • Aplicações Úteis: Um teclado personalizado pode ser usado para automatizar tarefas repetitivas, criar atalhos de teclado personalizados ou até mesmo desenvolver dispositivos de entrada invasores.

Para transformar o Digispark em um teclado funcional, você precisará utilizar a biblioteca DigiKeyboard.h, que simplifica a emulação de um teclado USB. Esta biblioteca faz parte do pacote Digispark e é projetada para facilitar a criação de dispositivos de entrada que pode interagir com computadores e outros dispositivos compatíveis com USB.


Utilizando a Biblioteca DigiKeyboard.h

A biblioteca DigiKeyboard.h permite que o Digispark envie comandos de teclado para qualquer dispositivo via USB. Aqui estão algumas das principais funções que você pode utilizar:

  • DigiKeyboard.sendKeyStroke(key): Envia um código de tecla específico para o computador. Por exemplo, DigiKeyboard.sendKeyStroke(KEY_F5) envia a tecla F5. Essa função pode ser usada para enviar uma única tecla ou combinações de teclas.
  • DigiKeyboard.sendKeyStroke(key, modifiers): Envia um código de tecla com modificadores, como Shift, Ctrl ou Alt. O parâmetro modifiers é uma combinação de constantes que represem modificadores.
  • DigiKeyboard.sendKeyStroke(key, modifier1, modifier2): Permite o envio de combinações mais complexas, utilizando dois modificadores diferentes ao mesmo tempo.
  • DigiKeyboard.sendKeyStroke(key, modifier1, modifier2, modifier3): Esta função permite o envio de até três modificadores em conjunto com uma tecla. É útil para criar combinações avançadas de teclas.
  • DigiKeyboard.delay(ms): Adiciona um atraso em milissegundos, o que pode ser útil para simular a pressão e liberação de teclas com tempo adequado, garantindo que o computador reconheça ou execute cada comando corretamente.
  • DigiKeyboard.print(text): Envia um texto como se estivesse sendo digitado. Esta função é útil para automatizar a inserção de strings completas. Por exemplo, DigiKeyboard.print(“Hello World”) enviará a mensagem “Hello World” como se você estivesse digitando.
  • DigiKeyboard.println(text): É similar a função print, mas adiciona uma nova linha ao final do texto.
  • DigiKeyboard.press(key): Simula a pressão de uma tecla, sem liberá-la imediatamente. Você pode usar essa função para criar ações que exigem que uma tecla permaneça pressionada.
  • DigiKeyboard.release(key): Simula a liberação de uma tecla que foi pressionada anteriormente com a função press.


Principais Teclas e Comandos

A biblioteca DigiKeyboard.h suporta uma ampla ama de teclas e comandos. Aqui estão algumas das principais teclas que pode ser pressionadas:

  • Teclas de Funções: KEY_F1, KEY_F2, …, KEY_F12
  • Teclas de Controle: KEY_CTRL, KEY_SHIFT, KEY_ALT, KEY_GUI (Tecla do Windows)
  • Teclas de Navegação: KEY_UP_ARROW, KEY_DOWN_ARROW, KEY_LEFT_ARROW, KEY_RIGHT_ARROW
  • Teclas de Edição: KEY_BACKSPACE, KEY_TAB, KEY_ENTER, KEY_ESC_ KEY_DELETE
  • Teclas de Números e Letras: KEY_A, KEY_B, … KEY_Z, KEY_1, KEY_2, … KEY_9, KEY_0
  • Teclas de Pontuação e Símbolos: KEY_MINUS, KEY_EQUAL, KEY_LEFT_BRACE, KEY_RIGHT_BRACE, KEY_BACKSLASH, KEY_SEMICOLON, KEY_APOSTHOPE, KEY_COMMA, KEY_PERIOD, KEY_SLASH


Hardware Utilizado

Para este projeto, utilizaremos os seguintes componentes:


Diagrama de Ligação e Montagem

Aqui está o diagrama de ligação do circuito criado com o Fritzing. Ele mostra a conexão entre o Digispark, botões e protoboard:

Abaixo está uma foto da montagem física do circuito. Nela, você pode ver como os componentes foram conectados na protoboard:


Exemplo de Código

Aqui está um exemplo de código que utiliza botões, onde o primeiro botão é utilizado para abrir o Explorador de Arquivos do Windows e o Word, e o segundo botão abre o Navegador Chrome com alguns sites:

#include "DigiKeyboard.h"

const int btn1_pin = 0;  // GPIO 0 do ATtiny85 - botao 1
const int btn2_pin = 2;  // GPIO 2 do ATtiny85 - botao 2

// Funcao que executada quando o botao 1 e clicado
void abre_programas(void) {
  // Abrir Explorador de Arquivos
  DigiKeyboard.sendKeyStroke(KEY_E, MOD_GUI_LEFT);  // Presciona a tecla E e Windows ao mesmo tempo
  DigiKeyboard.delay(500);                          // Espera 500 milissegundos

  // Abrir o Word
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);  // Presciona a tecla R e Windows ao mesmo tempo
  DigiKeyboard.delay(500);                          // Espera 500 milissegundos
  DigiKeyboard.print("winword");                    // Escreve 'winword' no executar
  DigiKeyboard.sendKeyStroke(KEY_ENTER);            // Presciona a teclado enter
  DigiKeyboard.delay(1000);                         // Espera 1000 milissegundos
}

// Funcao que executada quando o botao 2 e clicado
void abre_site_especifico(void) {
  // Abrir site do Google
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);      // Presciona a tecla R e Windows ao mesmo tempo
  DigiKeyboard.delay(500);                              // Espera 500 milissegundos
  DigiKeyboard.print("chrome https://www.google.com");  // Escreve 'chrome https://www.google.com' no executar
  DigiKeyboard.sendKeyStroke(KEY_ENTER);                // Presciona a teclado enter
  DigiKeyboard.delay(1000);                             // Espera 1000 milissegundos

  // Abrir site do Gmail
  DigiKeyboard.sendKeyStroke(KEY_T, MOD_CONTROL_LEFT);  // Presciona a tecla T e ctrl esquerdo ao mesmo tempo
  DigiKeyboard.delay(500);                              // Espera 500 milissegundos
  DigiKeyboard.print("https://www.gmail.com");          // Escreve 'https://www.gmail.com' no executar
  DigiKeyboard.sendKeyStroke(KEY_ENTER);                // Presciona a teclado enter
  DigiKeyboard.delay(1000);                             // Espera 1000 milissegundos
}

void setup(void) {
  pinMode(btn1_pin, INPUT_PULLUP);  // Configura a GPIO 0 como um INPUT com resistor de PULLUP interno
  pinMode(btn2_pin, INPUT_PULLUP);  // Configura a GPIO 2 como um INPUT com resistor de PULLUP interno

  DigiKeyboard.delay(5000);  // Espera 5000 milissegundos, para ser reconhecido pelo computador
}

void loop(void) {
  if (digitalRead(btn1_pin) == LOW) {         // Verifica se o botao 1 foi clicado
    abre_programas();                         // Chama a funcao que executa a tarefa
  } else if (digitalRead(btn2_pin) == LOW) {  // Verifica se o botao 2 foi clicado
    abre_site_especifico();                   // Chama a funcao que executa a tarefa
  }

  DigiKeyboard.delay(100);  // Espera 100 milissegundos, evita possiveis leitura erronias
}

No vídeo abaixo, você poderá ver o projeto em funcionamento:


Conclusão

Transformar um Digispark ATtiny85 em um teclado personalizado é uma excelente forma de explorar a criatividade e aprender mais sobre eletrônica e programação de microcontroladores. Ao longo desse projeto, você pode ter percebido que, apesar do Digispark ser um dispositivo pequeno, ele oferece grandes possibilidades para automação e customização.

Foi difícil? Você aprendeu coisas novas? Cada projeto traz seus desafios únicos, mas também oferece a oportunidade de expandir seu conhecimento e habilidades. Ao seguir este guia, você teve a chance de se aprofundar na utilização do Digispark e da biblioteca DgiKeyboard.h.

Além disso, existem diversos scripts prontos disponíveis na internet que podem ser utilizados e adaptados para atender às suas necessidades específicas. Isso torna o processo de desenvolvimento mais acessível e permite que você crie soluções personalizadas de maneira eficiente.

Esperamos que esse projeto tenha sido uma experiência enriquecedora e que você continue explorando as inúmeras possibilidades que o mundo maker oferece. Se tiver dúvidas ou quiser compartilhar suas criações, não hesite em entrar em contado ou deixar um comentário!

Boas criações e até a próxima!


Sobre o autor


Rafael Alves de Lima

Rafael é um apaixonado por tecnologia e está concluindo a graduação em Ciência da Computação. Como aspirante a desenvolvedor de sistemas embarcados, ele adora explorar o mundo da IoT e está sempre em busca de novos conhecimentos e desafios. Com uma visão clara de seus objetivos, ele quer se tornar um especialista na área e deixar sua marca no universo da tecnologia.


Rafael Alves de Lima

22 de agosto de 2024

Rafael é um apaixonado por tecnologia e está concluindo a graduação em Ciência da Computação. Como aspirante a desenvolvedor de sistemas embarcados, ele adora explorar o mundo da IoT e está sempre em busca de novos conhecimentos e desafios. Com uma visão clara de seus objetivos, ele quer se tornar um especialista na área e deixar sua marca no universo da tecnologia.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!