こんにちは、メカ旦那です!
旦那~、Arduinoで電子工作してたらプルダウン、プルアップという言葉が出てきました…これ何ですか?…
プルダウン、プルアップは電子回路を安定させるためには不可欠です!解説しますね。
はじめに
プルダウン、プルアップは回路図を用いて説明されることが多いですが、初心者の方にはわかりにくいので、Arduino Unoを使って解説してみました。初心者キットはこちらを使っています。
「Arduinoって何?」という方はこちらを先にお読みください。「そんな時間ないよ!」という方はまとめだけでもお読みください!
プルダウンとは?
結論、プルダウンとは電子回路においてどの部品とも繋がらずHIGHかLOWか不明な状態を、意図的にLOWにすることです。逆に、プルアップはHIGHにすることです。
まずはプルダウンから説明しますね!
例えば、下図のようにArduino(マイコン)を使って、スイッチを押す間LEDが点灯する回路を作ります。Arduinoの3ピンでスイッチの信号を受け取り(入力ピン)、7ピンでLEDへ命令信号を送信します(出力ピン)。
/* ボタンを押している状態だけLED点灯、離したら消灯 */
void setup() {
pinMode(3, INPUT); //3ピンを入力ピンにする
pinMode(7, OUTPUT); //7ピンを出力ピンにする
}
void loop() {
if(digitalRead(3)== HIGH){ //もし3ピンがHIGHなら
digitalWrite(7,1); //7ピンをHIGHにする
}
else { //もし3ピンがLOWなら
digitalWrite(7,0); //7ピンをLOWにする
}
}
この時スイッチを押すと、入力ピンは5Vピンと回路ができ、HIGH(電位が5V) になります。
ここで、スイッチから指を離したら入力ピンはどうなるでしょうか。
入力ピンは5Vピンとの回路が切断されます。またGNDピンとも接続されていないため、状態が不明になってしまいます。迷子みたいになっちゃうわけですね。電子回路界隈では「浮いている」「開放」とも言います。
入力ピン(3ピン)の状態が不明だと、下記のようにif文の条件になっていた時、{}内の処理が上手く作動しなくなります。
if(digitalRead(3)== HIGH){ //もし3ピンがHIGHなら
digitalWrite(7,1); //7ピンをHIGHにする
}
else { //もし3ピンがLOWなら
digitalWrite(7,0); //7ピンをLOWにする
}
そこで、入力ピンを抵抗を通じてGNDと回路を作ることで、スイッチを押していない時はLOW(電位が0V)になるようにします。
このように 電子回路においてどの部品とも繋がらず電位が不明な際に、意図的にLOWにすることをプルダウンと言います。
この状態でボタンを押すと5 Vと回路ができ、入力ピンはHIGHとなります。つまり、ボタンを押した時はHIGH、押していない時はLOWとしっかり認識できるので、回路が上手く作動するんですね。
プルアップとは?
逆に5Vピンに接続し、 回路が切断されてもHIGHにすることをプルアップと言います。
プルアップにする場合は、先ほどの回路とは逆向きに電流を流す必要があります。つまり、下記のように回路を作り変える必要があります。
ただこのままだと、ボタンを押していない時に点灯し、押した時に消灯します。なんか違和感ありますよね。
そんな時はコードを書き換えればOKです。if文の条件をHIGHからLOWに変えます。
if(digitalRead(3)== LOW){ //もし3ピンがLOWなら
digitalWrite(7,1); //7ピンをHIGHにする
}
内部プルアップ機能
ここまでプルアップ、プルダウンについて説明してきましたが、実はある関数を使うことで抵抗を繋がなくてもプルアップにしてくれる便利な機能があります。
旦那~、それ最初から説明してよ!!
ごめんなさい(笑) いきなり内部プルアップの説明をすると分かりにくいので、まず基本から説明しました。ついでにこっちも覚えて回路を簡単にしちゃいましょう!
実はArduinoには最初から内部抵抗が組み込まれています。そのため抵抗を繋がなくても、各ピンを自動的にプルアップにしてくれます。これを内部プルアップ機能と言います。
この内部プルアップを有効にするにはpinMode関数で入力ピンをINPUT_PULLUPにします。
例えば今まで3ピンを入力ピンにする場合はpinMode(3,INPUT)でしたよね?このINPUTをINPUT_PULLUPにするだけです!
void setup() {
pinMode(3, INPUT_PULLUP); //3ピン内部プルアップを有効にする
pinMode(7, OUTPUT); //7ピンを出力ピンにする
}
「2. プルアップ」から抵抗を無くした回路に送信すると無事点灯しました。
まとめ
まとめると、
になります。
ぜひ覚えておきましょう!
コメント