電動スライダは、こちらの動画のような1軸の直線上に動く装置です。今回使ったのはオリエンタルモーター社のEAS4RNX-E040-ARAKD-1です。オリエンタルモーターは値段も書いてあるし取説もすぐダウンロード出来るので、他メーカーと違って連絡無しに買えるから楽です*1。また、モーター部とメカ部が一緒にまとまってるのでバラバラに買わなくていいのもメリットでした。
これをArduinoから動かしました。こちらの電動スライダーはモータードライバーが付属しています。モータードライバーは位置決め機能内蔵タイプ。RS-485上でmodbusプロトコルで通信可能になっており、Arduinoとの通信はこれを使います。
Arduino側はArduino MKR 485 Shieldというものを使います。このShieldが使えるのはArduino MKRシリーズのみなのでArduinoの選択肢は限られてきます。
物理的な接続
モータードライバー側でRS-485通信で使うジャックはRJ-45なので、Ethernetケーブルが刺さります。Ehternetケーブルの片方を剥いてArduino MKR 485 Shieldに繋げるのが一番手軽でした。3本の線を下記表のように繋げます。
ケーブルの色 | ドライバー側端子 | Shield側端子 |
---|---|---|
オレンジ | GND | GND |
緑白 | TR+ | Y |
緑 | TR- | Z |
modbusでの通信
必要ライブラリ
- ArduinoModbus
- ArduinoRS485
モータードライバー側へのレジスタ書き込みのみ確認しています。ModbusRTUClientのbegin関数を呼んでからholdingRegisterWrite関数を使います。引数は3つ、スレーブIDの指定、動作コマンド指定、書き込み内容です。
最もよく使うコマンド 0x007D
「ドライバ入力指令(下位)」です。上位を使わないので下位だけで大丈夫です。これを使うと実際にスライダーを動かす指令やホーミングなどを命令出来ます。ただ、一回書き込むと命令は実行されなくて、すぐに0x0000を書き込んで内容を消してやると動きました。本番のシステムでは念の為0x0000書き込みを本命令の前後に入れる処理を入れました。サンプルとしてここに置いておきます。
void Homing() { uint16_t value = 0x0010; ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000); delay(50); ModbusRTUClient.holdingRegisterWrite(1, 0x007D, value); delay(50); ModbusRTUClient.holdingRegisterWrite(1, 0x007D, 0x0000); }
おまけ
開発するならPC接続ケーブルは買ってPCから設定その他出来るようにしておくのはマストです。PCで動くサポートソフトMEXE02はWindowsのみで動作。Ver4も出ていますが、ARシリーズの場合はVer3でないと動きません。電動スライダー用設定ファイルというものがあって、それをMEXE02から入れると、設定パラメータの単位がピッタリ(ex.目標位置が0.1mm単位設定)になって楽になりました。
エレコム LANケーブル 0.3m 爪折れ防止コネクタ CAT6準拠 ブルー LD-GPN/BU03
- 発売日: 2014/05/23
- メディア: Personal Computers
たまには宣伝
こういう動き系とかチョコッとしたシステム頼めないかなぁと思ったら弊社までご相談くださいませ。
*1:でも選定に困ったら連絡するとめっちゃ相談してもらえるそうです