Arduino Bluetooth チュートリアル|一日でできる

posted in: DIY, Make, Programming, Technology, Tool | 1
はてなブックマーク

電子工作をやりたいけど、どこから初めていいか迷いませんか?
その原因は世の中に多くのツールがあること、外部電源回路やそのスイッチングといった電子回路の基礎についてはあまり詳しく解説されていない事等がハードルを上げていると感じています。

この記事では私の様な電子工作初心者が「何か動作する楽しいもの」を作りながら今後にステップアップしていくための基本をまとめたものです。
普段は省略されがちな材料の揃え方、外部電源回路との接続とその制御法、無線通信等のやり方を詳しく書きました。
ひとまずこの内容をトレースする事で簡単なウェアラブル機器を作ることができると同時に、基礎を体験することができます。

使用する技術はArduino Bluetoothが中心です。
(※Arduino とは一言でいうと簡単にカスタマイズ可能なマイクロコンピュータで、簡単に他のセンサやアクチュエータとつなぐことができます。
より詳しく知りたい方はこちらのTED Talksを御覧ください。)

何が作れるようになるのか。

・ある信号が入力されたとき(今回はキーボードの入力)
・Arduino Uno につながったアクチュエータ(今回はプロペラが)が動作する
・この機器を外部電源とBluetoothにより無線化できる

とりあずここまで出来るようになれば、「Twitter の状況に応じて色が変化する時計」とか、「センサの前を横切るとブザーで教えてくれるアラーム」とか、「誰かが部屋侵入した時にデスノートを隠してくれる仕掛け」・・・等を必要に応じて知識を追加していく事で作れる様になるかと思います。LEDを点滅させるLチカ等よりは難しいですが実際に何か面白いウェアラブル、Internet of Things (IOT)を作るきっかけのチュートリアルとして利用していただければ嬉しいです。

多少長いですがゆっくり読めば初めての方も完成できるような構成になるように意識しました。スタンドアロンのデバイスを作りたい人はぜひ挑戦してみてください。

Arduino Bluetooth で ウェアラブルデバイス を作ろう

前提条件として次のものが必要です。。

  • ググる力|行き詰まる可能性もあります。そんなときはくじけずググりながら推し進める忍耐が必要です。今回はこれさえあれば大丈夫(多分!)。
  • さらにいうなら・・・

  • 電子回路の基礎|
    オームの法則、バイポーラトランジスタ(できれば)あたりの基礎知識があると理解しやすいです。
  • 計測制御基礎|
    シリアル通信について知っているとはまりづらくなります。(ただコピペでとりあえずは突破できると思います。)
  • プログラミング基礎|行き詰まったらドットインストール様のArduino入門の動画をみていただければ問題ないとおもわれます。

用意するもの

用意するものを見て行きましょう。最低限次のものが必要です。(写真をクリックするとAmazonやパーツショップのリンクが見られます)

(電子工作は材料の組み合わせ次第で動作しない可能性があります。本チュートリアルは必ずしも動作保証をするものではございません。自己責任の元、利用をお願い致します。)

また私自身電子工作は初心者なので、作例は必ずしもエレガントなやり方ではないと思われます。もし誤った記述や改善点等があればご指摘いただけると勉強になるので助かります。

  • Arduino Uno ボード
  • デバイスの動作を制御するために必要です。Arduino Uno を使用してみましょう。

    小さくしたい人は下のLilypadを使ってみてください。(配線等が少し大変になります。本チュートリアルではArduino Unoボードでの動作しか確認しておりません。)

  • USBドングル
  • Arduino Uno を無線でつなぐために必要になります。今回は簡単に使用できるSBDBTというシールドを使用します。Amazonにはなかったのでこちらから

    PIC24FJ64GB004 小型マイコン基板 SBDBT – ランニングエレクトロニクス
    SBDBT USBドングル

  • Bluetoothレシーバー
  • 上で紹介したUSBドングルにこちらのBluetoothレシーバーを差し込めば無線で通信できるようになります。

    他の商品でも良いかと思いますが、私は下の商品で動かしました。

    お使いのPCにbluetoothが搭載されていない場合はUSB Bluetoothの変換も買いましょう。

  • モバイルUSBチャージャー
  • 携帯電話用のもので大丈夫です。これはArduino Unoの電源を確保するために必要です。小型のものがおすすめです。

  • ジャンパワイヤ
  • Arduino Unoボードと他のパーツを接続するのに利用します。いちいちハンダ付けするのも面倒なので組み立て検証用にジャンパワイヤを用意しましょう。

    今後本格的に電子工作をしてみたいという方はArduinoのキットを購入すればジャンパワイヤやブレッドボードの様な基本部品はついてきますのでこちらもおすすめです。

  • ファン
  • 風を送る装置を作るのでファンを使います。正直パワーは弱いです。ちなみにこのプロペラをモーターに変えたり、ブザーに変えたりすることで今回の作例は様々なアイディアに置き換えて利用することができます。今回は代表例として下のファンを使います。

  • バッテリー
  • 上のファンは駆動電圧がDC(直流)12Vです。Arduino Unoでは直流5Vまでしか出力できないので電池を使いましょう。トータルで12V以上だせるようにそろえましょう。(詳細は次節)

  • バッテリー接続用ケーブル
  • バッテリーを接続するために必要です。色々なタイプがあるので好きなものを選んで下さい。

    サイズが大きくなってもよいなら単3電池8本で12Vを出力するケースもあります。

  • マルチメーター(テスター)
  • 電流、電圧、抵抗値を測る装置です。これはいわゆるプログラミングでいうデバックをする際に必要になるものなので、持っていなければこの機会に購入しましょう。

  • ブレッドボード
  • これはジャンパワイヤを抜き差しすることでパーツをテスト的につなげることのできるボードです。これも必須なのでそろえましょう。(入門キットで購入している方は不要です。)色々なサイズがありますが、今回はウェアラブルを想定しているので小さめのものを選ぶことをおすすめします。

  • ディスクリート部品少々
  • バッテリーの出力電圧の調整や、スイッチングのために多少電子部品が必要になります。抵抗とバイポーラトランジスタあたりを用意しましょう。

    抵抗は揃えておくと色々と便利です。こちらのキットなどがお勧めです。

    外部電源制御に使うトランジスタ(NPNのバイポーラ)はこちら

  • その他
  • きんちゃく袋や紐、筐体をサポートするように箱小さい箱等があると便利です。キッチン用品類をもちよればなんとかなると思います。

  • あると捗るもの
  • はんだごて、ラジオペンチ、ニッパーなどはあると作業がやりやすいと思います。。

    回路 を組んでみよう

    さてそれでは作りはじめましょう。はじめにファンを回転させる外部電源回路を組みます。

    直流電源 を作ろう

    用意したファンをみてみると12V DC 0.15Aという表記があります。(下写真)

    Fan

    これは直流電圧12Vの、電流150mAで動作する、ということを表しています(これを超える様な電流を加えると壊れてしまうので注意)。Arduino Uno の出力は5Vのため、このままだと動作させることができません。そのため、電池を直列(プラスとマイナスを交互につなぐ)につないで12Vの電源を作ります。9V電池+1.5Vの単3電池を2本つなぐ、または9V電池を2つつないで抵抗を加えて、電圧を下げるということが可能です。

    テスターで測りながら計算してみましょう。ちなみにオームの法則は

    電圧(V) = 電流(A) × 抵抗値(Ω)

    です。また、今回購入したプロペラはどうやら内部抵抗が約700kΩ程度あるようです。(テスターによる計測結果、デバイスの個体差や接触抵抗誤差がある可能性があるので参考程度、実際には今回の様なラフな試作では多少値がずれていても動きます。)

    そのため12V電源を作った場合は、そのままつないで大丈夫です。もし電源電圧が18Vの場合はプロペラと直流電源の間に抵抗を挿入して電圧が12Vになるように調整しましょう。

    計算の仕方を解説します。

    直列回路図

    R2は測定したプロペラの内部抵抗を、R1は挿入する抵抗(未知数)、Vに組み合わせた電源電圧の値を代入します。今回はプロペラに12Vを加えたいのでR2の両端の電圧が12Vになるような条件で計算すればOKです。

    (式1)V = (R1 +R2)×I (Iは電流値)

    (式2)12 = R2 × I

    これで未知数(R1とI)と式がそれぞれ2つなので解くことができます。

    それではブレッドボード上に回路をつないでみましょう。上手くいくとプロペラが回転しはじめるはずです。

    ブレッドボード自体が初めての方は下のリンクをご参照ください。

    ブレッドボード – Wikipedia
    ブレッドボードの使い方が解説してあります。

    外部電源 を 制御 しよう

    プロペラを無事に回転させることができました。しかし、このままでは回転し続けてしまうのでこれを制御する必要があります。

    Arduino Uno の端子から直接コントロールしている場合は簡単なのですが、今回の様に別の電源から駆動させている素子を制御するにはどうすれば良いのでしょうか。

    おそらく色々な手法があるかと思います。私は時間がなかったのでバイポーラトランジスタという素子を使った簡単な回路を構成してみました。

    バイポーラトランジスタとは?

    バイポーラトランジスタは高校の普通科の授業でもあまり触れないため馴染みのない方が多いかと思います。ちゃんと理解するためには大学の電子工学の授業を受ける必要があります。

    しかしとりあえず使うという目的ではあまり心配しなくても大丈夫です。簡単にいうと僅かな電圧(電力)で抵抗を大きく変化させることができる素子と考えて下さい。

    バイポーラトランジスタは3本の足が生えています。NPNトランジスタはの両端間はとても抵抗が高く、12Vではほとんど電流を流しません、そのためNPNトランジスタを取り付けるとプロペラの回転は止まります。しかし真ん中の足にプラスの電圧を加えると両端の抵抗はとたんに下がり、再び電流が流れてプロペラが回転します。この真中に加える電圧はArduino Uno の出力で可能なため、結果としてArduino Unoからプロペラの回転を制御する事ができます。

    Transistor

    トランジスタによるプロペラ回転制御のイメージ

    もしきちんと理解したい場合は入門書として次の本がおすすめです。大学生や社会人でも勉強になるとおもいます。

    より詳しく勉強したければ、こちらの本がおすすめです。4章くらいまで読めばデバイスの基本が分かります。

    デバイスではなく、より実用的な回路を中心に勉強したい方は、こちらがおすすめです。(バイポーラというよりはFETやオペアンプが中心になります。)

    Arduino Uno からプロペラを制御しよう

    Arduino Uno にプログラミング(スケッチと呼ぶ)を書き、プロペラを実際に制御してみましょう。

    Arduino を利用するには下のサイトから統合開発環境IDEをダウンロードする必要があります。

    Arduino – Software
    Arduinoの統合開発環境をインストール

    統合開発環境の詳しいセットアップのやり方は下のサイト様が詳しく解説なさっているのでどうぞご参照ください。

    ArduinoのIDE(統合開発環境)をインストールする方法 | メイキニングブログ
    写真付きでわかりやすくまとめてくださっています。

    Arduino のスケッチ入門

    Arduino のスケッチを書く前に基板を見てみましょう。

    Arduinouno

    この基板の上下に並んでいるジャンパワイヤを挿入できる端子がそれぞれ機能を持っています。今、Arduinoを使用するのはバイポーラトランジスタを制御するためでした。そのためにDigitalと書いてある端子を使います。

    このDigitalの端子はLow(0V)とHigh(5V)の2つの状態を出力することができます。そのためのスケッチを書いてみましょう。

    スケッチを書くためにPCとArduino Uno をUSBケーブルでつなぎましょう。

    Arduino IDEのアプリケーションを起動したら、下の様にプログラムを入力していきます。

    プログラムの中身を読んでみよう

    プログラムの詳細については必要に応じてArduinoの公式サイトをご参照ください。

    中身を順に読んでいきましょう。

    この処理では7番ソケットにdigitalPINという名前をつけています。
    次にプログラミング起動時の初期設定について記載していきます。

    この様に書くことで起動時にvoid setupの中身が読み込まれます。

    はじめにpinModeという関数を用いて先ほど定義したdigitalPIN(大文字小文字に注意)をOUTPUT、つまり出力用のピンとして割り当てる宣言をしています。今後、このプログラムでは7番ピンはデジタル出力用の端子として使われます。

    この部分ではPCとArduino Uno間の通信の設定をしています。Arduino Uno との通信はシリアル通信という方法が用いられています。シリアル通信ではバスと呼ばれるデータを送る道に1度に1ビットずつ逐次的にデータを送ります。9600という数字は通信速度を表しています。単位はbps(Bit Per Second)です。今回は9600を使用しましょう。より詳しい情報はこちらをご参照ください。

    さてこれでArduino Uno のピンの設定とパソコンとの通信方法が決まりました。次はパソコンからArduino Uno を操作して、ファンを自由に動かせるようにしてみましょう。

    残りのプログラムは下の様になっています。順に見て行きましょう。

    起動後はloopという関数が読みこまれます。

    この中に実行したい処理を記載していきます。また//記号を加えることで、その行はプログラムに読み込まれなくなります。プログラミングの内容がわからなくならない様にその都度コメントを残すとよいでしょう。

    PCからの入力を受け取る変数を定義します。今回はkeyinputという名前の整数型の変数を使います。

    またこの変数にシリアルポートからの入力を代入するために、次の1行を加えて下さい。

    続いて、入力されたコマンドに応じて動作を変えるための処理を記載していきます。

    という形で書くことで条件が真(TRUE)のときは最初の{}がFalseの場合はelseの{}が実行されます。今回は入力された値が-1でない場合はそのキーの判定を行います。

    この様に書くことで受け取った変数の値がcaseと一致した場合のみ、breakまでの処理が実行されます。今回は’1’を受け取った時にファンがON、’0’を受け取ったときにOFFになるように書いていきます。

    それぞれのケースをみてみましょう。’1’を受け取った時は

    と書かれています。はじめにシリアルポートに”Fan ON”というメッセージを表示します。これはきちんとif文やSwitch文が動作しているかを確認するためです。この様にすることでバグがプログラミングなのか、回路なのかの判定がよりしやすくなります。

    続いてdigitalWriteという関数を用いてdigitalPINの出力を制御しています。今回はデジタル出力端子であるdigitalPINをHIGHの状態にするという意味になります。

    この信号が送られた結果、バイポーラトランジスタにHIGH(5V)の信号が送られます。その結果、トランジスタ両端間の抵抗値が下がり、電流が流れます。結果としてファンが回り出します。’0’の場合も見てみましょう。

    今度はdigitalPINの出力がLOWになっています。そのため、再びトランジスタの抵抗があがり、電流がとまり、結果としてファンもオフになります。

    いかがでしたでしょうか、それではプログラムの内容を理解した所で実際にファンとバッテリーの回路につないで動作を確認してみましょう。

    Arduino Uno と 回路の接続

    それでは実際につないで回路を作成してみましょう。最初はぜひみないでトライしてみてください。

    この様につなげばOKです。

    電子回路

    ブレッドボード上ではこんな具合です。

    ブレッドボード配線

    Arduino Uno にプログラムを書き込んだら、下の写真のシリアルポートをクリックし、実際に’1′ と’0’の信号を送って動作を確認してみましょう。

    Ide アイコン

    シリアルポート

    ウェアラブル デバイス化しよう

    Bluetooth とモバイルチャージャーによる無線化

    Bluetooth を用いることで、これまでUSBを通して、行ってきたシリアル通信を無線化できます。またUSBはArduino Unoへの電源供給も行ってきたので、これをモバイルチャージャーに変更して無線化します。

    この様にする事で、下の図の様にPCとArduino Uno側が分離した構成になります。

    Arduino Uno

    Bluetooth + USB ドングルの構成

    Bluetooth 接続を行うための構成を見て行きたいと思います。今回仕様するSBDBTは直接ブレッドボード上に配置することができます。このSBDBTは裏面にPICというマイクロコントローラが搭載されており、USBポートにBluetoothレシーバーを指すことでシリアル通信を無線化することが可能です。

    それでは配線を見てみましょう。SBDBT のピンは左下から1-5,右下から6-10の順番で配置されています。

    SBDBTを起動するためにまずは2番に3.3V, 3番にGND(グラウンド/0V)をつなげましょう。続いてBluetoothの信号をやりとりするために、7番にArduinoのRX←0, 8番にTX→1 と書いてあるピンをつなぎましょう。

    Bluetooth SBDBT

    下のサイト様で詳しい説明がされているのでどうぞご参照ください。

    Arduino+BluetoothとMacとで通信してみた – Dazing days
    2番 - 3.3V …

    Arduino Bluetooth 接続の確認

    SBDBT の配線が終わったら、USBドングルにBluetoothレシーバーを差し込みましょう。上手く配線できているとSBDBTの10番ピン付近のLEDをが点滅しているはずです。

    続いてBluetoothの接続を確認しましょう。

    Bluetooth

    状態が接続済みになっていればOKです。

    私の2012年版MacBookAirとPlanexのレシーバーの組み合わせでは、接続はできるのですが一定の時間が立つと接続が途切れてしまうという問題が発生しました。やむなく、Buffalo製のUSB差し込みタイプのBluetoothモジュールを使用することで安定しました。お使いのPCのに合うBluetoothレシーバーを選んでみてください。

    接続ができていることを確認したら、PCのArduino IDEからツール>シリアルポート>dev/tty.SBD・・・・となっているものを選択しましょう。

    そしてシリアルポートを開くと、先ほどのまでの有線接続と同じようにファンを駆動できるはずです。

    もしシリアルポートが上手く開かない場合は一度Arduino Unoの電源を落とし、SBDBTへの接続を外した状態で起動してみてください。

    ウェアラブル を体験してみよう

    ウェアラブル と名前をつけましたが、実はこのHow To自体はウェアラブルデバイスというよりはスタンドアロンで動くArduino機器を作ることを狙っています。ただ、タイトルにウェアラブルとつけてしまった手前、無理やりにでもウェアラブルにしてみたいと思います。

    現在は非常に壊れやすいので無理やりLEGOでフレームをつくりながらセロハンテープ等で固定していきます。

    Odorable2

    風をおくるだけでは力も弱く、つまらないのでファンの下に何か加えても面白いかもしれません。スピーカーを加えれば扇風機のエフェクト、匂いのするハンドクリームをおけば香り拡散器、小さい紙の破片をいれればぷち紙吹雪…..etc.といった具合に組み合わせは自由自在です。

    Odorable3

    とりあえず手元にあった匂いのするハンドクリームをファンの下に仕込んでみました。

    どこに取り付けるか迷いましたが、風を感じやすい顔の近くということで袋にいれてネックレス型にしてみました。せっかくなので絵になりそうな友人にモデルをお願いしました。

    Odorable

    うむ、ださい!(待て)あくまでプロトタイプだから・・・・・

    スイッチをいれてみると….

    ウィーン! ホワワワ! フフッ!

    この続きは君の目で確かめて欲しい(昔の攻略本風)

    Physical Computing の楽しみ方

    Arduino Bluetooth の組み合わせでウェアラブルデバイスを作ってみました。今回は簡単なPCからの入力とファンが回転するというシンプルなアウトプットの組み合わせでしたが、アイディア次第で色々な楽しみ方が可能です。

    例えば、株価と連動してプロペラの回る速度を変更させれば、自らに吹く世間の荒波を文字通り、肌で感じることができます。また今週末はバレンタインデーでしたが、チョコレートというツイートに対応してチョコレートの香りを拡散させるという不思議な体験も味わえます。

    Physical Computing は道具を使う分、最初のハードルは高いかもしれませんが、やはり直接動くモノというのはまた独特の楽しさがあります。この楽しさが次に何かを覚えるモチベーションになれば楽しくスキルアップしていけると改めて感じました。もっとクオリティの高いものを作れる様に遊んでいきたいと思います!

    記事の更新をFacebookでチェック!


    はてなブックマーク

    One Response

    1. Interaction Design Circle
      | 返信

      […] 関連記事:Arduino Uno と Bluetooth でウェアラブルを自作する […]

    Leave a Reply