Sơ đồ tổng quát của hệ thống Hệ thống bao gồm hai phần là phấn khối mạch vật lý và khối ứng dụng là server và database: Như chúng ta có thể thấy, phần đồ án thiết kế gồm có hai khối cơ b
Tổng quang về hệ thống quản lý kho thông minh
Tổng quan về mô hình của hệ thống quản lý kho
1 Giới thiệu tổng quan hệ thống
Hệ thống có ứng dụng hỗ trợ việc nhập và bán hàng của kho Xuất phát từ việc ngày nay các kho hàng lớn trong nước đã có hỗ trợ cho việc quản lý kho rất thông minh bao gồm cả việc xuất nhập kho và kiểm soát các thông số của kho hàng, nhưng với những hộ kinh doanh nhỏ lẻ, họ có những kho hàng không đủ lớn hay chỉ là những hộ kinh doanh gia đình thì việc triển khai những hệ thống lớn như vậy là một điều khá bất lợi về mặt chi phí cũng như khả năng lắp đặt
Chính vì vậy nhóm chúng em có đề ra một hệ thống sử dụng các vi mạch nhỏ nhẹ và hơn hết là giá cả phù hợp với nhu cầu của hộ kinh doanh Hơn nữa còn cắt giảm được sử dụng giấy tờ trong việc ghi lại các thông số của mỗi đơn hàng nhằm tăng sự tiện lợi cho khách hàng và người bán.
2 Chức năng cơ bản của hệ thống
Hệ thống này bao gồm sự tiện lợi và nhỏ nhẹ nên sẽ gồm các chức năng chính như sau:
Hiển thị nhiệt độ và độ ẩm trên thiết bị phần cứng như LCD sẽ được nêu ra ở phần sau.
Tính năng nhập và xuất hàng khỏi kho được quản lý theo tagID sẽ được nêu ở phần sau.
Giao diện quản lý kho hàng cho người bán dễ dàng quan sát các thông số từ cơ sở dữ liệu (database) sẽ được nêu ra ở phần sau.
Sơ đồ nguyên lý hoạt động của mạch hệ thống
1 Sơ đồ tổng quát của hệ thống
Hệ thống bao gồm hai phần là phấn khối mạch vật lý và khối ứng dụng là server và database:
Như chúng ta có thể thấy, phần đồ án thiết kế gồm có hai khối cơ bản, hai khối này có thể giao tiếp qua lại với nhau, chi tiết của các khối sẽ được nói chi tiết trong phần sau.
Khối mạch vật lý a Khối mạch vật lý
Khối vật lý là khối sử dụng các kết nối vật lý, các vi mạch điều khiển và các phần cứng Phần mạch bao gồm các linh kiện điện tử như sau:
STM32 là một trong những dòng chip phổ biến của ST với nhiều họ thông dụng như F0,F1,F2,F3,… Stm32f103 thuộc họ F1 với lõi là ARMCOTEX M3 STM32F103 là vi điều khiển 32bit, tốc độ tối đa là 72Mhz Giá thành cũng khá rẻ so với các loại vi điều khiển có chức năng tương tự Mạch nạp cũng như công cụ lập trình khá đa dạng và rất thông dụng trong thị trường hiện nay. Ứng dụng: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét, hệ thống cảnh báo, thiết bị liên lạc nội bộ…
ESP8266 là một mạch vi điều khiển có thể giúp chúng ta điều khiển các thiết bị điện tử Thêm vào đó nó được tích hợp wi-fi 2.4GHz có thể dùng cho lập trình Với khả năng tích hợp khả năng kết nối Wi-fi thì ESP8266 là một trong những vi mạch không thể thiếu đối với các ứng dụng IOT (Internet kết nối vạn vật) như nhà thông minh Smart home hay các thiết bị thông minh khác. Ứng dụng: Điều khiển công tắc bật/tắt Led, đọc nhiệt độ trên cảm biến DHT11, điều khiển bật/tắt Led bằng giọng nói
Radio Frequency Identification (RFID) là công nghệ nhận dạng đối tượng bằng sóng vô tuyến Một thiết bị hay một hệ thống RFID được cấu tạo bởi hai thành phần chính là thiết bị đọc (RFDI reader) và thiết bị phát sóng RFID có gắn chip hay còn gọi là tag. Ứng dụng công nghệ RFID trong thực tế: RFID có thể đùng để nhận diện khách hàng cho các trung tâm chăm sóc sức khỏe, động vật trong những hệ thống quản lý sinh vật sống, sinh viên sử dụng tủ đựng đồ để cần giữ tài sản và taxi yêu cầu quyền ra vào khu vực đón khách tại sân bay.
LCD 16x2: Màn hình LCD được sử dụng để hiển thị trạng thái hoặc thông số trong các hệ thống nhúng LCD 16x2 là thiết bị 16 pin có 8 chân dữ liệu (D0-D7) và 3 chốt điều khiển (RS,RW,EN) 5 chân còn lại là để cung cấp và đèn nền cho màn hình LCD LCD 16x2 có thể được sử dụng ở chế độ 4 bit hoặc chế độ 8 bit tuỳ thuộc vào yêu cầu của ứng dụng.
I2C: I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”.
Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu.
Do tính đơn giản của nó nên loại giao thức này được sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và mảng cảm biến, các thiết bị hiển thị, thiết bị IoT, EEPROMs, v.v … Đây là một loại giao thức giao tiếp nối tiếp đồng bộ Nó có nghĩa là các bit dữ liệu được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi một tín hiệu đồng hồ tham chiếu
Button là nút bấm, bạn có thể tìm thấy nó ở mọi thứ trong cuộc sống, chẳng hạn như cái nút trong bàn phím của bạn. b Khối ứng dụng
Khối này được cấu thành từ các ứng dụng có mục đích tạo nên các database (cơ sở dữ liệu), tạo nên các server (máy chủ) để truy cập, hiển thị dữ liệu để quan sát Trong hệ thống này, chúng ta sẽ sử dụng các ứng dụng như sau:
MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ mã nguồn mở (RDBMS) dựa trên ngôn ngữ truy vấn có cấu trúc
(SQL) được phát triển, phân phối và hỗ trợ bởi tập đoàn Oracle MySQL chạy trên hầu hết tất cả các nền tảng, bao gồm cả Linux , UNIX và Windows. MySQL thường được kết hợp với các ứng dụng web.
SQL là ngôn ngữ phổ biến nhất để thêm, truy cập và quản lý nội dung trong cơ sở dữ liệu Nó được chú ý nhất vì khả năng xử lý nhanh, độ tin cậy đã được chứng minh, dễ sử dụng và linh hoạt MySQL là một phần thiết yếu của hầu hết mọi ứng dụng PHP mã nguồn mở.
Nodejs là một nền tảng (Platform) phát triển độc lập được xây dựng ở trên Javascript Runtime của Chrome mà chúng ta có thể xây dựng được các ứng dụng mạng một cách nhanh chóng và dễ dàng mở rộng.
Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực Nodejs áp dụng cho các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh, cần đổi mới công nghệ, hoặc tạo ra các dự án Startup nhanh nhất có thể.
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra bởi Guido van Rossum Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những ngôn ngữ lập trình nhập môn tốt nhất cho người lần đầu tiếp xúc với ngôn ngữ lập trình Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu quả đối với lập trình hướng đối tượng Cú pháp lệnh của Python là điểm cộng vô cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thành một ngôn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh vực, ở hầu hết các nền tảng.
MQTT (Message Queuing Telemetry Transport) là giao thức truyền thông điệp (message) theo mô hình publish/subscribe (cung cấp / thuê bao), được sử dụng cho các thiết bị IoT với băng thông thấp, độ tin cậy cao và khả năng được sử dụng trong mạng lưới không ổn định Nó dựa trên một Broker (tạm dịch là “Máy chủ môi giới”) “nhẹ” (khá ít xử lý) và được thiết kế có tính mở (tức là không đặc trưng cho ứng dụng cụ thể nào), đơn giản và dễ cài đặt.
Thực hiện mục tiêu đặt ra
Giao tiếp I2C
Yêu cầu đặt ra của hệ thống là giao tiếp giữa vi xử lý và LCD 16x2 bằng giao tiếp I2C, để thực hiện yêu cầu bài toán chúng ta sử dụng module I2C như Hình 10 dưới đây:
Inter- Intergrated Circuit (I2C) là chuẩn truyền thông 2 dây gồm 1 dây Clock và 1 dây Data dùng chung cho quá trình truyền nhận được phát minh bởi Philips.Chuẩn I2C cũng trở nên thông dụng với nhiều module, IC sử dụng như: IC nhớ(24LCxxx), cảm biến góc nghiêng(MPU6050), module giao tiếp LCD(dùng ICPCF8574), IC thời gian thực(DS1307), IC chuyển đổi tín hiệu số, tương tự… So vớiUART tốc độ của I2C có vẻ nhỉnh hơn 1 chút, ở mức thông thường là 100Khz Ở mode còn lại thì tốc độ cao hơn Khi giao tiếp I2C với 1 IC nào đó cần chú ý : địa chỉ của Ic đó để giao tiếp, giao tiếp với tốc độ bao nhiêu, bao nhiêu bit.
Hình 11 Kết nối STM32 và I2C LCD
STM32F103C8T6 có 2 bộ chuyển đổi I2C với tốc độ tối đa lên đến 400Kh ở mode FM và 100khz ở mode SM Các bộ I2C còn được hỗ trợ chức năng DMA giúp đẩy nhanh tốc độ giao tiếp với ngoại vi Một số tính năng được tóm tắt như sau:
- Có thể lập trình là Master hay Slave.
- Đối với Master: tạo ra xung clock và tạo ra tín hiệu start, stop.
- Đối với Slave : lập trình được địa chỉ của thiết bị I2C, chế độ kiểm tra bit stop.
- Số địa chỉ được sinh ra cũng như được kiểm tra là 7 bit hoặc 10 bit.
- Hỗ trợ 2 chuẩn tốc độ là 100khz và 400 Khz.
- Có bộ lọc nhiễu Analog.
- Có các cờ báo trạng thái : nhận, truyền, kết thúc chuyển đổi, báo lỗi…
- Các ngắt như: ngắt buffer truyền, nhận; ngắt sự kiện, ngắt báo lỗi.
Quá trình truyền data tùy thuộc vào mode cấu hình của I2C là master hoặc là slave, ở chế độ 10 bit địa chỉ hay 7 bit địa chỉ, truyền theo cách 1 hay cách 2 Dưới đây là ví dụ về cấu hình I2C ở mode master, truyền 7 bit địa chỉ và truyền theo cách 1:
Hình 12 Quá trình truyền nhận của I2C
Tóm tắt quá trình truyền như sau: Đầu tiên bộ I2C tạo ra tín hiệu start -> kiểm tra EV5 – tương ứng code sẽ là kiểm tra có cài đặt mode master hay chưa(BUSY, MSL, SB ) -> nếu có, gửi địa chỉ và hướng truyền -> kiểm tra EV8 – tương ứng kiểm tra đã cài đặt mode master hay chưa(BUSY, MSL, ADDR, TXE, TRA) -> nếu có gửi data đến thiết bị slave với địa chỉ truyền ở trên -> kiểm tra EV8_2 – tương ứng code là kiểm tra data đã truyền xong chưa (TRA, BUSY, MSL, TXE, BTF) - > đợi truyền xong, bộ I2C sẽ tạo ra tín hiệu kết thúc.
2 Một số thanh ghi quan trọng
- I2C_CR1 – I2C control register 1. o ACK : cho phép nhận hoặc không nhận tín hiệu ACK return từ thiết bị được truyền. o STOP : sinh ra tín hiệu stop kết thúc quá trình giao tiếp. o START : sinh ra tín hiệu start để bắt đầu quá trình giao tiếp. o PE: peripheral enable - bit này được bật lên bằng 1 khi quá trình giao tiếp I2C đang được thực hiện và kết thúc khi có tín hiện end communication.
- I2C_CR1 – I2C control register 1. o ITBUFEN : cho phép hoặc không cho phép xảy ra ngắt khi có data trong truyền/nhận. o ITEVTEN : cho phép ngắt khi xảy ra các sự kiện sau trên các bit sau:
SB, ADDR, ADD10, STOPF, BTF , TxE, RxE. o ITERREN : cho phép hoặc không cho phép xảy ra ngắt khi có lỗi xảy ra. o FREQ[5:0] : bộ chia clock tần số được tính từ nhánh clock hệ thống chia cho bộ I2C.
- I2C_OAR1 – I2C own address register 1. o ADDMODE : cài đặt số bit địa chỉ của slave là 7 hay 10 bit. o ADD[9:8] : chỉ sử dụng khi mode địa chỉ là 10 bit. o ADD[7:1] : bit địa chỉ của thiết bị slave. o ADD0 : chỉ sử dụng khi mode địa chỉ là 10 bit.
- I2C_DR – I2C data register. o Thanh ghi này gồm 8 bit, chứa data của quá trình truyền hoặc nhận.
- Thanh ghi này chứa các cờ báo trạng thái của quá trình giao tiếp I2C: o TIME OUT: báo hết thời gian đợi quá trình truyền nhận data. o PECERR: chấp nhận lỗi PCE và phản hồi lại quá trình tín hiệu lỗi. o OVR : báo quá trình overrun/ underrun. o AF: báo tín hiệu ACK bị lỗi hay không. o TxE : báo buffer truyền có trống hay không. o RxE : báo buffer nhận có trống hay không. o STOPF : cờ báo có kiểm tra quá trình stop hay không. o BTF: báo truyền byte dữ liệu đã xong hay chưa. o ADDR: báo địa chỉ đã được gửi(mode master) hay không tương thích (mode slave). o SB: Có sử dụng bit start hay không.
- I2C_CCR – I2C clock control register. o F/S : sử dụng mode Fast(400khz) hay slow(100Khz). o DUTY: chỉ sử dụng cho mode fast với 2 chế độ o CCR[11:0] : thanh ghi chứa clock control cho bộ.
LCD 16x2 và giao tiếp I2C với LCD
LCD 16x2 có 16 chân trong đó 8 chân dữ liệu (D0-D7) và 3 chân điều khiển (RS, RW, EN) Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu.
Tính năng của mô-đun LCD 16 × 2
- Điện áp hoạt động là 4,7V đến 5,3V
- Mức tiêu thụ hiện tại là 1mA không có đèn nền
- Mô-đun hiển thị LCD chữ và số, có nghĩa là có thể hiển thị bảng chữ cái và số
- Gồm hai hàng và mỗi hàng có thể in 16 ký tự.
- Mỗi ký tự được tạo bởi một hộp 5 × 8 pixel
- Có thể hoạt động trên cả chế độ 8 bit và 4 bit
- Nó cũng có thể hiển thị bất kỳ ký tự được tạo tùy chỉnh nào
- Có sẵn đèn nền xanh lục và xanh lam.
Hình 14 Các thông số của LCD
Hình 15 Sơ đồ khối của LCD
LCD sử dụng một chip điều khiển được kết nối tới tấm nền LCD, như chúng ta thấy phần điều khiển nối với chân DB0 – DB7 trên LCD, đây là các chân dữ liệu có tác dụng nhận dữ diệu từ bên ngoài tới chip xử lý của LCD.
Ngoài ra chân RS (Register Select) có chức năng chọn ghi dữ liệu hay ghi lệnh lên LCD để xử lý, chân E (Enable) có chức năng như một công tắc cho dữ liệu vào LCD.
2 Giao tiếp LCD với module I2C
Hình 16 Kết nối LCD với I2C
Như ta thấy LCD 16x2 gồm có 16 chân, nếu ta sử dụng cả 16 chân này để kết nối tới vi điều khiển STM32 thì sẽ chiếm rất nhiều chân của vi xử lý, hạn chế các chân có thể sử dụng cho các thành phần khác.
Module I2C LCD được sử dụng trong hệ thống có nhiệm vụ chuyển những dòng bit từ vi điều khiển từ dạng song song thành nối tiếp từ kết nối I2C Giao tiếpI2C sẽ nhận những giá trị cấu hình từ vi điều khiển dưới dạng nối tiếp các bit rồi đưa tới 16 chân của module I2C, từ đó điều khiển được màn hình LCD Khi sử dụng module I2C này chúng ra rút ngắn số chân cần sử dụng từ 16 xuống còn 4.
RFID
Trong hệ thống, ta sử dụng module RFID RDM6300 như hình dưới đây:
Module hoạt động ở tần số 125kHz, nguồn yêu cầu 5V Module có hai chế độ gửi dữ liệu là Wiegand 26 bits và UART với baudrate là 9600 Trong hệ thống này, chúng ta sử dụng chế độ gửi dữ liệu là UART.
Khi RDM6300 nhận được tín hiệu từ thẻ từ RFID 125kHz , module sẽ gửi dữ liệu bằng giao tiếp UART với định dạng gồm 8 bits dữ liệu, 1 bit start, 1 bit stop và không có bit chẵn lẻ Có thể xem rõ hơn dưới đây:
Module RDM6300 truyền một khung dữ liệu đọc được từ thẻ gồm 13 bytes với mỗi byte trong đó có định dạng như trên Trong số 13 bytes dữ liệu đó có tổng số 10 bytes trong đó chứa dữ liệu từ thẻ RFID đọc được và 1 byte checksum (kiểm tra) để đảm bảo dữ liệu được truyền đúng Dưới đây là một khung dữ liệu của module này:
Chúng ta sẽ sử dụng 10 bytes dữ liệu từ thẻ này để kiểm tra và phân loại cho số sản phẩm trong kho hàng.
Cảm biến độ ẩm DHT11
DHT11 là cảm biến nhiệt độ và độ ẩm được tích hợp chung trong một cảm biến, cảm biến này gồm các chân như sau:
Hình 17 Các chân của cảm biến DHT11
Trên hình, ta có thể thấy cảm biến có 1 chân data sử dụng chung cho một đường truyền dữ liệu từ cảm biến về vi xử lý STM và ngược lại Chính vì thế cảm biến sử dụng chuẩn giao tiếp 1 wire Dưới đây sẽ chỉ ra cách thức dữ liệu được truyền về vi xử lý.
Vi xử lý (MCU) gửi tín hiệu báo hiệu nhận data, DHT11 chuyển đổi từ chế độ năng lượng thấp sang chế độ tốc độ cao, cho đến khi vi xử lý bắt đầu phát tín hiệu kết thúc, DHT11sẽ gửi tín hiệu phản hồi để gửi dữ liệu bao gồm 40bit Tín hiệu được gửi như hình minh họa:
Hình 18 Sơ đồ thời gian dữ liệu
Dữ liệu gửi bao gồm 40 bit: o Dữ liệu số nguyên độ ẩm 8 bit o 8 bit dữ liệu thập phân độ ẩm o dữ liệu số nguyên nhiệt độ 8 bit o dữ liệu thập phân nhiệt độ 8 bit o bit chẵn lẻ 8 bit.
Bit chẵn lẻ (Parity bit) 8 bit là bit kiểm tra có kết quả bằng “Dữ liệu số nguyên độ ẩm 8 bit + Dữ liệu thập phân độ ẩm 8 bit + Dữ liệu số nguyên nhiệt độ 8 bit + Dữ liệu thập phân nhiệt độ 8 bit”.
Ví dụ: 40bit dữ liệu nhận được:
Dữ liệu nhận được là chính xác Độ ẩm : 0011 0101 = 35H = 53% RH
Vì DHT11 là mẫu cảm biến không đòi hỏi tính chính xác cao, có độ sai lệch nhiệt độ ±2 , độ ẩm ±5% nên ta có thể dễ dàng tính được phần 8bit thập phân của℃ độ ẩm và nhiệt độ = 0.
Các bước đọc thiết bị ngoại vi
Giao tiếp giữa Master và Slave có thể được thực hiện thông qua các bước sau (thiết bị ngoại vi (như bộ vi xử lý) đọc DHT11 dữ liệu của các bước):
Bước 1: Sau khi bật nguồn DHT11 (DHT11 bật sau khi bật nguồn chờ 1S qua trạng thái không ổn định trong khoảng thời gian này không thể gửi bất kỳ lệnh nào), dữ liệu nhiệt độ và độ ẩm của môi trường thử nghiệm và ghi lại dữ liệu, trong khi DHT11 các đường dữ liệu DATA được kéo bằng kéo lên điện trở đã được duy trì cao; DHT11 chân DATA ở trạng thái đầu vào, thời điểm phát hiện tín hiệu bên ngoài.
Bước 2: I / O của bộ vi xử lý được đặt thành đầu ra đồng thời đầu ra ở mức thấp và thời gian giữ thấp không được nhỏ hơn 18ms, khi đó I / O của bộ vi xử lý được đặt ở trạng thái đầu vào, do điện trở kéo lên, bộ vi xử lý DHT11 các đường dữ liệu Data cũng sẽ ở mức cao, chờ DHT11 trả lời tín hiệu, gửi tín hiệu như hình:
Bước 3: Chân DATA được phát hiện với tín hiệu bên ngoài của mức thấp DHT11, chờ tín hiệu bên ngoài ở mức thấp, chân DATA của DHT11 có độ trễ ở trạng thái đầu ra, mức đầu ra thấp là 80 micro giây làm tín hiệu phản hồi, tiếp theo là đầu ra của mức cao 80 micro giây thiết bị ngoại vi thông báo đã sẵn sàng nhận dữ liệu, I / O của bộ vi xử lý tại thời điểm này ở trạng thái đầu vào được phát hiện I / O thấp (tín hiệu phản hồi DHT11), đợi 80 micro giây dữ liệu cao nhận và gửi tín hiệu như hình:
Bước 4: Đầu ra bởi DHT11 chân DATA 40, bộ vi xử lý nhận 40 bit dữ liệu của dữ liệu định dạng "0": mức thấp của 50 micro giây và 26-28 micro giây theo những thay đổi trong mức I / O, định dạng "1" dữ liệu bit: mức cao của cộng thấp, 50 micro giây đến 70 micro giây Định dạng tín hiệu bit "0", "1" như hình:
Tín hiệu kết thúc (end signal):
Tiếp tục xuất ra mức thấp 50 micro giây sau DHT11, chân DATA xuất ra 40 dữ liệu và thay đổi trạng thái đầu vào, cùng với điện trở kéo lên cao Nhưng bên trongDHT11 kiểm tra lại dữ liệu nhiệt độ và độ ẩm môi trường, và ghi lại dữ liệu, chờ tín hiệu bên ngoài đến.
ESP8266
Chip xử lý ESP8266 được sử dụng trong hệ thống này với mục đích làm thiết bị kết nối tới MQTT broker để đưa dữ liệu từ mạch vật lý tới cơ sở dữ liệu như trong sơ đồ của chương 1 đã được nêu ra.
Trong hệ thống quản lý của nhóm chúng em, dữ liệu nhận được từ STM32 sẽ được lưu vào bộ nhớ đệm rồi publish lên MQTT broker như trong chương 1 đã nêu ra.
ESP8266 được kết nối trực tiếp với vi xử lý STM32F103 thông qua giao tiếpUART ở 9600 baudrate.
STM32F103C8T6
Hệ thống sử dụng vi xử lý STM32F103C8T6 này làm vi xử lý trung tâm của hệ thống Sử dụng giao tiếp UART, Timer và một số các chức năng khác để thực hiện hệ thống này.
Trong việc đọc dữ liệu từ cảm biến DHT11 chúng ta phải xác định chính xác các khoảng thời gian đến mức ms nên việc sử dụng timer để tạo được delay đến mức ms là việc cần thiết
Trong STM32F1 có 7 timer trong đó bao gồm 1 systick timer, 2 watchdog timer Vậy chỉ còn lại 4 timer dùng cho các chức năng như ngắt, timer base, PWM, Encoder, Input capture… Trong đó TIM1 là Timer đặc biệt, chuyên dụng cho việc xuất xung với các mode xuất xung, các mode bảo vệ đầy đủ hơn so với các timer khác TIM1 thuộc khối clock APB2, còn các TIM2,TIM3,TIM4 thuộc nhóm APB1.
Có 3 vấn đề cần phải tìm hiểu đó là :
Khi không có cấu hình gì liên quan đến clock và đã gắn đúng thạch anh ngoài trên chân PD0(5) và PD1(6) thì clock tương ứng của TIM1, TIM2, TIM3, TIM4 đã là 72Mhz Cần ghi nhớ là sử dụng timer nào thì cấp clock cho timer đó theo đúng nhánh clock.
Prescaler là bộ chia tần số của timer Bộ chia này có giá trị tối đa là 16 bit tương ứng với giá trị là 65535 Các giá trị này có thể được thay đổi và điều chỉnh bằng lập trình Tần số sau bộ chia này sẽ được tính là: fCK_CNT = fCK_PSC/(PSC+1).
FCK_CNT: tần số sau bộ chia.
FCK_PSC: tần số clock đầu vào cấp cho timer.
PSC: chính là giá trị truyền vào được lập trình bằng phần mềm
Auto Reload value là giá trị bộ đếm tối đa có thể được điều chỉnh để nạp vào cho timer Giá trị bộ đếm này được cài đặt tối đa là 16bit tương ứng với giá trị là 65535.Từ các thông số trên ta rút ra công thức cần tính cuối cùng đó là:
Ftimer : là giá trị cuối cùng của bài toán, đơn vị là hz.
Fsystem : tần số clock hệ thống được chia cho timer sử dụng, đơn vị là hz.
PSC : giá trị nạp vào cho bộ chia tần số của timer Tối đa là 65535.
Period : giá trị bộ đếm nạp vào cho timer Tối đa là 65535.
Ngắt timer: khi giá trị đếm của bộ đếm timer(thanh ghi CNT) vượt qua giá trị của Auto Reload Value thì cờ báo tràn sẽ được kích hoạt Trình phục vụ ngắt tràn sẽ xảy ra nếu được cấu hình cho phép trước đó. Để thao tác với timer ta sẽ thao tác với các thành ghi Register trong vi xử lý, một số thanh ghi timer như sau:
Thanh ghi này chứa giá trị của bộ chia tần số của timer Giá trị chia tần số phụ thuộc vào giá trị của thanh ghi.
TIMx_ARR – Auto-reload Register.
Thanh ghi này chứa giá trị đích của bộ đếm Giá trị này sẽ được so sánh với giá trị của thanh ghi CNT.
Thanh ghi này chứa các cờ biểu thị các trạng thái của timer.
CCxOF: vượt quá giá trị compare/capture.
BIF: báo có ngắt đầu vào xảy ra.
TIF: báo có ngắt do xung trigger.
COMIF: báo có ngắt do tác động của COM.
CCxIF: báo có ngắt do compare/capture.
UIF: báo có ngắt do có sự cập nhật giá trị của bộ đếm timer.
CKD[1:0] : bit liên quan đến việc sinh ra thời gian dead-time và bộ lọc số(ở mode ETR,TIx).
ARPE: có cho phép tự động load lại khi tràn hay không.
CMS[1:0] : bit cài đặt mode center-aligned, tham khảo thêm trong reference manual.
DIR : bit điều khiển timer đếm lên hay đếm xuống.
OPM: bit sử dụng cho chế độ one-pulse.
URS: bit này cho phép cập nhật bộ đếm timer theo chế độ điều khiển bằng tín hiệu bên ngoài hoặc bộ đếm bị tràn.
UDIS: bit này cho phép hoặc không cho phép việc cập nhật timer.
CEN: bit này cho phép hoặc không cho phép bộ đếm hoạt động.
Cũng giống như timer để giao tiếp bằng giao tiếp UART thì ta cần thao tác với các thanh ghi UART:
TXE : bit báo có data đã truyền hay không, =0 tức là data rỗng, có thể truyền,
=1 data đã được truyền đi.
RXNE: bit báo data đã nhận hay chưa =1: đã nhận, =0 chưa nhận hoặc nhận chưa xong.
TC : cờ báo đã nhận data hoặc data vừa mới truyền xong.
Thanh ghi này chứa Data nhận và Data truyền gồm 9bit Và nó phụ thuộc vào trạng thái truyền hoặc nhận sẽ quyết định đó là data truyền hoặc data nhận.
USART_BRR – Baud rate register.
Thanh ghi này chứa giá trị tốc độ baund được cài đặt.
UE: bit cho phép UART hoạt động.
M: độ dài của data là 8 hay 9 bit.
WAKE: phương pháp đáng thức UART là Idle line hoặc Address Mask.
PCE : cho phép hoặc k cho phép parity.
PS: chọn loại Parity chẵn hoặc lẻ.
PEIE: cho phép ngắt PE hay k ngắt.
TXEIE: cho phép ngắt truyền hay k.
TCIE: cho phép ngắt khi truyền/nhận xong hay k.
RXNEIE: cho phép ngắt nhận hay k.
TE: cho phép truyền hay k.
RE: cho phép nhận hay k.
RWU : cho phép thức tỉnh hay không khi nhận data từ bên ngoài.
Khối ứng dụng
Sử dụng các phầm mềm như ở chương 1 đã nêu ra như MQTT, Python, NodeJS, MySQL chúng ta có thể tạo ra một database và hiển thị thông tin mong muốn trên nền web Như sơ đồ đã được vẽ ra ở chương trên, ta có thể thiết kế chi tiết các tính năng và cách kết nối các phần lại với nhau sao cho hoạt động hoàn hảo nhất.
Như sơ đồ trên, MQTT được sử dụng để truyền gói tin tới từ ESP8266 bằng giao thức này, Gói tin truyền tới có định dạng gồm hai phần: tên loại hàng và số lượng hàng đã mua Gói tin sau khi tới MQTT broker sẽ được bắt và phân tích bằng Python, đồng thời được ghi vào database là MySQL để lưu trữ dữ liệu.
Muốn lấy được thông tin từ MySQL ra để hiển thị, ta sử dụng NodeJS, đây là một ứng dụng giúp chúng ta thiết lập một server ảo để truy cập và thao tác trên đó.
Từ đó chúng ta có thể tùy biến, xây dựng một trang web quản lý cho các cơ sở dữ liệu của khách hàng
PythonMQTT Bắt gói tin
Từ các phần mềm nêu trên nhóm chúng em đã tạo ra được một trang web quản lý đơn giản giúp người dùng có thể xem, thao tác một số các thao tác cơ bản như:nhập hàng vào kho, hiển thị số hàng còn lại trong kho, hiển thị nhiệt độ và độ ẩm kho Kết quả đạt được sẽ được nêu ra ở chương sau.
Thiết kế mạch in cho khối vật lý
Mạch in được vẽ bằng phần mềm Altium design trên hệ điều hành Windows.Mạch in:
Thiết kế mô hình thực nghiệm
Dưới đây là hình ảnh trên broadtest của khối vật lý:
Hình 20 Mô hình của hệ thống
2 Hệ thống giám sát và điều khiển
Giao diện được viết bằng ngôn ngữ HTML, thiết kế dễ dàng cho việc theo dõi các thông tin về kho hàng Giao diện quản lý có kết hợp với database là mySQL để lưu trữ dữ liệu.
Hình 21 Trang quản lý hệ thống
Giao diện thiết kế có cấu trúc gồm 3 phần: o Phần hiển thị nhiệt độ và độ ẩm trong kho. o Nhập hàng vào trong kho. o Số hàng còn lại trong kho.
Kết quả đạt được và đánh giá
Kết quả đạt được của hệ thống
Sau một quá trình thực hiện đồ án môn học này, chúng em có đạt được một số yêu cầu đặt ra như sau: Đối với việc hiển thị nhiệt độ và độ ẩm trên mạch cũng như trên trang web quản lý, nhiệt độ và độ ẩm nhận được so với nhiệt độ và độ ẩm phòng thử nghiệm không có sự chênh lệch quá lớn Nhiệt độ và độ ẩm được đo trong các trường hợp như sau:
Stt Nhiệt độ phòng Nhiệt độ đo được
Nhìn chung mạch cho ra kết quả khá chính xác so với nhiệt độ thực, sai số nhỏ.
Hình 22 Kết quả đo thử nghiệm hệ thống
Và đây là hiển thị nhiệt độ và độ ẩm trên trang quản lý:
Số hàng còn lại hiển thị chính xác trên trang quản lý kho hàng Các đơn hàng khách mua hiển thị chính xác về số lượng hàng khách đã mua và tổng số tiền khách phải trả trên LCD 16x2.