8
3

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 1 year has passed since last update.

obnizAdvent Calendar 2020

Day 10

よくある居合斬りシステムをobnizで作ってみた【KATANACTION】

Last updated at Posted at 2020-12-09

はじめに

居合斬りでよくこんなシーンないですか?
image01.png
image02.png
image03.png

そして大抵3枚目では 鞘にカタナを戻した ときに倒れると思います。

そう!!それを作りました!!
ずばり 抜刀して納刀したあとに対象物が切断される システムです!

どうですか?無駄でしょ?

これをMaker Faire Tokyo 2020のkintoneブースとして展示しました。
(obnizの 開催レポート でも紹介してもらいました!)

海外ではネタとして使われている!?

意外とこの仕組、海外でも人気の様子。

https://ifunny.co/video/zfiiOixU7
https://ifunny.co/video/absolutely-no-one-anime-swordsman-hCOFn5037

真面目な顔がよりくすっとなりますね〜

作ったもの

この時間差が大事なんですよ。
子供にはぜんぜん受けませんでしたが、大人にはくすりと笑ってもらえましたw

最近の100均はあなどれないですね〜
まさにIoTでつかってくれと言わんばかりの商品が売ってました!

まぁ200円でしたがwww

刀身にLEDが内蔵されていて、電池を入れると光る!

中身気になるのでとりあえずバラしますよね。中はこんな感じでした。

うん、ここにM5StickC(Obniz OS)が仕込めそうってことでなんとなく構成が決まりました。

仕組み

刀の抜刀納刀をどうobnizで認識するのかですが、ちょうど手元に 磁気接触センサー があったのでこれを使いました。
刀身に磁気センサーを埋め込み、鞘に磁石をセット。刀を抜き差しすると磁気センサーが反応する。(仕組みはボタンと同じ)

こうやって配置すると、刀を抜く → 接触が離れる → 刀を戻す → 接触される となり、納刀までが判断できます。
(接触しているときはONです。ボタンを押している時と同じですね)

後はobniz側でカウントアップして2回になったら納刀と判断して処理をすすめる、って感じです。

切断される対象

どうやって切断するのか これも結構考えるのが大変でした。
納刀したら切断されるってことはデフォルトはくっついていないといけないですし、納刀に合わせて切断されないといけないです。
そして刀側をobniz使うのでこちらもobniz使いたい。。。

ふと、どこかのハッカソンでソレノイド使っているのを思い出し、あ、ソレノイドで飛ばせばいいのか と閃きました (感謝)

でAmazonで購入したのがこちら
スクリーンショット 2020-12-09 19.07.50.png

家に届いて気づきました。 これ飛び出るやつじゃない!!!!!
そう。ソレノイドはプッシュ式とプル式があるらしい。どうやらプル式のやつを買ってしまったようでした。。
→ いわゆる電磁石ってやつです。電源を入れると磁石がONになり、電源を切るとOFFになる(磁力がなくなる)

ただ、本来のくっつくを考えるとこれでもいいか、ってことでそのままこれを使いました。適当ですね。

なんかのゲームに出てきそうな見た目してますが気にしないでくださいw

頭側にはネジが埋め込んであり、それが磁力でくっつく感じです。
ボディは100均のゴミ箱です。この中にobnizがあります。

仕組み

プルソレノイドについてはLEDと同じ処理が使えました。LEDをONにする=ソレノイドをONにする→磁力が発生 って感じ。
たぶん 「obniz プルソレノイド」 とかで検索してもやり方は出てこないと思います。
でも普通のプッシュソレノイドだとサンプルあるのでそれを参考にしました。

obnizプログラム

作ったコードはこちら。obniz部分だけです。画面周りはお好きに!


const obnizStick = new Obniz.M5StickC('XXXX-XXXX');
const obniz = new Obniz('XXXX-XXXX');

let count = 0;
obniz.onconnect = () => {
  const obnizSolenoid = obniz.wired('LED', {anode: 0, cathode: 1});
  obnizSolenoid.on();

  obnizStick.onconnect = () => {
    const obnizButton = obnizStick.wired('Button', {signal: 26, pull: '3v'});
    obnizButton.onchange = state => {
      if (state) count++;
      if (count >= 2) {
        // ブラウザ上でゴニョゴニョ

        setTimeout(() => {
          obnizSolenoid.off();
        }, 1500);
      }
    };
  };
};

1.5秒後に切断されるってのが大事。この0.5秒が大事w

余談

ちなみにですが、11月11日~13日まで幕張メッセでCybozu Daysというサイボウズの一大イベントがあり、
そこでブースとしてこの仕組みを使ったゲームを披露しました!!

めっちゃブースにお金かかってる~~~
(中身の仕組みはほとんど同じなので、これ自体のコストはこの記事読めば察してくれるはずw)

「画面上に敵が出てから、抜刀→納刀が早かった方の勝ち」 という2人対戦ゲームになりました。
ちなみに反応速度データの格納にkintone使ってます。あと敵が出てくる画面も。

フロント画面があってJSからデータ操作ができるWebDBのkintoneと、
マイコン操作がJSからできるobnizはめっちゃ相性が良いです!!

おわりに

最後ついつい本職が出てしまいましたが、obnizはさくっとハードがいじれるので便利!
特にWeb人間にはほぼ敷居なく使えるので最高!

これからも obnizエバンジェリスト(仮) としていろいろ活用していきます!!

それでは!≧(+・` ཀ・´)≦

8
3
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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?