ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【自律型ロボット製作記】#5 アームロボット40320Cをラズパイからコントロールする

どうもこんにちは、InomaCreateです。

前回まで、SLAMでの自律走行をいろいろ検証していましたが、そろそろ違うこともやりたくなり、アマゾンでアームロボット40320Cを購入しました。
付属のリモコンでアームを動かすだけでは面白くないので、現在開発中の自律ロボットに組み込みたいと思います。
今回は、このアームロボットとモータードライバDRV8830を使って、ラズパイからコントロールするようにしてみました。

スポンサーリンク

グリッパーアームロボット 40320C

おもちゃのアームロボットの割には、しっかりと動きます。
DCモーターが5個ついていて、5つの関節を動かすことができます。ただし、普段プラモデルなど作らない私からすると、結構作るのが大変でした。2時間ぐらいあれば組み上がると思います。

モータードライバDRV8830

ラズパイでモーターをコントロールするため、DRV8830使用のDCモータドライブキットを5個購入しました。
※秋月電子通商さんで購入。
DRV8830使用DCモータードライブキット

このドライバを使うことで、I2Cを使ってマイコンからDCモーターの正転・逆転・ブレーキ等が制御できるようになります。もちろん、今のロボットに搭載しているラズパイからも制御可能です。

回路図

各モーターにI2Cアドレスをそれぞれ割り振ることで、1本のI2Cバスで5つのモーターを動かすことができます。
今回は、以下のような割り振りにしました。

I2Cアドレス設定は、CN3の「A0」「A1」端子を半田ジャンパして設定します。

半田ジャンパー例:A1=H/A0=オープン

回路図です。
DRV8830のマニュアルにならって、ラズパイと接続します。

実際に配線した写真です。配線がかなり込み入ってなんじゃこりゃ~状態です。。。

ラズパイからロボットアームを動かしてみる

ラズパイからロボットアームのモーターへI2C通信で信号を送り回転させます。
今回はおためしなので、キー入力に従って、各モーターを動作させるようにしてみました。
正転、逆転、スタンバイは、マニュアルに従って、設定します。
ビットのD7-D2が出力電圧の設定
ビットのD1,D0が正転、逆転などの設定です。

DRV8830 DCモータードライバキット マニュアル

#!/usr/bin/python

import time
import smbus
i2c = smbus.SMBus(1)

m1_adr = 0x61
m2_adr = 0x63
m3_adr = 0x65
m4_adr = 0x67
m5_adr = 0x64


def main():
    time.sleep(5)

    while True:
        key = raw_input()
        if(key == 'q'):
            print 'finish!!'
            break

        # M1 Motor
        if(key == 'l1'):
            i2c.write_byte_data(m1_adr,0,0b10100101)
            print 'left turn'
            time.sleep(0.4)
            i2c.write_byte_data(m1_adr,0,0b110100)
        if(key == 'r1'):
            i2c.write_byte_data(m1_adr,0,0b10100110)
            print 'right turn'         
            time.sleep(0.4)
            i2c.write_byte_data(m1_adr,0,0b110100)

        # M2 Motor
        if(key == 'l2'):
            i2c.write_byte_data(m2_adr,0,0b10100101)
            print 'left turn'
            time.sleep(0.4)
            i2c.write_byte_data(m2_adr,0,0b110100)
        if(key == 'r2'):
            i2c.write_byte_data(m2_adr,0,0b10100110)
            print 'right turn'         
            time.sleep(0.4)
            i2c.write_byte_data(m2_adr,0,0b110100)

       # M3 Motor
        if(key == 'l3'):
            i2c.write_byte_data(m3_adr,0,0b10100101)
            print 'left turn'
            time.sleep(0.4)
            i2c.write_byte_data(m3_adr,0,0b110100)
        if(key == 'r3'):
            i2c.write_byte_data(m3_adr,0,0b10100110)
            print 'right turn'         
            time.sleep(0.4)
            i2c.write_byte_data(m3_adr,0,0b110100)

        # M4 Motor
        if(key == 'l4'):
            i2c.write_byte_data(m4_adr,0,0b10100101)
            print 'left turn'
            time.sleep(0.4)
            i2c.write_byte_data(m4_adr,0,0b110100)
        if(key == 'r4'):
            i2c.write_byte_data(m4_adr,0,0b10100110)
            print 'right turn'         
            time.sleep(0.4)
            i2c.write_byte_data(m4_adr,0,0b110100)

        # M5 Motor
        if(key == 'l5'):
            i2c.write_byte_data(m5_adr,0,0b10100101)
            print 'left turn'
            time.sleep(0.4)
            i2c.write_byte_data(m5_adr,0,0b110100)
        if(key == 'r5'):
            i2c.write_byte_data(m5_adr,0,0b10100110)
            print 'right turn'         
            time.sleep(0.4)
            i2c.write_byte_data(m5_adr,0,0b110100)


if __name__ == '__main__':
    main()

実際に動かしてみた動画です。
ちゃんと、各モーターがラズパイから動かすことができました!!

最後に

とりあえず、ラズパイからコントロールできるようになりましたので、次は、ROSのトピック通信などを使って、スマホから操作できるようにしてみたいと思います。
最終ゴールは、カメラやAIを使って自律制御させたいです。
実は、Interface 2019年8月号を読んでたら、JetsonNanoとカメラを使ってアームロボットを自動制御させる記事がありました。その記事を参考にチャレンジしていこうと思います!

それでは!!

関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン