100 likes | 229 Views
程式設計實作. 馬達控制模式. 無控制模式 : 之前所使用的 OnFwd() 與 OnRev() 指令都屬於無控制模式, NXT 只會確認哪個馬達要轉動、轉哪個方向以及要給多少電力,我們只能透過 Wait() 來控制馬達轉動的秒數。 控制模式 : 指令為 OnFwdReg() 與 OnRevReg() 。 控制模式的參數有 : OUT_REGMODE_IDLE ( 無控制模式 ) OUT_REGMODE_SPEED ( 速度控制模式 ) OUT_REGMODE_SYNC ( 同步模式 ). 速度控制模式. 速度控制模式可以將馬達轉數維持穩定。
E N D
馬達控制模式 無控制模式 : 之前所使用的OnFwd()與OnRev()指令都屬於無控制模式,NXT只會確認哪個馬達要轉動、轉哪個方向以及要給多少電力,我們只能透過Wait()來控制馬達轉動的秒數。 控制模式: 指令為OnFwdReg()與OnRevReg()。 控制模式的參數有: OUT_REGMODE_IDLE(無控制模式) OUT_REGMODE_SPEED(速度控制模式) OUT_REGMODE_SYNC(同步模式)
速度控制模式 速度控制模式可以將馬達轉數維持穩定。 當使用速度控制模式時,即使負載改變NXT仍會將馬達維持在一定的轉速。 注意:當使用速度控制模式時,馬達出力不要設定太高的值,最好不要超過80 語法: OnFwdReg(輸出端, 速度, 控制模式 ); 範例: OnFwdReg(OUT_C, 40, OUT_REGMODE_SPEED);
同步模式 同步模式可以將兩顆馬達同步化,馬達會根據對方的狀況作調整。 範例: OnFwdReg(OUT_AC, 50, OUT_REGMODE_SYNC); 另一組馬達同步指令:OnFwdSync()與OnRevSync() 語法:OnFwdSync(輸出端, 速度, 轉彎百分比); 我們可以透過指定轉彎百分比(-100~100)來設定機器人轉彎的效果。0就是直走,100與-100為原地旋轉,50與-50則是以一個輪子為圓心來轉彎。
馬達轉速表模式 NXT馬達有內建角度感應器,讓我們可以精準地控制馬達轉軸的位置與轉動速度,透過角度感應器與RotateMoter()指令,馬達就能轉動正確的角度。 RotateMoter()指令語法: RotateMoter(輸出端, 速度, 角度 ); 範例: RotateMoter(OUT_A, 50, 360); 我們可以藉由改變速度與角度的正負值來控制馬達的轉動方向,如果速度與角度皆為正值或負值,馬達將正向轉動,若一正一負,馬達則會反轉。
RotateMoter()延伸指令 RotateMoter()的延伸指令:RotateMoterEx() 語法: RotateMoterEx(輸出端, 速度, 轉動角度, 轉彎百分比, 是否同步?, 是否煞車?) 範例:RotateMoterEx(OUT_AC, 75,180,0,true,true); //AC馬達以75%的電力旋轉180度、直走、啟用同步模式、使用電子煞車 task main() { RotateMoterEx(OUT_AC, 40,360,0,true,true); //AC馬達以40%的電力旋轉360度、直走、啟用同步模式、使用電子煞車 RotateMoterEx(OUT_AC, 40,180,25,false,true); //AC馬達以40%的電力旋轉180度、微轉彎、無同步、使用電子煞車 RotateMoterEx(OUT_AC, 80,180,-50,true,false); //AC馬達以80%的電力旋轉180度、反向以單輪為圓心轉彎、啟用同步模式、無煞車 RotateMoterEx(OUT_AC, 80,360,100,false,false); //AC馬達以80%的電力旋轉360度、原地旋轉、無同步、無煞車 }
馬達過度負載 MotorOverload()指令,語法:MotorOverload(輸出端); MotorOverload可以偵測馬達是否有遇到阻力,當馬達遇到阻力時,也就是當馬達實際轉速小於目標值時就會回傳1,反之回傳0。 在使用MotorOverload()指令時,請務必注意此指令必須配合控制模式使用,因為控制模式具有回饋的功能,NXT才有辦法透過角度感應器知道馬達是否有遇到阻力。 task main(){ OnFwdReg(OUT_A, 50, OUT_REGMODE_SPEED); until(MotorOverload(OUT_A)==1); off(OUT_A); }
顏色感應器 顏色感應器可以辨別黑、白、紅、藍、黃與綠六種顏色,另外可以當作三色燈泡使用。顏色感應器有兩個燈泡,其中右上角的燈泡可以發出紅、綠與藍色的光,左上角則是接收資料。 SetSensorColorFull(輸入端); 如果要使用顏色感應器的顏色辨識功能就必須使用此指令,SetSensorColorFull()會讓感應器的紅、藍、綠燈同時亮起,以助辨識顏色。 若要讀取感應器的值,只要使用Sensor()指令即可,不同顏色會回傳不同的值。 回傳值為1 代表為黑色 回傳值為2 代表為藍色 回傳值為3 代表為綠色 回傳值為4 代表為黃色 回傳值為5 代表為紅色 回傳值為6 代表為白色
顏色感應器 若是要使用顏色感應器的燈泡功能,需要使用下列指令: SetSensorColorRed(輸入端); //開啟顏色感應器中的紅色燈 SetSensorColorBlue(輸入端);//開啟顏色感應器中的藍色燈 SetSensorColorGreen(輸入端);//開啟顏色感應器中的綠色燈 SetSensorColorNone(輸入端); //燈泡關閉
實作 實作一 將課本EX7-4使用RotateMotorEx()改寫。 實作二 使用MotorOverload()指令做出不需要觸碰感應器也可以偵測障礙物, 並改變行走方向。 PPT下載位址: http://oss.csie.fju.edu.tw/~neilsun100/program.html