HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
------------------------------------------------------
BÁO CÁO BÀI TẬP LỚN
Đề tài: Máy rửa tay tự động
Môn: Đồ án thiết kế hệ thống số
Giảng viên
: Nguyễn Văn Thành
Nhóm mơn học : 01
Nhóm sinh viên : 02
Hà Nội, 2021
NHẬN XÉT CỦA GIẢNG VIÊN
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
1
DANH SÁCH THÀNH VIÊN NHÓM 02
STT Họ và tên
Mã sinh viên
Cơng việc chủ yếu
1
Đồn Lê Dương
B17DCDT048
Leader quản thúc tiến độ
2
Đỗ Công Nam
B17DCDT128
Thiết kế phần cứng
3
Trịnh Đức Quang
B17DCDT151
Xây dựng phần mềm
4
Bùi Đăng Vương
B17DCDT216
Viết báo cáo
2
MỤC LỤC
LỜI NÓI ĐẦU ................................................................................................................... 4
I.
Ý tưởng xây dựng đề tài.............................................................................................. 5
1. Cách thức hoạt động ............................................................................................... 5
2. Linh kiện sử dụng .................................................................................................... 5
a) Arduino Nano CH340 .......................................................................................... 5
b) LCD16x2 .............................................................................................................. 6
c) Module I2C Arduino ............................................................................................ 7
d) Cảm biến vật cản hồng ngoại E18-D80NK .......................................................... 8
e) Máy bơm 12V ....................................................................................................... 8
f) LED báo hiệu........................................................................................................ 9
g) Cảm biến đo khoảng cách HC-SR40 .................................................................... 9
3. Sơ đồ khối .............................................................................................................. 10
4. Mục tiêu của đồ án ................................................................................................ 11
II. Quá trình thực hiện ................................................................................................... 11
1. Xây dựng phần mềm .............................................................................................. 11
a. Khai báo các cổng sử dụng ................................................................................ 11
b. Thiết lập các cổng .............................................................................................. 12
c. Tính lượng xà phịng cịn lại sau mỗi lần bơm ................................................... 13
d. Thiết lập quá trình hoạt động ............................................................................. 13
e. Chương trình hồn chỉnh ................................................................................... 15
2. Thiết kế phần cứng ................................................................................................ 19
a. Sơ đồ kết nối các khối sử dụng ........................................................................... 19
b. Xây dựng mạch in khối điều khiển ..................................................................... 23
c. Mơ hình thử nghiệm ........................................................................................... 24
III. Các định hướng cho tương lai sản phẩm .................................................................. 26
3
LỜI NĨI ĐẦU
Vấn đề giữ vệ sinh nơi cơng cơng cộng đã trở thành một vấn đề đặc biệt nổi lên từ
khi đại dịch COVID hoành hành. Giữ sạch sẽ đơi bàn tay của bản thân khi ra ngồi và khi
trở về đã trở thành một phương pháp hữu hiệu và vơ cùng quan trọng trong việc phịng
chống dịch bệnh. Tuy nhiên ngay trong thao tác rửa tay cũng tồn tại những rủi ro nhất
định khi mà có sự tiếp xúc giữa lịng bàn tay và khóa nước, ở những nơi cơng cộng thì tỉ
lệ rủi ro do tiếp xúc lại càng cao. Bởi thế một thiết bị hỗ trợ việc rửa tay mà khơng cần
tiếp xúc có thể tỏ ra có ích để giải quyết vấn đề trên.
Các chung cư là nơi có mật độ dân cư rất cao, vì vậy vấn đề giữ vệ sinh chung ở
nơi đây được quan tâm rất nhiều. Đặc biệt ở sảnh chính của các tịa nhà ln có các chai
dung dịch khử khuẩn phục vụ việc sát khuẩn tay cho cư dân khi sử dụng thang máy. Tuy
nhiên với mỗi lần nhấn nắp để dung dịch khử khuẩn phun vào tay thì đồng thời trên nắp
chai sẽ trở thành nơi tiếp xúc với một bàn tay chưa qua sát khuẩn, mà đó cũng là nơi
người sử dụng sau tiếp xúc. Có một cách để giải quyết vấn đề này mà nhiều nơi đã áp
dụng là tự động hóa quy trình rửa tay. Có nghĩa là sẽ cải tiến những chai xịt khử khuẩn
kia bằng một thiết bị, thiết bị này sẽ tự động phun một lượng chất lỏng vào tay người sử
dụng bất cứ khi nào người đó chìa bàn tay phía dưới khu vực chỉ định. Phương pháp này
vừa loại bỏ thao tác tiếp xúc ẩn chứa rủi ro, vừa tiết kiệm thời gian cho người sử dụng.
Chính vì vậy mà nhóm 2 bọn em đã lựa chọn đề tài Máy rửa tay tự động với mục
đích nâng cao ý thức phòng chống dịch bệnh cũng như rèn luyện kĩ năng làm việc với
Arduino và một số loại cảm biến. Trong quá trình thực hiện bọn em đã trao đổi, cùng hỗ
trợ lẫn nhau trong quá trình tìm hiểu và thực hiện, tuy nhiên sai xót là điều khó tránh khỏi.
Bọn em rất mong những góp ý của thầy để sản phẩm này có tính ứng dụng cao hơn.
4
I. Ý tưởng xây dựng đề tài
1. Cách thức hoạt động
➢ Mục đích của thiết bị này là hạn chế sự tiếp xúc nên thiết bị sẽ hoạt động theo
nguyên lí: bất cứ khi nào người dùng đặt tay vào khu vực bên dưới vịi phun chất khử
khuẩn thì một lượng nhỏ dung dịch sẽ tự động được phun ra.
➢ Thiết bị gồm 2 vòi phun riêng biệt, một cho ra nước sạch, một cho ra dung dịch
khử khuẩn (xà phịng).
➢ Có thêm đèn báo lượng dung dịch khử khuẩn cịn đủ để sử dụng khơng, đồng thời
hiển thị trên LCD để quản lí khu vực đặt máy rửa tay tự động nắm bắt tình hình, xem
khi nào cần cho thêm dung dịch sát khuẩn vào bể chứa.
➢ Vì lượng nước sử dụng chung với nguồn nước của chung cư nên chỉ cần quan tâm
đến lượng xà phòng còn lại trong bể chứa bằng cảm biến khoảng cách.
2. Linh kiện sử dụng
a) Arduino Nano CH340
➢ Có kích thước nhỏ gọn, thiết kế và chuẩn chân giao tiếp tương đương với Arduino
Nano chính hãng. Tuy nhiên sử dụng chip nạp chương trình và giao tiếp UART CH340
giá rẻ để tiết kiệm chi phí.
5
➢ Sử dụng MCU Atmega328P-AU dán.
➢ Điện áp cấp: 5VDC
➢ Dòng GPIO: 40 mA
➢ Số chân Digital: 14 chân, trong đó có 6 chân PWM.
➢ Số chân Analog: 8 chân
➢ Lập trình trên Arduino đơn giản và tiện lợi hơn một số dịng kit khác như STM32,
FPGA… và Arduino có giá thành rẻ hơn cả vì vậy nhóm 2 chọn loại Arduino Nano
này để tiết kiệm chi phí sản phẩm mà vẫn đáp ứng đầy đủ tính năng cần thiết.
b) LCD16x2
➢ LCD (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của Vi
điều khiển. Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa)
➢ LCD có thể dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác
nhau, tốn ít tài nguyên hệ thống và giá thành rẻ.
➢ Điện áp hoạt động: 5V
➢ Hiển thị tối đa 16 kí tự trên 2 dịng.
➢ Có 16 chân trong đó 8 chân dữ liệu (D0 - D7) và 3 chân điều khiển (RS, RW, EN).
5 chân còn lại dùng để cấp nguồn và đèn nền.
➢ Có thể cấu hình cho LCD ở chế độ lệnh hoặc chế độ dữ liệu và chế độ đọc hoặc
ghi
6
➢ Sử dụng LCD 16x2 vì nhu cầu hiển thị không nhiều, chỉ để báo về lượng nước
trong bể.
c) Module I2C Arduino
➢ LCD có quá nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều
chân trên vi điều khiển. Module I2C LCD ra đời để giải quyết vấn đề này.
➢ Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16x2 (RS, EN, D4, D5,
D6, D7) thì với module I2C chỉ cần tốn 2 chân (SCL, SDA) để kết nối.
➢ Module I2C hỗ trợ các loại LCD sử dụng driver HD44780 và tương thích với hầu
hết các vi điều khiển hiện nay.
➢ Điện áp hoạt động: 2.5-6 VDC
➢ Cách kết nối giữa module I2C Arduino với LCD 16x2 (hình ảnh minh họa)
7
d) Cảm biến vật cản hồng ngoại E18-D80NK
➢ Cảm biến sử dụng ánh sáng hồng ngoại để xác định vật cản phía trước cảm biến.
➢ Cảm biến phát ra tia hồng ngoại với dải tần số chuyên biệt cho khả năng chống
nhiễu tốt kể cả ở điều kiện ánh sáng ngồi trời. Có thể chỉnh khoảng cách mong muốn
thơng qua biến trở trên cảm biến, cảm biến có ngõ ra là cấu trúc Transistor NPN
(sinking sensors) đã được nối điện trở nội 10k lên VCC nên có thể sử dụng ngay mà
khơng cần trở kéo lên VCC.
➢ Số dây tín hiệu: 3 dây (2 dây nguồn DC và 1 dây tín hiệu)
➢ Nguồn cung cấp: 5VDC
e) Máy bơm 12V
➢ Điện áp làm việc: 12VDC
8
➢ Lưu lượng tối đa: 2-3 lit/phút
➢ Áp suất đầu ra: 1 - 2.5kg
➢ Độ sâu hút đạt được: 1 - 2.5m
➢ Tuổi thọ làm việc bình thường: 2 - 3 năm
f) LED báo hiệu
➢ LEDs là viết tắt của từ Light Emitting Diodes nghĩa là diode phát quang được cấu
tạo từ chất bán dẫn loại P và loại N.
➢ Sử dụng led với mục đích làm đèn báo trạng thái của mạch, màu xanh được hiểu
là thiết bị đang hoạt động tốt, lượng xà phòng (dung dịch sát khuẩn) vẫn còn đủ để sử
dụng, màu đỏ nghĩa là hết xà phòng.
g) Cảm biến đo khoảng cách HC-SR40
➢ Cảm biến khoảng cách siêu âm HC-SR04 được sử dụng rất phổ biến để xác định
khoảng cách vì rẻ và chính xác. Cảm biến sử dụng sóng siêu âm và có thể đo khoảng
cách trong khoảng từ 2 -> 300 cm, với độ chính xác gần như chỉ phụ thuộc vào cách
lập trình.
9
➢ Cảm biến HC-SR04 có 4 chân là: Vcc, Trig, Echo, GND
➢ Để đo khoảng cách, cảm biến sẽ phát 1 xung rất ngắn (5 microSeconds - us) từ
chân Trig. Sau đó, cảm biến sẽ tạo ra 1 xung HIGH ở chân Echo cho đến khi nhận lại
được sóng phản xạ ở pin này. Chiều rộng của xung sẽ bằng với thời gian sóng siêu âm
được phát từ cảm biển và quay trở lại.
➢ Tốc độ của âm thanh trong khơng khí là 340 m/s (hằng số vật lý), tương đương với
29.412 microSeconds/cm (106 / (340*100)). Khi đã tính được thời gian, ta sẽ chia cho
29.4 để nhận được khoảng cách xấp xỉ.
h) Phần mềm sử dụng
➢ Nhóm sử dụng phần mềm Arduino IDE bởi giao diện dễ dùng, quá trình nạp code
đơn giản.
3. Sơ đồ khối
10
➢ Khối trung tâm là bo mạch nhúng sử dụng Arduino Nano CH340, cùng các thiết
bị, cảm biến được kết nối như sơ đồ.
➢ Phương thức truyền dữ liệu được sử dụng là phương thức I2C
➢ Dữ liệu nhận được từ cảm biến đo mực nước luôn được cập nhật trên LCD, nếu có
người sử dụng, cảm biến tay người sẽ nhận và gửi dữ liệu về bo mạch chủ, từ đó điều
khiển động cơ hoạt động, phun một lượng cố định dung dịch sát khuẩn ra. Khi dung
dịch từ bể chứa hết thì sẽ báo hiệu để người quản lí thêm dung dịch mới.
4. Mục tiêu của đồ án
➢ Củng cố kĩ năng làm việc nhóm, kĩ năng lập trình của các thành viên trong nhóm.
➢ Hiểu được các giao thức giao tiếp, cách thức lập trình Arduino.
➢ Nắm bắt được cách thức các module hoạt động và cách thức truyền tín hiệu của
từng module.
II. Q trình thực hiện
1. Xây dựng phần mềm
a. Khai báo các cổng sử dụng
11
➢ Sử dụng LCD1602, địa chỉ mặc định của LCD là 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
➢ Tiếp đó là khai báo các chân sử dụng
#define denbao1 5
// Pin 5 để hiển thị đèn báo 1
#define denbao2 6
// Pin 6 để hiển thị đèn báo 2
#define TIME_OUT 5000
// Thời gian chờ xung là 5s = 5000ms
#define Trig 8
// Thiết lập chân Trig ở chân số 8
#define Echo 7
// Thiết lập chân Echo ở chân 7
#define hongngoai 3
// Cảm biến hồng ngoại 01 ở chân 3
#define hongngoai2
4
// Cảm biến hồng ngoại 02 ở chân 4
➢ Khởi tạo các biến
int relay = 10;
// Relay 0 ở chân số 10
int relay1 = 9;
// Relay 1 ở chân số 9
int temp;
int distance = 0;
// Thiết lập khoảng cách ban đầu = 0cm
b. Thiết lập các cổng
➢ Cài đặt hiển thị cho LCD
• Khởi động một cổng Serial với một baudrate 9600
Serial.begin(9600);
• Thiết lập các thơng số của LCD với kích thước 16 cột 02 hàng (1602), địa chỉ
slave: 0x27
lcd.init();
• Bật đèn nền
lcd.backlight();
➢ Thiết lập các chân ở các chế độ hoạt động như sau:
• Đèn báo 1 và 2 là hai chân dữ liệu ra, tương tự cho Trig, Echo (dữ liệu vào) và
Relay
pinMode(denbao1, OUTPUT);
pinMode(denbao2, OUTPUT);
12
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(relay, OUTPUT);
pinMode(relay1, OUTPUT);
• Đặt chân data của cảm biến hồng ngoại 0 và 1 loại E18-D80NK là nhận dữ liệu từ
cảm biến vào Arduino
pinMode(hongngoai, INPUT_PULLUP);
pinMode(hongngoai2, INPUT_PULLUP);
• Đèn báo 1 và 2 đặt ở mức cao
digitalWrite(denbao1, HIGH);
digitalWrite(denbao2, HIGH);
• Relay đặt bằng 0, tức là không bơm nước rửa tay
digitalWrite(relay, 0);
c. Tính lượng xà phịng cịn lại sau mỗi lần bơm
➢ Nếu một vật thể bất kì được đặt cách cảm biến tối đa 10cm thì thiết bị sẽ bơm ra
dung dịch, tay người ở vòi nào sẽ bơm bên vịi đó. Sau đó lượng dung dịch xà
phịng cịn lại được tính bằng cách sau:
float getDistance()
{
long duration, distanceCm;
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
duration = pulseIn(Echo, HIGH, TIME_OUT);
distanceCm = duration / 29.4 / 2;
return distanceCm;
}
d. Thiết lập quá trình hoạt động
13
➢ Khi cho tay vào dưới vịi thì sẽ có 2 trường hợp xảy ra
• Trường hợp 1: Khi cả xà phịng và nước đều cịn thì 2 cảm biến đều hoạt động
và máy bơm cũng hoạt động, lượng xà phòng vẫn vẫn được cập nhật trạng thái
còn lại bao nhiêu, đèn LED vẫn báo xanh.
Serial.println(String("Distance > 0 : ")+distance);
checkmaybom();
xaphong();
distancelast= 17 - distance;
lcd.setCursor(0, 0);
lcd.print("Muc nuoc con lai");
lcd.setCursor(5, 1);
sprintf(buff," %.2d ",distancelast);
lcd.print(buff);
if (distancelast > 0) {
digitalWrite(denbao1, HIGH);
digitalWrite(denbao2, LOW);
}
• Trường hợp 2: Khi xà phòng hết, người dùng sẽ chỉ rửa tay với nước sạch (tuy
khơng hiệu quả bằng rửa với xà phịng sát khuẩn) nhưng trạng thái hết cũng chỉ
là tạm thời, đèn đỏ sẽ báo hiệu cho người quản lí cho thêm dung dịch khử khuẩn
vào bể chứa. LCD lại tiếp tục hoạt động để báo hiệu khi nào sắp phải thêm dung
dịch mới.
if ((distance) <= 0)
{
Serial.println(String("Distance < 0 : ")+distance);
digitalWrite(relay, 0);
digitalWrite(relay1, 1);
lcd.setCursor(0, 0);
lcd.print("
Canh bao het
");
lcd.setCursor(5, 1);
14
lcd.print("nuoc");
digitalWrite(denbao1, LOW);
digitalWrite(denbao2, HIGH);
delay(300);
}
e. Chương trình hồn chỉnh
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define denbao1 5
#define denbao2 6
#define TIME_OUT 5000
#define Trig 8
#define Echo 7
#define hongngoai 3
#define hongngoai2
4
int relay = 10;
int relay1 = 9;
int temp;
int distance = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(denbao1, OUTPUT);
pinMode(denbao2, OUTPUT);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(relay, OUTPUT);
pinMode(relay1, OUTPUT);
15
pinMode(hongngoai, INPUT_PULLUP);
pinMode(hongngoai2, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Muc nuoc con lai");
lcd.clear();
digitalWrite(denbao1, HIGH);
digitalWrite(denbao2, HIGH);
digitalWrite(relay, 0);
}
float getDistance()
{
long duration, distanceCm;
digitalWrite(Trig, LOW);
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
duration = pulseIn(Echo, HIGH, TIME_OUT);
distanceCm = duration / 29.4 / 2;
return distanceCm;
}
void loop() {
int distancelast = 0;
distance = getDistance();
char buff[5];
Serial.println(String("Distance1 : ")+distance);
if ((distance) <= 0)
{
Serial.println(String("Distance < 0 : ")+distance);
digitalWrite(relay, 0);
16
digitalWrite(relay1, 1);
lcd.setCursor(0, 0);
lcd.print("
Canh bao het
");
lcd.setCursor(5, 1);
lcd.print("nuoc");
digitalWrite(denbao1, LOW);
digitalWrite(denbao2, HIGH);
delay(300);
}
else {
Serial.println(String("Distance > 0 : ")+distance);
checkmaybom();
xaphong();
distancelast= 17 - distance;
lcd.setCursor(0, 0);
lcd.print("Muc nuoc con lai");
lcd.setCursor(5, 1);
sprintf(buff," %.2d ",distancelast);
lcd.print(buff);
if (distancelast > 0) {
digitalWrite(denbao1, HIGH);
digitalWrite(denbao2, LOW);
}
while(distancelast <= 0) {
Serial.println(String("Distance2 : ")+distance);
distancelast= 17 - distance;
distance = getDistance();
digitalWrite(relay, 0);
digitalWrite(relay1, 1);
lcd.setCursor(0, 0);
17
lcd.print("
Canh bao het
");
lcd.setCursor(5, 1);
lcd.print("nuoc");
digitalWrite(denbao1, LOW);
digitalWrite(denbao2, HIGH);
}
delay(300);
}
}
void checkmaybom()
{
Serial.println(digitalRead(hongngoai));
if (digitalRead(hongngoai) == 1) {
// on relay
digitalWrite(relay, 1);
}
else {
// off relay
digitalWrite(relay, 0);
}
}
void xaphong()
{
Serial.println(digitalRead(hongngoai2));
if (digitalRead(hongngoai2) == 1) {
// on relay
digitalWrite(relay1, 1);
}
else {
// off relay
18
digitalWrite(relay1, 0);
}
}
2. Thiết kế phần cứng
a. Sơ đồ kết nối các khối sử dụng
Khối nguồn
Cảm biến siêu âm
19
Máy bơm
20
Khối điều khiển
Khối hiển thị
21
Cảm biến hồng ngoại
Đèn báo
22
b. Xây dựng mạch in khối điều khiển
23
c. Mơ hình thử nghiệm
➢ Nhóm 2 đã làm một mơ hình mơ phỏng cách thức hoạt động như sau: Thiết kế 2
vòi, một vòi phun nước bên phải (dùng nguồn nước chung từ chung cư), vòi còn lại
phun xà phòng khử khuẩn (bể chứa xà phòng nằm trong thiết bị)
➢ Góc nhìn từ trên xuống của thiết bị
24