←【Node-RED入門-13】KeiganPiでUSBスピーカーから音を出す
→【Node-RED入門-15】加減速度を設定してカメラをなめらかに動かす

■全記事一覧→Node-REDまとめ

今回の内容

今回は changeノードswitchノード を組み合わせ、同じ動きを指定した回数繰り返す設定をします。

これにより、商品の耐久試験といった「検査治具」も簡単に作成できるようになります。

前回までは繰り返す数だけ ノード をコピーし フロー に追加していましたが、この方法により新たに ノード を接続せず、 ノードプロパティ を編集するだけで繰り返す回数を自由に変更できるようになります。

1.changeノードを設定する
2.switchノードを設定する
3.ターンテーブルの動きを設定する
4.実際にKeiganMotorを動かす

changeノードを設定する

最初に changeノード を2種類配置します。
前回のブログの フロー を使用しますので【こちら】から ノード を読み込んでください。

1.繰り返す数をカウントするmsg.shotを設定
2.繰り返す度にmsg.shotの数値を+1する設定

1.繰り返す数をカウントするmsg.shotを設定

1つ目の changeノード で「msg.shot」という名前に0の数値を代入します。
以下図を参考にカメラ撮影 フローswitchノード 手前に changeノード を配置してください。

2.繰り返す度にmsg.shotの数値を+1する設定

2つ目の changeノードJSONata 式を使用し、情報を出力する際に msg.shot の数値を+1する設定をします。
以下図を参考に usbcameraノード の後ろに changeノード を配置してください。

以上で、 usbcameraノード で画像を保存する度にmsg.shotの数値が+1する設定ができました。

switchノードを設定する

上記2.で設定したmsg.shotの数値を switchノード で参照し、繰り返す フロー と終了する フロー へ分岐する設定をします。

以下図を参考に switchノード を配置し、6回繰り返した後で フロー が終了するよう設定してください。

その後、上記 フロー出力ポートlink outノード を配置し、1.で設定した changeノード の後ろに link inノード を配置して接続してください。

すべての配置を終えると以下図のようになります。

ターンテーブルの設定をする

今回は繰り返す度にターンテーブルを60°回転させ、 usbcameraノード でターンテーブル上の被写体を撮影する設定をします。

以下図を参考に usbcameraノード と2.で設定した changeノード の間にターンテーブルを回転させる フロー を配置してください。
※ターンテーブルを回転させる設定については【こちら】を参照

msg.filenameをリセットする

usbcameraノード の手前には【前回のブログ】で設定した changeノード が存在します。
これは JSONata 式で『 usbcameraノード で撮影した画像のファイル名(msg.filename)先頭に”image-“という文字列を追加する』という設定になっています。
この ノード を繰り返すとその都度ファイル名に「image- image- image-…」と文字列が追加されていくため、繰り返す度にmsg.filenameをリセットする必要があります。

以下図を参考に switchノードlink outノード の間に新しい changeノード を配置してください。

※ 図では delayノード を配置していますが、この ノード はお使いのUSBカメラや撮影する被写体によって自由に調整してください

ファイル名に関する フロー は以下の通りになります。

1.momentノードでmsg.filenameに現在時刻を設定
2.changeノードでmsg.filenameの先頭に"image-"の文字列を追加
3.usbcameraノードで撮影した画像をmsg.filenameの名前で保存
4.changeノードでmsg.filenameの内容を消去
5.フローを繰り返す場合は1に戻る

JSONata 式は数値をカウントする際は便利ですが、文字列を追加する場合は繰り返す度に重複していくため注意が必要です。

実際にKeiganMotorを動かす

実際にKeiganMotorを動かし、6回撮影した後で フロー が終了することを確認してください。
また、保存した画像のファイル名が正しく割り振られていることも確認してください。
※画像の保存先やファイル名の設定は【こちら】を参照


カメラで撮影した画像を繋ぎ合わせると以下のようになります。

使用事例

同じ動作を何百回も繰り返す耐久試験や、ターンテーブルの被写体を少しずつ回転させながら写真を撮って保存するなど幅広い使い方が可能です。

繰り返す回数は フロー 最後の switchノード の プロパティにある「<6」の数値を編集することで簡単に変更できます。

過去ブログの事例と組み合わせ、様々なアイデアをお試しください。

今回使用したノード

今回のブログで使用した ノード は以下から読み込みが可能です。
文字列を全て選択(3回クリック)し[ctrl]+[c]でコピーしてください。

ノードの読込み方法は【こちら】


次回予告

次回はKeiganMotorの動きを滑らかにする「cmdCurveType」機能について解説します。
次回も是非ご覧ください。

→【Node-RED入門-15】加減速度を設定してカメラをなめらかに動かす

KeiganPiとは、Raspberry Pi(ラズパイ)にKeiganMotorの開発環境をインストールした製品です。