Índice:

Teclado programável: 5 etapas (com imagens)
Teclado programável: 5 etapas (com imagens)
Anonim
Teclado programável
Teclado programável
Teclado programável
Teclado programável

Neste projeto, mostrarei como fazer um teclado programável relativamente simples e barato para mapear seus atalhos de teclado mais usados, aplicativos e muito mais.

Este teclado é detectado como teclado em todos os principais sistemas operacionais, sem a necessidade de drivers adicionais.

Suprimentos

  • Codificador rotativo.
  • Muitos botões (dependendo de suas necessidades).
  • Arduino Pro Micro, Arduino Leonardo ou qualquer outra placa de desenvolvimento com Atmega32U4 MCU.
  • Fio, solda, ferro de solda, etc.
  • (Opcional) Uma base pesada para evitar que o teclado deslize, estou usando um HD de 3,5 "antigo

Etapa 1: Circuito Elétrico

Circuito elétrico
Circuito elétrico

Optei por usar a placa de desenvolvimento Arduino Pro Micro com Atmega32U4 MCU, que possui 18 pinos digitais utilizáveis.

Os pinos para conectar os botões e o codificador rotativo foram selecionados sem uma ordem específica em mente, mas algumas coisas devem ser observadas:

  1. Todos os pinos com capacidade de leitura digital têm pull-ups internos que permitem mitigar resistores pull-down externos. É claro que o código deve ser atualizado de acordo, porque ele espera que o estado do pino vá de baixo para alto quando os botões são pressionados.
  2. No exemplo da biblioteca encoder.h observou-se que o melhor desempenho do codificador é alcançado quando ambos os pinos são conectados aos pinos com capacidade de interrupção do MCU. A maioria dos pinos analógicos do Atmega32U4 não tem capacidade de interrupção.
  3. Os valores exatos do resistor pull-down não importam muito, qualquer coisa de 1 kΩ a 100 kΩ funcionará bem. Valores maiores de resistência permitem menor dissipação de energia, mas resultam em uma resposta mais lenta do pino às mudanças de tensão. Basta escolher os resistores de valor que você tiver mais.
  4. Os codificadores mecânicos não são os mais confiáveis devido ao desgaste e oscilação do contato. É por isso que uma boa solução de depuração é necessária. Meus valores de capacitor escolhidos e tempos de atraso no código provavelmente não fornecerão os melhores resultados para você. Portanto, um pouco de experimentação é necessária. Ou mude para algo como um codificador ótico, mas seu preço é significativamente mais alto.

Etapa 2: Montagem

conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto
conjunto

Eu queria deixar o teclado o mais limpo possível, então soldei todos os componentes na parte de trás da placa de protótipo. Achei que o teclado seria mais ergonômico se fosse usado elevado em um ângulo pequeno. É por isso que soldei o Arduino Pro Micro em uma placa separada e conectei todos os pinos digitais com fio a botões de pressão. É mais conveniente conectar o cabo USB dessa forma.

Achei o antigo HDD de 3,5 para usar como base para o teclado, é bastante pesado e evita que a forma da placa deslize pela mesa durante a operação (almofadas antiderrapantes também ajudam). Também tem orifícios de parafuso de 3 mm convenientes nos quais aparafusei espaçadores de latão e fixou a placa em um pequeno ângulo.

Etapa 3: Programação

O código é escrito com o Arduino IDE. Você precisará instalar 2 bibliotecas:

  • Codificador de Paul Stoffregen
  • Teclado Arduino

Para compilar para Atmega32U4, você também precisa instalar o arquivo da placa Arduino Pro Micro, Sparkfun tem um ótimo tutorial de como fazer isso.

Uma coisa a ser observada com antecedência é ter cuidado para não deixar "teclas pressionadas" em seu código. Isso aconteceu comigo e o MCU estava constantemente enviando spam para algumas combinações de teclas. A única maneira que estou ciente de como consertar isso é re-gravar o boot-loader para MCU. Se você acabar como eu, você pode seguir este guia para gravar o boot-loader, você precisará de outra placa arduino para usar como um programador.

