寫Arduino控制程式

日記:

今日找了3套別人寫的Arduino控制程式來常是控制馬達,其中兩套完全不能用,因為使用的馬達為連續旋轉型的伺服馬達,與兩套程式控制的伺服馬達不同,一套是用可變電阻來控制馬達旋轉角度,一套是直接指定馬達旋轉角度直接控制。在用第三套程式控制馬達時發現沒有產生預期的效果,後來發現原因是因為在使用前馬達必須通電調整馬達上的可變電阻校正,經過校正馬達變如程式所寫的運動,後來這套程式用來校正馬達。

備註:

1.今天只能把馬達控制到可以動,還不知道能不能準確的定位。

2.馬達實際跑過後,馬達的輸出可以讓手臂正常的運動,但旋盤的外接件在手臂動作時會產生晃動,原因可能是固定的鐵芯轉的不夠緊。

3.程式中距離轉換成徑度是因為我有印象有老師說過機器讀的是徑度不是角度。

程式:

第三套程式(前兩套因為用不到,所以沒有放上來)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <Servo.h>

Servo myservo;

void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(9);
}

void loop() 
{ 
  int d;
  if(Serial.available()){
    d = Serial.parseInt();
    Serial.println(d);
    if(0 <= d && d <= 180){
      myservo.write(d);
    }
  }
}

來源:

葉難: Arduino練習:連續旋轉伺服馬達GWS S35

因應測試需要修改後的程式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <Servo.h>

Servo myservo;
int x=100;

void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(9);
}

void loop() 
{ 
  int d;
  myservo.write(90);   #啟動時固定
  if(Serial.available()){
    d = Serial.parseInt();
    Serial.println(d);   
    if(0 <= d && d <= 180){
      myservo.write(180);   #固定正轉
      delay(1000*(acos(d/150))/2.5+3.14);  #將d變成所要移動的距離,再將其轉換為所需時間
      myservo.write(90);  #到定點固定
      delay(1000);
      myservo.write(0);    #固定反轉
      delay(1000*(acos(d/150))/2.5+3.14);  #喊轉相同時間復歸

    }
  }
}

結語:

以目前自己的能力沒辦法寫一套控制程式出來,連參考別人的程式也很吃力,今天修改出來的程式只能夠控制一個馬達,而且我只知道他能動能固定了,旋轉角度是否正確我就不知道了,還有極限開關也還沒寫進去,還得再努力。


Comments

comments powered by Disqus