THIẾT kế hệ THỐNG tưới nước tự ĐỘNG

66 1.1K 8
THIẾT kế hệ THỐNG tưới nước tự ĐỘNG

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Đề tài đƣợc thực hiện dựa trên những yêu cầu thực tế với mục đích giảm nhân công lạo động, hạ chi phi sản xuất, đồng thời tiết kiệm thời gian và nguồn nƣớc hiện đang cạn kiệt dần. Hệ Thống gồm ba khối chính: Khối cảm biến độ ẩm đất có nhiệm vụ đo độ ẩm của đất và gửi tới khối sever để xử lý, khối cảm biến sử dụng nguồn pin đƣợc sạc bằng năng lƣợng mặt trời. Khối sever sử dụng board Arduino UNO để nhận dữ liệu từ khối cảm biến và khối máy tính để xử lý thông tin và điều khiển động cơ(máy bom). Khối máy tính có nhiệm vụ tải thông tin thời tiết và gửi dữ liệu cho khối sever đồng thời hiển thị thông tin độ ẩm của đất theo biểu đồ.

TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN KỸ THUẬT MÁY TÍNH – VIỄN THƠNG ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG TƢỚI NƢỚC NGÀNH CÔNG NGHỆ KỸ THUẬT MÁY TÍNH Sinh viên: TRẦN NGUYÊN THÁI MSSV: 11119137 TP HỒ CHÍ MINH – 1/2016 TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG TƢỚI NƢỚC NGÀNH CƠNG NGHỆ KỸ THUẬT MÁY TÍNH Sinh viên: TRẦN NGUN THÁI MSSV: 11119137 GVHD: Th.S HOÀNG XUÂN BÁCH TP HỒ CHÍ MINH – 1/2016 LỜI CẢM ƠN Lời xin gửi lời cảm ơn đến tất quý thầy cô giảng dạy trƣờng Đại Học Sƣ Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, đặt biệt quý thầy cô Khoa Điện – Điện Tử giảng dạy cung cấp kiến thức bổ ích tạo tiền đề cho thực hiên đồ án Tôi xin gửi lời cảm ơn chân thành đến giáo viên hƣớng dẫn thầy Th.S Hoàng Xuân Bách, thầy khởi tạo ý tƣởng, cung cấp tài liệu, đồng thời tận tình hƣớng dẫn, giúp đỡ tạo điều kiện thuận lợi suốt q trình thực đề tài Tơi bày tỏ cảm ơn tới anh Nguyễn Huỳnh Q Nam ngƣời giúp để tơi có nhiều ý tƣởng hồn thiện ý tƣởng q trình thực đề tài Tôi xin gửi lời cảm ơn đến gia đình, bạn bè thầy khoa tận tình giúp đỡ tạo điều kiện thuận lợi cho tơi có hội nghiên cứu thực đề tài Cảm ơn đến thầy cô Khoa Điện Điện Tử bạn lớp 11119 chia sẻ, trao đổi, đóng góp kiến thức giúp thực tốt đề tài Xin chân thành cảm ơn! Thực đề tài TRẦN NGUYÊN THÁI iii TÓM TẮT Đề tài đƣợc thực dựa u cầu thực tế với mục đích giảm nhân cơng lạo động, hạ chi phi sản xuất, đồng thời tiết kiệm thời gian nguồn nƣớc cạn kiệt dần Hệ Thống gồm ba khối chính: - Khối cảm biến độ ẩm đất có nhiệm vụ đo độ ẩm đất gửi tới khối sever để xử lý, khối cảm biến sử dụng nguồn pin đƣợc sạc lƣợng mặt trời - Khối sever sử dụng board Arduino UNO để nhận liệu từ khối cảm biến khối máy tính để xử lý thơng tin điều khiển động cơ(máy bom) - Khối máy tính có nhiệm vụ tải thông tin thời tiết gửi liệu cho khối sever đồng thời hiển thị thông tin độ ẩm đất theo biểu đồ iv MỤC LỤC DANH MỤC HÌNH VII DANH MỤC BẢNG IX CÁC TỪ VIẾT TẮT X CHƢƠNG GIỚI THIỆU 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC ĐÍCH CỦA ĐỀ TÀI 1.3 PHẠM VI ÁP DỤNG 1.4 BỐ CỤC CHƢƠNG CƠ SỞ LÝ THUYẾT 2.1 MỘT SỐ HỆ THỐNG TƢƠNG TỰ HIỆN NAY .4 2.1.1 Các nghiên cứu nước .4 2.1.2 Các nghiên cứu nước 2.1.3 Đánh giá tổng quan .6 2.2 CÁC THÀNH PHẦN CHÍNH TRONG ĐỀ TÀI .8 2.2.1 Tổng quan Arduino 2.2.2 Arduino UNO .9 2.2.3 Arduino Pro Mini 5V 11 2.2.4 Module ESP8266 13 2.2.5 Công nghệ pin mặt trời 18 2.2.6 Cảm biến độ ẩm đất 19 CHƢƠNG THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 21 3.1 LỰA CHỌN THIẾT KẾ 21 3.2 THIẾT KẾ HỆ THỐNG 22 3.2.1 Thiết kế sơ .22 3.2.2 Thiết kế phần cứng 23 3.2.3 Thiết kế phần mềm .30 3.3 THỰC HIỆN KẾT NỐI CÁC KHỐI 32 v CHƢƠNG KẾT QUẢ 35 4.1 MƠ HÌNH THỰC TẾ 35 4.1.1 Khối server 35 4.1.2 Khối cảm biến độ ẩm đất 36 4.1.3 Khối máy tính .37 4.2 HOẠT ĐỘNG THỰC TẾ 39 CHƢƠNG KẾT LUẬN 40 5.1 TÓM LƢỢC MỤC ĐÍCH, QUY TRÌNH HOẠT ĐỘNG VÀ KẾT QUẢ .40 5.1.1 Tóm lược mục đích 40 5.1.2 Quy trình hoạt động 40 5.1.3 Kết chung 40 5.2 ƢU NHƢỢC ĐIỂM CỦA ĐỂ TÀI .40 5.2.1 Ưu điểm đề tài 40 5.2.2 Nhược điểm đề tài .41 5.3 HƢỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 41 PHỤ LỤC A 43 PHỤ LỤC B 55 TÀI LIỆU THAM KHẢO 56 vi DANH MỤC HÌNH Hình 1: Tƣới nƣớc chảy tràn lan Hình 2: Xe bòn tƣới nƣớc Hình 1: Robot Droplet tự động tƣới nƣớc Hình 2: Ông Nguyễn Văn Tất bên hệ thống tƣới nƣớc .6 Hình 3: Sơ đồ chân chƣc Arduino UNO 10 Hình 4: Sơ đồ chức chân Arudino UNO .11 Hình 5: Module ESP8266 14 Hình 6: Sơ đồ chân ESP8266 .14 Hình 7: Cảm biến độ ẩm đất 19 Hình 8: Sơ đồ nguyên lý cảm biến 20 Hình Sơ đồ khối hệ thống .22 Hình 2: Lƣu đồ giải thuật khối Server 24 Hình 3: Sơ đồ nguyên lý linh kiên giao tiếp với arduino 25 Hình 4: Lƣu đồ thuật toán khối cảm biến .26 Hình 5: Sơ đồ nguyên lý khối Arduino Pro Mini 27 Hình 6: Sơ đồ khối khối nguồn .27 Hình 7: Module hạ áp 28 Hình 8: Mạch sạc pin 28 Hình 9: Nâng áp (5v) 29 Hình 10: Sơ đồ nguyên lý mạch quản lý nguồn 29 Hình 11: Pin Lithium- ion 4200mA, 3.7V 30 Hình 12: Giao diện khởi động arduino 1.6.6 31 Hình 13: Giao diện khởi động visual studio 2013 32 Hình 14: Mạch Layout giao tiếp với server 33 Hình 15: mach layout giao tiếp với Arduino pro mini 33 Hình 16: Mạch layout quản lý nguồn 34 vii Hình 1: Kết thực tế khối server .35 Hình 2: kết thực tế khối cảm biến độ ẩm đất 36 Hình 3: Giao diện máy tính 37 Hình 4: Kết gió tiếp với khối server 38 Hình 5: Mơ hình hồn thiện 39 viii DANH MỤC BẢNG Bảng 1: Tóm tắt sơ lƣợc Arduino Uno Bảng 2: Tóm tắt sơ lƣợc Arduino Pro Mini 5V 12 Bảng 3: Bảng tập lệnh AT esp8266 15 Bảng 1: Kết nối chân module wifi với Arduino Uno 23 Bảng 1: Bảng giá trị điện mạch server 35 Bảng 2: Các thông số điền khối cảm biến .36 ix CÁC TỪ VIẾT TẮT IDE: Integrated development environment PWM: Pulse-width modulation LCD: Liquid Crystal Display I2C: Inter-Integrated Circuit AVR: Auto voltage regulator AT: Attention command IC: Integrated Circuit ADC: Analog to Digital Converter XML: eXtensible Markup Language JSON: Javascript Object Notation x hệ thống hoạt động ổn định xác Để khắc phục đƣợc điều ngƣời thực đề tài đƣa giải pháp sau: - Phía bên Server phát wifi client truy cập vào, sử dụng tính vừa phát vừa thu module wifi - Các liệu đƣợc gửi lên trang wed tự tạo thiết bị khác truy cập xem thông tin theo ngày, tháng - Thiết kế khối nguồn cảm biến gọn nhẹ hơn, sử dụng tới ba module mạch tự chế Các module tích hợp lại thành khối khác nhỏ gọn - Tăng dung lƣợng pin lên để khắc phục trình trạng khơng có ánh nắng liên tục vòng ngày hệ thống ngƣng hoạt động - Tối ƣu hóa thành mạch giảm lƣợng dây cấm xuống, tránh tình trạng rỏng dây cấm Thiết kế linh kiện nằm mạch 42 PHỤ LỤC A  Mã nguồn khối Server: #include #include #include #include // QUY ĐỊNH CÁC CHÂN TÍN HIỆU #define PIN_RELAY // Chân rờ le #define PIN_LED // Chân LED #define PIN_ESP_TX 10 // Chân TX ESP #define PIN_ESP_RX 11 // Chân RX ESP #define PIN_ESP_RST 12 // Chân RST ESP // THIẾT LẬP MẠNG -#define WIFI_NAME "Connectify-NO" // Tên wifi (Thu) #define WIFI_PASS "google.com.vn" // Mật wifi (Thu) // THIẾT LẬP SERVER #define SERVER_PORT 2015 // Cổng cho socket #define SERVER_TIME_WAIT 3600 // Thời gian chờ (s) #define SERVER_TIME_READ 3000 // Thời gian đọc liệu (ms) #define SERVER_BUFFER_SIZE 255 // Kích thƣớc buffer để đọc liệu socket // MÃ LỆNH GIAO TIẾP VỚI MÁY TÍNH -#define CODE_SPLIT // Mã phân cách tham số gói tin #define CODE_VERIFY // Mã kiểm tra kết nối #define CODE_WEATHER // Mã trao đổi thời tiết #define CODE_HUMID_PC // Mã trao đổi độ ẩm #define CODE_HUMID_LIMIT // Mã trao đổi độ ẩm giới hạn (PC) #define CODE_HUMID_SENSOR // Mã trao đổi độ ẩm (PC) (PC) (PC) (cảm biến) // CÁC KÝ TỰ ĐẶC BIỆT CHO LCD -#define SYM_SMILE // Ký tự mặt cƣời #define SYM_SAD // Ký tự mặt buồn #define SYM_ARROW // Ký tự mũi tên // CHẾ ĐỘ HIỂN THỊ #define DISPLAY_NONE // Không hiển thị #define DISPLAY_WELCOME // Hiển thị thông tin chào mừng #define DISPLAY_WATCH // Hiển thị thông tin theo dõi // GIAO TIẾP MẠNG -SoftwareSerial wifiSerial(PIN_ESP_TX, PIN_ESP_RX); 43 ESP8266 wifi(wifiSerial); bool isConnected = false; // THÔNG TIN THỜI TIẾT byte humiditySoilFirst = 255; byte humiditySoilSecond = 255; byte humiditySoilFirstLimit = 70; byte humiditySoilSecondLimit = 70; byte humidityAir = 255; char weather[16] = ""; // HIỂN THỊ THÔNG TIN -byte currDisplayMode = DISPLAY_NONE; byte nextDisplayMode = DISPLAY_NONE; bool isDisplayChanged = false; int displayDuration = 0; unsigned long displayTime = 0; LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup(void) { initSerial(); initIO(); initLCD(); displaySwitch(DISPLAY_WELCOME, DISPLAY_WATCH, 1500); } void loop(void) { processDisplay(); processNetwork(); } inline void initSerial() { { Serial.begin(9600); } while (!Serial); } inline void initIO() { pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); pinMode(PIN_LED, OUTPUT); digitalWrite(PIN_LED, LOW); pinMode(PIN_ESP_RST, INPUT_PULLUP); 44 } inline void initLCD() { byte sym_smile [8] = { B01010, B01010, B00000, B00000, B00000, B10001, B01110, B00000 }; byte sym_sad [8] = { B01010, B01010, B00000, B00000, B00000, B01110, B10001, B00000 }; byte sym_arr [8] = { B00000, B01000, B00100, B11110, B00100, B01000, B00000, B00000 }; lcd.begin(16, 2); lcd.clear(); lcd.createChar(SYM_SMILE, sym_smile); lcd.createChar(SYM_SAD, sym_sad); lcd.createChar(SYM_ARROW, sym_arr); } // CÁC HÀM XỬ LÝ inline void processNetwork() if (isConnected) { byte channel; byte readBuffer[SERVER_BUFFER_SIZE]; unsigned int readCount = wifi.recv(&channel, readBuffer, sizeof(readBuffer), SERVER_TIME_READ); if (readCount > 0) networkReceived(channel, readBuffer, readCount); } else { networkStart(); } } inline void processDisplay() { if (nextDisplayMode != DISPLAY_NONE && displayDuration > && (millis() - displayTime) >= displayDuration) displaySwitch(nextDisplayMode, DISPLAY_NONE, 0); if (isDisplayChanged) { isDisplayChanged = false; switch(currDisplayMode) { case DISPLAY_WELCOME: 45 displayWelcome(); break; case DISPLAY_WATCH: displayWatch(); break; } } } inline void networkStart() { digitalWrite(PIN_ESP_RST, LOW); delay(100); digitalWrite(PIN_ESP_RST, HIGH); if (wifi.restart()) if (wifi.setOprToStationSoftAP()) { if (wifi.joinAP(WIFI_NAME, WIFI_PASS)) { if (wifi.enableMUX()) { if (wifi.startTCPServer(SERVER_PORT)) { if (wifi.setTCPServerTimeout(SERVER_TIME_WAIT)) { isConnected = networkReady(); if (isConnected) { isDisplayChanged = true; } else Serial.println("[SERV] CONN FAIL"); } } } } } } inline bool networkReady() 46 { String state = wifi.getIPStatus(); for (unsigned int i=0;i= 4) { humidityAir = buffer[1]; humiditySoilFirstLimit = buffer[2]; humiditySoilFirstLimit = buffer[3]; for (unsigned int i=4;i= 3) { humiditySoilFirstLimit = buffer[1]; humiditySoilSecondLimit = buffer[2]; processWatering(humiditySoilFirst, humiditySoilFirstLimit, PIN_RELAY, LOW, HIGH); processWatering(humiditySoilSecond, humiditySoilSecondLimit, PIN_LED, HIGH, LOW); isDisplayChanged = true; } } break; case CODE_HUMID_SENSOR: { if (bufferSize >= 3) { humiditySoilFirst = buffer[1]; humiditySoilSecond = buffer[2]; processWatering(humiditySoilFirst, humiditySoilFirstLimit, PIN_RELAY, LOW, HIGH); processWatering(humiditySoilSecond, humiditySoilSecondLimit, PIN_LED, HIGH, LOW); isDisplayChanged = true; } } break; } if (sent) { 48 if (sentResult) else { isConnected = false; isDisplayChanged = true; } } } inline bool networkSendCode(byte channel, byte code) { byte package[1]; package[0] = code; return wifi.send(channel, package, 1); } inline bool networkSendData(byte channel, byte code, byte data[]) { unsigned int packageSize = sizeof(data) + 1; byte package[packageSize]; package[0] = code; for(unsigned int i=1;i=0 && humidityAir = && humiditySoilFirst = && humiditySoilSecond = HUMID_DELAY_SEND) { humidityLastSentTime = millis(); humidityFirstOld = humidityFirst; humiditySecondOld = humiditySecond; byte package[2]; package[0] = humidityFirst; package[1] = humiditySecond; bool succeed = networkSend(SERVER_CHANNEL, CODE_HUMID_SENSOR, package); if (succeed) Serial.println("[SENT] OK"); else { isConnected = false; digitalWrite(PIN_LED, LOW); } } } } } // CÁC HÀM HỖ TRỢ GIAO TIẾP MẠNG inline void networkStart() { if (wifi.restart()) if (wifi.setOprToStation()) { if (wifi.joinAP(WIFI_NAME, WIFI_PASS)) { if (wifi.enableMUX()) { String currentIP = wifi.getLocalIP(); if (wifi.createTCP(SERVER_CHANNEL, SERVER_IP, SERVER_PORT)) { isConnected = networkReady(); if (isConnected) { digitalWrite(PIN_LED, HIGH); 53 } } } } } } inline bool networkReady() { String state = wifi.getIPStatus(); for (unsigned int i=0;i

Ngày đăng: 10/11/2017, 09:16

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan