こんばんは。
お父ラボ(お父Lab.)です。
金魚水槽の自動水換え装置を目標にプログラミング学習を始めました。
まずはアルディーノ(ARDUINO)でプログラミング・電子工作を学びます。
初めてのプログラミングです。
今回はスイッチのON /OFFでLEDの点滅パターンを変えます。
作成したプログラムは一番下に残しておきます。
プログラム自体はすんなり理解出来たのですが、疑問点が2つ出来ました。
疑問点1 前回作った直列回路と、抵抗器の位置が違う?
前回は5V側に抵抗器、GND側にLEDでした。
結論は順序はどちらでも良いようです。
直列回路の抵抗Ωは、回路内の抵抗Ω1とΩ2の和で表現出来るので、
LEDと抵抗器はどちらを先に置いても、流れる電流は変わらないということのようです。
疑問点2 スイッチ直近の抵抗器は何?
これは2つの意味がありました。
1つ目は5V電圧が直接GNDに流れないようにする為です。
5V電圧とGNDの間に抵抗が無いと、非常に大きな電流がGNDに流れ込みます。
V=IRの式で、R≒0となるとI≒∞となり、故障の原因になります。
2つ目は信号のHIGH /LOWを明確にする為です。
電気信号はHIGHかLOWである方が安定で、MID HIGH?みたいな状態は
不安定で、誤作動の原因になるそうです。
そこで、抵抗器を介して、INPUTがGNDと常に接続させることで、
不安定な電圧を強制的にLOWにさせることができるらしい。
因みにこの役割を持つ抵抗器を「プルダウン抵抗」といいます。
逆HIGH状態をデフォルトとして、スイッチが入ればLOWにする為に使う抵抗器を
「プルアップ抵抗」と言います。
ここで仮説が立ちました。
今回の回路レイアウトを変えてプルアップ抵抗に置き換えれば、
同じプログラムで逆の動作をするのでは無いか?
ということで試してみました。
結果、思った通りに動いてくれましたよ!
プログラムの内容を変えても、回路のレイアウトを変えても意図した動きをしてくれそうです。
仮説通りに物事がうまく行ったときって快感ですよね♫
それではまた次回!
今回のプログラム
int switchState = 0;
void setup() {
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(2,INPUT);
// 住所を決める。
}
void loop() {
switchState = digitalRead(2);
if(switchState == LOW){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
// 条件分け インプットがLOWなら
}
else{
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(500);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
delay(500);
// 条件分けインプットがHIGHなら
}
}

