1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Đồ án thiết kế hệ thống nhúng, học viện công nghệ bưu chính viễn thông (1)

33 26 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

Tiêu đề Cửa khoá số điện tử
Tác giả Nguyễn Văn Xuân, Phạm Hoàng Linh, Bùi Minh Tuấn, Nguyễn Bá Vũ
Người hướng dẫn TS. Nguyễn Ngọc Minh
Trường học Học viện công nghệ bưu chính viễn thông
Thể loại đồ án thiết kế
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 33
Dung lượng 2,09 MB

Cấu trúc

  • CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI (4)
    • 1. Giới thiệu (4)
    • 2. Chức năng của hệ thống (4)
    • 3. Hoạt động của hệ thống (5)
  • CHƯƠNG II: THIẾT KẾ HỆ THỐNG (6)
    • 1. Sơ đồ khối tổng thể hệ thống (6)
    • 2. Các khối chức năng của hệ thống (7)
      • 2.1. Khối điều khiển (7)
        • 2.1.1. Một vài thông số của Arduino UNO R3 (7)
        • 2.1.2. Các chân năng lượng (8)
        • 2.1.3. Bộ nhớ (8)
        • 2.1.4. Các cổng vào/ra (9)
      • 2.2. Khối phím nhấn (10)
      • 3.1. Khối hiển thị (14)
        • 3.1.1. Giới thiệu (14)
        • 3.1.2. Các thanh ghi (17)
      • 3.2. Thiết bị chấp hành (18)
        • 3.2.1. Giới thiệu (18)
        • 3.2.2. Lắp mạch (19)
        • 3.2.3. Lập trình điều khiển (20)
  • CHƯƠNG III: THIẾT KẾ VÀ THI CÔNG (21)
    • 1. Nguyên lý hoạt động (21)
    • 2. Lưu đồ thuật toán (23)
    • 3. Mã nguồn của chương trình (23)
  • CHƯƠNG IV: KẾT LUẬN (32)
  • TÀI LIỆU THAM KHẢO (32)

Nội dung

GIỚI THIỆU ĐỀ TÀI

Giới thiệu

Khóa số là thiết bị bảo vệ tài sản và thiết bị, yêu cầu người dùng nhập mã số đã cài đặt để mở Hiện nay, trên thị trường có hai loại khóa số chính: khóa số cơ khí và khóa số điện tử.

Khóa số cơ khí hoạt động bằng cách xoay các vòng số để tạo thành một dãy số cụ thể Khi các số này được sắp xếp đúng cách, khóa sẽ mở hoặc khóa lại.

Khóa số điện tử yêu cầu người dùng nhập đúng mật khẩu, là một chuỗi các số liên tiếp, để mở khóa Bài viết này sẽ giới thiệu về khóa điện tử và các yêu cầu cơ bản của một thiết bị khóa thông dụng.

- Tính an toàn: phải có chức năng bảo mật cao

- Có thể thay đổi bảo mật khi cần thiết

- Hệ thống vận hành ổn định, tuổi thọ cao.

Chức năng của hệ thống

Hệ thống gồm một chuổi mã số từ 0 đến 9, và độ dài mật mã không quá 10 số chỉ có người được phân quyền sử dụng mới biết được

Có hệ thống phím gồm 16 phím, ngoài 10 số mật khẩu có các phím chức năng: phím Enter, phím Đổi mã,

Hệ thống hiển thị trực quan qua LCD 16x2A, có đèn chiếu sáng khi điều kiện môi trường tối

Có chức năng thay đổi mật khẩu khi cần thiết, và mật khẩu mặc định ban đầu là

Hoạt động của hệ thống

Khi bắt đầu quá trình cài đặt lại thiết bị, bạn sẽ cần nhập một mật khẩu gồm 5 chữ số Mật khẩu này sẽ được lưu lại dưới dạng SET PASSWORD Lưu ý rằng thiết bị sẽ bị KHÓA sau khi hoàn tất cài đặt.

 Phím A - để mở khóa thiết bị Nhập mật khẩu chính xác và nhấn A để mở khóa

 Phím D - để khóa bất cứ lúc nào Chỉ cần nhấn D và bạn sẽ thấy thông báo LOCKED

