(本記事はMENOUフォーラム1周年記念企画の技術コラムです)
MENOUで開発を担当している山藤です。
皆様は「MENOU-RN」をご存じでしょうか?
MENOU-RNは外部IO機器と連携しつつ検査AIの運用を行うアプリです。
(概要はこちらの記事を参照: MENOU-RNってなに?どんなことができるんですか?)
現在、MENOU-RNでは外部IO機器としてオムロンPLCやContecデジタルIOボードを利用することが可能です。しかしながらこれらの外部IO機器との連携を少し試してみようとするために環境を新規で揃えようとするとコスト的に少しハードルが高いように思われます。
そこで今回は安価に入手可能なArduinoをMENOU-RNの外部IO機器として使用することにトライしてみようと思います。今回使用するArduino UNOであれば4千円程度で購入可能です。
1. 検証環境
<検証環境>
・ノートPC (Menou-RN起動用)
・Arduino UNO
・USB Type-A ~ USB Type B (ArduinoとPC接続用)
・SG-90 サーボモーター
検証環境の写真です。
Arduinoにはサーボーモーター(SG-90)を接続しています。
(SG-90の先にはMENOU ロゴの紙を貼り付けています)
2. 作業内容
「MENOU-RNでMENOUロゴを検出したら、Arduinoを介してサーボモーターを回転させる」
ことの実現を目標に取り組んでみようと思います。
上記目標のため下図のような信号の流れを考えました。
MENOU–RN側にはシリアル通信で出力信号として0, 1を送信できるような機能を追加しました。
また参考までにArduinoのコードは下記の通りです。
<Servo.h>をincludeするとArduino上で簡単にサーボ操作が可能です。
今回は時計回りに60deg回転、反時計回りに-60deg回転する動作としました。
#include <Servo.h>
Servo servo;
const int OUTPUT_PIN = 6;
int outputValue = 0;
void setup() {
Serial.begin(9600);
// サーボ回転時に使用するPIN。ここでは6番PINを使用することとした
pinMode(OUTPUT_PIN, OUTPUT);
servo.attach(OUTPUT_PIN);
}
void loop() {
if(Serial.available() > 0)
{
String result = Serial.readString();
int resultValue = result.toInt();
// 受け取ったシリアル情報が1なら時計回りに60deg回転
if (resultValue == 1)
{
outputValue = 1;
servo.write(60);
delay(500);
}
else if (resultValue == 0)
{
outputValue = 0;
}
// MENOU-RN側にArduinoの出力信号の状態を送信
String serialData = String(outputValue);
Serial.println(serialData);
//反時計回りに60deg回転
servo.write(120);
delay(10);
}
}
Menou-RNの設定画面では以下のようにArduinoをIOデバイスとして選択し、異常系判定時に出力信号がHighになる設定としました。
3. 結果
こちらが実際にMenou-RNとArduinoを通信してみた動画になります。
MENOUのロゴが画像から検出(総合判定:異常)された場合にArduinoへ出力信号Highが送られ、Arduinoは出力信号を受け取ったタイミングでサーボモーターを左右に回転させています。
4. まとめ
今回の検証で目標とする動作を実現しMenou-RNとArduinoを連携させることができました!
産業用途への利用は難しいと思いますが、趣味で利用する範囲では十分可能性があるのかなと思います。
とりあえず動かしてみたというレベルのためすぐに公開できないのですが、利用してみたいというお声を頂けたら嬉しいです。