Xã hội ngày càng phát triển, công nghệ kỹ thuật với sự tiến bộ thần tốc đã mangđến nhiều tiện ích cho con người, từ công việc văn phòng, xây dựng, nội trợ cho đếnnhững công việc về nuôi trồng nông lâm thủy – hải sản. Đặc biệt là trong lĩnh vựcnông nghiệp. Công nghệ tin học đã giúp con người tiết kiệm sức lao động, thuận lợitrong chăm sóc và đạt năng suất cao trong thu hoạch.Công nghệ “Nhà trồng thông minh” đã tạo ra các sản phẩm trái mùa, giúp ngườidân có thực vật ăn quanh năm dù không phải chính vụ, tạo ra các sản phẩm nông nghiệptại những vùng có điều kiện khắc nghiệt mà cây trồng khó thể sinh tồn. Trong đó, hệthống tưới tiêu tự động là một phần quan trọng không thể thiếu trong hệ thống “Nôngnghiệp thông minh” nói chung và “Nhà trồng thông minh” nói riêng.Hệ thống tưới tự động được xây dựng trên nền tảng Arrduino và Arduino IDEđã đảm bảo được hầu hết các chức năng cần thiết cho hệ thống, bên cạnh đó là giá thànhrẻ và dễ dàng sử dụng. Nó đáp ứng được tiêu chí “Ngon Bổ Rẻ” của người sủ dụng.Dưới đây là bài báo cáo về việc xây dựng một hệ thống tưới nước tự động trongnhà trồng thông minh với đầy đủ các điều kiện về độ ẩm đất, độ ẩm và nhiệt độ trongkhông khí và ánh sáng trong môi trường trồng cây sử dụng các thiết bị phần cứng củaArduino và phần mềm lập trình trên nền tảng Arduino IDE. Nhóm đã xây dựng sảnphẩm dựa trên các kiến thức đã học được qua môn “Cơ Sở Lập Trình Nhúng”.
ĐẠI HỌC CƠNG NGHIỆP HÀ NỘI Khoa Cơng nghệ thơng tin -o0o - Bài báo cáo mơn: Cơ sở lập trình nhúng Đề tài: Xây dựng hệ thống tưới tự động Giáo viên: Phạm Văn Hà Nhóm: Lớp: ĐH KTPM3 - K10 Hà Nội, 2018 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN Bài báo cáo mơn: Cơ sở lập trình nhúng Đề tài: Xây dựng hệ thống tưới tự động Giáo viên: Phạm Văn Hà Sinh viên thực hiện: Nguyễn Thành Nam La Ngân Quang Bùi Hữu Quý Lớp: ĐH KTPM3 – K Hà Nội, 2018 MỤC LỤC Lời nói đầu Chương I: Giới thiệu chung I Lập trình nhúng II Khái quát nhà trồng thông minh III Thực tiễn áp dụng Arduino Chương II: Arduino lập trình Arduino I Giới thiệu chung Arduino II Làm quen với KIT ESP8266 Wemos D1 R2 15 Chương III: Thiết kế, lập trình cài đặt mạch 18 cho hệ thông tưới nước tự động 18 I Thiết kế phần cứng 18 II Phần mềm chương trình: 24 Kết luận 38 Lời nói đầu Xã hội ngày phát triển, công nghệ kỹ thuật với tiến thần tốc mang đến nhiều tiện ích cho người, từ cơng việc văn phòng, xây dựng, nội trợ công việc nuôi trồng nông - lâm - thủy – hải sản Đặc biệt lĩnh vực nông nghiệp Công nghệ tin học giúp người tiết kiệm sức lao động, thuận lợi chăm sóc đạt suất cao thu hoạch Công nghệ “Nhà trồng thông minh” tạo sản phẩm trái mùa, giúp người dân có thực vật ăn quanh năm dù khơng phải vụ, tạo sản phẩm nông nghiệp vùng có điều kiện khắc nghiệt mà trồng khó thể sinh tồn Trong đó, hệ thống tưới tiêu tự động phần quan trọng thiếu hệ thống “Nơng nghiệp thơng minh” nói chung “Nhà trồng thơng minh” nói riêng Hệ thống tưới tự động xây dựng tảng Arrduino Arduino IDE đảm bảo hầu hết chức cần thiết cho hệ thống, bên cạnh giá thành rẻ dễ dàng sử dụng Nó đáp ứng tiêu chí “Ngon - Bổ - Rẻ” người sủ dụng Dưới báo cáo việc xây dựng hệ thống tưới nước tự động nhà trồng thông minh với đầy đủ điều kiện độ ẩm đất, độ ẩm nhiệt độ không khí ánh sáng mơi trường trồng sử dụng thiết bị phần cứng Arduino phần mềm lập trình tảng Arduino IDE Nhóm xây dựng sản phẩm dựa kiến thức học qua mơn “Cơ Sở Lập Trình Nhúng” Nhóm sinh viên thực hiện! Chương I: Giới thiệu chung I Lập trình nhúng Hệ thống nhúng gì? Hệ thống nhúng (Embedded system) thuật ngữ để hệ thống có khả tự trị nhúng vào môi trường hay hệ thống mẹ Đó hệ thống tích hợp phần cứng phần phềm để thực một nhóm chức chuyên biệt cụ thể Hệ thống nhúng (HTN) thường thiết kế để thực chức chun biệt Khác với máy tính đa chức năng, chẳng hạn máy tính cá nhân, hệ thống nhúng thực một vài chức định, thường kèm với yêu cầu cụ thể bao gồm số thiết bị máy móc phần cứng chun dụng mà ta khơng tìm thấy máy tính đa nói chung Vì hệ thống xây dựng cho số nhiệm vụ định nên nhà thiết kế tối ưu hóa nhằm giảm thiểu kích thước chi phí sản xuất Các hệ thống nhúng thường sản xuất hàng loạt với số lượng lớn HTN đa dạng, phong phú chủng loại Đó thiết bị cầm tay nhỏ gọn đồng hồ kĩ thuật số máy chơi nhạc MP3, sản phẩm lớn đèn giao thông, kiểm soát nhà máy hệ thống kiểm soát máy lượng hạt nhân Xét độ phức tạp, hệ thống nhúng đơn giản với vi điều khiển phức tạp với nhiều đơn vị, thiết bị ngoại vi mạng lưới nằm gọn lớp vỏ máy lớn Các thiết bị PDA máy tính cầm tay có số đặc điểm tương tự với hệ thống nhúng hệ điều hành vi xử lý điều khiển chúng thiết bị hệ thống nhúng thật chúng thiết bị đa năng, cho phép sử dụng nhiều ứng dụng kết nối đến nhiều thiết bị ngoại vi Các đặc điểm hệ thống nhúng Hệ thống nhúng thường có số đặc điểm chung sau: • Các hệ thống nhúng thiết kế để thực số nhiệm vụ chun dụng khơng phải đóng vai trò hệ thống máy tính đa chức Một số hệ thống đòi hỏi ràng buộc tính hoạt động thời gian thực để đảm bảo độ an tồn tính ứng dụng Một số hệ thống khơng đòi hỏi ràng buộc chặt chẽ, cho phép đơn giản hóa hệ thống phần cứng để giảm thiểu chi phí sản xuất • Một hệ thống nhúng thường khơng phải khối riêng biệt mà hệ thống phức tạp nằm thiết bị mà điều khiển • Phần mềm viết cho hệ thống nhúng gọi firmwarevà lưu trữ chip nhớ đọc (ROM - Read Only Memory) nhớ flash ổ đĩa Phần mềm thường chạy với số tài ngun phần cứng hạn chế: khơng có bàn phím, hình có với kích thước nhỏ, nhớ hạn chế Một số ví dụ hệ thống nhúng Quanh ta có nhiều sản phẩm nhúng như: lò vi sóng, nồi cơm điện, điều hồ, điện thoại di động, ôtô, máy bay, tàu thuỷ, đầu đo cấu chấp hành thơng minh… Ta thấy hệ thống nhúng có mặt lúc nơi sống Các máy trả lời tự động, thiết bị y tế, máy in, hệ thống dẫn đường khơng lưu có tích hợp hệ thống nhúng Hình 1: Cấu trúc bên Router Router ví dụ hệ thống nhúng Các hệ thống nhúng mơ hình Router bao gồm: Microprocessor(4), RAM(6), vàFlash memory(7) Các thiết bị tàu vũ trụ tích hợp nhiều hệ thống nhúng Hình 2: Tàu thăm dò Sao Hỏa II Khái quát nhà trồng thông minh Hệ thống làm nhà trồng thông minh ngày phổ biến vài năm trở lại Việt Nam Lắp đặt sử dụng hệ thống nhà trồng thông minh giúp sản phẩm nông nghiệp rau, củ, hoa, quả… chăm sóc đầy đủ góp phần tăng suất cho chất lượng Nhà trồng thông minh trồng rau giúp cho nguồn rau tránh bị loại sâu bệnh thời tiết xấu giúp xoay vụ nhanh Việt Nam nước mạnh loại nơng sản nơng nghiệp, nhiều năm qua sản phẩm nông nghiệp Việt Nam nhiều thị trường giới với sản phẩm chất lượng Điều thúc dục bà nông dân sử dụng công nghệ tăng suất chất lượng sản phẩm kiểm tra nghiêm ngặt vào nước bạn Hình 3: Hình ảnh nhà trồng thơng minh III Thực tiễn áp dụng Arduino Ứng dụng Arduino mơ hình hệ thống tự động sử dụng cảm biến độ ẩm nhiệt độ kết nối với Arduino điều khiển động tạo hệ thống tưới tiêu tự động Tất việc tự động diễn trình cài đặt sẵn qua cảm biến để điều tiết việc tưới hợp lí thời tiết Từ ví dụ thực tiễn với giúp đỡ giáo viên hướng dẫn, nhóm lựa chọn phát triển đề tài theo hướng sử dụng kid Arduino để thực đề tài Ứng dụng đơn giản qua thao tác nút bấm cài đặt thời gian hẹn để tưới làm việc thông minh qua cảm biến Trước hết cảm biến nhiệt độ độ ẩm áp dụng với khí hậu thời tiết nhiệt đới ẩm gió mùa với mùa rõ rệt nên cảm biến nhiệt độ độ ẩm có tầm quan trọng khâu tự động Đo mức nhiệt độ cần thiết đáp ứng cho trồng ưu tiên hàng đầu ứng dụng Hệ thống đảm bảo mảng thời gian cài đặt, đảm bảo nhiệt độ thay đổi qua mùa, độ ẩm theo khí hậu tất kết hợp tạo thành hệ thống thông minh đáp ứng yêu cầu người trồng Vì việc tưới tiêu trồng với người cơng nghệ thay hồn toàn cho sức lao động người Một hệ thống trồng thông minh đáp ứng thời tiết kết hợp việc cài đặt thời gian tưới phù hợp trồng tất thiết bị vi điều khiển Arduino Phù hợp với người bận công việc, phù hợp với việc sản xuất nông nghiệp cao đưa chất lượng trồng tốt Hình 4: Hệ thống tưới tự động Chương II: Arduino lập trình Arduino I Giới thiệu chung Arduino Giới thiệu Arduino Arduino IDE Arduino board mạch vi xử lý, nhằm xây dựng ứng dụng tương tác với với môi trường thuận lợi Phần cứng bao gồm board mạch nguồn mở thiết kế tảng vi xử lý AVR Atmel 8bit, ARM Atmel 32bit Những Model trang bị gồm cổng giao tiếp USB, chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác Được giới thiệu vào năm 2005, Những nhà thiết kế Arduino cố gắng mang đến phương thức dễ dàng, không tốn cho người yêu thích, sinh viên giới chuyên nghiệp để tạo thiết bị có khả tương tác với môi trường thông qua cảm biến cấu chấp hành Những ví dụ phổ biến cho người yêu thích bắt đầu bao gồm robot đơn giản, điều khiển nhiệt độ phát chuyển động Đi với mơi trường phát triển tích hợp (IDE) chạy máy tính cá nhân thơng thường cho phép người dùng viết chương trình cho Aduino ngôn ngữ C C++ Giá board Arduino dao động xung quanh €20 - $27, "làm giả" giá giảm xuống thấp $9 Các board Arduino đặt hàng dạng lắp sẵn dạng kit tự-làm-lấy Thông tin thiết kế phần cứng cung cấp công khai để muốn tự làm mạch Arduino tay tự thực (mã nguồn mở) Người ta ước tính khoảng năm 2011 có 300 ngàn mạch Arduino thức sản xuất thương mại, vào năm 2013 có khoảng 700 ngàn mạch thức đưa tới tay người dùng Phần cứng Một mạch Arduino Uno thức với mô tả cổng I/O Một board Arduino đời đầu gồm cổng giao tiếp RS-232 (góc phía trên-bên trái) chip vi xử lý Atmel ATmega8 (màu đen, nằm góc phải-phía dưới); 14 chân I/O số nằm phía chân analog đầu vào phía đáy Hình 5: Phần cứng Arduino Một mạch Arduino bao gồm vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình mở rộng với mạch khác Một khía cạnh quan trọng Arduino kết nối tiêu chuẩn nó, cho phép người dùng kết nối với CPU board với module thêm vào dễ dàng chuyển đổi, gọi shield Vài shield truyền thông với board Arduino trực tiếp thông qua chân khách nhau, nhiều shield định địa thơng qua serial bus I²C-nhiều shield xếp chồng sử dụng dạng song song Arduino thức thường sử dụng dòng chip megaAVR, đặc biệt ATmega8, ATmega168, ATmega328, ATmega1280, ATmega2560 Một vài vi xử lý khác sử dụng mạch Aquino tương thích Hầu hết mạch gồm điều chỉnh tuyến tính 5V thạch anh dao động 16 MHz (hoặc cộng hưởng ceramic vài biến thể), vài thiết kế LilyPad chạy MHz bỏ qua điều chỉnh điện áp onboard hạn chế kích cỡ thiết bị Một vi điều khiển Arduino lập trình sẵn với boot loader cho phép đơn giản upload chương trình vào nhớ flash onchip, so với thiết bị khác thường phải cần nạp bên Điều giúp cho việc sử dụng Arduino trực tiếp cách cho phép sử dụng máy tính gốc nạp chương trình Theo nguyên tắc, sử dụng ngăn xếp phần mềm Arduino, tất board lập trình thơng qua kết nối RS-232, cách thức thực lại tùy thuộc vào đời phần cứng Các board Serial Arduino có chứa mạch chuyển đổi RS232 sang TTL Các board Arduino lập trình thơng qua cổng USB, thực thông qua chip chuyển đổi USB-to-serial FTDI FT232 Vài biến thể, Arduino Mini Boarduino không thức, sử dụng board adapter cáp nối USB-to-serial tháo rời được, Bluetooth phương thức khác (Khi sử dụng cơng cụ lập trình vi điều khiển truyền thống thay ArduinoIDE, cơng cụ lập trình AVR ISP tiêu chuẩn sử dụng.) 10 Hình 20: Giản đồ bảng mạch II Phần mềm chương trình: Phần mềm Arduino Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính thơng dụng mang lại nhiều lợi cho Arduino, nhiên sức mạnh thực Arduino nằm phần mềm Môi trường lập trình đơn giản dễ sử dụng, ngơn ngữ lập trình Wiring dễ hiểu dựa tảng C/C++ quen thuộc với người làm kỹ thuật Và quan trọng số lượng thư viện code viết sẵn chia sẻ cộng đồng nguồn mở lớn Giao diện phần mềm Arduino IDE có nhiều phần, nhiên ý đến phần quan trọng nêu hình Chức phần sau: 24 Hình 21: Giao diện Arduino • Nút kiểm tra chương trình Dùng để kiểm tra xem chương trình viết có lỗi khơng Nếu chương trình bị lỗi phần mềm Arduino IDE hiển thị thông tin lỗi vùng thơng báo thơng tin • Nút nạp chương trình xuống board Arduino Dùng để nạp chương trình viết xuống mạch Arduino Trong trình nạp, chương trình kiểm tra lỗi trước sau thực nạp xuống mạch Arduino • Hiển thị hình giao tiếp với máy tính Khi nhấp vào biểu tượng kính lúp phần giao tiếp với máy tính mở Phần hiển thị thông số mà người dùng muốn đưa lên hình Muốn đưa lên hình phải có lệnh Serial.print() đưa thơng số cần hiển thị lên hình • Vùng lập trình Vùng để người lập trình thực việc lập trình cho chương trình • Vùng thơng báo thơng tin 25 Có chức thơng báo thơng tin lỗi chương trình vấn đề liên quan đến chương trình lập Sử dụng vài menu thơng dụng Có vài menu phần mềm IDE, nhiên thông dụng menu File, ngồi tính mở file hay lưu file, phần menu có mục đáng ý Example Phần Example (ví dụ) đưa ví dụ sẵn để người lập trình tham khảo, giảm bớt thời gian lập trình Hình bên thể việc chọn ví dụ cho led chớp tắt (blink) để nạp cho mạch Arduino Ví dụ led chớp tắt thường dùng để kiểm tra bo mua Hình 22: Một số menu thông dụng Một menu thường sử dụng khác menu Tools Khi kết nối bo Arduino với máy tính ta click vào Tools->board để chọn loại board sử dụng Phần mềm chọn sẵn kiểu bo bo Arduino Uno, người dùng dùng kiểu bo khác chọn kiểu bo dùng 26 Hình 23: Menu tool Bên cạnh việc chọn bo phần quan trọng chọn cổng COM Hình bên minh họa cho việc chọn cổng COM Khi lần đầu gắn mạch Arduino vào máy tính, người sử dụng cần nhấn chọn cổng COM cách vào Tools -> Serial Port (một số phiên dùng từ Port) sau nhấn chọn cổng COM, ví dụ COM5 Những lần sau đưa board Arduino vào máy tính khơng cần chọn cổng COM, đưa bo Arduino khác vào máy cần phải chọn lại cổng COM, quy trình thực tương tự Hình 24: Menu tool 27 Mơi trường lập trình Arduino IDE chạy ba tảng phổ biến Windows, Macintosh OSX Linux Do có tính chất nguồn mở nên mơi trường lập trình hồn tồn miễn phí mở rộng thêm người dùng có kinh nghiệm Ngơn ngữ lập trình mở rộng thông qua thư viện C++ Và ngơn ngữ lập trình dựa tảng ngơn ngữ C AVR nên người dùng hồn tồn nhúng thêm code viết AVR C vào chương trình muốn Sử dung Google Assistant IFTTT (if this then that) để điều khiển âm thanh: Tóm tắt nguyên lý hoạt động: Khi nói, ứng dụng Google Assistant nhận diện dọng nói giống giọng nói ta tạo trigger IFTTT, gửi giá trị ta muốn đặt vào server blynk, server blynk đặt gán giá trị vào wemos relay mở , lúc đèn sáng Hình 25: Nguyên lý hoạt động GG Assistant & IFTTT 28 Minh họa: Cài đặt câu nói vào Google Assistant IFTTT: Hình 26: IFTTT 29 Cài đặt liệu set giá trị trả wemos: Hình 27: Dữ liệu trả Wemos Sản phẩm Source Code sản phẩm viết phần mềm Arduino: // Thư viện #include #include #include #include "DHTesp.h" // Biến cố định //rgb_lcd lcd; // hình lcd DHTesp dht; // độ ẩm-nhiệt độ khơng khí #define CB_NHIETDO_DOAM D0 // cảm biến nhiệt độ, độ ẩm khơng khí #define CB_DOAM_DAT A0 // cảm biến độ ẩm đất #define CB_ANHSANG D6 // cảm biến ánh sáng #define RELAY_MAYBOM D5 // relay điều chỉnh máy bơm 30 #define RELAY_BONGDEN D3 // relay điều chỉnh bóng đèn #define LED_MAYBOM D1 // đèn báo hiệu máy bơm bật-tắt #define LED_BONGDEN D2 // đèn báo hiệu bóng điện bật-tắt const int ON = 1; const int OFF = 0; // Cài đặt mạng kết nối Blynk char auth[] = "56ae3e7fbdb248279a62aea5fd8f7dab"; char ssid[] = "Hỏi nhà bên"; char pass[] = "Lamgicomabao"; // Đèn WidgetLED led_TuoiNuoc(V4); WidgetLED led_Den(V5); WidgetLED led_PhunSuong(V6); // biến cục float humidity = 0, temperature = 0; int doAmDat = 100, light = 0, atRun = 0, dem = 1; long duration = 0, startTime; // Hàm đo nhiệt độ-độ ẩm void readHumidityTemperature() { humidity = dht.getHumidity(); // độ ẩm temperature = dht.getTemperature(); // nhiệt độ } // Hàm đo độ ẩm đất int readSoilMoisture() { int value = analogRead(CB_DOAM_DAT); 31 int percent = map(value, 1, 1024, 0, 100); // đổi sang % return percent; } // Hàm đo ánh sáng int readLight() { int valueLight = digitalRead(CB_ANHSANG); return valueLight; } // Đọc giá trị đo void ReadValue() { readHumidityTemperature(); doAmDat = readSoilMoisture(); light = readLight(); } // Hiển thị lên Blynk void DisplayBlynk() { if (!isnan(humidity) && !isnan(temperature)) { // hiển thị nhiệt độ-độ ẩm Blynk.virtualWrite(V0, temperature); Blynk.virtualWrite(V1, humidity); Serial.printf("NhDo:%.0f|DoAm:%.0f", temperature, humidity); // hiển thị độ ẩm đất Blynk.virtualWrite(V2, doAmDat); Serial.printf("Dat:%d|", doAmDat); // hiển thị ánh sáng Blynk.virtualWrite(V3, light); 32 Serial.printf("As:%d\n", light); } } // Xử lý tự động void AutoRun() { // Xử lý độ ẩm đất 60->70: bật - tắt máy bơm tưới nước if (doAmDat < 60) { digitalWrite(RELAY_MAYBOM, ON); digitalWrite(LED_MAYBOM, ON); led_TuoiNuoc.on(); Serial.println("BAT tuoi nuoc"); } if (doAmDat > 70) { digitalWrite(RELAY_MAYBOM, OFF); digitalWrite(LED_MAYBOM, OFF); led_TuoiNuoc.off(); Serial.println("TAT tuoi nuoc"); } // Xử lý độ ẩm khơng khí 55->65: bật - tắt máy bơm phun sương if (!isnan(humidity)) { if (humidity < 55) { digitalWrite(RELAY_MAYBOM, ON); digitalWrite(LED_MAYBOM, ON); led_PhunSuong.on(); Serial.println("BAT phun suong"); } if (humidity > 65) { 33 digitalWrite(RELAY_MAYBOM, OFF); digitalWrite(LED_MAYBOM, OFF); led_PhunSuong.off(); Serial.println("TAT phun suong"); } } // Nhiệt độ khơng khí từ 15 -> 25 độ: Sử dụng điều hòa cơng nghiệp cài 20 độ C // Ánh sáng cho 10h/ngày // Demo: 2p if (dem == && light == 1) { startTime = millis(); dem = 0; } else if (dem == && light == 0) { duration = millis() - startTime; Serial.println(duration); dem = 1; } if (duration != 0) { if (duration