【自律型ロボット製作記】#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モータードライバキット マニュアル
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
#!/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とカメラを使ってアームロボットを自動制御させる記事がありました。その記事を参考にチャレンジしていこうと思います!
それでは!!
スポンサーリンク