HacKeyboard, um teclado mecânico de hardware aberto – parte IV

Olá a todos! Esta é a quarta parte da publicação sobre a construção do HacKeyboard. Caso não tenham visto as anteriores, podem ver aqui:

[HacKeyboard, um teclado mecânico de hardware aberto – parte I]

[HacKeyboard, um teclado mecânico de hardware aberto – parte II]

[HacKeyboard, um teclado mecânico de hardware aberto – parte III]

Onde íamos nós?… Ah, sim… caixa do HacKeyboard terminada!

Na última parte deste projecto tinha acabado de de descrever o processo que usei para fazer a caixa do teclado. Abaixo podem ver algumas fotos de como ficou. Por esta altura estava surpreendido comigo próprio por ter conseguido fazer uma caixa com tão bom aspecto 🙂

Caixa do Hackeyboard

colocação dos interruptores e teclas

colocação dos interruptores e teclas

caixa do hackeyboard completa

Parte mecânica concluída. Hora de passar à electrónica! 🙂

Selecção dos componentes e desenho do circuito e PCB

Vou começar por fornecer-vos a lista de componentes necessária para a parte electrónica e depois vou explicar-vos um pouco do circuito e do desenho da PCB. Apenas como um pequeno extra, a lista de componentes abaixo é o resultado de três iterações do esquema e da PCB. Para chegar ao resultado final tive de desenhar três versões do esquema, três versões da PCB, produzir manualmente três PCBs de dupla face gigantes, incluindo furos, vias e soldar componentes. Levou-me algum tempo para conseguir fazer isto tudo, mas não desisti e acabei por chegar a um desenho final funcional.

Felizmente para vocês, não terão de passar por tudo isto uma vez que o circuito e PCB finais são completamente open source e podem simplesmente usá-los como estão ou fazer as vossas próprias modificações (interruptores diferentes, layouts diferentes, funcionalidades extra, etc.).

Aqui está a lista de componentes:

Comprei a maior parte das coisas no ebay. Caso sejam estudantes podem usar o vosso email da escola/universidade para pedir amostras grátis à Microchip ou à Maxim, que são os componentes “menos baratos”.

Tal como mencionei, esta lista de componentes não ficou definida na primeira iteração. Na primeira versão da PCB que tentei fazer usei um regulador Charge Pump de 5V com 300mA de saída TPS60130 da Texas Instruments mas dado o tamanho minúsculo do componente tornava-se difícil soldá-lo e também fazer uma PCB com pistas tão finas. A primeira versão também tinha um footprint para um módulo Bluetooth RN-42-HID, conector para baterias de Li-Ion, e um carregador de baterias de Li-Ion com partilha de carga MCP73871 (datasheet) da Microchip mas acabei por desistir destas opções porque estava com pressa para ter o teclado pronto para a Lisbon Mini Maker Faire e estas opções acabariam por atrasar tudo: a PCB teria de ter muito mais vias e eu teria de investir muito mais tempo a desenvolver o firmware para o Bluetooth e para a gestão de energia e a fazer debugging. Devido a tudo isto, estas funcionalidades foram abandonadas nesta versão. Ficam para a próxima.

Usei o KiCAD para o desenho do esquema e da PCB. Todos os ficheiros do KiCAD, juntamente com versões em PDF do esquema e da PCB, estão disponíveis no meu Github.

Desenhar o esquema até foi bastante simples e podem ver o resultado abaixo. Posteriormente irei explicar as partes essenciais do esquema.

esquema do hackeyboard

Desenhar a PCB demorou bastante mais tempo porque foi necessário colocar todos os componentes na posição correcta, colocar todas as vias e fazer o routing de todas as pistas. Para além disso, tive de desenhá-la duas vezes devido a problemas com alguns componentes escolhidos previamente, alguns enganos e para torná-la mais fácil de fabricar com métodos caseiros. Abaixo podem ver o resultado final:

