CƠ SỞ LÝ THUYẾT
PHẦN CỨNG
2.1.1 Giới thiệu về Arduino Uno R3
Arduino là một board mạch vi xử lý mở, giúp xây dựng các ứng dụng tương tác với môi trường Phần cứng của Arduino sử dụng vi xử lý AVR Atmel 8bit hoặc ARM Atmel 32-bit, với các tính năng như 1 cổng USB, 6 chân đầu vào analog và 14 chân I/O kỹ thuật số Được giới thiệu vào năm 2005, Arduino mang đến giải pháp dễ dàng và tiết kiệm cho người yêu thích, sinh viên và chuyên gia để phát triển thiết bị tương tác thông qua cảm biến và cơ cấu chấp hành Các dự án phổ biến cho người mới bắt đầu bao gồm robot đơn giản, hệ thống điều khiển nhiệt độ và phát hiện chuyển động.
Hình 2.2 Sơ đồ chân Arduino UNO R3 Bảng 2.1 Các thông số của Arduino UNO R3
Vi điều khiển Atmega328 họ 8 bit Điện áp hoạt động 5V DC (chỉ được cấp qua USB)
Tần số hoạt động 16 MHz
Dòng tiêu thụ 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 PWM)
Số chân Analog 6 (độ phân giải 10bit)
Dòng tối đa trên mỗi chân I/O 30mA
Dòng ra tối đa (5V) 500mA
Dòng ra tối đa (3.3V) 50mA
Bộ nhớ Flash 32KB(Atmega328)
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO.
5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là
3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO.
Trên Arduino UNO, chân IOREF 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, không nên sử dụng chân này để cấp 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ở
Bộ nhớ của Arduino UNO R3:
Sử dụng vi điều khiển Atmega328.
Bộ nhớ Flash 32KB trên vi điều khiển cho phép lưu trữ các đoạn lệnh lập trình, trong đó khoảng vài KB sẽ được dành cho bootloader Thông thường, dung lượng sử dụng cho bootloader không vượt quá 20KB bộ nhớ này.
2KB cho SRAM (Bộ nhớ truy cập ngẫu nhiên tĩnh): các biến được khai báo trong lập trình sẽ được lưu trữ tại đây Số lượng biến khai báo càng nhiều thì yêu cầu về bộ nhớ RAM càng lớn.
Chú ý: khi mất điện, dữ liệu trên SRAM sẽ bị mất.
EEPROM (Bộ nhớ chỉ đọc có thể lập trình và xóa điện tử) với dung lượng 1KB hoạt động như một ổ cứng mini, cho phép đọc và ghi dữ liệu mà không lo bị mất khi mất điện, khác với dữ liệu trên SRAM.
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial.
Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây.
Chân giao tiếp SPI bao gồm 10 (SS), 11 (MOSI), 12 (MISO), và 13 (SCK) Bên cạnh các chức năng thông thường, bốn chân này còn hỗ trợ truyền phát dữ liệu thông qua giao thức SPI với các thiết bị khác.
Led 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng, led sẽ sáng.
Chân PWM (~) 3, 5, 6, 9, 10 và 11 cho phép xuất xung PWM với độ phân giải 8 bit, tương ứng với giá trị từ 0 đến 255, tạo ra điện áp từ 0V đến 5V Điều này có nghĩa là điện áp đầu ra tại các chân này có thể được điều chỉnh linh hoạt trong khoảng từ 0V đến 5V.
2.1.2 Giới thiệu về ESP8266 NodeMCU
ESP8266 là một chip Wifi 2.4Ghz tích hợp, có thể lập trình và giá thành rẻ, được sản xuất bởi công ty Espressif Systems của Trung Quốc Ra mắt lần đầu vào tháng 8 năm 2014 với module ESP-01, chip này cho phép kết nối Internet qua Wifi một cách nhanh chóng và yêu cầu ít linh kiện đi kèm Với mức giá rất cạnh tranh so với tính năng và khả năng mà ESP8266 mang lại, nó trở thành lựa chọn phổ biến cho các dự án IoT.
ESP8266 sở hữu một cộng đồng phát triển toàn cầu đông đảo, cung cấp nhiều module lập trình mã nguồn mở, giúp người dùng dễ dàng tiếp cận và nhanh chóng xây dựng ứng dụng.
Hiện nay, tất cả các dòng chip ESP8266 trên thị trường đều mang nhãn ESP8266EX, là phiên bản nâng cấp của ESP8266 Đến nay, đã có hơn 14 phiên bản ESP ra đời, trong đó phiên bản phổ biến nhất là ESP-12.
Hình 2.3 ESP8266 Module ESP8266 NodeMCU
Module ESP-12 kết hợp với firmware ESP8266 trên Arduino đã tạo ra NodeMCU, một kit phát triển ESP8266 phổ biến hiện nay Thiết kế phần cứng giao tiếp tiêu chuẩn giúp người dùng dễ dàng kết nối và sử dụng.
8 dễ dàng, có thể lập trình, nạp chương trình trực tiếp trên phần mềm
Arduino, đồng thời tương tích với các bộ thư viện Arduino sẵn có.
Sơ bộ về Module ESP8266 NodeMCU:
- Khả năng hoạt động như một Module Wifi:
Có thể quét và kết nối với một mạng Wifi bất kì (Wifi client) để thực hiện tác vụ như lưu trữ, truy cập dữ liệu từ server.
Tạo điểm truy cập Wifi (Wifi Access Point) cho phép các thiết bị khác kết nối,giao tiếp và điều khiển.
Một server để xử lý dữ liệu từ các thiết bị sử dụng internet.
- Nguồn vào và nguồn ra:
ESP8266 NodeMCU được cấp nguồn qua cổng micro USB tích hợp, giúp việc nạp code trở nên thuận tiện Ngoài ra, bạn có thể linh hoạt cấp nguồn cho module bằng cách sử dụng sạc dự phòng thay vì chỉ phụ thuộc vào nguồn USB từ máy tính, với điện áp tối đa là 5V.
ESP8266 NodeMCU có thể cung cấp nguồn cho tối đa 4 thiết bị: 3 nguồn ra 3.3V và một nguồn từ chân Vin (điện thế bằng
Khi sử dụng nguồn từ cổng micro USB, cần lưu ý không cắm nhầm chân dương (3v3 và Vin) và chân âm (GND) Các chân 3.3V đều có tính năng bảo vệ, nên nếu cắm ngược, module chỉ nóng lên và ngừng hoạt động Tuy nhiên, chân Vin không được bảo vệ, do đó việc cắm ngược có thể gây hư hỏng hoặc cháy module.
- Truyền và nhận tín hiệu:
ESP8266 NodeMCU sở hữu 13 chân GPIO (General-purpose input/output) cho phép truyền và nhận tín hiệu, bao gồm các chân từ D0 đến D8 cùng với RX, TX, SD2 và SD3 Module này có thể kết nối với nguồn tối đa 5V thông qua cổng Micro USB, tuy nhiên, các chân I/O chỉ có khả năng giao tiếp với linh kiện ở điện thế tối đa 3.3V.
Hình 2.5 Sơ đồ chân của Module
IC chính: ESP8266 Wifi SoC.
Phiên bản firmware: NodeMCU Lua.
Chip nạp và giao tiếp UART: CP2102.
GPIO tương thích hoàn toàn với firmware Node MCU Cấp nguồn: 5VDC MicroUSB hoặc Vin.
GPIO giao tiếp mức 3.3VDC.
Tích hợp Led báo trạng thái, nút Reset, Flash.
Tương thích hoàn toàn với trình biên dịch Arduino.
2.1.3 Giới thiệu về RFID RC522
CÁC CHUẨN GIAO TIẾP ĐƯỢC SỬ DỤNG
UART là giao thức truyền thông nối tiếp trên lớp vật lý, bao gồm chuẩn RS232 cho kết nối điểm-điểm và chuẩn RS485 cho kết nối đa điểm, được quản lý bởi Hội Công Nghiệp Điện Tử EIA Các chuẩn này quy định các thành phần của giao diện nối tiếp như mức điện áp, chuẩn đấu nối, chân ra, chiều dài dây, thứ tự bit và tốc độ bit giữa các thiết bị.
Truyền dữ liệu không đồng bộ sử dụng đường truyền dữ liệu (Tx) và đường nhận dữ liệu (Rx) mà không cần xung CK, không còn phân biệt giữa chủ (Master) và tớ (Slave) mà các hệ thống hoạt động ở cấp độ ngang hàng Mỗi xung CK tương ứng với một bit dữ liệu được truyền Để thực hiện việc truyền dữ liệu, mỗi hệ thống cần có một mạch dao động tạo xung CK, và hai hệ thống phải có mạch dao động độc lập nhưng đồng bộ về tần số hoặc tốc độ.
Để đảm bảo đồng bộ giữa bộ truyền và bộ nhận trong truyền dữ liệu nối tiếp bất đồng bộ, mỗi khung dữ liệu sẽ được thêm vào bit start ở đầu và bit stop ở cuối mỗi byte Vì không có tín hiệu xung Clock chung, mỗi thiết bị phải xác định bit start bằng cách lấy mẫu từ đường nhận dữ liệu (Rx) với xung nhịp nội Khi bit start được nhận diện, thiết bị thu sẽ biết rằng quá trình truyền đã bắt đầu và cần phải dịch chuỗi bit nối tiếp Đồng thời, cả quá trình truyền và nhận phải tuân theo một tốc độ bit chung đã được xác định trước.
16 quá trình truyền thông bắt đầu, nếu không thì thiết bị nhận sẽ giải mã sai dữ liệu thu được.
Truyền thông nối tiếp UART cho phép giao tiếp song công giữa bộ nhận và bộ truyền, yêu cầu phần cứng của bộ vi điều khiển phải có bộ truyền và bộ nhận riêng biệt Để đảm bảo kết nối hiệu quả, các thông số truyền thông giữa máy phát và máy thu cần phải giống nhau, bao gồm việc thiết lập cùng chuẩn, tốc độ Baud, số bit bắt đầu và kết thúc, tính chẵn lẻ, phân cực và mức điện áp.
Giao thức nối tiếp SPI (Serial Peripheral Interface) được phát triển bởi Motorola, cho phép nhiều thiết bị ngoại vi giao tiếp song công, tức là truyền và nhận dữ liệu đồng thời SPI là một giao thức đa điểm, sử dụng một giao diện nối tiếp với các tín hiệu SCLK (xung nhịp), MOSI (Master Out/Slave In), MISO (Master In/Slave Out) và SS (Slave Select) Trong hệ thống này, chỉ có một thiết bị được xác định là thiết bị chủ (master), trong khi tất cả các thiết bị còn lại đều là thiết bị tớ (slave) trên bus nối tiếp.
Thiết bị chủ giao tiếp với từng thiết bị tớ thông qua việc điều khiển đường SS, cho phép truyền nhận dữ liệu Thiết bị chủ kiểm soát quá trình này bằng cách quản lý các đường SS và cung cấp xung trên đường SCLK Thông tin từ thiết bị tớ được truyền đến thiết bị chủ qua đường MISO, trong khi dữ liệu được gửi từ thiết bị tớ đến thiết bị chủ qua đường MOSI.
SPI là một quá trình truyền dữ liệu đồng bộ, trong đó bộ truyền được chỉ định làm chủ, cung cấp xung đồng bộ cho máy phát và máy thu Để thiết lập giao tiếp, một thiết bị slave được chọn bằng cách hạ mức tín hiệu SS xuống thấp.
Quá trình truyền SPI bắt đầu khi một byte dữ liệu được gửi vào thanh ghi dữ liệu SPI (SPDR) của thiết bị chủ Tại thời điểm này, bộ phát xung nhịp SPI cung cấp xung nhịp cho cả master và slave qua chân SCLK Mỗi xung CLK sẽ dịch một bit dữ liệu từ thanh ghi dịch của master qua chân MOSI, trong khi dữ liệu được nhận tại chân MOSI của slave Đồng thời, một bit dữ liệu cũng được truyền qua chân MISO của slave vào chân MOSI của master.
PHẦN MỀM
Firebase là dịch vụ API của Google, cho phép lưu trữ và đồng bộ dữ liệu giữa nhiều thiết bị Nền tảng đám mây này hỗ trợ lập trình viên phát triển ứng dụng nhanh chóng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.
Hình 2.11 Ứng dụng rộng lớn của Firebase Lịch sử phát triển
Firebase được thành lập bởi Tamplin và Lee, hai nhà sáng lập đã phát triển dịch vụ API chat trực tuyến dựa trên nền tảng Envolve Họ đã sử dụng Envolve để đồng bộ hóa dữ liệu trạng thái trò chơi trong thời gian thực trên trang web Nhận thấy tiềm năng, Tamplin và Lee quyết định tách riêng hệ thống chat và kiến trúc thời gian thực, tạo ra cơ sở dữ liệu Firebase vào tháng 4 năm 2012 Đến ngày 21 tháng 10 năm 2014, Google đã mua lại Firebase.
Các chức năng chính của Firebase
Realtime Database – Cơ sở dữ liệu thời gian thực
Firebase lưu trữ dữ liệu dưới dạng JSON và đồng bộ hóa cơ sở dữ liệu theo thời gian thực cho tất cả các client Điều này cho phép xây dựng ứng dụng đa nền tảng (cross-platform) với khả năng tự động cập nhật khi có thay đổi hoặc bổ sung dữ liệu trong cơ sở dữ liệu của Firebase.
Firebase Authentication – Hệ thống xác thực của Firebase
Với Firebase chúng ta có thể dễ dàng tích hợp các công nghệ xác thực của Google, Facebook, Twitter, … hoặc một hệ thống xác thực mà
19 chúng ta mình tạo ra từ trong ứng dụng ở bất kì nền tảng nào như Android, iOS hoặc Web.
Chúng ta có thể nhanh chóng triển khai một ứng dụng web với Firebase, nơi dữ liệu được lưu trữ an toàn trên đám mây và bảo vệ bằng giao thức SSL Firebase mang lại nhiều lợi ích, nhưng cũng có những nhược điểm cần xem xét.
- Triển khai ứng dụng cực nhanh
- Có linh hoạt và mở rộng ứng dụng dễ dàng
- Tính ổn định cao ít khi nào gặp trường hợp sập server
- Người đăng ký tài khoản miễn phí có 1GB dung lượng lưu trữ
Đăng ký tài khoản miễn phí cho phép tối đa 100 thiết bị hoặc người truy cập, trong khi gói tính phí sẽ tính phí theo thuê bao và dung lượng lưu trữ sử dụng.
Các thiết bị Arduino sử dụng ngôn ngữ lập trình riêng, dựa trên Wiring, một biến thể của C/C++ Ngôn ngữ này dễ học và dễ hiểu nhờ vào nguồn gốc từ C/C++ Để lập trình, gửi lệnh và nhận tín hiệu từ mạch Arduino, người dùng có thể sử dụng môi trường lập trình Arduino IDE (Integrated Development Environment) do nhóm phát triển cung cấp.
Environment – Môi trường phát triển tích hợp) Phần mềm này có thể chạy trên nhiều nền tảng hệ điều hành khác nhau: Windows, Mac OS,…
Hình 2.12 Giao diện phần mềm Arduino IDE Vùng lệnh
Bao 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ác dòng code được soạn thảo trong chương trình có tên "Blink", hiển thị ngay dưới các biểu tượng Lưu ý rằng dấu "§" phía sau tên chương trình cho biết đoạn mã chưa được lưu.
Vùng thông báo lỗi (debug)
Những thông báo từ IDE sẽ được hiển thị tại đây Để ý rằng góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng.
TÍNH TOÁN VÀ THIẾT KẾ
GIỚI THIỆU
Đề tài này yêu cầu thiết kế hệ thống điều khiển cho động cơ Servo, với các thao tác từ ứng dụng di động hoặc mạch được gửi về vi xử lý để thực hiện lệnh điều khiển Vi xử lý cũng thu thập dữ liệu từ động cơ và cảm biến, sau đó hiển thị thông tin trên ứng dụng di động Chương này sẽ tập trung vào việc tính toán và thiết kế các khối cho hệ thống, lựa chọn linh kiện và thiết bị phù hợp, cùng với việc thiết kế bản vẽ hoàn thiện cho hệ thống.
TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG
3.2.1 Thiết kế sơ đồ khối hệ thống
Khối thực thi điều khiển
Khối xử lý trung tâm
Khối cơ sở dữ liệu
Khối truyền nhận dữ liệu
Hình 3.1 Sơ đồ khối của hệ thống
Chức năng của các khối:
Khối xử lý trung tâm là phần quan trọng nhất trong hệ thống, với Arduino đóng vai trò như bộ não Nó thực hiện giao tiếp qua giao thức UART với khối truyền dữ liệu nodeMCU, giao tiếp SPI với RFID ở khối thu MC-38, và gửi tín hiệu đến khối phát để điều khiển Servo.
Khối truyền nhận dữ liệu là một thành phần quan trọng trong hệ thống, nơi nodeMCU thực hiện việc cập nhật dữ liệu từ cơ sở dữ liệu và gửi thông tin này đến Arduino để xử lý Đồng thời, nó cũng đảm bảo việc truyền tải dữ liệu lên hệ thống một cách hiệu quả.
Khối thực thi điều khiển: đây là ứng dụng được viết trên điện thoại android, dùng để gửi và nhận dữ liệu từ khối cơ sở dữ liệu.
Khối thu: thu thập tín hiệu từ từ cảm biến và module, truyền về khối xử lý trung tâm để xử lý.
Khối phát: dùng để truyền tín hiệu từ khối xử lý trung tâm đến thiết bị ngoại vi.
Khối nguồn: cung cấp nguồn để các thiết bị hoạt động ổn định.
Khối cơ sở dữ liệu: đây là nơi lưu trữ dữ liệu giữa khối truyền nhận dữ liệu và khối thực thi điều khiển.
3.2.2 Tính toán và thiết kế mạch a) Thiết kế khối xử lý trung tâm Để xử lý dữ liệu hai chiều ta cần một bộ xử lý dữ liệu và nhiều cổng giao tiếp serial để giao tiếp với nodeMCU, RFID, MC-38, Servo Cho nên nhóm chúng em chọn board Arduino UNO R3 sử dụng bộ xử lý Atmega328.
Bảng mạch này được trang bị nhiều chân I/O, cho phép chúng em thực hiện giao tiếp hiệu quả Đặc biệt, nó có nhiều cổng UART (Rx, Tx) rất phù hợp với đề tài của chúng em Hơn nữa, bảng mạch còn hỗ trợ thư viện cho giao tiếp với nodeMCU, mang lại nhiều tiện ích cho dự án.
23 tương thích nhiều hệ điều hành, chương trình lập trình đơn giản, dễ sử dụng.
Phần mềm lập trình cho vi điều khiển, thường được gọi là IDE, là một công cụ mã nguồn mở lý tưởng cho học sinh và sinh viên.
Hình 3.2 Sơ đồ nguyên lý của hệ thống b) Thiết kế khối truyền nhận dữ liệu
Module ESP8266 NodeMCU là một KIT phát triển dựa trên chip Wifi SoC ESP8266, thiết kế thân thiện với người dùng nhờ vào mạch nạp tích hợp chip CP2102 Người dùng chỉ cần kết nối với máy tính qua cáp USB để nạp chương trình ESP8266 có thể lập trình bằng hai ngôn ngữ: sử dụng phần mềm IDE của Arduino với bộ thư viện riêng hoặc phần mềm NodeMCU Với tính tiện lợi và giá thành hợp lý khoảng 80.000 VNĐ, nhóm chúng tôi đã chọn module này làm khối truyền nhận dữ liệu.
Bảng 3.1 Sơ đồ nối chân của nodeMCU
GND GND c) Thiết kế khối thực thi điều khiển
Yêu cầu chức năng: Điều khiển thiết bị ở bất cứ nơi đâu (thiết bị động cơ được kết nối wifi và điện thoại thông minh kết nối 3G hoặc wifi).
Có thể xem trạng thái đóng mở cửa trên điện thoại thông minh.
Có thể cài đặt lại các thông số và thông số này sẽ được lưu lại.
Hình 3.3 Giao diện điều khiển trên điện thoại
Giao diện hiển thị các biểu tượng “ổ khóa” và “trạng thái khóa” Khi chạm vào biểu tượng “ổ khóa”, động cơ sẽ quay 90 độ, và nhấn thêm lần nữa để quay về vị trí ban đầu Dưới biểu tượng “ổ khóa” là “trạng thái khóa”, cho biết “cửa đã mở” hoặc “cửa đã khép”, với cảm biến từ MC-38 cung cấp giá trị tương ứng là 1 hoặc 0 Thiết kế khối thu cũng được đề cập trong nội dung.
Trong đề tài này, khối thu sẽ đảm nhiệm việc tiếp nhận tín hiệu từ module RFID hoặc cảm biến từ MC-38 đưa về khối xử lý trung tâm.
Module này hoạt động với điện áp 3.3V từ Arduino, tiêu thụ dòng nuôi từ 13 đến 26 mA Tần số sóng mang là 13.56MHz, với khoảng cách hoạt động từ 0 đến 60mm, và giao tiếp qua chuẩn SPI.
Khi thẻ từ được đưa gần khung nhận tín hiệu của module, tín hiệu mở cửa sẽ được gửi đến bộ xử lý trung tâm, kích hoạt động cơ hoạt động.
Bảng 3.2 Sơ đồ nối chân của RFID
Cảm biến này hoạt động như một công tắc mở cửa, khi hai miếng cảm biến gần nhau, nó sẽ trả về giá trị digital 0 hoặc 1, tương ứng với trạng thái chạm hoặc không chạm Giá trị này được sử dụng để xác định cửa đang mở hay đóng Khoảng cách hoạt động của cảm biến là 18 ± 6mm, tiêu thụ dòng điện khoảng 300mA và có kích thước nhỏ gọn bằng ngón tay cái.
Bảng 3.3 Sơ đồ nối chân của MC-38
PIN 2 Chân 2 e) Thiết kế khối phát:
Để đáp ứng yêu cầu điều khiển chốt khóa cửa, nhóm đã quyết định sử dụng động cơ Servo SG90 làm động cơ truyền động cho chốt khóa.
Vì động cơ không cần dòng lớn, nên chúng ta có thể lấy nguồn 5V trực tiếp từ Arduino.
Bảng 3.4 Sơ đồ nối chân động cơ Servo
5V ĐỎ f) Thiết kế khối nguồn:
Nhóm không thiết kế nguồn nuôi riêng cho mạch hoạt động mà sử dụng trực tiếp nguồn điện gia đình, như bộ adapter sạc điện thoại 5V – 0.5A, pin sạc dự phòng, hoặc nguồn nạp từ USB máy tính Để tiện lợi, nhóm sử dụng cổng chuyển đổi từ 1 đầu USB sang 2 đầu USB, giúp cắm cùng lúc Arduino và nodeMCU vào 1 cổng.
Nhóm em sử dụng Firebase Database của Google làm cơ sở thiết kế, với mục tiêu đảm bảo giá thành hợp lý và dung lượng lưu trữ đủ để lưu trữ dữ liệu.
Hiện tại, nhóm đang sử dụng phiên bản miễn phí của Firebase, cho phép 100 thuê bao tương ứng với 100 người dùng, tức là mỗi hộ gia đình được lắp đặt sản phẩm Ngoài ra, nhóm còn có 1GB dung lượng lưu trữ để lưu trữ thông tin khách hàng Khi số lượng khách hàng vượt quá 100, nhóm có thể chuyển sang phiên bản trả phí của Firebase với chi phí 25 USD/tháng, cho phép tối đa 100.000 thuê bao và 2,5 GB dung lượng lưu trữ.
Firebase lưu trữ cơ sở dữ liệu dưới dạng cây JSON, vì vậy nhóm chúng tôi đã thiết kế một cơ sở dữ liệu hợp lý để gửi và nhận dữ liệu cho động cơ và cảm biến.
Hình 3.4 Cơ sở dữ liệu Firebase theo dạng cây Json
THI CÔNG HỆ THỐNG
GIỚI THIỆU
Trong chương này, chúng tôi sẽ trình bày quy trình thi công PCB, lập trình, lắp ráp phần cứng và kiểm tra mạch Bên cạnh đó, bài viết cũng sẽ bao gồm hình ảnh từ mô hình thực tế của hệ thống bên ngoài và các kết quả hoạt động của hệ thống tính đến thời điểm hiện tại.
THI CÔNG HỆ THỐNG
Mạch in một lớp được thiết kế trên Altium Designer, bao gồm các chân của Arduino và nodeMCU Ngoài ra, các hàng rào cũng được thêm vào để hỗ trợ gắn các linh kiện không có thư viện footprint sẵn có trong Altium.
Hình 4.1 Sơ đồ mạch in mạch khóa cửa thông minh
Sau khi thiết kế được mạch in ta tiến hành mô phỏng 3D:
Hình 4.2 Sơ đồ bố trí các linh kiện của mạch
Từ mô phỏng 3D trên altium có thể thấy các linh kiện chưa có sự sắp xếp hợp lý cũng như phần lớn các linh kiện chưa có thư viện 3D.
4.2.2 Lắp ráp và kiểm tra
Hình 4.3 Board sau khi đã rửa và hàn xong
Sơ đồ toàn mạch trong Hình 4.4 mô tả nguyên lý hoạt động của mạch điều khiển chính, với các khối hệ thống được đánh số thứ tự Khu vực số 1 chứa board Arduino UNO R3, khu vực 2 là nodeMCU ESP8266, khu vực 3 là module RFID, trong khi khu vực 4 và 5 lần lượt là cảm biến từ MC-38 và động cơ Servo SG90.
LẬP TRÌNH HỆ THỐNG
4.3.1 Lưu đồ giải thuật a) Lưu đồ cho Arduino:
Trạng thái cảm biến hall Đã khép Điều khiển bằng app
Hình 4.5 mô tả lưu đồ điều khiển cho Arduino, bắt đầu bằng việc khai báo thư viện và chọn cổng giao tiếp UART Tiếp theo, các biến của chương trình được khai báo cùng với chân kết nối SPI và Servo Cuối cùng, thiết lập tốc độ truyền và các thông số cần thiết cho chuẩn giao tiếp UART, sau đó kiểm tra giá trị.
Cảm biến Hall MC-38 hoạt động như một công tắc khóa cửa, với giá trị 1 biểu thị "cửa chưa khép" khiến hệ thống không hoạt động, trong khi giá trị 0 chỉ ra "cửa đã khép" cho phép hệ thống hoạt động Hệ thống điều khiển được tích hợp qua ứng dụng sử dụng cơ sở dữ liệu Firebase và quét mã thẻ RFID, với quy trình này diễn ra liên tục.
Khởi tạo cổng vào ra, kết nối wifi
Tiến hành kết nối wifi Đã kết nối
Yes Đọc/ ghi dữ liệu từ Firebase
Khóa trên app được nhấn No
Hình 4.6 Lưu đồ điều khiển cho nodeMCU
Khi có nguồn cung cấp cho mạch điều khiển ESP8266 NodeMCU, mạch sẽ khởi tạo các ngõ vào, ngõ ra và chế độ không phát wifi trước khi cài đặt thông tin wifi Sau đó, nó sẽ kết nối với wifi đã cài đặt và cơ sở dữ liệu thời gian thực Firebase để đọc ghi dữ liệu Chương trình sẽ thực hiện vòng lặp chính, chỉ gửi dữ liệu về vi xử lý trung tâm điều khiển động cơ khi có thay đổi hoặc khi khóa trên app được nhấn, giúp tiết kiệm thời gian và tài nguyên bằng cách thoát khỏi chương trình nếu không có điều kiện nào khác.
Cửa về trạng thái ban đầu
Hình 4.7 Lưu đồ điều khiển RFID
Khi thẻ được quét, chương trình sẽ xác định xem đó là thẻ đã lưu hay thẻ mới không hợp lệ trước khi gửi tín hiệu đến bộ xử lý trung tâm để mở cửa Cửa sẽ chỉ mở trong 4 giây, sau đó tự động khóa lại để đảm bảo an toàn, phòng trường hợp người dùng quét thẻ nhưng không vào nhà ngay lập tức.
4.3.2 Viết chương trình cho mạch
Chương trình viết cho vi điều khiển Arduino UNO R3 điều khiển động cơ qua wifi yêu cầu sử dụng các thư viện có sẵn trên Internet Trong bài viết này, chúng tôi sẽ trình bày khái quát phần chương trình chính mà không đi sâu vào giải thích các thư viện cần thiết Để bắt đầu lập trình, việc thêm các bộ thư viện là cần thiết để tận dụng các tính năng của Arduino.
Thêm thư viện để thực hiện được các tính năng của mạch RFID, động cơ servo, các chuẩn truyền SPI, Serial thông qua câu lệnh:
Khai báo các chân cho nodeMCU như Tx, Rx; các chân của RFID; Servo, để có thể hoạt động ổn định thông qua câu lệnh:
MFRC522 mfrc522(SS_PIN, RST_PIN);
Khai báo các biến sử dụng trong chương trình thông qua câu lệnh: int pushButton = 2,trangthai,hall;
Ban đầu phải cài đặt các thông số cơ bản cho nodeMCU, RFID, Servo, MC38 thông qua câu lệnh: s.begin(9600);
SPI.begin(); mfrc522.PCD_Init(); gServo.attach(SERVO_PIN); gServo.write(0); pinMode(pushButton, INPUT_PULLUP;
Kiểm tra trạng thái cảm biến hall và gửi dữ liệu qua nodeMCU thông quan hàm con SendData: hall = digitalRead(pushButton); if(hall ==1){ trangthai = 0;
Nếu cửa chưa khép, hiển thị thông tin trên màn hình điện thoại; ngược lại, thực hiện các chức năng của nodeMCU và RFID Kiểm tra dữ liệu có thay đổi hay không, nếu có, đọc dữ liệu từ UART và điều khiển động cơ Đồng thời, quét mã thẻ; nếu thẻ đúng với mã đã lưu (ví dụ: “5A 0B AE 25”), mở cửa trong 4 giây Sau đó, kiểm tra trạng thái cảm biến hall: nếu cửa tiếp tục khép, đóng cửa; nếu không khép, giữ nguyên trạng thái mở cửa cho đến khi người vào nhà khép cửa lại, lúc đó động cơ mới khóa cửa.
RxData = s.read(); if(RxData=='L'){ gServo.write(0);
} else if(RxData=='U'){ gServo.write(90);
} }else; if ( ! mfrc522.PICC_IsNewCardPresent())
} if (content.substring(1) == "5A 0B AE 25" || content.substring(1)
{ gServo.write(90); delay(4000); int hall = digitalRead(pushButton); while (hall==1) { int hall = digitalRead(pushButton); if (hall==0) break;
Cuối cùng là gửi trạng thái đã khép hay chưa khép lên cơ sở dữ liệu để theo dõi trên điện thoại: if(stateKhep == a){
} b) Viết chương trình cho ESP8266 nodeMCU:
Để thực hiện các tính năng WiFi của mạch vi điều khiển ESP8266 NodeMCU, cần thêm thư viện và các hàm cần thiết, đồng thời thực hiện việc đọc và ghi dữ liệu lên cơ sở dữ liệu thông qua các câu lệnh phù hợp.
#define FIREBASE_HOST "smartdoor-6cafa.firebaseio.com"
#define WIFI_SSID "Duc Canh"
Khai báo các biến sử dụng trong chương trình, các chân truyền dữ liệu UART về Arduino.
Tiếp đến là các hàm điều khiển tốc độ truyền, hàm kết nối mạng wifi, lệnh kết nối với cơ sở dữ liệu: s.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting"); while (WiFi.status() != WL_CONNECTED) {
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Vòng lặp chính thực hiện giao tiếp UART từ Arduino qua nodeMCU, truyền dữ liệu lên cơ sở dữ liệu Firebase Trong quá trình này, nó nhận giá trị từ cảm biến hall và cập nhật trạng thái đã khép hay chưa khép lên cơ sở dữ liệu để hiển thị trên điện thoại Đồng thời, nó cũng nhận giá trị điều khiển từ cơ sở dữ liệu về nodeMCU và truyền lại cho Arduino khi có dữ liệu mới.
DataFr = Firebase.getString("SmartDoor"); if(DataFr=="LOCK"){ s.write('L');
} else if(DataFr=="UNLOCK"){ s.write('U');
KẾT QUẢ VÀ NHẬN XÉT
KẾT QUẢ
Sau quá trình nghiên cứu và tìm hiểu tài liệu chuyên ngành bằng tiếng Việt và tiếng Anh, cũng như khai thác thông tin từ Internet, nhóm chúng em đã tổng hợp kiến thức tích lũy trong ba năm học Dưới sự hướng dẫn của thầy PGS.TS Phan Văn Ca, chúng em đã hoàn thành đồ án 1 với đề tài “HỆ”.
THỐNG KHÓA CỬA THÔNG MINH”.
Sau đề tài của đồ án này, nhóm em cũng đã nghiên cứu và tích lũy thêm được nhiều hiểu biết, kiến thức mới như:
Khám phá cách sử dụng các tính năng của module xử lý Arduino UNO R3, bao gồm giao tiếp với module thu phát sóng WiFi NodeMCU, module RFID, cảm biến từ MC38 và động cơ Servo SG90 Việc hiểu biết sâu sắc về các thành phần này sẽ giúp tối ưu hóa hiệu suất và ứng dụng của dự án điện tử của bạn.
Nghiên cứu và biết cách kết nối giữa module Arduino UNO R3 với các module mở rộng và lắp ráp vào mô hình để hoàn thành sản phẩm.
Biết cách sử dụng chuẩn truyền dữ liệu UART từ module nodeMCU với Arduino, truyền Serial với Firebase.
Biết cách sử dụng module RFID RC522 để đọc, ghi mã thẻ từ.
Nâng cao được kỹ năng vẽ mạch in PCB, sử dụng phần mềm Altium.
Nâng cao được kỹ năng thi công mạch: rửa mạch, khoan mạch, hàn linh kiện, kiểm tra các thành phần trong mạch.
Biết cách sử dụng cơ sở dữ liệu Firebase, biết cách tạo 1 app đơn giản với Android Studio.
5.1.2 Kết quả thực hiện a) Phần cứng:
Sau cùng, nhóm đã hoàn thành các mục tiêu đề ra và thực hiện được tính năng sau:
Hình 5.1 Mô hình khóa cửa khi cửa đang khóa ban đầu
Hình 5.2 Mô hình khóa cửa khi cửa đang mở bằng RFID
Hình 5.3 Mô hình khóa cửa khi cửa không khóa lại do chưa khép
Hình 5.4 Mô hình khóa cửa khi cửa khóa lại do đã khép
Hình 5.5 Mô hình khóa cửa khi cửa mở khóa bằng app
Hình 5.6 Mô hình khóa cửa khi cửa khóa lại bằng app
Hình 5.7 Giao diện khóa cửa sử dụng trên điện thoại
Giao diện khóa cửa có 3 phần chính: tên khóa cửa, ổ khóa thể hiện trạng thái khóa, trạng thái cửa khép hoặc chưa khép.
Khi kết nối internet được thiết lập, ứng dụng sẽ tự động đồng bộ hóa dữ liệu với cơ sở dữ liệu, hiển thị trạng thái khóa một cách chính xác Tốc độ phản hồi của ứng dụng gần như là thời gian thực so với động cơ ở đầu bên kia.
Khách hàng có thể dễ dàng tải ứng dụng bằng cách quét mã QR bên dưới Sau khi tải xong, nhóm sẽ tiến hành cài đặt tài khoản Firebase cùng với tên và mật khẩu wifi của khách hàng để đảm bảo cửa khóa hoạt động hiệu quả.
Hình 5.8 Mã QR để tải ứng dụng khóa cửa 5.2 NHẬN XÉT
Mô hình đã cho thấy sự ổn định tương đối khi chỉ được thử nghiệm trong khoảng 1 giờ Nhóm nghiên cứu chưa có cơ hội kiểm tra trong thời gian dài hơn để đưa ra kết luận chính xác về độ ổn định của hệ thống Hệ thống có khả năng hoạt động liên tục nếu sử dụng nguồn từ adapter sạc.
Hệ thống sử dụng nguồn cấp nhỏ từ 5V trở xuống nên an toàn cho người sử dụng trước nguy cơ điện giật.
Thời gian đáp ứng từ khi phản hồi từ động cơ trong khoảng 1s.
Khoảng cách điều khiển bằng điện thoại là không giới hạn.
Sản phẩm hoạt động hoàn hảo khi có mạng wifi mạnh, và việc thay đổi mạng wifi cũng rất đơn giản.
Phần mềm phản hồi tốt, nhanh chóng, hầu như không có thời gian trễ(nếu tín hiệu mạng được thông suốt).
Bảng 5.1 Số liệu điều khiển thiết bị trên thực tế
ST Phương thức điều khiển Số lần Số lần Tỉ lệ thành
T thực hiện thành công công
Kết quả từ nhóm cho thấy rằng khi điều khiển động cơ mở khóa trong điều kiện lý tưởng, bao gồm nguồn cấp đủ, wifi mạnh và khoảng cách quét thẻ từ gần, tỉ lệ thành công đạt mức tuyệt đối.
Tuy nhiên, do hạn chế về kiến thức và thời gian thực hiện, cùng với việc chủ yếu dựa vào tài liệu tham khảo từ Internet, đề tài không tránh khỏi một số sai sót và hạn chế nhất định.
Hạn chế lớn nhất là chưa có được nguồn điện dự trữ để cung cấp cho hệ thống hoạt động khi mất nguồn chính.
Hoạt động chủ yếu tại môi trường có phủ sóng wifi.
Mô hình chưa được hoàn thiện, còn nhiều thiếu sót, tính thẩm mỹ chưa cao.
Phần mềm còn đơn giản, chưa có chức năng thêm, xóa thẻ từ.
NHẬN XÉT
Sau thời gian tìm hiểu, nghiên cứu và thực hiện đề tài của nhóm, dưới sự hướng dẫn của giáo viên thì nhóm đã hoàn thành đề tài “HỆ
THỐNG KHÓA CỬA THÔNG MINH”.
Hệ thống đáp ứng được các tính năng, nội dung và mục tiêu như sau:
Giao tiếp và truyền dữ liệu hiệu quả giữa Arduino UNO R3 và các module như ESP8266 NodeMCU, module đọc thẻ RFID, cảm biến từ MC38, và động cơ Servo SG90 Người dùng có thể điều khiển động cơ thông qua thẻ từ hoặc ứng dụng trên điện thoại.
Có thể giám sát được trạng thái đóng/mở cửa.
Trạng thái khóa và khép được hiển thị trên màn hình ứng dụng điện thoại, cùng với việc cập nhật dữ liệu điều khiển lên cơ sở dữ liệu Firebase thành công Theo Bảng 5.1 trong chương 5, sản phẩm đã đạt được 100% mục tiêu đề ra cho thiết bị và 90% mục tiêu cho đề tài Mặc dù sản phẩm chưa thể thương mại hóa, nhưng vẫn có khả năng hoàn thiện để sử dụng trong hộ gia đình với phạm vi nhất định.
Các hạn chế mà chưa thể thương mại hóa:
Tác động điều khiển còn hạn chế do hoạt động chính chỉ thông qua wifi.
Chưa quan tâm đến công suất tiêu thụ của thiết bị.
Kích thước sản phẩm còn thô, thiếu tính thẩm mỹ, chưa hoàn thiện. Chưa có tính năng thêm, xóa mã thẻ của RFID.
Phải nạp lại KIT khi cần thêm/bớt thẻ, thay đổi wifi.