极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 37018|回复: 15

如何设计一个家庭防火报警系统

[复制链接]
发表于 2013-12-10 13:24:16 | 显示全部楼层 |阅读模式
      最近刚入手一块Arduino UNO R3,想设计一个家庭防火报警系统,有一个火焰传感器,MQ2烟雾传感器,一个红外热释传感器,一个蜂鸣器模块,现在可以单模块实现功能,求哪位大神指点一下如何多线程并发控制,多模块运行。
回复

使用道具 举报

发表于 2013-12-10 13:40:35 | 显示全部楼层
呃 我觉得arduino的多线程不好用,建议你还是轮询检查,避免中断吧
回复 支持 反对

使用道具 举报

发表于 2013-12-10 16:39:57 | 显示全部楼层
只要传感器管脚或地址不冲突,就将他们叠加起来,程序采用轮训方式,速度应该足够快的.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-10 16:58:34 | 显示全部楼层
zoologist 发表于 2013-12-10 13:40
呃 我觉得arduino的多线程不好用,建议你还是轮询检查,避免中断吧

代码如何写 是不得调用一些库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-10 16:59:38 | 显示全部楼层
林定祥 发表于 2013-12-10 16:39
只要传感器管脚或地址不冲突,就将他们叠加起来,程序采用轮训方式,速度应该足够快的.

有可以参考的实例么 推荐一两个 谢谢了 哈哈
回复 支持 反对

使用道具 举报

发表于 2013-12-10 20:59:58 | 显示全部楼层
黑天使NAZI 发表于 2013-12-10 16:58
代码如何写 是不得调用一些库

应该会调用其他库,然后轮询好了
回复 支持 反对

使用道具 举报

发表于 2013-12-11 08:42:23 | 显示全部楼层
黑天使NAZI 发表于 2013-12-10 16:59
有可以参考的实例么 推荐一两个 谢谢了 哈哈

程序分成两部分,setup loop把每一个已经试过的程序,将不同的部分按位子对号入座就行了.
回复 支持 反对

使用道具 举报

发表于 2013-12-11 08:46:20 | 显示全部楼层
黑天使NAZI 发表于 2013-12-10 16:59
有可以参考的实例么 推荐一两个 谢谢了 哈哈

单独的多跑通了,把他们一个模块硬件上叠加起来,看看硬件上是否有冲突,有冲突就调整,软件也相应变化,加入模块后再加入相应的程序.逐步叠加,调试就可以了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 20:21:52 | 显示全部楼层
林定祥 发表于 2013-12-11 08:42
程序分成两部分,setup loop把每一个已经试过的程序,将不同的部分按位子对号入座就行了.

我把我该的代码发给您 您给帮忙看一下行不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 20:22:33 | 显示全部楼层
林定祥 发表于 2013-12-11 08:46
单独的多跑通了,把他们一个模块硬件上叠加起来,看看硬件上是否有冲突,有冲突就调整,软件也相应变化,加入模 ...

我把我该的代码发给您 您帮我指导一下可以不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 20:23:26 | 显示全部楼层
林定祥 发表于 2013-12-11 08:42
程序分成两部分,setup loop把每一个已经试过的程序,将不同的部分按位子对号入座就行了.

我把我该的代码发给您 您给帮忙看一些行不 谢谢
回复 支持 反对

使用道具 举报

发表于 2013-12-14 21:46:23 | 显示全部楼层
黑天使NAZI 发表于 2013-12-14 20:22
我把我该的代码发给您 您帮我指导一下可以不

打包上次,我来试一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 22:26:46 | 显示全部楼层
林定祥 发表于 2013-12-14 21:46
打包上次,我来试一下。

您给个联系方式  我把现该的代码发给您 您给帮忙看下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 22:27:21 | 显示全部楼层
黑天使NAZI 发表于 2013-12-14 22:26
您给个联系方式  我把现该的代码发给您 您给帮忙看下

我的QQ:806002393
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-14 22:45:02 | 显示全部楼层
黑天使NAZI 发表于 2013-12-14 20:22
我把我该的代码发给您 您帮我指导一下可以不

#include <pt.h>//ProtoThreads必须包含的头文件
int flame = A0;
int mq = A1;
int Beep = 3;
int val = 0;
int val1 = 0;
int hw = 5;
int val3;
static int counter1, counter2, counter3, state1 = 0, state2 = 0, state3 = 0; //counter为定时计数器,state为每个灯的状态

static int protothread1(struct pt *pt) //线程1,控制灯1
{
  PT_BEGIN(pt);  //线程开始
  while (1) //每个线程都不会死
  {
    PT_WAIT_UNTIL(pt, counter1 == 1); //如果时间满了1秒,则继续执行,否则记录运行点,退出线程1
    val = analogRead(flame);
    Serial.print("flame=");
    Serial.println(val);
    delay(1000);
    if (val >= 500)
    {
      digitalWrite(Beep, LOW);
    }
    else
    {
      digitalWrite(Beep, HIGH);
    }
    counter1 = 0; //计数器置零
  }
  PT_END(pt); //线程结束
}


static int protothread2(struct pt *pt) //线程2,控制灯2
{
  PT_BEGIN(pt); //线程开始
  while (1) {   //每个线程都不会死
    PT_WAIT_UNTIL(pt, counter2 == 1); //如果时间满了5秒,则继续执行,否则记录运行点,退出线程2
    val1 = analogRead(mq);
    Serial.print("mq2=");
    Serial.println(val1);
    delay(1000);
    if (val1 >= 500)
    {
      digitalWrite(Beep, LOW);
    }
    else
    {
      digitalWrite(Beep, HIGH);
    }
    counter2 = 0; //计数清零
  }
  PT_END(pt);  //线程结束
}
static int protothread3(struct pt *pt) //线程1,控制灯1
{
  PT_BEGIN(pt);  //线程开始
  while (1) //每个线程都不会死
  {
    PT_WAIT_UNTIL(pt, counter3 == 1); //如果时间满了1秒,则继续执行,否则记录运行点,退出线程1
    val = digitalRead(hw); //将数字接口 7 的值读取赋给 val
    if (val == LOW) //当红外热释电传感器检测有信号时,LED 亮起
    {
      
      digitalWrite(Beep, HIGH);
      
    }
    else
    {
     digitalWrite(Beep, LOW);
    }
    counter3 = 0; //计数器置零
  }
  PT_END(pt); //线程结束
}

static struct pt pt1, pt2, pt3;
void setup()
{

  pinMode(Beep, OUTPUT);
  pinMode(hw, INPUT);
  Serial.begin(9600);
  PT_INIT(&pt1);  //线程1初始化
  PT_INIT(&pt2);  //线程2初始化
  PT_INIT(&pt3);  //线程2初始化
}

void loop () //这就是进行线程调度的地方
{
  protothread2(&pt2);  //执行线程2
  protothread1(&pt1);  //执行线程1
  protothread3(&pt3);  //执行线程1
  delay(10); //时间片,每片1秒,可根据具体应用设置大小
  counter1++;
  counter2++;
  counter3++;
}
这是我改的代码 红外热释传感器,烟火和MQ2烟雾传感器都可以实现 现在还有一个温湿度传感器和一个红外遥控器没有实现 红外遥控用来关闭蜂鸣器的报警声音  谢谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 00:28 , Processed in 0.039320 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表