本格的にArduino > スイッチを読み取る

プルアップの回路

imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
スイッチがOFFの時はAの電圧がHIGHになる。
スイッチがONの時はAの電圧がLOWになる。

プルダウンの回路

imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
スイッチがOFFの時はAの電圧がLOWになる。
スイッチがONの時はAの電圧がHIGHになる。

消費電力

通常状態でスイッチがOFFの場合はプルダウンの回路の方が消費電力が少ない。
通常状態でスイッチがONの場合はプルアップの回路の方が消費電力が少ない。
まあ気にすることはないと思うけど。

AVR内蔵のプルアップ抵抗を使える?

digitalWrite(pin, HIGH);
でプルアップされるようです。
imageプラグインエラー : 画像を取得できませんでした。しばらく時間を置いてから再度お試しください。
抵抗1つ省略できるので便利。


抵抗値は?

プルアップの場合

mega168のデータシートによるとAVR内蔵のプルアップ抵抗は20K-50Kだそうだ。
  • 電圧を測定する部分の抵抗値(=A)より十分小さい
  • スイッチがONになってGNDに接続されても電流が多すぎない
という抵抗値である必要があるわけだから100Kではたぶん大きすぎ、1Kでは5Vで5mA。
1Kから20Kぐらいの間で適当に選べばよさそうかな。

プルダウンの場合

  • スイッチがONになってGNDに接続されても電流が多すぎない
  • 十分しっかりGNDに引っ張れる値
と考えると、何オーム?

内蔵プルアップでのスケッチ

int ledPin   = 13;
int inputPin = 2;

void setup() {
 pinMode(ledPin,   OUTPUT);
 pinMode(inputPin, INPUT);
 digitalWrite(inputPin, HIGH); // pull-up
}

void loop(){
 int in = digitalRead(inputPin);
 if(in==HIGH){
   digitalWrite(ledPin, LOW);  //LED OFF
 } 
 else{
   digitalWrite(ledPin, HIGH); //LED ON
 }
}

チャタリング防止

チャタリング防止のライブラリがある。
http://www.arduino.cc/playground/Code/Debounce
zipをダウンロードしてarduinoのインストール先のhardware/libraries/Debounceに展開する。

#include <Debounce.h> // http://www.arduino.cc/playground/Code/Debounce
int SW_YELLOW = 3;
int SW_GREEN  = 2;
Debounce sw_yellow = Debounce(20, SW_YELLOW); 
Debounce sw_green  = Debounce(20, SW_GREEN); 
void setup() {
 Serial.begin(9600);
 pinMode(SW_YELLOW, INPUT);
 pinMode(SW_GREEN,  INPUT);
 digitalWrite(SW_YELLOW, HIGH); // pull-up
 digitalWrite(SW_GREEN,  HIGH); // pull-up
}
void loop(){
 if(sw_yellow.update() && sw_yellow.read()==LOW) {
   yellow_count++;
   Serial.print("yellow_count=");
   Serial.println(yellow_count);
 }
 if(sw_green.update() && sw_green.read()==LOW) { // digitalRead(SW_GREEN)==LOW
   green_count++;
   Serial.print("green_count=");
   Serial.println(green_count);
 }
}

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年05月15日 15:59
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。