どうも、なかしーです。
僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。
>>なかしーの電子工作部
Arduinoにプルアップっていう機能があるみたいなんだけど、どんな時に使うの?
という疑問にお答えします。
電子工作でプルアップが必要な例は
- スイッチをArduinoに繋ぐとき
- I2C通信を使うとき
ArduinoでI2C通信をするときは、プルアップしないとデータの送信ができませんよ!
この記事では「Arduinoのプルアップ機能」について解説していきます。
動画でも解説しています!
プルアップとは?
プルアップは信号線に抵抗を通しておくことで、電位が不安定な状態を避けるために必要です。
必要性を実感しやすいのは、スイッチを使う時だと思います。
例えば、タクトスイッチの場合だとスイッチの状態に応じて接点が開閉します。
タクトスイッチを押すと5Vが入力されるようにしたとして、スイッチを押していないときの状態はどうなるのでしょうか?
実は0Vではなく、不安定な状態となります。
不安定な状態だとHIGHかLOWか正しく判断できず、誤作動する可能性があります。
上の写真は配線を浮かせた(何も繋いでいない)状態にし、プログラムを実行させています。
このとき、ArduinoがHIGHと判断し、LEDが点灯しています。
この不安定な状態を避けるために、抵抗を通して信号線に電源電圧を繋ぐのがプルアップです。
ArduinoのI2C通信でプルアップが必要な理由
I2C通信はマスタ(親)とスレーブ(子)で二本の通信線を使い、データの送受信を行います。
I2C通信で使うピンはタイミングに応じて入出力が切り替わります。
その回路はトランジスタを使ったオープンコレクタとなっています。
バッファー回路からの信号で入力を行い、オープンコレクタから出力を行います。
しかし、オープンコレクタはプルアップ抵抗がないとHIGH状態になりません。
I2C通信を使う時はArduinoのSCLピンとSDAピンにプルアップ抵抗が必要です。
Arduinoのプルアップ機能について
Arduinoには内部でプルアップ抵抗と繋いでくれる機能があります。
デジタルピンの入出力設定を行う時にpinMode関数にINPUTかOUTPUTを引数として渡すと思うんですが、INPUT_PULLUPを使うと内部のプルアップ抵抗が有効になります。
- INPUT
- OUTPUT
- INPUT_PULLUP
このプルアップ抵抗を使うことで、回路上の抵抗を省略することができます。
Arduinoのプルアップ機能を使ったプログラム
タクトスイッチとLEDをArduinoに繋ぎ、プログラムでプルアップを有効にしたプログラムを作りました。
#define SW 3
#define LED 2
void setup() {
pinMode(SW, INPUT_PULLUP);
pinMode(LED, OUTPUT);
}
void loop() {
if(digitalRead(SW) == 0) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}
Arduinoの内部でプルアップしているので、スイッチを押した時にGNDと繋がるようにしています。
Arduinoのプルアップ機能|まとめ
この記事では「Arduinoのプルアップ機能」について解説しました。
プルアップとは、不安定な状態になる信号線に抵抗を通して電源電圧などの高い電位に繋げることです。
不安定な状態をなくし、Arduinoの誤動作を防ぐことができます。
Arduinoには内部にプルアップ抵抗があり、pinMode関数でINPUT_PULLUPと指定してあげると有効にすることができます。
プルアップすると通常時がHIGHとなります。
スイッチを繋げる場合は、押した時にGNDへ繋がるようにしてください。
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoでできることを紹介【逆にできないことは何?】
当ブログで人気のArduino入門キット