【Arduino】プルアップ抵抗でスイッチを安定させる
Arduinoで最初に作ってみる回路はLEDをチカチカさせる回路、通称「Lチカ」です。次に試す回路はスイッチを押したらLEDが点灯する回路とかだと思います。
私が初めてスイッチを検知する回路を作ったときはスイッチを押していないのに勝手にONになったりOFFになったりを繰り返し、その原因が全然わかりませんでした。
この問題の原因はスイッチにプルアップ抵抗を取り付けていないためです。プルアップ抵抗とは電気回路中にスイッチを追加するときに必要になる抵抗です。
この記事では、プルアップ抵抗とはなにか?実際に回路にプロアップを組み込むにはどのようにやるのか、最後にArduinoのプルアップ抵抗を省略する方法を説明します。
プルアップ抵抗とは何か?
プルアップ抵抗とは簡単に言うと電気回路にスイッチを追加するときに必要になる抵抗です。
プルアップ抵抗を付けないとスイッチが入りの時は良いですが、切りの時に入力端子がHIからもLOからも絶縁されて電位がフラフラ動いてしまいます。このためスイッチを押していないのに勝手にスイッチONになったりします。
例えば、何も測っていないときのデジタルマルチメータの表示を見てみます。入力端子のHI側はどこにもつながっていないので+とーを行ったり来たりします。これと同じことがArudinoのスイッチにつながっている端子にも起こります。
このような端子電位のフラフラを解消するためにプルアップ抵抗を使います。プルアップ抵抗は下の図のようにスイッチのON、OFFを判断するINPUT端子と電源(ここでは5V)の間に設置します。
普通は上図のように端子の電位がHIならOFF、LOならONと設計します。スイッチがOFFの時はINPUTは5V(HI)になります。スイッチをONにするとINPUTはGNDと短絡するので0V(LO)になります。
これと逆にINPUTとGNDの間にプルアップ抵抗を接続し、INPUTと5Vの間にスイッチを接続する方法も考えられますが、これはあまり見ません。これはスイッチに5Vの線を直接接続しなければならないのでファイルセーフ等の観点から使われないのだと思います。
Arduinoを使った場合は次のようになります。ArduinoのA0端子がHIの時はOFF、LOの時はONです。
プルアップ抵抗には一般的に10kΩか100kΩを使います。レスポンス重視ならば10kΩ、消費電力重視ならば100kΩを使います。
上図はArduinoを例にしましたが、実はArduinoの場合には外付けのプルアップ抵抗を省略することができるので説明します。
Arduinoのプルアップ抵抗は省略可能
Arduinoにスイッチを追加する場合にはわざわざプルアップ抵抗を追加せずにIC内部の抵抗をプルアップ抵抗に使うことができます。
設定は簡単です。ピンの用途を定義するときに、下のように”PULLUP”を追加するだけです。
pinMode(A0, INPUT_PULLUP);
これでA0ピンは弱く5Vに接続されますので何も接続しなければA0は5Vになります。
これはArduinoの仕様と言うよりもArduinoのCPUのATMega328の機能です。同じようにNucleoのCPUのSTM32なども内部プルアップをすることができます。
スイッチ以外でも便利なプルアップ抵抗
Arduinoにスイッチをつけるときは必須のプルアップ抵抗ですが、スイッチ以外でも非常に便利です。
Arduinoで使える通信方式にI2Cという方式があり、この方式はSDA線とSCL線にプルアップ抵抗が必要なのですが、ArduinoでI2Cを使うとデフォルトでSDA線とSCL線のプルアップが有効になります。
意識せずに使っている人も多かったかもしれませんが、意外なところで内部プルアップが役に立っています。
まとめ
この記事ではプルアップ抵抗について書きました。プルアップ抵抗は重要な部品なので覚えておいてください。プルアップに使われるチップ抵抗器は1日に2億個も消費されているそうなので、プルアップの重要さがよくわかります。