今回の講義の目標は、LEDを光らせることです。電子回路がどういうものかのかを体感してみましょう。
目次
- 2.1 電子回路
- 2.2 デバイス
- 2.3 LED
- 2.4 実習
2.1 電子回路
この講義では、マイコンボードを中心にした電子回路(electronic circuit)を作っていきます。電子回路とは何か、ということはあまり難しく考えないことにしましょう。ここでは、様々な電子部品を電線で結んだものとしておきます。当然、電気を流します。
もう少し正確に言うと、電子部品に電圧をかけて電流を流すということになります。電子部品は、電流が流れて初めて仕事をしてくれます。小学校の時に、豆電球を光らせる実験をしたことと思います。あれです。電流はプラス極からマイナス極に流れます。電線をうまくつなぐことで、電子回路を作ります。
電圧と電流
電圧の強さは、ボルト(V)という単位で表します。電流の量は、アンペア(A)という単位で表します。一般的に、電圧を強くすればするほど、電流は多く流れます。1.5Vの電池1つで豆電球を光らせるより、2つの電池を直列につないで3Vにした方が、豆電球は明るく光るのでしたよね。
しかし、電流を阻害するものがあります。それが抵抗です。プラスとマイナスの間に繋がれた抵抗が大きくなればなるほど、流れる電流は少なくなります。抵抗の大きさは、オーム(Ω)という単位で表します。
電圧と電流と抵抗の間には、有名なオームの法則という関係が成り立っています。電圧をE、電流をI、抵抗をRで表した時、以下の関係が成り立っています。
E = R×I
これは式の変形を行うと、以下のようにも表せます。
I = E/R
多くの場合、電圧は決まっていて抵抗を使って電流を制御することになるので、I = E/Rの方が直感的に理解しやすいですね。つまり、抵抗R(分母)を大きくすればするほど、電流Iは小さくなります。
では、逆にRをどんどん小さくしていくと、どんなことが起こるのでしょうか。Rが0に近づくと、Iは無限大に近づいていきます。電池のプラス極とマイナス極を電線で直接結ぶと、ちょうどこのような状況になります。電線自体にもわずかながら抵抗はあるのですが、とても小さいです。このような時、回路は短絡している、あるいはショートしているといいます。ショートすると大量の電流が電子回路に流れ、電子部品は破壊され、電池は熱を発して最悪の場合発火したり爆発したりします。特にリチウムイオン充電池を使っている場合には非常に危険です。
回路は絶対にショートさせてはいけません!
ショートさせないためには、適切な場所に適切な大きさの抵抗を入れる必要があります。
直列回路と並列回路
回路には、直列回路(serial circuit)と並列回路(parallel circuit)があります。豆電球の例で考えましょう。豆電球を直列につなぐとは、以下のようにすることです。
豆電球は、光を発する抵抗だと考えましょう。よって、回路はショートしていません。
並列につなぐとは、以下のようにすることです。
豆電球を直列でつなぐのと、並列でつなぐのとでは、どのような違いがあったか思い出しましょう。
- 直列につなぐと、豆電球を1つだけつないだ時よりも暗く光ります。
- 並列の場合のそれぞれの豆電球の明るさは、1つだけの時と明るさが変わりません。
- 電池の持ちは、直列の場合には豆電球を1つだけつないだ時よりも長持ちし、並列の場合には早く無くなってしまいます。
2つの抵抗を直列につないだ場合、全体の抵抗値は2つの抵抗値の合計になります。豆電球の場合も同じで、1つつなぐよりも2つつないだ方が、より抵抗が大きくなります。抵抗が大きいのですから、オームの法則から計算できるように、回路全体を流れる電流は小さくなります。よって、豆電球は弱く光ります。同じ豆電球を2つ直列につないだ場合、それぞれの豆電球にかかる電圧は、電池の電圧の1/2となります。
2つの抵抗を並列につないだ場合は、少し複雑です。まず、電圧から考えます。並列回路の場合には、2つの豆電球それぞれにかかる電圧は等しくなります。この場合では、電源の電圧と、2つの豆電球それぞれにかかる電圧は同じです。つまり、局所的に見ると、豆電球1つを1つの電池につないだ時と同じ電圧・電流が、それぞれの豆電球に与えらえることとなります。よって、明るさは1つの時と2つの時で変わりません。
今度は、回路全体の抵抗を考えます。2つの豆電球の抵抗値を、それぞれR1、R2と呼ぶことにしましょう。並列に繋いだ部分全体の抵抗値をRとします。
この時、RとR1、R2の間には以下のような関係が成り立ちます。
1/R = 1/R1 + 1/R2
今、R1とR2がそれぞれ200Ωだったとしましょう。すると1/R = 2/200となり、Rは100Ωだということが分かります。 1つの豆電球を繋いだ時の抵抗値が200Ωに対して、2つの豆電球を並列に繋いだ時の抵抗値が100Ωになるということです。何だか不思議ですね。その結果、回路全体に流れる電流は、豆電球1つの場合よりも2つの場合の方が多くなります。結果、電池の減りが早くなります。
まとめると、以下のようになります。
- 直列回路
- 全体の抵抗値は、それぞれの抵抗値の和
- それぞれの抵抗に対してかかる電圧の和が、電源の電圧と等しい
- 回路を流れる電流は、どの場所でも等しい
- 並列回路
- 全体の抵抗値は、ちょっと面倒くさい計算が必要
- それぞれの抵抗に対してかかる電圧は、電源の電圧と等しい
- それぞれの抵抗に流れる電流の和が、回路全体を流れる電流と等しい
2.2 デバイス
これから使う電子部品に、どんなものがあるのか紹介します。この講義では、主に1つの部品が数円から200円程度のものを使います。まるで駄菓子のような値段です。「駄菓子コンピューティング」と呼ぶことにしましょう。
電源
電源(power source)とは、電気を供給してくれるものです。
- 電池: 日常的に良く使うのは、単3や単4等の乾電池ですね。これらは1.5Vです。ただし、充電式のもの(エネループなど)は1.2Vなので注意しましょう。その他、四角い形をした9Vの乾電池や、コインのような形をしたボタン電池があります。ボタン電池は3Vのものが多いです。
- USB: USBからは5Vが取れます。
- 充電池: リチウムイオンやリチウムポリマー、ニッケル水素など、色々なタイプがあります。しかし、この講義では、エネループとモバイルバッテリー以外のものを使ってはいけません。理由は後述します。
抵抗器
電子回路上で抵抗として働く部品が抵抗器(resistor)です。抵抗器は、通常、単に抵抗と呼ばれます。100Ωとか470Ωとか1KΩなど、様々な大きさの抵抗があります。抵抗を使う際には、どちらをプラスにつないで、どちらをマイナスにつなぐ、といった決まりはありません(極性がない)。また、多少乱暴に扱っても壊れません。100本で100円くらいと、非常に安価です。
LED
LEDは、光る部品です。日本語では発光ダイオード、英語ではLight Emitting Diodeといいます。ダイオードという電子部品の一種です。線が2本伸びていますが、どちらをプラスにして、どちらをマイナスにするか決まっています。これを、極性があるといいます。足の長い方の線をアノードと呼び、足の短い方の線をカソードと呼びます。アノードがプラスで、カソードがマイナスです。これは、絶対に間違えてはいけません。
赤色LED、緑色LED、青色LEDがあります。ちなみに青色LEDは、3つのうちで一番最後に発明されました。発明者は日本人で、赤崎 勇・天野 浩・中村 修二の各氏です。この発明の対価をめぐって訴訟に発展したことは、皆さんも聞いたことがあるかもしれません。
LEDについては、この資料の後半で詳しく説明します。
スイッチ
スイッチやボタンは、電線を切ったり接続したりする部品です。押している時だけ接続するもの(タクトスイッチ)や、切断と接続の2状態を作り出せるもの(トグルスイッチ)などがあります。大きさや形もまちまちです。
センサ
センサ(Sensor)とは、物理現象を捉えるための部品です。色々なものがあります。
- 光センサ
- 色センサ
- 音センサ
- 加速度センサ
- 距離センサ
- 曲げセンサ
- 温度センサ
- 湿度センサ
センサをうまく使うことが、フィジカルコンピューティングの1つのポイントです。
アクチュエータ
アクチュエータ(actuator)とは、電流を物理的な運動に変える部品です。この講義では、モーターのことだと思ってください。モーターには幾つか種類があります。
- DCモーター: 電圧の大きさに応じて回転速度が変わる、普通のモーターです。
- サーボモーター・ステッピングモーター: 回転角度が指定できるモーターです。サーボモーターとステッピングモーターは、制御の方式が違います。この講義では、サーボモーターしか使いません。
回路図
電子回路の設計図のことを、回路図(circuit diagram)、あるいは電子回路図といいます。回路図の書き方は、国際電気標準会議(IEC)および日本工業規格(JIS)によって標準化されています。
この講義では、電子回路の設計図として、Fritzingで描かれた配線図と電子回路の両方を使います。Fritzingを使うと、マイコンボードとブレッドボードを使って回路を組むことを前提に、視覚的にわかりやすい絵で配線図を表現できます。一方で回路図を使うと、コンパクトな設計図を描くことができます。
回路図の表記法は、国際規格としてはIEC 60617、日本工業規格(JIS)としてはJIS C 0617という規格で決められています。ただ、これらは比較的新しい規格なので現在のところ古い規格の表記法も依然として使われています。回路図の作図ツールは依然として古い規格に基づいたものが多いので、この資料でも古い方の規格に従った回路図になっています。ごめんなさい。
以下の回路図は、LEDを点灯させる回路を示しています。
電源のプラスには、T字型の記号を使います。これをVccと呼びます。電源の表記はいろいろあって、横線の上に丸を描くやり方もあります。一番下にある記号は、グランドです。グランドはGNDと略されます。Vccは図の上の方に描き,GNDは図の下の方に描くのが原則です。330というラベルがふってあるのが抵抗です。330Ωの抵抗であることを示してます。抵抗の下にあるのが、LEDになります。
2.3 LED
LEDは、ダイオードという電子部品の一種です。ダイオードには、電気を一方向にしか流さない性質があります。
LEDを使うときに、気をつけなければならないことは2つあります。1つは極性です。LEDのアノードはプラスに、カソードはマイナスにつなぎます。もう1つは、LEDに流す電流です。LEDは、製品によって流せる電流の上限値が決まっています。このような上限値のことを、絶対最大定格と言います。LEDに、絶対最大定格で決められている以上の電流を流すと、LEDは壊れます。
通常、どのような電子部品を使うときにも、データシートと呼ばれる説明書を参照します。このデータシートに絶対最大定格や、どのくらいの電流を流すとちょうど良いのかが記載されています。今回は、データシートを読むのはパスして、とりあえずやってみることにしましょう。
多くのLEDでは、20mAくらいの電流を流すと一番明るく光るようになっているようです。しかし、20mAを超えると急激に危険な領域に入ります。そこで、この講義では、5mAを流すことを標準とします。5mAでも十分に明るく光ります。
どうやってLEDに5mAを流すようにすれば良いのでしょうか?ここでは2通りの方法を説明します。抵抗を使う方法と、定電流ダイオードを使う方法です。
抵抗
前回Fritzingで作成した以下の回路は、micro:bitの3.3V出力を電源としてLEDを光らせるものです。
実際に配線した例を示しておきます。
それでは、抵抗を使う方法から説明しましょう。適切な抵抗を入れて、電流を制御するわけです。抵抗値を計算するにはオームの法則を使います。
E = R×I
これを変形させると、以下のような式を得ます。
R = E/I
今、電流Iは5mAと決めましたから、あとは電圧Eがわかればよいことになります。これは電源の電圧でよいのでしょうか?それを知るには、LEDの性質を知らなければいけません。LEDは、ある一定以上の電圧がかかって初めて電流が流れ始めます。つまり、それまでは光らないということです。LEDが光っている時には、電圧の低下が起こります。これを順方向電圧降下と呼びます。どのくらい電圧が降下するかはLEDによって異なり、正確にはデータシートを見なければわかりません。データシートには、順電圧(Vf)という名前で記載されています。今回は、1.8Vであるとしておきましょう。
LEDを光らせる時の抵抗値を計算するには、以下のように行います。
抵抗値 = (電源電圧 – 順方向電圧降下)/LEDに流したい電流
実際に3.3Vの電源電圧で計算してみましょう。電流の単位はAですから、10mAは0.01Aとなります。
抵抗値 = (3.3V – 1.8V) / 0.005A = 300Ω
回路に300Ωの抵抗を入れれば、5mA流れてくれるわけです。しかし、mbedをはじめようキットには300Ωの抵抗は入っておらず、代わりに330Ωの抵抗が入っています。これでは、ダメなのでしょうか。330Ωでどのくらいの電流が流れるかを計算してみましょう。
電流 = (3.3V – 1.8V) / 330Ω = 約4.5mA
これでも全く問題ありません。330Ωの抵抗を使ったとしても4.5mA流れますので、まだ光ります。多くの場合、抵抗の値は近ければなんとかなります。それでは、1KΩにしたらどうでしょうか。
電流 = (3.3V – 1.8V) / 1000Ω = 約1.5mA
実験してみるとわかるのですが、LEDは光らないか、光ってもごくわずかです。
実は、ここで行った計算は、かなりインチキです。というのも、抵抗を変えればLEDに流れる電流は変わり、それに伴って順方向電圧の降下も変わってしまうからです。抵抗を使ってLEDに狙った電流を流すのは、実は結構難しいです。次の節で説明する定電流ダイオードを使うと、より簡単に電流を決められます。
定電流ダイオード
それでは、定電流ダイオードを使う方法を説明します。抵抗を使った方法と比較して、こちらの方法の方が簡単で安全です。定電流ダイオードとは、一定の電流しか流さない電子部品です。mbedをはじめようキットには、5.6mAの定電流ダイオードが入っています。
ダイオードには、極性があります。LEDの場合には、足の長さでアノードとカソードを区別しましたが、定電流ダイオードを含む一般のダイオードは、線の入っている側がカソードになります。
回路図の記号は以下のようになります。線の場所が実物でも記号でもカソード側になっていることを覚えておくと良いです。
回路は、抵抗を使った時の回路とほぼ同じで、抵抗を5.6mAの定電流ダイオードで置き換えただけです。
この講義では、LEDの明るさをマイコンで制御する必要がない場合、LEDの点灯(点滅)には定電流ダイオードを使います。
2.4 実習
木曜日の応用演習では、火曜日のPC開発論で説明した内容を実際に実験します。実験には実験番号が振られています。それらの実験を応用演習の時間内に行い、実験レポートを作成してCoursePowerに提出してください。
この講義では、Switch Scienceから発売されている「mbedをはじめようキット 2019」を使います。このキットの中には、micro:bitというマイコンボードと、ブレッドボード、DragonTail、抵抗器(180Ω、330Ω、10KΩ)、LED等が入っています。
mbed Compiler
mbedの開発環境には、オンライン上のIDEであるmbed Compilerを使います。まず、以下のURLにWebブラウザでアクセスしてください。
すると、以下のようなページが表示されるはずです。
右上にある”Compiler”というリンクをクリックします。
ここでアカウントを作成します。Signupに進みましょう。
あとは指示に従います。
ログインすると、以下のようにWorkspace Managementというページが表示されるはずです。
プログラムは、全てここで作成します。
Hello world!
では、早速Hello world!と行きましょう。まず、右上の”デバイス未選択”をクリックします。
これは、プラットフォームの選択を行うダイアログです。BBC micro:bitを選択してください
最下部にある”Add Platform”をクリックします。たくさんのハードウェアが出てきますね。
左にある”Board vendor”から、”BBC Make it Digital Campaign”を探してチェックを入れます。
するとBBC micro;bitというハードウェアがすぐに見つかるはずです。クリックしましょう。
このページはブックマークにでも入れておいて、いつでもアクセスできるようにしておいてください。このページの中ほどの右に”Add to you your mbed Compiler”というリンクがありますから、それをクリックします。
Workspace Managementのページに戻って、リロードしてください。”デバイス未選択”が”BBC micro:bit”になったはずです。これで準備完了です。
左上の”新規”をクリックしてください。以下のようなダイアログが出てきます。
ここで気をつけることは、”プラットフォーム”がBBC micro:bitになっていること、テンプレート”が”A blinky for the BBC micro:bit, which needs a custom blinky”になっていることです。当面、どんなプログラムを作成するときでも、”A blinky for the BBC micro:bit, which needs a custom blinky”テンプレートを使います。”プログラム名”は、なんでも良いのですが”HelloWorld”にしておきます。”ok”をクリックしましょう。
左の”HelloWorld”の下に出ている”main.cpp”をクリックします。何やらプログラムが出てきましたね。ここを改変して自分のプログラムを作ります。以下のように直してください。
1 2 3 4 5 6 7 8 |
#include "mbed.h" Serial pc(USBTX, USBRX); int main() { pc.printf("Hello World!\n"); } |
これは、実はmbedの公式ページあるサンプルです。
https://os.mbed.com/handbook/SerialPC
それでは、”コンパイル”ボタンを押します。すると、サーバ上でプログラムがコンパイルされて、自動的にダウンロードされます。これをmicro:bitに転送すれば実行できるというわけです。micro:bitは、USBを使ってPCに接続します。
接続されると、PC側からはUSBメモリのように見えます。このUSBメモリのようなところに、ダウンロードした実行ファイル(HelloWorld.NRF51_MICROBIT.hex)をコピーすれば転送完了です。新しい実行ファイルをmicro:bitに転送すると、自動的に実行が始まります。
何も起きませんね。それもそのはず、このプログラムは、micro:bitとPCを接続しているUSBケーブルを使って、PC側に”Hello World!n”という文字列を送信するというものです。PC側でそれを受け取ってあげなければなりません。MacのTerminalを開いてください。そこで、以下のようなコマンドを実行します。
1 2 |
$ ls /dev/cu.* |
実行結果は以下のようになるはずです。この中に”cu.usbmodem1423″というものがあることを確認しておきます。1423の部分は、1422だったり、14102だったりと実行する環境によって変わります。
次に、以下のようなコマンドを実行します。
1 2 |
$ cat /dev/cu.usbmodem1423 |
何も起きませんね。それで正常です。micro:bitのリセットボタンを押してみてください。リセットボタンの位置を以下に示します。
今度は”Hello World!”と表示されるはずです。2回、あるいは3回と”Hello World!”が表示されるかもしれませんが、気にしないでください。ボタンというのはそういうものです。
ここまでのまとめ
ここまでで分かったことをおさらいします。
- mbed Compilerでプログラムを作る手順
- プログラムをmicro:bitに転送する手順
- micro:bitでプログラムを実行する手順
プログラムは、micro:bit上に実装されているマイコンで実行されます。このマイコンは、小さいけれども立派なコンピュータです。ただし、micro:bitには出力用デバイスとしていくつかのLEDが付いているだけなので、そのままでは何が起きているのか分かりません。今回は、シリアル通信という仕組みを使ってPCにデータを送って実行結果の確認を行いました。Serial pc(USBTX, USBRX);
というのが、そのためのおまじないです。pc
の部分は、変数名なので、どんな名前に何でも構いません。printf()
は、C言語のprintf()関数と同じだと思ってください。これで、デバッグの方法も分かったということになりますね。
マルチメーターの使い方
マルチメーター(multimeter)は、電子回路に関係した様々な計測器を1つの筐体にまとめたものです。一般的には、テスターという呼び名の方が通じやすいかもしれません。
製品によって、どのような計測が出来るかは、まちまちですが、普通は以下のようなことができます。
- 電圧測定: 交流電圧(ACやACVと表記)と直流電圧(DCやDCVと表記)のどちらも測れます。
- 抵抗測定: 抵抗器の大きさを測れます。
- 通電テスト: 2点間に電流が流れるかどうかのテストができます。
その他に、電流測定ができたり、コンデンサ容量測定ができるものなどがあります。この講義では、電圧測定、抵抗測定、通電テストしか使いません。
大学で用意しているマルチメーターは以下のような外見をしています。
赤と黒の2本の線がありますが、この線はリードと呼ばれます。赤いリードはプラス側、黒いリードはマイナス(グランド)側につなぎます。マルチメーターとリードをつなぐときには場所と色に注意してください。
電圧測定と抵抗測定の際には、真ん中のダイアルをそれぞれの場所にすれば良いだけですが、通電テストの時には少し手順が違います。通電テストを行う時には、ダイアルを通電テストの場所に合わせ、さらにファンクションキーを押して液晶ディスプレイに音のマークが表示されるようにします。
マルチメーターは使い終わったら必ず電源をoffにしておきます。
実験1. マルチメーターで抵抗値を図る
mbedをはじめようキットには、180Ω、330Ω、10KΩの3種類の抵抗器が入っています。これらの抵抗をよく見てみると、表面に色々な色の線が4本入っているのがわかります。この色のパターンで何Ωの抵抗なのかが、わかるようになっています。インターネット上で検索すると、パターンの表がありますから、適当なものを見てください。
http://part.freelab.jp/s_regi_list.html
マルチメーターを抵抗を測るモードにして、3種類の抵抗器の値を測りましょう。測った結果を実験レポートで報告してください。おそらく、180Ω、330Ω、10KΩとは少し違った値になると思います。でも、これでOKです。
実験2. 通電テスト
以下の図のように、硬くて短いワイヤの片側だけをブレッドボードに挿します。ワイヤの色は、何色でも構いません。
同じ色同士のワイヤが通電していることをマルチメータを使って確認してください。通電するとは、電線が繋がっていて電気が流れるということです。
レポートには、ブレッドボードの写真と、マルチメータをどう操作して、通電をどのように確認したのかを書いてください。
実験3. マルチメータで電圧を測る
マルチメーターで電圧を測るときには、プラス極とマイナス極に気をつけなければなりません。マルチメーターには、赤と黒のリードがありますが、赤いリードがプラス側、黒いリードがマイナス側です。
電子回路では、いろいろな場面で赤をプラス、黒(あるいは濃紺)をマイナスを示すものとして使います。この2つの色は特別な色と覚えてください。
マルチメーターの使い方が分からない時には聞いてください。DCやVと書いてある部分が直流電圧の測定、ΩやOHMなどと書かれているのが抵抗値の測定、音が出ているようなアイコンが通電テストとなっていることが多いです。
以下の図中に示されているAB間の電圧を測りましょう。10KΩの抵抗を使います。Aがプラス(赤)、Bがマイナス(黒)です。
予想される結果は、3.3Vです。近い値が出ていれば成功です。
実験4. 抵抗を使ってLEDを光らせる
講義中に説明した回路図を参考に、抵抗を使ってLEDを光らせます。まずは、330Ωの抵抗を使って、光る様子を観察します。
その後、抵抗を1KΩに変えて実験します。330Ωの時と1KΩのときで、LEDの光り方にはどのような変化があるのかを報告してください。
1KΩの抵抗は教室で配ります。
実験5. 順方向電圧降下を測定する
LEDの順方向電圧降下がどのくらいなのかを、マルチメータを使って実際に測定してみましょう。予想される結果は、1.8Vから2.0Vくらいです。
実験4の330Ωを使った回路を使います。電圧を図る場所は、(1)抵抗の両側と(2)LEDの両側です。抵抗には、LEDによって降下した残りの電圧がかかります。一方、LEDの両側の点で電圧を測ると、このLEDにかかる電圧が測定できます。両方とも測って報告してください。
実験6. 定電流ダイオードを使ってLEDを光らせる
抵抗の代わりに定電流ダイオードを使ってLEDを光らせましょう。
実験7. PCに文字列を送信する
mbedコンパイラで新しいプロジェクトを作ります。ここに自分の学籍番号をPCに送信するプログラムを書きましょう。micro:bitで実行して結果を確認してください。
— by 石井 健太郎、沼 晃介、飯田 周作 専修大学ネットワーク情報学部