樹莓派控制紅外線收發

2022-03-27 13:32:28 字數 3167 閱讀 8445

上**買了兩個紅外線模組,乙個是接收器,另乙個是傳送器。

問了賣家,沒有資料,但是根據電路板上列印的資訊,似乎是標準的模組。於是先插上樹莓派試試看。

(update:上圖的發射器沒有三極體,所以只能做到1-2m)

看寶貝描述,這個模組是給arduino用的,於是搜尋了一下arduino相關的資料,發現github上有

arduino-irremote這個專案,裡面有各種協議包括nec紅外協議的實現。

舉個例子,**裡面傳送nec的實現:

這裡先傳送乙個頭部,然後按位元傳送資料,

位元為1發560us的pwm,然後等待1690us

位元位0的時候傳送560us的pwm,然後等待560us

最後傳送乙個560us的pwm結束

手頭上有一塊樹莓派和乙個美的空調,所以先用這兩個硬體下手,實際上使用stm32會更方便,因為樹莓派自帶了作業系統,控制硬體沒有stm32這種微控制器方便。後續準備將程式移植到stm32上面。

要知道美的空調的編碼,首先要做乙個解析器。實際上,使用邏輯分析儀也可以得知。一開始並沒有拆開遙控器看看,先用ir接收器做了乙個解析器。

**傳上去了,見:

做解析器的時候首先要了解紅外頭的工作原理,首先它裡面有乙個濾波器,有38k資料的時候輸出'1',沒有38k資料的時候輸出'0'。外部供電3.3v。接下來就要對輸入的資料進行處理了。

首先對其產生的跳變進行響應,這裡就註冊了乙個中斷,int_edge_both表示不論下降沿和上公升沿都進行響應,這樣就可以採集到資料了:

wiringpiisr(ir_input, int_edge_both, &ir_int)

接下來要對響應做計數。一開始用gettimeofday測試了一下,並不準確,查資料得知樹莓派的arm晶元內部有乙個1mhz的時鐘可以用來做計數器。不過因為樹莓派有linux作業系統,直接訪問時鐘位址是不行的。

首先要開啟datasheet(網上可以搜到)

bcm2835-arm-peripherals.pdf

裡面提到了兩種timer:

其中system timer的定義

arm timer的定義:

看它的描述還是使用system timer比較好。

首先要知道system timer的位址。

這裡寫的是 0x7e003000,但是看圖說話(第5頁),還是要轉換成為0x20003000:

轉換好之後就要解決怎麼用了。首先想到的就是寫乙個驅動,不過寫驅動需要花一些時間除錯,搞不好kernel搞掛了,為了簡單一點,這裡有乙個比較portable的辦法,就是使用mmap直接讀取/dev/mem的資訊。詳情見**。

於是根據這個思路作了乙個獲取時間間隔的乙個api:

long

long

intget_timer_diff()

這裡為什麼要用long long?因為這個timer是64bit的。

解析分為三步:1.解析波形,2.解析bit,3.解析byte

解析完成之後就拿到我需要的東西了。

拿著遙控器對著紅外頭測試,發現美的空調的格式如下:

0xb2,0x4d,0xf5,0x0a,0xa5,0x5a

接下來查詢了網上的資料,發現它的格式實際上是這個樣子的:

接下來做乙個發射器,俗話說,上山容易下山難,編碼容易解碼難,過了解碼這個步驟,編碼也挺容易了,不過做發射器的時候還是有一些問題需要考慮的。

做發射器的時候需要開啟樹莓派的pwm,並且使用1mhz的時鐘做乙個api:

void delay_us(int

us)

這樣就可以逐個將資料

這樣就可以逐個將資料傳送出去了。其中開關pwm的時候發現乙個問題,關閉pwm倒是很快,開啟pwm有延時。於是在開啟之前將關閉pwm的時間縮短解決。如果能直接控制uart,我想可以用uart模擬一樣的波形,利用rts-cts快速關斷,比pwm的效果好。

用函式開關pwm有200us的延時,這裡是要考慮下的。開的時候是200ms之後就開啟了,

關的時候會立馬關閉,但是這個過程還是會延時200us。

目前的結果是,用兩個ir模組對測,解析器也能解析出正確的結果,空調也能被控制。

波形抓到的遙控器波形(管腳端),手工檢視,得知:

0110010 01001101 00011111 11100000 01001000 10110111l (同乙個波形發兩次)

第乙個bit是msb:

b2 4d 1f e0 48 b7

螢幕上顯示的是24度,和前面提到的資料一致。

遙控器的波形並不完美,我自己產生的波形可以完美的多:

現在已經可以控制美的空調了,空調被控制的時候也會產生『滴』的聲音。不過控制距離只有1公尺,

可能是模組的電流比較小導致的。

【0817更新】

通過自己搭電路,已經可以解決距離太小的問題,解決辦法是增加乙個三極體,增大紅外管的電流,

另外將圖中的100歐姆換成10歐姆就可以了。

麵包板搭建圖如下:

樹莓派紅外線

知識點 1.樹莓派gpio引腳控制 2.紅外線感測器的使用 這就是我所用的紅外線感測器,這個感測器有三個埠,vcc埠是外接3.3v 5v的電壓,gnd埠接地,out接樹莓派的gpio通用輸入輸出介面 這裡我用的是gpio的board編號,即13號引腳 如果有人對board編號方式不熟悉,這裡我直接上...

樹莓派接收紅外線訊號

樹莓派2b 作業系統 pi raspberrypi uname a linux raspberrypi 4.19.57 v7 1244 smp thu jul 4 18 45 25 bst 2019 armv7l gnu linux紅外置收管 sudo apt update sudo apt ins...

紅外線 紅外線遙控原理

摘要 紅外線遙控裝置具有體積小 功耗低 功能強 成本低等特點,因而,繼彩電 錄影機之後,在錄音機 音響裝置 空凋機以及玩具等其它小型電器裝置上也紛紛採用紅外線遙控。工業裝置中,在高壓 輻射 有毒氣體 粉塵等環境下,採用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。本文主要對 關鍵字 紅外線 遙控 ...