上**買了兩個紅外線模組,乙個是接收器,另乙個是傳送器。
問了賣家,沒有資料,但是根據電路板上列印的資訊,似乎是標準的模組。於是先插上樹莓派試試看。
(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 long?因為這個timer是64bit的。long
intget_timer_diff()
解析分為三步: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...
紅外線 紅外線遙控原理
摘要 紅外線遙控裝置具有體積小 功耗低 功能強 成本低等特點,因而,繼彩電 錄影機之後,在錄音機 音響裝置 空凋機以及玩具等其它小型電器裝置上也紛紛採用紅外線遙控。工業裝置中,在高壓 輻射 有毒氣體 粉塵等環境下,採用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。本文主要對 關鍵字 紅外線 遙控 ...