ArduinoにSSRを接続して蛍光灯を点灯させているのですが、PCに繋いだ直後、本体のプログラムとは関係なくON/OFFが繰り返されているようです。日常使う場合にはとりあえず関係ありませんが、テストする時やAuduinoのリセットをかけた時、蛍光灯が何度もON/OFFするのは良くない気がします。これを改善する方法はありますか?
標準ブートローダーの仕様だと思いますので、13番ピン以外を使ってください。
http://www.musashinodenpa.com/arduino/ref/index.php?f=2&pos=207
Arduinoボードをリセットすると、まずブートローダが走ります。最初にブートローダはデジタルピン13にパルスを送ってLEDを点滅させ、ブートローダが正しく動作していることをユーザーに知らせます。
ブートローダーについてはこちらが詳しかったです。
http://www3.big.or.jp/~schaft/hardware/tips/bootloader/page001.html
ブートローダーを使わない事も可能なようですが、13番ピンを使わないのが手っ取り早いでしょう。
おそらく 回路の問題か ノイズの影響だとおもうけど...
リセットをかけると当たり前のようにLEDが始めチカチカして起動していましたので、Arduino全般に言えることかと思い細かい説明を省かせて貰っていました。
実際に使っている部品などは下記になります。
analog 5でフォトダイオードの電圧を読み取り、基準値で判断して100V(蛍光灯/LED電灯)のON/OFFをしています。
動作は、これとは無関係の電灯をON/OFFにすると、そこからの光をフォトダイオードが受け取り、遅延してON/OFFになる設計です。いきなり明るくなったり暗くなったりするのが嫌でこのような回路にしています。
なお、for (int i = 0; i <= 49; i++){で50回ほど回しているのは変な値が出たときの誤動作防止のつもりです。
また、実際の動作は、PCのUSBケーブルではなく、100VのUSB充電器に接続して動作させています。
Arduino UNO R3 MEGA328P CH340G
http://www.aliexpress.com/item/Free-shipping-high-quality-UNO-MEGA328P-CH340G-for-Arduino-Compatible-NO-USB-CABLE/1920902299.html
SSR
http://www.aliexpress.com/item/5V-1-Channel-High-Quality-SSR-Low-Level-Trigger-Solid-State-Relay-Module-Board-for-Arduino/32333718030.html?detailNewVersion=1
int on_off = 0; //0の時100Vが通電される(13番の出力は行われない)
void setup() {
Serial.begin(115200);
pinMode(13,OUTPUT) ; // LED接続のピン(13番)をデジタル出力に設定
digitalWrite(13,on_off);
}
void loop() {
int val;
int cnt = 0;
for (int i = 0; i <= 49; i++){
val = analogRead(5) ; // 5番を読み取る
if(val >= 400){
cnt++;
}
if(val <= 100){
cnt--;
}
Serial.print("val:");
Serial.println(val);
Serial.print("cnt:");
Serial.println(cnt);
delay(100);
}
if(cnt == 50){
Serial.println("Do subroutine LightON");
LightON();
}
if(cnt == -50){
Serial.println("Do subroutine LightOFF");
LightOFF();
}
Serial.println("");
delay(1000);
}
void LightON(){
if(on_off != 0){
Serial.println("LightON, delay 300s");
delay(300*1000);
on_off = 0;
digitalWrite(13,on_off);
}
}
void LightOFF(){
if(on_off != 1){
Serial.println("LightOFF, delay 30 sec");
delay(30*1000);
on_off = 1;
digitalWrite(13,on_off);
}
}