Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

Raspberry pi でロボットアームを動かす その4 接続と動作テスト

MG996R も、DS3218 も、可動域が違いますがほぼ一緒です。

PCA9685 で、60hzで全部動かしちゃいます。

150 で最小値、 600 で最大値 を取ってくれる、、、みたいです。

可動域

MG996R 120度
DS3218 180度

ちなみに、可動域を超えて動かそうとすると、すごい発熱します!

ハンドの部分は、モーターの可動域そのままは使用しません。
ハンドの可動域を超えて動こうとして壊れないように、範囲を限定して動かします。

私の場合は

min     = 250
max     = 395

です。

コーディング

ハンド以外も、パーセント指定で動かせたほうが楽かと思い、書き直しました。

#!/usr/bin/python
# coding: utf-8 

from __future__ import division
import time
import Adafruit_PCA9685

# Uncomment to enable debug output.
#import logging
#logging.basicConfig(level=logging.DEBUG)

pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(60)

def MG996R_BASE( percent ):
        channel = 0
        min     = 150
        max     = 600
        a_percent       = (max-min)/100
        pwm.set_pwm(channel, 0, int(a_percent*percent)+min)

def DS3218_LEAN_UNDER( percent ):
        percent = 100 - percent
        channel = 1
        min     = 250
        max     = 500
        a_percent       = (max-min)/100
        pwm.set_pwm(channel, 0, int(a_percent*percent)+min)

def MG996R_LEAN_UPPER( percent ):
        channel = 2
        min     = 150
        max     = 500
        a_percent       = (max-min)/100
        pwm.set_pwm(channel, 0, int(a_percent*percent)+min)

def MG996R_WRIST( percent ):
        channel = 3
        min     = 150
        max     = 600
        a_percent       = (max-min)/100
        pwm.set_pwm(channel, 0, int(a_percent*percent)+min)

def MG996R_HAND( percent ):
        channel = 4
        min     = 250
        max     = 395
        a_percent       = (max-min)/100
        pwm.set_pwm(channel, 0, int(a_percent*percent)+min)

def calibration():
        MG996R_BASE(0)
        time.sleep(1)
        MG996R_BASE(50)
        time.sleep(1)
        MG996R_BASE(100)
        time.sleep(1)
        MG996R_BASE(50)
        time.sleep(1)

        DS3218_LEAN_UNDER(0)
        time.sleep(1)
        DS3218_LEAN_UNDER(50)
        time.sleep(1)
        DS3218_LEAN_UNDER(100)
        time.sleep(1)
        DS3218_LEAN_UNDER(50)
        time.sleep(1)

        MG996R_LEAN_UPPER(0)
        time.sleep(1)
        MG996R_LEAN_UPPER(50)
        time.sleep(1)
        MG996R_LEAN_UPPER(100)
        time.sleep(1)
        MG996R_LEAN_UPPER(10)
        time.sleep(1)

        MG996R_WRIST(0)
        time.sleep(1)
        MG996R_WRIST(50)
        time.sleep(1)
        MG996R_WRIST(100)
        time.sleep(1)
        MG996R_WRIST(50)
        time.sleep(1)

        MG996R_HAND( 5 )
        time.sleep(1)
        MG996R_HAND( 95 )
        time.sleep(1)

def move01():
        MG996R_HAND(80)
        time.sleep(1)
        MG996R_HAND(0)
        time.sleep(1)
        DS3218_LEAN_UNDER(20)
        time.sleep(1)
        MG996R_BASE(40)
        time.sleep(1)
        MG996R_BASE(48)
        time.sleep(1)
        MG996R_LEAN_UPPER(10)
        time.sleep(1)
        MG996R_LEAN_UPPER(18)
        time.sleep(1)

        time.sleep(2)

        for var in range(0, 4):
                MG996R_HAND(10)
                time.sleep(0.5)
                MG996R_HAND(90)
                time.sleep(0.5)

if __name__ == '__main__':
        try:
                while True:
                        #calibration()
                        move01()
                        break

        except KeyboardInterrupt:
                pass

MG996R_BASE(50)                 # 旋回
time.sleep(0.5)
DS3218_LEAN_UNDER(80)   # 傾斜・下
time.sleep(0.5)
MG996R_LEAN_UPPER(10)   # 傾斜・上
time.sleep(0.5)
MG996R_WRIST(50)                #ハンド回転
time.sleep(0.5)
MG996R_HAND( 50 )               # ハンド開閉
time.sleep(0.5)
print("END.\n")

電源の交換

それぞれ独立して動かす分には、6V 2A で足りることがわかったので、別途用意した ACアダプター(6V 2.8A)を使用することにしました。

動作も問題無さそうです。

以下の2つを使用しました。

スイッチングACアダプター6V2.8A 100V〜240V GF18−US0628−T: 電源一般 秋月電子通商 電子部品 ネット通販

2.1mm標準DCジャック⇔小型ねじ端子台(着脱可能): パーツ一般 秋月電子通商 電子部品 ネット通販

f:id:pongsuke:20170117124453j:plain