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

2018年5月2日水曜日

Arduino の使い方(初心者向け)2018年版

Arduino 互換ボードを買ったので自分用の初心者向け基礎知識な備忘録。
いつものごとく間違っていることも自信満々に書いてるぞ☆
[書き始め2018年5月/飽きるまで随時更新]

以下、Arduino UNO 互換ボードと NANO 互換ボードでの話だよ。
Arduino は、いろいろな種類があって特にハード面ではかなり異なるので、しっかり確認してから使う。(電源とか)

Arduino とは?

マイコンの動作に必要なものをボードにまとめたもの。
つまりマイコンを簡単に使えるようにしたもの。
Arduino の種類によって乗っているマイコンが異なり、当然仕様や機能なども変わってくる。
ハード自体がオープンソースなので、色々と派生したり亜種があったりする。

ちな、Raspberry Pi とは違って OS はない。

スケッチ?

プログラムのこと。

便利なサイト

Web Editor とかある。

Tinkercad Circuits

ブレッドボード図(回路図)作成から、シミュレーション、スケッチ作成までできるちょっと凄すぎる Web サービス。
Fritzing ほど部品はないけど、基本的なものは揃っているし、なによりシミュレーションできるのが助かりすぎる!
提供元は 3DCG ソフトウェアで有名な Autodesk 。要 Chrome か Firefox。

Circuit Simulator Applet
Webブラウザ上で動く回路シミュレータ。
ちょっと癖のある使い勝手だけど、ショートカットキーを覚えるとすごく早く回路が組める。
Arduino に繋ぐ回路のテストに便利。

開発環境(IDE)

やっぱ今どきは Web IDE っしょ。
Arduino Create
互換ボードでもOK。
【要確認】Arduino 以外のマイコンは、Libraries で検索して Favorites からzipダウンロードして Custom に上げれば使えるっぽい?

電源

電源スイッチはない。PC じゃないから電ブチOK。

UNO

動作電圧:5V
DCジャックの入力電圧(推奨):7-12V

給電は USB から DCジャックから VIN ピンからのいずれか。
ただし VIN は直でマイコンにつながっているので、5V 以外繋いだらイカン。(5.5V くらいまでらしいよ)

NANO

動作電圧:5V
VIN の入力電圧(推奨):7-12V

給電は USB から VIN から 5V ピンからのいずれか。
UNO とは異なり VIN はレギュレータに繋がっているので、7~12V を繋げられる。
また、5V ピンからも給電できるが、これは安定した 5V を繋げる必要がある。

(アナログ・デジタル)I/O ピン

I / Oピンあたりの扱える推奨DC電流は 20mA まで。
いくつかのピンをまとめて出力 150mA 入力 100mA の制限もあるけど、1ピン 20mA を制限としていれば問題ない。はず。(さすがに 10 本のピンで 20mA 出したら壊れるそうです;)

5Vピンは200mA。
3.3Vピンは50mA。

PWM 出力ができるのは、UNO の場合はボードに~が描かれているピンのみ。
NANO の場合は D3,D5,D6,D9,D10,D11 ピンが対応。
アナログ出力(PWM)のためにデジタルピンを使うという点がややこい。

13番のピン

13番は内蔵 LED と連動している。
プログラムの定数「LED_BUILTIN」がこれ。

UNO と NANO のマイコン

ATmega328P
スケッチ済みのマイコンを Arduino から取り外してブレッドボード上で動作させるなんてことも可能。
まぁ互換ボードは殆どマイコン取り外せないけどなw
よく商品説明とか名称に「SMD」とか書いてあるけど、それは表面実装(Surface Mount Device)されてるから(結果的に)マイコン取れないぞってことらしいよ。

マイコンのタイマー

割り込みとは?

SPI、I2Cとは?

どちらもシリアル通信の規格。
マスター(親機・Arduinoなど)とスレーブ(子機・センサーなど)の通信に利用される。
SPI は線が多くなるけど比較的高速に通信できる。
I2C は線は少なくて済むけど比較的低速な通信になる、といった違いがある。
どちらも複数のデバイスを接続できる。
デバイスの電源電圧に注意。

2018年1月26日金曜日

Raspberry Pi の純正カメラモジュール(v2)を Motion で利用する方法

そもそも Motion の公式ドキュメントにやり方は書いてあります。

https://motion-project.github.io/motion_config.html#Basic_Setup_PiCam

Motion で純正カメラモジュール(Piカメラ Official V2)を利用したい場合は

sudo apt-get install motion

で Motion をインストールした後

sudo modprobe bcm2835-v4l2

で bcm2835-v4l2 モジュールをインストールすればOK。

もちろん「Raspberry Pi の設定」で「インターフェイス」の「カメラ」は有効にしておきましょう。

引き続き raspistill コマンドなんかも Motion が動いていないときであれば利用できます。

motion の設定方法や使い方も、まずは公式ドキュメントをご覧になることをおすすめします。

https://motion-project.github.io/motion_guide.html

ブラウザ上で確認しながら設定変更する方法なんかもあります。(ちょっと野暮ったいですが…)

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 と通信する方法は勉強中(むずい。特に親機(?)側が)