obnizで振動取得 いろいろ

振ったら何かしらの値を送信するIoT機器を作りたくなり、obnizで振動取得系のセンサーをいろいろ試しました。

振動センサーでどんな値が取れるかは確認します。

圧電セラミック振動センサー

圧電セラミックの円盤が、振動を電気に変えます。

圧電セラミックを振ると、ブラウザに映し出されたハートが大きくなるプログラムを書きました。振動の強さを可視化します。

圧電セラミックの振動センサーは、振動の大きさを取得するのに向いてそうです。

ボールスイッチ

振動センサーではないのですが・・・ボールスイッチです。

これを振動取得に使うこともできるはずです。

金の筒の中をボールが動いて、ON-OFFが切り替わります。

表示されている数字は電圧です。
LOW(0.17Vくらい)とHIGH(4.7Vくらい)で切り替わります。

やはりスイッチなので、振動取得には向いていないかも・・・。

特定方向の振動回数をおおざっぱに取得するときは、これでよいかもしれません。

ボールがカチカチ動いて、振っている感じが気持ちいいです。

SW-420振動センサー

振動センサ素子SW-420が使われているそうです。

それが何かは分からないですが、期待できそうです。

obnizに装着。

当たり前ですがボールスイッチに比べ、振動取得に向いています。

LOWとHIGHで切り替わるので、振動の大きさは取得できませんが、振動回数・頻度の取得は可能です。

micro:bitで振動取得してBLE通信

もはや脱線しますが、子供向け学習用マイコン「micro:bit」を使い、振動データをobnizにBLEで送ってみます。

micro:bitはボタン電池でも動くので、obnizより小さいプロダクトを作るときや、長時間稼働するものを作るのときには向いています。

なんだかややっこしい構成となりましたが、micro:bit内臓の加速度センサーで、振動を送ってみましょう。

micro:bitからobnizに振動データ(数字)をBLEで送信して、そこからWi-Fiでクラウドを経由してブラウザにデータを送り、ハートを描画しています。

・・・言葉にすると、よくわかりません。

画像解析で振動を取得

さらに脱線します。

もう、振動取得はobnizを使わず、カメラで動いているものを画像解析すればいいんじゃないか?

ということで、OpenCV+Pythonでうちわの振動を解析して可視化するものを作りました。

うちわの色を抽出した後、前フレームとの差分の面積を取って、バーの高さに置き換えています。

目的と条件に合った振動取得を

振動取得をいろいろ試しましたが、SW-420振動センサーあたりが普通に使えそうです。

仕事で使う場合、電池の問題や、電子部品を買う決裁の問題に直面することもあるので、micro:bitや画像解析での振動取得も強引な技として、参考までに掲載します。

 

鈴・振動モジュール

電子工作でブザーが欲しかったのですが手元にありません。

代用品として、振動モーターと鈴を合体させて、音の出るモジュールを作成することにしました。

「ブザーちょうだい」

子供(小3)が突然、「電池とコードと針金とブザーちょうだい」と、詰め寄ってきました。

そして、謎の電子回路を突き付けられました。

なんだこれは?

とりあえず無駄が多いけど、スイッチでブザーが鳴る回路のようです。

ブザーがない

私が電子工作をしているため、ある程度部品がそろっています。

電池とコード(ジャンパーワイヤー)は家にあり、針金はなくても回路が成り立つので・・・省いちゃいましょう。

しかし、ブザーだけは家にありません。

代用品を求め、電子部品の箱を漁ると、スマホのバイブなどに使われる振動モーターが出てきました。

鈴と振動モーターをくっつけよう

運よく鈴もありました。

振動モーターとくっつけます。

電気を通すと・・・チリン♪と、ちょっとだけ鳴りました。

連続で鳴らすのが難しい。というのも、振動モーターの導線が小さくて、子供には接続が難しいようです。

モジュール化しよう

