USB通信が可能なホットプレート・スターラー IKA RCT5 digitalを試す
概要
自動で化学実験を行う上で欠かせない(?)、撹拌や加熱操作の装置(ホットスターラー)をシリアル通信で制御する際のメモです。
装置
過去に色々とホットプレートの候補を探しました。意外と通信機能が備わった器具がありません。
コスパやUSB通信の機能を鑑みた上で、IKA C-MAG RCT 5 digitalを購入しました。
15万円ほどします。通信機能がない装置だと、10万円くらいが相場です。
機能としては、撹拌+加熱だけなので、Amazonなどに販売されているガジェットを改造すれば、10分の1くらいの値段で作れると思います。
ただし今回は、信頼性と時間の問題も踏まえて、こちらを選びました。
専用の通信ソフトも市販されているようです(15万円~: リンク)
この会社の商品、色々と通信機能をもったマシンがあるようです。素晴らしいです。
セットアップ
Win11で試しています。
取り扱い説明書へのリンクは販売サイトや公式サイトにありました。
まずはUSBドライバを、こちらからダウンロードするようです。
ドライバをインストール後、装置とUSB接続すると、「デバイスマネージャー」上で、ちゃんと認識できていました。
![](https://assets.st-note.com/img/1692254738019-WYEmXcCblC.png)
通信
マニュアルに従い、シリアル通信のコマンドを作成…という面倒な作業を覚悟していたのですが、本当にありがたいことに、先駆者が通信用のpythonモジュールを作ってくれていました。まさに、渡りに船です。
pipでパッケージを入れます。
#pip install ika
…残念ながら、オープンソースの宿命として、若干のコード変更類が必要でした。
1 pandasのバージョン指定
pip install pandas==1.5.3
理由: 23年4月以降、pandasのv2系が出ていますが、本ライブラリはHein Utililiesという、ややマニアックなモジュールをimportしています。
Hein Utililiesのtemporal_data.pyがpandasのDataFrameのappend関数を呼び出すのですが、残念ながら、appendは廃止されたようです。
このモジュールを直すのが面倒だったので、今回は応急措置的に、pandasのバージョンを下げることにしました。
2 コード修正
まずはソースを落とします。
git clone https://gitlab.com/heingroup/ika
この状態でpipをしても良いのですが、なんだかんだでcode修正が必要な気がしたので、今回は環境には入れずにimportすることにします。
ika/ika/magnetic_stirrer.pyの750行目付近を直します。大した修正ではありません。
![](https://assets.st-note.com/img/1692258668224-TNdl1su6WN.png?width=1200)
![](https://assets.st-note.com/img/1692258760558-w10Ml4R7Lh.png?width=1200)
コメント: シリアル通信の初期化の際、装置が"RCT 5 digital"という文字列を返してくるんですが、それを受け取ることができないコードになっていたため、そのままではfloat変換の方へ処理が回って、errorが出るという状況でした。
開発者が、RCT 5 digitalを使っていなかった or ハードウェアの仕様が変わった、といった理由が考えられます。
修正済みのファイルはこちら (GNUライセンス)。
動作確認
デモコードを参考に、温度と回転数をランダムに制御するプログラムを走らせてみました。
#ライブラリの自動リロード
%load_ext autoreload
%autoreload 2
import sys
import time
#ikaをパスに入れる
sys.path.append("ika")
from ika.magnetic_stirrer import MagneticStirrer
import random
#初期化
port="COM7"
plate = MagneticStirrer(device_port=port)
#撹拌と加熱を開始する
plate.start_stirring()
plate.start_heating()
#温度と回転数を変えるループ
for i in range(20):
plate.target_stir_rate = random.randint(10,200)
plate.target_temperature = random.randint(10,50)
time.sleep(1)
#停止
plate.stop_heating()
plate.stop_stirring()
#接続解除
plate.disconnect()
動作の様子はこちら
usb制御の様子 pic.twitter.com/CWwMwmmLUS
— 畠山 歓 Kan Hatakeyama (@kanhatakeyama) August 17, 2023
1秒ごとに設定値を変えているので、実測温度と回転数は、当然ながら追従しませんでした。
特に、温度制御には時間がかかるので、必要に応じて記録しておいた方が良さそうです。
ホットプレートの温度を呼び出す関数もありました。
それ以外の機能もあるようです。詳細はコードを読むのが早そうです。
plate.read_actual_hotplate_sensor_value()
まとめ
USB通信が可能なホットプレートIKA RCT5 digitalを使い、pythonで制御しました。
シリアル通信のコマンドをゼロから書く予定ですが、pythonのライブラリが公開されており、本当に助かりました。1000行ほどのソースコードを書く時間を節約できました。オープンソースは素晴らしいです。