THIẾT KẾ, CHẾ TẠO MÔ HÌNH GIÁM SÁT VÀ ĐIỀU KHIỂN TƯỚI CÂY TỰ ĐỘNG

87 516 14
THIẾT KẾ, CHẾ TẠO MÔ HÌNH  GIÁM SÁT VÀ ĐIỀU KHIỂN TƯỚI CÂY 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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP THIẾT KẾ, CHẾ TẠO MƠ HÌNH GIÁM SÁT VÀ ĐIỀU KHIỂN TƯỚI CÂY TỰ ĐỘNG Họ tên sinh viên: BÙI VŨ LUÂN Ngành: CƠ ĐIỆN TỬ Niên khóa: 2014-2018 THIẾT KẾ, CHẾ TẠO MƠ HÌNH GIÁM SÁT VÀ ĐIỀU KHIỂN TƯỚI CÂY TỰ ĐỘNG Tác giả Tháng năm 2018 BÙI VŨ LUÂN Khóa luận tốt nghiệp đệ trình đáp ứng yêu cầu cấp Kỹ sư ngành Cơ Điện Tử Giáo viên hướng dẫn: Th.S TRẨN THỊ KIM NGÀ Tháng 06 năm 2018 LỜI CẢM ƠN Em xin trân trọng cảm ơn tất quý thầy (cô) trường Đại học Nông Lâm Thành Phố Hồ Chí Minh q Thầy (Cơ) khoa Cơ Khí - Cơng Nghệ trang bị cho em kiến thức quý báu giúp đỡ em suốt trình học tập trường Em xin chân thành cảm ơn thầy (cô) môn Cơ Điện Tử - Trường Đại Học Nông Lâm Thành Phố Hồ Chí Minh dạy bảo tận tình, trang bị cho em kiến thức quý báu, bổ ích tạo điều kiện thuận lợi suốt trình em học tập nghiên cứu trường Em xin bày tỏ biết ơn chân thành sâu sắc đến cô Trần Thị Kim Ngà, cô giành nhiều thời gian tận tình bảo, hướng dẫn em suốt trình tìm hiểu, triển khai nghiên cứu đề tài Cô người định hướng đưa nhiều góp ý q báu q trình em thực luận văn Đặc biệt, em xin cảm ơn quý thầy (cô) hội đồng dành thời gian nhận xét góp ý để luận văn em hoàn thiện Em xin gửi lời cảm ơn đến gia đình bạn bè động viên, ủng hộ tạo cho em điều kiện thuận lợi suốt q trình hồn thành luận văn Cuối em xin gữi lời chúc sức khỏe thành đạt tới tất quý thầy (cô) tồn thể gia đình bạn bè Xin chân thành cảm ơn! TPHCM, ngày tháng 06 năm 2018 Sinh viên thực BÙI VŨ LUÂN TÓM TẮT Đề tài nghiên cứu “Thiết kế, chế tạo mơ hình giám sát điều khiển tưới cây” thực trường Đại Học Nơng Lâm Thành Phố Hồ Chí Minh, thời gian từ tháng tới tháng năm 2018 Đề dựa ý tưởng mô hình có thực tế bao gồm khâu: - Tìm hiểu phương pháp giám sát điều khiển tưới tự động Xây dựng mơ hình tưới tự động Xây dựng thuật toán điều khiển tưới theo chế độ khác Thiết kế mạch điều khiển để giám sát điều khiển tưới tự động Sử dụng cảm biến nhiệt độ, độ ẩm đo nhiệt độ, độ ẩm vùng tưới để điều chỉnh lưu lượng thời gian tưới hợp lý cảm biến siêu âm đo mực nước để kiểm sốt mực nước bồn chứa tránh tình trạng thiếu nước trình tưới - Hẹn tưới thời gian thực thông qua module sim A7 GSM/GPRS/GPS - Điều khiển tưới trực tiếp qua điện thoại - Khảo nghiệm, đánh giá mơ hình Ngồi ra, em thiết kế giao diện giao tiếp để người dùng tiện thao tác thông qua web server cách thân thiện, dễ hiểu dễ thao tác Do thời gian hạn chế, mức độ rộng lớn đề tài, nên dù cố gắng phương án giải toán em chắn khơng thể tránh khỏi thiếu sót Chúng em mong nhận đóng góp ý kiến quý thấy cô bạn bè để đề tài em hoàn thiện MỤC LỤC DANH SÁCH CÁC CHỮ VIẾT TẮT PLC: Programmable logic controller AT: Attention GSM: Global System for Mobile Communications GPRS: General Packet Radio Service GPS: Global Positioning System SMS: Short Message Service CR: Carriage return LF: Line Feed MT: Mobile Terminal TE: Terminal Equipment HTTP: Hypertext Transfer Protocol HTML: HyperText Markup Language IP: Internet Protocol CSS: Cascading Style Sheets URL: Uniform Resource Locator PHP: Hypertext Preprocessor CMS: Content management system IDE: Integrated Development Environment PVC: Polyvinyl clorua DANH SÁCH CÁC HÌNH DANH SÁCH CÁC BẢNG Chương MỞ ĐẦU 1.1 Đặt vấn đề Hiện giới việc ứng dụng công nghệ điều khiển vào sản xuất nhiều cần thiết ngành nghề kể nơng nghiệp Nhờ có ứng dụng công nghệ điều khiển đại mà suất chất lượng nông sản tăng lên đáng kể So với nước ta nơng nghiệp lạc hậu chưa có nhiều ứng dụng khoa học kĩ thuật áp dụng vào thực tế Trong nơng nghiệp ngồi kĩ thuật trồng trọt, chăm sóc tưới nước khâu quan trọng trồng trọt để đảm bảo sinh trưởng phát triển bình thường Tưới tưới đủ theo yêu cầu nông học trồng không sinh sâu bệnh, hạn chế thuốc trừ sâu cho sản phẩm an toàn, đạt suất hiệu cao Mặt khác nước ta giai đoạn công nghiệp hóa đại hóa thiết bị máy móc tự động đưa vào phục vụ thay cho sức lao động người Vì thiết bị tưới nghiên cứu, thiết kế, chế tạo để đưa vào thực tiễn ngày nhiều Thiết bị tưới đa dạng chủng loại (vòi phun mưa, phun sương, vòi nhỏ giọt bù áp, vòi khơng bù áp, ) có thơng số khác phục vụ cho loại khác chế tạo từ nhiều quốc gia khác tiêu biểu như: Israel, Mỹ, Trung Quốc, Rất tiện cho người sử dụng lựa chọn phù hợp với nhu cầu sử dụng Việc thiết kế, chế tạo hệ thống tưới tự động giúp người tưới cây, tốn chi phí nhân cơng tưới nước giám sát thời gian tưới cách cụ thể Người lao động không cần quan tâm tới việc tưới mà sinh trưởng phát triển tốt nhờ việc tưới phù hợp xác Đồng thời can thiệp vào nông nghiệp nước ta hạn chế phụ thuộc vào điều kiện khí hậu tự nhiên Ngoài tuyến đường khu vực trung tâm thành phố, hay bắt gặp hình ảnh xe bồn chở nước tưới dọc đường gây cản trở, an tồn giao thơng Do đề tài “Thiết kế, chế tạo mơ hình giám sát điều khiển tưới tự động” chọn để giải vấn đề nêu 1.2 Mục tiêu đề tài Vận dụng kiến thức học để nghiên cứu thực hiện: “Thiết kế, chế tạo mơ hình giám sát điều khiển tưới cây” từ đưa vào ứng dụng thực tiễn Giúp cho việc tươi tiêu trồng nước ta có phương án đạt hiệu cao Hệ thống tích hợp module gọi điện sử dụng mạng di động, xử lý liệu Hệ thống thu nhận tín hiệu thiết bị đầu cuối (mobile), để thực lệnh điều khiển tưới phản hồi lại trạng thái thiết bị điều khiển Một số chức hệ thống: - Hẹn thời gian tưới thông qua web server Đọc giá trị độ ẩm, nhiệt độ đất thông qua giao diện web Gọi điện để kích hoạt tưới khẩn cấp Module SIM A7 GSM/GPRS/GPS làm việc ví trí có phủ sóng mạng điện thoại di động hoạt động nước Viettel, 1.3 Mobile Phone, Vina Phone Nội dung đề tài Vì thời gian có hạn mức độ rộng lớn đề tài nên em thực nghiên cứu vấn đề sau: - Tìm hiểu phương pháp giám sát điều khiển tưới tự động có thị trường, từ đánh giá ưu điểm nhược điểm - loại Tìm hiểu số loại cảm biến Tìm hiểu modul sim A7 GPRS/GPS/GSM tập lệnh AT để điều khiển Tìm hiểu web server Xây dựng mơ hình tưới tự động Xây dựng thuật toán điều khiển tưới theo chế độ khác Xây dựng mạch điều khiển để giám sát điều khiển tưới tự động Khảo nghiệm, đánh giá mơ hình Chương TỔNG QUAN 2.1 Tổng quan hệ thống tưới 2.1.1 Hệ thống tưới gì? Hệ thống tưới công cụ để chuyền tải lượng nước từ nguồn nước đến điểm khác phạm vi đất với mật độ bao phủ đồng cao phù hợp cho giai đoạn sinh trưởng khác Ngày với phát triển xã hội, khoa học công nghệ cụ thể công nghệ ứng dụng vào nông nghiệp bước nâng cao Lao động chân tay dần thay máy móc hệ thống tưới nước số Hệ thống tưới hay gọi hệ thống tưới tự động hệ thống ứng dụng công nghệ tiên tiến Trước kia, để có nước canh tác người lao động phải tìm kiếm nơi có nguồn nước dồi giàu phải dùng sức vận chuyển khối nước tới tưới cho trồng ngày cần nút bấm có nước để hấp thụ Vừa giảm thời gian, giảm nhân cơng lao động lại vừa kiểm soát tiết kiệm cho nguồn nước tránh khỏi việc hao phí nước 2.1.2 Lịch sử phát triển hệ thống tưới Vì vấn đề cung cấp đủ nước đảm bảo độ ẩm cho trồng phát triển, tiết kiệm thời gian, tiết kiệm chi phí nhân cơng, tiết kiệm nguồn nước nên hệ thống tưới đời ngày đại hơn: 10  Tài liệu tham khảo  Tài liệu tiếng việt  [1] Nguyễn Ngọc Cần, Kỹ thuật điều khiển tự động, Nhà xuất Đại học Quốc Gia Thành Phố Hồ Chí Minh  [2] Phan Quốc Phơ - Nguyễn Đức Chính, Giáo trình cảm biến, NXB Khoa học kỹ thuật – 2000  Tài liệu tiếng Anh  [1] SIM800-Series_AT-Command-Manual_V1.09.pdf  [2] Arduino Cookbook – Michael Margolis  [3] AT Command Reference and Applications User’s Guid  Tài liệu Internet  [1] Data sheet linh kiện điện tử - Nguồn internet http://www.alldatasheet.com/  [2] Tìm hiểu lập trình web HTML CSS https://www.w3schools.com/  [3] https://thachpham.com/web-development/html-css/html-va-css-can-ban- danh-cho-cho-moi-nguoi.html   73  Phụ lục  Code điều khiển arduino  #include "SIMFunc.h" (sobom.toInt() == &&  #include "SENSORFunc.h" thoigiantatbom1 == "") ||  #include "RELAYFunc.h" (sobom.toInt() == &&  unsigned long timer = millis(); (thoigiantatbom2 == "" ||  void setup() { thoigiantatbom1 == ""))) {  Serial.begin(115200);  Serial.print("Bat bom: ");  relaybegin();  Serial.print(sobom);  simbegin();  Serial.print("\tTrong: ");  Serial.println(ngaygio());  Serial.print(sophut.toInt());  }  Serial.println("phut");  void loop() {  batbom(sobom.toInt(),  simcheck();  if (millis() - timer > 1000) { sophut.toInt()); }   checkbom();  }  checkbonchua();  if  if (Alarm.indexOf(giophut(1)) (Alarm.indexOf(ngaygio()) != -1) { != -1) {   String sobom = Alarm.substring(Alarm.indexOf( Alarm.substring(Alarm.indexOf( ngaygio()) + 20, giophut(1)) + 10, Alarm.indexOf(ngaygio()) + 21); Alarm.indexOf(giophut(1)) +  11);  String sophut = Alarm.substring(Alarm.indexOf( String sophut = ngaygio()) + 23); Alarm.substring(Alarm.indexOf(  giophut(1)) + 13);  String sobom = if ((sobom.toInt() == && thoigiantatbom2 == "") || if ((sobom.toInt() == && (sobom.toInt() == && thoigiantatbom2 == "") || thoigiantatbom1 == "") || 74 (sobom.toInt() == && if (tmp.indexOf("{BEGIN}") !  (thoigiantatbom2 == "" || = -1 && tmp.indexOf("{END}") thoigiantatbom1 == ""))) { != -1) {  Serial.print("Bat bom: ");  Serial.print(sobom); tmp.substring(tmp.indexOf("{B  Serial.print("\tTrong: "); EGIN}") + 7,  Serial.print(sophut.toInt()); tmp.indexOf("{END}"));  Serial.println("phut");   batbom(sobom.toInt(),  Serial.println(Alarm); }  } sophut.toInt());  void simcheck() { }  Alarm =   }  static String tmp;  timer = millis();  if (SerialAT.available()) {  char c = SerialAT.read();  }  if (c != '\0') {  void getTimer() {  tmp += c; String tmp =  }  if (tmp != "" && c == '\n') { }   String(luongnuoc());  tmp = "get&nctb=" + tmp;  xuly(tmp);  tmp += "&nhietdo=" +  tmp = ""; String(nhietdo());  tmp += "&doam=" + String(doam());   static unsigned long timerd =  tmp += "&bom2=" + tmp += "&bom3=" + if (millis() - timerd > 20000) {  getTimer();  timerd = millis();  String(digitalRead(M3_PIN));  } millis(); String(bom2);   tmp += "&bom1=" + String(bom1);  }  }  } tmp = AT_GetServer(tmp);  void xuly(String tmp) { 75  //Serial.println(tmp);  if (tmp.indexOf(MyNumber) != else if ((tmp.indexOf("+CLIP")  != -1)) SerialAT.println("ATH");  } -1) call_recv();  Chương trình relay  #define M1 //  Trọng số mô tơ bơm thứ  #define M2 if (thoigiantatbom1 != "" && thoigiantatbom2 != "") return; //  String tmp = ""; Trọng số mô tơ bơm thứ hai  if (hour() + (int)(sophut / 60) < 10) tmp += "0";   /* Các chân điều khiển động  60); thơng qua mạch kích Relay có LED báo kiểm tra */  #define M1_PIN //  tmp += ":";  if (minute() + sophut - (((int) Chân khởi động mô tơ thứ  #define M2_PIN (sophut / 60)) * 60) < 10) tmp // += "0"; Chân khởi động mô tơ thứ hai  #define M3_PIN tmp += hour() + (int)(sophut /  // tmp += minute() + sophut (((int)(sophut / 60)) * 60); Chân khởi động bơm nước vào  tmp += ":00A"; bồn  if (!bom1 && (bom == || bom  bool bom1 = false, bom2 = false; == 3)) {  String thoigiantatbom1 = "";  Serial.print("Bat bom - ");  String thoigiantatbom2 = "";  Serial.println(tmp);  void relaybegin() {  thoigiantatbom1 = tmp;  pinMode(M1_PIN, OUTPUT);  digitalWrite(M1_PIN, HIGH);  pinMode(M2_PIN, OUTPUT);  bom1 = true;  pinMode(M3_PIN, OUTPUT);  }  if (!bom2 && (bom == || bom  }  void batbom(int bom, int sophut) == 3)) { { 76  Serial.print("Bat bom - ");  Serial.println(tmp);  thoigiantatbom2 = tmp;   digitalWrite(M2_PIN, HIGH);  }  bom2 = true;  String ngaygio() { } else return tmp;  String date = (String)year();  }  date += "-";  void tatbom(int bom) {  if (month() < 10) date += "0";  date += month();  date += "-";  if (bom1 && (bom == || bom  == 3)) {  Serial.println("Tat bom 1");  if (day() < 10) date += "0";  digitalWrite(M1_PIN, LOW);  date += day();  bom1 = false;  date += " " + giophut(false);  thoigiantatbom1 = "";  return date;  }  }  if (bom2 && (bom = || bom  void checkbom() { == 3)) { if (giophut(0) ==   Serial.println("Tat bom 2");  digitalWrite(M2_PIN, LOW);  if (bom1) {  bom2 = false;  tatbom(1);  thoigiantatbom2 = "";  bom1 = false;  thoigiantatbom1) { } }   }  }  String giophut(bool co) {  if (giophut(0) ==  String tmp = "";  if (hour() < 10) tmp = "0";  if (bom2) {  tmp += hour();  tatbom(2);  tmp += ":";  bom2 = false;  if (minute() < 10) tmp += "0";   tmp += minute();   tmp += ":00A";  }  if (co) return "\"" + tmp;  void checkbonchua() { thoigiantatbom2) { 77 } }  if (luongnuoc() > 17) return;  tmp += ":00A";  if (luongnuoc() < 5) {  thoigiantatbom1 = tmp;  digitalWrite(M1_PIN, HIGH); digitalWrite(M3_PIN, 1);   } else if (luongnuoc() < 14) {  bom1 = true;  } else {  thoigiantatbom2 = tmp;  digitalWrite(M2_PIN, HIGH);  bom2 = true; digitalWrite(M3_PIN, 0);  }   }   void call_recv() {  call_stt = 0;  String tmp = "";  if (hour() + (int)(1 / 60) < 10)  SerialAT.println("ATH"); // Tắt máy  waitFor("OK", 5000); } else { tmp += "0";  SerialAT.println("AT+CLIP=1");  tmp += hour() + (int)(1 / 60);  tmp += ":";  if (minute() + - (((int)(1 /  waitFor("OK", 5000);  static bool call_stt = 0;  if (!call_stt) {  call_stt = 1;  String tmp = "";  tmp += ":00A";  if (hour() + (int)(15 / 60) <  thoigiantatbom1 = tmp;  thoigiantatbom2 = tmp; 60)) * 60) < 10) tmp += "0"; tmp += minute() + - (((int)(1  / 60)) * 60); 10) tmp += "0";  tmp += hour() + (int)(15 / 60);  digitalWrite(M1_PIN, LOW);  tmp += ":";  digitalWrite(M2_PIN, LOW);  if (minute() + 15 - (((int)(15 /  60)) * 60) < 10) tmp += "0";  }  } tmp += minute() + 15 - (((int) (15 / 60)) * 60);   Code cho cảm biến:  // Untrasonic sensor  #include 78  #define TRIGGER_PIN 13 //  OneWire Arduino pin tied to trigger pin nhietdo(ONE_WIRE_BUS); on the ultrasonic sensor  #define ECHO_PIN  DallasTemperature 12 // _nhietdo(& nhietdo); Arduino pin tied to echo pin on  int nhietdo() { the ultrasonic sensor   #define MAX_DISTANCE 20 // _nhietdo.requestTemperatures(); Maximum distance we want to if  ping for (in centimeters) (_nhietdo.getTempCByIndex(0) Maximum sensor distance is > 50) return nhietdo(); rated at 400-500cm return   NewPing _nhietdo.getTempCByIndex(0); _luongnuoc(TRIGGER_PIN,  } ECHO_PIN,  // ELSE MAX_DISTANCE);  #define SENSOR_PIN A0  // Chân cảm biến  int luongnuoc() {  return MAX_DISTANCE -   int doam(){ _luongnuoc.ping_cm();  }  pinMode(A0, INPUT);  int value =  // Temperature sensor DS18B20 analogRead(A0);  #include giá trị hiệu điện cảm biến  #include return map(value, 0, 1023, 100,   // Ta đọc 0);  #define ONE_WIRE_BUS  }   Code cho sim A7:  #include  // AT+IPR=9600 befor ussing  #include  String Alarm;  SoftwareSerial SerialAT(10, 11); 79  #define PWR //  } Định nghĩa chân kích hoạt  if (tmp != "" && c == '\n') { module SIM   #define PWR_Try // if (tmp.indexOf("{BEGIN}") != Định nghĩa số lần thử khích hoạt -1) return tmp; lại SIM if (tmp.indexOf("+CTZV:")   #define ERROR_PIN A4 != -1) return tmp; // Chân LED lỗi kết nối if (tmp == subStr + "\r\n")   #define READY_PIN A5 return tmp; // Chân LED kết nối thiết lập,  hệ thống vận hành tốt   String server = "luan.ga";   const int port = 80;  }  String MyNumber =  return "ERROR"; } } "962392521"; // Định nghĩa số  } điện thoại dùng gọi  bool AT_syncTime() { để tắt/mở bơm nước   String username = "admin"; SerialAT.println("AT+CGATT=1  String password = "11221212"; ");  String waitFor(String subStr, int  timeOut) { String tmp = waitFor("OK", 15000);  String tmp;   unsigned long Error_Timer =  millis();  tmp = "";  while (millis() - Error_Timer <  timeOut) { if (tmp == "ERROR") { return false; } else { if (tmp.indexOf("+CTZV:") == -1) return false;  if (SerialAT.available()) {  waitFor("OK", 5000);  char c = SerialAT.read();  tmp =  if (c != '\0') {  tmp += c; tmp.substring(tmp.indexOf("+C TZV:")); 80  int G[7];  for (byte i = 0; i < 6; i++) G[i] SerialAT.print("GET /recv.php?  name=admin&key=11221212&d = tmp.substring(6 + i * 3, + i * ata=" + noidung + " 3).toInt(); HTTP/1.1\r\n"); G[6] = tmp.substring(25,  server); 27).toInt(); int mins = (G[3] + G[6]) * 60  SerialAT.println("Host: " +  SerialAT.print("Connection:  close\r\n\r\n\x1A"); + G[4]; String tmp =  G[3] = mins / 60;  G[4] = mins - G[3] * 60; waitFor("+TCPCLOSED:0",  setTime(G[3], G[4], G[5], 10000);   G[2], G[1], G[0]);  }  return true; SerialAT.println("AT+CLIP=1");  waitFor("OK", 1000);  }  return tmp;  String AT_GetServer(String  }  // Hàm khởi động SIM noidung) {  SerialAT.println("ATH");  bool SIM_init() {  waitFor("OK", 1000);  Serial.println("SIM INIT ");  SerialAT.print("AT+CIPSTART  digitalWrite(PWR, HIGH); = \"TCP\",\"" + server + "\"," +  delay(2000); port + "\r\n");  digitalWrite(PWR, LOW);  byte ErrorTime = 0;  while (waitFor("OK", 3000) ==  waitFor("CONNECT OK", 7000);  SerialAT.println("ATH");  waitFor("OK", 1000); "ERROR") {   SerialAT.print("AT\r\n");  if (ErrorTime++ >= 5) return SerialAT.print("at+cipsend\r\n");  false; delay(100);  81 } while   bool simbegin() { (SerialAT.available())SerialAT.re  SerialAT.begin(9600); ad();  pinMode(PWR, OUTPUT);  pinMode(ERROR_PIN, Serial.println("Get Data  info "); OUTPUT);  SerialAT.println("AT+CGATT=0 OUTPUT); "); HIGH); return false; HIGH); false; for (byte i = 0; i < PWR_Try;  Serial.println("Turn on call  digitalWrite(READY_PIN,  if (!AT_syncTime()) return  digitalWrite(ERROR_PIN,  if (!waitFor("OK", 5000))  i++) { info "); if (SIM_init()) {   digitalWrite(ERROR_PIN,  SerialAT.println("AT+CLIP=1"); HIGH); if (!waitFor("OK", 3000))  LOW); String tmp =  digitalWrite(READY_PIN,  return false; return true;  AT_GetServer("get");  pinMode(READY_PIN,  }  Alarm = tmp.substring(tmp.indexOf("{B  }  digitalWrite(ERROR_PIN, EGIN}") + 7, HIGH); tmp.indexOf("{END}")); digitalWrite(READY_PIN,   Serial.println(Alarm);  Serial.println("READY");   return true;  } LOW);  }   Một phần code web server: 82 return false;  if (isset($_POST['name']) &&  ?> isset($_POST['key'])){   $name = $_POST['name'];   $key = md5($_POST['key']);   $sql = "SELECT * FROM  `user` WHERE `name` = '$name'  AND `key` ='$key'";  query($sql);  if ($result->num_rows > 0) { type="text/css" href="asset/css/bootstrap.min.css $user = $result-  "> >fetch_array(); $_SESSION['userid'] =    if(!   empty($_POST["remember"])) { encryptCookie($userid);  setcookie ("rememberme",   $message = "Invalid Login";    }   } 83     symbol">NLU  down">  style="margin-top:40px !   class="form-text" autocomplete="off" required readonly onfocus="if  84 Tên đăng   href="reg.html">| Signup  class="bar"> Mật       < src="asset/js/jquery.min.js">  < /script> 85   'icheckbox_flat-aero',

