今回はスイッチ回路を追加します。最初は電子回路の設計です。
今回の説明
回路を完成させるために以下の順序で説明しています。このエントリの説明は(4)「ベース回路にスイッチを追加する」の部分になります。
- LEDを電池と抵抗のみで光らせる回路を組み立てる
PICマイコンの回路を組み立てる前に、まずはブレッドボードに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドポード上に回路を組んでLEDを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう! - PICマイコンのベース回路を組む
はじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。この回路をブレッドボードに組み立てます。 - プログラムを作る
LEDを1秒に1回光らせるプログラムを作成します。 - PICマイコンに書き込んで動作させる
作成したプログラムをPICマイコンに書き込んで動作させてみます。 - ベース回路にスイッチを追加する
LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部から信号を入力する方法を確認します。 - ベース回路にブザーを追加
スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。
スイッチ追加
今までずっとPICマイコンのピンに接続したLEDの制御方法を説明してきました。つまり、PICマイコンのピンの出力電圧の制御をしてきたわけです。これだけの知識でもいろいろなものが作れそうですが、さらにできることを広げるために今まで作ってきた回路にスイッチを追加してみます。
今までの回路は、電源をつなげるといきなり点滅を開始してしまっていましたが、回路にスイッチを追加して以下のような動作をするようにしてみましょう。
- 電源を入れると、RA5ピンのLEDが点灯する。
- スイッチを押すと、RA5ピンのLEDが点滅を開始する。
- 点滅は永遠繰り返す。
ということで、今回は回路にスイッチを追加する方法、また次回はスイッチの状態を検知するにはプログラムをどのように変更すればよいかを確認します。
PICマイコンへのスイッチ信号の入力方法
PICマイコンのピンを出力ピンに設定して、その出力制御する方法は簡単でしたよね。例えばRA5ピンを出力ピンに設定した場合、RA5ピンを0Vにしたければ プログラムで LATA5=0; と書けばよく、5V(=電源電圧)にしたければ LATA5=1; と書けば制御できました。
入力もこれに似ています。例えばRA4ピンをデジタル入力ピンに設定した場合、RA4ピンを0Vにするとプログラム上では変数(レジスタ)のRA4が0になり、RA4ピンを5V(=電源電圧)にするとRA4が1になります。
なお、デジタルで読み取る場合、0Vと5Vの中間の値にすると安定しませんので、なるべくどちらかの電圧に近くなるように電子回路を設計します。正確には、PIC12F1822の場合、ピンの入力が0と認識する電圧は、0V〜1Vぐらい、と幅があります。幅がありますが、電子回路の設計はなるべく0V、5Vになるように設計したほうが安定した作品を作ることができます。
それではベースの回路図にスイッチを追加していきましょう。説明の都合上、RA4ピンにスイッチの回路を接続する例を説明しますが、あとで接続するピンを変更します。理由は説明の途中で説明します。
ベースの回路ではRA4ピン(3番ピン)がまだあいていますので、RA4ピンにスイッチを追加してみます。
スイッチの動作ですが、スイッチをONにしたときにRA4が5V、スイッチをOFFにしたときRA4が0Vになるように設計したいと思います。先ほど説明したように、スイッチをONにしたとき、RA4が5Vになればよいので、以下のような回路が思いつきますよね。
これでよさそうですが、残念ながらこの回路ではダメなんです。確かにスイッチをONにしたときRA4ピンが電源のプラス側に接続されますので、5Vになりますよね。これはOKです。
問題はスイッチをOFFにしたときです。回路をよく見ると、スイッチをOFFにしたときはRA4ピンがどこにも接続されていませんよね。電子回路では「どこにも接続されていない」=「0V」ではありません。
PICマイコンに限らず一般的な電子回路の入力部分は、電気的な雑音などが原因で、どこにも接続されていないとその入力電圧は不安定になります。そのためこの回路ではスイッチをONにしたときはいいのですが、OFFにすると不安定となってしまいます。
ということは、スイッチがOFFのときは電源電圧のマイナス側(0V)につなげておけばよさそうですよね。ということで、以下の回路を考えてみました。
こうすればスイッチがOFFのときGP4ピンは0Vになりますね。ただ残念ながらこの回路もダメなんです。理由ですが、スイッチをONにすると、電源のプラス側とマイナス側が直接接続されることになります。つまり電源がショートしてしまいます。
なんだか解決策はなさそうですよね。では、どうすればよいかというと、スイッチを入れたときにショート状態にならないように抵抗を入れます。こんな感じです。
LEDを光らせるところで確認しましたが、抵抗は電気(電流)を通しにくくする電子部品です。先ほどの抵抗を接続しない回路では、ショートしてしまいましたが、このように抵抗を接続すると、スイッチをONにしても電流が流れにくくなり、ショート状態にはなりません。
でも、ちょっとあれっ?て思われる方もいらっしゃるかもしれません。抵抗をつければスイッチONにしたときは先ほどのショートの問題は解決できますが、スイッチをOFFの状態のとき、RA4ピンは抵抗を通して電源のマイナス側(0V)に接続されています。抵抗を入れてしまうと、直接接続ではないので、GP4ピンは0Vにならないのではなか、と思われた方もいらっしゃるかもしれません。
これは今までの説明では出てこなかったオームの法則を説明していないので、正確な説明は難しいです。なるべく簡単に説明すると、抵抗は電流が流れていないときは抵抗の両端の電圧の差はゼロになります。この回路は、RA4ピンは入力ピンにしていますので、GP4ピンから電流はほとんど流れません。そのため、抵抗に電流が流れず、抵抗の両端の電圧差はゼロになります。つまり、RA4ピンは0Vになります。
このように接続する抵抗のことを「プルダウン抵抗」と呼びます。マイコンやCPUの入力ピンが接続されていな状態にならないように、マイナス側(下側)に引っ張っておく、という意味合いで「プルダウン」と呼んでいます。「ダウン」ということは「アップ」もありそうですよね。では次に「プルアップ抵抗」について説明します。
先ほどは、スイッチONのときにRA4ピンが5V、スイッチOFFのときにRA4ピンが0Vとなるようにしました。これと逆にすることもできます。つまりスイッチONのときはRA4ピンが0V、つまりプログラム上では変数RA4が0となります。またスイッチOFFのときはRA4ピンが5V、つまりプログラム上では変数RA4が1となります。
ちょっと脇道に逸れますが、なんだか、スイッチONの時が1、OFFの時が0、という方がわかりやすいですし、自然ですよね。この「0」がOFF、「1」がONというのは世界的に共通の感覚のようです。例えばPCに限らず、家電製品、その他いろいろな製品の電源スイッチを見ると、
これはMacBookの電源スイッチなんですが、こんな風なデザインが多いですよね。実はこれは、数字の「0」と「1」をデザインしたものなんだそうです。「0」と「1」を制御する、つまり「OFF」と「ON」を制御する、という表現なんですが、、、「0」と「1」がそれぞれ「OFF」、「ON」という感覚はいいにしても、このデザインが「0」「1」を表現していて、スイッチ、という連想にはなりづらいような気もします。
ということで、わかりづらい方の接続を考えましょう。
先ほどと逆にして、スイッチをONにするとRA4ピンが0Vになるようにします。さらにスイッチOFFの時にRA4ピンが非接続状態にならないように5Vに接続します。こちらもスイッチONのときに電源がショートしないように抵抗を入れます。プルダウン抵抗のときと同じように考えてみてください。
この回路図に出てくる抵抗を「プルアップ抵抗」と呼びます。こちらも先ほどと同様に、スイッチOFFのとき電源のプラス側(上側)に引っ張っておく、という意味合いで「プルアップ」と呼びます。
ところで、このプルダウン/プルアップ抵抗はどのくらいの値にしたらよいのでしょうか。実はこの値、と決まっているわけではありません。ある回路図では1kオームだったり、他の回路図では10kオームぐらいだったりします。
早速、ブレッドボードでスイッチ回路を作成、、、といきたいところですが、もうちょっと回路を考えてみます。
先ほどのプルアップ抵抗をつけたスイッチの回路ですが、
この図の赤色の接続の部分、つまりピンに抵抗が接続されて電源のプラス側に接続されている部分、今まで作った回路図で見かけましたよね。以下の図の赤色の部分です。
形は違いますが、電気的な接続は全く同じです。
この部分は、PICkit3を接続してプログラムを書き込む時に使用します。逆に、通常動作中はこの部分は使用されません。ということは、この抵抗をスイッチのプルアップとして考えて、以下のようにスイッチを接続することができます。
ん? って感じでしょうか。もう一度よく考えてみましょう。
まずこの回路でスイッチがOFFの場合は、最初に設計した回路図と同じです。この状態でPICkit3でプログラムを書き込むことができます。
次に、通常動作中は、このピン、つまりRA3(4番ピン)をデジタル入力ピンとして使用して、スイッチ状態を読み取る、ということができます。
なお、ほとんどのPICマイコンは、4番ピンがプログラム書き込み用のピン(MCLR/VPPピン)であると同時に、RA3ピンとしても定義されています。このRA3ピンは入力専用ピンとなっていますので、スイッチを接続して使用するケースが多いです。
ということで、最初はRA4ピン(3番ピン)でスイッチの接続回路を説明してきましたが、すでにRA3ピン(4番ピン)にプルアップとして使用できる抵抗が接続されていますので、スイッチはRA3ピン(4番ピン)を使用することにします。
なお、このように接続しますので、スイッチ状態は、RA3が0のときON、1のときOFFになります。ちょっとややこしいので注意しましょう。スイッチを接続した回路図は以下のようになります。
タクトスイッチの内部接続
今回はタクトスイッチ、というものを使用します。実物はこのようなものです。
なんかドアップで撮影したら、今にも歩き出しそうな感じになりました。
ピンの付き方に注意してください。タクトスイッチを上からみるとこのようになっています。ピンは1辺に2つ、向かい合う2辺に合計4つ付いています。
タクトスイッチ内部の配線ですが、通常はスイッチはOFFの状態で以下のように配線されています。
スイッチ部分を押すと、押している間だけ、以下のように配線が接続されます。
ブレッドボードに差すときはスイッチの向きに十分注意してくださいね。
ブレッドポードにスイッチ回路追加
さて、いよいよブレッドボード上に先ほどの回路図を作成していきます。今までひとつひとつの部品について、回路図からブレッドボードに組み立てていく手順を説明してきましたが、今回は是非自力で挑戦してみてください。以下に実装例を示しますが、この実装例が唯一の正解ではありません。他にもいろいろと実装方法があります。なお、あとで圧電ブザーも追加しますので、スイッチはなるべく端に配置するようにお願いします。
スイッチ回路で追加した部分はピンク色枠内です。PIC12F1822のRA3(4番ピン)からスイッチの片方のピンに黄色線で接続、スイッチのもう片方を青色線で電源のマイナス側に接続しました。
実際に実装した画像です。接続の参考にしてみてください。
次回はスイッチを読み取って制御するプログラムを作成します。
更新履歴
日付 | 内容 |
---|---|
2016.11.13 | 新規投稿 |
2018.11.24 | ブレッドボードイラスト&画像差し替え |