HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG BÀI BÁO CÁO MÔN HỌC ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG Đề tài Mô hình vườn thông minh Giảng viên hướng dẫn Nguyễn Ngọc Minh Lời nói đầu Vài năm trở lại đây, khi thế.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
BÀI BÁO CÁO MÔN HỌC: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG
Đề tài: Mô hình vườn thông minh
Giảng viên hướng
Trang 2
Lời nói đầu
Vài năm trở lại đây, khi thế giới đang dần tiến vào kỷ nguyên Internet ofThings (IoTs), nền nông nghiệp thông minh trở thành một xu hướng côngnghệ tất yếu và là tiêu chuẩn của cuộc sống của con người Mặc dù đều dựatrên nền tảng IOT, tuy nhiên có rất nhiều các tiếp cận khác nhau trong việcthiết kế các mô hình vườn thông minh Một số cách có thể kể đến là sửdụng các máy tính nhúng như Raspberry PI3, Orange Pi One, PIC hoặcArduino Trong đề tài này, nhóm em nghiên cứu: “Thiết kế mô hình vườnthông minh” Sử dụng kit STM32C8T6 để phát triển và thực hiện ý tưởng
Trang 3Mục Lục
Chương 1: Phân tích đề tài
1 Mô tả tổng quát
2 Thiết bị các phần mềm sử dụng:
3 Các vấn đề cần giải quyết
4 Hướng giải quyết vấn đề
Chương 2: Cơ sở lý thuyết
1 Kit STM32F103C8T6
2 Module DHT11
3 Cảm biến dộ ẩm đất
4 LCD 16x2
5 Module I2C
6 Keypad 4x4
7 Các lý thuyết liên quan
a) GPIO
b) I2C (inter-integrated circuit)
c) Chuẩn giao tiếp 1-Wire
8 Tìm hiểu về hệ điều hành thời gian thực FreeRTOS
a) Định nghĩa hệ điều hành thời gian thực
b) Các thành phần trong RTOS
c) Các đối tượng trong RTOS
d) Giải thuật cho lịch trình theo chế độ ưu tiên
e) Quản lý task trong RTOS
f) Hệ điều hành FreeRTOS
Chương 3: Thiết kế hệ thống
1 Sơ đồ khối
2 Sơ đồ nguyên lý
3 Hệ thống
Chương 4: Đánh giá kết quả và hướng phát triển
1 Kết quả
2 Hướng phát triển
Chương 5: Tài liệu tham khảo
Trang 4Chương 1: Phân tích đề tài
1 Mô tả tổng quát
Nền nông nghiệp của nước ta là nền nông nghiệp vẫn còn lạchậu cũng như chưa có nhiều ứng dụng khoa học kĩ thuật được ápdụng vào thực tế Rất nhiều quy trình kĩ thuật trồng trọt, chăm sócđược tiến hành một cách chủ quan và không đảm bảo được đúng yêucầu Có thể nói trong nông học ngoài những kĩ thuật trồng trọt, chămsóc thì tưới nước là một trong các khâu quan trọng nhất trong trồngtrọt, để đảm bảo cây sinh trưởng và phát triển bình thường, tưới đúng
và tưới đủ theo yêu cầu nông học của cây trồng sẽ không sinh sâubệnh, hạn chế thuốc trừ sâu cho sản phẩm an toàn, đạt năng suất,hiệu quả cao Hơn thế nữa, với việc thiết kế một hệ thống tưới cây tựđộng sẽ giúp cho con người không phải tưới cây, không phải tốn chiphí thuê nhân công tưới nước cũng như giám sát thời gian tưới cây.Với hệ thống này, việc tưới cây sẽ là tự động tùy theo nhiệt độ thờitiết nắng hay mưa, độ ẩm cao hay thấp…Tất cả các điều kiện đó sẽđược đưa vào hệ thống tính toán và đưa ra thời gian chính xác đểbơm nước Người lao động sẽ không cần phải quan tâm đến việc tướicây, cây sẽ được sinh trưởng và phát triển tốt hơn nhờ việc tưới câyphù hợp và chính xác hơn Xuất phát từ những vấn đề thực tiễn trên
em đã nghiên cứu và tiến hành thiết kế hệ thống “Vườn thông minh”
Đề tài được lựa chọn là Mô hình vườn thông minh – dựa trên
các dữ liệu từ các cảm biến, xử lý và thực hiện các hiển thị, cảnh báocác hiện tượng vượt qua khung quy định Cả hệ thống sẽ được xây dựng trên hệ điều hành thời gian thực FreeRTOS
Hệ thống sẽ có thể đặt ở bất cứ đâu ngoài môi trường để thu thập được các dữ liệu về độ ẩm, ánh sáng, nhiệt độ
Trang 5- Xây dựng hệ thống trên hệ điều hành FreeRTOS với các tác vụ quản lý task ứng với từng chức năng cụ thể: hiển thị, tính toán, cảnh báo…các thông số.
4 Hướng giải quyết vấn đề
- Tham khảo cách ghép nối giữa các module và phần cứng
- Tìm hiểu các chuẩn giao tiếp dữ liệu giữa các linh kiện
- Tìm hiểu các thao tác cụ thể với hệ điều hành FreeRTOS để xây dựng các task ứng với chức năng cụ thể
Chương 2: Cơ sở lý thuyết
Chương này sẽ giới thiệu các lý thuyết liên quan, trình bày các phương pháp nghiên cứu và thực hành cụ thể Đồng thời phân tích, đánh giá, làm rõ và lý giải cho sự các lựa chọn đó.
1 Kit STM32F103C8T6
KIT STM32F103C8T6 Mini thuộc loại kit phát triển là Kit phát triểnđược thiết kế với đơn giản, kít ra đầy đủ chân của vi điều khiển, có cổnggiao tiếp USB và cổng nạp SWD, sử dụng dòng vi điều khiển 32 Bit củadòng ST Thích hợp với những người tiếp cận dòng STM 32 Bit
Trang 7Thông tin kỹ thuật:
Nguồn: 3 -> 5 VDC
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu)
Đo tốt ở độ ẩm 20 to 70%RH với sai số 5%
Đo tốt ở nhiệt độ 0 to 50°C sai số ±2°C
Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần)
Kích thước 15mm x 12mm x 5.5mm
4 chân, khoảng cách chân 0.1”
3 Cảm biến dộ ẩm đất
Trang 8• Cảm biến độ ẩm đất được hoạt động với 2 chế độ ngõ ra (Analog & Digital), trạng thái đầu ra mức thấp (0V), khi đất nhiều nước sẽ ở mức cao (5V).
• Cảm biến đất: Hai đầu của cảm biến được cắm vào đất để phát hiện
độ ẩm Dùng dây nối giữa cảm biến và module chuyển đổi Thông tin
về độ ẩm đất sẽ được đọc và gửi về module chuyển đổi.
• Module chuyển đổi: Module chuyển đổi có cấu tạo chính gồm một IC
so sánh LM393, một biến trở, 4 điện trở dán 100 Ohm và 2 tụ dán Biến trở có chức năng định ngưỡng so sánh với độ ẩm đất đọc về từ cảm biến Ngưỡng so sánh và tín hiệu cảm biến sẽ là hai đầu vào của
IC so sánh LM393 Khi độ ẩm thấp hơn ngưỡng định trước, ngõ ra của
IC là mức cao (1), ngược lại là mức thấp (0).
• Đặc điểm:
- Điện áp hoạt động: 3.3V-5V
- Kích thước PCB: 3cm x 1.6cm
- Led báo hiệu: + Led đỏ báo nguồn
+ Led xanh báo mức độ ẩm ở Do
• Mô tả các pin trên module:
và kí tự đồ họa), 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 rất ít tài nguyên hệ thống và giá thành rẻ… Thông số kỹ thuật
- Điện áp hoạt động: 5V
- Hiển thị tối đa 20 tự trên 4 dòng
- Chữ đen nền xanh lá
Trang 9Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver
HD44780(LCD 1602, LCD 2004, ), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay.
- Giao tiếp: I2C
- Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
- Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H)
- Trọng lượng: 5g
- Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt
- Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD
6 Keypad 4x4
Trang 10Bàn phím ma trận Mềm 4x4 Keypad được thiết kế với giao diện đơn giản giúp dễ dàng giao tiếp với bất kì vi điều khiển nào Mặt sau dính thuận tiên để gắn bàn phím trong nhiều dự án.
Sơ đồ chân Keypad 4x4
7 Các lý thuyết liên quan
a) GPIO
GPIO là viết tắt của General Purpose Input Output GPIO chính là
“cổng” để vi điều khiển có thể kết nối được với những ngoại vi bên ngoài
Chức năng cơ bản của GPIO là xuất tín hiệu ra (output) và nhận tín hiệu vào (input), VD: output có làm sáng tắt bóng LED, input
có thể nối với nút nhấn
b) I2C (inter-integrated circuit)
I2C là chuẩn truyền thông nối tiếp 2 dây gồm 1 dây xung clock (SCL) và 1 dây dữ liệu (SDA) Các chip chủ-tớ được nối
Trang 11chung với nhau trên hai đường dây này và được nối với điện trở treo.
Giao diện kết nối I2C
• Cơ chế đơn giản để xác thực dữ liệu được truyền
• Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
• Các mạng I2C dễ dàng mở rộng Các thiết bị mới có thể được kết nối đơn giản với hai đường bus chung I2C
Phần cứng
Bus vật lý I2C
Bus I2C (dây giao tiếp) chỉ gồm hai dây và được đặt tên là Serial Clock Line (SCL) và Serial Data Line (SDA) Dữ liệu được truyền đi được gửi qua dây SDA và được đồng bộ với tín hiệu đồng hồ (clock) từ SCL Tất cả các thiết bị / IC trên mạng I2C được kết nối với cùng đường SCL và SDA như sau:
Bus vật lý I2C
Cả hai đường bus I2C (SDA, SCL) đều hoạt động như các bộ lái cực máng hở (open drain) Nó có nghĩa là bất kỳ thiết bị / IC trên mạng I2C có thể lái SDA và SCL xuống mức thấp, nhưng không thể lái chúng lên mức cao Vì vậy, một điện trở kéo lên (khoảng 1
kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus, để giữ cho chúng ở mức cao (ở điện áp dương) theo mặc định
Lý do sử dụng một hệ thống cực máng hở (open drain) là để không xảy ra hiện tượng ngắn mạch, điều này có thể xảy ra khi một thiết bị cố gắng kéo đường dây lên cao và một số thiết bị khác cố gắng kéo đường dây xuống thấp
Thiết bị chủ (Master) và tớ (Slave)
Các thiết bị kết nối với bus I2C được phân loại hoặc là thiết bị Chủ (Master) hoặc là thiết bị Tớ (Slave) Ở bất cứ thời điểm nào thì chỉ có duy nhất một thiết bị Master ở trang thái hoạt động trên bus I2C Nó điều khiển đường tín hiệu đồng hồ SCL và quyết định hoạt động nào sẽ được thực hiện trên đường dữ liệu SDA
Trang 12Tất cả các thiết bị đáp ứng các hướng dẫn từ thiết bị Master này đều là Slave Để phân biệt giữa nhiều thiết bị Slave được kết nối với cùng một bus I2C, mỗi thiết bị Slave được gán một địa chỉ vật
lý 7-bit cố định
Khi một thiết bị Master muốn truyền dữ liệu đến hoặc nhận dữ liệu từ một thiết bị Slave, nó xác định địa chỉ thiết bị Slave cụ thể này trên đường SDA và sau đó tiến hành truyền dữ liệu Vì vậy, giao tiếp có hiệu quả diễn ra giữa thiết bị Master và một thiết bị Slave cụ thể
Tất cả các thiết bị Slave khác không phản hồi trừ khi địa chỉ của chúng được chỉ định bởi thiết bị Master trên dòng SDA
Giao thức truyền dữ liệu
Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bịMaster và các thiết bị Slave để truyền dữ liệu giữa chúng
Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một đường dữ liệu SDA duy nhất, thông qua các chuỗi
có cấu trúc gồm các số 0 và 1 (bit) Mỗi chuỗi số 0 và 1 được gọi
là giao dịch (transaction) và dữ liệu trong mỗi giao dịch có cấu trúc như sau:
c) Chuẩn giao tiếp 1-Wire
• 1-Wire là một chuẩn giao tiếp được thiết kế bởi Dallas
Semiconductor và đã được maxim mua lại năm 2001 Maxim là một hãng sản xuất chip lớn
• 1-Wrire dùng một dây để truyền nhận nên có tốc độ thấp Chủ yếu sử dụng cho việc thu thập dữ liệu, truyền nhận dữ liệu thời tiết, nhiệt độ, công việc không yêu cầu tốc độ cao
• Cũng giống như giao tiếp I2C, dây tín hiệu của 1 Wire phải được treo lên Vcc Và cấu hình GPIO dạng Open Drain Về nguyên lý, chuẩn Onewire có thể giao tiếp với nhiều thiết bị trongcùng một mạng theo sơ đồ sau:
Sơ đồ lắp đặt chuẩn giao tiếp 1-Wire
• Cơ sở truyền nhận: Các tín hiệu sử dụng Restart, 0 write1 , 1 write , Read
Write 1: truyền đi bit 1: Master kéo xuống 0 một khoảng A(us) rồi về mức 1 khoảng B
Write 0: truyền đi bit 0: Master kéo xuống 0 khoảng C rồi trả về 1khoảng D
Read: Đọc một Bi : Master kéo xuống 0 khoảng A rồi trả về 1 delay khoảng E rồi đọc giá trị slave gửi về delay F
Trang 13Restart: Chuẩn bị giao tiế Master ké0 xuống 0 một khoảng H rồinhả lên mức 1 sau đó cấu hình Master là chân In delay I (us) rồi đọc giá trị slave trả về Nếu =0 thì cho phép giao tiếp =1 đường truyền lỗi hoặc slave đang bận.
Chuẩn 1-Wire điều cần chính xác nhất là thời gian Vậy để tối ưu đường truyền thì cần một bộ định thời để delay chính xác nhất
• Khung truyền – gói tin
Một gói tin (packet) của DHT 11 bao gồm 40bit, tương ứng với 5byte Trong đó:
- Byte 1: giá trị phần nguyên của độ ẩm (RH%)
- Byte 2: giá trị phần thập phân của độ ẩm (RH%)
- Byte 3: giá trị phần nguyên của nhiệt độ (TC)
- Byte 4: giá trị phần thập phân của nhiệt độ (TC)
- Byte 5: kiểm tra tổng (Check Sum) là tổng của 4byte phía trước cộng lại
DHT11 sẽ gửi MSB (bit có trọng số lớn nhất) tức là byte 1 sẽ được gửi đầu tiên, cuối cùng là byte 5
Gói tin của DHT11
• Chu trình nhận dữ liệu
Trạng thái bình thường DHT11 sẽ ở trạng thái tiêu thụ năng lượng thấp Khi có tín hiệu Reset, chúng sẽ được wakeup sau đó DHT11 phản hổi bằng cách kéo chân Data xuống 1 khoảng thời gian, rồi nhả ra
Sau đó 5byte dữ liệu sẽ được gửi đi, MCU sẽ đọc 5byte đó Kết thúc DHT11 nhả chân Data về lại mức 1 và trở về trạng thái tiết kiệm năng lượng Nó sẽ được đánh thức nếu có 1 tín hiệu reset Chu trình giao tiếp với DHT11
• Cách reset hay start
Để xuất tín hiệu reset hay start cho DHT11, chúng ta sẽ kéo chân Data xuống 0 ít nhất là 18ms, sau đó nhả ra 20-40us để chờ DHT11 phản hồi Nếu DHT11 phản hồi, nó sẽ kéo chân Data xuống 0 khoảng 80us, sau đó nhả về 1 80us
Tiếp theo sẽ là 80bit (5byte) dữ liệu ngay sau đó
• Cách nhận biết bit 0 và 1 trong giá trị trả về của DHT11
Với bit 0 DHT11 sẽ kéo chân Data xuống 0 50us và trả về 1 28us
Với bit 1 DHT11 sẽ kéo chân Data xuống 0 50us và trả về 1 70us
Thực tế, chúng ta chỉ cần đo thời gian Data ở mức 1 là 28us hay70us là đã có thể phân biệt được rồi
Trang 14DHT11 bit 0
DHT11 bit 1
8 Tìm hiểu về hệ điều hành thời gian thực FreeRTOS
a) Định nghĩa hệ điều hành thời gian thực
Hệ điều hành thời gian thực – real time operating system (RTOS), làmột hệ điều hành nhằm phục vụ các ứng dụng thời gian thực, với việc sử li
dữ liệu đầu vào mà không có sự chậm trễ của bộ đệm Các yêu cầu về thờigian xử lý được tính bằng phần mười của giây hoặc nhanh hơn nữa Quátrình xử lý phải được thực hiện trong một khoảng thời gian cố định chặtchẽ nếu không hệ thống có thể sẽ gặp sự cố Việc này có thể được thựchiện thông qua cơ chế chia thành các tác vụ với quyền ưu tiên khác nhau
b) Các thành phần trong RTOS
Bộ lịch trình (Scheduler): Là một tập các thuật toán để xác định tác
vụ (Task) nào được thực thi
Đối tượng (Object): Là những cấu trúc đặc biệt (Kernel) giúp ngườilập trình tạo ra các ứng dụng
Dịch vụ (Service): Là những điều khiển mà Kernel (lõi) thực thitrong đối tượng (object): chia thời gian (Timing), Ngắt (interrupt), Đáp ứng(handling) và quản lý tài nguyên hệ thống (resource management)
c) Các đối tượng trong RTOS
Tasks: Là các luồng (thread) thực thi cùng tồn tại và độc lập nhau cóthể “cạnh tranh” nhau để dành quyền thực thi
Semaphores: Là đối tượng bắt sự kiện để đồng bộ giữa các tasks, cóthể tăng hoặc giảm
Message Queues: Là một kiểu cấu trúc dữ liệu được dùng để đồng
bộ hóa hoặc trao đổi thông tin giữa các Tasks
Real-time embedded applications: Là sự kết nối giữa các đối tượngcủa Kernel để giải quyết vấn đề thời gian thực như sự đồng thời, sự đồng
bộ, và trao đổi dữ liệu
d) Giải thuật cho lịch trình theo chế độ ưu tiên
Hầu hết các Real – time Kernel sử dụng giải thuật lịch trình thay thếtheo độ ưu tiên (preemptive priority- based scheduling) làm mặc định
Trang 15Các task sẽ được thực thi tại bất kì một thời điểm là task có độ ưutiên cao nhất so với các task khác đang ở trạng thái sẵn sàng Real –TimeKernel hỗ trợ 256 cấp độ ưu tiên, với 0 là độ ưu tiên cao nhất và 255 là độ
ưu tiên thấp nhất
Một số Kernel thì ngược lại với 255 là độ ưu tiên cao nhất và 0 là độ
ưu tiên thâp nhất Với bộ chuyển đổi theo đọ ưu tiên, mỗi task phải có một
độ ưu tiên, và task có độ ưu tiên cao nhất chạy đầu tiên Nếu một Task có
độ ưu tiên cao hơn task đang chạy trở nên sẵn sàng để chạy thì kernel sẽngay lập tức lưu lại trạng thái Task hiện tại và chuyển sang Task có độ ưutiên cao hơn
Mặc dù việc phân chia độ ưu tiên của Task được thực hiện khi task
đó được tạo nhưng độ ưu tiên của Task là có thể thay đổi một cách linhđộng sử dụng Lời gọi do kernel cung cấp (Kernel – provided calls) Khảnăng này dùng để thay đổi một cách linh động cho phép một ứng dụngnhúng có độ linh hoạt để ứng xử với sự kiện bên ngoài khi chúng xuất hiện,tạo ra một hệ thống thời gian thực và đáp ứng tốt Lưu ý là việc sử dụngkhông đúng khả năng thay đổi độ ưu tiên này có thể dẫn đến đảo độ ưu tiên(priority inversion), vùng chết (deadlock), và có thể dẫn đến treo hệ thống(system failure)
e) Quản lý task trong RTOS
Task là một luồng thực thi độc lập mà có thể cạnh tranh chiếm quyềnthực thi Một ứng dụng được chia ra làm nhiều Tasks đồng thời(Concurrent Task) để tối ưu khả năng đáp ứng vào ra trong luật thời gian
Một Task được định nghĩa thuần túy là một tập các tham số và cấutrúc dữ liệu Các thành phần của một Task: Khi được tạo ra, Task sẽ có tên,
ID duy nhất, độ ưu tiên, một block điều khiển Task (TCB), Stack, và Cácthủ tục thực thi Task