Ngày đăng: 26/09/2019, 20:41

Từ khóa liên quan

Mục lục

  • LỜI CẢM ƠN

  • TÓM TẮT

  • MỤC LỤC

  • DANH SÁCH CÁC CHỮ VIẾT TẮT

  • DANH SÁCH CÁC HÌNH

  • DANH SÁCH CÁC BẢNG

  • Chương 1

  • MỞ ĐẦU

    • 1.1 Đặt vấn đề

    • 1.2 Mục tiêu đề tài

    • 1.3 Nội dung đề tài

    • Chương 2

    • TỔNG QUAN

      • 2.1 Tổng quan về hệ thống tưới cây

        • 2.1.1 Hệ thống tưới là gì?

        • 2.1.2 Lịch sử phát triển của hệ thống tưới cây.

        • 2.1.3 Các phương pháp tưới được áp dụng hiện nay:

          • 2.1.3.1 Hệ thống tưới phun sương

          • 2.1.3.2 Hệ thống tưới phun mưa

          • 2.1.3.3 Hệ thống tưới nhỏ giọt

          • 2.1.4 Một số công trình nghiên cứu trước

          • 2.2 Tổng quan tập lệnh AT trong đề tài

            • 2.1.1 Tập lệnh AT

            • 2.2.2 Các thuật ngữ

            • 2.2.3 Cú pháp lệnh AT

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

Tài liệu liên quan