家に小型のブレッドボードもあったので、ジャンパーワイヤーを簡単に挿して使えるようにモジュール化しようと思います。

これで音の出る「鈴・振動モジュール」の完成です。

スイッチ付き電池ボックスで、回路も完成です。

親の都合で、子供が作ろうとした設計とだいぶ変わってしまったけど、教育上良いのだろうか・・・?

ブザーより優しい音

出来上がった回路のスイッチを入れます。

ブザーより優しく感じる鈴の音が気に入っています。

「鈴・振動モジュール」・・・ブザーの代用品として良いかも。

 

Tello 鏡で真下撮影

Telloで真下を撮影したい。

最も軽く実現する方法は、鏡をつけることです。

ありがたいことに鏡を付けるアイデアと、そのパーツの3Dモデリングデータが共有されいます。素晴らしい社会です。

3Dプリンターでパーツ作成

欲しい品を自宅でプリント。これもまた、すごい時代です。

プリントしたものは少し不格好ですが、機能には支障ないでしょう。

シートの鏡はなかったので購入しました。

接着剤で鏡をくっつけます。

そしてTelloに装着!

試験飛行&撮影

玄関で飛ばしてみます。

鏡が軽量のため、飛行には影響がないようです。

しかし撮影映像は・・・

あれ?鏡が足りなかった?

半分真下、半分前方の映像となりました。

鏡を長く切って付けなおします。

これで、だいたい良さそうです。

空から真下を見降ろそう

初めてTelloを外で飛ばします。

10mまで上昇すると、Telloが小さく見えます。

手元のスマホには、真下の映像が送られてきます。

リアルタイムで見ると面白いけど、ちょっとブレるような・・・。

↓動画(減色したもの)

鏡だから実際の揺れの方向と、映像の揺れの方向が合わなくて、手振れ補正が効かなくなるのだと思います。

惜しい。

真下の撮影を本格的にしたい場合は、もっと値段の高いドローンを買ったほうがよいかもしれません。

Telloに糸をつけて安全飛行

Telloを室内で飛ばし、幾度もの墜落を経験しました。

Telloを人が集まるイベントで使おうと考えていますが、制御不能になるリスクが高く、まだまだ道のりが長そうです。

糸を付ければいいのでは

Telloがどこかに流されても、とっさに戻す確実な手段がありません。

なので、糸を付けることにしました。

家にあった透明な糸を付けます。

糸がついている間抜けなドローンとなりますが、安全第一。

犬を散歩させている気分になります。

しかし、効果は抜群。

壁に向かって流されても、引っ張れば戻ってきます。

初心者や子供に最適

ドローンに糸をつけるのは、初心者の室内練習に最適です。

当たり所が悪いと、ドローンの部品は壊れます。

また、家の中で飛ばしていると、小さい子供がドローンを飛ばしたがることもあるでしょう。そういったとき、糸を付けていれば安心です。

今のところありませんが、糸をプロペラに巻き込まないように注意は必要だと思います。

TelloにM5Cameraを載せる・改

前回、TelloにM5Cameraを載せて飛ばそうとしましたが、重心が前に偏りすぎ、でんぐり返しをしてしまいました。

後ろにレゴを追加します。

バランスがまだ悪いですが、一度飛ぶのか試してみたいです。

飛びました!前に傾きながらも頑張って飛び立ちました。

しかし、フラフラして、1分持たずに墜落。

安定には重心とビジョンセンサー

機体が重くなっていきますが、ブロックを追加して重心を取ったほうが良いです。

あと、飛行中に「ビジョンなんとか・・・」の警告(操縦中に読む余裕ない)がでるのですが、ビジョンセンサーでの飛行位置調整が機能しないのでしょう。

緑単色の床じゃ、飛行位置が分かりません。

目印として、ボールを並べました。
(ちなみに、ボッチャコートを上から中継することが、ドローンを買った目的です。)

右下が、M5Cameraの映像です。

