KRSサーボモータ(近藤科学)をRaspberry Piで動かす
- 2020.08.15
- Raspberry Pi
以前、プリメイドAIを分解してサーボモータを入手しましたが、今回Raspberry Piで動かしてみたので手順をメモしておきます。
必要品
- KRSサーボモータ
- Raspberry Pi
- Dual USBアダプターHS
USBアダプタはモータのIDを取得・変更したりするのに使用します。デイジーチェーンで繋ぐ場合は重複しないように設定が必要です。
設定
モータのIDの取得と変更は下記のソフトウェアで行います。また通信速度は後のプログラムで指定するので、メモしておきます。こちらの設定にはWindows PCが必要です。
Raspberry PiにはUbuntuが入っているものとして、USBアダプタを使用するには下記の設定が必要です。
この設定で、自動起動の項目に/etc/rc.localにコマンドを記入することとありますが、Ubuntuにはこのファイルが無かったので、/etcに下記コマンドをrc.localという名前で保存します。
1 2 3 4 5 6 |
#!/bin/sh ## KO Driver modprobe ftdi-sio # Dual USB adapter echo 165C 0008 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id |
また、 これに対して、chmod u+x rc.localとして実行可能にします。
プログラム
プログラムは下記で公開されているソースコードを参考にしました。
詳細なコマンドは下記で公開されています。
言語は何でも良いと思いますが、私はPythonが一番使いやすいので下記のプログラムを書きました。
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 |
#!/usr/bin/env python import serial, time def set_pos(ser, id, pos): cmd=0x80 | id pos_h=pos>>7 & 0x07f pos_l=pos & 0x07f data=[cmd, pos_h, pos_l] ser.write(data) if __name__ == '__main__': ser=serial.Serial("/dev/ttyUSB0", 115200, serial.EIGHTBITS, parity=serial.PARITY_EVEN) cnt=3500 inc=100 while(True): set_pos(ser, 5, cnt) time.sleep(0.01) set_pos(ser, 13, cnt) time.sleep(0.01) cnt+=inc print (cnt) if(cnt>11500 or cnt<3500): inc*=-1 ser.close() |
複雑なプログラムではないので分かると思いますが、set_pos関数にIDと角度をを渡して書き込みしています。今回は3番と15番のIDのサーボを数珠つなぎにして正転逆転を繰り返すようになっています。
実際に動作させると下記のような感じです。
プリメイドAIから外したKRSサーボがラズパイで動いた。デイジーチェーンも出来ている pic.twitter.com/jinEoMdSiZ
— Ken@エンジニア投資家 (@Ken_okinawan) August 15, 2020
ブログにまとめると簡単そうですが、最初は通信速度が違っていたり、パリティの設定をしていなかったりで動かすのに割と苦労しました。でもこれからはデイジーチェーンのおかげでごちゃっとした配線から開放されそうです。
-
前の記事
RPLIDAR A1M8をRaspberry Piで使う 2020.08.12
-
次の記事
Unity(Windows)からRaspberry Piへデータ送信 2020.12.13