Để thay đổi mật khẩu, nhấn phím B và nhập mật khẩu chính xác, sau đó nhấn A Bạn sẽ nhận được thông báo yêu cầu nhập mật khẩu mới Hãy nhập 4 chữ số mà bạn muốn sử dụng làm mật khẩu mới; 4 chữ số đầu tiên bạn nhập sẽ được lưu lại là mật khẩu mới.

 Phím C – bạn cần nhấn phím C để bắt đầu nhập mật khẩu

THIẾT KẾ HỆ THỐNG

Sơ đồ khối tổng thể hệ thống

 Khối hiển thị thông tin : dùng để hiển thị thông tin (lấy từ khối điều khiển)

 Khối phím nhấn : nhập thông tin gửi đến khối điều khiển

 Khối điều khiển tiếp nhận các thông tin, và xử lý các thông tin đó Xuất tín hiệu để điều khiển các thiết bị khác

 Thiết bị chấp hành ở đây có thể là động cơ, có thể là rơle để điều khiển thiết bị chính là cửa hoặc khóa

Các khối chức năng của hệ thống

Chức năng chính của hệ thống là tiếp nhận tín hiệu từ bàn phím, so sánh mã và hiển thị kết quả trên màn hình LCD Từ đó, hệ thống sẽ gửi các tín hiệu điều khiển đến mạch báo động tương ứng.

2.1.1 Một vài thông số của Arduino UNO R3

Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16 MHz

Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên dùng 7-12V DC Điện áp vào giới hạn 6-20V DC

Số chân Digital I/O 14 (6 chân hardware PWM)

Số chân Analog 6 (độ phân giải 10bit)

Dòng tối đa trên mỗi chân

Dòng ra tối đa (5V) 500 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader

GND (Ground) là cực âm của nguồn điện cung cấp cho Arduino UNO Khi sử dụng các thiết bị với nguồn điện riêng biệt, các chân GND cần phải được kết nối với nhau để đảm bảo hoạt động ổn định.

 5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA

 3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA

 Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND

Chân IOREF trên Arduino UNO cho phép đo điện áp hoạt động của vi điều khiển, luôn duy trì ở mức 5V Tuy nhiên, bạn không nên sử dụng chân này để lấy nguồn 5V, vì chức năng chính của nó không phải là cung cấp điện.

 RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ

Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:

Vi điều khiển có 32KB bộ nhớ Flash để lưu trữ các đoạn lệnh lập trình Trong số này, khoảng vài KB thường được sử dụng cho bootloader, nhưng bạn không cần lo lắng vì hiếm khi bạn cần sử dụng quá 20KB bộ nhớ Flash này.

SRAM (Bộ nhớ truy cập ngẫu nhiên tĩnh) có dung lượng 2KB, nơi lưu trữ giá trị các biến được khai báo trong lập trình Số lượng biến bạn khai báo càng nhiều thì càng cần nhiều bộ nhớ RAM Tuy nhiên, bộ nhớ RAM thường không phải là vấn đề lớn mà bạn phải lo lắng Lưu ý rằng khi mất điện, dữ liệu trên SRAM sẽ bị mất.

EEPROM (Electrically Erasable Programmable Read-Only Memory) với dung lượng 1KB hoạt động như một ổ cứng mini, cho phép người dùng đọc và ghi dữ liệu mà không lo mất mát khi mất điện, khác biệt hoàn toàn so với các loại dữ liệu thông thường.

Arduino UNO có 14 chân digital để đọc và xuất tín hiệu, với hai mức điện áp là 0V và 5V Mỗi chân có dòng vào/ra tối đa là 40mA, và đều được trang bị điện trở pull-up từ được tích hợp trong vi điều khiển ATmega328, mặc dù các điện trở này không được kết nối mặc định.

Một số chân digital có các chức năng đặc biệt như sau:

