ブレッドボードにスイッチを追加します。
スイッチを追加しよう!
前回の記事では青色LEDをピカッ、ピカッ、と光らせるスケッチを作成しました。このピカッ、ピカッ、と光る動作は、タイマーの時間計測を開始後に、タイマーが動作していることを表現しています。タイマーの動作開始前は光ってほしくありません。
でも前回のスケッチの状態ですと、Arduinoボードにスケッチを送り終わったらすぐにLEDが点滅を始めてしまいます。
キッチンタイマーとしては、ぜひともスタートボタンが欲しいものです。そこでブレッドボードに「スイッチ」を追加して、タイマーのスタートボタンを実装しようと思います。
Arduinoボード端子内部の復習
第10回の記事でArduinoボードの端子内部には、端子の電圧を読み取るための「電圧計」と、端子の出力制御するための「電池&スイッチ」が入っていることを説明しました。
第10回の記事では、上のイラストの右側の状態にするために、pinMode(12, OUTPUT);
により12番端子の「電池&スイッチ機能」を有効にしてLEDを制御しました。
今回と次回の記事で、内部の「電圧計」を使用して、なんとかスイッチのON/OFF状態を読み取ってみたいと思います。
今回の記事では、Arduino Microにスイッチを追加する方法を検討して、ブレッドボードにスイッチ回路を追加します。追加するスイッチは「A5端子」に接続することにします。(次回の記事で、スケッチでスイッチのON/OFFを読み取ります)
今回、「A5端子」を選んだ深い意味はありません。スイッチの配線がしやすそうな端子を選びました。
電圧計の種類
なんだかいつも謝ってばかりですが、今回もまた謝まらなければなりません。
申し訳こざいません! 今までのArduino Micro内部の電圧計の説明は正確ではありませんでした。これからArduino Microの内部構造をより正確に説明します。
「Arduino Microの内部構造」と書きましたが、これから説明する内部構造はArduino Microだけではなく、すべてのArduinoボードに共通しています。さらに、Arduinoボードに限らず「PICマイコン」や「Raspberry Pi」の内部も同じような構造になっています。
実は、Arduino MicroのA5端子の内部には、次のように2種類の電圧計が接続されているんです。(A5端子内部にも「電池&スイッチ」機能は入っていますが、次のイラストでは説明をわかりやすくするために描いていません)
イラストのように「デジタル電圧計」と「アナログ電圧計」の2種類の電圧計が端子に接続されています。
といっても、アナログ電圧計の目盛りにはなんだか変な数字が書かれていますし、デジタル電圧計は目盛り?が見たことないタイプですよね。
これからそれぞれの電圧計の特徴と、なぜ2種類の電圧計が入っているのか説明します。
デジタル電圧計
この電圧計の機能はちょっと変わっています。普通の電圧計は2.5Vなどのように具体的な電圧の値を知ることができますが、このデジタル電圧計は「端子の電圧があるかないか」の判定しかしません。
Arduino Microの端子は5Vで動作する仕様になっていますので、「端子の電圧があるかないか」とは「端子の電圧が5Vか0Vか」という判定になります。
「5Vか0Vか」と言っても、実際の端子の電圧が中途半端な場合はどうなるのでしょうか?
実は中途半端な電圧の場合でも、0Vか5Vのどちらかで無理やり読み取ってしまうんです。
例えば端子の電圧が0.5Vぐらいであれば0Vに近いので「なし(0V)」と読み取ります。また、4.7Vぐらいであれば5Vに近いので「あり(5V)」と読み取ってくれます。
0Vと5Vの中間ぐらいの値、例えば2.5Vなどの場合は0Vと5Vのどちらで読み取るかはわかりません。
なんだか変わった電圧計ですが、よくよく考えてみると電圧があるかないかのどちらかというのは、さっぱりしててすがすがしいですね!
アナログ電圧計
Arduinoボードの内部には、デジタル電圧計とは別に、電圧を連続的に読み取ることができる「アナログ電圧計」も内蔵されています。こちらは馴染みのある電圧計かと思います。
とはいっても、この電圧計の目盛り、なんか変ですよね。
普通の電圧計は、例えば「5.3V」というような電圧の値で読み取ります。
でもArduinoボード内部のアナログ電圧計は、「0〜1023」の数値で読み取るようになっています。この数値の意味ですが、Arduino Microの場合、「0=0V」「1023=5V」に対応しています。例えば1023の約半分の512は、5Vの半分の2.5Vを意味します。
ちょっと変わった電圧計ですが、この電圧計は中途半端な電圧を読み取ることができます。
なぜ2種類の電圧計が内蔵されているのか?
ここまで、Arduinoボード内部の2種類の電圧計を見てきましたが、そもそもなぜ2種類あるのか不思議に思いませんか?
というのは、0Vから5Vを連続的に読み取ることができるアナログ電圧計は、当然ながら「0V」と「5V」という値も読み取ることができます。
だったら、連続的に読み取ることができるアナログ電圧計だけあれば十分ですよね。わざわざ0Vか5Vのどちらかしか読み取れないデジタル電圧計が必要な理由は見当たりません。
この2つの機能を、Arduinoボードの内部動作という観点で見るといくつか違いが出てくるんです。
違いの一つ電圧の読み取り時間です。
アナログ電圧計の電圧を読み取る時間は、デジタル電圧計に比べてだいたい10倍ぐらいの時間がかかります(とはいっても、Arduinoボードの処理速度は早いので、どちらの処理も人間から見ると一瞬ですが…)。
違いのもう一つは消費電力で、電圧読み取りに時間がかかる分、電池も余分に消費してしまいます。
このような違いがあるので、例えばスイッチのようにONかOFFかの2つの状態を読み取るだけであれば、時間と電気を多く消費するアナログ電圧で読み取るというのはもったいないですよね。そこで、短時間で経済的に読み取ることのできるデジタル電圧計が用意されています。
今回はスイッチのONかOFFかを読み取りますので、デジタル電圧計を利用します。
【補足】Arduinoボード内部の電圧計
電圧計の説明の最後に、Arduinoボード内部の電圧計実装状況について説明します。
Arduinoボードのすべての端子内部にアナログ電圧計とデジタル電圧計が入っているわけではありません。
すでにお気づきかもしれませんが、Arduinoボードの端子名を見ると、特徴があります。次のように、数字のみが書かれている端子と、「A5」などの「A数字」が書かれている端子です。
これらの端子内部の電圧計は次のようになっています。
端子名 | 内部電圧計 |
---|---|
数字のみ (12など) | デジタル電圧計のみ |
「A」と数字 (A5など) | デジタル電圧計とアナログ電圧計 |
端子名に「A」がついている端子は、内部にアナログ電圧計が追加で入っています。端子名の「A」は「Analog(アナログ)」を意味しています。
スイッチの接続
これから、Arduino MicroのA5端子にスイッチを接続して、「デジタル電圧計」でスイッチの状態を読み取ります。
スイッチの端子への接続
最初に、どのように接続すればよいか、電気的な面から考えていきます。
デジタル電圧計は、内部でA5端子とGND端子に接続されていますので、スイッチを次のように接続してみます。(これ以降のイラストでは、デジタル電圧計のみで説明します)
この時、スイッチをONにするとA5端子とGND端子が接続されますので、電圧計は0V、つまり「なし」になります。
では、スイッチをOFFにした場合は電圧計はどうなるのでしょうか?
普通の感覚からすると、何も接続されていなければ0Vという気がしますよね。
実は端子に何も接続されていない場合、電圧は0Vではなく不安定な値、つまり電圧が確定しないんです。
電子回路に慣れていないとちょっと不思議な感じがしますが、どのような電子回路であっても、どこにも接続されていない部分を電圧計で読み取ると、電圧が不定になります。
「何も接続しない場合は電圧が確定しない」というのは電気的な性質なので仕方ないにしても、実際にはこれでは困るケースが多そうですよね。
今回製作しているキッチンタイマーに限らず、Arduinoボードの端子にスイッチを接続するというケースはたくさんあると思います。
Ardiunoボードの注意書きとして「スイッチを接続しても、スイッチがOFFの場合は読み取る電圧は不安定になるのは仕様です!」というのでは困りますよね。
そこで、Arduinoボードではこのような問題を回避できるように、内部に特別な構造が追加されています。
この内部構造もArduinoボードすべてに共通です。さらに「PICマイコン」や「Raspberry Pi」なども同様の内部構造を持つています。
内部の特別な構造
Arduinoボードの端子内部には、端子に何も接続されていないとき、内部電池のプラス側に接続されている状態にする、という機能があります。
この状態にするために、次のイラストのように端子の内部では「抵抗」という電子部品を通して電池のプラス側に接続されています。
内部構造がちょっと複雑になってきましたよね。これから、この内部構造の働きを紐解いていきます。
上のイラストの「抵抗」の働きを正確に理解するには、電子回路の詳しい知識(オームの法則)が必要です。その説明をするだけでシリーズ記事になってしまいますので、ここでは頭の中に内部構造の働きがイメージできるように説明していきます。
最初はスイッチをONにした場合を考えます。
スイッチがONの場合、A5端子とGND端子が直接接続された状態になるので、電圧計は0V、つまり「なし」の状態になります。
でも上のイラストでは、A5端子は抵抗を通して電池のプラスに接続されているので、その影響はないのか?という疑問があるかもしれません。
ちょっと乱暴な説明になりますが、電気的につながりやすい方が優先されて繋がる、とイメージしていただければと思います。
上のイラストでは、A5端子は「(1)スイッチを通してGND端子のマイナス側」と「(2)抵抗を通して電池のプラス側」に同時に接続されています。(1)は電線のみでマイナス側に接続されています。(2)は抵抗と電線を通してプラス側に接続されています。
(1)と(2)では、どちらが電気的に繋がりやすいかというと、余計なものがない「(1)スイッチを通してGND端子のマイナス側」の方が繋がりやすいので、結果的に上のイラストのようになります。
次は、スイッチがOFFの場合です。
スイッチがONのときとは違って、A5端子は抵抗を通して電池のプラス側に接続されています。A5端子はこの接続しかありませんので、結果として5V、つまり電圧ありの状態になります。
スイッチONの場合は、「(1)スイッチを通してGND端子のマイナス側」と「(2)抵抗を通して電池のプラス側」の2通りの接続のうち、どちらか繋がりやすい方で繋がりましたが、今回は「(2)抵抗を通して電池のプラス側」しか選択肢がありませんので、電圧あり、になる、というイメージです。
「プルアップ機能」
このように、内部で抵抗を通して電池のプラス側に接続しておく機能は「プルアップ機能」と呼ばれています。
「プル」は日本語で「引っ張る」、「アップ」は「上」という意味です。「プルアップ機能」は日本語で「上に引っ張る機能」ということになります。
これは、「端子を電圧計を電池のプラス側(上側)に引っ張る」というイメージからきています。
また、内部の抵抗の目的は「プルアップ」のため、この抵抗のことを「プルアップ抵抗」と呼ぶこともあります。
プルアップ機能の有効/無効スイッチ
内部構造の説明がかなりややこしくなってきましたが、ここでさらに追い打ちをかけるように複雑になります。すみません。
スイッチのON/OFF状態を読み取るときは、プルアップ機能は必須、という感じですが、他の場面ではこのプルアップ抵抗は邪魔になることがあります。
例えば、センサーなどの中途半端な電圧は、アナログ電圧計で読み取る必要があります。
このとき、プルアップ抵抗が接続されたままですと、次のようにアナログ電圧計は「センサーに接続」されていて」さらに「抵抗を通して電池のプラス側にも接続」されています。
このように常にプルアップ機能があると、アナログ電圧計で正しくA5端子の電圧読み取ることができなくなってしまいます。
そこでArduinoボード内部には、このプルアップ機能の有効/無効の切り替えスイッチが内蔵されています。
内部の電圧計をどのように使うかに応じて、このプルアップ機能の有効/無効スイッチで切り替えられるようになっています。
今回はスイッチのON/OFF状態を読み取りますので、プルアップ機能は有効にします。
次回の記事では、スケッチで実際にこのスイッチも操作します。
ブレッドボードにスイッチを追加する
それでは、ArduinoボードのA5端子にスイッチを接続します。
スイッチは次のようにA5端子とGND端子の間に接続します。
接続図は簡単ですが、ブレッドボードにスイッチを追加する場合、スイッチの仕組みを理解しておく必要があります。
最初にスイッチの構造を確認しておきます。
このシリーズ記事で使用するスイッチは次のような形をしています。
スイッチには4つの金属端子があります。
スイッチを上から見ると2つの辺から金属端子が2本ずつ出ていることが確認できます。
このスイッチは内部は以下のようにオレンジ線の部分がスイッチ内部で接続されています。スイッチを押すとすべての金属端子が接続状態になります。
スイッチ内部はこのようになっていますので、ブレッドボードに以下のようにセットすると、スイッチを押すことにより2つのラインが接続されます。
それではスイッチの構造がわかったところで、ブレッドボードにスイッチを追加していきましょう。
スイッチをセットする位置ですが、このシリーズの後半では、アラーム用のスピーカーもブレッドボード上にセットします。また、基礎編パート2では、さらにスイッチを追加します。
そこで、今回追加するスイッチは以下の位置にしましたので、合わせていただければと思います。(ブレッドボードの列番号39番と41番を使っています)
それでは実際にスイッチを上の図の位置にセットしましょう。セットしたら最初に次の部分の配線を行います。
この配線はブレッドボードのマイナスライン(横長ライン)を利用して接続しましょう。ジャンパワイヤーの短いオレンジ色の配線の長さがちょうど合うと思います。
一つはArduinoボードのGND端子とブレッドボードのマイナスラインを接続します。
もう一つは、スイッチの片側のラインとブレッドボードのマイナスラインを接続します。
次に、以下の配線を行います。
Arduino MicroのA5端子と、スイッチのもう片方を接続すればOKですので、次のように接続しました。長いオレンジ色の配線の長さが合うと思います。もし合わないようでしたら、スイッチを1列ずらしてみてください。
ブレッドボード上の接続は、次のイラストの黒線のように接続していることになります。
スイッチはA5端子とGND端子の間に接続されていればよいことになりますが、次の接続ではそのようになっていることを確認してみてください。
以下は、実際にスイッチを接続したブレットボードの画像です。
次回はA5端子のスイッチ状態を読み取るスケッチを作成します。
更新履歴
日付 | 内容 |
---|---|
2019.8.13 | 新規投稿 |
2021.8.22 | 新サイトデザイン対応 |
2024.11.26 | Arduino内部回路をより正確な説明に変更 スイッチ接続端子名を「23番端子」から「A5端子」に変更 |
すごく分かりやすくて勉強させていただいています。
ここで23番端子が出てきますが、どうして23番になるのか理解できません。
基盤にはA5と書いてあり16進数で考えると21番になるかと思います。
上から数えても下から数えても23番目にはならず、疑問に思いました。
ご質問どうもありがとうございます。
すみません、十分な説明がないまま「23番端子」と説明してしまい申し訳ございませんでした。Arduinoボードの端子番号はちょっと複雑ですので、補足記事として以下にまとめました。ご参考にしていただければと思います。
https://tool-lab.com/make/arduino-basic-1-19-supplement-1/
他にもご不明点ありましたらご質問いただければと思います。
ご回答ありがとうございました。
補足記事まで作っていただいて、とても分かりやすいです。
自分で仕様書を読み解けるようになればいいんですが・・・
これから勉強していきたいと思います。
仕様書などは知識がある前提で書かれていることが多いので、基本的な知識を身につければすぐに読めるようになります!
ある程度知識を身につけたら、どんどん仕様書を読んでみることをお勧めします!