-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLPG_gasDetector.ino
143 lines (113 loc) · 2.51 KB
/
LPG_gasDetector.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
LPG GAS DETECTOR
# LED blue = ON #
# LED green = Safe #
# LED yellow = Alert #
# LED orange = Danger #
# LED red = Contaminated Area #
# ALARM 0 = On #
# ALARM 1 = Alert #
# ALARM 2 = Danger #
# ALARM 3 = Contaminated Area #
*/
int const PROGMEM SENSOR_GAS = A1; //ping GAS SENSOR
int const PROGMEM LED_ON = 8; //pin led ON
int const PROGMEM LED_GREEN = 7; //pin led GREEN
int const PROGMEM LED_YELLOW = 6; //pin led YELLOW
int const PROGMEM LED_ORANGE = 5; //pin led ORANGE
int const PROGMEM LED_RED = 4; //pino led RED
int const PROGMEM BUZZER = 3; //alarm BUZZER pin
int const PROGMEM T = 150; //delay time
int const PROGMEM H_FREQ = 1350; //high frequence song
int const PROGMEM L_FREQ = 1050; //low frequence song
int const PROGMEM CALL_A = 30; //trigger factor: ALERT
int const PROGMEM CALL_L = 50; //trigger factor: DANGER
int const PROGMEM CALL_V = 80; //trigger factor: CONTAMINATED AREA
int VOUT; //gas sensor output
/**
* Plays HIGH Frequency (H_FREQ)
*/
void play_H(){
tone(BUZZER, H_FREQ);
digitalWrite(BUZZER, HIGH);
delay(T);
noTone(BUZZER);
delay(T);
}
/**
* Plays LOW Frequency (L_FREQ)
*/
void play_L(){
tone(BUZZER, L_FREQ);
digitalWrite(BUZZER, HIGH);
delay(T);
noTone(BUZZER);
delay(T);
}
/**
* Alarm ON
*/
void alarm_0(){
play_L();
noTone(BUZZER);
digitalWrite(LED_ON, HIGH);
}
/**
* alarm ALERT
*/
void alarm_1(){
if(VOUT > CALL_A && VOUT <= CALL_L){
play_L();
play_H();
delay(2000);
}
else{
noTone(BUZZER);
}
}
/**
* alarm DANGER
*/
void alarm_2(){
if(VOUT > CALL_L && VOUT <= CALL_V){
play_L();
play_H();
play_L();
delay(500);
}
else{
noTone(BUZZER);
}
}
/**
* alarm CONTAMINaTED AREA
*/
void alarm_3(){
if(VOUT >= CALL_V){
play_L();
play_H();
}
else{
noTone(BUZZER);
}
}
void setup(){
pinMode(LED_ON, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_ORANGE, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(BUZZER, OUTPUT);
alarm_0();
}
void loop(){
VOUT = analogRead(SENSOR_GAS); //reading VOUT
VOUT = map(VOUT, 300, 750, 0, 100); //coverter A/D
digitalWrite(LED_GREEN, VOUT < CALL_A ? HIGH : LOW);
digitalWrite(LED_YELLOW, VOUT >= CALL_A && VOUT < CALL_L ? HIGH : LOW);
digitalWrite(LED_ORANGE, VOUT >= CALL_L && VOUT < CALL_V ? HIGH : LOW);
digitalWrite(LED_RED, VOUT >= CALL_V ? HIGH : LOW);
alarm_1();
alarm_2();
alarm_3();
}