|
刚刚开始玩Arduino。
使用MQ-5, LM35, 自制M8最小系统做了一个液化天然气报警器,外壳用了一个废弃的电源壳子。 - /*---------------------------------------------------
- / 适用于国产MQ-2,MQ-3,MQ4,MQ-5系列传感器使用
- / 模拟输入口对地电压和传感器输出电压值均有差异
- / 需要先测量,做精准测量环境需要有校准仪器做校准
- / -- By Shine
- /---------------------------------------------------*/
-
- int buzzer = 8; //定义各端口
- int d_sensor = 2;
- int a_sensor = A0;
- int temp = A1;
- int RledPin = 3;
- int YledPin = 4;
- float sensorValue = 0.0;
- float flag = (((50.0 * (0.1 / 20.0))/(5.0 / 1024.0)) + 22.0) - 3.0; //报警阀值按照空气中50ppm浓度有害气体做危险报警触发;
- //计算方式按模拟输入端电压每增加0.1V,浓度相应增加20ppm来换算;
- //实际使用的ATMEGA8板子的A0接地也有3.0数值,也就是3*0.00488的偏差电压;
- //在接上传感器后正常大气下A0有22.0数值稳定输出,此时假设为0ppm浓度。
-
-
- void Sensor_init(int dl){ //上电延迟25秒给Sensor加热丝加热,双灯闪烁做提示
-
- int i;
- for(i=0;i<dl;i++){
- digitalWrite(RledPin, HIGH);
- digitalWrite(YledPin, HIGH);
- delay(500);
- digitalWrite(RledPin, LOW);
- digitalWrite(YledPin, LOW);
- delay(500);
- }
-
- }
- void an_alert(){
- digitalWrite(RledPin, HIGH);
- digitalWrite(buzzer, HIGH);
- }
- void setup(){ //初始化MCU IO
-
- pinMode(RledPin, OUTPUT);
- pinMode(YledPin, OUTPUT);
- pinMode(buzzer, OUTPUT);
- pinMode(d_sensor, INPUT_PULLUP);
-
- Serial.begin(9600);
- Sensor_init(25);
-
- }
- void loop() { //循环业务代码
-
- if(digitalRead(d_sensor) == 0){ //MQ传感模块数字开关量提示,触发黄灯表示检测到有害存在
- delay(100);
- if(digitalRead(d_sensor) == 0){
- digitalWrite(YledPin, HIGH);
- }
- }else{
- digitalWrite(YledPin, LOW);
- }
-
- sensorValue = analogRead(a_sensor); //读取A0实时模拟量
- float vol = analogRead(temp) * (5.0 / 1024.0 * 100); //读取LM35实时温度
- if(vol <= 5.0){ //以下为不同温度时模拟信号补偿处理
- sensorValue = sensorValue / 2.0;
- }else if((vol <= 10.0)&&(vol > 5.0)){
- sensorValue = sensorValue / 1.8;
- }else if((vol <= 15.0)&&(vol > 10.0)){
- sensorValue = sensorValue / 1.6;
- }else if((vol <= 20.0)&&(vol > 15.0)){
- sensorValue = sensorValue / 1.3;
- }else if((vol <= 25.0)&&(vol > 20.0)){
- sensorValue = sensorValue / 1.0;
- }else if((vol <= 30.0)&&(vol > 25.0)){
- sensorValue = sensorValue / 0.8;
- }else if((vol <= 35.0)&&(vol > 30.0)){
- sensorValue = sensorValue / 0.6;
- }else if((vol <= 40.0)&&(vol > 35.0)){
- sensorValue = sensorValue / 0.5;
- }
- Serial.print(vol); //debug串口输出
- Serial.print("----");
- Serial.println(sensorValue);
-
- if(sensorValue >= flag){ //传感器模拟输出量报警阀值判断
- an_alert();
- }else{
- digitalWrite(RledPin, LOW);
- digitalWrite(buzzer, LOW);
- }
-
- }
-
-
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|