极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17011|回复: 12

DIY的带一定温补的简易液化天然气报警器

[复制链接]
发表于 2015-3-10 23:16:04 | 显示全部楼层 |阅读模式
刚刚开始玩Arduino。
使用MQ-5, LM35, 自制M8最小系统做了一个液化天然气报警器,外壳用了一个废弃的电源壳子。

  1. /*---------------------------------------------------
  2. /        适用于国产MQ-2,MQ-3,MQ4,MQ-5系列传感器使用
  3. /        模拟输入口对地电压和传感器输出电压值均有差异
  4. /        需要先测量,做精准测量环境需要有校准仪器做校准       
  5. /                                                                -- By Shine
  6. /---------------------------------------------------*/
  7.        
  8. int buzzer = 8;                        //定义各端口
  9. int d_sensor = 2;
  10. int a_sensor = A0;
  11. int temp = A1;
  12. int RledPin = 3;
  13. int YledPin = 4;
  14. float sensorValue = 0.0;
  15. float flag = (((50.0 * (0.1 / 20.0))/(5.0 / 1024.0)) + 22.0) - 3.0; //报警阀值按照空气中50ppm浓度有害气体做危险报警触发;
  16.                                                                                                                                         //计算方式按模拟输入端电压每增加0.1V,浓度相应增加20ppm来换算;
  17.                                                                                                                                         //实际使用的ATMEGA8板子的A0接地也有3.0数值,也就是3*0.00488的偏差电压;
  18.                                                                                                                                         //在接上传感器后正常大气下A0有22.0数值稳定输出,此时假设为0ppm浓度。
  19.                                                                                                                                        
  20.                                                                        

  21. void Sensor_init(int dl){                                                                                        //上电延迟25秒给Sensor加热丝加热,双灯闪烁做提示
  22.   
  23.   int i;
  24.   for(i=0;i<dl;i++){
  25.     digitalWrite(RledPin, HIGH);
  26.     digitalWrite(YledPin, HIGH);
  27.     delay(500);
  28.     digitalWrite(RledPin, LOW);
  29.     digitalWrite(YledPin, LOW);
  30.     delay(500);
  31.   }
  32.   
  33. }  

  34. void an_alert(){
  35.   digitalWrite(RledPin, HIGH);
  36.   digitalWrite(buzzer, HIGH);
  37. }  

  38. void setup(){                                                                //初始化MCU IO
  39.   
  40.   pinMode(RledPin, OUTPUT);
  41.   pinMode(YledPin, OUTPUT);
  42.   pinMode(buzzer, OUTPUT);
  43.   pinMode(d_sensor, INPUT_PULLUP);
  44.   
  45.   Serial.begin(9600);
  46.   Sensor_init(25);
  47.   
  48. }

  49. void loop() {                                                                //循环业务代码
  50.   
  51.     if(digitalRead(d_sensor) == 0){                        //MQ传感模块数字开关量提示,触发黄灯表示检测到有害存在
  52.       delay(100);
  53.       if(digitalRead(d_sensor) == 0){
  54.         digitalWrite(YledPin, HIGH);
  55.       }
  56.     }else{
  57.       digitalWrite(YledPin, LOW);
  58.     }
  59.    
  60.     sensorValue = analogRead(a_sensor);                                         //读取A0实时模拟量
  61.     float vol = analogRead(temp) * (5.0 / 1024.0 * 100);        //读取LM35实时温度
  62.     if(vol <= 5.0){                                                                                        //以下为不同温度时模拟信号补偿处理
  63.       sensorValue = sensorValue / 2.0;
  64.     }else if((vol <= 10.0)&&(vol > 5.0)){
  65.       sensorValue = sensorValue / 1.8;
  66.     }else if((vol <= 15.0)&&(vol > 10.0)){
  67.       sensorValue = sensorValue / 1.6;
  68.     }else if((vol <= 20.0)&&(vol > 15.0)){
  69.       sensorValue = sensorValue / 1.3;
  70.     }else if((vol <= 25.0)&&(vol > 20.0)){
  71.       sensorValue = sensorValue / 1.0;
  72.     }else if((vol <= 30.0)&&(vol > 25.0)){
  73.       sensorValue = sensorValue / 0.8;
  74.     }else if((vol <= 35.0)&&(vol > 30.0)){
  75.       sensorValue = sensorValue / 0.6;
  76.     }else if((vol <= 40.0)&&(vol > 35.0)){
  77.       sensorValue = sensorValue / 0.5;
  78.     }  
  79.     Serial.print(vol);                                //debug串口输出
  80.     Serial.print("----");
  81.     Serial.println(sensorValue);

  82.     if(sensorValue >= flag){                //传感器模拟输出量报警阀值判断
  83.        an_alert();
  84.     }else{
  85.       digitalWrite(RledPin, LOW);
  86.       digitalWrite(buzzer, LOW);
  87.     }
  88.    
  89. }





  90.   
复制代码


本帖子中包含更多资源

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

x

评分

参与人数 1 +1 +1 +1 收起 理由
lawrencedon + 1 + 1 + 1 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2015-3-11 07:12:23 | 显示全部楼层
不错,学习了。
回复 支持 反对

使用道具 举报

发表于 2015-3-11 11:42:15 | 显示全部楼层
谢谢共享,来学习了
回复 支持 反对

使用道具 举报

发表于 2015-3-28 20:02:28 | 显示全部楼层
外壳选的不错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-28 20:10:09 | 显示全部楼层
zxca112 发表于 2015-3-28 20:02
外壳选的不错

我自己也这么觉得
回复 支持 反对

使用道具 举报

发表于 2015-3-29 07:20:22 来自手机 | 显示全部楼层
if语句可否用switch实现呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-29 09:48:35 | 显示全部楼层
li23108 发表于 2015-3-29 07:20
if语句可否用switch实现呢?

可以用,不过switch只能处理整型和布尔型数据哦。我这里处理的是float型数据,所以不好用switch
回复 支持 反对

使用道具 举报

发表于 2015-3-31 22:31:11 | 显示全部楼层
本帖最后由 li23108 于 2015-3-31 22:37 编辑
HuaShine2015 发表于 2015-3-29 09:48
可以用,不过switch只能处理整型和布尔型数据哦。我这里处理的是float型数据,所以不好用switch


受教了,还有个问题要请教你,我想用硬盘录像机485输出的代码控制灯 ,代码我抓取了,大概有8个字节地址和执行码,和8个地址和停止码,  arduino这里如何处理呢?,,,只要获取到地址码就开灯,不理会停止码,多字节就不会了。请赐教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 09:31:43 | 显示全部楼层
li23108 发表于 2015-3-31 22:31
受教了,还有个问题要请教你,我想用硬盘录像机485输出的代码控制灯 ,代码我抓取了,大概有8个字节 ...

可以参考Auduino IDE的示例程序,Communication-->SerialEvent
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-3 09:32:31 | 显示全部楼层
li23108 发表于 2015-3-31 22:31
受教了,还有个问题要请教你,我想用硬盘录像机485输出的代码控制灯 ,代码我抓取了,大概有8个字节 ...

可以参考Auduino IDE的示例程序,Communication-->SerialEvent
回复 支持 反对

使用道具 举报

发表于 2015-4-3 19:19:33 | 显示全部楼层
本帖最后由 li23108 于 2015-4-3 19:44 编辑
HuaShine2015 发表于 2015-4-3 09:32
可以参考Auduino IDE的示例程序,Communication-->SerialEvent


谢谢指导,和接受字符串原理差不多,但是我始终没弄明白,遇到换行符,为一句的结束,那么如何输入换行符给arduino呢?
arduino串口监视器如何操作呢?

刚才试验了下 串口助手可以,,16进制发送0x38  0x0a  对应ACSII  为8  和换行
串口收到的38 0A 0D 0A     其中0A 0D 0A是对应ACSII中的回车和换行对吧

就是没弄明白arduino调试器中的串口监视器如何操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-5 19:00:20 | 显示全部楼层
li23108 发表于 2015-4-3 19:19
谢谢指导,和接受字符串原理差不多,但是我始终没弄明白,遇到换行符,为一句的结束,那么如何输入换行 ...

实例中的'\n'可以用任意符合ASCII规范的符号代替,这个只是上位机告诉下位机传输完毕的一个协议。
串口调试助手支持字符串直接输入
回复 支持 反对

使用道具 举报

发表于 2015-4-12 23:02:09 | 显示全部楼层
谢谢共享,来学习。。。。。。。。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 13:43 , Processed in 0.041424 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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