💈
プルアップ・プルダウン抵抗の繋ぎ方
はじめに
スイッチなんてただ繋ぐだけと考えていたがそれだとうまくいかなかった
ON にすると 1 にはなるが OFF のとき不規則になってしまう
OFF のとき 0 にするにはプルダウン抵抗と呼ばれるものを添えなければならないらしい
また逆の OFF のとき 1 にするプルアップ抵抗というのもあるようだ
このあたりネットで図入りの解説記事が多く見つかったがいざ Arduino で配線しようとすると混乱するばかりだったので段階的な手順として自分用にまとめた
共通手順
- PIN を INPUT にする
- PIN の入力が不規則になっているのを確認する
(まわりのノイズの影響であまり不規則にならない場合もある)
プルダウン抵抗を使う場合
- Vdd → SW → PIN の順に繋ぐ
- PIN の入力が激しく不規則になるのを確認する
- SW ON で常時 1 になるのを確認する
- SW後に分岐して → R → GND の順に繋ぐ
- 不規則が静まって常時 0 になったのを確認する
プルアップ抵抗を使う場合
- Vdd → R → PIN の順に繋ぐ
- 不規則が静まって常時 1 になるのを確認する
- R後に分岐して → SW → GND の順に繋ぐ
- SW ON で 0 になるのを確認する
内蔵プルアップ抵抗を使う場合
- PIN を INPUT_PULLUP にする
- 不規則が静まって常時 1 になるのを確認する
- GND → SW → PIN の順に繋ぐ
- SW ON で 0 になるのを確認する
Arduino はプルアップ抵抗だけ内蔵している
SW ON で GND == PIN
になる
SW に Vdd は来ない
簡易まとめ
方法 | 配線1 | 配線2 | SW OFF | SW ON |
---|---|---|---|---|
プルダウン | Vdd → SW → PIN | SW後分岐 → R → GND | 0 | 1 |
プルアップ | Vdd → R → PIN | R後分岐 → SW → GND | 1 | 0 |
プルアップ(内蔵) | GND → SW → PIN | 1 | 0 |
確認用コード
void setup() {
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, digitalRead(2));
delay(1000 / 60);
}
- delay があると不規則な入力を見分けやすくなる
- 入力を13番の内部LEDに反映すると状況を把握しやすい
抵抗値の決め方
Arduinoの入門書では1KΩとだけ書かれてあってそれがどこから来た値なのかはわからなかった
ググってみると10KΩを使っている方もいた
TODO: そのうち理解できるようになったらかく
参照
Discussion