Chân Serial 0 (RX) và 1 (TX) trên Arduino Uno được sử dụng để gửi và nhận dữ liệu TTL Serial, cho phép giao tiếp với các thiết bị khác Kết nối Bluetooth thường được coi là một dạng kết nối Serial không dây Nếu không cần giao tiếp Serial, nên tránh sử dụng các chân này.

2 chân này nếu không cần thiết

Chân PWM (3, 5, 6, 9, 10, và 11) cho phép xuất xung PWM với độ phân giải 8bit, với giá trị từ 0 đến 28-1 tương ứng với điện áp từ 0V đến 5V thông qua hàm analogWrite() Điều này có nghĩa là bạn có thể điều chỉnh điện áp đầu ra ở các chân này từ 0V đến 5V, thay vì chỉ giới hạn ở mức 0V và 5V như các chân khác.

Chân giao tiếp SPI gồm 10 (SS), 11 (MOSI), 12 (MISO), và 13 (SCK) Ngoài việc thực hiện các chức năng thông thường, bốn chân này còn hỗ trợ truyền dữ liệu qua giao thức SPI với các thiết bị khác.

Trên board Arduino UNO, có một đèn LED màu cam được ký hiệu là L, nằm ở chân số 13 Khi bạn nhấn nút Reset, đèn LED này sẽ nhấp nháy để báo hiệu Nếu chân số 13 được sử dụng, đèn LED sẽ phát sáng.

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0

Arduino UNO cho phép đọc giá trị điện áp trong khoảng 0V đến 5V thông qua chân A0 đến A5 Bạn có thể sử dụng chân AREF để cung cấp điện áp tham chiếu, ví dụ như 2.5V, giúp đo điện áp từ 0V đến 2.5V với độ phân giải 10bit Ngoài ra, Arduino UNO còn trang bị hai chân A4 (SDA) và A5 (SCL) để hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

Các nút nhấn trên bàn phím được sắp xếp theo hàng và cột Bàn phím 3X4 có 4 hàng và 3 cột và bàn phím 4X4 có 4 hàng và 4 cột:

Dưới mỗi phím của bàn phím 4x4 là một màng công tắc, với các công tắc trong cùng một hàng được kết nối với nhau thông qua một đường dẫn điện nằm dưới miếng đệm Tương tự, các công tắc trong cùng một cột cũng được kết nối bằng một đường dẫn điện, cho phép một bên của công tắc liên kết với tất cả các công tắc khác trong cột đó Mỗi hàng và cột được gán một chân duy nhất, tổng cộng có 8 chân cho bàn phím này.

Khi nhấn một nút, công tắc sẽ kết nối giữa cột và đường dẫn điện của hàng, cho phép dòng điện lưu thông giữa chân cột và chân hàng.

Sơ đồ bàn phím 4X4 cho thấy cách các hàng và cột được kết nối:

Arduino có khả năng xác định nút nhấn nào được nhấn bằng cách phát hiện chân hàng và cột kết nối với nút nhấn Quá trình này diễn ra qua bốn bước cụ thể.

1 Đầu tiên, khi không có nút nào được nhấn, tất cả các chân cột được giữ ở mức CAO và tất cả các chân hàng được giữ ở mức THẤP:

2 Khi một nút được nhấn, chân cột được kéo xuống THẤP vì vậy dòng điện từ cột mức

CAO chảy sang chân hàng mức THẤP:

THIẾT KẾ VÀ THI CÔNG

Nguyên lý hoạt động

Để mở cửa, bạn cần gõ đúng mật khẩu gồm 4 ký tự Nếu mật khẩu chính xác, màn hình LCD sẽ hiển thị thông báo "mở cửa" Ngược lại, nếu nhập sai, màn hình sẽ hiện thông báo "nhập sai mật khẩu".

Để đổi mật khẩu, bạn chỉ cần nhấn nút "đổi mật khẩu" trên bàn phím, sau đó nhập mật khẩu mới Sau khi hoàn tất, hãy nhấn nút xác nhận theo hướng dẫn trên màn hình LCD, và mật khẩu của bạn sẽ được cập nhật thành công.

