9101| 0
|
[进阶] 用Arduino做一个键盘记录器 |
0x00简介:这篇文章的主要目的就是教你用Arduino UNO或者DFrobot出品的DFduino来做一个键盘记录器。当然了,这个做出来的成品偏大,实际作用不大,但是演示效果还是可以,如果你真的需要,可以去做一个试试看。 0x01器材: 1. Arduino UNO或者DFrobot出品的DFduino 2. 给Arduino用的SD卡插槽 3. 杜邦线若干 4. PS2转usb,usb转PS2转接口 5. 少量耐心 0x02制作思路:我的思路是,用PS2键盘库来接收监听键盘上的信息,之后,用sd卡的库来向内存卡里面存储数据。Arduino不传递数据,只是做监听之用。 为什么使用PS2键盘的库呢,因为PS2键盘传输数据比USB接口更容易理解和使用,只需要读一下百度百科上对于PS2键盘的接口引脚定义即可轻松理解和使用这个接口。这个接口里面的我们要用到的有四根线,VCC,GND,DATA,CLK。其中CLK为键盘和电脑的通信提供一个时钟,当CLK为低电平时电脑读取Data线上的数据,当CLK为高电平时,Data进行电平的翻转或者是保持原有的电平,以保证CLK翻转为低电平时Data上已经有了下一位要传输的数据。Data线上用八位高低电平代表一个键位, Data还用了一个校验位一个终止位一个相应位来确保电脑拿到了正确的信息。 在看完上面一段之后你应该可以理解到键盘是如何传输数据的了,现在我们要考虑的问题是如何进行监听键盘上的输入,至于如何监听,我的办法不是将Arduino直接加到电脑和键盘之间,而是将Data线以及CLK线引出来,Arduino不断接收这上面传输的数据,以来达到监听的目的。 当然了,现在多数键盘是USB键盘,我于是直接买了USB转PS2和PS2转USB的两个转接口,这样的话,我可以记录USB或者PS2键盘的输入了。 SD卡作为这个项目中另外一个重要的外设,我将它通过SPI总线来与Arduino板子进行沟通。有两点需要注意,1.Arduino读写2G以上的内存卡可能会出问题;2.要使用到的内存卡的硬盘格式为Fat格式。我在搭建该电路的过程中用到的就是一张2G的Fat格式的内存卡。顺便提一句,Arduino有SD卡的shield,你可以直接购买这种shield而不用想我一样接线,接线越多,接触不良越多,就很容易出现各种问题。 0x03接线:至于如何将PS2键盘的Data以及CLK引出各位可以自己想一下办法,我的点子是引到一个洞洞板上再引线出去。而键盘到Arduino,SD卡到Arduino请按照我下面列出的表格一一接线。 PS2 Arduino Data Pin2 CLK Pin3 SD Arduino SDCS Pin10 MOSI Pin11 MISO Pin12 SCK Pin13 5V 5V GND GND 0x04程序: 在输入这个程序之前,请务必安装好PS2键盘库和sd卡的库文件。 #include <PS2Keyboard.h> #include <SD.h> const int DataPin = 2; const int IRQpin = 3; const int chipSelect = 10; File myFile; PS2Keyboard keyboard; void setup() { Serial.begin(9600); pinMode(10, OUTPUT); while(!SD.begin(chipSelect)); keyboard.begin(DataPin, IRQpin); } void loop() { if(keyboard.available()) { char c = keyboard.read(); while(!(myFile =SD.open("new.txt", FILE_WRITE))); myFile.print(c); myFile.close(); } else; } 0x05使用:由于我没有给Arduino供电,于是我将Arduino直接通过另外一个USB接口供电。因为用了不少杜邦线,同时PS2接口里面插杜邦线的公头或者接母头很容易接触不良,所以说,运行时候有一定可能会不稳定。把它接到键盘和电脑之间之后,会在内存卡里面建立一个文本文件,并把键盘输入记录下到这个文本文件里面。 0x06结语,这个东西目前的样子并不能商用,同时想做键盘监听事实上有更好的芯片可以来做,也有更便宜的解决方案,但是,这个东西的实在意义就是为了好玩,也希望各位能玩的开心,再见。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed