1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập lớn thiết kế mạch khóa số điện tử phát triển ứng dụng iot

46 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 1,42 MB

Cấu trúc

  • CHƯƠNG 1: MỞ ĐẦU (10)
    • 1.1. Lý do chọn đề tài (10)
      • 1.1.1. Tầm quan trọng, vai trò của đề tài (10)
      • 1.1.2. Tính cấp thiết của đề tài (10)
      • 1.1.3. Những bất cập, hạn chế của hệ thống cũ (11)
    • 1.2. Mục tiêu của đề tài (11)
      • 1.2.1. Mục tiêu tổng quát (11)
      • 1.2.2. Mục tiêu cụ thể (11)
    • 1.3. Giới hạn và phạm vi của đề tài (12)
      • 1.3.1. Đối tượng nghiên cứu (12)
      • 1.3.2. Phạm vi nghiên cứu (12)
    • 1.4. Nội dung thực hiện (12)
    • 1.5. Phương pháp tiếp cận (12)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VỀ HỆ THỐNG NHÚNG (14)
    • 2.1. Ngoại vi và giao diện (14)
      • 2.1.1. Board Arduino UNO - Khối điều khiển (14)
      • 2.1.2. LCD 16x2 - Hiển thị (15)
      • 2.1.3. Keypad 4x4 – Bàn phím chức năng (17)
      • 2.1.4. Nút nhấn đơn - Nhấn mở cửa trực tiếp (17)
      • 2.1.5. Động cơ Servo - Điều khiển chốt cửa (18)
      • 2.1.6. Còi chip 5V - Phát tiếng báo động (0)
    • 2.2. Phầm mềm cho hệ thống nhúng (0)
      • 2.2.1. Phần mềm lập trình Arduino IDE (0)
      • 2.2.2. Phần mềm mô phỏng Proteus (0)
  • CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG (0)
    • 3.1. Đặc tả yêu cầu hệ thống (0)
      • 3.1.1. Các yêu cầu chức năng (0)
      • 3.1.2. Các yêu phi cầu chức năng (0)
    • 3.2. Thiết kế hệ thống (0)
      • 3.2.1. Thiết kế phần cứng cho hệ thống (0)
      • 3.2.2. Thiết kế phần mềm cho hệ thống (27)
  • CHƯƠNG 4: TÍCH HỢP VÀ ĐÁNH GIÁ HỆ THỐNG (40)
    • 4.1. Xây dựng và tích hợp hệ thống (40)
    • 4.2. Kiểm thử và đánh giá hệ thống (40)
      • 4.2.1. Test chức năng nhập mật khẩu (40)
      • 4.2.2. Test chức năng xóa 1 ký tự trong mật khẩu nhập vào (40)
      • 4.2.3. Test chức năng xóa toàn bộ ký tự trong mật khẩu nhập vào (41)
      • 4.2.4. Test chức năng mở cửa trực tiếp bằng nút nhấn (41)
    • 4.3. Hướng dẫn vận hành hệ thống (42)
  • KẾT LUẬN (45)
  • TÀI LIỆU THAM KHẢO (46)

Nội dung

Vậy đề tài “Thiết kế mạch khóa số điện tử” mà nhóm tiến hành nghiên cứu đóng vai trò quan trọng trong việc giải quyết những vấn đề bảo mật khóa cửa gây ra, tránh việc kẻ gian xâm nhập là

CƠ SỞ LÝ THUYẾT VỀ HỆ THỐNG NHÚNG

Ngoại vi và giao diện

Đề tài sử dụng những linh kiện chính như sau:

- Board Arduino UNO - Khối điều khiển

- Button - Nhấn mở cửa trực tiếp

- Keypad 4x4 – Bàn phím, chức năng

- Động cơ Servo - Điều khiển chốt cửa

- Còi chip 5V - Phát tiếng báo động

2.1.1 Board Arduino UNO - Khối điều khiển

Bảng 2.1: Thông số kĩ thuật Board Arduino UNO

Chip điều khiển ATmega328P Điện áp hoạt động 5V Điện áp đầu vào (khuyên dùng) 7 – 12V Điện áp đầu vào (giới hạn) 6 – 20V

Dòng điện DC trên mỗi chân I/O 20 mA

Dòng điện DC trên chân 3.3V 50 mA

Tốc độ thạch anh 16 MHz

Cách sử dụng các chân của LCD 16x2

Bảng 2.2: Các chân trong LCD 16x2

Chân Ký hiệu Mô tả

1 VSS Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với

GND của mạch điện tử

2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nói chân này với

VCC=5V của mạch điều khiển

3 VEE Điều khiển độ tương phản của LCD

4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0”

(GND) hoặc logic “1” (VCC) để chọn thanh ghi+ Logic “0”: Bus DB0 – DB7 sẽ nối với thanh ghi lệnh IR của

LCD (ở chế độ “ghi” – write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” – read)

+ Logic “1”: Bus DB0 – DB7 sẽ được nối với thanh ghi dữ liệu bên trong LCD

Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic

“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc

Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0 – DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E

+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào (chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high – to – low transition) của tín hiệu chân E

+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0 – DB7 khi phát hiện cạnh lên (low – to – high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống thấp

Tám đường của bus dữ liệu dùng để trao đổi thông tin MPU Có

2 chế độ sử dụng 8 đường bus này:

+ Chế độ 8 bit: Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7

+ Chế có 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7

15 - Nguồn dương cho đèn nền

2.1.3 Keypad 4x4 – Bàn phím chức năng

Số nút nhấn 16 Điện áp hoạt động 3.3V – 5V

2.1.4 Nút nhấn đơn - Nhấn mở cửa trực tiếp

- Các tiếp điểm cố định

Bộ truyền động đi qua toàn bộ công tắc và vào một xy lanh mỏng ở phía dưới. Bên trong là một tiếp điểm và lo xo Khi nhấn nút, nó chạm vào các tiếp điểm tĩnh làm thay đổi trạng thái của tiếp điểm Trong một số trường hợp, người dùng cần giữ nút hoặc nhấn liên tục để thiết bị hoạt động Với các nút nhấn khác, chốt sẽ giữ nút bật cho đến khi người dùng nhấn nút lần nữa.

2.1.5 Động cơ Servo - Điều khiển chốt cửa

Hình 2.5: Động cơ Servo Servo Motor (động cơ servo) được sử dụng phổ biến nhất cho các thiết bị công nghệ cao trong các ứng dụng công nghiệp như công nghệ như công nghệ tự động hóa Là một bộ truyền động quay hoặc tuyến tính cung cấp khả năng điều khiển vị trí chính xác nhanh chóng cho các ứng dụng điều khiển vị trí vòng kín Được thiết kế với đường kính nhỏ và chiều dài rôt dài, tốc độ đáp ứng cao do quan tính thấp Hoạt động trên cơ chế sử dụng phản hồi vị trí roto để điều khiển tốc độ và vị trí của động cơ Động cơ servo sẽ bao gồm động cơ, mạch phản hồi, bộ điều khiển và mạch điện tử khác

Về cơ bản, servo motor được phân loại thành động cơ servo AC và DC tùy thuộc vào nguồn cung cấp.

- Khối ngõ ra: Sử dụng động cơ Servo để điều khiển đóng mở cửa và chuông để cảnh báo b) Xây dựng mạch mô phỏng

*) Khối điều khiển trung tâm

- Sử dụng Boad Arduino UNO R3

- Sử dụng: Chuẩn giao tiếp I2C và LCD 16x2

Kết nối với I2C: Thông thường, để sử dụng màn hình LCD, phải mất rất nhiều chân trên Arduino để điều khiển Do vậy, để đơn giản hóa công việc, người ta đã tạo ra một loại mạch điều khiển màn hình LCD sử dụng giao tiếp I2C Nói một cách đơn giản, chỉ tốn 2 dây để điều khiển màn hình, thay vì 8 dây như cách thông thường.

Kết nối với Arduino UNO:

Bảng 3.3: Kết nối module với màn hình Arduino

Module màn hình LCD (16x2) Arduino

- Sử dụng ma trận phím 4x4

Bảng 3.4: Kết nối ma trận phím với Arduino

- Sử dụng: động cơ RC Servo 9G và còi Buzzer

- Sử dụng: mức điện áp 5VDC.

Dựa vào thiết kế, xây dựng mạch mô phỏng dựa trên phần mềm mô phỏng Proteus như hình vẽ:

Hình 3.10: Mô phỏng hệ thống trên Proteus 3.2.2 Thiết kế phần mềm cho hệ thống a) Giải thuật

Yêu cầu giải thuật: Ban đầu khi cấp nguồn, hiển thị LCD Nhấn phím A để bắt đầu nhập mật khẩu Nhấn các số từ 0 – 9 của Keypad để tiến hành nhập mật khẩu, các số nhập vào hiển thị trên LCD rồi chuyển thành “ * ” ngay sau đó Mạch sẽ so sánh mật khẩu nhập vào và hoạt động theo hai hướng:

- Mật khẩu nhập vào đúng: Servo hoạt động để điều khiển mở chốt cửa và thông báo lên LCD

- Mật khẩu nhập vào sai: thông báo lên LCD và tiến hành nhập lại mật khẩu Nếu nhập sai mật khẩu 4 lần liên tiếp, mạch sẽ khóa chức năng nhập mật khẩu và bật còi để phát cảnh báo.

Hình 3.11: Lưu đồ thuật toán chính của chương trình b) Chương trình

#include // Khai báo thư viện sử dụng cho động cơ

#include // Khai báo thư viện LCD sử dụng I2C LiquidCrystal_I2C lcd(0x3f, 16, 2); // 0x3f địa chỉ LCD, 16 cột và 2 hàng

#include // Khai báo thư viện Keypad

Khai báo các thư viện sử dụng, sau dòng khai báo thư viện I2C phải khai báo loại LCD sử dụng với địa chỉ của LCD và số cột số hàng, ở đây là LCD 16 cột 2 hàng. const byte ROWS = 4; // Bốn hàng const byte COLS = 4; // bốn cột char keys[ROWS][COLS] = {

{'1', '2', '3','A'}, {'4', '5', '6','B'}, {'7', '8', '9','C'}, {'*', '0', '#','D'}}; byte rowPins[ROWS] = {2, 3, 4, 5}; //chân kết nối byte colPins[COLS] = {6, 7, 8, 9};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

Khai báo loại Keypad sử dụng số hàng với số cột là 4, chuỗi ma trận mã ký tự cho Keypad lúc đó ứng với vị mã phím sẽ lấy ra ký tự trong chuỗi Khai báo các chân kết nối cho Keypad theo hàng và cột Dòng cuối là khai báo tên cho động cơ Servo sử dụng. char STR[4] = {'2', '0', '2', '2'}; // Cài đặt mật khẩu tùy ý char str[4] = {' ', ' ', ' ', ' '}; int i, count = 0, cb = 0;

Tạo mảng để lưu mật khẩu chính và mật khẩu nhập vào từ Keypad, có thể tùy ý đặt mật khẩu chính Khai báo các biến sử dụng trong chương trình 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 2byte bộ nhớ và với Arduino Uno nó có giá trị 16bit. void setup() { myServo.attach(10); // Khai báo chân điều khiển động cơ pinMode(11,OUTPUT); // Chân kết nối với còi chíp là Output pinMode(BUTTON,INPUT); // Chân kết nối với button là Input lcd.init(); // Khai báo sử dụng LCD lcd.begin(16, 2); // Cấu hình 16 cột 2 hàng lcd.backlight(); /// Sáng màn hình lcd.clear(); // Xóa màn hình lcd.print(" Enter Password"); //Hiển thị: Hãy nhập mật khẩu i=1; //Biến đánh dấu đc phép nhập mật khẩu hay không: 0 - không được, >0 - được myServo.write(0); // Đưa động cơ quay về góc 0

Chương trình điều khiểu Ở đây ta khai báo chân điều khiển cho Servo là chân số 10, ngõ ra chân 11 để điều khiển còi Buzzer Khai báo sử dụng LCD, màu nền, xóa màn hình và hiển thị dòng chữ “Enter Password” lên LCD. int ktBUTTON(){ return digitalRead(BUTTON); //Trả ra trạng thái nút nhấn: 0 - nhấn, 1 - nhả

Hàm trả về trạng thái nút nhấn Trạng thái = 0: Nút đang được nhấn Trạng thái = 1: Nút đang được nhả. void Open(char key){

// Điều kiện và các giá trị không tính khi nhập mật khẩu if (key && i>0 && key != '*' && key != 'C' && key != 'D' && key != 'B') {

//Lần lượt nhập từng chữ số if (i == 1)

{ str[0] = key; // Giá trị lấy từ nút mà mình nhấn lcd.setCursor(6, 1); //Đưa con trỏ vào vị trị cột 6 dòng 2 lcd.print(str[0]); //In giá trị vừa nhấ delay(200); // Ký tự hiển thị trên màn hình LCD trong 0.2s lcd.setCursor(6, 1);// Sau đó thay thế lại bằng kí tự * lcd.print("*"); // Ký tự được che bởi dấu *

//Tương tự với những chữ số còn lại Độ dài tối đa là 4 chữ số if (i == 2)

{ str[1] = key; lcd.setCursor(7, 1); lcd.print(str[1]); delay(200); lcd.setCursor(7, 1); lcd.print("*");

{ str[2] = key; lcd.setCursor(8, 1); lcd.print(str[2]); delay(200); lcd.setCursor(8, 1); lcd.print("*");

{ str[3] = key; lcd.setCursor(9, 1); lcd.print(str[3]); delay(200); lcd.setCursor(9, 1); lcd.print("*"); count = 1; //Đến chữ số cuối thì đánh dấu count = 1

} if(key == '#'){ //Nếu nhấn nút XÓA trên bàn phím thì xóa 1 kí tự vừa nhập lcd.setCursor(i + 5, 1); lcd.print(" "); if(i >= 0){ i = i - 2;

} if(i < 0){ //Vì i ko đc < 0 (Đảm bảo số đầu tiên của mật khẩu ở ví trí cột 6 i ++;

Hàm nhập mật khẩu để mở cửa Ta dùng lệnh If để kiểm tra điều kiện, khi có phím nhấn với biến i>0 hay thì cho phép nhập mật khẩu Mật khẩu có 4 số tương ứng với i=1,2,3,4 Với mỗi i có một cấu trúc If thực hiện nhập mật khẩu, ví dụ i=1, mã phím Keypad sẽ được lưu vào vị trí “0” của mảng str[ ], và in giá trị mã phím ra lên LCD ở vị trí cột thứ 7 hàng thứ 2,sau khoảng thời gian một giây chuyển thành

“*” để bảo vệ tính bảo mật cho mật khẩu Sau mỗi lần nhấn phím biến i sẽ tăng lên một đơn vị (i++) để chuyển qua lệnh If tiếp theo, tại cấu trúc If với i=4 sau khi nhập xong mật khẩu biến count sẽ bằng 1 để cho phép thực hiện chương trình kiểm tra mật khẩu. if(key == 'D'){ //Nếu nhấn nút HỦY trên bàn phím thì xóa đi toàn bộ mật khẩu vừa nhập i = 1; //Reset lại về nhập số đầu tiên lcd.clear(); lcd.print(" Enter Password");

} if (count == 1 && key == 'A') //Khi count = 1 tức nhập đủ 4 chữ số và nhấn nút

//So sánh chuỗi nhập vào với chuỗi mặc định

//Nếu đúng thì mở cửa, sai thì cảnh báo if (str[0] == STR[0] && str[1] == STR[1] && str[2] == STR[2] && str[3]

== STR[3]) { lcd.clear(); lcd.print(" Correct!"); //Thông báo lên màn hình mật khẩu đúng delay(500); myServo.write(180); // Mở cửa lcd.clear(); lcd.print(" Opened!"); //Hiển thị trạng thái cửa đang mở i = 0; //Không cho phép nhập mật khẩu nữa vì cửa mở rồi count = 0; // Count về 0 để chuẩn bị cho lần nhập mật khẩu sau cb = 0; //Reset biến tính số lần nhập sai cp = 1; //Biến cho phép đổi mật khẩu = 1 (Tức là cửa đc mở rồi mới có thể đổi mật khẩu)

PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

Thiết kế hệ thống

4.1 Xây dựng và tích hợp hệ thống

- Sử dụng phần mềm lập trình Arduino IDE để xây dựng chương trình.

- Sử dụng phần mềm Proteus để mô phỏng phần cứng.

4.2 Kiểm thử và đánh giá hệ thống

Hệ thống chạy ổn định, đáp ứng được các yêu cầu đề ra trên mục thiết kế. Tương đối giống với cách thức hoạt động của các loại khóa số điện tử trên thị trường Hệ thống có tính ứng dụng cao.

4.2.1 Test chức năng nhập mật khẩu

Hình 4.12: Test chức năng nhập mật khẩu

- Kí tự nhập vào được tự động ẩn thành dấu ‘*’.

4.2.2 Test chức năng xóa 1 ký tự trong mật khẩu nhập vào

Hình 4.13: Test chức năng xóa 1 ký tự trong mật khẩu nhập vào

TÍCH HỢP VÀ ĐÁNH GIÁ HỆ THỐNG

Xây dựng và tích hợp hệ thống

- Sử dụng phần mềm lập trình Arduino IDE để xây dựng chương trình.

- Sử dụng phần mềm Proteus để mô phỏng phần cứng.

Kiểm thử và đánh giá hệ thống

Hệ thống chạy ổn định, đáp ứng được các yêu cầu đề ra trên mục thiết kế. Tương đối giống với cách thức hoạt động của các loại khóa số điện tử trên thị trường Hệ thống có tính ứng dụng cao.

4.2.1 Test chức năng nhập mật khẩu

Hình 4.12: Test chức năng nhập mật khẩu

- Kí tự nhập vào được tự động ẩn thành dấu ‘*’.

4.2.2 Test chức năng xóa 1 ký tự trong mật khẩu nhập vào

Hình 4.13: Test chức năng xóa 1 ký tự trong mật khẩu nhập vào

- Chuỗi nhập vào sau khi xóa 1 ký tự

4.2.3 Test chức năng xóa toàn bộ ký tự trong mật khẩu nhập vào

Hình 4.14: Test chức năng xóa toàn bộ ký tự trong mật khẩu nhập vào

- Sau khi nhấn xóa toàn bộ Màn hình trở về trạng thái ban đầu.

4.2.4 Test chức năng mở cửa trực tiếp bằng nút nhấn

Hình 4.15: Test chức năng mở cửa trực tiếp bằng nút nhấn

- Khi nút nhấn mở cửa trực tiếp được nhấn thì hệ thống lập tức hiển thị trạng thái

Hướng dẫn vận hành hệ thống

Phần mềm lập trình Arduino IDE

Hình 4.16: Biểu tượng của phần mềm Cài đặt Arduino IDE

Bước 1: Truy cập địa chỉ http://arduino.cc/en/Main/Software/ Đây là nơi lưu trữ cũng như cập nhật các bản IDE của Arduino Bấm vào mục Windows Zip file for non admin install như hình minh họa.

Hình 4.17: Nhấn vào Windows ZipSau đó nó được chuyển đến một trang mời quyền góp tiền để phát triển phần mềm cho Arduino, tiếp tục bấm JUST DOWNLOAD để bắt đầu tải.

Hình 4.18: Nhấn vào Just Download để tải phần mềm

Bước 2: Sau khi download xong, ta bấm chuột phải vào file arduino-1.8.5 windows.zip vừa Download và chọn “Extract here” để giải nén.

Hình 4.19: Giải nén file vừa tải

Bước 3: Copy thư mục arduino-1.8.5 vừa giải nén đến nơi lưu trữ

Bước 4: Chạy file arduino.exe trong thư mục arduino-1.8.5 để khởi động Arduino

Hình 4.20: Giao diện lập trình của Arduino IDE

Giao diện gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help) Phía dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:

Biên dịch chương trình đang soạn thảo để kiểm tra các lỗi lập trình.

Biên dịch và upload chương trình đang soạn thảo

Mở một trang soạn thảo mới.

Mở các chương trình đã lưu.

Lưu các chương trình đang soạn.

Mở cửa sổ Serial Monitor để gửi dữ liệu giữa máy tính và board Arduino.

Ngày đăng: 15/04/2024, 18:59

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN