7
1

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 3 years have passed since last update.

enebularAdvent Calendar 2019

Day 18

enebularとobnizで鏡餅を動かしてみた

Last updated at Posted at 2019-12-24

はじめに

2019年11月に行われた第3回 ビジュアルプログラミング交流会 という enebular と obniz を使ったハンズオンに参加して2つのビジュアルプログラミングを繋げて使う方法を学びました。

また最近はLEGOなどを使って簡単に動くものを作ることができるという事を ゆるメカトロ というグループで知りました。

そこで今回は、これらを組み合わせて何か作ってみようと考えた結果、昨年は クリスマスツリーを点滅させてみた ので、今年はお正月に向けて鏡餅を動かしてみます!

image.png

使ったもの

  • enebular
  • obniz
  • LEGO Crazy Action Contraptions
  • Geek Servo
  • モバイルバッテリー
  • 100円ショップの鏡餅

LEGOは様々な種類のパーツが販売されていますが、「Crazy Action Contraptions」というテクニカルパーツのセットと、「Geek Servo」というモーターのセットを買う人が多いようなので、私も購入しました。

image.png

モーターを動かす

私が参加したハンズオン資料にモーターを動かす内容が公開されてます。
obnizハンズオン(ブロックプログラム)

ハンズオンではアクリル板を車体にしていますが、今回はLEGOで車体を組んでいます。
Geek ServoのDCモーターはobnizのブロックプログラムやライブラリの「DCMotor」をそのまま使って動かすことができました。サーボモーターについてもobnizのライブラリ「ServoMotor」を使って動かすことができます。

enebularとつなげる

enebularとobnizをつなげる部分のハンズオン資料は以下になります。
enebularとobnizをつなげて操作してみる

今回はハンズオンの内容に加えて以下の2つを使っています。

  • enebularのダッシュボードからの操作
  • サーボモーターで鏡餅を動かす

enebularのダッシュボードからの操作

obnizは簡単にウェブ上にボタンなどを作って操作ができますが、enebularでもダッシュボードというノードを使って簡単にボタンを作ることができます。

下の水色のノードが今回追加したダッシュボードのノードになります。
image.png

以下のようにダッシュボード画面からボタンを押して1秒や10秒動かしたり、スライドバーで動かす秒数を決めることができるようになります。
image.png

実際に作ったFlowは以下のとおりです。

[{"id":"7e1f4921.de6038","type":"inject","z":"f3932e61.b2911","name":"","topic":"","payload":"{\"duration\":1000}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":60,"wires":[["4f1866f1.bda6f8","6bda8b28.6da214"]]},{"id":"4f1866f1.bda6f8","type":"debug","z":"f3932e61.b2911","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":538,"y":70,"wires":[]},{"id":"6bda8b28.6da214","type":"websocket out","z":"f3932e61.b2911","name":"","server":"6b499733.914c68","client":"","x":560,"y":180,"wires":[]},{"id":"eabb3700.074828","type":"template","z":"f3932e61.b2911","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\"duration\": {{payload}} }","output":"str","x":360,"y":220,"wires":[["6bda8b28.6da214"]]},{"id":"5b241924.4bb128","type":"ui_button","z":"f3932e61.b2911","name":"","group":"872da47e.b58c08","order":1,"width":0,"height":0,"passthru":false,"label":"1 sec","tooltip":"","color":"","bgcolor":"","icon":"","payload":"{\"duration\":1000}","payloadType":"json","topic":"","x":150,"y":120,"wires":[["6bda8b28.6da214"]]},{"id":"61063876.eac8b8","type":"ui_button","z":"f3932e61.b2911","name":"","group":"872da47e.b58c08","order":2,"width":0,"height":0,"passthru":false,"label":"10 sec","tooltip":"","color":"","bgcolor":"","icon":"","payload":"{\"duration\":10000}","payloadType":"json","topic":"","x":150,"y":160,"wires":[["6bda8b28.6da214"]]},{"id":"63f4a4b0.c73f6c","type":"ui_slider","z":"f3932e61.b2911","name":"","label":"slider","tooltip":"","group":"872da47e.b58c08","order":4,"width":0,"height":0,"passthru":true,"outs":"end","topic":"","min":0,"max":"1000","step":1,"x":150,"y":220,"wires":[["eabb3700.074828"]]},{"id":"6b499733.914c68","type":"websocket-listener","z":"","path":"/ws","wholemsg":"false"},{"id":"872da47e.b58c08","type":"ui_group","z":0,"name":"鏡餅カー操作","tab":"49db2715.892e08","disp":true,"width":"6","collapse":false},{"id":"49db2715.892e08","type":"ui_tab","z":0,"name":"ホーム","icon":"dashboard","disabled":false,"hidden":false}]

サーボモーターの制御

ハンズオンの資料にあったDCモーター以外にサーボモーターを追加しています。
モーター周りのコードは以下の通りで、動いている間に鏡餅が動くようにしました。

        dm1 = obniz.wired("DCMotor",{forward:0, back:1});
        dm2 = obniz.wired("DCMotor",{forward:3, back:2});
        sm1 = obniz.wired("ServoMotor",{vcc:5, gnd:6, signal:4});
        ang1 = 90;
        ang2 = 0;
        while (true) {
          await ObnizUI.Util.wait(0);
          if (button.isTouching()) {
            dm2.move(true);
            dm1.move(true);
            if(ang1==180){
              ang2 = 1
            }
            if(ang1 == 0){
              ang2 = 0
            }

            if(ang2 == 0){
              sm1.angle(++ang1);
            }else{
              sm1.angle(--ang1);
            }
          } else {
            dm1.stop();
            dm2.stop();
          }
        }

できたもの

実際に動かした様子を動画にしてあるので御覧ください。
IMB_PFYmrB.gif

Youtube の動画はこちら enebularとobnizで鏡餅を動かしてみた

終わりに

enebularのようなビジュアルプログラミングツールで簡単にプログラムが作れるのに加えて、動くモノ自体を簡単に作ることができるLEGOはとても相性がいいツールだと感じました。
これからも楽しくいろいろなものを作っていこうと思います!

7
1
0

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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?