Professional Documents
Culture Documents
Thiet Ke Va Thi Cong Mach Canh Bao Nong Do Con
Thiet Ke Va Thi Cong Mach Canh Bao Nong Do Con
Hình Trang
Hình 1.10 Hình ảnh mặt trước và mặt sau của LCD OLED 12
Bảng Trang
Thiết bị có khả năng đưa ra cảnh báo với từng mức ngưỡng của nồng độ cồn.
Trang 1
ĐỒ ÁN 2
Phương pháp tiếp cận môi trường: qua những khảo sát trong thực tiễn, nghiên cứu
ứng dụng nhằm mang lại những lợi ích thiết thực, có tính ứng dụng cao và có khả
năng phát triển mở rộng.
Trang 2
ĐỒ ÁN 2
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1. Mô tả quá trình hoạt động
Máy phát hiện nồng độ cồn có nhiệm vụ chính là kiểm tra trực tiếp nồng độ cồn
trong hơi thở. Bộ phận cảnh báo có nhiệm vụ chính là phát các tín hiệu cảnh báo khi
nồng độ cồn trong vùng không gian thở trước mặt của người sử dụng quá cao. Chọn
ngưỡng chặn và cảnh báo, căn cứ vào các qui định của luật giao thông, ta chọn ngưỡng
ngăn chặn và cảnh báo cho hệ thống ứng với nồng độ cồn.
Nếu nồng độ cồn đo được dưới 200µg/1 lít khí thở hiển thị “ Bạn tỉnh táo”
Nếu nồng độ cồn đo được trên 200µg/1 lít khí thở và dưới 250µg/1lit hiển thị “ Bạn
đã uống bia” và led đỏ sẽ sáng.
Nếu nồng độ cồn đo được trên 250µg/1 lít khí thở và dưới 320µg/1lit hiển thị “ Bạn
uống khá nhiều bia” led đỏ sáng đồng thời buzzer kêu , oled hiển thị mức phạt 1
triệu – 2 triệu.
Nếu nồng độ cồn đo được trên 320µg/1 lít khí thở và dưới 400µg/1lit hiển thị “Bạn
uống rượu” led đỏ sáng đồng thời buzzer kêu, oled hiển thị mức phạt 1 triệu-2 triệu.
Nếu nồng độ cồn đo được trên 400µg/1 lít khí thở hiển thị “Bạn đang say” led đỏ
sáng đồng thời buzzer kêu, oled hiển thị mức phạt 3 triệu-4 triệu.
1.2. Nguyên tắc hoạt động của cảm biến nồng độ cồn MQ3
Cảm biến MQ-3 được sử dụng để đo nồng độ cồn. Được làm từ vật liệu SnO2.
Vật liệu này có tính dẫn điện kém trong môi trường không khí sạch nhưng lại rất
nhạy cảm với hơi cồn. Trong môi trường có nồng độ cồn càng cao, điện trở của cảm
biến càng giảm. Từ bảng số liệu, tỷ lệ điện trở của cảm biến giảm gần 5 lần khi đo
trong môi trường không khí sạch. Tuy nhiên hiệu ứng phát hiện nồng độ cồn của
Trang 3
ĐỒ ÁN 2
cảm biến này còn phụ thuộc điều kiện nhiệt độ. Khi nhiệt độ bề mặt cảm biến được
sấy nóng tới 600C thời gian cần thiết để phát hiện nồng độ cồn kéo dài khoảng 8
giây. Cũng trong môi trường đó, khi nhiệt độ bề mặt cảm biến là 200C thời gian phát
hiện nồng độ cồn kéo dài từ 3 đến 5 phút.
Kí hiệu MQ-3
Trang 4
ĐỒ ÁN 2
Trong mạch điện của cảm biến MQ3, có 2 đầu dây áp đầu ra của cảm biến, RL
là điện trở mạch ra được nối nối tiếp với cảm biến, trị số được cấp điện áp: VH là
điện áp cấp cho mạch sấy và Vc điện áp cấp cho cảm biến, VRL là điện của RL có
thể điều chỉnh được. Các điện áp VH và Vc thường được cấp cùng trị số. Trong
mạch đo, các điện áp này được cấp 5 Vol DC. Các tín hiệu ra của cảm biến được gửi
về bộ vi điều khiển để tính toán xử lý. Module cảm biến MQ-3 Cảm biến thích hợp
cho việc phát hiện nồng độ cồn trong hơi thở. Phát hiện khí phát ra từ Etanol,
Alcohol. Đặc điểm của module cảm biến MQ-3: Có bốn chân, điện áp cung cấp là
nguồn 5V, Dout đầu ra là tín hiệu số (0 và 1), Aout đầu vào là tín hiệu tương tự, đèn
LED sáng khi phát hiện có khí, GND cấp điện cực âm, độ nhạy cao và chọn lọc tốt
với ethanol, bền và ổn định đáng tin cậy, độ nhạy cao và thời gian đáp ứng nhanh.
Trang 5
ĐỒ ÁN 2
1.3. Nguyên tắc kết nối giữa cảm biến MQ3 và Arduino
Gồm 4 chân:
Ngôn ngữ lập trình sử dụng trong bài là ngôn ngữ C của Arduino.
Chương trình Arduino có thể được chia làm 3 phần: cấu trúc (structure), biến
số (variable) và hằng số (constant), hàm và thủ tục (function).
* String
Trang 6
ĐỒ ÁN 2
Trong một chương trình Arduino là sử dụng mảng ký tự để biểu diễn chuỗi.
Cách khai báo:
Char Str1[15]; // khai bảo chuỗi có độ dài là 15 ký tự.
Char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; //khai báo chuỗi có độ dài tối đa là 8 ký tự
và đặt nó giá trị ban đầu là arduino (7 ký tự). Buộc phải khai báo chuỗi nằm giữa hai
dấu nháy đơn.Char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; //khai báo chuỗi có độ dài
tối đa là 8 ký tự và đặt nó giá trị ban đầu là arduino<ký tự null>.
Char Str4[ ] = "arduino"; // Chương trình dịch sẽ tự động điều chỉnh kích thước cho.
chuỗi Str4 này và đặt một chuối trong dấu ngoặc kép.
Char Str5[8] = "arduino"; // Một cách khai báo như Str3.
Char Str6[15] = "arduino"; // Một cách khai báo khác với độ dài tối đa lớn hơn.
* Array
Array là mảng (tập hợp các giá trị có liên quan và được đánh dấu bằng những chỉ số). Array
được dùng trên Arduino chính là Array trong ngôn ngữ lập trình C.
Int myInts[6]; // tạo mảng myInts chứa tối đa 6 phần tử (được đánh dấu từ 0-5), các
phần tử này đều có kiểu là int => khai báo này chiếm 2*6 = 12 byte bộ nhớ
Int myPins[] = {2, 4, 8, 3, 6}; // tạo mảng myPins chứa 5 phần tử (lần lượt là 2, 4, 8,
3, 6). Mảng này không giới hạn số lượng phần tử vì có khai báo là "[]"
Int mySensVals[6] = {2, 4, -8, 3, 2}; // tạo mảng mySensVals chứa tối đa 6 phần tử,
trong đó 5 phần tử đầu tiên có giá trị lần lượt là 2, 4, -8, 3, 2.
Char message[6] = "hello"; // tạo mảng ký tự (dạng chuỗi) có tối đa 6 ký tự.
* Double
Giống hết như kiểu Float. Nhưng trên mạch Arduino thì kiểu Double lại chiếm đến 8 byte
bộ nhớ (64 bit).
* Float
Trang 7
ĐỒ ÁN 2
Để định nghĩa 1 kiểu số thực, có thể sử dụng kiểu dữ liệu Float. Một biến dùng kiểu dữ liệu
này có thể đặt một giá trị nằm trong khoảng -3.4028235E+38 đến 3.4028235E+38. Nó
chiếm 4 byte bộ nhớ.
* Short
Giống kiểu Int, tuy nhiên có điều trên mọi mạch Arduino nó đều chiếm 4 byte bộ nhớ và
biểu thị giá trị trong khoảng -32,768 đến 32,767 (-215 đến 215-1) (16 bit).
* Unsigned long
Kiểu Unsigned long là kiểu số nguyên nằm trong khoảng từ 0 đến 4,294,967,295 (0 đến
232 - 1). Mỗi biến mang kiểu dữ liệu này chiếm 4 byte bộ nhớ.
* Word
Giống như kiểu Unsigned int, kiểu dữ liệu này là kiểu số nguyên 16 bit không âm (chứa
các giá trị từ 0 đến 65535), và nó chiếm 2 byte bộ nhớ.
* Unsigned int
Kiểu Unsigned int là kiểu số nguyên nằm trong khoảng từ 0 đến 65535 (0 đến 216 - 1). Mỗi
biến mang kiểu dữ liệu này chiếm 2 byte bộ nhớ. Trên Arduino, Unsigned int có khoảng
giá trị từ 0 đến 4,294,967,295 (232 - 1) (lúc này nó chiếm 4 byte bộ nhớ).
* Int
Kiểu Int là kiểu số nguyên chính được dùng trong chương trình Arduino. Kiểu int chiếm 2
byte bộ nhớ. Trên mạch Arduino Uno, nó có đoạn giá trị từ -32,768 đến 32,767 (-215 đến
215-1) (16 bit).
Trang 8
ĐỒ ÁN 2
* Byte
Là một kiểu dữ liệu biểu diễn số nguyên nằm trong khoảng từ 0 đến 255. Sẽ mất 1 byte bộ
nhớ cho mỗi biến mang kiểu byte.
* Unsigned char
Giống hệt bài giới thiệu về kiểu Char. Tuy nhiên kiểu Unsigned char lại biểu hiệu một số
nguyên byte không âm (giá trị từ 0 - 255).
* Char
Kiểu dữ liệu này là kiểu dữ liệu biểu diễn cho 1 kí. Kiểu dữ liệu này chiếm 1 byte bộ nhớ.
Kiểu Char được lưu dưới dạng 1 số nguyên byte có số âm (có các giá trị từ -127 - 128).
* Long
Long là một kiểu dữ liệu mở rộng của Int. Những biến có kiểu long có thể mang giá trị 32
bit từ -2,147,483,648 đến -2,147,483,647. Sẽ mất 4 byte bộ nhớ cho một biến kiểu long.
* Boolean
Một biến được khai báo kiểu Boolean sẽ chỉ nhận một trong hai giá trị: true hoặc false. Và
sẽ mất 1 byte bộ nhớ cho điều đó.
* Void
Void là một từ khóa chỉ dùng trong việc khai báo một function. Những function được khai
báo với "void" sẽ không trả về bất kì dữ liệu nào khi được gọi.
Trang 9
ĐỒ ÁN 2
Serial Monitor: màn hình hiển thị dữ liệu từ arduino gửi lên máy tính
File menu:
Trang 10
ĐỒ ÁN 2
Trong file menu mục Example là nơi chứa code mẫu ví dụ: Như cách sử dụng các chân
digital, analog....
Edit menu:
Sketch menu:
Trang 11
ĐỒ ÁN 2
1.5. Cách đọc dữ liệu từ cảm biến và hiển thị dữ liệu lên LCD oled
Dữ liệu được đọc từ cảm biến nhờ chương trình do người dùng lập trình trên Arduino
Dữ liệu đọc được sẽ được xử lí và hiển thị trên LCD oled
a/ LCD oled
Màn hình nhỏ, đường chéo chỉ khoảng 1,3" nhưng rất có thể đọc được là do sự tương
phản cao một màn hình OLED. Màn hình này được làm bằng 128x 64 pixel OLED
trắng, đều được bật hoặc tắt bởi chip điều khiển. Các chip điều khiển, SSD1306 có
thể giao tiếp trong hai cách: I2C hoặc SPI. Các OLED cần nguồn cung cấp điện 3.3V
và 3.3V mức logic cho giao tiếp, có thể sử dụng với các thiết bị 5V, Display Ram
128 x 64 bit.
Hình 1.10 Hình ảnh mặt trước và mặt sau của LCD OLED.
Trang 12
ĐỒ ÁN 2
CS Chip Select, chân hoạt động ở mức tích cực thấp, ở mức cao nó
không cho phép MCU đọc ghi dữ liệu
RES Chân reset tín hiệu đầu vào, ở mức thấp thì LCD được khởi tạo lại.
Ở mức cao thì LCD hoạt động bình thường
DC = 0 input là command
Trang 13
ĐỒ ÁN 2
*.setBrightness(brightness);
Chỉnh độ sáng của oled, 0->255
*.setTextSize(s);
Chỉnh size chữ, mặc định không dùng lệnh thì s=1.
*.setTextColor(c);
Hoặc
*.setTextColor(c,bg);
c là màu chữ, WHITE(1) hoặc BLACK(0)
bg là màu nền, WHITE(1) hoặc BLACK(0)
Nếu chỉ điền c thì bg tự động chỉnh ngược với c.
*.print();
*.println();
Hai hàm này giống trong serial, lưu ý: Sau hai hàm này phải thêm lệnh
*.display(); để màn hình hiển thị.
*.drawPixel(x,y,c);
Vẽ 1 điểm tại x,y với c là màu của điểm (WHITE hoặc BLACK)
*.drawChar(x,y,char,color,bg,size);
Vẽ một kí tự
x, y: tọa độ điểm vẽ
char: kí tự cần vẽ
color: Màu kí tự (WHITE hoặc BLACK)
bg: Màu nền CỦA kí tự (WHITE hoặc BLACK)
size: Kích cỡ kí tự (Kích cỡ kí tự bằng (sizex5pixel) X
(sizex7pixel))
trò chơi trong đồ chơi âm thanh, quà tặng âm thanh, đồ gia dụng, báo thức cá nhân,
hệ thống báo động của ngân hàng và công an. Buzzer được sử dụng rộng rãi trong
đồ chơi điện tử và trò chơi. Buzzer được sử dụng chủ yếu để nhắc hoặc báo thức,
theo thiết kế và mục đích khác nhau, có thể phát ra tiếng nhạc, tiếng còi, âm thanh
buzzer, âm thanh báo thức, nhạc chuông điện và nhiều âm thanh khác. Chuông báo
động được sử dụng trong máy giặt làm cho âm thanh buzzer thêm rõ ràng, khiến
người dùng vận hành các quy trình. Các ứng dụng Buzzer trong các thiết bị gia dụng
chủ yếu là báo động âm thanh, còi báo động, người sử dụng đã phát ra một thiết bị
đốt cháy cảnh báo ở nơi khô ráo. Buzzer được sử dụng như một cái chuông để gửi
thêm âm thanh "ding dong" hoặc âm nhạc, gợi ý rằng khách ghé thăm. Thẻ Buzzer
được sử dụng trong thiệp chúc mừng, lời chào đơn giản; bộ phim buzzer được sử
dụng trong còi báo động tự vệ cá nhân để gửi âm thanh báo thức cao; buzzer cài đặt
trong an ninh công cộng, ngân hàng và khu vực bảo vệ nhà được sử dụng cho âm
thanh báo động nhiều; nếu ai đó vào Cảnh báo khu vực, điều khiển cảm biến, tiếng
rú lên sẽ báo động. Ở các nhà máy, trường học sử dụng buzzer, làm cho tiếng chuông
điện nhiều hơn.
Thông số kỹ thuật:
Trang 15
ĐỒ ÁN 2
Khối nguồn: Có chức năng cung cấp năng lượng cho toàn bộ hệ thống.
+ Cấp nguồn ngoài 9V cho board mạch Arduino.
+ Board Arduino cấp nguồn 5V cho led đỏ, oled LCD, cảm biến MQ3 và
Buzzer.
Khối cảm biến: Dùng cảm biến nồng độ cồn MQ3. Cảm biến tín hiệu nồng độ cồn từ
hơi thở, gửi tín hiệu đến khối điều khiển.
Trang 16
ĐỒ ÁN 2
Khối điều khiển: Dùng Arduino uno R3. Thực hiện xử lý tín hiệu và gửi tín hiệu về
khối hiển thị và cảnh báo.
Khối hiển thị và cảnh báo: Dùng oled, led đỏ và buzzer. Hiển thị thông tin về nồng
độ và mức phạt trên oled LCD,
led đỏ sẽ sáng khi nồng độ cồn đo được trên 200µg/1 lít khí thở, buzzer sẽ kêu khi nồng
độ cồn đo được trên 250µg/1 lít khí thở.
Trang 17
ĐỒ ÁN 2
Dùng cảm biến nồng độ cồn MQ3. MQ3 là bộ cảm biến sử dụng SiO2 làm vật liệu
cảm ứng nồng độ cồn trong không khí, bộ cảm biến khí sẽ rất nhạy cảm ở những nơi
có nồng độ cồn trong không khí cao.
Dùng Arduino uno. Arduino là một board mạch vi xử lý nhằm xây dựng các ứng
dụng tương tác với nhau hoặc với môi trường được thuận lợi hơn. Mạch Arduino
Uno là dòng mạch Arduino phổ biến, khi mới bắt đầu làm quen, lập trình với
Arduino thì mạch Arduino thường nói tới chính là dòng Arduino UNO. Hiện dòng
mạch này đã phát triển tới thế hệ thứ 3 (Mạch Arduino Uno R3). Arduino Uno R3 là
dòng cơ bản, linh hoạt, thường được sử dụng cho người mới bắt đầu.
Oled LCD SSD1306 hiển thị chữ sắc nét rõ ràng có thể giao tiếp trong hai cách: I2C
hoặc SPI.
Buzzer là một loại thiết bị phát âm có thể chuyển đổi tín hiệu âm thanh thành tín
hiệu âm thanh. Lập trình đơn giản, dễ sử dụng, giá thảnh rẻ.
LED (viết tắt của Light Emitting Diode, có nghĩa là điốt phát quang) là các điốt có
khả năng phát ra ánh sáng hay tia hồng ngoại, tử ngoại. Cũng giống như điốt, LED
được cấu tạo từ một khối bán dẫn loại p ghép với một khối bán dẫn loại n.led đơn
nhỏ gọn dễ sử dụng.
Trang 18
ĐỒ ÁN 2
d/ Khối nguồn:
Trang 19
ĐỒ ÁN 2
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
int led = 5 ;
int analogPin = 0;
int val = 0;
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
void loop() {
delay(100);
val = readAlcohol();
printTitle();
printAlcohol(val);
printAlcoholLevel(val);
display.display();
Serial.print(val);
Serial.println("ug/l");
delay(200);
void printTitle()
Trang 21
ĐỒ ÁN 2
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(22,0);
display.setCursor(76,8);
display.println("ug/l");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(48,8);
display.println(val);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(20,25);
if(value<200)
Trang 22
ĐỒ ÁN 2
digitalWrite(5,0);
digitalWrite(5,1);
digitalWrite(5,1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,18);
digitalWrite(buzzer,1);
tone(buzzer,3200);
delay(800);
digitalWrite(buzzer,0);
noTone(buzzer);
Trang 23
ĐỒ ÁN 2
digitalWrite(5,1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,18);
digitalWrite(buzzer,1);
tone(buzzer,3200);
delay(800);
digitalWrite(buzzer,0);
noTone(buzzer);
if(value>400)
digitalWrite(5,1);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,18);
digitalWrite(buzzer,1);
Trang 24
ĐỒ ÁN 2
tone(buzzer,3200);
delay(800);
digitalWrite(buzzer,0);
noTone(buzzer);
int readAlcohol()
int val = 0;
int val1;
int val2;
int val3;
display.clearDisplay();
val1 = analogRead(analogPin);
delay(10);
val2 = analogRead(analogPin);
delay(10);
val3 = analogRead(analogPin);
val = (val1+val2+val3)/3;
return val;
Trang 25
ĐỒ ÁN 2
Trang 26
ĐỒ ÁN 2
Trang 27
ĐỒ ÁN 2
Trang 28
ĐỒ ÁN 2
Trường hợp nồng độ cồn đo được dưới 200µg/1 lít khí thở hiển thị “Bạn tỉnh táo”
Trang 29
ĐỒ ÁN 2
Trường hợp nồng độ cồn đo được trên 200µg/1 lít khí thở và dưới 250µg/1lit hiển
thị “Bạn đã uống bia” và led đỏ sẽ sáng
Trường hợp nồng độ cồn đo được trên 250µg/1 lít khí thở và dưới 320µg/1lit hiển thị“Bạn
uống nhiều bia” led đỏ sáng đồng thời buzzer kêu , oled hiển thị mức phạt 1 triệu-2 triệu
Trang 30
ĐỒ ÁN 2
Trường hợp nồng độ cồn đo được trên 320µg/1 lít khí thở và dưới 400µg/1lit hiển
thị “Bạn uống rượu” led đỏ sáng đồng thời buzzer kêu, oled hiển thị mức phạt 1
triệu-2 triệu
- Kết hợp đo nồng độ cồn từ đó điều khiển việc chạy xe máy của người được đo. Nếu
nồng độ cồn cao thì không cho xe khởi động.
Trang 32
ĐỒ ÁN 2
Với đồ án này, bằng những kiến thức đã học, chúng em đã tìm hiểu và ứng dụng tạo
ra sản phẩm phục vụ cho cuộc sống. Từ đó dẫn dắt chúng em làm quen với việc ứng dụng
kiến thức đã học vào thực tế, tạo khả năng tự lập khi nghiên cứu một vấn đề nào đó. Tuy
nhiên trong quá trình làm việc chúng em không thể tránh khỏi những sai sót. Rất mong quý
thầy cô thông cảm và chỉ bảo.
Trang 33
ĐỒ ÁN 2
[1] Nguyễn Đình Phú, Trương Ngọc Anh, Giáo Trình Vi Điều Khiển, khoa Điện-Điện
[2] Lê Mỹ Hà, Phạm Quang Huy, Lập trình IOT với Arduino, nhà xuất bản thanh niên
[3] Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng, Bùi Thị Tuyết Đan, Phù
Thị Ngọc Hiếu, Dương Thị Cẩm Tú, Giáo Trình Điện Tử Cơ Bản, khoa Điện-Điện tử,
trường ĐHSPKT, Tp.HCM, 2013.
Trang 34