Cảm biến lửa YG1006?

Tài liệu học tập môn "Kỹ thuật cơ khí động lực" tại trường " Học viện kỹ thuật quân sự" với nội dung "Cảm biến lửa YG1006?" giúp bạn học tập, ôn luyện và đạt điểm cao!

1. Cảm biến lửa YG1006
int warnPin = 10; // loa,den ket noi Pin 10
int button=2; // button ket noi Pin 2
int flame_din=9; // Dout ket noi Pin 9
int flame_ain=A0; // Aout ket noi Pin A0
int ad_value; // bien luu gia tri adc
int button_value; // bien luu trang thai button
void setup() {
pinMode(flame_din,INPUT); // set Input
pinMode(flame_ain,INPUT); // set Input
pinMode(warnPin,OUTPUT); // set Output
pinMode(button,INPUT); // set Input
Serial.begin(9600); // ket noi UART, baud = 9600
}
void loop() {
ad_value=analogRead(flame_ain); // doc gia tri adc
if(digitalRead(flame_din)==LOW) // so sanh vs LOW, neu = thong bao co
lua, den va loa bat
{
Serial.println("CO LUA");
Serial.println(ad_value);
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
digitalWrite(warnPin,HIGH);
}
button_value = digitalRead(button); // doc trang thai button
if(button_value==HIGH) // nhan button
{
while(button_value == HIGH) // doi phim nha
{
button_value = digitalRead(button);
}
digitalWrite(warnPin,LOW); // tat loa va den
Serial.println("BINH THUONG"); // thong bao binh thuong
}
}
2. Cảm biến khí gas MQ2
#define Threshold 400
#define MQ2pin 0
float sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ2 warming up!");
delay(20000); // allow the MQ2 to warm up
}
void loop() {
sensorValue = analogRead(MQ2pin); // read analog input pin 0
Serial.print("Sensor Value: ");
Serial.print(sensorValue);
if(sensorValue > Threshold)
{
Serial.print(" | Smoke detected!");
}
Serial.println("");
delay(2000); // wait 2s for next reading
}
3. LCD 1602
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0X27,16,2); //SCL A5 SDA A4
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
int num=0;
void setup()
{
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.setCursor(2,0);
lcd.print("DIEN TU DAT");
lcd.setCursor(0,1);
lcd.print("Dem so : ");
lcd.setCursor(10,1);
lcd.print(num);
num++;
if(num>=10){num=0;}
delay (1000);
lcd.clear();
}
4. Cảm biến PIR
int ledPin = 13; // chọn chân 13 báo hiệu LED
int inputPin = 2; // chọn ngõ tín hiệu vào cho PIR
int pirState = LOW; // Bắt đầu với không có báo động
int val = 0;
int pinSpeaker = 10; //chọn chân cho chuông khi có đột nhập
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(pinSpeaker, OUTPUT);
Serial.begin(9600);
}
void loop()
{
val = digitalRead(inputPin); // đọc giá trị đầu vào.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
if (val == HIGH) // nếu giá trị ở mức cao.(1)
{
digitalWrite(ledPin, HIGH); // LED On
playTone(300, 160); // thời gian chuông kêu
delay(150);
if (pirState == LOW)
{
Serial.println("Motion detected!");
pirState = HIGH;
}
}
else
{
digitalWrite(ledPin, LOW);
playTone(0, 0);
delay(300);
if (pirState == HIGH)
{
Serial.println("Motion ended!");
pirState = LOW;
}
}
}
void playTone(long duration, int freq)
{
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration)
{
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
}
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
5. Đèn giao thông
int carRed = 12; //assign the car lights
int carYellow = 11;
int carGreen = 10;
int button = 9; //button pin
int pedRed = 8; //assign the pedestrian lights
int pedGreen = 7;
int crossTime =5000; //time for pedestrian to cross
unsigned long changeTime;//time since button pressed
void setup() {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT);
digitalWrite(carGreen, HIGH); //turn on the green lights
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
//check if button is pressed and it is over 5 seconds since last button press
if(state == HIGH && (millis() - changeTime)> 5000){
//call the function to change the lights
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW); //green off
digitalWrite(carYellow, HIGH); //yellow on
delay(2000); //wait 2 seconds
digitalWrite(carYellow, LOW); //yellow off
digitalWrite(carRed, HIGH); //red on
delay(1000); //wait 1 second till its safe
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
digitalWrite(pedRed, LOW); //ped red off
digitalWrite(pedGreen, HIGH); //ped green on
delay(crossTime); //wait for preset time period
//flash the ped green
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
digitalWrite(pedRed, HIGH);//turn ped red on
delay(500);
digitalWrite(carRed, LOW); //red off
digitalWrite(carYellow, HIGH); //yellow on
delay(1000);
digitalWrite(carYellow, LOW); //yellow off
digitalWrite(carGreen, HIGH);
changeTime = millis(); //record the time since last change of lights
//then return to the main program loop
}
6. Hệ thống đếm người trong lớp học
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#define in 14
#define out 17
#define relay 3
int count=0;
void IN()
{
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
count++;
lcd.clear();
lcd.print("SO NGUOI:");
lcd.setCursor(0,1);
lcd.print(count);
delay(1000);
}
void OUT()
{
count--;
lcd.clear();
lcd.print("SO NGUOI:");
lcd.setCursor(0,1);
lcd.print(count);
delay(1000);
}
void setup()
{
lcd.begin();
lcd.backlight();
Serial.begin(9600);
lcd.setCursor(0,2);
lcd.print(" HELLO ");
delay(2000);
pinMode(in, INPUT);
pinMode(out, INPUT);
pinMode(relay, OUTPUT);
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
lcd.clear();
lcd.print("Person In Room:");
lcd.setCursor(0,1);
lcd.print(count);
}
void loop()
{
if(!digitalRead(out))
IN();
if(!digitalRead(in))
OUT();
Serial.print(count);
Serial.println("");
if(count<=0)
{
lcd.clear();
digitalWrite(relay, LOW);
lcd.clear();
lcd.print("KO CO NGUOI:");
lcd.setCursor(0,1);
lcd.print("Den Tat");
delay(200);
}
else
digitalWrite(relay, HIGH);
}
7. Giao tiếp ma trận led
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
Chương trình
ORG 00H
MOV P3,#00000000B // khởi tạo Port3 là port xuất
MOV P1,#00000000B // khởi tạo Port1 là port xuất
MAIN: MOV P3,#01111110B
MOV P1,#11111110B
ACALL DELAY
MOV P3,#00010001B
MOV P1,#11111101B
ACALL DELAY
MOV P3,#00010001B
MOV P1,#11111011B
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
ACALL DELAY
MOV P3,#00010001B
MOV P1,#11110111B
ACALL DELAY
MOV P3,#01111110B
MOV P1,#11101111B
ACALL DELAY
SJMP MAIN // nhảy về vòng lặp chính
DELAY: MOV R6,#255D // chương trình con delay 1m
HERE: DJNZ R6,HERE
RET
END
8. Cảm biến khí MQ315
MQ135 là một cảm biến khí ổn định và nhạy, có thể phát hiện amoniac, carbon
dioxide, cồn, khói, nitơ dioxide, vv. Cảm biến này bao gồm một lớp thiếc trong ống
nhôm oxít rất nhỏ, đo điện cực và một bộ phận làm nóng bên trong ống nhôm. Mặt
trước của cảm biến được che bằng lưới thép không gỉ và mặt sau là các chân để kết
nối.
Rượu etylic có trong hơi thở bị oxy hóa thành axit axetic trong khi đi qua phần tử
gia nhiệt. Rượu etylic này rơi vào lớp cảm biến điôxít thiếc và kết quả là trở kháng
của nó giảm. Dưới đây là sơ đồ kết nối của cảm biến khí MQ135.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
Nguyên lý làm việc của mạch kiểm tra nồng độ cồn
Đầu ra điện áp của bộ phát hiện rượu được chuyển đổi sang định dạng kỹ thuật số
bằng cách sử dụng ADC0804 (IC1). Chân Vref/2 của ADC được giữ ở mức 1.28V
sử dụng mạng phân chia điện áp được làm từ R14 và R15. Vref/2 = 1.28V có nghĩa
là điẹn áp tham chiếu của ADC sẽ là 10mV và đầu ra của ADC sẽ tăng thêm một bit
cho mỗi mức tăng 10mV ở đầu vào. Tham khảo bảng dữ liệu (datasheet) của
ADC0804 để hiểu rõ hơn. Các ngõ ra của ADC (D0 đến D7) được giao tiếp với
Port1 của vi điều khiển. Các tín hiệu điều khiển CS, RD, WR, INTR được lấy từ
các chân vi điều khiển P3.7, P3.6, P3.5, P3.4 tương ứng. R9 và C1 được liên kết với
mạch xung đồng hồ của ADC0804.
Tụ C3 được kết nối giữa Vin + và Vin- của bộ lọc nhiễu ADC0804 (nếu có) ở đầu
ra của cảm biến. Nếu C3 không được sử dụng, đầu ra kỹ thuật số của ADC sẽ
không ổn định. Tụ lọc này chắc chắn sẽ gây ra một số độ trễ trong phản hồi ADC
nhưng nó không ảnh hưởng nhiều trong ứng dụng này. Bộ vi điều khiển thực hiện
các thao tác cần thiết trên đầu ra kỹ thuật số ADC để chuyển đổi nó thành BAC%
và hiển thị trên 3 LED 7 đoạn. Port0 của vi điều khiển được giao tiếp với 3 LED 7
đoạn để hiển thị số ba chữ số. Các tín hiệu điều khiển cho ba chữ số được lấy từ các
chân của vi điều khiển P3.0, P3.1, P3.2.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)
lOMoARcPSD|36477180
| 1/11

