超音波感應(yīng)器蠻常出現(xiàn)在電子機器人的產(chǎn)品上钻蹬,通常是用來測量距離唯咬,超音波感應(yīng)器各有一個發(fā)射及接收超音波的零件趣惠,活像兩顆大大的眼睛,在制作機器人時鉴扫,就經(jīng)常成為造型之一 … XD
認(rèn)識超音波感應(yīng)器
如上圖看到的赞枕,我手邊這顆超音波感應(yīng)器為HC-SR04,左邊被標(biāo)示為 T 的那顆是發(fā)射器(Transmitter)坪创,會發(fā)出 40 kHz 的聲波炕婶,這個聲波超出人類可感知的 20 kHz 上限,因此才稱之為超音波莱预,右邊那顆被標(biāo)示為 R 的是接收器(Receiver)柠掂,可接收超音波。
HC-SR04 腳位從左至右分別為 Vcc依沮、Trig涯贞、Echo 與 GND,Vcc 與 GND 就是接 5V 電源及 GND 了危喉,Trig 為輸入腳位宋渔,Echo 為輸出腳位,超音波的發(fā)射與接收辜限,就是靠 Trig 與 Echo 這兩個腳位皇拣,如果你送出 10 微秒的 5V 高電位訊號給 Trig,就會觸發(fā)超音波的發(fā)射薄嫡,接著 Echo 腳位就會處于 5V 高電位狀態(tài)氧急,如果接收到反射的超音波訊號颗胡,那么 Echo 腳位就會處于 0V 低電位狀態(tài):
因此,在超音波發(fā)射之后态蒂,Echo 的高電位持續(xù)時間杭措,就可以搭配音波速度每秒 343.2 公尺,也就是每公分要花費 29.1 微秒左右钾恢,計算出超音波感應(yīng)器與障礙物之間的距離手素,記得音波往返是走了兩倍距離,因此 Echo 的高電位持續(xù)時間要除以 2瘩蚪,再用來除以 29.1 微秒泉懦,才是與障礙物之間的距離。
如果使用 Arduino 官方語言的話疹瘦,可以如下撰寫程式崩哩,以取得超音波感應(yīng)器與障礙物之間的距離:
pulseIn函式可以計算指定腳位的高電位或低電位持續(xù)時間,單位是微秒言沐。
使用 mBlock 超音波感應(yīng)器方塊
嗯邓嘹?delayMicroseconds與pulseIn在 mBlock 中并沒有對應(yīng)的方塊,因此险胰,沒什么好繼續(xù)介紹的了汹押?
實際上,在 mBlock 2.1 中起便,機器人模塊中的 Makeblock 區(qū)塊里有個“超音波感應(yīng)器”方塊棚贾,這原是搭配 Makeblock 超音波感應(yīng)器模組而使用,這個超音波感應(yīng)器模組使用 RJ11 接頭榆综,而 Makeblock 在 Arduino 板子上設(shè)置了八個 RJ11 連接埠妙痹,你可以在Me-Baseboard看到相關(guān)圖片說明。
在說明中鼻疮,可以看到 Ports on Baseboard Orion to pins on Arduino UNO 這張圖怯伊,假設(shè)我想將超音波感應(yīng)器連接在 3 號連接埠,它對應(yīng)的腳位是 D12 與 D13判沟,而在The Upgrade of Me Series Electronic Modules的說明中可以看到震贵,Makeblock 的超音波感應(yīng)器模組,似乎只是將 Vcc水评、Trig、Echo 與 GND媚送,直接對應(yīng)至 RJ11 的相關(guān)接點中燥,因此,就來試試看用這個方塊吧塘偎!
搭配上面這個程式疗涉,試著使用以下的電路連接拿霉,Trig 連接 D12,Echo 連接 D13:
接著執(zhí)行程式咱扣,你就可以看到貓咪跟你報告距離了 … XD
如果你試著使用 mBlock 超音波感應(yīng)器方塊绽淘,然後轉(zhuǎn)為 Arduino mode 檢視 Arduino 原始碼,可以發(fā)現(xiàn)闹伪,它實際上是 MeUltrasonic 程式庫沪铭,這可以在 mBlock 安裝目錄的 ext/libraries/makeblock/src 中找到對應(yīng)的原始碼,其中控制超音波感應(yīng)器的程式碼偏瓤,主要是在measure函式:
MePort的dWrite2中杀怠,基本上就是在對應(yīng)腳位作digitalWrite的動作(依 makeblock 的埠決定哪個腳位):
依這個寫法模式,似乎很像是 HC-SR04厅克,不過赔退,依上面的程式碼來看,它都只用到s2证舟,也就是腳位13硕旗,為什么呢?因為 Makeblock 最新的超音波感應(yīng)器 V3.0女责,可以自行使用杜邦線接線的腳位只有三個,三個腳位中漆枚,有兩個分別是接電源與 GND,一個是信號接腳鲤竹,這意謂著浪读,Trig 與 Echo 必須使用同一個腳位,這也就是為什么辛藻,在measure的程式碼中碘橘,看到的都只有使用s2腳位。
可是 HC-SR04 是四個腳位吱肌,Trig 是其中獨立的一個腳位痘拆,怎么能適用“超音波感應(yīng)器”方塊呢?自行觸發(fā) Trig 啰氮墨!只是直接使用“設(shè)置數(shù)位腳位”方塊的速度不夠快纺蛆,因此,我想到的是规揪,使用“播放腳位”方塊桥氏,這可以控制腳位電壓高低的頻率,建立起類似以下的效果:
簡單來說猛铅,最后我就只是利用了“超音波感應(yīng)器”方塊底層的pulseIn來取得回波時間而已字支,這個方法下測出來的距離數(shù)值會跳動,不過大致上勉強可用啦!
(這個方法比較適用于 mBlock 2.1.4堕伪,在 mBlock 2.1.5 中揖庄,韌體上似乎做了些修改,雖然還是可以用相同方法欠雌,不過蹄梢,跳動的范圍會變大許多。)
超音波搭配七段顯示器
那么富俄,就也來回顧一下〈mBlock & Arduino(7)七段顯示器之 HELLO禁炒!〉,試著將超音波感應(yīng)器量得的距離蛙酪,使用七段顯示器來回報吧齐苛!
因為只有一顆七段顯示器,超過 8 公分就一律顯示為 0 了 … XD
清單 numbers 使用字串編碼 0 到 8 的數(shù)字:
感謝CodeData用戶:caterpillar的貢獻 著作權(quán)歸作者所有
整理:寧波家電物聯(lián)網(wǎng)云平臺桂塞,中科極動云