1回答

0收藏

仿生机器人──小怪兽(升级篇)

#开源分享 #开源分享 2845 人阅读 | 1 人回复 | 2013-12-19

本帖最后由 XM明 于 2013-12-19 10:46 编辑

加裝LED與紅外線感測器

現在「小怪獸」已經可以靈活的動作了,來一段有趣的舞蹈也是不難事。前面有提到我們想替「小怪獸」裝二個LED與紅外線感測器(圖A),讓它看起來更酷更聰明,現在就繼續努力吧!

A

首先介紹元件工作原理,大家可以對照之前SC8接線安裝圖。LED有二隻腳,長腳為正極,短腳為負極。長腳串接一個220歐姆的 電阻到5V,電阻的色碼為紅紅棕。LED的短腳再分別接到數位輸入輸出腳P0P6P0P6的選擇是為了方便LED安裝在左右兩邊,沒有其他考量。再 來就是安裝紅外線發射器。這裡所使用到的就是一個紅外線LED,顧名思義,它也是一個LED。只不過發射出來的是不可見的紅外線,所以對LED的描述也適 用。這裡我們把它接到P2。紅外線接收器是一個三隻腳的元件,我這裡使用的編號為FM-9038LM-5AN。分別為正、負電源以及輸出腳。正、負電源就 分別接到5V以及GND,輸出腳則接到P4腳。紅外線LED與紅外線接收器同樣面向前方,但是紅外線會從LED側面散出,而被紅外線接收器收到,造成誤認 前方有障礙物。為避免紅外線散出,這裏使用了膠套將紅外線LED包起來,僅允許從前方發射紅外線出去。各位手邊沒有適用的膠套,則可以使用黑色電工膠帶將 LED纏繞,僅留前方開口即可。目前使用到的P0P2P6都是做輸出使用,只有p4是做輸入使用。(圖A)為了方便辨識,特別將須接到5V的線路選用 紅色線材,須接到GND的線路選用黑色線材,須接到各I/O接腳的線路選用黃色線材。實際接線時要注意避免金屬部分碰觸造成短路,所以電工膠帶或是塑膠套 管都是需要的。

雖然線路是相同的,但每一個人實際的接線看起來都會不太一樣,美醜就看每個人的藝術細胞有多少啦。我給每隻腳套上紅色的熱縮套管,再加熱使其收縮而不會掉落,穿上四隻小紅鞋看起來還很有造型,而且還有防滑的功效呢,希望對我的藝術細胞有加分作用,完成品請看(圖B)。



B

「小怪獸探索」的程式

現在開始要把感測器的輸入與動作結合,前面的程式只是練習題,現在才是正式開始撰寫「小怪獸探索」程式。這裡先介紹一下「小怪獸」的行為模式。開啟電源後「小怪獸」會先點亮LED雙眼,維持標準站姿五秒。接著做兩個「伏地挺身」暖身一下準備出發。

「小 怪獸」會隨時測量前方是否有障礙物,LED雙眼也保持每秒明滅一次的速度眨眼。一旦發現障礙物則停止前進,然後原地左轉,再次測量前方是否有障礙物,這段 期間LED雙眼以兩倍的速度明滅,讓它看起來很焦慮的樣子。如果前方依舊測量到有障礙物,則持續作左轉測量的動作,直到障礙物消失,然後繼續前進,LED 雙眼也恢復每秒明滅一次的眨眼速度。這裡的障礙物偵測距離大概是30公分,調整偵測距離的方法以後有機會再來介紹。

以下就是程式原始碼,後面有註解說明。此程式只使用到幾個副程序,提高程式閱讀性,方便入門者了解程式控制之原理。等到熟悉相關程式技巧後,可以嘗試更結構化的程式架構,以減少程式行數、提高執行效率,增加程式維護、修改的彈性。

‘—————————————————
‘ 小怪獸探索程式
‘—————————————————
Peripheral mySer As ServoRunner8A @ 0 ‘ 預設內建模組ID0
Sub OpenEyes()
Low 0 ‘ 點亮左眼LED
Low 6 ‘ 點亮右眼LED
End Sub
Sub CloseEyes()
High 0 ‘ 熄滅左眼LED
High 6 ‘ 熄滅右眼LED
End Sub
Sub RunFrame(ID As Byte)
Myser.LoadFrame(ID) ‘ 載入編號ID的動作
Myser.Runallservo() ‘ 執行載入的動作
Pause 150 ‘ 等待伺服機完成動作(每秒4)
End Sub
Sub Main()
Dim IR As Byte ‘ 宣告變數
‘—————————————————
‘ 點亮左右眼LED以及初始立正姿勢
‘—————————————————
OpenEyes() ‘ 點亮雙眼LED
RunFrame(0) ‘ 呼叫程序執行編號0動作
Pause 5000 ‘ 等待5秒才開始動作
‘—————————————————
‘ 伏地挺身二次
‘—————————————————
RunFrame(1) ‘ 呼叫程序執行編號1動作
RunFrame(0) ‘ 呼叫程序執行編號0動作
RunFrame(1) ‘ 呼叫程序執行編號1動作
RunFrame(0) ‘ 呼叫程序執行編號0動作
Pause 2000 ‘ 等待2秒才開始出發
‘—————————————————
‘ 程式主循環
‘—————————————————
Do
Sound(2, 5, 38400) ‘ 從第2腳發射5微秒的38.4kHz紅外線載波
IR = In(4) ‘ 從第4腳讀取紅外線載波資料
If IR = 0 Then ‘ 發現障礙物向左轉,左前足起步左轉: [4,6,2,7]
RunFrame(4) ‘ 呼叫程序執行編號4動作
CloseEyes()
RunFrame(6) ‘ 呼叫程序執行編號6動作
OpenEyes()
RunFrame(2) ‘ 呼叫程序執行編號2動作
CloseEyes()
RunFrame(7) ‘ 呼叫程序執行編號7動作
OpenEyes()
Else ‘ 未發現障礙物,右前足起步前行 [2,5,4,3]
RunFrame(2) ‘ 呼叫程序執行編號2動作
RunFrame(5) ‘ 呼叫程序執行編號5動作
CloseEyes()
RunFrame(4) ‘ 呼叫程序執行編號4動作
RunFrame(3) ‘ 呼叫程序執行編號3動作
OpenEyes()
End If
Loop
End Sub

程式輸入完畢之後,請在「建立」選單中選取「建立」功能進行程式編譯,並通過USB線下載編譯後的程式碼至SC8控制板。此時「小怪獸」不再只是會做「伏地 挺身」而已。這樣的程式流程已經讓「小怪獸」具有從迷宮脫困的基本能力。大家完成程式之後,可以嘗試定義一下更複雜的流程。原則上更複雜的流程可以讓「小 怪獸」以更聰明的方法從迷宮中脫困。或者加上更多的感測器,讓「小怪獸」可以更快速地感測周邊環境,做出更有效率的決策。
[DIY作品展示]转:仿生机器人──小怪兽(制作篇)
[DIY作品展示]仿生机器人──小怪兽(运用篇)


分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

123de7

发表于 2013-12-19 12:05:06 | 只看该作者

奥特曼在哪里 ????
从不依靠,从不寻找。
非常沉默,非常骄傲。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条