本記事では、ビーカー・試験管の交換の自動化事例について紹介します。化学系の実験で行われるカラム精製の自動化装置を作成したので装置の作り方・自動化の事例を記事にまとめています。
コンテンツ
自動化装置の作成
カラム管のコックの開閉とビーカーの入れ替えを自動化します。
必要なもの
・ブレッドボード
・arduino nano
・A4988(ステッピングドライバー)
・MG400(サーボモータ)
・ステッピングモーター
・液体センサー
・スイッチ×2
・ジャンパーワイヤー
cadデータ
ビーカー回転装置
beaker_rotator by LaboRobo
試験官用の拡張パーツ
tube_rotator by LaboRobo
tube
配線図
図のように配線します。9Vの電池ではなく外部電源に接続してください。電力を消費するので電池だと30分ぐらいで切れます。
プログラム
#include <A4988.h>
#include <Servo.h>
// ピン定義
const int MOTOR_STEPS = 200;
const int DIR = 9;
const int STEP = 10;
const int switchPin1 = 5;
const int switchPin2 = 4; // 新しいスイッチのピン番号
const int switchPin3 = 2; // 回転数切り替え用のスイッチ
const int servoPin = 3;
const int servoMin = 0;
const int servoMax = 180;
// 回転数定義
int numSteps = 64; // 初期値は64、スイッチで200に切り替え可能
float rpm = 15;
int microsteps = 10;
A4988 stepper(MOTOR_STEPS, DIR, STEP);
Servo servo;
int servoPos = 90;
const int servoStep = 2; // サーボモーターの回転速度調整(大きいほど速く回転)
void setup() {
Serial.begin(9600);
stepper.begin(rpm, microsteps);
pinMode(switchPin1, INPUT_PULLUP);
pinMode(switchPin2, INPUT_PULLUP);
pinMode(switchPin3, INPUT_PULLUP); // 新しいスイッチ用のピン設定
servo.attach(servoPin);
servo.write(servoPos);
}
void loop() {
// スイッチ3が押されたら回転数定義を切り替える
if (digitalRead(switchPin3) == LOW) {
if (numSteps == 64) {
numSteps = 200;
Serial.println("Switch 3 pressed, numSteps set to 200");
} else {
numSteps = 64;
Serial.println("Switch 3 pressed, numSteps set to 64");
}
delay(500); // デバウンス処理
}
if (digitalRead(switchPin1) == LOW) {
// サーボモーターをA→Bまでゆっくり回転
Serial.println("Switch 1 pressed");
rotateServo(servo, 180, 30); // A=180, B=30
}
if (digitalRead(switchPin2) == LOW) {
Serial.println("Switch 2 pressed");
rotateServoAndStepper(servo, stepper, 180, 30, numSteps); // A=180, B=30に変更
}
}
void rotateServo(Servo &servo, int servoStart, int servoEnd) {
Serial.println("Rotating servo from " + String(servoStart) + " to " + String(servoEnd));
if (servoStart > servoEnd) {
for (int pos = servoStart; pos >= servoEnd; pos -= servoStep) {
servo.write(pos);
delay(20);
}
} else {
for (int pos = servoStart; pos <= servoEnd; pos += servoStep) {
servo.write(pos);
delay(20);
}
}
}
void rotateServoAndStepper(Servo &servo, A4988 &stepper, int servoStart, int servoEnd, int stepperSteps) {
// サーボモーターをA→Bまでゆっくり回転
Serial.println("Rotating servo and stepper");
rotateServo(servo, servoStart, servoEnd);
delay(2000);
// ステッピングモーターを指定ステップ回転
stepper.move(stepperSteps);
// サーボモーターをB→Aまでゆっくり回転
rotateServo(servo, servoEnd, servoStart);
}
このプログラムをarduinoに書き込みます。
使い方
セッティング
ビーカーか試験管かに合わせて回転装置を選択します。
カラム管のコックの位置にサーボモーターが来るように調整します。
液体センサーを液体を貯めたい位置にセットします。
上のボタンは緊急停止用ボタン。コックを閉じるためのボタンです。
下のボタンはステッピングモーターの回転数を変えるボタン。試験管の移動装置とビーカーの移動装置を使い分けるときに使用します。
液体センサーのキャリブレーション
静電気容量を図るセンサーなのでどのくらいの感度で反応させるかを設定します。
液体センサーの丸いボタンを長押しします。遅い点滅→早い点滅に変わります。
早い点滅になったら液体の入ったビーカーにあてます。遅い点滅になったら離します。
これでキャリブレーションは完了です。キャリブレーション中は液体センサーに触れずにコードを持ってください。センサーに直接触れていると人の血液で反応して、キャリブレーションがうまくいきません。
動いている様子
一定量までたまったらコックを閉めて次のビーカーに移動します。