Đồ án mô hình thú cưng tự động, nuôi trồng tự động, trang trại tự động kế hợp với hệ thống iot, mạch điều kiển esp8266
Một vài sản phẩm có trên thị trường
Máy Furrytail Pet Smart Feeder của xiaomi
Một chiếc máy cho thú cưng ăn, hoạt động một cách thông minh với ứng dụng điều khiển trực tiếp từ điện thoại.
Hinh 1 2 Máy Furrytail Pet Smart Feeder Thiết bị này sẽ bao gồm 2 thành phần là một ngăn lưu trữ đồ ăn và một cái máng để chứa đồ ăn mỗi khi thú cưng đến bữa.
Thiết bị đi kèm với ứng dụng điều khiển trên smartphone, cho phép người dùng lên lịch ăn cho thú cưng và điều chỉnh lượng thức ăn cho mỗi bữa Dù bạn không có ở nhà, thú cưng vẫn được đảm bảo 3 bữa ăn mỗi ngày cho đến khi hết đồ ăn Khi thức ăn cạn kiệt, đèn LED trên thiết bị sẽ nhấp nháy màu đỏ và gửi thông báo đến smartphone của bạn.
Khu vực chứa đồ ăn của Pet Smart Feeder do Xiaomi thiết kế với 6 khay đựng và cao su mềm, giúp thức ăn không bị tắc nghẽn khi hoạt động Nắp trên của ngăn đựng có vòng silicon để ngăn không khí lọt vào, bảo quản thức ăn tốt hơn Với dung tích lên tới 4L, ngăn đựng này có thể chứa tối đa 2kg thức ăn cho chó hoặc mèo Chất liệu ngăn đựng là nhựa ABS, trong khi bát ăn được làm từ INOX.
304 giúp giảm thiểu tối đa sự phát triển của vi khuẩn, tránh gây bệnh cho thú cưng.
Furrytail Pet Smart Feeder là thiết bị thông minh giúp người dùng theo dõi tình trạng sức khỏe thú cưng bằng cách tự động thông báo khi hết đồ ăn trong ngăn đựng Ngoài ra, thiết bị còn tích hợp mô-đun cân thông minh, cho phép theo dõi khối lượng thức ăn hàng ngày của thú cưng Tất cả thông số này sẽ được thống kê và đồng bộ hóa với ứng dụng trên smartphone, giúp người dùng dễ dàng quản lý chế độ ăn uống cho thú cưng của mình.
Yêu cầu thiết kế
Đối tượng và phạm vi nghiên cứu
- App điều khiển hệ thống.
- Nghiên cứu trong lĩnh vực lập trình nhúng trên ESP8266.
- Nghiên cứu phát triển trên server Blink.
- Xử lý dữ liệu của các cảm biến để hiển thị lên LCD 16x02.
Giới hạn của đề tài
- Đè tài chỉ tìm hiểu trong phạm vi như sau:
Tìm hiểu cách hoạt động của kit NODEMCU NUA V3
Tìm hiểu các đọc các cảm biến dht11, cảm biến mực nước và hiển thị lên LCD 16x02.
Theo dõi và điều khiển hệ thống trực tiếp, hỗ trợ điều khiển và theo dõi từ xa qua app blink
Cấu tạo
- Hệ thống đo giá trị cân nặng của thức ăn và tính toán lượng thức ăn vừa đủ cho pet.
- Quạt tản nhiệt và quạt sấy cho pet, phù hợp sự thích nghi của thú cưng ở các nước khác nhau trên thế giới.
- Khay chứa nước, và máy bơm nước.
Nguyên lý hoạt động
- Khi khay hết nước, nước tự động bơm vào khay đến mực nước đã được cài đặt sẵn.
- Khi thức ăn hết, máy tự động bóc tách dữ liệu của lượng thức ăn.
Thức ăn đạt được một trạng thái xác định thì ngưng cấp thức ăn.
- Hệ thống đọc nhiệt độ nếu nhiệt độ cao thì khởi động quạt sấy.
- App điều khiển chế độ tự động hoặc chế độ bằng tay tác động.
TÌM HIỂU THIẾT BỊ SỬ DỤNG TRNG ĐỀ TÀI
Vi điều kiển esp8266
2.1.1 Lịch sử phát triển esp8266
ESP8266 là một vi mạch Wi-Fi tiết kiệm chi phí, tích hợp khả năng vi điều khiển và ngăn xếp TCP/IP hoàn chỉnh, được sản xuất bởi công ty Espressif Systems tại Thượng Hải, Trung Quốc.
Vào tháng 8 năm 2014, chip ESP-01 do Ai-Thinker sản xuất lần đầu tiên thu hút sự chú ý của các nhà sản xuất phương Tây Mô-đun nhỏ này cho phép các bộ vi điều khiển kết nối với mạng Wi-Fi và thực hiện các kết nối TCP/IP đơn giản thông qua các lệnh kiểu Hayes Tuy nhiên, lúc bấy giờ, tài liệu tiếng Anh về chip và các lệnh của nó rất hạn chế Với mức giá thấp và thiết kế tối giản, mô-đun này đã thu hút nhiều tin tặc khám phá và dịch tài liệu tiếng Trung liên quan đến chip và phần mềm.
Hình 2.1 Sơ đồ chân vi điều khiển ESP8266
ESP8285 là một ESP8266 với 1 MiB flash tích hợp, cho phép xây dựng các thiết bị chip đơn có khả năng kết nối với Wi-Fi [4]
Các chip vi điều khiển này đã được thành công bởi dòng thiết bị ESP32, bao gồm cả ESP32-C3 tương thích với chân.
2.1.2 Cấu trúc vi điều kiển esp8266
Bộ xử lý: L106 lõi vi xử lý RISC 32-bit dựa trên Tiêu chuẩn kim cương
Tensilica Xtensa 106Micro chạy ở 80 MHz [5]:
- RAM bộ nhớ đệm lệnh 32 KiB
- RAM dữ liệu người dùng 80 KiB
- RAM dữ liệu hệ thống 16 KiB ETS
Đèn flash QSPI bên ngoài: hỗ trợ tối đa 16 MiB (thường bao gồm 512 KiB đến 4 MiB)
- Tích hợp công tắc TR, balun, LNA, bộ khuếch đại công suất và mạng kết hợp
- Xác thực WEP hoặc WPA / WPA2 hoặc các mạng mở
• Giao diện I²S với DMA (chia sẻ chân với GPIO)
• UART trên các chân chuyên dụng, cộng với một UART chỉ truyền có thể được bật trên GPIO2
• ADC 10 bit (ADC xấp xỉ kế tiếp)
- Cho mô-đun ESP-01 chung:
- GPIO 2, đầu vào / đầu ra mục đích chung số 2
- GPIO 0, Đầu vào / đầu ra mục đích chung Số 0
- RX, Nhận dữ liệu trong, cả GPIO3
- VCC, Điện áp (+3.3 V; có thể xử lý lên đến 3.6 V)
- CH_PD, Chip tắt nguồn
- TX, Truyền dữ liệu ra ngoài, cũng là GPIO1
2.1.3 Sơ lược dòng vi điều kiển esp8266
Mô-đun Ai-Thinker là sản phẩm đầu tiên của nhà sản xuất Ai-Thinker bên thứ ba, sử dụng chip ESP8266 và hiện đang là mô-đun phổ biến nhất trên thị trường, thường được gọi là "mô-đun ESP-xx" Để phát triển hệ thống, người dùng cần bổ sung các thành phần như bộ chuyển đổi TTL-to-USB nối tiếp (hay cầu nối USB-to-UART) và nguồn điện 3,3 volt bên ngoài.
Các nhà phát triển mới với ESP8266 nên khám phá các bo mạch phát triển Wi-Fi lớn hơn như NodeMCU, vì chúng tích hợp cầu nối USB-to-UART, đầu nối Micro-USB và bộ điều chỉnh nguồn 3,3 volt, giúp việc phát triển trở nên dễ dàng hơn.
Khi dự án hoàn tất, các thành phần không còn cần thiết, và mô-đun ESP-xx là lựa chọn tiết kiệm năng lượng với kích thước nhỏ gọn, phù hợp cho hoạt động sản xuất.
- Ứng dụng rộng rãi trong các hệ thống iot.
- Là bước đệm để con người hướng tới thế giới vạn vật.
- Điều kiển các thiết bị từ xa.
- Tích hợp anten PCB trace trên module
- Tiêu chuẩn wifi : 802.11b/g/n, với tần số 2.4GHz và hổ trợ bảo mật WPA/WPA2
- Khoảng cách giữa các chân 2mm
Mạch phát triển NodeMCU được phân phối rộng rãi trên thị trường, mang lại sự tiện lợi cho việc phát triển dự án Nó đi kèm với mạch nguyên lý đầy đủ và có tính mở về phần cứng Chip USB-TTL cho phép nạp phần mềm và dễ dàng điều khiển ESP8266 vào chế độ nạp mà không cần can thiệp phần cứng.
Hình 2.3 Sơ đồ chân ESP-12E
Cảm biến do mực nước uống
Module cảm biến mực nước giúp xác định mức nước còn lại trong thùng chứa, rất hữu ích trong việc giám sát mực nước Thiết bị này thường được sử dụng trong các ứng dụng tự động hóa, như bơm nước tự động.
Module cảm biến mực nước bao gồm nhiều đường cảm biến song song, giúp xác định mức nước trong thùng chứa Khi mức nước thay đổi, giá trị analog tại đầu ra của cảm biến cũng sẽ thay đổi, từ đó cho phép tính toán chính xác lượng nước còn lại trong thùng.
- Điện áp làm việc: DC3-5V
- Hoạt động hiện tại: ít hơn 20mA
- Phát Diện tích: 40mm x 16mm
- Quy trình sản xuất: FR4 hai mặt HASL
- Độ ẩm: 10% -90% không ngưng tụ
- Kích thước: 62mm x 20mm x 8mm
Cảm biến sử dụng để nhận diện mực nước, được áp dung rộng rãi trong thí nghiệm, dự án phát triển, công nghiệp, sinh hoạt đời sống,
Hình 2 4 Cảm biến mực nước
Cảm biến đo trọng lượng thức ăn
Loadcell là thiết bị cảm biến dùng để chuyển đổi lực hoặc trọng lượng thành tín hiệu điện.
Giá trị lực tác dụng tỉ lệ thuận với sự thay đổi điện trở cảm ứng trong cầu điện trở, dẫn đến tín hiệu điện áp tỉ lệ Công nghệ này mang lại ưu điểm lớn nhờ vào việc thiết kế sản phẩm phù hợp với từng ứng dụng cụ thể, dựa trên các tham số đã được xác định trước Các phần tử cảm ứng có kích thước và hình dạng đa dạng, đáp ứng yêu cầu của từng ứng dụng, với các dạng phổ biến như cảm biến tải dạng kéo, dạng uốn và dạng nén.
Hình 2 5: Cấu tạo của loadcell
Loadcell bao gồm hai bộ phận chính: đòn cân và mạch xử lý tín hiệu điện tử Đòn cân, hay còn gọi là “Strain Gauge Load Cell”, là cảm biến tải với hai thành phần chính: “Strain Gauge” và “Load” Strain Gauge là một điện trở đặc biệt nhỏ bằng móng tay, có điện trở thay đổi khi bị nén hoặc kéo dãn, và được dán lên thanh kim loại chịu tải.
Thanh kim loại trong cân điện tử có một đầu gắn cố định và đầu còn lại tự do, kết nối với đĩa cân Khi khối lượng được đặt lên đĩa, thanh kim loại bị uốn cong do trọng lượng, dẫn đến sự thay đổi điện trở của Strain Gauge Sự uốn cong này tỷ lệ thuận với khối lượng vật cân, cho phép đo lường chính xác thông qua biến đổi điện trở Thiết kế của thanh kim loại đảm bảo rằng bất kể vị trí của vật cân, độ uốn đều nhất quán, giúp đảm bảo độ chính xác trong quá trình cân.
Loadcell được cấu tạo bởi các điện trở strain gauges R1, R2, R3, R4, kết nối thành cầu điện trở Wheatstone Các điện trở này được dán lên bề mặt của loadcell Khi điện áp kích thích được cung cấp vào hai góc (1) và (4) của cầu Wheatstone, điện áp tín hiệu ra sẽ được đo giữa hai góc còn lại.
Tại trạng thái cân bằng của cầu điện trở Wheatstone, điện áp tín hiệu ra gần bằng không khi bốn điện trở được kết nối với giá trị phù hợp Điều này lý giải tại sao mạch này còn được gọi là mạch cầu cân bằng.
Khi tải trọng tác động lên thân loadcell, nó gây ra biến dạng (giãn hoặc nén) cho thân loadcell, dẫn đến sự thay đổi chiều dài và tiết diện của các sợi kim loại trên điện trở strain gauges Sự thay đổi này làm thay đổi giá trị của các điện trở strain gauges, từ đó ảnh hưởng đến điện áp đầu ra.
Cân điện tử đo lường mức độ uốn của thanh kim loại dưới tác động của trọng lực từ vật cân, do đó chỉ cung cấp giá trị trọng lượng Để xác định khối lượng, cần chia cho gia tốc trọng trường, mà gia tốc này không đồng nhất trên toàn cầu Vì vậy, nhà sản xuất thiết kế bộ hiệu chỉnh bên trong cân điện tử để điều chỉnh tại vị trí sử dụng.
Khoảng uốn cong của thanh kim loại khoảng 1/500 cm, đủ để Strain Gauge phát hiện và đo lường khối lượng trong một khoảng nhất định tùy theo loại cân điện tử Strain Gauge thường chỉ hoạt động hiệu quả trong một khoảng nhỏ, vì vậy cân điện tử yêu cầu khoảng phát hiện rộng và độ nhạy cao để đo khối lượng lớn và chính xác Hành động đặt hoặc thảy vật nặng lên bàn cân có thể gây biến dạng đột ngột cho thanh kim loại, dẫn đến sai số và hư hỏng Strain Gauge Do đó, không nên cân khối lượng vượt quá thang đo của cân.
2.3.3 Thông số kĩ thuật Độ chính xác: cho biết phần trăm chính xác trong phép đo Độ chính xác phụ thuộc tính chất phi tuyến tính, độ trễ, độ lặp
Công suất định mức: giá trị khối lượng lớn nhất mà Loadcell có thể đo được
Dải bù nhiệt độ là khoảng nhiệt độ mà đầu ra của Loadcell được điều chỉnh Nếu nhiệt độ nằm ngoài khoảng này, đầu ra sẽ không đảm bảo tuân thủ các thông số kỹ thuật đã được quy định.
Cấp bảo vệ của Loadcell được đánh giá theo thang đo IP, ví dụ như IP65, cho khả năng chống ẩm và bụi Điện áp làm việc của Loadcell thường dao động từ 5 đến 15 V, với giá trị tối đa và tối thiểu được xác định rõ Độ trễ trong hiển thị kết quả có thể gây ra sai số, thường được biểu thị dưới dạng phần trăm của tải trọng.
Trở kháng đầu vào của Loadcell được xác định qua S- và S+ khi chưa kết nối vào hệ thống hoặc ở chế độ không tải Điện trở cách điện thường được đo ở dòng DC 50V, phản ánh giá trị cách điện giữa lớp vỏ kim loại của Loadcell và thiết bị kết nối dòng điện.
Phá hủy cơ học: giá trị tải trọng mà Loadcell có thể bị phá vỡ hoặc biến dạng
Giá trị ra: kết quả đo được (đơn vị: mV)
Trở kháng đầu ra được xác định bằng cách đo trở kháng giữa Ex+ và Ex- khi load cell chưa được kết nối hoặc hoạt động trong chế độ không tải.
Quá tải an toàn: là công suất mà Loadcell có thể vượt quá (ví dụ: 125% công suất)
Hệ số tác động của nhiệt độ là đại lượng được đo khi Load cell hoạt động dưới tải, phản ánh sự thay đổi công suất của Load cell khi nhiệt độ thay đổi Ví dụ, hệ số 0.01%/10°C có nghĩa là nếu nhiệt độ tăng thêm 10°C, công suất đầy tải của Load cell sẽ tăng thêm 0.01%.
Hệ số tác động của nhiệt độ tại điểm 0: giống như trên nhưng đo ở chế độ không tải.
Quạt
Quạt tản nhiệt được dùng để tản nhiệt cho chip cầu bắc của mainboard máy tính, hoặc để tản nhiệt cho các IC khác trong quá trình sử dụng
- Số vòng quay : 7000 ± 10% (vòng/phút)
Cảm biến độ ẩm, nhiệt độ
Cảm biến DHT11 là một thiết bị đo độ ẩm và nhiệt độ phổ biến nhờ vào chi phí thấp và khả năng truyền dữ liệu dễ dàng qua giao tiếp 1 wire Với bộ tiền xử lý tín hiệu tích hợp, cảm biến này cung cấp dữ liệu chính xác mà không cần phải thực hiện các phép tính phức tạp.
Cảm biến DHT11 được thiết kế với hai điện cực và một chất giữ ẩm nằm giữa, cho phép đo độ ẩm hiệu quả Khi độ ẩm thay đổi, độ dẫn của chất nền cũng thay đổi, dẫn đến sự thay đổi điện trở giữa các điện cực Sự thay đổi này được IC xử lý, giúp vi điều khiển luôn sẵn sàng để thực hiện việc đọc độ ẩm.
Hình 2 9: Thành phần cấu tạo
Mặt khác, để đo nhiệt độ, các cảm biến này sử dụng cảm biến nhiệt độ NTC hoặc nhiệt điện trở.
Nhiệt điện trở là một loại điện trở có khả năng thay đổi giá trị điện trở theo nhiệt độ Các cảm biến này được sản xuất bằng cách thiêu kết các vật liệu bán dẫn như gốm hoặc polyme, giúp tạo ra sự thay đổi điện trở đáng kể chỉ với những biến đổi nhỏ về nhiệt độ.
“NTC” có nghĩa là hệ số nhiệt độ âm, có nghĩa là điện trở giảm khi nhiệt độ tăng.
Hình 2 10: Mối tương quan giữa trở và điện áp
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.
LCD 1602
Ngày nay, màn hình LCD (Liquid Crystal Display) được ứng dụng rộng rãi trong nhiều lĩnh vực của vi điều khiển Màn hình LCD nổi bật với khả năng hiển thị đa dạng các ký tự, bao gồm chữ, số và hình ảnh đồ họa Nó dễ dàng tích hợp vào các mạch ứng dụng thông qua nhiều giao thức giao tiếp khác nhau, tiêu tốn ít tài nguyên hệ thống và có giá thành phải chăng.
Hình dáng và kích thước:
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 là loại LCD thông dụng:
Hình 2 11: Hình dáng của LCD
Trong quá trình sản xuất màn hình LCD, nhà sản xuất đã tích hợp chip điều khiển HD44780 vào bên trong lớp vỏ, chỉ để lộ ra các chân giao tiếp cần thiết Các chân này được đánh số thứ tự và đặt tên rõ ràng như trong hình 2.
Hình 2 12: Sơ đồ chân của LCD
Chân Ký hiệu Mô tả
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.
Chân chọn thanh ghi (Register select) Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh
IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu
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.
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, dữ liệu trên bus sẽ được LCD tiếp nhận và chuyển vào thanh ghi nội bộ khi phát hiện xung chuyển từ cao sang thấp của tín hiệu chân E.
Trong chế độ đọc, dữ liệu sẽ được xuất ra từ LCD qua các chân DB0 đến DB7 khi phát hiện cạnh lên (low-to-high transition) tại chân E Dữ liệu này sẽ được giữ lại trên bus cho đến khi chân E chuyển xuống 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 1: chức năng từng chân của LCD
* Ghi chú : Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chân DBx.
Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua các chân DBx.
Động cơ 1 chiều DC
2.7.1 Giới thiệu động cơ 1 chiều Động cơ một chiều DC (DC là từ viết tắt của Direct Current Motors) là động cơ được điều khiển bằng dòng có hướng xác định hay nói cách khác thì đây là loại động cơ chạy bằng nguồn điện áp DC - điện áp 1 chiều.
2.7.2 Nguyên tắc hoạt động của động cơ điện 1 chiều
Động cơ điện một chiều thường bao gồm một hoặc nhiều cặp nam châm vĩnh cửu hoặc nam châm điện, với rotor được cấu tạo từ các cuộn dây quấn và kết nối với nguồn điện một chiều Một phần quan trọng của động cơ này là bộ phận chỉnh lưu, có nhiệm vụ duy trì dòng điện liên tục trong quá trình quay của rotor Bộ phận chỉnh lưu thường bao gồm hai thành phần chính: cổ góp và chổi than tiếp xúc với cổ góp.
Khi trục của động cơ điện một chiều bị kéo bởi một lực ngoài, động cơ sẽ hoạt động như một máy phát điện một chiều, tạo ra xuất điện động cảm ứng Trong chế độ bình thường, rotor quay sẽ phát ra điện áp gọi là sức phản điện động (counter-EMF), đối kháng với điện áp bên ngoài Sức điện động này tương tự như khi động cơ hoạt động như máy phát điện Do đó, điện áp trên động cơ bao gồm hai thành phần: sức phản điện động và điện áp do điện trở nội của các cuộn dây phản ứng Dòng điện chạy qua động cơ được tính theo công thức cụ thể.
Công suất cơ mà động cơ đưa ra được sẽ tính bằng:
2.7.3 Ưu, nhược điểm và ứng dụng của động cơ điện 1 chiều Ưu điểm của động cơ điện 1 chiều:
Ưu điểm nổi bật của động cơ điện 1 chiều là có moment mở máy lớn, do đó sẽ kéo được tải nặng khi khởi động.
Khả năng điều chỉnh tốc độ và quá tải tốt.
Bền bỉ, tuổi thọ lớn
Nhược điểm của động cơ điện 1 chiều:
Bộ phận cổ góp có cấu trúc phức tạp và giá thành cao, nhưng thường xuyên gặp sự cố trong quá trình vận hành Do đó, việc bảo dưỡng và sửa chữa cẩn thận, thường xuyên là rất cần thiết để đảm bảo hiệu suất hoạt động của thiết bị.
Tia lửa điện phát sinh trên cổ góp và chổi than có thể sẽ gây nguy hiểm, nhất là trong điều kiện môi trường dễ cháy nổ.
Động cơ điện 1 chiều có giá thành cao nhưng công suất lại không đáp ứng được yêu cầu Tuy nhiên, ứng dụng của loại động cơ này rất đa dạng, bao gồm trong tivi, máy công nghiệp, đài FM, ổ đĩa DC, máy in-photocopy, và đặc biệt là trong ngành giao thông vận tải, cũng như các thiết bị cần điều khiển tốc độ quay liên tục trong phạm vi lớn.
Các chuẩn giao tiếp
GPIO là giao diện giao tiếp giữa tín hiệu đầu vào và đầu ra, đóng vai trò quan trọng trong các vi điều khiển Tương tự như các vi điều khiển 8 bit như 8051 và PIC, nhưng vi điều khiển 32 bit như ARM có đến 16 chân I/O trên mỗi port, được đánh số từ 0 đến 15.
I2C là giao thức giao tiếp hiệu quả, cho phép truyền dữ liệu giữa bộ xử lý trung tâm và nhiều IC trên cùng một board mạch thông qua chỉ hai đường tín hiệu Với tính đơn giản và linh hoạt, I2C được sử dụng phổ biến trong việc kết nối vi điều khiển với cảm biến, thiết bị hiển thị, thiết bị IoT, và EEPROM.
Giao tiếp I2C bao gồm hai dây chính: Dữ liệu Serial (SDA) và Đồng hồ Serial (SCL) Dữ liệu được truyền qua dây SDA và được đồng bộ hóa với tín hiệu đồng hồ từ SCL, đảm bảo quá trình truyền tải thông tin chính xác và hiệu quả.
Hình 2 14 Cấu trúc cơ bản của một GPIO
Hình 2 15 Một khung truyền của giao tiếp I2C
Tất cả các thiết bị IC trong mạng I2C được kết nối qua hai đường SCL và SDA, hoạt động như các bộ lái cực máng hở (open drain) Điều này có nghĩa là bất kỳ thiết bị IC nào trong mạng I2C đều có khả năng kéo SDA và SCL xuống mức thấp, nhưng không thể đẩy 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
Trên bus I2C, nhiều thiết bị có thể kết nối mà không gây nhầm lẫn nhờ vào địa chỉ duy nhất của từng thiết bị, duy trì mối quan hệ chủ/tớ trong suốt quá trình kết nối Mỗi thiết bị có thể đảm nhận vai trò nhận dữ liệu hoặc vừa truyền và nhận, tùy thuộc vào việc nó là thiết bị chủ (master) hay tớ (slave).
Bus I2C là một chuẩn truyền dữ liệu có hướng, cho phép tốc độ truyền đạt 100Kbits/s ở chế độ chuẩn, 400Kbits/s ở chế độ nhanh và tối đa 3,4Mbits/s ở chế độ cao tốc.
Ứng dụng điêu khiển Blynk
Blynk là một ứng dụng di động cho phép người dùng tự tạo giao diện và điều khiển các thiết bị theo sở thích cá nhân.
Có ba thành phần chính trong nền tảng:
- Blynk App - cho phép tạo giao diện cho sản phẩm của bạn bằng cách kéo thả các widget khác nhau mà nhà cung cấp đã thiết kế sẵn.
Blynk Server đóng vai trò quan trọng trong việc xử lý dữ liệu giữa điện thoại, máy tính bảng và phần cứng Người dùng có thể lựa chọn sử dụng Blynk Cloud hoặc tự thiết lập máy chủ Blynk riêng Với mã nguồn mở, Blynk cho phép dễ dàng tích hợp vào các thiết bị, bao gồm cả việc sử dụng Raspberry Pi làm máy chủ.
Thư viện Blynk hỗ trợ hầu hết các nền tảng phần cứng phổ biến, cho phép giao tiếp hiệu quả với máy chủ và xử lý tất cả các lệnh đến và đi Blynk mang lại nhiều ưu điểm nổi bật cho người dùng.
Dễ dàng sử dụng, bạn chỉ cần tải ứng dụng từ cửa hàng của Android hoặc Apple, sau đó đăng ký tài khoản Chỉ với 5 phút, bạn có thể làm quen với giao diện Việc xây dựng giao diện điều khiển cá nhân trở nên đơn giản với thao tác kéo thả, mà không cần bất kỳ kiến thức lập trình nào.
Blynk sở hữu giao diện đẹp mắt và thân thiện với người dùng, cung cấp đầy đủ tính năng để đáp ứng hầu hết mọi nhu cầu trong việc quản lý nhà thông minh.
- Mã nguồn mở: Bạn có thể tự cài đặt một máy chủ Blynk trong nhà bạn và tự do thay đổi các cấu hình theo ý muốn.
THIẾT KẾ HỆ THỐNG
Yêu cầu công nghệ
Quy trình hoạt động của hệ thống chăm sóc thú cưng:
Điều khiển động cơ bơm nước cho khay nước, động cơ gạt thức ăn:
Đọc giá trị từ cảm biến mực nước giúp xác định khi nào máy bơm nước cần hoạt động Nếu mực nước đạt đến vị trí thiết lập ban đầu, máy bơm sẽ chạy cho đến khi mực nước đạt mức cao nhất.
Động cơ gạt thức ăn sẽ được thiết lập từ đầu hoặc người dùng cái đặt có cá mức độ chọn lựa mực thức ăn khác nhau.
DHT11 gửi giá trị đọc được từ môi trường xung quanh tới vi điều khiển esp8266 Nếu nhiệt độ của cảm biến lớn hơn 40 °c thì động cơ quạt quay
App điều khiển có khả năng xem được nhiệt độ hiện tại và cập nhập thời gian cho ăn của pet.
3.1.1 Sơ đồ khối hệ thống điều khiển:
Hình 3 1: Sơ đồ khối hệ thống
Chức năng của từng khối:
Khối xử lý trung tâm (ESP8266):
Khối điều khiển nhận tín hiệu từ cảm biến mực nước và cảm biến trọng lượng và xuất mức tín hiệu điều khiển động cơ.
Khối cảm biến mực nước:
Khối cảm biến được chứa trong môi trường 2 điện dung khác nhau Và gửi tín hiệu analog về vi điều khiển.
Khối cảm biến trọng lượng sử dụng đầu dò tải để tạo ra tín hiệu điện tỷ lệ thuận với lực tác dụng Tín hiệu này sau đó được khuếch đại bằng HX711, giúp cải thiện độ chính xác trong việc đo lường trọng lượng.
App hiển thị điện thoại:
Hiển thị nhiệt độ, thức ăn
Màn hình lcd hiển thị lượng thức ăn,nhiệt độ, độ ẩm.
Thiết kế phần cứng hệ thống
Hình 3 2 Sơ đồ khối điều khiển trung tâm
Khối điều khiển kết nối module cảm biến mực nước qua chân A0 để đọc giá trị ADC từ cảm biến, sau đó tính toán và hiển thị phần trăm lên màn hình Màn hình LCD giao tiếp I2C với ESP thông qua module I2C HD44780, kết nối với chân D3 (SCL) và D4 (SDA) của vi điều khiển Vi điều khiển đọc loadcell qua chân D5 và D6, kết nối với chân DT và SCK của mạch khuếch đại tín hiệu.
3.2.1 Esp8266 và cảm biến nhiệt độ dht11, cảm biến mực nước
Hình 3 1: Sơ đồ kết nối module cảm biến nhiệt độ với esp8266
Chân giao tiếp với esp8266 (D1)và dht11(A0) Mạch cắm các chân VCC, GND,A0 với module cảm biến nhiệt độ độ ẩm dht11
Cảm biến mực nước được kết nối với chân A0 của vi điều khiển, cho phép nhận giá trị ADC từ module cảm biến Vi điều khiển sẽ đọc tín hiệu từ chân A0, nơi đã kết nối với module cảm biến mực nước.
3.2.2 Giao tiếp Esp8266 và loadcell
Hình 3 4: Sơ đồ chân giao tiếp esp và loadcell
Sơ đồ kêt nối chân SCK(D6), DT(D5).
Kết nối giữa Load Cell và HX711 đã được trình bày trước đó Để thực hiện kết nối, các chân DT và SCK của Load Cell cần được kết nối với các chân D5 và D6 của ESP8266 tương ứng.
- White (Amplifier+, Signal+, or Output+).
Chân YLW là một đầu vào tùy chọn không kết nối với máy đo biến dạng, được thiết kế để nối đất và bảo vệ chống lại nhiễu điện từ (EMI) bên ngoài.
Mạch nguồn cung cấp cho toàn bộ hệ thống bao gồm các khối ESP8266, cảm biến mực nước, DHT11 và loadcell cần có dòng đủ lớn để hoạt động ổn định Vì vậy, tôi đã chọn mạch nguồn với thiết kế module giảm áp LM2596, là IC nguồn có khả năng tải dòng lên đến 3A, đảm bảo hiệu suất làm việc của hệ thống.
Nguồn vào của module sử dụng điện áp từ 4V-35V DC, cho ra nguồn ổn định từ 1V-30V với dòng tối đa lên tới 3A nhờ vào IC LM2596 Để sử dụng, bạn chỉ cần cấp nguồn vào hai chân +In và -In, sau đó lấy nguồn đầu ra từ hai chân +Out và -Out Để điều chỉnh điện áp ra, bạn có thể thay đổi độ lớn bằng cách điều chỉnh biến trở trên thân module.
Hình 3 7: Kết nối esp8266 với động cơ DC
Khi nhận tín hiệu từ cảm biến mực nước hoặc cảm biến cân nặng, vi điều khiển sẽ xử lý dữ liệu và điều khiển Relay thông qua opto cách ly quang.
Thiết bị chấp hành như máy bơm và quạt được kết nối với chân Header J1 và J2 Mạch hoạt động dựa trên nguyên lý phân áp; khi chân vi điều khiển xuất mức ‘0’, opto SDR-12VDC dẫn điện, kéo điện áp VCC xuống GND, dẫn đến việc không có điện áp cấp cho thiết bị Ngược lại, khi Arduino xuất mức ‘1’, opto SDR-12VDC không dẫn, cho phép dòng điện đi qua cực B của Transistor C1815, từ đó cung cấp VCC cho thiết bị chấp hành.
3.2.5 Sơ đồ mạch nguyên lý
Trong quá trình học tập, tôi đã tích lũy được nhiều kỹ năng vẽ mạch từ phần mềm Altium Designer, một ứng dụng thiết kế tích hợp do Altium Limited phát triển tại Canada.
Altium Designer là công cụ thiết kế điện tử toàn diện, bao gồm các tính năng như thiết kế bản vẽ nguyên lý, bản vẽ mạch in, mô phỏng mạch điện, phân tích tín hiệu, và môi trường lập trình VHDL Phần mềm này tích hợp mọi quy trình phát triển hệ thống trong một môi trường duy nhất, giúp quản lý hiệu quả toàn bộ quá trình Trong quá trình nghiên cứu, em đã phát triển mạch nguyên lý như sau:
Hình 3 8 Sơ đồ mạch nguyên lý
Hình 3 9 Sơ đồ mạch in
Hình 3 10 Sơ đồ mạch in 3D
Thiết kế phần mềm hệ thống
3.3.1 Chương trình chính Đầu tiên khi vừa khởi động hoặc reset, esp8266 sẽ tiến hành khởi tạo các chân đầu ra và đầu vào của mạch.
Các tín hiệu từ cảm biến mực nước, cảm biến nhiệt độ và cảm biến độ ẩm sẽ được gửi liên tục về vi điều khiển Vi điều khiển sẽ xử lý các tín hiệu này thông qua các hàm con, bao gồm hàm xử lý cảm biến mực nước và hàm xử lý cảm biến trọng lượng.
Lệnh từ các module, cảm biến
Thông báo trạng thái và hoạt động qua LCD
Xử lý tín hiệu và gửi tín hiệu điều khiển
Khởi tạo esp8266 Khởi tạo LCD
Thông báo hoàn tất khởi động ra LCD
Hình 3 11 Lưu đồ thuật toán chương trình chính
3.3.2 Khối cảm biến mực nước
Hình 3 12 Lưu đồ thuật toán đọc cảm biến mức nước
Hệ thống đọc giá trị ADC từ module mực nước sẽ chuyển đổi tín hiệu từ cảm biến mức nước thành phần trăm mực nước so với độ cao của khay Nếu giá trị phần trăm mực nước nhỏ hơn 30%, hệ thống sẽ tự động bơm nước và tắt sau 1 giây.
Cảm biến DHT11 đọc giá trị cảm biến từ môi trường kết quả trả về nếu nhiệt độ mà lớn hơn 40*c thì quạt khởi động để sưởi
Biến t và h là biến lưu giá trị thông tin nhiệt độ và độ ẩm nhận được từ dht11
Hình 3 13 Lưu đồ thuật toán nhận giá trị DHT11
3.3.4 Cảm biến load cell và esp8266
Biến i là giá trị nhận được từ hx7411.
Module khuếch đại HX7411 đọc giá trị từ load cell và khuếch đại tín hiệu, sau đó mã hóa thành các xung tín hiệu gửi vào chân data và chân sck ESP8266 sẽ xử lý dữ liệu để đưa ra chỉ số trọng lượng của thức ăn Nếu trọng lượng đọc được nhỏ hơn 10, relay sẽ kích hoạt động cơ đẩy thức ăn hoạt động.
Giao diện trên ứng dụng Blynk sử dụng trong đề tài:
Hình 3.15 Giao diện ứng dụng của hệ thống Ứng dụng điều khiển hệ thống gồm 6 nút điều khiển và 3 đường hiển thị.
Cột màu đỏ hiển thị nhiệt độ môi trường, cột màu xanh thể hiện độ ẩm và cột màu xanh lam chỉ mức nước còn lại trong khay đựng nước.
Để điều chỉnh chế độ tự động, hãy sử dụng thanh trượt T để thiết lập nhiệt độ bật quạt tự động và thanh trượt H để điều chỉnh mức nước thấp nhất cho việc tự động bật máy bơm.
Bài viết đề cập đến 4 nút điều khiển bên dưới thiết bị, cho phép người dùng chọn chế độ hoạt động và điều khiển trong chế độ tự động hoặc chế độ người dùng Nút chế độ giúp chuyển đổi giữa hai chế độ, trong khi ba nút còn lại được sử dụng để điều khiển từng thiết bị cụ thể được ghi trên nút.
Kết quả thực nghiệm
Hình 3 16 Mô hình sản phẩm thực tế
3.4.2 Ưu nhược điểm của hệ thống
- Sử dụng esp8266 là con chip thông dụng, giá rẻ.
- Có thể điều khiển thiết bị thông qua điện thoại thông minh dùng hệ điều hành Android và ios
- Các thiết bị đơn giản, dễ thay thế khi gặp sự cố.
- Đáp ứng tốt những nhu cầu tối thiểu là ăn với uống của thú cưng
- Hệ thống hoạt động còn chưa chính xác.
- Sai số đến từ loadcell rất lớn.
3.4.3 Hướng phát triển của đề tài
Hệ thống hiện tại hoạt động hiệu quả ở mức cơ bản nhưng có khả năng nâng cấp Để cải thiện, cần bổ sung các chức năng như vòng cổ đo nhiệt độ và kiểm tra sức khỏe định kỳ, nhằm mang lại những tiện ích thiết thực nhất cho cuộc sống hàng ngày.
Hệ thống có khả năng mở rộng để phục vụ các gia đình có nhu cầu khác nhau Bằng cách cải thiện tài nguyên xử lý và tối ưu hóa thuật toán, thời gian xử lý và phản ứng có thể được rút ngắn, qua đó nâng cao hiệu suất và độ tin cậy của hệ thống.
Cập nhập một số mạch chống nhiễu với từng cảm biến để đạt được hiệu suất cao.
Sau khi hoàn thành đồ án tốt nghiệp với đề tài “Thiết kế hệ thống điều khiển tự động để chăm sóc thú cưng”, tôi đã đạt được một số kết quả đáng ghi nhận Hệ thống này giúp tự động hóa quy trình chăm sóc thú cưng, nâng cao hiệu quả và tiện lợi cho người nuôi.
- Ứng dụng công nghệ loadcell đang được thương mại hóa rộng rãi so với cân thông thường.
- Sử dụng wifi để quản lí từ xa.
Phần cứng được thiết kế với cấu trúc đơn giản, sử dụng ít linh kiện để tối ưu hóa hiệu suất Kết nối chân ra được bố trí hợp lý, đáp ứng tốt nhu cầu phát triển cho các dự án trong tương lai.
Trong quá trình thực hiện đồ án, em đã áp dụng kiến thức đã học và tìm hiểu thêm từ các nguồn bên ngoài, từ đó nâng cao hiểu biết về môn học Em học được cách giải quyết bài toán và xử lý sự cố hiệu quả Những kiến thức này không chỉ giúp em hoàn thiện bản thân mà còn chuẩn bị tốt cho sự nghiệp sau này.
Thời gian thực hiện đồ án tuy ngắn, nhưng nhờ sự hỗ trợ tận tình và chỉ dẫn quý báu từ cô Trương Thị Bích Liên cùng các thầy cô Khoa Điện, quá trình này trở nên thuận lợi và hiệu quả hơn.
Tôi xin chân thành cảm ơn sự hỗ trợ của Tử trong việc hoàn thành đồ án tốt nghiệp Mặc dù đã nỗ lực, nhưng do kiến thức còn hạn chế, hệ thống vẫn chưa hoàn thiện và tối ưu về tính năng Tôi rất mong nhận được ý kiến đóng góp từ các thầy cô và bạn bè để có thể cải thiện và nâng cao chất lượng đề tài này.
Em xin chân thành cảm ơn!
CHƯƠNG 1: TÀI LIỆU THAM KHẢO
[1]https://www.espressif.com/sites/default/files/documentation/0a- esp8266ex_datasheet_en.pdf
[2]https://arduinokit.vn/cam-bien-anh-sang-quang-tro-arduino/
[3]https://arduinokit.vn/doc-cam-bien-nhiet-do-do-am-dht11-arduino/
[6] https://datasheetspdf.com/pdf/1418730/ITead/HC-05/1
The code snippet defines a set of variables for a project, including authentication credentials, Wi-Fi SSID, and password It initializes floating-point variables for temperature and humidity, along with integer values for various settings and measurements Additionally, it establishes a calibration factor for weight measurements, indicating a focus on precise data collection and analysis in the application.
LiquidCrystal_I2C lcd(0x27,16,2); DHT dht(DHTPIN, DHTTYPE);
{ set_t = param.asInt(); // du lieu do am tu blynk }
{ set_h = param.asInt(); // du lieu do am tu blynk } void dieu_khien(void)
{ float h = dht.readHumidity(); float t = dht.readTemperature(); for (int i=0;i99)
} scale.set_scale(calibration_factor); //Adjust to this calibration factor weight = scale.get_units(5);
Serial.print(scale.get_units(), 1);
Serial.println(scale.get_units(10), 1); scale.power_down(); // put the ADC in sleep mode delay(2000); scale.power_up();
{ float h = dht.readHumidity(); float t = dht.readTemperature(); for (int i=0;i99)
} scale.set_scale(calibration_factor); //Adjust to this calibration factor weight = scale.get_units(5);
Wire.begin(2,0); scale.set_scale(); scale.tare(); //Reset the scale to 0 long zero_factor = scale.read_average(); //Get a baseline reading pinMode(D2, OUTPUT); pinMode(D8, OUTPUT); pinMode(D7, OUTPUT);
To initialize the Blynk application, use the command `Blynk.begin(auth, ssid, pass);` Begin by starting the DHT sensor with `dht.begin();` and initializing the LCD display with `lcd.init();` followed by enabling the backlight using `lcd.backlight();` Display the text "NG THI MINH HUE" on the LCD for two seconds, then clear the screen Set the cursor to the top left corner and print "Thuc an:", and then position the cursor to the second row to display "T:" and "H:" at specified locations.
Serial.println("Before setting up the scale:");
Serial.println(scale.read()); // print a raw reading from the ADC
Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC
Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet)
Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided
To set the scale parameter, use the command `scale.set_scale(2280.f)`, where the value is determined through calibration with known weights; refer to the README for further details Additionally, the command `scale.tare()` is utilized to reset the scale to zero.
Serial.println("After setting up the scale:");
Serial.println(scale.read()); // print a raw reading from the ADC
Serial.println(scale.read_average(20)); // print the average of 20 readings from the ADC
Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare()
Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight, divided
// by the SCALE parameter set with set_scale
Blynk.run(); if(V_0==0){tu_dong();} if(V_0==1&&V_1==0&&V_2==0&&V_8==0)
{dieu_khien();digitalWrite(BOM,0);Blynk.virtualWrite(V1,0);digitalWrite(QUA
T, 0);Blynk.virtualWrite(V2,0);digitalWrite(TA, 0);Blynk.virtualWrite(V8,0);} if(V_0==1&&V_1==0&&V_2==0&&V_8==1)
{dieu_khien();digitalWrite(BOM,0);Blynk.virtualWrite(V1,0);digitalWrite(QUA
T, 0);Blynk.virtualWrite(V2,0);digitalWrite(TA, 1);Blynk.virtualWrite(V8,1);} if(V_0==1&&V_1==0&&V_2==1&&V_8==0)
{dieu_khien();digitalWrite(BOM,0);Blynk.virtualWrite(V1,0);digitalWrite(QUA
T, 1);Blynk.virtualWrite(V2,1);digitalWrite(TA, 0);Blynk.virtualWrite(V8,0);} if(V_0==1&&V_1==0&&V_2==1&&V_8==1)
{dieu_khien();digitalWrite(BOM,0);Blynk.virtualWrite(V1,0);digitalWrite(QUA
T, 1);Blynk.virtualWrite(V2,1);digitalWrite(TA, 1);Blynk.virtualWrite(V8,1);} if(V_0==1&&V_1==1&&V_2==0&&V_8==0)
{dieu_khien();digitalWrite(BOM,1);Blynk.virtualWrite(V1,1);digitalWrite(QUA
T, 0);Blynk.virtualWrite(V2,0);digitalWrite(TA, 0);Blynk.virtualWrite(V8,0);} if(V_0==1&&V_1==1&&V_2==0&&V_8==1)
{dieu_khien();digitalWrite(BOM,1);Blynk.virtualWrite(V1,1);digitalWrite(QUA
T, 0);Blynk.virtualWrite(V2,0);digitalWrite(TA, 1);Blynk.virtualWrite(V8,1);} if(V_0==1&&V_1==1&&V_2==1&&V_8==0)
{dieu_khien();digitalWrite(BOM,1);Blynk.virtualWrite(V1,1);digitalWrite(QUA
T, 1);Blynk.virtualWrite(V2,1);digitalWrite(TA, 0);Blynk.virtualWrite(V8,0);} if(V_0==1&&V_1==1&&V_2==1&&V_8==1)
{dieu_khien();digitalWrite(BOM,1);Blynk.virtualWrite(V1,1);digitalWrite(QUA
T, 1);Blynk.virtualWrite(V2,1);digitalWrite(TA, 1);Blynk.virtualWrite(V8,1);}
//digitalWrite(TA,1);//delay(1000);digitalWrite(TA,0);delay(1000);