今回から数回の解説に分けて、製作した発光ダイオード点滅制御回路にスイッチ回路を追加してみます。スイッチを押すと点滅を開始するようにします。
本シリーズ記事の内容を改訂して、基礎編、応用編、実践編として以下のリンクに公開しています。以下のシリーズはさらにいろいろなPICマイコンの機能をご紹介しています!
PICマイコン電子工作入門 〜基礎編〜
PICマイコン電子工作入門 〜応用編〜
PICマイコン電子工作入門 〜実践編〜
今回の説明
発光ダイオード点滅回路を完成させるために以下の順序で説明しています。このエントリの説明は(5)「ベース回路にスイッチを追加」の部分になります。
- 発光ダイオード(LED)を電池と抵抗のみで光らせる回路を組む
PICマイコンの回路を組む前に、まずは電池、抵抗、発光ダイオードのみを使って、ブレッドポード上に回路を組んで発光ダイオードを光らせてみます。ここでは電池、抵抗、発光ダイオードの回路記号、回路図と、回路図からブレッドボードに組む方法を説明します。 - PICマイコンのベース回路を組む
はじめの一歩の回路は、発光ダイオードを1秒に1回光らせるだけの回路です。この回路を組みます。 - プログラムを作る
発光ダイオードを1秒に1回光らせるプログラムを作成します。 - PICマイコンに書き込んで動作させる
作成したプログラムをPICマイコンに書き込んで動作させてみます。 - ベース回路にスイッチを追加
発光ダイオードの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまでは発光ダイオードを光らせる、という出力制御をしましたが、PICマイコンで外部から信号を入力する方法を確認します。 - ベース回路にブザーを追加
スイッチ付きの1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーを作ってみます。
スイッチ追加
今までずっとPICマイコンのピンに接続した発光ダイオードの制御を説明してきました。つまり、PICマイコンのピンの出力電圧の制御をしてきたわけです。これだけの知識でもいろいろなものが作れそうですが、さらにできることを広げるために今まで作ってきた回路にスイッチを追加してみます。
今までの回路は、電源をつなげるといきなり点滅を開始してしまっていましたが、回路にスイッチを追加して以下のような動作をするようにしてみましょう。
- 電源を入れると、GP5の発光ダイオードが点灯する。
- スイッチを押すと、GP5の発光ダイオードが点滅を開始する。
- 点滅は永遠繰り返す。
ということで、今回は回路にスイッチを追加する方法、またスイッチの状態を検知するにはプログラムをどのように変更すればよいかを確認します。
PICマイコンへのスイッチ信号の入力方法
PICマイコンのピンを出力ピンに設定して、その出力制御する方法は簡単でしたよね。例えばGP5ピンを出力ピンに設定した場合、GP5ピンを0Vにしたければ プログラムで GP5=0; と書けばよく、5V(=電源電圧)にしたければ GP=1; と書けば制御できました。
入力もこれに似ています。例えばGP4ピンをデジタル入力ピンに設定した場合、GP4ピンを0Vにするとプログラム上では変数(レジスタ)のGP4が0になり、GP4ピンを5V(=電源電圧)にするとGP4が1になります。なお、0Vと5Vの中間の値にすると安定しませんので、なるべくどちらかの電圧に近くなるように設計します。正確には、PIC12F683の場合、ピンの入力が0と認識する電圧は、0V〜1Vぐらい、と幅があります。幅がありますが、電子回路の設計はなるべく0V、5Vになるように設計したほうが安定した作品を作ることができます。
それではベースの回路図にスイッチを追加していきましょう。ベースの回路ではGP4ピン(3番ピン)がまだあいていますので、GP4ピンにスイッチを追加することにします。
スイッチの動作ですが、スイッチをONにしたときGP4が5V、スイッチをOFFにしたときGP4が0Vになるように設計したいと思います。先ほど説明したように、スイッチをONにしたとき、GP4が5Vになればよいので、以下のような回路が思いつきますよね。
これでよさそうですが、残念ながらこの回路ではダメなんです。確かにスイッチをONにしたときGP4ピンが電源に接続されますので、5Vになりますよね。これはOKです。問題はスイッチをOFFにしたときです。回路をよく見ると、スイッチをOFFにしたときはGP4ピンがどこにも接続されていませんよね。電子回路では「どこにも接続されていない」=「0V」ではありません。PICマイコンに限らず一般的な電子回路の入力部分は、どこにも接続されていないとその入力電圧は不安定になります。そのためこの回路ではスイッチをONにしたときはいいのですが、OFFにすると不安定となってしまいます。
ということは、スイッチがOFFのときは電源電圧のマイナス側(0V)につなげておけばよさそうですよね。ということで、以下の回路を考えてみました。
こうすればスイッチがOFFのときGP4ピンは0Vになりますね。ただ残念ながらこの回路もダメなんです。理由ですが、スイッチをONにすると、電源のプラス側とマイナス側が直接接続されることになります。つまり電源がショートしてしまいます。
ではどうすればよいかというと、スイッチを入れたときにショート状態にならないように抵抗を入れます。こんな感じです。
ちょっとあれっ?て思われる方もいらっしゃるかもしれません。抵抗をつければスイッチONにしたときは先ほどのショートの問題はなくなりますが、スイッチをOFFの状態のとき、GP4ピンは抵抗を通して電源のマイナス側(0V)に接続されています。抵抗を入れてしまうと、直接接続ではないので、GP4ピンは0Vにならないのではなか、と思われた方もいらっしゃるかもしれません。
これは今までの説明では出てこなかったオームの法則を説明していないので、正確な説明は難しいです。なるべく簡単に説明すると、抵抗は電流が流れていないときは抵抗の両端の電圧差はゼロになります。この回路は、GP4ピンは入力ピンにしていますので、GP4ピンから電流はほとんど流れません。そのため、抵抗に電流が流れず、抵抗の両端の電圧差はゼロになります。つまり、GP4ピンは0Vになります。
なお、この抵抗のことを「プルダウン抵抗」と呼びます。マイコンやCPUの入力ピンが接続されていな状態にならないように、マイナス側に引っ張っておく、という意味合いで「プルダウン」と呼んでいます。「ダウン」ということは「アップ」もありそうですよね。では次に「プルアップ抵抗」について説明します。
今回のスイッチは、スイッチONのときにGP4ピンが5V、スイッチOFFのときにGP4ピンが0Vとなるようにします。ただ、これと逆にすることもできます。つまりスイッチONのときはGP4ピンが0V、つまりプログラム上では変数GP4が0となります。またスイッチOFFのときはGP4ピンが5V、つまりプログラム上では変数GP4が1となります。この入門では、直感的にわかるようにスイッチONのときプログラム上では変数GP4が1、というようにしています。ただ、実際の回路では意外に逆の実装が多いです。つまりスイッチOFFにすると、そのスイッチの変数が1になる、という実装です。なんか逆だとややこしくなりそうですね。
先ほどと逆にして、スイッチをONにするとGP4ピンが0Vになるようにします。さらにスイッチOFFの時にGP4ピンが非接続状態にならないように5Vに接続します。こちらもスイッチONのときに電源がショートしないように抵抗を入れます。プルダウン抵抗のときと同じように考えてみてください。
この回路図に出てくる抵抗を「プルアップ抵抗」と呼びます。こちらも先ほどと同様に、スイッチOFFのとき電源のプラス側に引っ張っておく、という意味合いで「プルアップ」と呼びます。
ところで、このプルダウン/プルアップ抵抗はどのくらいの値にしたらよいのでしょうか。実はこの値、と決まっているわけではありません。ある回路図では1kオームだったり、他の回路図では10kオームぐらいだったりします。今回の回路では、10kオームとしました。特に理由はなく、自分の抵抗のストックをみたら10kオームがかなり余っていたためです。自作する回路でしたらだいたいの値で問題ないと思います。
それでは、今回はスイッチONのときGP4ピンが5V、OFFのとき0Vとなるように回路を作ってみます。ベース回路にスイッチを追加した回路は以下のようになります。
タクトスイッチの内部接続
今回はタクトスイッチ、というものを使用します。実物はこのようなものです。
なんかドアップで撮影したら、今にも歩き出しそうな感じになりました。
ピンの付き方に注意してください。タクトスイッチを上からみるとこのようになっています。ピンは1辺に2つ、向かい合う2辺に合計4つ付いています。
タクトスイッチ内部の配線ですが、通常はスイッチはOFFの状態で以下のように配線されています。
スイッチ部分を押すと、押している間だけ、以下のように配線が接続されます。
ブレッドボードに差すときはスイッチの向きに十分注意してくださいね。
ブレッドポードにスイッチ回路追加
さて、いよいよブレッドボード上に先ほどの回路図を作成していきます。今までひとつひとつの部品について、回路図からブレッドボードに組み立てていく手順を説明してきましたが、今回は是非自力で挑戦してみてください。以下に実装例を示しますが、この実装例が唯一の正解ではありません。他にもいろいろと実装方法があります。今回追加する部品はタクトスイッチと抵抗の2点です。この2点の配置を決めてから配線を考えるのか、GP4ピンに接続する配線をはじめに決めてしまうのか、いろいろ方法はあります。是非ご自分でいろいろと考えながら実装してみてください。実装に必要な知識は今までの説明にすべて入っていると思います。あと、一回で手戻りなく完成するのは難しいと思います。ぜひトライ&エラーで何度も試してみてください。
(センスのない)私は以下のように実装してみました。薄い紫部分が追加したところです。
なお、一点補足しておきます。今回追加したところに、ブレッドボードの隣同士の穴を接続するところがあります。
この接続は、他の配線のように被覆を残して配線を作るのはかなり難しいです。このような場合、以下の方法があります。
以前、ブレッドポードにセットする抵抗などの電子部品のリード線を切ったとき、余ったリード線はとっておいてありますでしょうか。あればそのリード線を使用します。なければ配線用の電線をまず2cmぐらい被覆を取って、その電線を切断して使用します。
このような線を準備したら、ラジオペンチで線の真ん中よりちょっと端よりをおさえます。
次に、長い方の線をラジオペンチの片側に巻き付けるように曲げます。
このように(不格好な)変なものができたと思います。これを使ってブレッドポードの隣同士の穴を接続します。
実際に実装した画像です。細部までわかるように撮影しましたので接続方法をご確認いただけると思います。
次回はスイッチを読み取って制御するプログラムを作成します。
更新履歴
日付 | 内容 |
---|---|
2015.9.22 | 新規投稿 |
2018.12.3 | 新シリーズ記事紹介追加 |