ラベル micro:bit の投稿を表示しています。 すべての投稿を表示
ラベル micro:bit の投稿を表示しています。 すべての投稿を表示

2018年1月5日金曜日

Microbit の稼働時間(ミリ秒)があんまり正確ではない問題

Microbit で時計やタイマーやストップウォッチを作ってみたくなるのは誰しもが通る道かと思いますが、いざ「稼働時間(ミリ秒)」や「一時停止(ミリ秒)」を使ってやってみると、全然正確ではないことがわかります。

まず試しに、このような3分タイマーを作ってみました。
タイマー開始と終了時にニャンキャットが流れます。
エディターでみる
シミュレーター上では特に問題ないのですが、実機で動かして実際のストップウォッチで計ってみると、だいたい3分1秒くらいで音がなります。
これを10分にしてみると、だいたい10分3秒くらいに音がなりました。
どうやら1分間で約0.3秒ほど遅れるようです。

まぁ数秒のズレならまだ良いのですが、そもそも私は1時間毎にお知らせするタイマーを作りたかったので、これでは1時間18秒毎にお知らせするタイマーになってしまいます。
(2時間後には36秒もズレるわけです)

ただ、何度試しても結果が大きく変わることはなかったので、ある程度正確に「遅れている」ようです。
つまりこの遅れ分、早めてあげればもう少し精度が上げられそうです。

ということで、60 - 0.3 = 59.7 = 59700ミリ秒を1分としてカウントするタイマーを作ってみました。
エディターでみる
上記のとは変数「分」の使い方が変わっている点に注意w

今度は開始は「ピコーン!」でアラームを「ニャンキャット」にしました。
また、簡素化のためグラフ表示は無しw

これで3分程度ならば、気にならないレベルになりました。

しかし、1時間で試してみたところ、まだ数秒ズレが発生してしまいます。
しかも困ったことに試す度に微妙に結果が異なるようになってしまいました。
流石にこのレベルになると、電源や気温、個体差などによって変化してしまうのかもしれません。

私の環境では、59690ミリ秒を1分とすることで、1時間あたりの誤差を1秒以下にすることができました。
そのあたりは環境に合わせ、みなさん調整してみてください。

おしまい。

2017年12月20日水曜日

microbit にネジをつけると色々捗る

micro:bit の大きな GPIO 端子にはバナナクリップやワニクリップを繋ぐことができますが、何度もガシガシしてると傷ついてしまいそうで心配になります。
そこで、Kitronik の電源ボードを参考に、GPIO 端子にネジ(ボルト)を付けてみたところ、すごく便利だったので記事にしてみました。

なお、この記事は microbit Advent Calendar 2017 の21日に参加しています。

作り方

まず、以下のものを用意します。
※写真のスペーサーは 10mm です;
  • 皿ネジ×5個:サイズ M3、長さ 5mm
  • スペーサー(オネジ・メネジ)×5個:サイズ M3、長さ 5mm
  • ナット×5個:サイズ M3
通電させたいので、いずれも素材は黄銅(真鍮)、メッキはニッケルのものが良いです。
ネジは皿です。なべネジだと隣接する端子に接触してしまう恐れがあります。
画像内の「お菓子の箱の紙」は絶縁用に用意したものですが、お金に余裕のある人は素直に絶縁ワッシャーを用意すべきだと思います。(でも後記の理由により要らないかも)

で、それらをこんな感じに取り付けます。
※しつこいようですがこのスペーサーは 10mm です;
ネジ・micro:bit・絶縁体・スペーサー・ナット、という順番です。
ちなみに、こちらの記事によると micro:bit の裏側の GPIO 端子(っぽいもの)はどこにも繋がっていないらしいので、そもそも絶縁する必要もないかもしれません…未確認ですが…(^o^;)

さて、これらを取り付けるだけで、なんと micro:bit が!
※既にご承知の通り 10mm です
立ちます!(爆)

LED も見やすくなるし、操作もしやすくなるので個人的にはこれだけでもやる価値はあると思います。まじで。
ただし、うっかり鉄板などの上に置くとショートするのでご注意くださいw
ちなみに写真のように 10mm のスペーサーを利用すると、より安定します(>▽<)b

そして当初の目的通り、心置きなくワニれます。
ネジ山は気にしない派
さらにナットで足を挟めば……
足はかぎ状にすると良い
ブレッドボードに刺せれて、これまた便利!
しかも立つ!
さらにさらに、ユニバーサル基板をなんやかんやすることでオリジナルの電源ボードなんかも付けることができます!ヽ(=´▽`=)ノ
せっかくなので圧電サウンダとブザーとLEDも付けた
コンパクトかつコードレスなので持ち運びやすくなって、超絶便利です。
こういった使い方をする場合、スペーサーの長さを 5mm にすることがポイントです。
皆さんお待ちかね 5mm の写真です
写真では私の無計画な半田付けがそれを台無しにしていますが、5mm スペーサーだと基盤がうまいこと電源用コネクターに乗っかって、安定することが分かるかと思います。

このオリジナル電源ボードの作り方も、いつか記事にしたいと思います。

おわりに…

ネジとかナットってホームセンターとかだと100個単位とかでしか売ってなくて全然安くないし、そもそも鉄ユニクロとかしかなかったりするので、電子部品屋さんで買ったほうが良かったりしますよねー。

初めてアキバの西川電子部品さんで買ったんですが、「全部で60円!」とか言われたときはなんか申し訳ない気持ちになりましたw

おしまい!

2017年12月4日月曜日

microbit で温度計(音とアニメーション付き)

micro:bit(マイクロビット) のJavaScript ブロックエティターで、音とアニメーション付き温度計を作ってみました。
簡単なスクリプトなのに、意外と覚えることが多かったので解説します。

ソースはこちら


まず、「ずっと」ブロック内で「LEDに表示」を使いアニメーションをさせています。
コードエディターであれば「basic.showAnimation()」を利用することができますが、ブロックは用意されていないので、このような方法を用いました。
なお、「LEDに表示」のインターバルは 400ms です。(400ミリ秒後に次のブロックへ処理が進みます)

そしてアニメーション後に「表示を消す」をおこなっています。
これをしないと、アニメーション最後の表示が、その後に実行される「文字列を表示」のスクロールに巻き込まれてしまいます。

「音を鳴らす」で音も出るようにしてみました。
これによりずっとビッビッ言うウザい温度計になりますw
なお、この音を聞くにはイヤホンなどを、端子0番と GND 端子に接続する必要があります。
私はワニクリップで本体が傷つかないようにネジを通して繋いでいます。
つなぎ方はシミュレーションを参考にしてください。
ただし結構大きな音なので、耳には付けないほうが良いです。

最後に温度を表示するように記述していますが、ポイントは「数を表示」ではなく「文字列を表示」を使っていることです。
温度の数字だけであれば「数を表示」で良いのですが、温度に単位(℃)として "C" を付けたかったので、数字 + "C" をして文字列化しているためです。

また、こっそり温度を -3 していますが、これはそもそも micro:bit が返す温度は micro:bit の CPU の温度なため、周辺の温度より少し高い数値が返されるからです。
そのため少し減らして、つじつまを合わせているのです;
必ずしも -3℃ することで正しい温度が取得できるわけではありませんが、私の生活環境下では概ね許容できる誤差で温度を表示してくれました。(^_^;)

おしまい

2017年11月26日日曜日

microbit の使い方などのまとめ

micro:bit(マイクロビット)を実際に使ってみて書いている備忘録です。
随時更新中です。

WEBサイト

電源の入れ方・電力供給方法

以下のいずれかで電源が入ります。
  • PC と USB(マイクロB)ケーブルで繋ぐ
  • 電源用コネクタと単4電池2本(1.5v × 2 = 3v)を繋ぐ
  • 3V 端子と GND 端子を利用して 3V の電源を供給する
  • 裏面の給電パッドへ直接つなぐ
https://www.kitronik.co.uk/blog/powering-your-bbc-microbit/

電源の切り方

文字通り電源を切るw(電池を抜くなど)
電源スイッチなどというものは存在しない!
PC じゃないから電ブチしていいみたい。

初めて電源を入れた時

予めちょっとしたプログラムが入っていて、それが実行されます。
  1. ハロー!
  2. Aボタンを押せ
  3. Bボタンを押せ
  4. シェイクしろ
  5. 傾けてドットを合わせろ
  6. グレイト!
  7. さぁコーディングしようぜ!
という流れのプログラムです。

リセット方法

裏側のボタンをぽちぃー
するとプログラムが最初から実行されます。

MICROBIT ドライブとして認識されない!

百均などの充電専用USBケーブルでは、電力供給はできるけど、ドライブとしては認識されないので注意。
ちゃんとデータ送受信が可能なケーブルを使いましょう。

Javascript と Python の違い

機能的な話ね。
Javascript でしかできないこと
  • LED に当たる光の明るさを取得
  • Bluetooth の利用
Python でしかできないこと
  • Speech モジュールの利用
  • 浮動小数点値の利用
他にもあるかも。

Javascript エディターで気をつけること

どうやら正確には TypeScript らしい。
  • 1/5 も 4/5 も 0 が返される。(切り捨て)
  • 色々と使えないメソッドがある。(Math.ceil とか Array.slice() などなど)
    基本的にブロックが用意されていないものは使えない。
    コードエディタであれば複合代入演算子(+=とか)は使えるけど、ブロックエディタには戻れなくなる。
  • 配列のすべての要素は同じ型じゃないとダメ。
  • シミュレーターは必ずしも正確ではない。
    例えば「数を表示」ブロックを繰り返すと、数字が連続して表示されるが、実機では1画面分区切られて表示される。

PCとシリアル通信

USB ケーブルでシリアル通信ができます。

Windows ではドライバをインストールする必要があるみたい。
micro:bit 挿しても未インストール時はこうでした。
インストールしたらこうなって COM3 として使えるようになりました。
なお、ドライバーをインストールする時に micro:bit が挿さってると怒られるので抜いとくこと。
古いドキュメントへ飛ばされたり 404 へ飛ばされたりするかもしれないけど、最終的に arm MBED のサイトから「mbedWinSerial_16466.exe」をダウンロードできれば正解と思われ。(MBED ってのは micro:bit の兄貴分みたいなやつらしい)
投稿時点ではこれが最新のページかな?

ボーレートは115200。
デバッグの為であればシリアル通信ができるフリーソフトなどを利用しましょう。
プログラムから利用したい場合は、
  • Python なら pyserial
  • Node.js なら Node-Serialport
  • Node-RED なら serial ノード
あたりを利用すると良いのではないでしょうか。しらんけど。

3V 端子から供給できる最大電流

公式サイトの安全のアドバイスからリンクされている虎の巻(PDF)では 100mA までと書かれている。

micro:bitの電源供給について
上記サイトでは 90mA まで、とのこと。

端子に使えるネジ(ボルト)やナットの種類

ネジって素材とかメッキとかアホみたいに種類があるので間違えて絶縁ネジとか買ってしまわないように注意。
  • 形:皿ネジ
  • サイズ:M3(長さはご自由に)
  • メッキ:ニッケル、クロメート(ユニクロ)
  • 素材:銅(黄銅、真鍮)、アルミ
より詳しい記事を書きました。

Bluetooth で接続

AとBボタンを押しながら、リセットボタンを押すとペアリングモードになる。

micro:bitモバイルアプリの使い方

iPhone のブラウザでコーディングして、micro:bit のアプリで micro:bit へ送信できました。
Bluetooth を利用して micro:bit と通信する方法は勉強中(むずい。特に親機(?)側が)