2017-10-29 6 views
0

私はArduinoを使い慣れていて、私は学校のプロジェクトに取り組んでいます。私は、火を検出し、光、動き、音の形でユーザーに直接フィードバックを与えることができるデバイスを作成しようとしています。サーボ、LED、ブザー付きデジタル炎センサー

私のコードでいくつかの問題が発生しています。私が達成したいのは、私のデバイスが、光(LED)と動き(サーボ)の形で火を検出したが、音ではないことを検出すると、私のデバイスが直接フィードバックを与えることです。

ピエゾブザーとLEDライトを除いてすべてが正常に機能しています。炎センサーが火を検出したが、LEDが輝いていないとき、サーボモーターは180度回転を開始します。なぜ私のledsが輝いているのかわかりません。私のコードに何か問題がありますか?ブザーの問題は、火炎センサーが火を検出したときにブザーを鳴らさなければならないということですが、15分後にのみ消灯します。今すぐそれはただちに消えます。また、サーボの遅延機能は、ピエゾブザーの持続時間に影響を与えるようです。私はそれをお互いに分けておきたいと思います。私は遅延機能を使っていますが、動作していないようです。私はmillis()関数を使用しなければならないことを知っていますが、遅延関数をmillisに変更する方法はわかりません。

コード:

#include <Servo.h> 
Servo myservo; 

const int servoPin = D8; // Servo pin op D8 
const int flamePin = D6; // Flame sensor pin op D6 
const int buzzerPin = D5; // Piezo buzzer op D5 
const int ledPin1 = D3; // Led licht 1 op D3 
const int ledPin2 = D7; // Led licht 2 op D7 
int Flame = HIGH; // De waarde HIGH wordt gekoppeld aan wanneer de vlam aan staat 

void setup() { 
    pinMode(flamePin, INPUT); // Flame sensor is input 
    myservo.attach(servoPin); // Servo is ouput 
    pinMode(buzzerPin, OUTPUT); //Piezo buzzer is output 
    pinMode(ledPin1, OUTPUT); //Led 1 is output 
    pinMode(ledPin2, OUTPUT); //led 2 is output 
} //setup 

void loop() { 
    Flame = digitalRead(flamePin); // Flame waarde wordt gekoppeld aan de waarde die de flamePin leest 
    if (digitalRead(flamePin) == HIGH) { // Wanneer de flame sensor vuur waarneemt 
    myservo.write(180); // Draait de servo 180 graden 
    delay(50); // Doet er 50ms over om naar de positie te komen 
    noTone(D5); 
    delay(50000); 
    tone(D5, 261, 50000); 
    digitalWrite(ledPin1, HIGH); //Led 1 gaat branden zodra vuur wordt waargenomen 
    digitalWrite(ledPin2, HIGH); //Led 2 gaat branden zodra vuur wordt waargenomen 
    } 

    else if (Flame == LOW){ // Wanneer de flame sensor geen vuur waarneemt 
    myservo.write(0); // Draait de servo niet 
    noTone(D5); 
    digitalWrite(ledPin1, LOW); //Led 1 staat uit 
    digitalWrite(ledPin2, LOW); //Led 2 staat uit 
    } 
}//loop 
+0

あなたがこれまでに試したこと、働いている/働いていないこと、やっていることなどを要約できますか?具体的な質問に答えることはできますが、プロジェクト全体を解決することはできません。 – roelofs

+0

こんにちは、ありがとうございました!ピエゾブザー以外はすべて正常に動作しています。火炎センサーが火を検出してLEDが点灯すると、サーボモーターは180度回転を開始します。問題は、炎センサーが火災を検出したときにブザーをオフにしなければならないが、10分後でなければならないということです。今すぐそれはただちに消えます。また、サーボの遅延機能は、ピエゾブザーの持続時間に影響を与えるようです。私はお互いから別々にしておきたいと思います。 –

+0

追加情報をありがとう!おそらくこの情報であなたの質問を更新(編集)するので、人々はコメントを読む必要はありませんか? – roelofs

答えて

1

millisは、あなたのボードが再起動してからの経過時間を返します。だから、15分が経過したことをどのように知っていますか?待っていた時間を覚えています。その時間の瞬間に15分を加えた時間をチェックします。

Soはブザー15分をトリガするために火災が検出された後:

火災検出 - >変数に格納現在のタイムスタンプ(ミリ秒())。それをstartTimeと名づけましょう。 がループしている場合は、現在の時刻(ミリ秒)が> = startTime + 900000かどうかを頻繁にチェックします。 ブザーを起動します。

コードに注ぐ方法がわかっています。

+0

コメントありがとう!私はそれを徹底的に調べます。多分あなたは別の問題で私を助けることができます。私はLEDがうまく動作していると思ったが、今日試してみると、火災感知器が火災を検出したときに作動していなかった。私は指導者に輝きを与えることはできません。コードに何か問題がありますか?私はまだ上記と同じコードを使用しています。 –

+0

@ YannickvanWieringen私はあなたの回路について何も知らない。まず第一に、LEDが正常かどうかチェックします。 – Piglet

関連する問題