4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node-REDAdvent Calendar 2019

Day 25

Node-REDで簡単にカメラマウントを動かしてみた

Last updated at Posted at 2019-12-24

アドベントカレンダーの最終日です。これで25記事無事公開されました!最後は個人的にただやりたかったことを前日にやってみた話です。

ついこの間aliexpressの独身の日セールで安かったので、前から興味があったRaspberry Piのカメラモジュールに使えるカメラマウントを買ってみました。amazonでも売られていますが、1000円以上かかるものがありなんとなく買う気がなかったのですが、aliexpressは送料無料でなんと200円でしたw。組み立てたときに多少隙間がありますが、とりあえずできました。

Changed.jpeg

早速動かそうと思いましたが、せっかくなのでこれをNode-REDで動かす記事を書こうと思います。

用意するもの

  • Raspberry Pi 3 Model B+
  • カメラマウント(事前に組み立てておきます)
  • サーボモータ(SG-90)×2

最新のNode-REDを用意

まずは最近Ver.1.0にアップデートされたので、日本のユーザー会のページを参考にNode-REDのアップデートから始めます。とはいってもターミナルで以下のコマンドを実行すればインストールできます。

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

サーボモータの用意

配線

本当はRaspberry Piに直付けするのはあまり良くありませんが、今回は試しにサーボモータを動かすので以下の図のように配線しました。
raspi_servo_ブレッドボード.png

pigpioを有効にする

今回インストールするgpioノードには、pigpioが使われており、こちらを常時実行させておきます。以下のコマンドを実行してpigpio有効にしておきましょう。

sudo systemctl enable pigpiod
sudo systemctl start pigpiod

サーボモータを動かす

ノードのインストール

インストールが終わったら、タスクバーのNode-REDのロゴをクリックするか、ターミナルでnode-red-startを実行し、ブラウザでlocalhost:1880と入力してNode-REDを立ち上げます。右上のメニューアイコンから「パレットの管理」を選択して、パレットの設定画面を開きます。「ノードを追加」タブをクリックして検索窓にnode-red-node-pi-gpiodと入力します。このパレットにサーボモータを動かすためのノードが含まれています。

とりあえず動かしてみた

とりあえずinjectノードで数字を渡して適当な角度に動くかを試してきます。具体的には、以下のフローです。
2019-12-25-033642_1280x652_scrot.png

pi gpiodノードの中身は以下の通りです。GPIOピンを直感的に選択できる様になっています。信号入力のコードの接続先のピン番号を指定します。(今回の場合は一つはGPIO18、もう一つはGPIO23)
2019-12-25-013659_1280x652_scrot.png

以下のjsonをコピーして、フローエディタにインポートしても上記のフローを作成できます。

[{"id":"dd72fea1.3d2ae","type":"tab","label":"Controller","disabled":false,"info":""},{"id":"e6a7e276.5e46d","type":"ui_slider","z":"dd72fea1.3d2ae","name":"","label":" Base","tooltip":"","group":"924a74e0.66f208","order":0,"width":0,"height":0,"passthru":true,"outs":"all","topic":"","min":0,"max":"100","step":1,"x":170,"y":120,"wires":[["1d6e4033.0e87a"]]},{"id":"1d6e4033.0e87a","type":"pi-gpiod out","z":"dd72fea1.3d2ae","name":"","host":"localhost","port":8888,"pin":"23","set":"","level":"0","out":"ser","sermin":"1000","sermax":"2000","x":400,"y":140,"wires":[]},{"id":"17359fef.1088f","type":"pi-gpiod out","z":"dd72fea1.3d2ae","name":"","host":"localhost","port":8888,"pin":"18","set":"","level":"0","out":"ser","sermin":"1000","sermax":"2000","x":400,"y":220,"wires":[]},{"id":"77c93e16.a8624","type":"ui_slider","z":"dd72fea1.3d2ae","name":"","label":"Head","tooltip":"","group":"924a74e0.66f208","order":0,"width":0,"height":0,"passthru":true,"outs":"all","topic":"","min":0,"max":"100","step":1,"x":170,"y":200,"wires":[["17359fef.1088f"]]},{"id":"924a74e0.66f208","type":"ui_group","z":"","name":"controler","tab":"22edabf4.879ca4","disp":true,"width":"6","collapse":false},{"id":"22edabf4.879ca4","type":"ui_tab","z":"","name":"  AdventCalender","icon":"dashboard","disabled":false,"hidden":false}]

injectノードのボタン左側のボタンをクリックすると、接続を間違えてなければ任意の角度にモータが動作します。

もう少しアレンジしてみた

今度はもっと自由自在に動かせるようにアレンジしてみます。そこでせっかくNode-REDを使っているので、ダッシュボードノードでUIを足してコントローラを作ってみます。gpiodノードの時と同様にパレットの管理画面から検索でnode-red-dashboardと入力して、ダッシュボードのノード一式をインストールします。インストールを終えたら以下のjsonをコピーしてをフローエディタにインポートします。

[{"id":"dd72fea1.3d2ae","type":"tab","label":"Controller","disabled":false,"info":""},{"id":"e6a7e276.5e46d","type":"ui_slider","z":"dd72fea1.3d2ae","name":"","label":" Base","tooltip":"","group":"924a74e0.66f208","order":0,"width":0,"height":0,"passthru":true,"outs":"all","topic":"","min":0,"max":"100","step":1,"x":170,"y":120,"wires":[["1d6e4033.0e87a"]]},{"id":"1d6e4033.0e87a","type":"pi-gpiod out","z":"dd72fea1.3d2ae","name":"","host":"localhost","port":8888,"pin":"23","set":"","level":"0","out":"ser","sermin":"1000","sermax":"2000","x":400,"y":140,"wires":[]},{"id":"17359fef.1088f","type":"pi-gpiod out","z":"dd72fea1.3d2ae","name":"","host":"localhost","port":8888,"pin":"18","set":"","level":"0","out":"ser","sermin":"1000","sermax":"2000","x":400,"y":220,"wires":[]},{"id":"77c93e16.a8624","type":"ui_slider","z":"dd72fea1.3d2ae","name":"","label":"Head","tooltip":"","group":"924a74e0.66f208","order":0,"width":0,"height":0,"passthru":true,"outs":"all","topic":"","min":0,"max":"100","step":1,"x":170,"y":200,"wires":[["17359fef.1088f"]]},{"id":"924a74e0.66f208","type":"ui_group","z":"","name":"controler","tab":"22edabf4.879ca4","disp":true,"width":"6","collapse":false},{"id":"22edabf4.879ca4","type":"ui_tab","z":"","name":"  AdventCalender","icon":"dashboard","disabled":false,"hidden":false}]

読み込むと、以下のフローが表示されます。ダッシュボードのスライダーノードを使って数字を出力しその値を先程のgpiodノードに渡す単純な仕組みです。

2019-12-25-040800_1280x652_scrot.png

動作確認

新しいタブでlocalhost:1880/uiと入力すると、以下の画面が表示されます。
2019-12-25-041210_1280x652_scrot.png

表示したスライダーバーをスライドさせると先程よりもスムーズにサーボモータが動作します。以下はその実行結果です。

まとめ

というわけでRaspberry PiのNode-REDでサーボモータを動かしてカメラマウントをコントロールする仕組みを作りました。モーターの動作からコントロールのフロントエンドまでをNode-REDだけで完結でき、うまくNode-REDを活かせたと思います。Node-REDは頭の中で思いついたものをすぐに形にできるので、Raspberry Piと合わせると短時間でアイデアが形になる最強のツールになると思います。何よりアドベントカレンダーに間に合うかどうか不安でしたが間に合ってよかったです(笑)。

4
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?