Um teclado de atalhos, também conhecido como macropad, é um dispositivo de entrada que possui um conjunto de teclas adicionais programáveis para executar funções específicas ou atalhos. Essas teclas são personalizáveis e podem ser configuradas para executar comandos específicos, como abrir programas, iniciar macros, inserir texto, controlar o volume e a luminosidade, entre outras funções.
Esses teclados são úteis para pessoas que trabalham com programas de edição de vídeo, áudio, imagens ou jogos, pois permitem que as tarefas mais frequentes sejam executadas rapidamente, sem a necessidade de acessar menus ou usar atalhos complexos. Além disso, também podem ser utilizados para automatizar tarefas repetitivas e economizar tempo.
Hoje com o acesso a placas makers, como Arduino, podemos criar nosso próprio macropad é funcional e personalizado. Além disso, podemos criar um teclado adaptado para pessoas com limitações motoras, com opções que vão desde teclas maiores e mais espaçadas até dispositivos de acionamento alternativos. As adaptações podem ser personalizadas para se adequar às necessidades individuais.
A seguir vamos criar um macropad usando a placa Franzininho WiFi e programação em CircuitPython.
O que preciso para fazer um Macropad?
Para fazer um macropad, é necessário ter alguns componentes e ferramentas essenciais:
- Microcontrolador com USB device com suporte a HID: Esse componente é responsável por receber os comandos do usuário e transmiti-los ao computador ou smartphone.
- Circuito para interface com o usuário: Teclas, botões, sensores ou qualquer outra forma de entrada de dados. Esses componentes são responsáveis por permitir que o usuário interaja com o dispositivo e execute os comandos desejados.
- Biblioteca para interface HID: Essa biblioteca permite que o microcontrolador se comunique com o dispositivo host por meio do protocolo HID, padrão para dispositivos de entrada.
- Firmware para controle da aplicação: firmware é responsável por controlar o comportamento do dispositivo, executar os comandos de acordo com a entrada do usuário e enviar os dados para o computador ou smartphone conforme as suas necessidades.
Recursos (mínimos) necessários para desenvolver o Macropad
- Placa Franzininho WiFi (Com CircuitPython instalado);
- 2 Teclas tipo push-button;
- Protoboard;
- PC com Windows, Linux ou Mac OS.
Circuito do Macropad
Monte o circuito a seguir:
Opcionalmente você pode montar com mais teclas ou outros tipos de teclas:
Biblioteca HID
Para desenvolver essa aplicação, precisemos da biblioteca: Adafruit HID. Baixe a biblioteca para a versão do CircuitPython que está usando em: Libraries
Extraia os arquivos baixados e copie a pasta adafruit_lib para dentro da pasta lib no dispositivo CIRTCUITPY criado no PC:
Para referência ao uso da biblioteca, acesse: CircuitPython HID Keyboard and Mouse | CircuitPython Essentials | Adafruit Learning System
Exemplo 1 – Teclas de atalho
O primeiro exemplo de aplicação será para criar teclas de atalhos e combinação de teclas. Digite o código a seguir no arquivo code.py da sua placa:
import time
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
kbd = Keyboard(usb_hid.devices)
key1 = digitalio.DigitalInOut(board.IO7)
key1.direction = digitalio.Direction.INPUT
key1.pull = digitalio.Pull.UP
key2 = digitalio.DigitalInOut(board.IO6)
key2.direction = digitalio.Direction.INPUT
key2.pull = digitalio.Pull.UP
key3 = digitalio.DigitalInOut(board.IO5)
key3.direction = digitalio.Direction.INPUT
key3.pull = digitalio.Pull.UP
key4 = digitalio.DigitalInOut(board.IO4)
key4.direction = digitalio.Direction.INPUT
key4.pull = digitalio.Pull.UP
key5 = digitalio.DigitalInOut(board.IO3)
key5.direction = digitalio.Direction.INPUT
key5.pull = digitalio.Pull.UP
key6 = digitalio.DigitalInOut(board.IO2)
key6.direction = digitalio.Direction.INPUT
key6.pull = digitalio.Pull.UP
while True:
if key1.value == False:
kbd.send(Keycode.WINDOWS, Keycode.TAB)
if key2.value == False:
kbd.send(Keycode.CONTROL, Keycode.C)
if key3.value == False:
kbd.send(Keycode.CONTROL, Keycode.V)
if key4.value == False:
kbd.send(Keycode.RIGHT_ARROW)
if key5.value == False:
kbd.send(Keycode.SPACEBAR)
if key6.value == False:
kbd.press(Keycode.DOWN_ARROW)
else:
kbd.release(Keycode.DOWN_ARROW)
time.sleep(0.1)
Exemplo 2 – Consumer Control
Agora aprenderemos a enviar comandos para controle do PC. Podemo controlar volume, brilho, play/pause, etc.
Digite o seguinte código no arquivo code.py:
import time
import board
import digitalio
import usb_hid
from adafruit_hid.consumer_control import ConsumerControl
from adafruit_hid.consumer_control_code import ConsumerControlCode
key1 = digitalio.DigitalInOut(board.IO7)
key1.direction = digitalio.Direction.INPUT
key1.pull = digitalio.Pull.UP
key2 = digitalio.DigitalInOut(board.IO6)
key2.direction = digitalio.Direction.INPUT
key2.pull = digitalio.Pull.UP
key3 = digitalio.DigitalInOut(board.IO5)
key3.direction = digitalio.Direction.INPUT
key3.pull = digitalio.Pull.UP
key4 = digitalio.DigitalInOut(board.IO4)
key4.direction = digitalio.Direction.INPUT
key4.pull = digitalio.Pull.UP
key5 = digitalio.DigitalInOut(board.IO3)
key5.direction = digitalio.Direction.INPUT
key5.pull = digitalio.Pull.UP
key6 = digitalio.DigitalInOut(board.IO2)
key6.direction = digitalio.Direction.INPUT
key6.pull = digitalio.Pull.UP
cc = ConsumerControl(usb_hid.devices)
while True:
if key1.value == False:
cc.send(ConsumerControlCode.VOLUME_INCREMENT)
time.sleep(0.1)
if key2.value == False:
cc.send(ConsumerControlCode.BRIGHTNESS_DECREMENT)
time.sleep(0.1)
if key3.value == False:
cc.send(ConsumerControlCode.BRIGHTNESS_INCREMENT)
time.sleep(0.1)
if key4.value == False:
cc.send(ConsumerControlCode.VOLUME_DECREMENT )
time.sleep(0.1)
if key5.value == False:
cc.send(ConsumerControlCode.MUTE)
time.sleep(0.1)
if key6.value == False:
cc.send(ConsumerControlCode.PLAY_PAUSE)
time.sleep(0.1)
time.sleep(0.1)
Saiba mais
Hello World com a Franzininho WiFi no CircuitPython
Franzininho WiFi: Pinos de Toque Capacitivo com CircuitPython
Franzininho WiFi: PWM com CircuitPython
Referências
- https://docs.franzininho.com.br/docs/franzininho-wifi/exemplos-circuitpython/primeiros-passos
- https://docs.circuitpython.org/projects/hid/en/latest/index.html
- https://learn.adafruit.com/customizing-usb-devices-in-circuitpython/hid-devices
- https://learn.adafruit.com/circuitpython-essentials/circuitpython-hid-keyboard-and-mouse
- https://github.com/adafruit/Adafruit_CircuitPython_HID





