Teclado DIY CopyPaste ou o teclado perfeito em um mundo onde todas as linhas de código já estão escritas

Muitas pessoas que estão começando a aprender a programação fazem a pergunta - está tudo bem em copiar e colar o código de outra pessoa? Dado que uma pessoa é uma criatura preguiçosa, e o tempo de um programador custa dinheiro - a resposta, na minha opinião, é óbvia - sim. Mas para as pessoas que levam esse princípio ao ponto do absurdo, que copiam sem pensar ou entender , e também às que escrevem um diploma, este ensaio é dedicado a este teclado e artigo. E sim, este teclado contém exatamente dois botões - copiar e colar.

imagem

Abaixo do corte, haverá uma história sobre montagem e firmware - até veremos o salto de um analisador lógico

Então, eu decidi montar este teclado. Decidi começar com os componentes - o digispark (um pequeno cachecol com attiny85 e uma ligação USB que pode ser inserida diretamente no computador) permite capturar pressionamentos de tecla e emular o teclado. Agora não tenho botões - não tenho botões mecânicos normais para o teclado, mas não tenho vontade de esperar, então vamos usar os botões smd. Como estes:

Botões


Tendo decidido os componentes, agora desenharemos o painel frontal para imprimi-lo em uma impressora no futuro. Dimensões 45 mm * 21 mm, tamanhos de almofada para botões 10 mm * 10 mm
Escreva algo na parte superior e inferior.

Aconteceu algo como isto:



O próximo problema são os botões smd, então eles precisam ser soldados a algum tipo de placa. Como envenenar o quadro por causa de algo assim não faz sentido - arranhamos o texto com a letra T:



A distância entre os centros dos botões é de 15 mm. Solda-os em uma placa improvisada.

Soldamos três fios. Quando o botão é pressionado, ele fecha um dos fios mais externos ao central.



Em seguida, pegue o primeiro pedaço de plástico de PVC que aparecer e cole nosso painel frontal e cole os bicos nos botões. A única coisa que não levei em consideração foi que a parte que pressiona a membrana gira nos botões de tato. Se você deseja melhorar o design - use as opções normais .

O resultado deve ser o que você viu no início do artigo. Outro ângulo.



Então, com a ajuda de dispositivos simples, você pode criar um teclado com dois botões, MAS POR QUÊ?


Conectamos três fios no digispark.



Esquema do “teclado”



Em seguida, precisamos fazer o digispark fingir ser um teclado e enviar CTRL + C / CTRL + V pressionando o botão.

Então, precisamos pegar o clique. Para começar, se você conectar o fio central a + 5V e os fios laterais aos pinos configurados para entrada, quando o botão for pressionado, sim, haverá 1 no pino, mas quando o pino não for pressionado, ele detectará interferência e não rastreará o que está pressionando, e que obstáculo. Esse problema foi resolvido surpreendentemente simples - você precisa puxar os pinos no chão através de um grande resistor (dezenas de ohms). Ao abrir a folha de dados no microcontrolador, você pode ver que dentro dele é possível ligar o elevador, mas apenas para VCC (+ potência). Na verdade, isso não é um problema - você só precisa conectar o pino central ao GND (terra) e inverter a lógica do trabalho.

Você pode imaginar desta maneira:



mas há mais um problema. Vivemos em um mundo imperfeito, onde os botões têm contato mecânico.
E ele é imperfeito. E nosso controlador é rápido - e, portanto, na hora de alternar, o botão não fecha instantaneamente, mas sua resistência salta por alguns milissegundos - isso é chamado de rejeição. Devido à rejeição, o controlador pode decidir que o botão é pressionado mais de uma vez, mas, por exemplo, 10. Aqui está uma ilustração desse fenômeno da Internet:



Mas também não é interessante! Talvez não tenhamos nenhum impacto. Para descobrir, descobri um analisador lógico. Agora vamos ver ... Estamos montando uma configuração de teste - um elevador de 10 com, 16 milhões de medições por segundo

Instalação


Vimos que a prensagem durou 0,11176 ms. Aproximamos o



momento de liberação do botão (destacado em vermelho) .No



lado existem algumas medições de "emissões" e em todo o salto durou cerca de 0,1435ms. Sim, eu sei que isso não é suficiente, mas vale a pena considerar que eu só tenho botões da fita, os contatos ainda não tiveram tempo para oxidar ou mudar de forma. E com o tempo, a situação só vai piorar. Como lidar com o salto? Existem três maneiras principais:

  1. Gatilho Schmidt + circuito RC - permite obter o sinal perfeito
  2. Circuito RC - permite reduzir as emissões (aumento suave do sinal)

Mas temos um microcontrolador inteiro - e, portanto, temos três métodos disponíveis: atrasos.Uma
das maneiras de lidar com a rejeição é verificar se o botão ainda é pressionado após uma certa quantidade de rejeição. Se implementado por meio de atrasos, o código estará bloqueando, mas como fazer isso corretamente pode ser visto em centenas de artigos sobre o combate ao salto e ao arduino.

Então, percebemos que o botão é pressionado - o que vem depois? Diga ao computador que CTRL + C / V está pressionado.

Isso é feito usando a biblioteca padrão do digispark.

O código resultante saiu assim:

#include "DigiKeyboard.h" // library for emulate keyboard
#define COPY 2 // copy button pin
#define PASTE 0// paste button pin
#define GND 1// center must be connected to ground
void setup() {
  pinMode(COPY, INPUT); // set pin to input
  digitalWrite(COPY, HIGH);// turn on pullup
  pinMode(PASTE, INPUT);
  digitalWrite(PASTE, HIGH);
  pinMode(GND, OUTPUT); // set pin to output
  digitalWrite(GND, LOW);// and set on pin GND
}


void loop() {
  // if something COPY or PASTE clicked
  if (!digitalRead(COPY) || !digitalRead(PASTE)) {
    delay(30); // wait(debounce)
    if (!digitalRead(COPY)) { // if copy still pressed send CTRL+C
      DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT);
      delay(30);
    }
    else if (!digitalRead(PASTE)) {// if paste still pressed send CTRL+V
      DigiKeyboard.sendKeyStroke(KEY_V , MOD_CONTROL_LEFT);
      delay(200);
    }
  }
}

Aqui está um projeto em 3 horas. Não tenha medo de copiar o código de outra pessoa!

Copiando e colando do estouro de pilha


All Articles