
押しボタンの入力回路に、なぜ抵抗を接続するのですか?
Arduino(アルドゥイー)のLESSON2やLESSON3にて、押しボタンスイッチ(タクトスイッチ)とArduino本体を接続する際に、抵抗を接続しています。
本記事は、この抵抗って何のために接続しているの?プルアップ抵抗、プルダウン抵抗ってなに?という方に向けたやさしい解説記事となっています。



回路図や配線図を使ってわかりやすく説明します。


せでぃあ
✅電験三種合格者
✅プライム企業に勤める電気・機械設計エンジニア
✅子供と一緒に電子工作を作り、2作品で発明くふう展受賞経験あり
✅本ブログにてArduinoビジュアルプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
- 「プルアップ」「プルダウン」回路が必要な理由
- 「プルアップ」「プルダウン」回路の違い
- 「プルアップ」「プルダウン」回路とプログラムの作り方
プルアップ・プルダウン回路が必要な理由
まずはじめに、スイッチ入力回路にてプルアップ・プルダウン回路は必ず必要となります。
必要な理由は、外部ノイズの影響による誤った入力信号検出を避けるためです。
プルアップ・プルダウン抵抗を使わないとどうなる?


上記がプルアップ・プルダウン抵抗を使わない回路例となります。
ボタンがONのときは、Arduino本体の入力ソケットに導通がある状態となり特に問題はありません。
一方でボタンがOFFのときはArduino本体の入力ソケットとボタンまでの配線で止まっている(浮いている)状態となり、外部ノイズの影響でArduino本体がボタンが押されたと誤認識するリスクが生じます。
この回路が浮いた状態を回避するために、ボタンが押されていないときでも「Vdd」または「GND」に接続させる回路がプルアップ・プルダウン回路になります。
プルアップ回路とプルダウン回路の違い


プルアップ回路
押しボタンがOFFのときに、Arduino本体入力ソケットに「Vdd(+5V)」を接続させる回路がプルアップ回路になります。
ここで接続される抵抗をプルアップ抵抗といい、Arduino本体に内蔵されています。
プルアップ回路では、押しボタン入力ON=入力信号OFFとなります。
プルダウン
押しボタンがOFFのときに、Arduino本体入力ソケットに「GND」を接続させる回路がプルダウン回路になります。
ここで接続される抵抗をプルアップ抵抗といいます。
プルダウン回路では、押しボタン入力ON=入力信号ONとなります。
プルアップ・プルダウン回路の作り方
押しボタンスイッチが押されたときに、LEDが点灯する回路を例にして説明します。
プルアップ・プルダウン回路ではLEDの点灯配線回路に違いはなく、押しボタンスイッチへの配線が異なります。
プルアップ回路の配膳図


プルアップ回路では、GND~押しボタンスイッチ~入力ソケットの直列配線となります。
プルアップ抵抗はArduino本体に内蔵されており、プログラム側でプルアップ入力として使用する指示をするだけでプルアップ抵抗を使用することができます。
プルダウン回路の配線図


プルダウン回路では、プルアップ抵抗を接続する必要があります。
プルダウン抵抗は1k~10kΩ程度が一般的のようです。
最低限の電子機器が含まれるキットはこちらです。
【おすすめ】モーターやLCDディスプレイ等を含むお買い得キットはこちら!


ドットディスプレイなど、さらにいろいろな電子機器に触れてみたいかたはこちら!


Arduinoキットについては、こちらの記事にて詳しく説明しています。
プルアップ・プルダウンプログラムの作り方
Arduino IDEプログラムの場合


pinMode関数の切り替えモード指定部にて、プルアップ・プルダウンどちらの回路として使うか指定できます。
- INPUT_PULLUP:プルアップ使用時
- INPUT:プルダウン使用時
プルアップ使用時のプログラムソースコード例
/* 作品名:PULLUP */
/* 作成者:せでぃあ https://cediablog.com */
/* プルアップ回路のプログラミング */
int LED_SOCKET = 5 ; //LEDの出力ソケット番号
int BTN_SOCKET = 8 ; //押しボタン入力ソケット番号
void setup() {
// put your setup code here, to run once: プログラム起動時1回だけ処理される回路
//入出力の割り当て
pinMode(LED_SOCKET, OUTPUT) ; //5番ソケットはLED点灯出力として使用
pinMode(BTN_SOCKET, INPUT_PULLUP) ; //8番ソケットは押しボタン入力(プルアップ)として使用
}
void loop() {
// put your main code here, to run repeatedly: プログラム起動後ループ処理される回路
if(digitalRead(BTN_SOCKET) == 0){ //押しボタンがONのとき
digitalWrite(LED_SOCKET , HIGH); //LEDを点灯させる
while(digitalRead(BTN_SOCKET) == 0){ //押しボタンがONのとき
delay(100); //0.1秒ウェイト回路をループさせる
}
}
else if(digitalRead(BTN_SOCKET) == 1){ //押しボタンがOFFのとき
digitalWrite(LED_SOCKET , LOW); //LEDを消灯させる
}
}
このプログラムは「押しボタンを押している間だけ、LEDが点灯する」回路になります。
押しボタンは8番ソケットに接続されており、プルアップ回路として使っています。
プルアップ回路では、押しボタン入力ON=入力信号OFFとなります。
配線図は前述しております。


スクラッチ「Scrattino3(スクラッチーノ3)」の場合


スクラッチプログラミングではArduinoのinputブロックにて「Pull-Up」「Pull-Down」どちらか選択するだけで、プルアップ・プルダウン選択ができます。
Arduino IDEと同様にプルアップ回路では、押しボタン入力ON=入力信号OFFとなります。
- Pull-Up:プルアップ使用時
- Pull-Down:プルダウン使用時
スクラッチプログラミング「Scrattino3(スクラッチーノ3)」については、以下の記事にて詳しく説明しています。
Arduino専用ブロックについては、以下の記事にて詳しく説明しています。
まとめ
- 入力信号を安定検出するために、プルアップ・プルダウン抵抗接続は必須
- プルアップはスイッチOFF時に信号ON、プルダウンはスイッチOFF時に信号OFFとなる回路
- Arduino本体にはプルアップ抵抗が内蔵されており、外部プルアップ抵抗配線を省略可能
押しボタン入力であれば、プルアップ・プルダウンどちらの回路でも問題なく動作させられます。
外部配線部品点数を削減できるプルアップ回路で構築することをおすすめします。



プルアップ回路ではスイッチON=信号OFFとなることに注意しよう
押しボタン入力回路を使った電子工作をこちらの記事で詳しく説明しています。
押しボタン回路を使ったLESSON記事はこちら!
最低限の電子機器が含まれるキットはこちらです。
【おすすめ】モーターやLCDディスプレイ等を含むお買い得キットはこちら!


ドットディスプレイなど、さらにいろいろな電子機器に触れてみたいかたはこちら!


コメント