網路城邦
上一篇 回創作列表 下一篇   字體:
[Arduino教學] 如何用紅外線遙控Arduino
2014/07/15 16:55:04瀏覽30561|回應4|推薦0

前言:

話說控製Arduino的方式有很多種

如果是要傳送很多數據的話通常會用用Serial Port

電腦就透過USB

手機就透過藍芽

.

不過用這些東西來傳送通常會有些缺點

透過USB要拉線

手機的藍芽有時候會連不上

而且有的設備會有明顯的延遲

.

如果要傳送的數據量不大,例如說目標只是個小小的遙控車

或只是偶爾按個上上下左右左右BA給他開心一下

那用紅外線遙控就已經綽綽有餘了

而且價錢不貴,遙控器加上接收器差不多150元~

當然理論上也可以用家裡電視的遙控器

但不要把電用光光就是了~

.


.

https://github.com/coopermaa/Arduino-IRremote

.

和其他眾多教Arduino 紅外線的部落格的方法一樣

用的都是IRremote的Library

.

進入網頁。注意右下角的"Download ZIP",

把上面的網址內的東西下載下來

.

然後解壓縮,把檔案放進你的Arduino IDE的根目錄下的"Library"裡面的

通常位置是在

C:\Program Files (x86)\Arduino\libraries

.

然後把名稱Arduino-IRremote-master

改成IRremote,不然裡面的Library可能沒辦法被Arduino IDE抓到

.

之後就重新打開Arduino的IDE

.

就會發現Example裡面會多出一個IRremote

先打開裡面的 IRrecvDemo

.

  1. /*
  2.  * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
  3.  * An IR detector/demodulator must be connected to the input RECV_PIN.
  4.  * Version 0.1 July, 2009
  5.  * Copyright 2009 Ken Shirriff
  6.  * http://arcfn.com
  7.  */
  8. #include<IRremote.h>
  9. int RECV_PIN = A0;
  10. IRrecv irrecv(RECV_PIN);
  11. decode_results results;
  12. void setup()
  13. {
  14.   Serial.begin(9600);
  15.   irrecv.enableIRIn(); // Start the receiver
  16. }
  17. void loop() {
  18.   if (irrecv.decode(&results)) {
  19.     Serial.println(results.value, HEX);
  20.     irrecv.resume(); // Receive the next value
  21.   }
  22. }

然後就會看到這段程式碼

主要的功能是把收到的訊號轉成16進位

.

要注意紅外線的Data腳位要接在Analog 0上面

不然就是自己改個程式碼

.

接下來打開Serial Monitor

如果對準接收器按,就會有16進位東西跑出來

如圖,不然按了上上下下左右左右

因為B 和A 找不到,所以就算了=A=

.

如果已不才這支遙控器來說,按一下遙控器的上鍵跑出

FF629D

FFFFFFFF

.

如果按久一點,就會一直出現

FFFFFFFF

.

每一種搖控器定都不同

也有的會一直出現FF629D 之類的,而不是FFFFFFFF

.

但相同的,如果接收器收到了訊號,都會亮紅燈

.

  1. void loop() {
  2.   if (irrecv.decode(&results)) {
  3. {
  4.      if(results.value == 0x00FF02FD)
  5.     {
  6.            //插入要的事
  7.     }
  8. }
  9.     Serial.println(results.value, HEX);
  10.     irrecv.resume(); // Receive the next value
  11.   }
  12. }

以前面的

FF02FD

FFFFFFFF

來說,FF02FD應該是00FF02FD,16進位

所以如果用比較的話應該改成0x00FF02FD

0x(數字) 表示是一個16進位的數字

前面兩個0不打不才還沒有試過,應該是可以吧...

.


結論:

整體反應還快的,一個遙控器要用到沒電也蠻不容易的

野生的遙控器幾乎是隨處可得,改改一點點程式後又可以繼續玩

相容性又高,算是蠻不錯的操控方式

.

比較明顯的缺點是....

背對接收器案雖然也收得到,但訊號是錯誤的

不過可以靠多裝幾個接收器來解決

.

雖然說可以接收訊號的範圍插不多是10公尺,但到3公尺後就開始出現錯誤了

也是可以改用家用遙控器來解決,訊號會比外面買的那種小布拉雞遙控器強很多

.

家裡的遙控器很多,可以慢慢的挑到中意為止(X

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=andy840119&aid=15096120

 回應文章

EGHRW
2018/11/30 08:27
13EWQFEGTRW(GEW)

asfzvz
2018/04/24 14:34
0.(yuixxx48561@kimo.com)

烏龜
2014/09/14 14:43

多謝大哥回覆

在請教一個問題

請問文章中的程式碼是不是要像這樣子寫才對?

#include<IRremote.h>
int RECV_PIN = A0;

(a0981292771@yuahoo.com.tw)
他喵的(andy840119) 於 2014-09-14 22:05 回覆:
沒錯www
剛剛才發現到=A=a
等一下會修正,謝啦ODO 

烏龜
2014/09/11 21:51

請問板主,出現這個是什麼意思?

IRrecvDemo.cpp.o: In function `setup':
D:\data\Arduino/IRrecvDemo.pde:20: undefined reference to `IRrecv::enableIRIn()'

(a0981292771@yahoo.com.tw)
他喵的(andy840119) 於 2014-09-11 22:09 回覆:
我有點忘了
不過你是把檔案放在Library這個資料夾裡面嗎?~