Preview text:

lOMoARcPSD|36477180
1. Cảm biến lửa YG1006
int warnPin = 10; // loa,den ket noi Pin 10
int button=2; // button ket noi Pin 2
int flame_din=9; // Dout ket noi Pin 9
int flame_ain=A0; // Aout ket noi Pin A0
int ad_value; // bien luu gia tri adc
int button_value; // bien luu trang thai button void setup() {
pinMode(flame_din,INPUT); // set Input
pinMode(flame_ain,INPUT); // set Input
pinMode(warnPin,OUTPUT); // set Output
pinMode(button,INPUT); // set Input
Serial.begin(9600); // ket noi UART, baud = 9600 } void loop() {
ad_value=analogRead(flame_ain); // doc gia tri adc
if(digitalRead(flame_din)==LOW) // so sanh vs LOW, neu = thong bao co lua, den va loa bat { Serial.println("CO LUA"); Serial.println(ad_value);
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 digitalWrite(warnPin,HIGH); }
button_value = digitalRead(button); // doc trang thai button
if(button_value==HIGH) // nhan button {
while(button_value == HIGH) // doi phim nha {
button_value = digitalRead(button); }
digitalWrite(warnPin,LOW); // tat loa va den
Serial.println("BINH THUONG"); // thong bao binh thuong } }
2. Cảm biến khí gas MQ2 #define Threshold 400 #define MQ2pin 0
float sensorValue; //variable to store sensor value void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ2 warming up!");
delay(20000); // allow the MQ2 to warm up } void loop() {
sensorValue = analogRead(MQ2pin); // read analog input pin 0
Serial.print("Sensor Value: "); Serial.print(sensorValue);
if(sensorValue > Threshold) {
Serial.print(" | Smoke detected!"); } Serial.println("");
delay(2000); // wait 2s for next reading } 3. LCD 1602 #include #include
LiquidCrystal_I2C lcd(0X27,16,2); //SCL A5 SDA A4
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 int num=0; void setup() { lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(2,0); lcd.print("DIEN TU DAT"); lcd.setCursor(0,1); lcd.print("Dem so : "); lcd.setCursor(10,1); lcd.print(num); num++; if(num>=10){num=0;} delay (1000); lcd.clear(); } 4. Cảm biến PIR
int ledPin = 13; // chọn chân 13 báo hiệu LED
int inputPin = 2; // chọn ngõ tín hiệu vào cho PIR
int pirState = LOW; // Bắt đầu với không có báo động int val = 0;
int pinSpeaker = 10; //chọn chân cho chuông khi có đột nhập void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, INPUT); pinMode(pinSpeaker, OUTPUT); Serial.begin(9600); } void loop() {
val = digitalRead(inputPin); // đọc giá trị đầu vào.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180
if (val == HIGH) // nếu giá trị ở mức cao.(1) {
digitalWrite(ledPin, HIGH); // LED On
playTone(300, 160); // thời gian chuông kêu delay(150); if (pirState == LOW) {
Serial.println("Motion detected!"); pirState = HIGH; } } else { digitalWrite(ledPin, LOW); playTone(0, 0); delay(300); if (pirState == HIGH) {
Serial.println("Motion ended!"); pirState = LOW; } } }
void playTone(long duration, int freq) { duration *= 1000;
int period = (1.0 / freq) * 1000000; long elapsed_time = 0;
while (elapsed_time < duration) { digitalWrite(pinSpeaker,HIGH); delayMicroseconds(period / 2); digitalWrite(pinSpeaker, LOW); delayMicroseconds(period / 2); elapsed_time += (period); } }
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 5. Đèn giao thông
int carRed = 12; //assign the car lights int carYellow = 11; int carGreen = 10; int button = 9; //button pin
int pedRed = 8; //assign the pedestrian lights int pedGreen = 7;
int crossTime =5000; //time for pedestrian to cross
unsigned long changeTime;//time since button pressed void setup() { pinMode(carRed, OUTPUT); pinMode(carYellow, OUTPUT); pinMode(carGreen, OUTPUT); pinMode(pedRed, OUTPUT); pinMode(pedGreen, OUTPUT); pinMode(button, INPUT);
digitalWrite(carGreen, HIGH); //turn on the green lights digitalWrite(pedRed, HIGH); } void loop() {
int state = digitalRead(button);
//check if button is pressed and it is over 5 seconds since last button press
if(state == HIGH && (millis() - changeTime)> 5000){
//call the function to change the lights changeLights(); } } void changeLights() {
digitalWrite(carGreen, LOW); //green off
digitalWrite(carYellow, HIGH); //yellow on delay(2000); //wait 2 seconds
digitalWrite(carYellow, LOW); //yellow off
digitalWrite(carRed, HIGH); //red on
delay(1000); //wait 1 second till its safe
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180
digitalWrite(pedRed, LOW); //ped red off
digitalWrite(pedGreen, HIGH); //ped green on
delay(crossTime); //wait for preset time period //flash the ped green for (int x=0; x<10; x++) { digitalWrite(pedGreen, HIGH); delay(250); digitalWrite(pedGreen, LOW); delay(250); }
digitalWrite(pedRed, HIGH);//turn ped red on delay(500);
digitalWrite(carRed, LOW); //red off
digitalWrite(carYellow, HIGH); //yellow on delay(1000);
digitalWrite(carYellow, LOW); //yellow off
digitalWrite(carGreen, HIGH);
changeTime = millis(); //record the time since last change of lights
//then return to the main program loop }
6. Hệ thống đếm người trong lớp học #include #include
LiquidCrystal_I2C lcd(0x3F, 16, 2); #define in 14 #define out 17 #define relay 3 int count=0; void IN() {
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 count++; lcd.clear(); lcd.print("SO NGUOI:"); lcd.setCursor(0,1); lcd.print(count); delay(1000); } void OUT() { count--; lcd.clear(); lcd.print("SO NGUOI:"); lcd.setCursor(0,1); lcd.print(count); delay(1000); } void setup() { lcd.begin(); lcd.backlight(); Serial.begin(9600); lcd.setCursor(0,2); lcd.print(" HELLO "); delay(2000); pinMode(in, INPUT); pinMode(out, INPUT); pinMode(relay, OUTPUT);
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 lcd.clear(); lcd.print("Person In Room:"); lcd.setCursor(0,1); lcd.print(count); } void loop() { if(!digitalRead(out)) IN(); if(!digitalRead(in)) OUT(); Serial.print(count); Serial.println(""); if(count<=0) { lcd.clear(); digitalWrite(relay, LOW); lcd.clear(); lcd.print("KO CO NGUOI:"); lcd.setCursor(0,1); lcd.print("Den Tat"); delay(200); } else digitalWrite(relay, HIGH); }
7. Giao tiếp ma trận led
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 Chương trình ORG 00H
MOV P3,#00000000B // khởi tạo Port3 là port xuất
MOV P1,#00000000B // khởi tạo Port1 là port xuất MAIN: MOV P3,#01111110B MOV P1,#11111110B ACALL DELAY MOV P3,#00010001B MOV P1,#11111101B ACALL DELAY MOV P3,#00010001B MOV P1,#11111011B
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180 ACALL DELAY MOV P3,#00010001B MOV P1,#11110111B ACALL DELAY MOV P3,#01111110B MOV P1,#11101111B ACALL DELAY
SJMP MAIN // nhảy về vòng lặp chính
DELAY: MOV R6,#255D // chương trình con delay 1m HERE: DJNZ R6,HERE RET END
8. Cảm biến khí MQ315
MQ135 là một cảm biến khí ổn định và nhạy, có thể phát hiện amoniac, carbon
dioxide, cồn, khói, nitơ dioxide, vv. Cảm biến này bao gồm một lớp thiếc trong ống
nhôm oxít rất nhỏ, đo điện cực và một bộ phận làm nóng bên trong ống nhôm. Mặt
trước của cảm biến được che bằng lưới thép không gỉ và mặt sau là các chân để kết nối.
Rượu etylic có trong hơi thở bị oxy hóa thành axit axetic trong khi đi qua phần tử
gia nhiệt. Rượu etylic này rơi vào lớp cảm biến điôxít thiếc và kết quả là trở kháng
của nó giảm. Dưới đây là sơ đồ kết nối của cảm biến khí MQ135.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com) lOMoARcPSD|36477180
Nguyên lý làm việc của mạch kiểm tra nồng độ cồn
Đầu ra điện áp của bộ phát hiện rượu được chuyển đổi sang định dạng kỹ thuật số
bằng cách sử dụng ADC0804 (IC1). Chân Vref/2 của ADC được giữ ở mức 1.28V
sử dụng mạng phân chia điện áp được làm từ R14 và R15. Vref/2 = 1.28V có nghĩa
là điẹn áp tham chiếu của ADC sẽ là 10mV và đầu ra của ADC sẽ tăng thêm một bit
cho mỗi mức tăng 10mV ở đầu vào. Tham khảo bảng dữ liệu (datasheet) của
ADC0804 để hiểu rõ hơn. Các ngõ ra của ADC (D0 đến D7) được giao tiếp với
Port1 của vi điều khiển. Các tín hiệu điều khiển CS, RD, WR, INTR được lấy từ
các chân vi điều khiển P3.7, P3.6, P3.5, P3.4 tương ứng. R9 và C1 được liên kết với
mạch xung đồng hồ của ADC0804.
Tụ C3 được kết nối giữa Vin + và Vin- của bộ lọc nhiễu ADC0804 (nếu có) ở đầu
ra của cảm biến. Nếu C3 không được sử dụng, đầu ra kỹ thuật số của ADC sẽ
không ổn định. Tụ lọc này chắc chắn sẽ gây ra một số độ trễ trong phản hồi ADC
nhưng nó không ảnh hưởng nhiều trong ứng dụng này. Bộ vi điều khiển thực hiện
các thao tác cần thiết trên đầu ra kỹ thuật số ADC để chuyển đổi nó thành BAC%
và hiển thị trên 3 LED 7 đoạn. Port0 của vi điều khiển được giao tiếp với 3 LED 7
đoạn để hiển thị số ba chữ số. Các tín hiệu điều khiển cho ba chữ số được lấy từ các
chân của vi điều khiển P3.0, P3.1, P3.2.
Downloaded by Ng?c Di?p ??ng (ngocdiep10012000@gmail.com)