Mã nguồn của chương trình

#include int k=0, pos1=0, pos20, state = 0; const byte numRows = 4; const byte numCols = 4; char keymap[numRows][numCols] 24

}; char keypressed; char code[] = {'1', '2', '3', '4'}; char check1[sizeof(code)]; char check2[sizeof(code)]; short a = 0, i = 0, s = 0, j = 0; byte rowPins[numRows] = {9, 8, 7, 6}; byte colPins[numCols] = {5, 4, 3, 2};

Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

{ lcd.init(); lcd.backlight(); lcd.begin (16, 2); lcd.setCursor(0, 0); lcd.print("Moi Nhap Mat Khau"); lcd.setCursor(1 , 1); myservo.attach(11);

{ while (k==3){ lcd.clear(); lcd.setCursor(1, 0); lcd.print("nhap sai qua 3 lan"); lcd.setCursor(1, 1); lcd.print("cho 15s de nhap lai"); delay(15000); k=0; break;

} keypressed = myKeypad.getKey(); if (keypressed == 'C') { lcd.clear(); lcd.print("An C de nhap ma"); lcd.setCursor(6, 1); lcd.setCursor(0, 0); lcd.println("Moi Nhap Mat Khau"); ReadCode(); if (a == sizeof(code)){

26 else { lcd.clear(); lcd.setCursor(1, 0); lcd.print("CODE"); lcd.setCursor(0, 0); lcd.print("Mat Khau sai"); lcd.setCursor(12, 1); lcd.print(" "); lcd.setCursor(4, 1); lcd.print("Moi Nhap lai"); k++;

} delay(2000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Moi Nhap Mat Khau"); lcd.setCursor(1 , 1);

ChangeCode(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Moi Nhap Mat Khau"); lcd.setCursor(1 , 1);

} if (keypressed == 'D' && state == 1){ CloseDoor(); state = 0;

} void ReadCode() { i = 0; a = 0; j = 0; while (keypressed != 'A') { keypressed = myKeypad.getKey(); if (keypressed != NO_KEY && keypressed != 'A' ) { lcd.setCursor(j, 1); lcd.print("*"); j++; if (keypressed == code[i] && i < sizeof(code)) { a++; i++;

} void ChangeCode() { lcd.clear(); lcd.print("Thay Doi Mat Khau"); delay(1000); lcd.clear(); lcd.print("Moi Nhap Ma Cu");

28 if (a == sizeof(code)) { lcd.clear(); lcd.print("Thay Doi Mat Khau");

GetNewCode2(); s = 0; for (i = 0 ; i < sizeof(code) ; i++) { if (check1[i] == check2[i]) s++;

} if (s == sizeof(code)) { for (i = 0 ; i < sizeof(code) ; i++) { code[i] = check2[i];

} lcd.clear(); lcd.print("Thay Doi Mat Khau"); delay(2000);

} else { lcd.clear(); lcd.print("KhongKhopMaVuaNhap"); lcd.setCursor(0, 1); delay(2000);

The function `GetNewCode1()` initializes variables and clears the LCD display to prompt the user to enter a new code by pressing the 'A' key It waits for the user to press 'A', while displaying asterisks for each key pressed, storing the input in the `check1` array The process continues until the correct key is detected.

The code initializes variables and clears the LCD display to prompt the user to confirm a new code by pressing the 'A' key After a brief delay, it waits for the user to press 'A', displaying asterisks for each key pressed until the correct key is entered.

} void OpenDoor() { lcd.clear(); lcd.setCursor(1, 0); lcd.print("Access Granted"); lcd.setCursor(4, 1); lcd.print("WELCOME!!");

31 for (pos1 = 0 ; pos1 < 180; pos1++) { myservo.write(pos1); delay(15);

} void CloseDoor() { lcd.clear(); lcd.setCursor(4, 1); lcd.print("CLOSE!!"); for (pos2 = 180; pos2 > 0; pos2 ) { myservo.write(pos2); delay(15);

Ngày đăng: 14/10/2021, 13:38

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w