標(biāo)題: Arduino學(xué)習(xí)12-自制Makey模擬觸摸鍵盤 [打印本頁]

作者: 51黑學(xué)者    時間: 2016-4-18 03:23
標(biāo)題: Arduino學(xué)習(xí)12-自制Makey模擬觸摸鍵盤
注意:此貼方法不夠現(xiàn)成的穩(wěn)定,已經(jīng)過時,Arduino Micro/Leonardo已經(jīng)可以便宜穩(wěn)定的實現(xiàn)替代功能了,而且不用折騰。建議使用Arduino Micro/Leonardo+自帶的keyboard功能做,方便簡單。


相信很多人看過最近一個Makey makey模擬觸控鍵盤視頻(http://www.56.com/u45/v_NjgzMzc0MDI.html)。視頻里電路板可以接上任何導(dǎo)電體,通過觸摸導(dǎo)電體去給電腦鍵盤事件。來玩各種不同的游戲或者效果。
其中的原理就是通過單片機模擬一個鍵盤,引出幾個鍵,并且使用觸摸形式代替開關(guān)。現(xiàn)在我們使用一塊arduino加上幾個普通元件,也能將這個電路實現(xiàn)出來了。
本文先填鴨式介紹如何制作模擬觸控鍵盤,如果你只是想做一個成品玩的話,可以只看前面部分而不用看原理分析。如果你想知道它的工作原理的話,可以一直看下去。

材料清單:
  ArduinoUNO、Duemilanove、NANO均可)
  1
  68Ω電阻(沒有68Ω的話,用50~100Ω電阻也行)
  2
  1.5kΩ電阻(沒有2.2kΩ的話,用1.5k~2.2k電阻也行)
  1
  2.2MΩ電阻(1M~4.7M也行)
  6
  USB連接線(一端是USB口另一端是電線,也可以用廢舊鍵盤鼠標(biāo)拆下來的線)
  1
  3.6v 穩(wěn)壓管(3.3v~3.6v穩(wěn)壓管。建議選用功耗0.25~0.5w的)
  2
  單芯屏蔽電線(6條,每條1~2米)
  6
  鱷魚夾
  6
  萬用板(洞洞板)
  1


先不管原理,看看制作步驟:
準(zhǔn)備好材料,這里為了減少體積,用了Arduino NANO,并且部分電阻實際用的時候是貼片封裝的。

按照下面的電路圖連接電路(PDF版本點擊這里: Arduino模擬觸控鍵盤.pdf(78.65 KB, 下載次數(shù): 809))。


注意輸入線要用屏蔽線,鱷魚夾端將屏蔽線的芯線接上,屏蔽線懸空;電路板端將芯線接到A0~A5引腳。所有屏蔽線集成一束接到+5v。

用數(shù)據(jù)線(注意是Arduino的數(shù)據(jù)線,不是上面焊的鍵盤線)將下面的程序?qū)懭階rduino中。



  1.     #include "UsbKeyboard.h"
  2.     int InData1 = 0, InData2 = 0, InData3 = 0, InData4 = 0, InData5 = 0, InData0 = 0;  //觸摸輸入值暫存
  3.     int TouchSensitivity = 30; //觸摸靈敏度。0~1023,越大越不靈敏
  4.     void setup()
  5.     {
  6.       for(int i = A0; i <= A5; i++)
  7.       {
  8.         pinMode(i, INPUT);                        //A0~A5端設(shè)置為輸入
  9.         //digitalWrite(i, HIGH);                //并且上拉
  10.       }
  11.       TIMSK0 &= !(1 << TOIE0);
  12.     }
  13.      
  14.     void loop()
  15.     {
  16.       UsbKeyboard.update();
  17.       //讀取所有引腳電壓值,并且由于上拉電阻原因,
  18.       //默認所有引腳為最高電平1023,通過觸摸拉低引腳電平。
  19.       //所以數(shù)值由1024-analogRead(A0);
  20.       InData0 = 1024 - analogRead(A0);               
  21.       InData1 = 1024 - analogRead(A1);
  22.       InData2 = 1024 - analogRead(A2);
  23.       InData3 = 1024 - analogRead(A3);
  24.       InData4 = 1024 - analogRead(A4);
  25.       InData5 = 1024 - analogRead(A5);
  26.       //按照各種可能觸發(fā)鍵盤事件
  27.       if(InData0 >= TouchSensitivity)
  28.       {
  29.         UsbKeyboard.sendKeyStroke(79); //right
  30.       }
  31.       if(InData1 >= TouchSensitivity)
  32.       {
  33.         UsbKeyboard.sendKeyStroke(80);  //left
  34.       }
  35.       if(InData2 >= TouchSensitivity)
  36.       {
  37.         UsbKeyboard.sendKeyStroke(81);  //down
  38.       }
  39.       if(InData3 >= TouchSensitivity)
  40.       {
  41.         UsbKeyboard.sendKeyStroke(82);  //up
  42.       }
  43.       if(InData4 >= TouchSensitivity)
  44.       {
  45.         UsbKeyboard.sendKeyStroke(KEY_SPACE);
  46.       }
  47.       if(InData5 >= TouchSensitivity)
  48.       {
  49.         UsbKeyboard.sendKeyStroke(KEY_ENTER);
  50.       }
  51.       delay(100);
  52.     }
