【図解】プルダウン抵抗とプルアップ抵抗の違いとは?Arduinoボタン回路の基礎をやさしく解説
執筆:Taron Foxworth(タロン・フォックスワース)
Arduinoにボタンを接続したことがある方なら、必ず一度は目にしたことのある回路図があるはずです。

初めて見たとき、多くの人が戸惑います。筆者も当初はこう思っていました。「なぜわざわざ抵抗が必要なんだろう? ボタンが押されているかどうかを教えてくれるだけでいいのに」と。
いろいろと調べましたが、シンプルに理解できる解説は見つかりませんでした。そこで本記事では、プルダウン抵抗とプルアップ抵抗の仕組みを、できるだけ平易な言葉で解説していきます。
ボタン回路では何が起きているのか

図1
ボタン(スイッチとも呼ばれます)の内部では、配線が「H」字型に配置されています。しかし中央部分はつながっておらず、ボタンを押すまで回路は導通しません。
本来やりたいのは、何も押されていないときにはArduinoから0を読み取り、ボタンが押されたときには1を読み取ることです。
Arduinoでは、このような入出力ピンのことをGPIO(General Purpose Input Output:汎用入出力)と呼びます。
そこで、まずは次のような回路を考えてみましょう。

図2
回路の左側に電源(5V、3.3V、またはVCC)を接続します。これで、ボタンを押せばGPIOは1を読み取るはずです。一見、うまくいったように見えますね。
実はこれだけでは不十分

図3
しかし、本当にそれで良いのでしょうか? 図2をもう一度よく見てみましょう。

図2(再掲)
私たちが望んでいたのは「何も押されていないときには0になる」ことでした。しかしこの回路では、GPIOが確実に0になるとは保証できません。
空中にはさまざまな電磁波(ノイズ)が飛び交っており、これらがGPIOを0や1に引きずり込むことがあります。最悪の場合、両者の間で値が不安定に揺れ続けることもあります。この状態では、論理的な0(ロジック0)であると確信することはできません。
GNDに接続すれば解決?
論理的な0を得る一つの方法は、ピンをGND(グランド)に接続することです。

これで確実にロジック0になりました。そしてボタンを押している間は1になる……はずですよね?
残念ながら、そう簡単にはいきません。

実はこの回路、ボタンを押した瞬間に短絡(ショート)を起こしてしまいます。電源とGNDが直接つながるため、過大な電流が流れて回路が破損する恐れがあるのです。
ここで抵抗の出番です
短絡を避けるためには、回路に適切な抵抗を追加する必要があります。抵抗が入ることで、電流の流れがコントロールされます。

電気には「抵抗の小さい経路を通ろうとする」という性質があります。そのため、ボタンを押したとき、電流は抵抗を経由してGPIOへ向かい、GPIOは正しく1を記録します。


これでようやく、期待どおりに動作する回路になりました!
今度は逆パターン:プルアップ抵抗
続いて、プルアップ抵抗について見てみましょう。考え方は同じですが、動作が逆になります。ボタンが押されていないとき、GPIOは1を記録し、ボタンを押すとGPIOは0になります。
ボタンが押されていない状態では、GPIOは電源(VCC)に接続されています。そのため、電流がGPIO側へ引き上げられ(プルアップされ)、GPIOは論理的な1を示します。

ここで重要なポイントがあります。電気は常にGND(グランド)へ向かおうとするという性質です。したがって、ボタンを押すと、流れていた電流はGNDへ逃げていきます。すると、GPIOに向かうはずだった電流も一緒に流れてしまうため、GPIOは論理的な0になります。

まとめ
- プルダウン抵抗: 通常時はGPIOをGND側に引き下げて
0を保ち、ボタン押下時に1を読み取る - プルアップ抵抗: 通常時はGPIOを電源側に引き上げて
1を保ち、ボタン押下時に0を読み取る
どちらの方式でも、抵抗を介することで短絡を防ぎながら、GPIOの状態を安定させることができます。
なぜこの記事を書いたのか
筆者は2016年9月にLosantに入社しましたが、当時はハードウェアの経験が一切ありませんでした。ところが、どのハードウェアスターターキットにもボタンは付属しているのに、この概念についての説明はどこにもありませんでした。この記事が、読者の皆さんの「なるほど!」というひらめきのきっかけになれば幸いです。
本記事はほんの入り口にすぎません。さらに深く学びたい方は、以下のリソースも参考にしてください。
Pull-up Resistors – learn.sparkfun.com
プルアップ抵抗の抵抗値が大きくなるほど、ピンの応答速度が遅くなるといった実践的なポイントについても解説されています。
フィードバックは大歓迎です。改善点があればぜひお知らせください。内容に誤りがあれば、遠慮なくご指摘ください! より多くの方にとって分かりやすい記事にしていきたいと思っています。
無料でプログラミングを学ぼう。freeCodeCampのオープンソースカリキュラムは、これまでに40,000人以上の方々の開発者への就職を支援してきました。
-
Macのターミナルからホームディレクトリを開く方法|openコマンドの使い方
通常、ターミナルを起動すると、カレントディレクトリは /Users/UserName になっています。しかし、作業によってはMacのホームディレクトリそのものをFinderで開きたい場面もあります。 Macのホームディレクトリを開くには、ターミナルを起動して、次のコマンドを実行するだけです。 open ~ ホームディレクトリ内の各フォルダを開く デフォルトでは、ホームディレクトリから以下のフォルダにアクセスできます。 アプリケーション(Application) 書類(Documents) ムービー(Movies) ミュージック(Music) ピクチャ(Pictures) デスクトップ(De
-
Microsoft Exchange MRSとは?メールボックスの移行と復元の仕組みを徹底解説
Microsoft Exchange メールボックス レプリケーション サービス(MRS)は、Exchange Server におけるメールボックスのインポート、エクスポート、移行、復元の各リクエストを処理するコア機能です。MRSは、ソース データベースから宛先データベースへメールボックスを移動させるための主要なメカニズムとして機能します。 メールボックスの移動は、同一サーバー上のデータベース間だけでなく、異なるサーバー、異なるドメイン、異なる Active Directory(AD)サイト、さらには異なる AD フォレスト間でも実行可能です。 管理者は Exchange 管理シェルや Exc