微算機實驗課程期末專題有些人接線做8051 喇叭,但因為器材不太夠,就有幾個人可以玩Arduino 自走車,剛好MOLi 實驗室有舉辦機械手臂相關活動也是使用Arduino 去弄,就 ...
JackKuo'sBlogHomeawstech研究文章列表關於我🔍全文搜尋使用器材組裝教學自走車搖桿遇到的坑馬達PS2搖桿IDE問題DEMO影片程式碼Monday,June4,2018微算機實驗課程期末專題有些人接線做8051喇叭,但因為器材不太夠,就有幾個人可以玩Arduino自走車,剛好MOLi實驗室有舉辦機械手臂相關活動也是使用Arduino去弄,就順便將這兩樣東西兜起來當作期末報告。
使用器材ArduinoUNOArduinoSensorShieldV5.0感測器擴展板自走車相關零組件PS2副廠搖桿組裝教學自走車基本上可以參考這篇,其中我拿到的零件比較不同的是馬達驅動模組,但一樣接上IN1~IN4當作訊號即可,因為另一邊有通電了。
聽同學說有個跳線的地方,蓋子拔掉就不會通電了,這樣就得自己接電接地。
對於擴充版不熟悉的話可以參考這篇。
搖桿網路上很多接線圖,大部分都一樣,這邊就貼個我看的順眼的。
遇到的坑馬達一開始測試馬達,code寫進去要他怎麼轉就怎麼轉,可是之後重接重寫就發現不會動了。
先檢查程式,發現是忘了在最前面寫上pinMode指定OUTPUT。
後來還是不會動,從馬達開始接電測試,不管正轉逆轉都沒問題,再來是馬達驅動模組,螺絲重新鎖、接電測試也都沒問題,那該不會是我的腦袋有問題吧!?最後終於發現是杜邦線太鬆、或是模組的針腳太細,總之就是接觸不良,因為這批線是當天助教拿新的給我,沒想到就有這個問題。
後來詢問老師,說可能是針腳太短,且杜邦線價格差異很大,品質可能也有差。
PS2搖桿沒想到這搖桿也能拿來接Arduino,上網找來找去好像就PS2X這個Library最好用,基本上就是範例code貼上去就要會動,可是我怎麼測試就是不會動,弄了約3.4小時聽到同學早就成功了,跟他借線測試後才知道可能有些訊號線斷掉了,之前還有請老師幫忙找問題,可惜沒找到,老師表示原來杜邦線品質這麼差。
之後弄弄手臂再回來弄搖桿發現又不會動了。
。
。
換線過後又正常,Arduino這東西怎麼那麼難搞阿,光是接線測試就花了8小時,雖然很倒楣線材總是出包,但也只能怪自己沒玩過多少硬體,對於debug不熟悉。
IDE問題在Mac上如果輸入法是在內建的注音模式,複製貼上或是快捷鍵註解等操錯可能會有問題,建議切換到英文模式操作。
如果Arduino同時接電又接USB,傳輸時可能會出現stk500_recv():programmerisnotresponding錯誤,只要將電源拔掉即可DEMO影片因為是一手操控搖桿一手攝影,稍微晃動/img/20180626_102720.mp4程式碼#include//forv1.6
#include
#defineLEFT_FORWARD6
#defineLEFT_BACKWARD7
#defineRIGHT_FORWARD9
#defineRIGHT_BACKWARD8
#defineMIDDLE_VALUE127
#defineCLAW5
#defineBASE2
#defineLEFT_ARM3
#defineRIGHT_ARM4
PS2Xps2x;
interror=0;
bytetype=0;
//手把是否要震動
bytevibrate=0;
//總共有幾顆伺服馬達
constintSERVOS=4;
//類比搖桿至少扳動多少才開始動作
constintsensityOffset=50;
Servomyservo[SERVOS];
intservoConfig[SERVOS][5]={
//Order,servoPin,minAngle,maxAngle,initialAngle
{0,CLAW,0,50,50},//夾子
{1,BASE,60,140,90},//基座
{2,LEFT_ARM,0,70,0},//左臂
{3,RIGHT_ARM,40,110,80}//右臂
};
voidsetup(){
Serial.begin(57600);
pinMode(LEFT_FORWARD,OUTPUT);
pinMode(LEFT_BACKWARD,OUTPUT);
pinMode(RIGHT_FORWARD,OUTPUT);
pinMode(RIGHT_BACKWARD,OUTPUT);
error=ps2x.config_gamepad(13,11,10,12,true,true);//setuppinsandsettings:GamePad(clock,command,attention,data,Pressures?,Rumble?)checkforerror
if(error==0){
Serial.println("FoundController,configuredsuccessful");
Serial.println("Tryoutallthebuttons,Xwillvibratethecontroller,fasterasyoupressharder;");
Serial.println("holdingL1orR1willprintouttheanalogstickvalues.");
Serial.println("Goto[url]www.billporter.info[/url]forupdatesandtoreportbugs.");
}elseif(error==1)
Serial.println("Nocontrollerfound,checkwiring,seereadme.txttoenabledebug.visit[url]www.billporter.info[/url]fortroubleshootingtips");
elseif(error==2)
Serial.println("Controllerfoundbutnotacceptingcommands.seereadme.txttoenabledebug.Visit[url]www.billporter.info[/url]fortroubleshootingtips");
elseif(error==3)
Serial.println("ControllerrefusingtoenterPressuresmode,maynotsupportit.");
type=ps2x.readType();
switch(type){
case0:
Serial.println("UnknownControllertype");
break;
case1:
Serial.println("DualShockControllerFound");
break;
case2:
Serial.println("GuitarHeroControllerFound");
break;
}
//馬達初始化
for(inti=0;i(MIDDLE_VALUE+sensityOffset)){
if(currentAngle[1]>servoConfig[1][2]){
currentAngle[1]-=2;
shouldMove=true;
//Serial.println(currentAngle[1]);
}
}
//左臂計算
if(ps2x.Analog(PSS_LY)(MIDDLE_VALUE+sensityOffset)){
if(currentAngle[2]>servoConfig[2][2]){
currentAngle[2]-=2;
shouldMove=true;
//Serial.println(currentAngle[2]);
}
}
//右臂計算
if(ps2x.Analog(PSS_RY)(MIDDLE_VALUE+sensityOffset)){
if(currentAngle[3]>servoConfig[3][2]){
currentAngle[3]-=2;
shouldMove=true;
//Serial.println(currentAngle[3]);
}
}
//夾子
if(ps2x.ButtonPressed(PSB_BLUE)){//willbeTRUEifbuttonwasJUSTpressedORreleased
Serial.println("Xjustchanged");
//Serial.println(currentAngle[0]);
if(currentAngle[0]==servoConfig[0][2]){
currentAngle[0]=servoConfig[0][3];
shouldMove=true;
//Serial.println(currentAngle[0]);
}
else{
currentAngle[0]=servoConfig[0][2];
shouldMove=true;
//Serial.println(currentAngle[0]);
}
}
//開始移動
if(shouldMove){
myservo[0].write(currentAngle[0]);
myservo[1].write(currentAngle[1]);
myservo[2].write(currentAngle[2]);
myservo[3].write(currentAngle[3]);
}
}
delay(50);
//強制歸零,不然會一直跑
digitalWrite(LEFT_FORWARD,HIGH);
digitalWrite(LEFT_BACKWARD,HIGH);
digitalWrite(RIGHT_FORWARD,HIGH);
digitalWrite(RIGHT_BACKWARD,HIGH);
}
←
PreviousPostNext
Post→commentspoweredbyDisqusFEATUREDTAGSemail
env
nfv
review
sigcomm
skill
tool
whyFRIENDSYIYU0X'SBLOG飛飛KevinHuang'sBlogFuYuan'sSpace節省工具箱JasonTools阿力獅的教室