復(fù)制代碼

拔掉Arduino數(shù)據(jù)線,將鍵盤線插到電腦USB口,即出現(xiàn)新硬件“USB輸入設(shè)備”,一般XP和win7都免驅(qū)動自動識別。

找一些含水分的物體(比如makey里面的香蕉,橡皮泥等),鱷魚夾夾住一頭,觸碰物體即可打字。

原理分析:
1、觸摸部分
* 此虛擬鍵盤使用觸摸作為輸入方法,所以可靠的觸摸響應(yīng)非常必要。常見的觸摸開關(guān)有兩種:
        -  一種是雙觸點的觸摸開關(guān),將觸摸端和地端引出,連接到兩塊觸摸電極上,人觸摸兩個極的時候,由于人體電阻的關(guān)系,兩觸摸電極之間有一定電流流過,通過檢測這個電流大小即可檢測出觸摸事件。Makey的虛擬鍵盤就是這種方法;
        -   另一種是單觸點的觸摸開關(guān),人手只需要觸摸一個極板,用人體和大地來做回路,這種方法用戶體驗最好。但是如果直接將觸摸電路的地端接家里的地線,人觸摸感應(yīng)輸入端的話,那觸摸就不能響應(yīng)了。因為人體和大地并不是真實的導(dǎo)體,而是通過水分,以及導(dǎo)體間的電容等導(dǎo)電的,對于直流電來說,由于電壓只有5v,相應(yīng)回路電阻很大。經(jīng)過回路之后,電壓不足以實現(xiàn)觸摸功能,所以在這里我們借助高壓電做媒介,讓人體和大地有足夠電流形成可以響應(yīng)的回路。原理圖如下圖,將Arduino的GND端通過一個高阻值電阻RH接到市電的火線,人觸摸A0端的時候,220v市電將通過高值電阻RH以及單片機傳到人手上,然后通過大地形成回路。由于220v電壓較高并且是交流電,通過高值的電阻以及人體、大地等導(dǎo)體之后仍然可以有足夠的電壓去給單片機響應(yīng)。
*  由于觸摸部分對周圍的電磁干擾比較敏感,觸摸板與Arduino連接線必須使用屏蔽線。六根屏蔽線的芯線接A0~A5,屏蔽層接電源正極(+5v)
*  此處是使用了外置的2.2MΩ上拉電阻,常態(tài)時輸入端是高電壓,所以默認AD轉(zhuǎn)換數(shù)值是1023,通過觸摸GND和A0~A5,令輸入電壓降低,從而改變輸入的AD數(shù)值。當(dāng)AD數(shù)值降低到一定程度(變量TouchSensitivity決定)的時候,就認為該觸摸板有事件響應(yīng)。如果觸摸靈敏度不適合的話,可以調(diào)整變量TouchSensitivity的值來改變靈敏度。值越大靈敏度越低。

2、Arduino模擬鍵盤部分:
由于Arduino主芯片是一片AVR單片機,通過AVRUSB,我們可以將Arduino虛擬成一個鍵盤。詳細原理可以參考這篇文章:http://www.torrancerestoration.com/bbs/dpj-48558-1.html
文章詳細解釋了Arduino模擬鍵盤的原理和電路,此處就不再詳細解釋了。

我做好實物(A0~A5引線還沒引出):






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1