1_20121211091254_bkVPX0lNR19pbWFnZTAwMQ==.jpg (295.82 KB, 下載次數(shù): 151)
下載附件
2016-9-1 17:56 上傳
上個(gè)月,又有一個(gè)鼠標(biāo)在我手底下陣亡了,作為一個(gè)DIY達(dá)人,我從盒子里拿出好幾個(gè)不太好用的鼠標(biāo),準(zhǔn)備自己攢一個(gè)。突然發(fā)現(xiàn)手邊有一塊基于Arduino Leonardo的小型控制板——DFRobot生產(chǎn)的Dreamer Nano,我早就看資料知道Arduino Leonardo能當(dāng)鼠標(biāo)或鍵盤(pán)用,一直也沒(méi)機(jī)會(huì)試試,正好就用這塊控制板自己制作一個(gè)鼠標(biāo)吧!
1_20121211091225_bkVPX0lNR19pbWFnZTAwNw==.jpg (343.45 KB, 下載次數(shù): 138)
下載附件
2016-9-1 17:56 上傳
圖1 制作所需的材料
q 1、Dreamer Nano或Arduino Leonardo 1個(gè) q 2、面包板 1塊 q 3、按鍵 5個(gè) q 4、面包板U型線 1盒
制作鼠標(biāo)要用的元件如圖1所示,準(zhǔn)備好材料后,就可以搭建硬件。Dreamer Nano(如圖2所示)的核心是Arduino Leonardo,I/O接口采用Nano的形式,方便與面包板配合使用,USB接口采用帶直插定位腳的Mirco USB插座。
1_20121211091219_bkVPX0lNR19pbWFnZTAwOQ==.jpg (217.93 KB, 下載次數(shù): 131)
下載附件
2016-9-1 17:56 上傳
圖2 Dreamer Nano 制作步驟 1.將Dreamer Nano插在面包板上,這里它的位置比較偏左,是因?yàn)橹笪覀儠?huì)在其右側(cè)添加一個(gè)按鍵。
1_20121211091247_bkVPX0lNR19pbWFnZTAxMQ==.jpg (355.04 KB, 下載次數(shù): 136)
下載附件
2016-9-1 17:56 上傳
2.添加5個(gè)按鍵,擺成上下左右的樣子,分別控制鼠標(biāo)的上下左右移動(dòng),另外在控制板的右側(cè)添加一個(gè)按鍵,作為鼠標(biāo)左鍵,用來(lái)實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊功能。
1_20121211101206_bkVPX0lNR19pbWFnZTAxMw==.jpg (316.77 KB, 下載次數(shù): 168)
下載附件
2016-9-1 17:56 上傳
3.我使用Fritzing軟件繪制了一個(gè)連接效果圖,看起來(lái)按鍵的連接很雜亂,其實(shí)這是為了遷就U型面包線的長(zhǎng)度才這么做的,反正改程序是一件比較容易的事。大家也可以將這些按鍵連接到其他引腳。
1_20121211101201_bkVPX0lNR19pbWFnZTAxNg==.jpg (406.49 KB, 下載次數(shù): 136)
下載附件
2016-9-1 17:56 上傳
1_20121211101205_bkVPX0lNR19pbWFnZTAxOA==.jpg (97.31 KB, 下載次數(shù): 136)
下載附件
2016-9-1 17:56 上傳
4.按照效果圖,用U型面包線將實(shí)物連接起來(lái)。這樣我們的硬件就搭建完了,接下來(lái)看看程序部分。
1_20121211101228_bkVPX0lNR19pbWFnZTAyNA==.jpg (331.67 KB, 下載次數(shù): 138)
下載附件
2016-9-1 17:56 上傳
程序設(shè)計(jì) 1.打開(kāi)Arduino開(kāi)發(fā)環(huán)境,首先要將Tools菜單下的Board選項(xiàng)改為Arduino Leonardo。
1_20121211101247_bkVPX0lNR19pbWFnZTAyNg==.jpg (383.98 KB, 下載次數(shù): 138)
下載附件
2016-9-1 17:56 上傳
2.打開(kāi)開(kāi)發(fā)環(huán)境中鼠標(biāo)的例子,在File→Examples中專門(mén)有一個(gè)USB(Leonardo)的選項(xiàng),在這里面找到Mouse→ButtonMouseControl。這是一個(gè)用按鍵當(dāng)作鼠標(biāo)的例子。
1_20121211101207_bkVPX0lNR19pbWFnZTAyOA==.jpg (252.96 KB, 下載次數(shù): 148)
下載附件
2016-9-1 17:56 上傳
3.修改程序中的引腳變量。在原代碼中,使用的是引腳2、3、4、5、6作為5個(gè)按鍵的輸入。 // set pin numbers for the five buttons: const int upButton = 2; const int downButton = 3; const int leftButton = 4; const int rightButton = 5; const int mouseButton = 6; 這里因?yàn)楸救嗽谟布罱ㄉ贤祽械脑颍允褂玫囊_有所變化,可根據(jù)原理圖來(lái)修改這段代碼,其中引腳4對(duì)應(yīng)按鍵“上”,引腳6對(duì)應(yīng)按鍵“下”,引腳7對(duì)應(yīng)按鍵“左”,引腳9對(duì)應(yīng)按鍵“右”,引腳3對(duì)應(yīng)鼠標(biāo)左鍵。 const int upButton = 4; const int downButton = 6; const int leftButton = 7; const int rightButton = 9; const int mouseButton = 3;
4.修改setup()函數(shù)。當(dāng)Arduino的控制板引腳作為輸入時(shí),通常要小心電壓、電流的極限值,過(guò)大的電壓、電流會(huì)造成控制板的損壞。為避免這種情況,一般會(huì)在引腳的電路上加一個(gè)上拉電阻,這里要加就加在按鍵和Arduino引腳的連接線上,電阻值一般為10kΩ。但其實(shí)Arduino控制板內(nèi)引腳是具有內(nèi)部上拉功能的,內(nèi)部上拉相當(dāng)于是在芯片內(nèi)集成了一個(gè)電阻接+5V電源,不過(guò)這需要在程序中進(jìn)行設(shè)定。假設(shè)要設(shè)定x引腳的模式為輸入,且使用內(nèi)部上拉,則代碼為: pinMode( x ,INPUT); digitalWrite( upButton , HIGH); 由原理圖能夠看出,我們使用的按鍵均沒(méi)有添加上拉電路,所以需要使用的這5個(gè)引腳要使能內(nèi)部上拉功能。將這段代碼添加到Mouse.begin()函數(shù)之前。 void setup() { // initialize the buttons' inputs: pinMode(upButton, INPUT); pinMode(downButton, INPUT); pinMode(leftButton, INPUT); pinMode(rightButton, INPUT); pinMode(mouseButton, INPUT);
digitalWrite(upButton, HIGH); digitalWrite(downButton, HIGH); digitalWrite(leftButton, HIGH); digitalWrite(rightButton, HIGH); digitalWrite(mouseButton, HIGH);
// initialize mouse control: Mouse.begin(); }
5.完成最后的調(diào)試。將修改完之后的代碼下載到Arduino中,使用一下,我們發(fā)現(xiàn)鼠標(biāo)左鍵總是處于按下的狀態(tài),通過(guò)閱讀代碼發(fā)現(xiàn),這是因?yàn)槌绦蛑袑⒁_為高電平認(rèn)定為鼠標(biāo)按下。 if (clickState == HIGH) { ...... } 而我們的硬件上,鼠標(biāo)按下時(shí)引腳電平為高,未按下時(shí)引腳電平為低。大家可以直接使用“Ctrl+F”搜索“clickState == HIGH”這段字符,將其中的HIGH改為L(zhǎng)OW。再下載一遍程序,我們的鼠標(biāo)就完成了,和原來(lái)的鼠標(biāo)合個(gè)影吧。
1_20121211101246_bkVPX0lNR19pbWFnZTAzMA==.jpg (267.5 KB, 下載次數(shù): 152)
下載附件
2016-9-1 17:56 上傳
細(xì)心的讀者可能會(huì)發(fā)現(xiàn),我們這個(gè)鼠標(biāo)只能完成左鍵的功能,那么右鍵應(yīng)該如何實(shí)現(xiàn)呢?請(qǐng)大家注意示例代碼中關(guān)于MOUSE_LEFT的部分(可以直接使用“Ctrl+F”搜索),比如Mouse.press(MOUSE_LEFT)實(shí)現(xiàn)的功能就是發(fā)送一個(gè)鼠標(biāo)左鍵按下的信息。我們將MOUSE_LEFT全部換成MOUSE_RIGHT試試,就會(huì)發(fā)現(xiàn)原來(lái)的鼠標(biāo)左鍵變成了鼠標(biāo)右鍵,所以只需要在硬件上再添加一個(gè)按鈕,并在代碼中使用MOUSE_RIGHT這個(gè)定義,就可以實(shí)現(xiàn)鼠標(biāo)右鍵的功能了。 另外,在示例程序中可以看到還有JoystickMouseControl、Keyboard以及KeyboardAndMouseControl等例子,大家感興趣的話可以自己試試,比如找一個(gè)搖桿來(lái)制作一個(gè)搖桿式的鼠標(biāo),或者用Arduino制作一個(gè)游戲?qū)S檬直鹊取O聢D就是本人利用安卓平板電腦、Arduino、按鍵以及面包板制作的一個(gè)老式任天堂游戲機(jī),現(xiàn)在正在玩的游戲是經(jīng)典的《魂斗羅》。更多的樂(lè)趣期待大家去發(fā)現(xiàn)。
1_20121211101207_bkVPX0lNR19pbWFnZTAzMg==.jpg (414.69 KB, 下載次數(shù): 156)
下載附件
2016-9-1 17:56 上傳
|