hackeyboard pcb superior

hackeyboard pcb inferior

Breve explicação da electrónica: O HacKeyboard tem um único microcontrolador, o PIC18F4550, que tem USB integrado. A palavra ‘microcontrolador’ e a referência ‘PIC18F8550’ podem parecer estranhas para alguns de vós, mas é basicamente o mesmo tipo de circuito integrado que o ATMega328 que encontram nos Arduinos, mas de um fabricante diferente, com uma arquitectura diferente e com funcionalidades internas diferentes. Resumidamente, o microcontrolador é responsável por gerir e controlar tudo no teclado:

  • Ler a matriz de interruptores: Tendo em conta que um teclado é uma grande matriz de interruptores, cada coluna e cada linha estão ligadas a um pino de entrada/saída do microcontrolador. Este liga uma das colunas e lê os níveis lógicos em todas as linhas, verificando que interruptores nessa coluna estão pressionados. Depois desliga essa coluna e faz o mesmo na seguinte e assim sucessivamente. A leitura dos interruptores ocorre diversas vezes por segundo. É um processo muito rápido que está sempre a ser executado pelo microcontrolador. Cada vez que é feita uma leitura completa da matriz, o microcontrolador envia os respectivos caracteres por USB;
  • Controlo da pen USB interna: A pen interna é alimentada por um MAX682, que é um regulador Charge Pump de 5V que tem um pino de ‘Shutdown’. Para activar ou desactivar a pen USB o microcontrolador activa ou desactiva este pino, ligando ou desligando a alimentação da pen;
  • Gravação de macros e key logging: No circuito existe uma EEPROM série 24AA512 (64K x 8 bits) que é uma memória que é usada para gravar todas as macros e o registo contínuo de teclas pressionadas. Quando os modos de gravação estão activados, o microcontrolador , que está ligado à memória utilizando um protocolo série (SPI), envia para posições de memória específicas as teclas que devem ser gravadas. Esta memória mantém toda a informação mesmo que o teclado seja desligado. No caso do firmware actual, cada posição de macro pode gravar até 150 bytes e o resto da memória é usado pelo key logger. Esta alocação de espaço pode facilmente ser modificada apenas mudando os endereços de memória no código fonte;
  • Controlo dos LEDs RGB WS2812B: O microcontrolador também é responsável por controlar os LEDs RGB. Estes LEDs têm o seu próprio protocolo série, em que um ‘0’ é representado por um pulso com uma certa temporização e um ‘1’ é representado por outro pulso com uma temporização diferente (vejam o datasheet para consultar a duração dos diferentes pulsos). Os LEDs têm uma memória de 3 bytes incluída para armazenar 3 valores para vermelho, verde e azul. Estes valores podem estar entre 0 e 255. Além da memória, têm ainda um registo de deslocamento que lhes permite passar informação aos LEDs seguintes. Se apenas se tiver 2 LEDs WS2812B, liga-se o microcontrolador ao pino de entrada de dados de um deles e o pino de saída de dados deste é ligado ao pino de entrada de dados do segundo LED. Depois o microcontrolador terá de enviar 6 bytes, 3 para cada LED, começando pelo segundo LED (mais distante em termo de ligações). O primeiro LED irá passar a informação para o segundo.

Estão a gostar do projecto? Sigam o link para ler o resto e para ver o conjunto completo de fotos da construção: [HacKeyboard, um teclado mecânico de hardware aberto – parte V]


Achou esta publicação útil? Deseja contribuir para outros projectos envolvendo ciências computacionais, electrónica, robótica ou mecatrónica que serão publicados neste blog? Se sim, pode fazer uma doação utilizando o botão do Paypal abaixo. Obrigado! 🙂

Donate



  • Facebook
  • Twitter
  • Google Plus
  • LinkedIn
  • Reddit
  • Delicious
  • StumbleUpon
  • Digg
  • RSS
  • Email
  • Print