まだフラフラしますが、私の場合、カメラを載せなくても墜落させてしまうので、操縦技術と場所の問題かもしれません。

今度は外で試してみましょう。

TelloにM5Cameraを載せる

ドローンで真下を撮影し、リアルタイムで中継する予定でしたが、Telloのカメラは正面固定で動きません。

仕方ないので軽量なネットワークカメラ「M5Camera」を載せることにしました。

軽量・小型・簡単・安価「M5Camera」

「M5Camera」はプログラミングをしなくても、初期状態でブラウザに映像を配信できるカメラユニットです。

カメラケース左右には穴があり、レゴにくっつけることもできます。

軽量・小型バッテリー「FINGER POW」

「M5Camera」はバッテリー内臓ではないので、小さなモバイルバッテリーをくっつけます。

4つの小型バッテリーを素早く交換できる「FINGER POW」を使います。

カメラとバッテリーを合わせて30g。

Telloならきっと飛べます。

TelloのビジョンセンサーをふさぐのはNG

輪ゴムでTelloの下部にくくりつけて飛ばそうとしたら、ビジョンセンサーをふさいでしまい、明後日の方向にフラフラ飛んで行って墜落しました。

ビジョンセンサーが安定飛行に欠かせないようです。

下はスペース的に無理なので、上からカメラをちょうちんアンコウみたいに付けることにしました。

レゴジョイントは3Dプリント

レゴジョイントがあると、M5Cameraに簡単に接続できそうです。

海外のサイトを調べると、3Dモデリングデータが見つかりました。

さっそく、印刷。

・・・うちの3Dプリンターでは、精度が低くてレゴにうまくハマりません。

少し突起を削り、アロンアルフアで本物のレゴブロックを接着。

これで、レゴマウントTelloとなりました。

子供がレゴで作った何かを乗っけて、遊ぶ道具にもなります。

M5Cameraを載せる

レゴでカメラをTelloに固定します。

真下を撮影できるようになりました。

前が重いけど飛べるかな?

いよいよテークオフ

家族が見守る中、テークオフのカウントダウンが始まりました。

GO!

大笑いでした。

・・・最終的には飛びます(つづく)

ドローンTello 触ると痛い

初のドローン「Tello」を購入しました。

決め手はプログラミングで飛ばせるから。
1万円前半で、200g以下で、安定性が高いといったところも魅力的です。

スマホにアプリをインストールすれば、すぐにラジコンのように操作できます。

飛んだ瞬間、一番最初に感じたのは「うるさい!」です。

たぶん、狭い部屋だと気になりますが、野外や広い場所で、高度が高くなれば気にならないでしょう。

私の操縦がへたくそなので、壁にガンガンぶつけて10回くらい墜落させていますが、壊れません。

意外とタフです。

プログラミングで動かそう

購入目的としては操縦したいはなく、勝手に動いてほしいです。

プログラミングで動かしましょう。

Scratchが簡単そうですが、私の場合は環境が整っていて、すぐ飛ばせそうなPythonを使います。

まずはサンプルとしてtellopyをダウンロードして試します。

examplesの中の「simple_takeoff.py」を実行すると・・・

 

飛びました。

簡単に飛びすぎて心の準備ができていませんでした。

やはり、音が大きいのでびっくりします。

・・・さて、飛んだけど、どうやって降ろすんだろう?

(後で分かりましたが、10秒程度で着陸するプログラムでした。ただこの時は、機体が流され、着陸できる場所を見失い、飛び続けています。)

とりあえず手でつかんで、電源を落とそう・・・

触るな危険!

telloを手でつかんで戻そうとしたら、バチッ!

プロペラが指に当たって痛い!

トイドローンだからって甘く見るとケガします。

電池切れになって降りるのを待つことにしました。

 

ドローンが危険なものという認識ができたのは、幸運なことです。

安全第一でTelloを使っていきます。

心拍センサーを破壊

