极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14224|回复: 3

新人报到,第一个项目:DIY燃气报警器

[复制链接]
发表于 2016-11-28 21:48:04 | 显示全部楼层 |阅读模式
本帖最后由 睿奇爸爸 于 2016-11-28 22:03 编辑

接触arduino没多久,家里正好也需要一个天然气报警器,尝试着做了一个,本人菜鸟一个,请轻拍。

用到的模块:

Arduino nano 一块
MQ4 甲烷(天然气)浓度传感器 一块
有源蜂鸣器模块  一块
TM1637 LED模块 一块

废旧棉签盒子一个、5V旧手机充电器一个

想实现的功能是:利用MQ4 传感器 测得空气中甲烷的含量,超过设定值后,蜂鸣器报警。同时,TM1637模块始终显示MQ4测得的浓度模拟量

  1. /*
  2.   使用MQ4传感器,测试空气中甲烷(天然气)含量,如超过设定值,则蜂鸣报警!
  3.   MQ4甲烷传感器模引脚接A3,数字引脚接D4,蜂鸣器引脚接D5。
  4.   TM1637 LED模块  CLK引脚接 D2  DIO引脚接 D3
  5. */

  6. #include <TM1637Display.h>

  7. #define CLK 2 // 接TM1637 CLK引脚
  8. #define DIO 3 // 接TM1637 DIO引脚
  9. TM1637Display display(CLK, DIO); // 导入TM1637库

  10. const int PinAMQ4 = A3;// MQ4传感器模拟引脚

  11. const int PinMQ4 = 4; // MQ4传感器数字引脚

  12. const int PinBuz = 5; // 蜂鸣器引脚

  13. const int sensitivity = 180; //灵敏度设定

  14. const int threshold = 80; //阈值 (因为5V的手机充电器有波纹,加上也没有设计滤波函数,所以常态下有一个50~70之间的底噪,为了敏捷开发所以观察估算了一个阈值直接减去,请大家亲拍。实际使用后发现,MQ4的灵敏度非常高,这种简单的写法也没有出现误报和漏报。)

  15. const int delayBeeeBeee = 500; //长Beee的延时 (低浓度下的报警声延时)

  16. const int delayBeBeBe = 100;//急促Be的延时 (高浓度下的报警声延时)

  17. void setup() {
  18.   pinMode (PinAMQ4, INPUT);
  19.   pinMode (PinMQ4, INPUT);
  20.   pinMode (PinBuz, OUTPUT);
  21.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音 (我用的是低电平触发的蜂鸣器模块)
  22.   Serial.begin(9600);
  23.   display.setBrightness(5, true); // 打开显示,并设置亮度为5
  24. }

  25. void SerialPrint(int AMQ4, bool DMQ4) { // 串口输出(用于调试)
  26.   Serial.print(AMQ4);
  27.   Serial.print("   ");
  28.   Serial.println(DMQ4);
  29. }

  30. void BeeeeBeee() {
  31.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音 (我用的是低电平触发的蜂鸣器模块)
  32.   digitalWrite(PinBuz, LOW); //
  33.   delay(delayBeeeBeee);
  34.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音
  35.   delay(delayBeeeBeee);
  36. }

  37. void BeBeBeBe() {
  38.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音
  39.   digitalWrite(PinBuz, LOW); //
  40.   delay(delayBeBeBe);
  41.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音
  42.   delay(delayBeBeBe);
  43. }

  44. void loop() {

  45.   digitalWrite(PinBuz, HIGH); // 蜂鸣器静音
  46.   delay(100);

  47.   int AMQ4 = analogRead(PinAMQ4);// 读取传感器模拟量
  48.   bool DMQ4 = digitalRead(PinMQ4);// 读取传感器数字量
  49.   SerialPrint(AMQ4, DMQ4);// 串口输出(用于调试)

  50.   if (DMQ4) { // 如果 传感器数字量 没有报警
  51.     if (AMQ4 <= threshold) { // 同时 模拟量 小于 阈值
  52.       display.showNumberDec(0);// 数码管显示0
  53.       delay(200);
  54.     } else if (AMQ4 <= sensitivity) { // 模拟量 大于 阈值 小于 灵敏度
  55.       display.showNumberDec(AMQ4 - threshold); // 数码管显示(模拟量-阈值)
  56.       delay(200);
  57.     } else {// 模拟量 大于 灵敏度
  58.       display.showNumberDec(AMQ4 - threshold); // 数码管显示(模拟量-阈值)
  59.       BeeeeBeee();
  60.     }
  61.   } else { // 如果 传感器数字量 报警
  62.     if (AMQ4 <= threshold) { // 报警同时 模拟量 小于 阈值
  63.       display.showNumberDec(AMQ4); // 数码管显示(模拟量)
  64.       BeeeeBeee();
  65.     } else if (AMQ4 <= sensitivity) { // 模拟量 大于 阈值 小于 灵敏度
  66.       display.showNumberDec(AMQ4); // 数码管显示(模拟量)
  67.       BeeeeBeee();
  68.     } else {// 模拟量 大于 灵敏度
  69.       display.showNumberDec(AMQ4); // 数码管显示(模拟量)
  70.       BeBeBeBe();
  71.     }
  72.   }

  73. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-11-29 08:04:01 | 显示全部楼层
支持新人发帖
回复 支持 反对

使用道具 举报

发表于 2016-11-29 08:06:25 | 显示全部楼层
支持一个!很详细!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-8 07:39 , Processed in 0.040515 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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