|
鍵盤作為經(jīng)典的輸入設(shè)備,使用在很多互動(dòng)中都有特別的優(yōu)勢(shì),比如我們可以通過鍵盤直接給flash傳遞按鍵事件。而無需通過串口之類的特殊接口,雖然我們可以拆一個(gè)傳統(tǒng)的鍵盤,然后將里面的按鍵引出來,但是這樣有一個(gè)缺點(diǎn),就是鍵值不能動(dòng)態(tài)改變并且不能一次多鍵。使用模擬鍵盤的話,我們就可以隨意在程序設(shè)置按鍵的時(shí)間和鍵值。比如本文的例子就是按下一個(gè)按鍵,模擬鍵盤就在電腦輸入“HELLO WORLD”。
硬件部分:
材料清單:
Arduino x1
68Ω電阻 x2 (沒有68Ω的話,用50~100Ω電阻也行)
2.2kΩ電阻 x1 (沒有2.2kΩ的話,用1.5k~2.2k電阻也行)
USB連接線(一端是USB口,另一端是電線) x1
3.6v 穩(wěn)壓管(建議選用功耗0.25~0.5w的)x2
194146uld4tdhd1b111w9d.jpg (180.54 KB, 下載次數(shù): 322)
下載附件
2016-4-18 01:15 上傳
1942021gy6n1v41yne26ia.jpg (176.33 KB, 下載次數(shù): 296)
下載附件
2016-4-18 01:15 上傳
電路原理圖:
120616mer6qi8i8smt5qs6.gif (10.04 KB, 下載次數(shù): 313)
下載附件
2016-4-18 01:15 上傳
電路圖解說:
1、兩個(gè)68Ω的電阻起到限流和保護(hù)作用,防止在意外情況下?lián)p壞計(jì)算機(jī)的USB端口或單片機(jī)的端口。
2、2.2kΩ電阻是上拉電阻,用于分辨總線狀態(tài)。如果上拉電阻接于D+和+5v端則是高速USB設(shè)備,接于D-與+5v端,則是低速設(shè)備。此處鍵盤傳輸速率不高,接到D-作為低速設(shè)備即可。
3、D+和D-上的3.6V穩(wěn)壓二極管D1和D2起到限制數(shù)據(jù)線上的電平的作用。因?yàn)樵赨SB規(guī)范中規(guī)定數(shù)據(jù)線D+和D-上的電平范圍是3.0V至3.6V,而AVR單片機(jī)的輸出電平是Vcc。如果單片機(jī)的Vcc是5V,在沒有D1和D2的情況下將造成電平不匹配,會(huì)造成在很多計(jì)算機(jī)中無法正確識(shí)別出USB設(shè)備。如果用戶系統(tǒng)的Vcc在3.0V至3.6V之間,就可以省略這兩個(gè)穩(wěn)壓二極管。從這里也可以看出用戶系統(tǒng)的Vcc必須高于3V。
4、由于低速AVRUSB所需要的是1.5MHz時(shí)鐘,而單片機(jī)每8條指令就能精確完成一個(gè)數(shù)據(jù)位的采集。所以AVRUSB最小單片機(jī)時(shí)鐘頻率是12MHz。并且可以使用的時(shí)鐘頻率有12MHz、12.8MHz、15MHz、16MHz、16.5MHz、20MHz,其他的不支持。所以如果使用最小系統(tǒng)制作此模擬鍵盤的話8MHz的話,ATMega8L不能用。
————————
軟件部分:
Arduino支持庫文件:
UsbKeyboard.zip
(112.45 KB, 下載次數(shù): 52)
2016-4-18 01:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
文件下載后解壓到arduino編譯器的libraries文件夾下面。
注意:
1、UsbKeyboard庫中,usbconfig.h里面可以更改USB接線的引腳定義,下面給出一個(gè)大概解釋(下面的PORTD是指AVR單片機(jī)的PORTD,要查詢Arduino原理圖:
Arduino_Uno_Rev3-schematic.pdf
(81.39 KB, 下載次數(shù): 15)
2016-4-18 01:13 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
才能得到是Arduino的哪個(gè)引腳):
#define USB_CFG_IOPORTNAME D | USB輸入輸出引腳使用AVR單片機(jī)的PORTD,如果改成B就是使用PORTB | #define USB_CFG_DMINUS_BIT 4 | USB的D-接PORTD的第四位PD4,對(duì)應(yīng)Arduino D4 | #define USB_CFG_DPLUS_BIT 2 | USB的D+接PORTD的第二位PD2,對(duì)應(yīng)Arduino D2 | #define USB_CFG_PULLUP_IOPORTNAME D | USB上拉引腳使用AVR單片機(jī)的PORTD,如果改成B就是使用PORTB | #define USB_CFG_PULLUP_BIT 5 | USB的上拉電阻接PORTD的第五位PD5,對(duì)應(yīng)Arduino D5 |
2、在UsbKeyboard庫的UsbKeyboard.h里面,有關(guān)于模擬鍵值的表
#define KEY_A 4
#define KEY_B 5
#define KEY_C 6
#define KEY_D 7
#define KEY_E 8
等。但不齊全。經(jīng)過測(cè)試,其實(shí)這個(gè)鍵盤基本可以模擬幾乎所有鍵值(Power,Sleep,Pause似乎不能)。
比如方向鍵右左下上分別對(duì)應(yīng)79,80,81,82數(shù)字。即寫成
UsbKeyboard.sendKeyStroke(79);
UsbKeyboard.sendKeyStroke(81);
等。由于整理比較麻煩,大家可以自己下載個(gè)KeyboardTest軟件測(cè)試不同數(shù)字下面的鍵值。
程序示例:
下面的例子演示了用Arduino虛擬鍵盤的應(yīng)用例子。打開記事本,然后將Arduino的D12引腳和GND連起來,就會(huì)打印HELLO WORLD字樣。
- /*
- Arduino模擬鍵盤 by Ansifa
- 2012.6.8
-
- 功能描述:插上此模擬鍵盤,打開記事本,然后按下按鈕,即可在記事本打印出HELLO WORLD字樣
-
- 接線方法:
- Arduino D2接68Ω電阻后,接USB線D+
- Arduino D4接68Ω電阻后,接USB線D-
- Arduino D5接2.2kΩ電阻后,接USB線D-
- Arduino D2接3.6v穩(wěn)壓管到GND
- Arduino D4接3.6v穩(wěn)壓管到GND
- +5v接USB線VCC
- GND接USB線GND
- Arduino D1接一個(gè)開關(guān)到GND
-
- 附:USB線序顏色(由于各生產(chǎn)廠不同,不一定準(zhǔn)確,僅供參考)
- *USB鍵鼠: | *USB接口
- 白<->VCC | 紅<->VCC
- 橙<->D- | 白<->D-
- 綠<->D+ | 綠<->D+
- 藍(lán)<->GND | 黑<->GND
-
- */
-
- #include "UsbKeyboard.h"
- int KEYPIN = 1; //按鍵接在D1引腳,也可以改成任何引腳
- void setup()
- {
- TIMSK0 &= !(1 << TOIE0); //
- pinMode(KEYPIN, INPUT);
- digitalWrite(KEYPIN, HIGH);
- }
- void loop()
- {
- UsbKeyboard.update();
- if(digitalRead(KEYPIN) == HIGH)
- {
- delay(100);
- if(digitalRead(KEYPIN) == LOW)
- {
- UsbKeyboard.sendKeyStroke(KEY_H);
- UsbKeyboard.sendKeyStroke(KEY_E);
- UsbKeyboard.sendKeyStroke(KEY_L);
- UsbKeyboard.sendKeyStroke(KEY_L);
- UsbKeyboard.sendKeyStroke(KEY_O);
- UsbKeyboard.sendKeyStroke(KEY_SPACE);
- UsbKeyboard.sendKeyStroke(KEY_W);
- UsbKeyboard.sendKeyStroke(KEY_O);
- UsbKeyboard.sendKeyStroke(KEY_R);
- UsbKeyboard.sendKeyStroke(KEY_L);
- UsbKeyboard.sendKeyStroke(KEY_D);
- UsbKeyboard.sendKeyStroke(KEY_ENTER);
- }
- }
- }
復(fù)制代碼
注意,先插上Arduino數(shù)據(jù)線,將程序?qū)懭階rduino。然后拔掉數(shù)據(jù)線,將模擬鍵盤USB線接到電腦,即可使用。
下面隨便點(diǎn)實(shí)物圖
剛焊好的正反面
194204xv880393zvisyxn3.jpg (63.1 KB, 下載次數(shù): 296)
下載附件
2016-4-18 01:15 上傳
2154270440zvdpvvocmaqc.jpg (165.8 KB, 下載次數(shù): 294)
下載附件
2016-4-18 01:15 上傳
插數(shù)據(jù)線寫程序進(jìn)Arduino:
1941595x18zxgzaan1fgk5.jpg (171.1 KB, 下載次數(shù): 285)
下載附件
2016-4-18 01:15 上傳
|
|