JavaScriptで簡単に扱えるIoT開発ボード「Obniz」。これに心拍センサーをつないで、リアルタイムで心拍数を計測したいと思います。

Obnizのパーツライブラリにやり方が書いてあるので、コードや必要パーツはこちらを参考にしてください。

ここでは、心拍センサーでの失敗を記録します。

よく見る心拍センサーは使えない?

ハートマークがついた心拍センサーは、数百円で手に入ります。

これが使えたらよいな・・・ということで、Obnizにつなぎ、アナログ入力値を取ってみました。

・・・どう加工して良いか分からない。

即、あきらめました。

GROVE – 心拍センサを使う

Obniz公式のパーツライブラリに従い、スイッチサイエンスで扱っている「GROVE – 心拍センサ」を使うことにします。

心拍センサーがちょっと大きく、GROVEシステム(簡単にさせるジャック)がObnizでは邪魔だったりするのが、少し残念です。

なお、心拍を測りたくなるような激しい動きを想定し、モバイルバッテリーが抜けないよう、テープで固定しています。(雑ですが・・・)

心拍を測るには、クリップを指か耳たぶにはさみます。

運動をするのなら、耳のほうが邪魔にならないでしょう。

これで、心拍数が3秒ごとに受信できるようになります。

激しい動きで動作確認

私の平常時の心拍数は70くらいのようです。違和感ない値を受信できます。

心拍数を上げてテストしたいところですが、激しい運動は大変なので、子どもにお願いします。

ブラウザに心拍数を可視化するハートを描画して、それをサンドバッグにプロジェクターで投影しました。

殴っている間に心拍数は上がっていくでしょう。

心拍数が上がっていきます。正常です。

可視化して、運動のモチベーションが上がると良いですね。

心拍センサーが壊れた!

運動しているうちに配線が抜け、差し直したら・・・

心拍数706!?ハートがけいれんを起こしました。

そして・・・

ち~ん。

心停止しました。

どうも、心拍センサーを+-逆につないでしまったようです。

心拍センサーが死ぬ瞬間を可視化できました。

3Dプリンターで おもちゃ修理

息子(四男)の木製バイクが壊れていました。

クリスマスに買ったおもちゃですが、部品が足りず、修理できません。

たった一つの部品のために捨てるのも悲しいので、3Dプリンターで部品を出力することにします。

足りない部品は・・・

こんな形状です。

モデリングが簡単な形状で助かります。

何回か失敗しましたが、印刷完了。

欠損部分にはめて・・・

無事、乗れるようになりました。

家庭で修理の幅が広がる

欠損部品の生成は、3Dプリンターの有効な使い方の一つだと思います。

家庭で修理できる幅が広がるため、モノを長く大切に使えます。

ただ、親が修理してしまうと、子供がモノを大切しなくなるかもしれません。

壊れて捨てる悲しみから、学ぶものもあったり・・・。

Lambdaからobnizを動かす

前回に引き続き、obnizについて。

近頃、Alexaスキルとobnizを連携させたいと、考えるようになりました。

Alexaスキル →  Lambdaという流れは一度やったことがあるので、Lambda → obnizができれば、大枠はできると思います。

obniz公式サイトにLambdaとつなげる説明があるので参考とします。

zipがアップロードできない!

丁寧な説明が書いてあるので、主に私がつまづいたところのみ記載します。

で、ダウンロードしたファイルが重すぎて、Lambdaにzipファイルとしてアップロードするときにエラーが出ました。

手っ取り早いのが、13.6MBあるobnizのドキュメント及び画像ファイルを削除してしまうことかと思います。

/node_modules/obniz/doc

このディレクトリごと削除で、アップロードできました。

Alexa → Lambda → obniz

Alexaに話しかけ、Lambdaを経由してobnizのLEDをチカチカさせることはできました。

しかし、obnizのコードと、Alexaスキルのコードを両立させることができず・・・Alexaと対話ができなくなってしまいました。

原因調査中。