2013年5月15日 星期三

Arduino範例12:Control RC Servo Motor by Arduino (控制RC伺服馬達)


做過直流馬達、步進馬達的控制,接下來要做的是RC伺服馬達的控制。下圖是伺服馬達的原理圖。伺服馬達廣義的定義,就是一顆已經帶有sensor的馬達,可以做回授的控制。而我們要使用的RC Servo Motor,使用十分方便,只需要供應指定寬度的PWM訊號,那他就會到達我們所想要的角度。


接線圖
接線方面,我們先是需要一個要求位置的輸入。如下圖裡左側,有一個可變電阻,供應它5V的電位,然後取中間的Pin獲得一個我們可以手動調整的電位,接進Arduino的A1(analogRead)引腳。在圖裡右側的部分,RC Servo Motor有三條線,依說明書接上對應的Pin腳,其中PWM接到Arduino的Pin10,我們將由code裡要求由Pin 10輸出。


Code
  

Video

13 則留言:

  1. 请问我可以不可使用ardunio UNO 这个型号去完成这个装置?

    回覆刪除
    回覆
    1. 我可不可以email你幫我看一下?

      刪除
    2. 因為我現在用一個別人給的主板和連接 所以我不知道怎麼加上這個馬達 我自己也不太懂電路這些

      刪除
    3. email在我的profile裡就有了
      至於您的議題,可能要等看到您的email才知如何回覆

      刪除
  2. 請問可以透過滑鼠控制嗎?

    回覆刪除
  3. 你好, 我是arduino新手
    請問是所有伺服馬達都可以這樣做嗎?
    我使用"Tower pro MG996R 金屬齒伺服馬達"也可以嗎?

    回覆刪除
    回覆
    1. 不是所有伺服馬達都行,但你的Tower pro MG996R是可以的

      刪除
  4. 請問一下 如果我買那種 7千多的遙控車 好像俗稱RC遙控車 其中有電子變速器 以及轉向伺服機(控制轉彎角度得)如何以Arduino 用紅外線操控 我只試過用一般馬達 我怕搭上去電源遙控車就毀損了

    回覆刪除
  5. 圖在這
    http://imgur.com/OSiVlUY

    回覆刪除
  6. 請問一下
    你int val = analogRead(1);
    val = map(val, 1023, 0, 179);
    這行執行後會跑出
    too few arguments to function 'long int map(long int, long int, long int, long int, long int)'
    請問該如何解決?

    回覆刪除
    回覆
    1. val = map(val, 0, 1023, 0, 179);
      你少東西了
      這是個數值轉換的工具
      把 val 在 0 至 1023 範圍中的比例位置
      轉成 val 在 0 至 179 範圍中的比例位置
      舉例來說
      512 在 0 至 1023 範圍中的比例位置大約是 0.5
      0.5 在 0 至 179 範圍中的比例位置大約就是 90

      刪除
    2. 你好,請問如果我要用四顆可變電阻分別控制四顆MG996R的話,程式碼要怎麼改?

      刪除