带伺服,LED和蜂鸣器的数字火焰传感器

时间:2017-10-29 23:57:22

标签: arduino

我是Arduino的新手,我正在为学校做项目。我正在尝试创建一种可以检测火灾的设备,并以光,动作和声音的形式向用户提供直接反馈。

我的代码遇到了一些问题。我想要实现的是,我的设备在检测到光线(LED)和移动(伺服)时会发出直接反馈,但不会发出声音。

除压电蜂鸣器和LED灯外,一切正常。当火焰传感器检测到火灾但LED没有发光时,伺服电机开始转动180度。我不太明白为什么我的LED不闪亮..我的代码有什么问题。另外,蜂鸣器的问题是当火焰传感器检测到火灾时蜂鸣器必须熄灭但仅在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

1 个答案:

答案 0 :(得分:1)

millis将返回自主板重启后经过的时间。所以你怎么知道15分钟过去了?你记得你开始等待的时间,并且不时检查那段时间加上15分钟是否过去了。

因此,为了在发现火灾后15分钟触发蜂鸣器:

检测到火灾 - &gt;将当前时间戳(millis())存储在变量中。我们将它命名为startTime。 在循环中经常检查当前时间(millis())是否> = startTime + 900000。 如果是这样,启动蜂鸣器,否则继续检查您的火灾传感器输入是否为低电平。

我确定你知道怎么把它倒进代码中!