←Part.09【Node-RED入門-09】マウスクリックでKeiganMotorを動かす
→Part.11【Node-RED入門-11】KeiganPi に接続したUSBカメラで撮影する


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

今回の内容

今回は パレット のRaspberry Pi用ノードであるrpi keyboardノードを使用し、キーボードでKeiganMotorを動かします。
また、 sequencerノード の「cmdMoveToPosition」「cmdSpeed_rpm」機能についても解説します。

1.rpi keyboradノードを設定する
2.Switchノードを設定する
3.cmdMoveToPosition機能を設定する
4.cmdSpeed_rpm機能を設定する
5.実際にKeiganMotorを動かす

キーボードで動かすメリット

 ■より多くの機能を設定できる

rpi keyboardノードは「どのキーが押されたか」「どのキーが離れたか」で個別に動きを設定できます。
全てのボタンを活用することで100種類以上の機能を自由に設定できるようになります。

rpi keyboardノードの設定を行う

rpi keyboard ノードは、KeiganPi(Raspberry Pi)のUSB端子に接続したキーボードのキーを押す、または離す毎に情報を出力します。
また、以下の通り物理ボタンやマウスとは異なり出力されるmsg情報が2種類存在します。

《物理ボタン・マウス》
●押すと1、離すと0の情報をmsg.payloadから出力する

《キーボード》
●押す時・離す時で同じ情報をmsg.payloadから出力する
●押すとDOWN、離すとUPの情報をmsg.actionから出力する

debugノードで他の情報を取得する方法

debugノードワークスペース にドラッグ&ドロップした場合、デフォルトでは取得情報がmsg.payloadになっています。
この状態ではrpi keyboardノード のmsg.actionを取得する設定になっておらず、 デバッグウィンドウノード状態 にmsg.actionの情報を表示できません。

他の情報を取得する場合、debugノード のプロパティを開き msgオブジェクト全体 に変更することで デバッグウィンドウ に表示できるようになります。

プロパティの対象を変更
キーボードからの情報(クリックして拡大表示)

msg.payloadの「payload」を「action」に変えることでmsg.actionの情報を取得することもできます。
※この場合はmsg.payloadを取得できなくなるのでご注意ください

switch ノードを設定する

今回の フロー は過去紹介したカメラプラットフォームキットの ノード を利用します。
【こちら】から ノード を読み込んでください。

「現在位置を原点に設定」のフロー修正

読み込んだノードをキーボード操作用に修正します。
前回は タイムスタンプノード をクリックして原点を設定しましたが、今回はキーボードのEnterキーを押すことで原点を設定できるようにします。

上図を参照に switchノード 2つを配置し、以下の通り設定してください。

《1つ目のswitchノード》
押すキーの種類でフローを分ける設定

■Enter  キー →上のフローへ
■BackSpaceキー →下のフローへ(次項で解説)


《2つ目のswitchノード》
押したときのみフローを実行する設定

■down(押したとき) →上のフローへ
■up  (離したとき) →下のフローへ

2つ目の switchノード はコピーして上図のように下へ貼付けしてください。

※1つ目の switchノード のキー数字はBSKBU15 seriesキーボードの場合です。
キー数字を確認するには、 rpi keyboardノード に debugノードワイヤー で接続しご確認ください。

これで1つ目の switchノード で「押すキーの種類で フロー を分ける設定」2つ目の switchノード で「押したときのみ フロー を実行する設定」ができました。

cmdMoveToPosition機能を設定する

続いて cmdMoveToPosition 機能を設定し、backspaceを押すとKeiganMotorを原点まで動かす フロー を作成します。
「現在位置を原点に設定」 フロー で配置している usb selectorノード と モーター許可のノード を[ctrl]+[c]でコピーして下に貼付けし、その後、モーター許可の後ろに sequencerノード を配置します。
最後に cmdMoveToPosition 機能を以下の通り設定してください。

《cmdMoveToPositionの設定》
position 0(原点)に移動させる

position  : 0
speed   : 未入力(null)
クリックして拡大表示

speedを未入力(null)にした場合の動き

cmdMoveToPosition機能にはspeedが未入力(null)の場合、直前に設定した速度を引継ぐ機能があります。(次項で解説)

cmdSpeed_rpm機能を設定する

前項の「switch ノードを設定する」で配置したノードをコピーし、キーボードの1,2,3を押すことでモーターの速度(rpm)を20,40,60に設定する機能をフローに追加します。
cmdSpeedで速度設定後、cmdMoveToPositionで速度がnull(未入力)のノードを実行することでcmdSpeedの設定速度でKeiganMotorを動かすことができます。
これにより、原点に移動させる速度が1,2,3キーで設定した数値に自動変更されるようになります。

モーター速度設定(クリックして拡大表示)
モーター許可後のノード設定(クリックして拡大表示)

パン と チルト ( ティルト )のノードを修正する

上記でモーターの速度を20,40,60(rpm)に設定できるようになりましたので、この設定した速度を パンチルト ( ティルト ) にも反映させます。

変更前のノード(クリックして拡大表示)
変更後のノード(クリックして拡大表示)

注意点として、前回は位置をdeg(degree,°)で設定しましたが、今回はradian(ラジアン)で設定しています。
原点から90°(-90°)の位置へ移動させるには、radianを1.5708(-1.5708)に設定してください。

google検索で[deg radian 変換]と検索すると、数式を利用して変換できます。

実際にKeiganMotorを動かす

これまで設定したフローを、以下図を参考にrpi keyboardノード に接続してください。

クリックして拡大表示

以下のキーを押し、それぞれ意図した動きになることを確認します。

■←→↑↓  :設定速度で絶対位置へ移動
       (キーを離すとその場で停止)
■Enter   :現在の位置を原点に設定
■Backspace :原点の位置まで移動
■1,2,3   :それぞれ速度を20rpm,40rpm,60rpmに設定

使用事例

キーボードはマウスや物理ボタン単体に比べ、より多く・より細かく・より複雑な動きを設定できます。
複数のターンテーブルを接続し、キーごとに異なる動きを設定すれば展示会等で他社と差別化した商品アピール等も可能です。

今回使用したノード

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

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


次回予告

次回はUSBカメラを使用し、KeiganMotorと組み合わせて様々な角度の映像を受信させます。
是非ご覧ください。

→Part.11【Node-RED入門-11】KeiganPi に接続したUSBカメラで撮影する

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