No loop principal, o MCU primeiro lê cada estado do botão de pressão, se a mudança de estado de LOW para HIGH for detectada, a função keyboard_shortcut (i) é executada. A variável i é uma id do botão pressionado, o número total do botão pressionado é definido por ALL_BUTTONS (no meu caso 15). Quando executado, keyboard_shortcut (i) envia CTRL + SHIFT e, em seguida, uma letra que é mapeada para o id do botão: 1-> A, 2-> B, 3-> C etc. Algumas combinações como CTRL + SHIFT + N são omitidas porque são já usado no Windows10 por padrão (neste caso, para criar uma nova pasta). Aqui está a lista de todos os atalhos padrão do Windows. Após um curto retardo, o MCU envia um sinal para liberar todas as teclas e as saídas de função de volta para o loop principal.

Depois que todos os botões são verificados, o MCU verifica se a posição do codificador rotativo mudou e, em caso afirmativo, keyboard_shortcut (i) é executado com id exclusivo.

Pressionar o botão do codificador inverte a variável booleana encoderButtonFlag. Quando o codificador é girado, um atalho diferente é enviado ao PC, dependendo da direção de rotação e do valor do encoderButtonFlag.

Se debugFlag estiver definido como 1, as mensagens de depuração serão enviadas via UART para o monitor serial.

Etapa 4: configurar atalhos

Configurando Atalhos
Configurando Atalhos
Configurando Atalhos
Configurando Atalhos

O que cada atalho faz depende de você, todos nós temos preferências diferentes. Vou fornecer os atalhos que configurei para mim como exemplo. Estou usando o Linux Mint 19.3 com o gerenciador de desktop xfce4, portanto, meus exemplos envolvem principalmente scripts bash, mas também mostrarei alguns exemplos básicos para o Windows10.

Na primeira imagem você pode ver quais scripts mapeei para quais atalhos. É feito a partir do menu de configurações do xfce, o processo para isso é direto. Você pode encontrar esses scripts em meu repositório GitHub

6 botões menores na parte inferior são para iniciar aplicativos como navegador da web ou gerenciador de arquivos, alguns desses aplicativos são chamados a partir do script start_only_one_app.sh, que obtém todos os nomes de aplicativos iniciados e procura o aplicativo que deseja iniciar. Se a janela do aplicativo já existe, ela é focada, caso contrário, uma nova instância de um aplicativo é iniciada.

Outros scripts:

  • 2nd_display_control.sh - liga / desliga o segundo monitor.
  • moon_lamp.sh - liga / desliga minha lâmpada lunar.
  • pc_load.sh - cria uma bolha de notificação com o uso e as temperaturas atuais da CPU e GPU.
  • shutdown.sh - inicializa o desligamento do PC com 1 minuto de atraso e cria uma bolha de notificação na qual o tempo restante é exibido.
  • spec_vpn.sh - conecta-se a um servidor OpenVPN específico ou se a conexão já existir, desconecta-se do servidor.
  • shortcut_controll.sh - recebe o comando (mais, menos, tab, fechar) como argumento, detecta qual janela agora está focada e se o aplicativo específico for encontrado ativo executa a ação de controle. Por exemplo, para abrir uma nova aba no editor de texto sublime, o atalho padrão é "CTRL + N" e no terminal xfce - "CTRL + T", então este script permite abrir uma nova aba no sublime e no terminal com o mesmo botão.

A primeira função do codificador giratório é controlar o volume, a segunda função é controlar o zoom da janela ativa via shortcut_controll.sh.

Para o sistema operacional Windows, você pode mapear atalhos para aplicativos por meio da janela de propriedades do programa, conforme mostrado na segunda imagem. Para qualquer outra coisa, você vai querer usar o AutoHotkey. É a linguagem de script de automação para Windows.

Alguns exemplos simples de sintaxe AHK:

;Controle de volume

^ + t:: Enviar {Volume_Up}

Retorna

^ + v:: Enviar {Volume_Down}

Retorna

; Fechar janela ativa

^ + h:: WinGetTitle, Title, A

PostMessage, 0x112, 0xF060,,,% Title%

Retorna

;Desligue o pc

^ + b:: Executar desligamento / s

Etapa 5: melhorias

Melhorias
Melhorias

Algumas melhorias possíveis:

  • Botões de pressão de melhor qualidade.
  • O protótipo de PCB flexiona bastante quando os botões são pressionados.
  • Iluminação RGB para mudar de cor dependendo de qual codificador rotativo de função está definido.
  • Mais botões (use o expansor IO IC).
  • Melhor codificador rotativo (ou melhor solução de eliminação de pontos).

Recomendado: