TỔNG QUAN
ĐẶT VẤN ĐỀ
Ngày nay, với sự phát triển mạnh mẽ của khoa học kỹ thuật và công nghệ điện tử, kỹ thuật tự động điều khiển đã trở thành yếu tố quan trọng trong nhiều lĩnh vực như quản lý, công nghiệp và cung cấp thông tin Là sinh viên ngành Điện tử - Viễn thông, chúng ta cần nắm bắt và áp dụng hiệu quả các công nghệ này để đóng góp vào sự phát triển của khoa học kỹ thuật toàn cầu, cũng như thúc đẩy sự phát triển của ngành điện tử và nền kinh tế đất nước.
Các hệ thống điều khiển từ xa qua mạng Internet ngày càng trở nên phổ biến, giúp các thiết bị giao tiếp dữ liệu hiệu quả Sự phát triển nhanh chóng của viễn thông và công nghệ thông tin, cùng với nhu cầu cao về dịch vụ đa phương tiện chất lượng, đã thúc đẩy sự thay đổi lớn trong cơ sở hạ tầng thông tin Trong bối cảnh đó, thực phẩm sạch trở thành một trong những ưu tiên hàng đầu của con người Nhóm chúng tôi đã quyết định thực hiện đề tài “thiết kế và thi công hệ thống giám sát vườn rau thông qua mạng Internet” cho đồ án tốt nghiệp Mặc dù đã có một số sản phẩm tương tự, nhưng chúng còn nhiều hạn chế như thiếu tính linh động và khả năng điều khiển từ xa, dẫn đến tình trạng cây chết do tưới nước không đúng cách Một mô hình vườn cây thông minh cần đáp ứng các yêu cầu như đo độ ẩm đất, đo nhiệt độ không khí, tự động tưới cây khi đất khô và ngừng tưới khi đất đủ ẩm, cùng khả năng điều khiển từ xa qua Internet Hệ thống này là sự kết hợp hoàn hảo giữa kỹ thuật cơ khí và điện - điện tử, đảm bảo thực hiện các yêu cầu cơ bản mà chúng tôi mong muốn.
MỤC TIÊU ĐỀ TÀI
-Áp dụng kiến thức học lý thuyết vào thiết kế mô hình ứng dụng trong thực tế
+Mọi người luôn cảm thấy yên tâm khi khu vườn được chăm sóc tốt +Tiết kiệm sức lao động
+Phát triển hệ thống tư duy, sáng tạo để có thể nghiên cứu, triển khai các hệ thống khác phức tạp hơn.
GIỚI HẠN ĐỀ TÀI
Vì thời gian cho phép thực hiện đồ án tốt nghiệp này có hạn 13 tuần nên nội dung đề tài chỉ tập trung giải quyết các vấn đề sau:
-Thiết kế mô hình vườn cây thông minh
-Ứng dụng các kiến thức đã học để hệ thống đảm bảo các yêu cầu sau:
+ Đo nhiệt độ độ ẩm không khí
+ Cảm nhận sự suy giảm của ánh sáng
Hệ thống tự động bơm nước sẽ tưới cây khi độ ẩm đất thấp và ngừng hoạt động khi độ ẩm đạt mức cao Đồng thời, hệ thống cũng tự động mở đèn để cung cấp ánh sáng cho cây quang hợp khi điều kiện ánh sáng không đủ.
+ Có thể điều khiển và giám sát từ xa thông qua internet.
KHẢO SÁT, ĐÁNH GIÁ THỰC TRẠNG
Rau xanh là thực phẩm thiết yếu trong bữa ăn hàng ngày, cung cấp nhiều vitamin và dinh dưỡng cần thiết cho sức khỏe Việc tiêu thụ nhiều rau xanh giúp ổn định huyết áp, phòng ngừa bệnh tim mạch và thúc đẩy quá trình trao đổi chất Hiện nay, thị trường có nhiều loại rau củ quả đa dạng, phong phú để người tiêu dùng lựa chọn.
Nhiều loại rau hiện nay có nguồn gốc không rõ ràng, dẫn đến nguy cơ không đảm bảo vệ sinh an toàn thực phẩm Người tiêu dùng thường phải đối mặt với rau củ quả có chứa dư lượng thuốc bảo vệ thực vật, thuốc kích thích, vi khuẩn và hóa chất độc hại.
Nhóm đã phát triển hệ thống giám sát vườn rau qua internet, giúp tối ưu hóa việc tưới nước so với phương pháp truyền thống Hệ thống này giải quyết vấn đề nước bị thất thoát do không kiểm soát được lượng nước cần tưới cho cây Nó tự động đo độ ẩm đất, bơm nước khi độ ẩm thấp và tắt khi độ ẩm cao, đồng thời điều chỉnh ánh sáng cho cây quang hợp khi cần Qua đó, người bận rộn có thể dễ dàng theo dõi sự phát triển của cây trồng, kiểm soát lượng nước tiêu thụ và tiết kiệm tối đa nguồn nước và chi phí.
NỘI DUNG CỦA ĐỒ ÁN MÔN HỌC GỒM
CƠ SỞ LÝ THUYẾT
TỔNG QUAN VỀ Module Wifi Esp8266
Module ESP8266 là một giải pháp wifi tiết kiệm chi phí, được ưa chuộng cho các ứng dụng liên quan đến Internet và Wifi Nó cũng thường được sử dụng để thay thế cho các module RF khác trong việc truyền nhận dữ liệu.
ESP8266 là một chip tích hợp cao, lý tưởng cho thế giới Internet of Things (IoT), cung cấp giải pháp kết nối mạng Wi-Fi toàn diện Chip này không chỉ cho phép lưu trữ ứng dụng mà còn giảm tải các chức năng kết nối mạng từ bộ xử lý ứng dụng Với khả năng xử lý và lưu trữ mạnh mẽ, ESP8266 dễ dàng tích hợp với các bộ cảm biến, vi điều khiển và thiết bị ứng dụng khác thông qua GPIOS, giúp tiết kiệm chi phí và diện tích PCB.
- Wifi 2.4 GHz ,hỗ trợ WPA/WPA2
- Chuẩn điện áp hoạt động: 3,3V
- Có 3 chế độ hoạt động: Client, Access Point, Both Client và Access Point
- Hỗ trợ các chuẩn bảo mật như: OPEN, WEP, WPA_PSK, WPA2_PSK, WPA_WPA2_PSK
- Hỗ trợ cả 2 giao tiếp TCP và UDP
- Làm việc như các máy chủ có thể kết nối với 5 máy con
- LED chỉ báo truyền nhận TX/RX
Hình 2.2 Sơ đồ các chân của ESP8266
- RESET: chân reset, tích cực mức thấp [0]
- ADC: chân đọc dữ liệu analog
- CH_PD: Kích hoạt chip, sử dụng cho Flash Boot và updating lại module
- TXD: Chân Tx của giao thức UART
- RXD: Chân Rx của giao thức UART
2.1.2 Sơ đồ chân kết nối:
2.1.3 Các chế độ hoat động:
Module ESP8266 hoạt động ở 3 chể độ: TCP Client, TCP server và WiFi Access Point
* Hoạt động ở chế độ TCP Client:
- Kích hoạt tính năng đa kết nối:
Để thiết lập kết nối kênh, bạn cần chỉ định rõ số lượng kết nối (tối đa 4), loại giao thức (TCP hoặc UDP), địa chỉ IP hoặc tên miền (nếu có quyền truy cập DNS) và số cổng thông qua lệnh CIPSTART.
Ví Dụ : AT+CIPSTART=4,"TCP","google.com",80
Nếu thành công module sẽ trả về kết nối :
- Tiếp theo, cần phải xác định bao nhiêu dữ liệu mình muốn gửi (sau khi xác định được kênh) trong này
Ví dụ chúng ta sẽ gửi "GET / HTTP / 1.0 ¥ r ¥ n ¥ r ¥ n", đó là 18 byte:
Lần này, thay vì một câu trả lời "OK" mình sẽ nhận được một “ > ” nhắc:
Các mô-đun dự kiến gửi 18 byte dữ liệu, nhưng có sự lộn xộn khi sử dụng màn hình nối tiếp Arduino do sự khác biệt giữa yêu cầu kết thúc dòng của mô-đun ("Chỉ Carriage return") và mong đợi của các máy chủ HTTP ("Cả hai NL & CR") Để khắc phục, cần thay đổi thiết lập cho cả NL & CR và gửi yêu cầu như sau: GET / HTTP/1.0 Nhớ nhấn S một lần nữa để gửi dòng sản phẩm mà máy chủ HTTP mong đợi.
- Các mô-đun nên gửi về với:
- Bây giờ đã có sự thay đổi kết thúc cài đặt để vận chuyển trở lại để mình có thể gửi thêm lệnh
- Các mô-đun nên cung cấp một phản ứng thứ hai một khi máy chủ web đáp ứng:
- Bây giờ ta sẽ thấy dữ liệu:
HTTP/1.0 302 Found Cache-Control: private Content-Type:
- Ta có thể sẽ nhận được một phản ứng OK hoặc hai và sau đó cuối cùng một dấu hiệu cho thấy các máy chủ có đóng kết nối:
*Hoạt động ở chế độ TCP Server:
- Kết nối với một điểm truy cập WiFi
- Cho phép nhiều kết nối
- Tìm ra địa chỉ IP của các mô-đun
- Lưu ý phản ứng, ví dụ
- Thiết lập các mô-đun để lắng nghe (tham số đầu tiên, chế độ được thiết lập để
1) cho một kết nối vào một cổng cụ thể AT+CIPSERVER=1,1336
- Từ một thiết bị khác trên cùng một mạng kết nối với các cổng lắng nghe, ví dụ: với telnet: telnet 192.168.1.2 1336
Các module sẽ hiển thị:
*Hoạt động ở chế độ WiFi Access Point:
- Các module đi kèm với một điểm truy cập được xác định trước (SSID của
"ESP_ "), nhưng ta có thể định nghĩa của mình riêng với AT+CWSAP="NoWorriESSID","password",3,0
Để thiết lập WiFi Access Point, bạn cần cung cấp các tham số sau: tên SSID, mật khẩu, và kênh WiFi Hãy chọn một kênh chưa được sử dụng trong khu vực của bạn, và cuối cùng, xác định tiêu chuẩn mã hóa để đảm bảo an toàn cho mạng.
Giá trị mã hóa 0 có nghĩa là mật khẩu bị bỏ qua, nhưng không thể có giá trị rỗng Mặc dù không thể nhận được mã hóa để làm việc, ta có thể hy vọng vào một firmware mới hơn Để tạo ra mạng, cần thiết lập chế độ "WiFi" của các mô-đun thành "AP" hoặc "Cả hai".
Bây giờ, bạn có thể kết nối với mô-đun của mình như một điểm truy cập từ các thiết bị khác, chẳng hạn như máy tính xách tay hoặc điện thoại.
Ta có thể liệt kê các địa chỉ IP…của bất kỳ thiết bị kết nối vào mạng bằng: AT+CWLIF
- Tạo ra các phản ứng:
Hiện tại, chúng ta có thể triển khai các ví dụ máy chủ từ xa và kết nối, lưu ý rằng mô-đun sẽ có địa chỉ IP 192.168.4.1 khi hoạt động ở chế độ AP Giao tiếp với mô-đun ESP 8266 được thực hiện thông qua tập lệnh AT.
Khi sử dụng giao tiếp UART để gửi lệnh AT đến Module ESP 8266, chúng ta phải gửi kềm kí tư để báo kết thúc lệnh
1 Lệnh Kiểm tra kết nối: AT
Kết quả trả về: OK nếu kết nối không bị lỗi
2 Lệnh Reset module: AT + RST
Trả về: Ready sau khi reset thành công module
3 Lệnh kiểm tra phiên bản module: AT+GMR
Trả về môt dãy số là mã phiên bản module
4 Lệnh cài đặt module hoạt động ở chế độ trạm phát wifi, điểm truy cập wifi: AT+CWMODE=3
Trả về: Ok sau khi cài đặt thành công
5 Lệnh tìm các mạng wifi đang có: AT+CWLAP
Kết quả trả về là danh sách các mạng wifi mà module có thể bắt được
6 Lệnh truy cập vào mạng wifi khác
AT+CWJAP="","" Sau khi truy cập thành công, trả về: Ok
7 Lệnh lấy đỉa chỉ IP của module AT+CIFSR Trả về một dãy số là địa chỉ IP của module
8 Lệnh đặt tên và mật khẩu cho mạng wifi do module ESP8266 phát ra: AT+CIFSR="tên_mang","mật_khẩu",3,0.
Sensor DHT 11
Cảm biến DHT11 là thiết bị đo nhiệt độ và độ ẩm, được phát triển để thay thế dòng SHT1x trong các ứng dụng không yêu cầu độ chính xác cao.
- DHT11 có 4 chân như hình Nó sử dụng giao tiếp số theo chuẩn 1 dây
+ Sai số nhiệt độ: ±2ºC
2.2.1 Nguyên lý hoạt động: Sơ đồ kết nối vi xử lý:
Hình 2.4 Sơ đồ kết nối vi xử lý
Nguyên lý hoạt động: Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:
Để bắt đầu quá trình đo, gửi tín hiệu "Start" tới cảm biến DHT11, sau đó cảm biến sẽ xác nhận tín hiệu này Khi kết nối thành công, DHT11 sẽ trả về 5 byte dữ liệu cùng với thông tin về nhiệt độ đã đo được.
- Bước 1 : gửi tín hiệu Start
MCU thiết lập chân DATA ở chế độ Output và kéo chân DATA xuống 0 trong thời gian dài hơn 18ms Điều này cho phép DHT11 nhận biết rằng MCU đang yêu cầu đo nhiệt độ và độ ẩm.
+ MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào
+ Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp Nếu >40us mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11
+ Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo lên cao trong
Bằng cách giám sát chân DATA, MCU có khả năng xác định xem có thể giao tiếp với cảm biến DHT11 hay không Khi tín hiệu từ DHT11 đạt mức cao, quá trình giao tiếp giữa MCU và DHT11 sẽ được hoàn thiện.
- Bước 2: đọc giá trị trên DHT11
+ DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte 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)
=> Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là chính xác, nếu sai thì kết quả đo không có nghĩa
Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và độ ẩm
Hình 2.6.Tín hiệu Start củz Bit 0 và Bit 1
• Bit 0 : Được biểu hiện bằng 1 tín hiệu mức 1 với độ rộng 26-28us
• Bit 1 : được biểu hiện bằng 1 tín hiệu mức 1 với độ rộng 70us.
Tổng Quan Về Arduino
Arduino là một bo mạch vi điều khiển được thiết kế bởi nhóm giáo sư và sinh viên Ý vào năm 2005 Mạch Arduino có khả năng cảm nhận và điều khiển nhiều đối tượng khác nhau, thực hiện các nhiệm vụ từ lấy tín hiệu từ cảm biến đến điều khiển đèn và động cơ Bên cạnh đó, Arduino còn có thể kết nối với nhiều module khác như module đọc thẻ từ, ethernet shield, và sim900A, giúp mở rộng khả năng ứng dụng của nó.
Phần cứng Arduino bao gồm một board mạch nguồn mở, được thiết kế trên nền tảng vi xử lý AVR Atmel 8bit hoặc ARM Atmel 32-bit Hiện tại, Arduino có 6 phiên bản, trong đó Arduino Uno và Arduino Mega là hai phiên bản phổ biến nhất Arduino Uno được sử dụng rộng rãi trên toàn thế giới, với nhiều ví dụ và hướng dẫn có sẵn trên YouTube và các trang web khác Do đó, đối với những người mới bắt đầu học Arduino, việc chọn Arduino Uno sẽ giúp việc tự học trở nên dễ dàng hơn.
Phần mềm IDE là công cụ lập trình chính cho mạch Arduino, được phát triển dưới dạng mã nguồn mở Bạn có thể dễ dàng tải phần mềm này từ trang web chính thức của Arduino tại địa chỉ arduino.cc.
2.3.1 Phần Cứng Của Arduino Uno R3:
Phần này nói về phần cứng của Arduino Uno R3, một bo mạch thông dụng hiện nay
*Chân xuất tín hiệu ra:
Arduino Uno có tổng cộng 14 chân xuất tín hiệu, trong đó những chân được đánh dấu bằng dấu ~ có khả năng băm xung (PWM), cho phép điều khiển tốc độ động cơ và độ sáng của đèn Hình 2.4 minh họa rõ ràng các chân này *IC ATmega 328.
IC Atmega 328 là thành phần chính của bo mạch Arduino Uno, có vai trò quan trọng trong việc thu thập và xử lý dữ liệu từ cảm biến, cũng như xuất tín hiệu ra ngoài Chân ICSP của ATmega 328 hỗ trợ việc lập trình và giao tiếp với các thiết bị khác.
The ICSP pins of the ATmega 328 are utilized for SPI (Serial Peripheral Interface) communication, which is essential for various Arduino applications For instance, these pins are commonly used with the RFID RC522 module and the Ethernet Shield in Arduino projects.
*Chân lấy tín hiệu Analog:
Các chân này lấy tín hiệu Analog (tín hiệu tương tự) từ cảm biến để IC Atmega 328 xử lý Có tất cả 6 chân lấy tín hiệu Analog, từ A0 đến A5
*Chân cấp nguồn cho cảm biến:
Các chân cung cấp nguồn cho thiết bị bên ngoài như relay, cảm biến và RC servo, bao gồm chân GND, chân 5V và chân 3.3V, giúp người dùng không cần thiết bị biến đổi điện Khu vực này cũng có chân Vin, chân reset và chân IOREF, nhưng chúng ít được sử dụng nên sẽ không được đề cập chi tiết trong tài liệu này.
*Các linh kiện khác trên board Arduino Uno R3:
Arduino Uno R3 không chỉ có các linh kiện đã đề cập mà còn sở hữu một số linh kiện nổi bật khác Bo mạch này được trang bị 4 đèn LED, bao gồm 1 đèn nguồn (LED ON) để hiển thị trạng thái cấp nguồn, 2 đèn Tx và Rx để báo hiệu truyền nhận dữ liệu, cùng với 1 đèn L.
Rx sẽ nhấp nháy khi có dữ liệu truyền qua cổng USB giữa board và máy tính Đèn LED L, kết nối với chân số 13, được gọi là LED on board, cho phép người dùng thực hành các bài đơn giản mà không cần sử dụng LED ngoài.
Trong 14 chân ra của bo còn có 2 chân 0 và 1 có thể truyền nhận dữ liệu nối tiếp TTL Có một số ứng dụng cần dùng đến tính năng này, ví dụ như ứng dụng điều khiển mạch Arduino Uno R3 qua điện thoại sử dụng bluetooth HC05
Chân 2 và chân 3 được sử dụng cho lập trình ngắt, bên cạnh đó còn có một số chân khác có thể đảm nhận các chức năng bổ sung.
2.3.2 Sơ đồ nguyên lý Arduino Uno R3:
Hình 2.7 Sơ đồ nguyên lý Arduino Uno R3
- Chíp vi điều khiển: Atmega 328
- Kênh băm xung PWM: 7 Kênh
- Cổng vào/ra tương tự: 12 Cổng
- Dòng DC vào/ra mỗi cổng: 40 mA (5V), 50 mA (3,3V)
- Bộ nhớ chương trình: 32KB trong đó 4 KB được sử dụng làm bootloader
Bộ nhớ SRAM có dung lượng 2.5 Kbyte, nơi lưu trữ giá trị của các biến được khai báo trong lập trình 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 Lưu ý rằng dữ liệu trên SRAM sẽ bị mất khi mất điện.
Atmega328 là một chíp vi điều khiển được sản xuất bời hãng Atmel thuộc họ MegaAVR có sức mạnh hơn hẳn Atmega8 Atmega 328 là một bộ vi điều khiển
Vi xử lý 8 bit dựa trên kiến trúc RISC sở hữu bộ nhớ chương trình 32KB ISP flash có khả năng ghi xóa hàng nghìn lần, 1KB EEPROM và 2KB SRAM, mang lại dung lượng RAM lớn cho các ứng dụng Bootloader Arduino cho phép gửi mã chương trình cho ATmega328 qua giao thức Serial (cổng COM), hỗ trợ các ngắt nội và ngoại với 2 lệnh trên một vector ngắt Nó cũng tích hợp giao thức truyền thông nối tiếp USART, SPI, I2C, cùng với bộ biến đổi số tương tự 10 bit (ADC/DAC) mở rộng tới 8 kênh Vi xử lý này có khả năng lập trình watchdog timer, hoạt động với 5 chế độ nguồn và hỗ trợ tới 6 kênh điều chế độ rộng xung (PWM), tất cả đều có tính năng hỗ trợ bootloader.
Atemega328 có khả năng hoạt động trong một dải điện áp rộng (1.8V – 5.5V), tốc độ thực thi (thông lượng) 1MIPS trên 1MHz
Hình 2.9 Các chân của Atemega328
Vi điều khiển Atmega328 ngày nay được sử dụng rộng rãi trong các dự án nhỏ của sinh viên và học sinh nhờ vào giá thành rẻ, khả năng xử lý mạnh mẽ và tiêu tốn ít năng lượng (chế độ hoạt động: 0.2 mA, chế độ ngủ: 0.1 μA, chế độ tiết kiệm: 0.75 μA) Sự hỗ trợ nhiệt tình từ cộng đồng người dùng AVR cũng góp phần vào sự phổ biến này Đặc biệt, Atmega328 đã thành công vang dội trong các dự án mã nguồn mở Arduino với các mô-đun như Arduino Uno (R3), Arduino Nano và Arduino Pro Mini, giúp người dùng dễ dàng hoàn thành chương trình chỉ trong "nháy mắt".
- Kiến trúc CPU: 8Bit, Atmel
- Dộ phân giải ADC: 10 Bit
- Số chân vào ra IO: 23
- Giao tiếp Truyền thông: SPI, TWI, UART
2.4 Module cảm biến dòng (ACS712):
2.4.1 Lý thuyết về hiệu ứng Hall:
Trong nghiên cứu này, chúng tôi sử dụng cảm biến dòng ASC712 để đo dòng điện qua tải, hoạt động dựa trên hiệu ứng Hall Bài viết này sẽ giới thiệu lý thuyết về hiệu ứng Hall và ứng dụng của nó trong việc đo lường dòng điện.
Cảm biến độ ẩm đất
Cảm biến độ ẩm đất hoạt động với đầu ra ở mức thấp (0V) khi đất thiếu nước và chuyển sang mức cao (5V) khi đất đủ ẩm Độ nhạy của cảm biến có thể được điều chỉnh bằng biến trở Phần đầu đo được cắm vào đất để phát hiện độ ẩm, và khi độ ẩm đạt ngưỡng thiết lập, đầu ra DO sẽ thay đổi từ mức thấp lên mức cao.
Cảm biến độ ẩm đất 4 chân bao gồm Vcc, GND, cùng với hai ngõ ra D0 và A0 Ngõ ra D0 cung cấp giá trị logic 0 hoặc 1, trong khi A0 cho phép đọc giá trị analog, giúp xác định độ ẩm của đất một cách chính xác hơn.
- Khi cấp nguồn, led báo nguồn sáng
- Mạch có 2 đầu ra D0 và A0 tương ứng với digital output và analog output
- Board mạch tích hợp 1 mạch phân áp và 1 mạch so sánh sử dụng opam
- Mạch phân áp đưa tín hiệu đầu ra analog đưa vào chân so sánh của mạch opam và chân đầu ra analog
Mạch so sánh thực hiện chức năng so sánh và cung cấp tín hiệu logic (1 hoặc 0) ở đầu ra digital Bên cạnh đó, bo mạch còn được trang bị 2 đèn LED, bao gồm đèn LED báo nguồn và đèn LED báo trạng thái.
Mạch hoạt động của chân digital output được thiết lập với ngưỡng so sánh bằng biến trở Điện trở của cảm biến tỷ lệ thuận với độ ẩm; khi độ ẩm cao, điện trở cũng tăng, dẫn đến điện áp đầu ra từ mạch phân áp tăng theo Khi độ ẩm đất thay đổi, điện trở cảm biến thay đổi, làm thay đổi điện áp đầu ra vào cổng so sánh trên op-amp Nếu điện áp từ cảm biến chưa vượt qua ngưỡng cài đặt, đầu ra D0 sẽ ở mức thấp và LED không sáng Ngược lại, khi điện áp đầu vào vượt qua ngưỡng, đầu ra D0 sẽ ở mức cao và LED sẽ sáng lên.
Chân analog output được kết nối trực tiếp với mạch phân áp của cảm biến mà không thông qua mạch so sánh opam, cho phép tín hiệu điện áp được truyền thẳng tới đầu ra A0 Điều này phục vụ cho các mục đích đo lường, quan trắc và giám sát hiệu quả.
Hình 2.14 Sơ đồ nguyên lý cảm biến độ ẩm đất
• Led đỏ báo nguồn vào, Led xanh báo độ ẩm
IC LM393 được sử dụng trong module cảm biến độ ẩm, khi phát hiện độ ẩm thay đổi, điện áp tại đầu vào của IC sẽ biến đổi IC này nhận diện sự thay đổi và cung cấp tín hiệu 0V để cảnh báo, từ đó tính toán để đọc độ ẩm của đất một cách chính xác.
• DO: Đầu ra tín hiệu số 0 và 1( Khi độ ẩm đất vượt quá giá trị được thiết lập, ngõ ra của module D0 ở mức giá trị là 0V )
• AO: Đầu ra Analog ( Tín hiệu tương tự )
+ Đầu ra Analog AO có thể được kết nối với bộ chuyển đổi ADC để có thể nhận được các giá trị chính xác hơn độ ẩm của đất
LM393 là một vi mạch bao gồm hai bộ so sánh độc lập với điện áp bù nhỏ khoảng 2.0mV, hoạt động với nguồn cấp đơn hoặc hai nguồn đối xứng Vi mạch này tương thích với chuẩn TTL và CMOS, thường được sử dụng trong các bộ chuyển đổi tương tự - số đơn giản, khối VCO, mạch tạo trễ thời gian, sóng vuông, mạch dao động và cổng logic số thế cao.
Hình 2.15 Ảnh thực tế và sơ đồ chân của LM 393 Bảng 2.2 Chức năng các chân
- Dải nguồn nuôi rộng từ 2Vdc đến 36Vdc
- Dải nguồn nuôi kép +/- 1Vdc đến +/- 18Vdc
- Dòng cực máng rất thấp độc lập với điện áp nguồn nuôi: 0.4mA
- Dòng lối vào thấp: 25nA
- Dòng offset lối vào thấp +/- 5nA và điệp áp off set cực đại là +/- 3mA
- Dải điện áp lối vào chung thấp (bao gồm cả mức điện áp bằng đất)
- Dải điện áp lối vào vi sai bằng với điện áp của nguồn cung cấp
- Điện áp offset lối vào thấp:– 2mA đối với LM393A.– 5mA đối với
- Điện áp lối ra tương thích với các mức log ic DTL, ECL, TTL, MOS và CMOS
- Điện áp bão hòa lối ra thấp: 250mV, 4mA
*Sơ đồ khối chức năng:
Hình 2.16 Sơ đồ khối chức năng
Bảng 2.3 Bảng thông số kỹ thuật
Bảng 2.4 Đặc điểm các loại Op-Am
*Một số mạch ứng dụng của LM393:
LCD16x2 (HD44780)
Ngày nay, màn hình LCD (Liquid Crystal Display) được sử dụng rộng rãi trong nhiều ứng dụng của vi điều khiển LCD mang lại nhiều ưu điểm nổi bật so với các loại hiển thị khác, bao gồm khả năng hiển thị đa dạng các ký tự như chữ, số và hình ảnh đồ họa Hơn nữa, thiết bị này dễ dàng tích hợp vào mạch ứng dụng thông qua nhiều giao thức giao tiếp khác nhau.
Hình 2.19 Các chân LCD16x2 (HD44780) Bảng 2.5 Chức năng các chân của LCD
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ều khiển
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 chỉnh độ tương phản của LCD
The RS (Register Select) pin plays a crucial role in determining the operation mode of an LCD By connecting the RS pin to logic "0" (GND), the data bus DB0-DB7 is linked to the Instruction Register (IR) for write operations, or to the Address Counter for read operations when set to logic "1" (VCC).
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
5 R/W 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
6 E 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
Trong chế độ ghi, khi tín hiệu chân E xảy ra xung chuyển từ cao xuống thấp, dữ liệu trên bus sẽ được LCD chấp nhận và chuyển vào thanh ghi bên trong nó.
Khi ở chế độ đọc, dữ liệu sẽ được LCD xuất ra các chân DB0-DB7 khi phát hiện cạnh lên (chuyển từ thấp sang cao) ở chân E, và dữ liệu này sẽ được LCD giữ trên bus cho đến khi chân E trở về mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với 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ế độ 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
Bảng 2.6 Chức năng các chân RS và R\W theo mục đích sử dụng
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở
1 0 Ghi vào thanh ghi DR
1 1 Đọc vào thanh ghi DR
* Bộ đếm địa chỉ AC : (Address Counter)
Thanh ghi IR không kết nối trực tiếp với vùng RAM (DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC Bộ đếm này kết nối với hai vùng RAM theo kiểu rẽ nhánh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin sẽ được truyền trực tiếp đến hai vùng RAM, trong khi việc lựa chọn vùng RAM tương tác đã được xác định trong mã lệnh.
Sau khi dữ liệu được ghi vào RAM, bộ đếm AC sẽ tự động tăng lên một đơn vị và xuất nội dung của nó cho MPU qua DB0-DB6 khi thiết lập RS=0 và R/W=1 Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh và chỉ được cập nhật khi cờ BF đạt mức cao (not busy) Do đó, khi lập trình hiển thị, cần phải tạo độ trễ khoảng TADD từ 4uS đến 5uS ngay sau khi BF=1 trước khi nạp dữ liệu mới.
Trong việc lập trình điều khiển LCD, mặc dù sơ đồ khối có nhiều thành phần khác nhau, chúng ta chỉ có thể thao tác trực tiếp với hai thanh ghi DR và IR thông qua các chân DBx Để chuyển đổi giữa hai thanh ghi này, cần thiết lập các chân RS và R/W một cách phù hợp.
Mỗi lệnh gửi đến LCD cần một khoảng thời gian để hoàn tất, và thời gian này có thể lâu hơn tốc độ của MPU Do đó, cần kiểm tra cờ BF hoặc sử dụng hàm delay để đảm bảo LCD đã thực thi xong lệnh hiện tại trước khi tiếp tục gửi lệnh mới.
• Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh ghi vào RAM (Điều này giúp chương trình gọn hơn)
• Các lệnh của LCD có thể chia thành các nhóm như sau:
1 Các lệnh về kiểu hiển thị 2
Chỉ định địa chỉ RAM nội
3 Nhóm lệnh truyền dữ liệu trong RAM nội.
Module Relay 2 Kênh
- Relay là thiết bị đóng cắt cơ bản, nó được sử dụng rất nhiều trong cuộc sống và trong các thiết bị điện tử
- Cấu tạo Relay gồm 2 phần: o Cuộn hút:
- Tạo ra năng lượng từ trường để hút tiếp điểm về phía mình
- Tùy vào điện áp làm việc người ta chia Relay ra
DC: 5V, 12V, 24V AC: 110V, 220V o Cặp tiếp điểm:
- Khi không có từ trường ( ko cấp điện cho cuộn dây) Tiếp điểm 1 được tiếp xúc với tiếp điểm 2 nhờ lực của lò xo Tiếp điểm thường đóng
- Khi có năng lượng từ trường thì tiếp điểm 1 bị hút chuyển sang 3
- Trong Relay có thể có 1 cặp tiếp điểm, 2 cặp tiếp điểm hoặc nhiều hơn Điều khiển Relay DC:
- Trong nội dung bài tập chung vào phân tích mạch Relay DC 5V, ghép nối với vi điều khiển
- Trong mạch trên là sơ đồ của 2 cặp Relay 5V
- Ta phân tích hoạt động của Relay 1 (Sử dụng Transistor PNP) o Tín hiệu S1 từ VĐK gửi tới
Khi S1 = 1; Q1 khóa lại, không có dòng chạy qua cuộn hút Relay1 Đèn LED1 tắt Tiếp điểm 1 với 2 nối với nhau
Khi S1 = 0; Q1 mở, có dòng từ VCC qua khóa Q1 cấp điện cho Cuộn hút Lúc này có chuyển mạch của cặp tiếp điểm Tiếp điểm 1 nối với
Trong mạch, Diode D1 được kết nối vào hai đầu cuộn dây của Relay, có nhiệm vụ xả dòng cho cuộn hút khi không hoạt động Nếu sử dụng Relay 12V hoặc 24V, cần bổ sung thêm một mạch Buff để đảm bảo hoạt động ổn định.
Do tín hiệu điều khiển 5V, không cùng điện áp với điện áp cấp cho Relay (12V, 24V)
Ngoài việc sử dụng transistor PNP để điều khiển, chúng ta cũng có thể sử dụng transistor NPN (C1815) cho mục đích này Khi S1 = 1, transistor Q1 dẫn điện, cung cấp dòng cho cuộn hút của relay, làm cho đèn LED1 sáng nhờ tiếp điểm 1 nối với 3 Ngược lại, khi S1 = 0, transistor Q1 ngắt, không còn dòng điện qua cuộn hút, dẫn đến việc tiếp điểm 1 không còn kết nối.
2, đèn LED1 tắt o Với sơ đồ này bạn có thể thay Relay 5V bằng 12V, 24V ( Tương ứng VCC= 12V, 24V) Mặc dù điện áp điều khiển S1 =0, 5V Mạch vẫn hoạt động bình thường
2.7.2 Sơ đồ nguyên lý mạch relay 2 kênh :
Hình 2.20 Sơ đồ nguyên lý mạch relay 2 kênh
Hình 2.21 Ảnh thực tế và sơ đồ chân Transistor S8550 -
Dòng điện cực đại: Ic= -500mA
- Công suất cực đại: Pc= 300mW
- Điện áp cực đại: + Uceo= -25V
- Hệ số khuếch đại( hfe): 120-350
- Tần số cắt: Ft >150MHz
Bảng 2.7 Thông số kỹ thuật
Module BH1750
Cảm biến cường độ ánh sáng BH1750 đo cường độ ánh sáng theo đơn vị lux, với tính năng tích hợp ADC nội và bộ tiền xử lý, cung cấp giá trị trực tiếp về cường độ ánh sáng.
- Độ Phân Giải ADC: 16Bit
Lumen là đơn vị đo lượng ánh sáng phát ra từ một nguồn trong một giây, thường được gọi là quang điện hoặc thông lượng chiếu sáng Cảm biến ánh sáng sẽ ghi nhận giá trị này trên mỗi mét vuông, và đơn vị đo được sử dụng là Lux, viết tắt là lx.
* Module BH1750 có các ưu điểm sau:
- Chuyển từ tín hiệu ánh sáng sang kỹ thuật số
- Nhận tín hiệu trong phạm vi rộng với độ phân giải cao: từ 1-65535 lx
- Tiêu thụ điện năng rất thấp nhờ tính năng tự ngắt
- Tính năng giảm nhiễu ánh sáng 50Hz/60Hz - Giao diện I2C bus
- Không yêu cầu phụ kiện bổ sung ngoài
- Có thể lựa chọn 2 kiểu I2C slave-address
- Có thể phát hiện thấp nhấp là 0.11lx, tối đa 100000lx khi sử dụng tính năng này
* Cường độ được tính như sau :
- Trời sáng trăng: 0.02 - 0.3 lx - Trời mây trong nhà: 5 - 50 lx
- Trời mây ngoài trời: 50 - 500 lx
- Trời nắng trong nhà: 100- 1000 lx
Hình 2.22 Sơ đồ nguyên lý Module BH1750 2.8.1
Hình 2.23 Sơ đồ chân BH1750
*Sơ đồ khối chức năng:
Hình 2.24 Sơ dồ khối chức năng
Hình 2.26 Máy Bơm Mini 6-12V MB385
- Điện áp sử dụng: DC 6 -12V
- Nhiệt độ hoạt động: 80 độ C
- Đầu hút cách nước: Preferences (lúc này sẽ thấy đường dẫn chứa thư viện libraries )
- BƯỚC 4 : Dán mã xách thực AUTH TOKEN
Lập trình vi điều khiển
#include // thu vien dung cho lcd
#include uint16_t lx; int h,t,doamdat1,doamdat2,aut;
The BH1750FVI Light Sensor is utilized alongside a DHT11 sensor, which reads data from pin 12 on the Arduino board The sensor type is defined as DHT11, although there are two available types: DHT11 and DHT22 Additionally, relay connections are established with bom1 connected to pin 4, bom2 to pin 3, and a light relay connected to pin 2.
LiquidCrystal lcd(9, 8, 7, 6, 5, 4); // khai bao cac chan LCD
//char auth[] = "d2f36b8d70cb45d792402353e4cb84f0"; char auth[] = "2756c1a5b7764b8190bf275e8f66b911"; char ssid[] = "vuonthongminh"; char pass[] = "23456789";
{ doamdat1 = analogRead(A0); doamdat1 map(doamdat1, 1023, 0, 0, 100); doamdat2
= analogRead(A1); doamdat2 map(doamdat2, 1023, 0, 0, 100); h dht.readHumidity(); //Đọc độ ẩm t dht.readTemperature(); //Đọc nhiệt độ lx LightSensor.GetLightIntensity();// Get Lux value
Blynk.virtualWrite(V8,"L:",lx,"S2:",doamdat2); lcd.setCursor(0, 0);// dinh vi tri lc lcd.print("TEMP:
HUM: "); lcd.setCursor(5, 0); lcd.print(t); lcd.setCursor(13,
0); lcd.print(h); lcd.setCursor(0, 1); lcd.print("LIGH: DAT: "); lcd.setCursor(5, 1); lcd.print(lx); lcd.setCursor(13,
1); lcd.print(doamdat1); lcd.setCursor(0, 1);
{ int pinValue = param.asInt(); // if(pinValue==1 && aut==0) digitalWrite(bom1, LOW); if(pinValue==0
{ int pinValue2 = param.asInt(); // if(pinValue2==1 && aut==0)
{digitalWrite(bom2, LOW);} if(pinValue2==0 && aut==0)
{ int pinValue3 = param.asInt(); // if(pinValue3==1 && aut==0)
{digitalWrite(den, LOW);} if(pinValue3==0 && aut==0)
{ int pinValue4 = param.asInt(); // if(pinValue4==1) aut=1; else aut=0;
{ pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(den, OUTPUT); pinMode(bom1, OUTPUT); pinMode(bom2, OUTPUT); digitalWrite(den, HIGH); aut=1; Serial.begin(9600); dht.begin(); // Khởi động cảm biến lcd.begin(16, 2);
LightSensor.SetAddress(Device_Address_H);//Address 0x5C LightSensor.SetMode(Continuous_H_resolution_Mode);
//Blynk.begin(auth, wifi, ssid, pass);
Blynk.begin(auth, wifi, ssid, pass, "blynk-cloud.com", 8442); timer.setInterval(5000L, myTimerEvent);
Blynk.run(); timer.run(); // Initiates BlynkTimer if(doamdat1P0 && aut==1)
Cài đặt phần mềm Arduino IDE
The Arduino IDE (Integrated Development Environment) is a software tool designed for developing, editing, compiling, debugging code, and uploading programs to various modules.
Arduino mà phần mềm cho phép, (ví dụ: ESP 8266, Arduino Uno…) bằng ngôn ngữ C hoặc C++ Một chương trình hoặc code viết cho Arduino được gọi là một “sketch”
* Cài đặt phần mềm Arduino IDE:
Truy cập trang web [http://arduino.cc/en/Main/Software](http://arduino.cc/en/Main/Software) để tải về chương trình Arduino IDE phù hợp với hệ điều hành của bạn, bao gồm Windows, Mac OS và Linux Đối với Windows, bạn có thể chọn giữa bản cài đặt (.exe) hoặc bản Zip; với bản Zip, chỉ cần giải nén và chạy mà không cần cài đặt Sau khi hoàn tất cài đặt, giao diện chương trình sẽ hiển thị như mong đợi.
Hình 4.3 Giao diện phần mềm Arduino IDE
- Để tiến hành cài đặt thư viện và chức năng nạp code cho IDE các bạn làm như sau: Vào File→ Preferences, vào textbox Additional Board Manager
URLs thêm đường link sau vào http://arduino.esp8266.com/stable/package_esp8266com_index.json - Click
Hình 4.4 Tiến hành cài đặt Arduino
- Tiếp theo vào Tool→Board→Boards Manager
To install the ESP8266 board, open the Boards Manager in your IDE and wait for the program to search Scroll down to find "ESP8266 by ESP8266 Community" and click on "Install." Allow the software to automatically download and install the necessary components.
Hình 4.6 Cài đặt Board Manager
Hình 4.7 Quá trình tải dữ liệu Boards Manager
Chọn Board để lập trình cho ESP8266:
Kết nối mudule USB-to-UART vào máy tính Vào Tool→Board→NodeMCU 1.0(ESP 12E Module), chọn cổng COM tương ứng với module USB-to-UART tương ứng
Hình4.8 Chọn cổng nạp cho ESP 8266
*Chức năng của các phím trong phần mềm Arduino IDE
Arduino Toolbar: có một số button và chức năng của chúng như sau:
Verify : kiểm tra code có lỗi hay không
Upload: nạp code đang soạn thảo vào Arduino
New, Open, Save:Tạo mới, mở và Save sketch
Serial Momitor : Dây là màn hình hiển thị dữ liệu từ Arduino gửi lên máy tính
Hình 4.10 IDE menu File menu
Trong file menu chúng ta quan tâm tới mục Examples đây là nơi chứa code mẫu ví dụ như: cách sử dụng các chân digital, analog, sensor
Hình 4.14 Sketch menu Trong Sketch menu :
Verify/ Compile : chức năng kiểm tra lỗi code
Show Sketch Folder : hiển thị nơi code được lưu
Add File : thêm vào một Tap code mới
Import Library : thêm thư viện cho IDE
Trong Tool menu ta quan tâm các mục Board và Serial Port
Mục Board : các bạn cần phải lựa chọn board mạch cho phù hợp với loại board mà bạn sử dụng nếu là Arduino ESP 8266 thì phải chọn như hình:
Nếu các bạn sử dụng loại board khác thì phải chọn đúng loại board mà mình đang có nếu sai thì code Upload vào chip sẽ bị lỗi
Cổng Serial là nơi để chọn cổng Com cho Arduino Sau khi cài đặt driver, máy tính sẽ hiển thị tên cổng Com của Arduino Chúng ta chỉ cần vào mục Serial Port và chọn đúng cổng Com để nạp code; nếu chọn sai, quá trình nạp code sẽ không thành công.
PHẦN MỀM BKYNK
Phần mềm Blynk là ứng dụng dành cho Android và iOS, cho phép người dùng tự tạo ứng dụng để kết nối và điều khiển các board Arduino, Raspberry và nhiều loại bo mạch khác.
- Blynk giúp bạn điều khiển thiết bị từ xa qua internet, thu thập dữ liệu của cảm biến, ảo hóa việc giao tiếp và thực hiện nhiều việc khác
Nguyên lý hoạt động của hệ thống Blynk là khi bạn nhấn nút điều khiển, lệnh sẽ được gửi đến server của Blynk Sau đó, server sẽ truyền lệnh đến module điều khiển, và khi module thực hiện lệnh, kết quả sẽ được gửi ngược lại theo quy trình: từ thiết bị về server, rồi từ server đến điện thoại của bạn.
Với Blynk, bạn không cần phải có kỹ năng lập trình ứng dụng Android; chỉ cần thực hiện thao tác kéo và thả các đối tượng trong giao diện, cùng với một vài thiết lập đơn giản là bạn đã có thể tạo ra ứng dụng của riêng mình.
Trước khi biết đến Blynk, việc điều khiển thiết bị qua Internet rất phức tạp, bao gồm mở port modem, đăng ký dịch vụ tên miền như DynDNS hoặc No-IP để cập nhật địa chỉ IP, viết mã cho phần cứng, và phát triển ứng dụng để biến phần cứng thành webserver Tất cả những công đoạn này có thể dễ dàng làm nản lòng nếu không hoàn thành một cách đầy đủ.
Với Blynk, bạn chỉ cần các module phần cứng được hỗ trợ và ứng dụng này để điều khiển thiết bị qua Internet Bạn có thể kết nối qua mạng LAN, Internet, thậm chí là 3G và 4G từ bất kỳ đâu Điều quan trọng còn lại là xác định mục đích sử dụng của thiết bị mà bạn tạo ra.
- Blynk hiện hỗ trợ tốt cho 2 hệ phần cứng là Arduino và Raspberry
- BƯỚC 1 : Tải ứng dụng BLYNK trên ANDROID hoặc trên IOS
- BƯỚC 2 : Lấy mã AUTH TOKEN
- Tạo tài khoản trên ứng dụng Blynk của máy chủ Việt Nam Phần Custom điền (IP: cloud.blynk.vn và Port: 8443)
Để bắt đầu, hãy tạo một dự án mới và chọn bảng kết nối cần sử dụng Sau khi dự án được tạo thành công, bạn cần sao chép hoặc gửi mã xác thực Auth Token qua email tài khoản của mình.
- Kiểm tra email trong hộp thư đến và tìm mã xác thực Auth Token
- BƯỚC 3 : Cài đặt thư viện BLYNK Việt Nam
- Tải thư viện Blynk.zip phía trên
- Giải nén thư viện Blynk.zip Bạn sẽ thấy thư mục chứa thư viện Blynk
- Sao chép thư mục Blynk vào thư viện libraries trên Arduino IDE (thư mục libraries trên Arduino IDE Nếu không thấy xin vào trên phần mềm Arduino
IDE: Chọn File -> Preferences (lúc này sẽ thấy đường dẫn chứa thư viện libraries )
- BƯỚC 4 : Dán mã xách thực AUTH TOKEN
Hình 4.18 Đăng nhập vào Blyn