[ロボ実験記録] PCで制御可能な自動シリンジを作る1: セットアップ (未完)
はじめに
ロボットに化学実験をさせることが一つの目標になっています。
AI・ロボット制御をはじめ、諸々の課題はありますが、実空間での問題として、自動実験用の作製というtopicがあります。
マイクロピペットはデジタル制御可能な商品が市販されている一方で、注射針(シリンジ)については、あまり手頃な装置が見当たりませんでした。
実験器具のDIYはロボット実験に必須になってくるため、練習(とパソコン作業からの気分転換)も兼ねて、作製を試みます。
注意: 今回使ったステッピングモータをうまく使いこなせず、空転するのみの応答しか得られませんでした。他のモーターを使った方が良いかもしれません。
完成像
マイクロコンピュータ(Arduino)でステッピングモータ(1軸)を制御することで、注射針を制御する仕組みです。ArduinoはPCとのシリアル通信で制御します。
イメージ図を探していたところ、ちょうど、探していたハードウェアが見つかりました(下記)。
こちらも注文中なので、そのうち、PCから制御できるように改造する記事を作成予定です。
準備するもの(主なもの)
マイコン
ステッピングモータのドライバとリミットスイッチ用の接続端子を付けられるボード※を使います。
※モーター用端子が5個あるので、オーバースペックです。
ステッピングモータのドライバはTMC2209を使います。
ACアダプタ
Arduinoの電源です。
ステッピングモータ+レール
注射針を動かすための、1軸のステッピングモータ+レールのセットです。
注意: このモーター、自分が試した環境では、うまく動かせませんでした(空転: 後述)。
リミットスイッチ
その他、コネクタやネジ類も買っておきました。
ステッピングモータの配線
ステッピングモータの先はただのリード線なので、端子を繋ぐ必要があるようです。こちらのサイトが参考になります。
はじめに、HXコネクタ?と呼ばれる端子の銀色の部分とリード線をつなぎます。
次に、リード線部分をラジオペンチなどで締め付けます。
コネクタ(オス)に差し込んでいきます。
※差し込む順番が重要なようです。モーターに記載の端子の色(A+ 紅, A-藍, …)と、Arduinoボードの1B, 1A, …が対応するようにする必要があります。
配線については以下のサイトが参考になりました。
ボード表面の、右下部分に端子を差し込んでおきました。
ドライバ
ドライバを指します。
その前に、こちらの黒い金具を3つ、付けておく必要があるようです。
その後、ドライバを指します。
電源の配線
5V電源の端子を付けていきます。
はじめに、適当なリード線2本の皮を剥いでおきます。
そして、DC ジャックアダプタに繋げます。
同様に、リード線の反対側をボードの電源部分に接続します。
最後に、電源コードと接続すれば、完了です。
リミットスイッチの配線
座標補正用のリミットスイッチを付けます。
います。配線図はこちら。
リード線の対応は以下の通りのようです。
茶: +V
青: 0V (GND)
黒: 出力1(入光時ON)
白: 出力2(遮光時ON)
とりあえずはぎます。
コネクタにつなぎます(左から、5V、GND、出力の順)。
入力センサのZ軸のところに指します。
Arduinoのセットアップ
Arduino IDEのインストールとボード設定
マイコンボードにプログラムを書き込んでいきます。
装置を電源に接続し、PCとusb接続します。
Arduino IDEが入っていない場合は、インストールします。
(初回起動時は諸々のソフトやドライバのインストールを求められます)
起動後、ボードとしてMega 2560を選択します。
テストコードの動作
こちらのサイトのピンレイアウトを参考に、制御コードを書いてみます。
センサーの動作確認
#include <Stepper.h>
//Stepper stepper(2000,)
void setup() {
pinMode(3, INPUT); // D3ピンを入力として設定
pinMode(4, INPUT); // D3ピンを入力として設定
Serial.begin(9600); // シリアル通信を9600bpsで開始
}
void loop() {
int value = digitalRead(3); // D3ピンから値を読み取る
Serial.println(value); // シリアルモニターに値を表示
delay(500); // 500ミリ秒待機 (読み取りの間隔を設定)
}
センサー内に指などを入れると、シリアルモニタに出力される値が変化します。
ステッピングモータの制御
const int stepPin = A0; // ステップピンとしてのArduinoのピン番号
const int dirPin = A1; // 方向ピンとしてのArduinoのピン番号
const int enablePin = 38; // EN(Enable)ピンの番号
const int step_time=1000;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW); // モータードライバを有効にする
}
void loop() {
// 1方向に動かす
digitalWrite(dirPin, HIGH); // 方向を設定
for(int i = 0; i < 50000; i++) { // 5000ステップ動かす
digitalWrite(stepPin, HIGH);
delayMicroseconds(step_time); // 一つのステップの持続時間の半分
digitalWrite(stepPin, LOW);
delayMicroseconds(step_time); // 次のステップまでの待ち時間
}
delay(200); // 2秒待機
// 逆方向に動かす
digitalWrite(dirPin, LOW); // 方向を逆に設定
for(int i = 0; i < 50000; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(step_time);
digitalWrite(stepPin, LOW);
delayMicroseconds(step_time);
}
delay(2000); // 2秒待機
}
ステッピングモータを前後に動かすコードです。
モーターが空転して、殆ど動きませんでした。
(よくよく調べると、モーターの駆動電圧が24Vのようで、供給電圧が足りない模様です。)
GRBLライブラリのインストール(未完)
シリアル通信での制御のため、GRBLライブラリを入れます。
これは、3Dプリンタetcで使うライブラリのようです。
今回のような単純な一軸系の場合、あえて使う必要はないかもしれません。
また、上述の通り、そもそもステッピングモータが動かなかったので、説明も未完です。
インストール
ソースコードのダウンロード (Source code (zip))
zipファイルを展開すると、中にgrblフォルダがあるので、grblフォルダを、Arduinoの作業フォルダ-library※(windowsのデフォルトではmydocument/Arduino/libraries)にコピー
※Arduino IDEの設定項目から、作業フォルダは確認可能
正しくファイルを読み込めていると、Arduino IDEの起動後にExamplesにgrblが追加されます。
ソースの書き換え
デフォルトだと3軸にセンサを使って位置補正(ホーミング)する設定になっています。
今回は1軸(X軸)しか使わないので、書き換えます。
具体的には、config.hファイルを開き、HOMING_CYCLE_0に設定する感じです。
105、6行目をコメントアウトして、112行目のコメントアウトを外します。
ボードをMega 2560に選択した状態で、grbl-grblUploadをクリックしてスケッチを開きます。
接続したボードのPortを選んだ後、「→」ボタンを押すとコンパイルとファイルアップロードが実施されます。
特にエラーがなければ、書き込み完了です。
制御
あとは、シリアルモニタを開いてGRBLのコマンドを打てば、ステッピングモータを動かせるはずです。
(個人談: 何故かシリアル通信ができず、1-2時間ほど試行錯誤していました。PCを変えたらうまくいきました。シリアル通信周りのPCトラブルのようです)
Arduino IDEのシリアルモニタを開きます。
GRBLのコマンド表
https://satsumako.com/wp/wp-content/uploads/2020/07/0006a98bbbb4d4f398cd32c7fe417b10.pdf
この記事が気に入ったらサポートをしてみませんか?