林委鋒
“老師,我們學(xué)習(xí)完了機(jī)器人的‘大腦,這次我們要學(xué)習(xí)什么呢?”
“這次我們學(xué)習(xí)的是機(jī)器人的‘眼睛,當(dāng)然機(jī)器人的眼睛和我們的眼睛還是有區(qū)別的,機(jī)器人的眼睛更像是蝙蝠的嘴和耳的功能。蝙蝠在黑夜中能夠自由地飛行,利用的是超聲波,超聲波有很強(qiáng)的方向性,當(dāng)遇到障礙物時(shí)會(huì)反射回來。蝙蝠的耳朵利用嘴中發(fā)出的超聲波再被反射回來的時(shí)間計(jì)算出自己和障礙物之間的距離,及時(shí)準(zhǔn)確地避開障礙物。這次我們就用超聲波傳感器來給機(jī)器人裝一個(gè)能夠檢測(cè)障礙物的眼睛。”
如圖1所示,超聲波傳感器的引腳有4根,分別是:1.VCC電源端;2.TRIG控制端;3.ECHO接收端;4.GND地線。
超聲波傳感器和Arduino電路板的連接如圖3所示:1腳VCC和Arduino板5V的VCC腳連接;2、3腳和Arduino板的任意兩個(gè)數(shù)字端口連接,如TRIG接2號(hào)口,ECHO連3號(hào)口;4腳接對(duì)應(yīng)的GND口。
此時(shí),Arduino板在TRIG端輸出一個(gè)高電平,維持10微秒以上,同時(shí)傳感器在ECHO端會(huì)輸出一個(gè)高電平,一旦傳感器接收到反射回來的超聲波,ECHO就會(huì)跳轉(zhuǎn)為低電平。于是,我們可以根據(jù)此高電平的維持時(shí)間 t 來計(jì)算與障礙物之間的距離(如圖2)。
在實(shí)際編程的過程中,ArduBlock軟件提供了一個(gè)自動(dòng)檢測(cè)和計(jì)算距離的超聲波傳感器模塊,只要在模塊中標(biāo)明TRIG和ECHO所連接的端口就可以了,超聲波傳感器模塊會(huì)生成自動(dòng)檢測(cè)和計(jì)算距離的程序,如圖4所示。
程序分成兩個(gè)部分,第一部分的作用是檢測(cè)計(jì)算與障礙物之間的距離,并將計(jì)算結(jié)果給變量“dis”,如圖5所示。程序中,超聲波傳感器模塊的“trigger”和“echo”要寫入之前電路連接時(shí)所選擇的數(shù)字引腳端口號(hào)。
“set decimal number variable”這個(gè)模塊的作用是把超聲波傳感器模塊傳送來的數(shù)據(jù)儲(chǔ)存到變量“dis”中。變量就像一個(gè)倉庫,用來儲(chǔ)存數(shù)據(jù)。如果有新的數(shù)據(jù)存入,則原來的數(shù)據(jù)就被替換。“decimal number”表示變量“dis”是一個(gè)帶小數(shù)的數(shù)據(jù),也稱為浮點(diǎn)數(shù)。
第二個(gè)部分“串行打印”的作用是把儲(chǔ)存在變量“dis”中的與障礙物之間距離的數(shù)值輸出到串口監(jiān)視器中?!癲istance”是提示符,可以自行寫入。輸出到串口監(jiān)視器的數(shù)據(jù)必須是字符串類型,變量“dis”是一個(gè)浮點(diǎn)數(shù),所以,在輸出前要把它轉(zhuǎn)換為字符串類型,程序中的“和模擬量結(jié)合”即是完成這個(gè)作用。程序最后要加一條延時(shí)2秒的指令,否則超聲波傳感器會(huì)把檢測(cè)到的距離數(shù)據(jù)連續(xù)不斷發(fā)送到串口監(jiān)視器中(如圖6)。
程序編寫好后,下載并運(yùn)行,在ArduBlock菜單欄的Arduino選項(xiàng)中打開串口監(jiān)視器選項(xiàng),用手慢慢靠近超聲波傳感器,從近到遠(yuǎn),觀察串口監(jiān)視器接收到的數(shù)據(jù)變化(如圖7)。
現(xiàn)在,你有一個(gè)神奇的機(jī)器人眼睛了。