WRO的比賽陸續展開,大家對於比賽的解題方法及技巧也非常有興趣。 看到陳慶明老師對國小迷宮使用超音波的討論,想到超音波之間互相干擾的問題。 原因是超音波感應器的超音波一直連續發射,在狹窄的空間中反射,會影響其他超音波感應器的接收。 如果能關閉(隨意控制)超音波的發射,應該可以專心接收自己發射的超音波。 在各大論壇中也有許多人討論如何應用各種程式語言設定超音波感應器,例如NXC, RobotC, Java等。 那麼用NXT-G寫程式就束手無策嗎?其實不然,只要有高手提供適當的工具。 讓我想起來在很久以前,Guy Ziv曾經教導大家在NXT-G使用I2C Write Block,直接設定超音波感應器,可以切換成一次測量(Single Shot)。 (I2C Write Block的下載請參考 探奇舊文章:重要記錄:MindBOARDS的NXT-G命令方塊資料庫 ) 超音波感應器是一顆數位感應器,透過I2C的通訊協定跟NXT主機溝通, 大家可以參考LEGO MINDSTORMS NXT Hardware Developer Kit的Appendix 7-LEGO MINDSTORMS NXT Ultrasonic Sensor I2C communication protocol。 下面的程式說明: 先用一個命令方塊設定超音波感應器,進入迴圈後,用I2C Write命令設定為一次發射,讀取超音波數值,顯示在NXT主機螢幕,每隔一秒發射一次。 迴圈在按下NXT主機向左鍵後結束,將超音波感應器設定為『連續發射』,發出聲音,等待按下橘色按鍵。 那麼該如何確認超音波是連續發射呢?我沒有儀器可以量測。 探奇用的是一個笨方法:用另一個NXT的超音波感應器去接收。 擋住另外一台超音波感應器的發射端,就能夠接收到其他超音波感應器所發射的超音波。 下圖是I2C Write Block的設定,輸入都是使用十進位值。 歡迎大家一起討論,測試這個功能。 延伸閱讀: 童年萬歲的『慎用超音波』 以及 優勝家機器人教室的『2011WRO國小組的好朋友-超音波感應器』 ,討論超音波的精度及反應時間。