Conectando um teclado PS/2 no Arduino - Paulo Trentin
Paulo Marcos Trentin 9 de July de 2012 17 Comments
Exitem certas aplicações onde desejamos enviar uma grande quantia de dados do usuário para um microcontrolador. Um sistema de cadastro de usuários em uma Bina, por exemplo. Neste post, irei mostrar como é simples trabalhar com um teclado PS/2 no Arduino.
O conector PS/2
A origem do nome PS/2 vem do primeiro computador da IBM à usar este tipo de conectores[1]. Por seguirem o padrão dos conectores DIN (padronizado pelo instituto Alemão de padrões [2]), e serem menores, são conhecidos como mini-din [3]. Esse conector é menor que seu antecessor e muito mais sensível, portanto cuidado ao conectá-lo em sua placa mãe.
Este conector permite a conexão tanto de mouse quanto teclado. Aqui iremos trabalhar com o teclado apenas, mas o conceito para se trabalhar com mouse é o mesmo.
As conexões são bastante simples, não necessitando, além do conector ps/2, de nenhum componente externo extra. Como pode ser visto nas figuras abaixo:
Conector PS/2 para teclado ou mouse. Fonte – 4: http://www.pjrc.com/teensy/ td_libs_PS2Keyboard.html
Conexões teclado PS/2 e Arduino. Fonte – 5: http://nocommercialpotential.posterous.com/ interfacing-the-ps2-keyboard
O mais difícil em relação à parte eletrônica é conseguir um conector padrão PS/2. Retirei um de uma placa mãe com ajuda de uma estação de solda a vapor e soldei os 4 fios necessários. Abaixo vemos as conexões elétricas e o teste feito via Serial.
Arduino com soquete para teclado PS/2
Testes via Serial
O exemplo testado aqui está presente na biblioteca PS2Keyboard [4]. Alterei os pinos de conexão, sendo o pino 4 no DataPin e o pino 2 no IRQpin. Lembrando que o IRQ deve ser uma interrupção externa e no Arduino Duemilanove ou Uno pode ser usado o pino 2 ou 3 digital para esta função.
Abaixo o código fonte padrão usado para testes. As únicas linhas modificadas foram as de seleção dos pinos citados acima. A biblioteca utilizada e este código encontram-se disponíveis para download aqui.
/*  PS2Keyboard library example
Arduino:      2, 3
Modified by Paul Stoffregen  June 2010
Como podemos perceber, é relativamente fácil receber dados do teclado com o Arduino, mas tome cuidado com as conexões do soquete PS/2, pois é fácil de se confundir ao trabalhar com ele. Lembre-se que o esquema elétrico mostra a pinagem do conetor fêmea (da placa mãe).
Repare que a biblioteca por padrão não implementa um teclado padrão ABNT2, mas parece-me ser possível sua adaptação, afinal ela já suporta 2 tipos de teclados: US e Alemão.
Agora você já pode fazer seu Arduino receber uma grande quantia de dados do usuário sem precisar de um computador!
[1] http://en.wikipedia.org/wiki/IBM_Personal_System/2
[2] http://en.wikipedia.org/wiki/Deutsches_Institut_f%C3%BCr_Normung
[3] http://en.wikipedia.org/wiki/Mini-DIN_connector
[4] http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html
[5] http://nocommercialpotential.posterous.com/interfacing-the-ps2-keyboard
30 de January de 2013 at 14:47
thank you very good, helped a lot, excuse me English because I am Brazilian. att Fernando
2 de February de 2013 at 2:04
cara' como seria o esquema para ligar um teclado usb
24 de February de 2013 at 11:16
olha só o que achei: http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/
Nunca trabalhei desta maneira, mas parece funcionar muito bem!
guilhermepires@gmail.com says:
19 de March de 2013 at 13:54
eu não estou conseguindo receber o dado do teclado poderia me ajudar ??
instalei a bliblioteca.
coloquei o programa no arduino.
abri a serial port e não recebo nada digitado por mim
15 de November de 2013 at 21:41
desculpe a demora. Já testou outros teclados??
26 de April de 2013 at 11:02
Sabe me dizer como eu faço uso do teclado numérico? Como estariam representados na biblioteca?
1 de May de 2013 at 22:12
quando você fala em teclado numérico, refere-se àqueles teclados usb?
Ou um "teclado membrana"?
20 de September de 2013 at 13:40
eu fiz esta conversão descrita no tuto, funcionou perfeitamente para um teclado normal, seja ele ps2 ou USB, porém não consegui fazer ele funcionar com o teclado numérico USB. Sabe dizer se tem alguma maneira, ou porque nao funciona?
15 de November de 2013 at 21:21
Oi Camilo, provavelmente este teclado numérico específico trabalhe com algum driver adicional, por isso não funciona.
25 de August de 2014 at 19:53
Cara, funcionou certinho, mas queria que o dado lido fosse jogado em uma caxa de texto qualquer, ou bloco de notas por exemplo, e não no serial monitor, pode me ajudar??
26 de August de 2014 at 22:49
ok neste caso você precisa interfacear o Arduino via Serial com uma linguagem como Java, e fazer essa leitura normalmente e por fim escrever em um arquivo. Procure por java + arduino que irá encontrar tutoriais para interfaceá-los.
Allan Carniel says:
25 de September de 2014 at 19:16
Achei bem interessante o tutorial…mas saberia me informar o porque o código da erro na linha:
Instalei a biblioteca certinho, mas não descobri o porque disso.
28 de September de 2014 at 19:08
tente baixar a última versão da biblioteca aqui: http://playground.arduino.cc/Main/PS2Keyboard
Lembre-se sempre de reiniciar a IDE para que tenha efeito ok?
lenadro luis says:
15 de November de 2014 at 18:25
poderia me falar se eu conectar um displai de cristal liquido, eu consigo ver oque eu digitei no teclado?
estou começãndo agora nesta area
23 de November de 2014 at 21:03
Oi Leandro, sim, você pode fazer isso desde que o software leia os dados do teclado e insira no display lcd.
9 de June de 2016 at 2:25
O programa rodou certinho e escreve na serial tudo que digito no teclado …
Pensei então o seguinte … Se eu tiver esse arduino conectado a outro arduino via bluettoth ( ou seja, se eu digito no arduino q tem o teclado ele escreverá na serial do outro arduino ) e aí será que eu consigo extrair esses valores da serial do segundo arduino e mandar via ps2 de um micro criando assim a experiência de um teclado sem fio via arduino ? As saídas analógicas me parece que retorna apenas de 0 a 255 .. como enviar os caracteres reais a entrada ps2 do micro que esta ligado ao arduino receptor ?
16 de June de 2016 at 21:23
Nunca testei Fernando, mas me parece que esta biblioteca faz o que você precisa: https://www.arduino.cc/en/Reference/MouseKeyboard