2011年11月26日 星期六

IR2Keystroke

實驗目的

我們將做一個紅外線轉成按鍵敲擊動作 (keystroke) 的應用,我們把它稱之為 IR2Keystroke。IR2Keystroke 會用到 USBKeyboard Library,因此請參見 USBKeyboard Library 先把 library 安裝起來。

材料
接線
  • 照下表連接 Arduino 跟紅外線接收器:
紅外線接收器接腳 Arduino 接腳
Vcc(+ 或 V+) +5V
GND(-) GND
Vout(或 OUT) pin 2。也可以接到其它 Digital pin,但程式要配合修改

image
▲ 有些紅外線接收器 GND 和 Vcc 是相反的,接線時請查閱你的 datasheet

安裝 IRRemote 函式庫

Ken Shirriff 的部落格點這裏下載 IRRemote 函式庫,然後把檔案解壓縮放到 Arduino 速寫簿 (Sketchbook) 資料夾的 Libraries 資料夾底下即可。Arduino 速寫簿 (Sketchbook) 資料夾的預設位置是在「我的文件 > Arduino」這個地方:

image
▲ 把 IRRemote 資料夾放在「我的文件 > Arduino > Libraries」底下即可

程式

底下就是 IR2Keystroke 的程式:

打開 Arduino IDE,把程式上傳到 Arduino 板子上。接著把 Arduino 切到 DFU mode,用 FLIP 把 Arduino-keyboard-0.3.hex 燒錄到 atmega8u2 晶片上,然後重新插拔 Arduino 的電源。

image

這支程式的邏輯是這樣,程式裏定義了遙控器 left 和 right 鈕的紅外線 key code,在 loop() 中程式會不斷進行紅外線的解碼,假如有收到紅外線訊號,就檢查是否 left 鈕或 right 鈕,如果是 left 鈕就送出 PageDown 的 keystroke,如果是 right 鈕就送出 PageUp 的 keystroke。

這可以做什麼用呢?嗯,你可以利用這個方法做簡易的電腦遙控,例如操作相簿或電子書的翻頁,或者也可以把遙控器變成電腦遊戲的上下左右控制鍵,諸如此類的。

關於如何取得遙控器的 key code,請參考「IRRemote 紅外線遙控教學」這系列的教學。 

示範影片

 

參考資料

10 意見:

芭蕉葉上聽雨聲 提到...

我的紅外線有收到訊號, 但是 Keyboard.sendKeyStroke(KEY_PAGEUP); 好像沒有作用, 我確定不是紅外線編碼的問題, 因為我把它改成只要收到搖控器訊號就執行Keyboard.sendStroke, 但都沒翻頁的動作, 請問原因?

coopermaa 提到...

Keyboard.sendKeyStroke(KEY_PAGEUP); 沒有作用?
你要不要試一下其它 keystroke,例如英文字母,先看看 Arduino 有沒有把 keystroke 送到電腦。

芭蕉葉上聽雨聲 提到...

可以了, 原來還得載入Arduino-keyboard-0.3.hex

coopermaa 提到...

我有時候也會忘了載入 Arduino-keyboard-0.3.hex,還納悶怎麼程式不會動。嗯,有必要在文章裏補一段載入 Arduino-keyboard-0.3.hex 的說明。

芭蕉葉上聽雨聲 提到...

1.可以按紅外線搖控器上的方向鍵移動鼠標嗎?
2.可以按紅外線搖控器上的某一鍵代表按下滑鼠左鍵嗎?

coopermaa 提到...

應該可以,但是要用 Arduino Uno mouse:
http://coopermaa2nd.blogspot.com/2011/11/arduino-uno-mouse.html

我滑鼠自動點擊器這邊示範了按下滑鼠左鍵的方法,只要把它跟紅外線連接起來就可以了:

http://coopermaa2nd.blogspot.com/2011/11/arduino.html

至於用遙控器移動鼠的話,應該也不是問題,拿 Square 畫正方形這支程式來修改一下,把遙控器上下左右鍵 key code 定義出來,然後再定義按一下要讓滑鼠移動多少距離就可以了。

芭蕉葉上聽雨聲 提到...

看樣子也可以把遊戲搖桿改裝成無線的了.

coopermaa 提到...

遊戲搖桿改裝成無線的?
你是說用 arduino 來改裝遊戲搖桿嗎?
這樣的話,遊戲搖桿會變成什麼樣?
在搖桿上加裝紅外線發射器讓它變成紅外線無線搖桿嗎?
哈,這樣是不是還要另一個接收紅外線的裝置才行?

Jackson 提到...

請問一下 電路圖是用什麼軟體繪製的呢?

coopermaa 提到...

我是用 Fritzing 畫的,可以參考我之前寫的文章:
http://coopermaa2nd.blogspot.com/2011/01/fritzing-pcb.html
http://coopermaa2nd.blogspot.com/2011/02/fritzing-power-ground.html