ESP8266 測試記錄(九) 使用微波感應模組偵測物體移動

PIR 是針對紅外線做感知偵測,通常發熱體都會散發出紅外線,因此運用在入侵偵測應該是可以的。如果天氣寒冷又加上歹徒穿得夠厚或是能阻發紅外線的時候,PIR 是不是就會失去作用呢?這個疑問還不太知道,至少要先買個紅外線攝影機來測試才能確定。替代的方案可以利用超聲波距離偵測模組或是微波雷達偵測模組。

準備的工具:

  1. LED 燈 1 個
  2. 電阻 1 個
  3. 跳線 數條
  4. 麵包板 1 個
  5. ESP8266 測試架 1 個
  6. ESP8266 12F 1 個(沒測試架時, 就直接從焊接引線)
  7. RCWL-0516 微波模組 1 個
  8. 光敏感電阻 1 個
  9. USB 連接線

先了解 RCWL-0516 的特性:

  1. 輸入電壓:4.0V ~ 28.0V
  2. 輸出電壓:3.3V (正好可以給 ESP8266 使用耶!)
  3. 訊號電壓:0V / 3.3V (有物體經過被偵測到, 3.3V)
  4. 偵測距離:5 ~ 7 公尺 (具商品說明可以到 9 公尺)
  5. 具有重複觸發功能 (觸發時間為 2 秒)
  6. 感應面前後方要預留 1 公分以上的空間。
  7. 電子零件放在正面,為正感應面;反面為負感應面。負感應面效果稍差。
  8. 同一區域不能多個模組存在,會相互干擾。每個模組間最好相距超過 1 公尺。

在焊接的時候要先設想好,不然針腳焊上去後可能會影響到整個作品的設計。

增加光敏感電阻時,可以限定模組只有在光線不足的狀況下才會運作。這個組合很適合運用在夜間感應燈上。光敏感電阻可以直接焊接在 CDS 接點,或是外拉線至 CDS 接腳上,又或是背面的 R-CDS 接點。

背面有 3 組接點:

  1. C-TM
    調整重複觸發時間,預設是 2 秒 (即觸發後 2 秒內都還有物體在移動,則持續觸發)。增加電容容量會增加重複觸發時間。接上電容後測試RCWL-9196 (模組上的主晶片) 接腳 3 頻率,假設測得值為 f,則重複觸發時間為 T = (1/f) * 32768
  2. R-GN
    調整偵測距離,在沒有電阻時,偵測距離大約 7 公尺左右,增加電阻後會使偵測距離縮小;接 1M 電阻 (棕黑綠),偵測距離約 5 公尺左右。
  3. R-CDS
    這裡的 CDS 和正面的 CDS 是相連通。

接腳的接法:

  1. VIN 接 ESP8266 測試板的 5V
  2. GND 接 ESP8266 測試板的 GND
  3. OUT 接 ESP8266 測試板的 GPIO5
  4. 圖片上的光敏電阻沒有焊上去,是因為這樣子比較活用,隨時可以拿走。或是將光敏電阻接到麵包板上,再將 CDS 接腳接到麵包板上也行。

一樣是先把 RCWL-0516 的操作方式撰寫成模組。利用 timer 以每秒為單位,從 GPIO5 讀取偵測後的數值資料,並且將訊息輸出至畫面上。由於是使用 tmr.alarm,如果有發生什麼意外,或是想要中止運作,可以直接在 console 上輸入 tmr.stop(TimerID) 就行了。

程式的運作還需要有起始程式,因此在 init.lua 撰寫了以下程式碼;這段程式碼幾乎可以說是固定了,只有尾端幾行稍作些改變。

輸出結果:

D=3, Now=2018/02/07 16:34:31 Object = Clear
ID=3, Now=2018/02/07 16:34:32 Object = Clear
ID=3, Now=2018/02/07 16:34:33 Object = Detected
ID=3, Now=2018/02/07 16:34:34 Object = Detected
ID=3, Now=2018/02/07 16:34:35 Object = Detected
tmr.stop(3)

PIR 不能穿透物體,RCWL-0516 可以。於是找來了一個空的容器,上面的封膜紙還沒有完全拆掉 (不知道這個封膜紙有沒有含金屬材質)。

從正上方再拍一張,可以知道模組是平放在瓶底,照規格的說明來看,這樣子擺放是不太理想,因為沒有距離 1 公分以上。猜測應該只有正上方與正下方才會有感應才是。測試的結果:

  1. 感測範圍很廣,側面平行移動能偵測得到
  2. 工作用的電腦桌厚 3 公分,為木頭材質;桌下再放置鍵盤 (金屬殼);鍵盤又放在鍵盤架上。總之就是很厚的阻隔物就是了!動了動腳,馬上被偵測到。
  3. 對於完全的金屬密封狀態是無法偵測外部物動移動。因此不想要偵測的那一面需要有金屬做阻隔。

由於好奇 ESP8266 的 ADC 可以怎麼使用,所以試著將 OUT 與 ADC 接腳連接;但是 NodeMCU 的韌體需要擁有 adc 模組才能使用,所以如果當初建置韌體時沒有選到 adc 模組,則要再重新取得含有 adc 模組的韌體,並且燒錄到 ESP8266 12F 裡面唷!

忘了從哪篇文章看來的資訊,要在 OUT 與 ADC 之間加上電阻,以防 OOXX 的事情發生;所以就接上電阻,但後來發現,直接連通也沒關係,也是可以順利取得 OUT 的資料。在這一次的改版中,多加了 LED 燈,讓 OUT 來控制,只要有物體移動被偵測到,就直接讓 LED 亮起。

RCWL_0516 的模組修改後如下:

執行結果:

ID=3, Now=2018/02/07 17:45:02 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:03 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:04 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:05 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:06 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:07 ADC=1024 Object = Detected
ID=3, Now=2018/02/07 17:45:08 ADC=17 Object = Clear
ID=3, Now=2018/02/07 17:45:09 ADC=14 Object = Clear
ID=3, Now=2018/02/07 17:45:10 ADC=20 Object = Clear
ID=3, Now=2018/02/07 17:45:11 ADC=20 Object = Clear

測試的結果應該是預先就可以知道的。因為 RCWL-0516 只有高電平及低電平兩種而已,只會讓 ADC 讀到 1024 (高電平) 及 20 上下 (低電平) 的數據。確定這個模組只能做 ON/OFF,沒有距離遠近的功能。

後續可以應用的地方:

  1. 偵測空間內是否有物體移動 (小偷入侵偵測?但如何防止誤判?)
  2. 感應燈 (取代 PIR )

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *