microbit勉強会 自習テキスト 【その3】
オンやる×サイこみゅ!リアルイベント「サイバー大学生、ゆるっとe運動会やるってよ」ではIT系オンライン大学にちなんで小型ハードウェアmicro:bitを使ってミニ運動会を楽しむ予定です。
こちらの記事ではmicro:bitについて機能や使い方などより理解するため、卒業生(組込屋先生)を中心にコミュニティ内限定で開催している「microbit勉強会」用に作成された”第3弾”自作テキストを書き起こしたものをご紹介していきます!
※まだ、第1弾、第2弾を読んでいない方はぜひこちらを先に、ご覧ください!
第1弾:microbit勉強会 自習テキスト 【その1】
第2弾:microbit勉強会 自習テキスト 【その2】
始めに
どうも組込屋(@yyatsuo)です。
さて、今回は引き続き130モーターをmicro:bitでドライブする方法についてテキスト解説していきます。前回はトランジスタを使ってドライブする方法を学びましたので、今回はリレーを使った方法について解説していきます。
必要なもの
micro:bit
micro:bit GPIO拡張ボード
3V小型リレー
本題の前にちょっと寄り道...
前回すでにお気づきだとは思いますが、モーターはその特性によって回転数が決まっています。
こちらは前回お見せしたFA-130RA-2270というモーターのデータシートです。定格1.5Vをかけたときの最大効率(それがどういう意味なのかは置いておくとして…)では仕様上、6990回転/分ということが読み取れると思います。
とりあえず回ればいい場合は特に気にしなくても良いのですが、もう少し遅くしたいなと思ったときにいちいちその用途にあった特性のモーターを探す旅に出ると人生はすぐに終わりを迎えてしまいます。なんとかmicrobitで回転数を制御することはできないのでしょうか。
モーターに流れる電流か電圧のどちらかを変更することで回転数を変えることができそうだということはなんとなく想像できるかと思います。
つまりmicro:bitのP0端子からトランジスタに流す電流量を制御してやれば良いわけですよね。オームの法則 I=V/R なのでトランジスタに流れ込む電流量を減らすには電圧を下げるか抵抗値を大きくすることで電流量が減らせますね。
さらっと説明してしまいましたけど、ここまではOK?
残念ながら回路の抵抗値をmicro:bitから変更するという方法はありませんので(ないわけではないですが……)P0端子の電圧をなんとかする方向で考えてみたいと思います。
今までにも何度か言及してきましたが、P0端子はデジタル値1で 3.3V を出力します。これはLVTTLレベルという現在主流になっている規格に従っています。3.3V( 厳密には2.0V以上)を Hi (=1)にしましょう。 0V( 厳密に言えば0.8V以下)を Low (=0)にしましょう。というのがLVTTLの決まりになっています。こういった規格に沿って部品が作られているのでメーカーの異なる部品を混ぜても電子回路が成立しているわけです。
ということでデジタル値は 0V か 3.3V と定められているため、P0端子の電圧は直接変更はできません。micro:bitのP0端子から0Vでも3.3Vでもない、2Vとかを出力する方法は無いのでしょうか。
Makecodeを隅々まで見たことがある人は「アナログで出力する」というブロックに見覚えがあるかもしれません。本当にアナログで出力しているわけではないので、このブロックの名称は組込屋としてはモヤっとポイントなのですが、とにかくこのブロックがその解決策となります。
これはPWMという方法で実現しています。
PWMはPulse Width Modulationの略で、日本語だとパルス幅変調といいます。原理としてはすごく単純です。高速でHiとLowを切り替えることにより、時間あたりの平均電圧を下げてあたかもHiとLowの中間電圧を出力しているように見せかけるという方法です。
このグラフのようなものはPWMを視覚的に表現したものです。黒い線の山になっている部分がHiを出力しているところ。谷になっている部分がLowを出力しているところ。赤い線がその結果得られる見かけ上の電圧を表現しています。
画像引用:Mathworks パルス幅変調(PWM)
そんなんでうまくいくのか?と思うかもしれませんが、意外とうまくいくものです。
単位時間あたりのHiの時間の割合を”デューティー比”といいます。たとえばデューティー比が25%であれば 3.3Vの25%、つまり0.825Vが(理論上)出力されます。
単位時間はmicrobitの場合はデフォルトで20ミリ秒(周波数50Hz)に設定されていて、るようです。0が0%、1023が100%です。50%、つまり約1.6Vくらいを出力したい場合は値を512に設定すれば良いわけですね。
これで出力電圧を制御できるようになりました。
寄り道の課題
第1回のLED点灯回路を使ってして輝度が徐々に変化する「電子ホタル」を作ってみよう
第2回のモータードライブ回路使ってモーターの回転速度を変化させてみよう
①リレーを動かす
さて、寄り道はこのくらいにして予告通りリレーの説明に入りたいと思います。リレーとは何か?簡単に言ってしまえば電気で押せるスイッチです。
ディスクリート品(右)もありますが周辺回路とまとめてモジュールになっているもの(左)もあります。
リレーの原理は単純明快。リレーの内部にはコイルと金属板が入っています。リレーに電流が流れるとコイルは磁力を帯びます。そうすると金属板が磁力で引き付けられて通電します。このときにカチっと作動音が聞こえます。まさに「電気で押せるスイッチ」ですね。
リレーの内部構造はかなり原始的です。デジタルだなんだと気取っていても中身はこういった脳筋メソッドだったりします。
画像引用:Omron リレーの基礎知識:基礎編
※これはメカニカルリレーの話。半導体リレーというもうちょっとハイテクなタイプもあります。
回路図記号はコイルの記号と接点記号を組み合わせて描かれることが多いです。たとえばこれは、とある回路図ソフトに収録されていたリレーの記号です。そのままリレーの内部構造を表現していることがわかるかと思います。
余談ですが、車やバイクのウィンカーにはメカニカルリレーが使われています。カチカチという音が出るのはリレーの作動音です。現在では多くの車のウィンカーが電子制御になっていますがわざわざメカニカルリレーっぽい電子音を出しているのが面白いですね。
法的にはウィンカーの作動音に関する決まりは無く、どんな音でも、というか音を出さなくても、問題はありません。
話を戻しましょう。このリレーですがモーター同様、結構な電流が必要になります。そのためやはりGPIOの5mAではドライブできません。ということで今回もトランジスタの力を借りましょう。すでに説明した通りリレーは内部にコイルを使っています。ということは、前回勉強した逆起電力の対策が必要になりますね。
なので回路はほぼ前回と同じような形になります。
実質的には前回の回路のモーターを置き換えただけの手抜きですが、リレーのコイルとトランジスタのコレクタに接続する電源はリレーの駆動電圧に合わせましょう。3V小型リレーの場合は3.3Vを、5V小型リレーの場合は5Vを、12Vリレーの場合は12V電源を繋ぎます。
さて、あとはリレーの先に好きな回路を組めばそれでOKです。
このリレーはC接点とか切替接点とか双投形などと呼ばれるタイプで、通常は閉じた状態の端子と通常は開いた状態の端子がついています。端子のタイプは三種類あって、それぞれ COM、N.C、N.O という名前がついています。
COMが Common。つまり共通端子です。
N.C が Normally Closed。つまり通常状態でONになっているスイッチ端子。
N.O が Normally Opened。つまり通常状態でOFFになっているスイッチ端子です。
今回はP0ポートがHiの時だけスイッチがONになって欲しいので、N.OとCOMに回路を繋ぐことになります。
リレーのスイッチ側に接続する回路はリレーの接点容量(耐電圧と耐電流)よりも小さいものにします。とはいえ、小型リレーでも100V/5Aくらいの接点容量がありますのでモーターを動かす程度であればあまり気にしなくても大丈夫です。
こういう風に表現するとちょっと難しそうに見えるかもしれませんが、リレー先の回路は実質的にはこういう小学生でもわかるような回路です。
これを見ていただければわかると思いますが、リレー先の回路は電気的には分離された別の回路になっているため、リレー先の回路用の電源が別途必要になります。micro:bitの拡張ボードにお誂え向きに5V電源がありましたので今回はそこから拝借することにしました。
それでは回路を組んでいきましょう。ちょうど手元に転がっている適当なリレーを使ってみました。実際に実験してみる人はお手持ちのリレーに合わせて回路を組んでくださいね。
プログラムは前回、前々回のモーターやLEDをドライブしたプログラムと同じものでOKです。
さて、先ほど実質的には別の回路なので別電源が必要になると説明しました。裏を返せば、別電源を使うことができるという意味です。はじめに説明した通り、リレーとは「電気で押せるスイッチ」そのものなのです。
たとえば適切なリレーを選択することで、家庭用100V電源の照明をオンオフさせることも可能ですし、それ以外の家電をリモート制御してホームオートメーションっぽいことなんかもできるようになるわけです。他のセンサーと組み合わせるなどするとアイディア次第で工作の可能性はかなり広がることがわかるかと思います。
お疲れ様でした。リレーの説明は以上でおしまいになります。
カーリングストーンのモーター制御
さて、ここで最初の寄り道の伏線回収です。
カーリングストーンはモーターの回転数をおおざっぱにでも制御したいわけですが、リレーを使ったドライブ方式ではその特性上PWMを使った回転数制御には向きません。
今回カーリングストーンの制作にあたっては様々な事情を考慮した結果 L293D という安価なモータードライバICを採用することになりました。これを使うと回路をコンパクトにまとめることができてPWMによる回転制御も可能になります。
モータードライバICとはモーターを駆動したり制御したりするためのICです。IC(=集積回路)とは、ざっくり言ってしまえばディスクリート部品を組み合わせて使い易いようにひとつのパッケージにまとめた部品で、L293Dの場合、中身はバイポーラトランジスタを組み合わせた回路になっています。
こういった部品を使えばあまり難しいことを知らなくてもそれなりに複雑なものも、簡単な回路で製作することができます。
L293Dをはじめとした様々なICについてのお話は機会があれば勉強会でやりたいと思います。
最後に
ここまでモーターを回すというトピックをネタに長々と説明を続けてきましたが、リレーやトランジスタの知識はモーター以外にもひろく応用できる知識です。
プログラミングで物理世界に干渉できるのがマイコンを使った電子工作の面白いところだと思いますので、学んだ知識でぜひ色々作って遊んでみてください。
オンやる×サイこみゅ!リアルイベント「サイバー大学生、ゆるっとe運動会やるってよ」公式LP ※鋭意製作中