本章重點
- 認識EZ1超音波距離感測器
- 熟悉EZ1超音波距離感測器的軟體開發
主要設備
- EZ1超音波距離感測器
- NodeMCU實驗版
Z1超音波距離感測器介紹
EZ1超音波距離感測器是一款低成本,高靈敏度的超音波測距器,可以用來量測距離。測量的距離約0~5公尺,提供PWM頻寬、類比電壓,以及SERIAL訊號輸出。
圖1 EZ1超音波距離感測器正面
圖2 EZ1超音波距離感測器正面
DHT11 PIN腳說明
Pin |
名稱 |
說明 |
GND |
GND |
接地 |
+5V |
VCC |
2.5~5.5V |
TX |
TX |
傳送訊號 |
RX |
RX |
接收訊號 |
AN |
Analog |
類比訊號輸出 |
PW |
PW |
輸出pulse |
BW |
BW |
當open或low時,TX會做serial 輸出。當BW為high時則送出pulse |
表1 PIN腳說明
撰寫程式
本範例要實做一個可以遠端利用超音波感測器讀取距離的裝置,共有三個lua程式,分別說明如下:
- init.lua:NodeMCU開機啟動檔。當NodeMCU一開機就會自動執行此檔案。我們將於此程式中執行wifi.lua以啟動wifi連線。
- wifi.lua:啟動wifi連線。取得IP後會執行coap.lua。
- coap.lua:啟動CoAP Server接受連線,並定時更新距離。
init.lua
dofile("wifi.lua") --執行wifi.lua去啟動wifi連線
wifi.lua
wifi.setmode(wifi.STATION) --將WiFi設定為station模式 wifi.sta.config("4Clab-2.4G", "12345678") --設定wifi SSID和密碼 tmr.alarm(0,1000,1, function() --設定一個timer。ID為0,每1000毫秒執行一次,不斷重複執行 print(wifi.sta.getip()) --印出目前的IP if wifi.sta.getip() ~= nil then --檢查是否取得IP dofile("coap.lua") --取得IP後執行 coap.lua tmr.stop(0) --關閉timer end end)
coap.lua
ultrasound = 0 --儲存超音波距離用,並初始化為0 cs=coap.Server() --啟動CoAP Server cs:listen(5683) --監聽udp port 5683 cs:sensor("ultrasound") --產生一個叫ultrasound的resource print("Coap Server Running...") tmr.alarm(1,1000,1, function() --設定一個timer。ID為1,每1000毫秒執行一次,不斷重複執行 ultrasound = adc.read(0) * 1.27 --從adc讀值並計算距離 cs:sensor("ultrasound") --更新resource ultrasound 的值 end)