匿名質問者

Arduino起動時、SSRが正常に動作しない。

ArduinoにSSRを接続して蛍光灯を点灯させているのですが、PCに繋いだ直後、本体のプログラムとは関係なくON/OFFが繰り返されているようです。日常使う場合にはとりあえず関係ありませんが、テストする時やAuduinoのリセットをかけた時、蛍光灯が何度もON/OFFするのは良くない気がします。これを改善する方法はありますか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/01/12 11:17:44

ベストアンサー

匿名回答2号 No.1

標準ブートローダーの仕様だと思いますので、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番ピンを使わないのが手っ取り早いでしょう。

匿名質問者

ありがとうございます!
色々な単語でググっても全く出てこなかったため仕様だと半分諦めていたのですが、12番ピンにすると完璧な動作を致しました。とても助かりました!!

2016/01/12 11:17:38
  • 匿名回答1号
    匿名回答1号 2016/01/11 11:23:50
    回路図と使っている部品の型式がわからないと 回答はつかないんじゃないかな。

    おそらく 回路の問題か ノイズの影響だとおもうけど...

  • 匿名質問者
    匿名質問者 2016/01/11 14:20:16
    コメントありがとうございます。

    リセットをかけると当たり前のように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);
    }
    }

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません