bài tập lớn hệ thống đo độ ẩm đất ,với 89s52 (hoặc arduino) và cảm biến đo độ ẩm đất (hoặc cảm biến nhiệt độ ds18b20) truyền dữ liệu lên máy tính (sử dụng laview hoặc visual studio)đề tài của trường đại học công nghiệp hà nội
I : Các khả LabVIEW LabVIEW dùng nhiều phịng thí nghiệm, lĩnh vực khoa h ọc kỹ thuật tự động hóa, điều khiển, điện tử, điện tử, hàng khơng, hóa sinh, điện tử y sinh, Hiện phiên LabVIEW cho h ệ ều hành Windows, Linux, Hãng NI phát triển mô-đun LabVIEW cho máy hỗ trợ cá nhân (PDA) Các chức LabVIEW có th ể tóm tắt sau: Thu thập tín hiệu từ thiết bị bên cảm biến nhiệt độ, hình ảnh từ webcam, vận tốc động cơ, Giao tiếp với thiết bị ngoại vi thông qua nhiều chuẩn giao tiếp thông qua cổng giao tiếp: RS232, RS485, USB, PCI, Ethernet Mô xử lý tín hiệu thu nhận để phục vụ mục đích nghiên cứu hay mục đích hệ thống mà người lập trình mong mu ốn Xây dựng giao diện người dùng cách nhanh chóng th ẩm mỹ h ơn nhiều so với ngôn ngữ khác Visual Basic, Matlab, Cho phép thực thuật toán điều khiển PID, Logic m (Fuzzy Logic), cách nhanh chóng thơng qua chức tích h ợp sẵn LabVIEW Cho phép kết hợp với nhiều ngơn ngữ lập trình truy ền thống nh C, C++, : Các phiên LabVIEW Từ đời có nhiều thay đổi cải tiến, ngày m ới nh ất tính tới tháng năm 2007 LabVIEW 8.2 với nhiều tính mơ-đun cũ tương thích với phiên nh ư: mơ-đun mơ q trình, mơ-đun xử lý hình ảnh, điều khiển chuyển động, điện tử, cơng nghệ hóa sinh : Xu hướng LabVIEW Nhờ tính hỗ trợ mạnh nhanh chóng cho ứng dụng kỹ thuật, lĩnh vực giáo dục nên LabVIEW dùng nhiều phịng thí nghiệm trung tâm nghiên cứu hệ thống công nghiệp Nhiều trường đại học đưa LabVIEW trở thành mơn học th ức II : ARDUINO ? Bây giờ, bạn muốn bật tắt bóng đèn cách tự động, đảo hướng mô tơ cách dễ dàng, đọc tín hiệu cảm biến bạn cần mạch Arduino Hãy nghĩ cách đơn giản, bạn muốn điều khiển, quản lý, thứ liên quan đến điện t Arduino giúp b ạn r ất nhiều! Arduino biết đến cách rộng rãi Việt Nam, giới q phổ biến! Sức mạnh chúng ngày chứng tỏ theo thời gian với ứng dụng mở (open source) độc đáo chia sẻ rộng rãi Với Arduino bạn ứng dụng vào mạch đơn giản mạch cảm biến ánh sáng bật tắt đèn, mạch điều khiển động cơ, cao bạn làm sản phẩm như: máy in 3D, Robot, khinh khí cầu, máy bay khơng người lái, Arduino tảng mà thiết bị phần cứng làm sẵn chuẩn hóa, người dùng việc chọn thứ cần, ráp lại chạy Bạn muốn làm xe điều ển t xa ? Arduino cung cấp cho bạn module điều khiển động có sẵn, m ạch ều khiển có sẵn, mạch thu phát sóng khơng dây có sẵn,… Bạn khơng c ần phải động não thiết kế mạch điện cho xe đơn giản m ọi th ứ có sẵn Giống người với “thể xác” xây dựng sẵn, m ột hệ thống Arduino phải có “tâm hồn” để “sống” Và tơi gọi việc t ạo “tâm hồn” “Lập trình” Tuy nhiên bạn khơng ph ải lập trình t A đến Z Mỗi thứ phần cứng gắn mác “Arduino” có đoạn lệnh viết sẵn (gọi thư viện) cộng đồng người dùng Arduino phát triển Bạn việc bưng vào xào nấu lại theo ý muốn Chính tính tiện lợi đơn giản cho người sử dụng mà Arduino tr thành tượng làng điện tử giới Những sản phẩm cộng đồng người dùng Arduino thiết bị hỗ trợ Arduino lớn đến mức khơng thể thống kê Nó phát triển đến mức mà ta gọi hệ sinh thái đa dạng tiêu đề - giống nh Windows hay Android : Arduino kết nối với ? Một hệ thống Arduino cung cấp cho bạn nhiều t ương tác v ới môi trường xung quanh với: Hệ thống cảm biến đa dạng chủng loại (đo đạc nhiệt độ, độ ẩm, gia tốc, vận tốc, cường độ ánh sáng, màu sắc vật thể, lư u lượng nước, phát chuyển động, phát kim loại, khí độc,…),… Các thiết bị hiển thị (màn hình LCD, đèn LED,…) Các module chức (shield) hỗ trợ kêt nối có dây v ới thiết bị khác kết nối không dây thông dụng (3G, GPRS, Wifi, Bluetooth, 315/433Mhz, 2.4Ghz,…), … Định vị GPS, nhắn tin SMS,… … nhiều thứ thú vị khác chờ bạn khám phá III : Đo độ ẩm nhiệt độ Khái niệm: Độ ẩm đất lượng nước mẫu đất bị m ẫu đất bị đốt nóng đến nhiệt độ 105°C Độ ẩm thường biểu diễn theo % khối lượng đất khô Chú ý: a) Đối với đất có chứa thạch cao đất hữu nên sấy khơ nhiệt độ 60°C (theo ASTM) nhiệt độ 80°C (theo TCVN) b) Đối với đất có chứa muối, mẫu đất cần xử lý đặc biệt tr ước thí nghiệm xác định độ ẩm Nước đất thường chia thành lớp với tính chất khác nhau: (Nguồn: Manual of Soil Laboratory Testing, Vol 1, K.H Head) Lớp lớp nước liên kết chặt với hạt đất, Lớp sấy khô mẫu đất nhiệt độ 105°C lớp nước không bị mẫu đất để khơ gió bị mẫu đất sấy Lớp khô nhiệt độ 105°C lớp nước liên kết với hạt đất sức căng bề mặt, mẫu đất để khô Lớp Lớp gió (tương đương với nhiệt độ khoảng 60°C) lớp nước chảy tự lỗ rỗng đất lớp nước nằm cấu trúc tinh thể hạt đất Lớp nước không bị sấy khô mẫu đất nhiệt độ 105°C (ngoại trừ thạch cao số loại sét vùng nhiệt đới) Như vậy, mẫu đất đốt nóng đến nhiệt độ 105°C, có lớp nước 2, bị đi; lớp nước bám quanh h ạt đ ất Cơng thức tính: đó: W mw độ ẩm đất (%) khối lượng nước mẫu đất (g) Khối lượng nước mẫu đất xác định độ chênh lệch khối lượng mẫu đất trước sau sấy khô nhiệt độ 105°C md khối lượng đất khô mẫu đất (g) Phương pháp: Để thực thí nghiệm xác định độ ẩm mẫu đất, bạn đọc nên tham khảo tiêu chuẩn sau: a) ASTM D2216 : Phương pháp xác định độ ẩm mẫu đất đá tủ sấy b) ASTM D4643 : Phương pháp xác định độ ẩm mẫu đất lị vi sóng c) ASTM D4944 : Phương pháp xác định nhanh độ ẩm mẫu đất trường phương pháp đo áp suất khí CaC d) ASTM D4959 : Phương pháp xác định độ ẩm mẫu đất đá phương pháp đốt trực tiếp e) K.H Head (2006) Manual of Soil Laboratory Testing, Volume 1: Soil Classification and Compaction Tests Whittles Publishing Độ phân tán liệu: Theo ASTM D2216, kết thí nghiệm độ ẩm người thực điều kiện thí nghiệm giống có hệ số biến động 2.7% ; kết phịng thí nghiệm khác th ực có hệ số biến động 5.0% Như vậy, hai kết thí nghiệm độ ẩm xem tương tự chúng không khác biệt giới hạn cho phép bảng sau: Mức chênh lệch cho phép hai giá trị độ ẩm Điều kiện thí nghiệm mẫu đất (so với trị trung bình chúng) ASTM D2216 TCVN 4196 Cùng người thực Hai phịng thí 7.8% 10% 14% ? IV : Mạch cảm biến nhiệt độ 18b20 Mạch cảm biến nhiệt độ 18B20 hiển thị led sử dụng IC cảm biến nhiệt độ 18B20, nhiệt độ đo hiển thị led đoạn, ngõ chân relay NC COM - NO Mạch thiết kế nhỏ gọn với nút nhấn để cài đ ặt ch ế đ ộ hoạt động, phù hợp với hầu hết nhu cầu sử dụng : Thông số kỹ thuật: IC nhiệt độ: DS18B20 Nguồn cấp nuôi board: 12VDC Dải nhiệt độ đo: -40°C ~ +125°C Dịng khơng tải: 20mA Dòng tải thường: 50mA Ngõ ra: cổng relay NC - COM - NO (AC 220V 10A, DC 30V 10A) Kích thước: 65 x 39mm a : Hướng dẫn sử dụng: Nhấn nút K1 để chọn cài đặt nhiệt độ T1, sử dụng nút K2 K3 để tăng - giảm thông số đến mức cài đặt T1 mong muốn Sau tiếp tục nhấn nút K1 để chọn cài đặt nhiệt độ T2, s dụng nút K2 K3 để tăng - giảm thông số đến mức cài đặt T2 mong muốn Tiếp tục nút K1 để kết thúc trình cài đặt nhiệt độ T1 T2, lúc hình led đoạn hiển thị nhiệt độ th ực tế đo đ ược Trong trình sử dụng ta tắt hình hiển thị cách nhấn nút K3 b : Các chế độ hoạt động: Nhấn giữ nút K1 đến hình hiển thị P x (x giá tr ị t 1,2,3,4,5), sử dụng nút K2 K3 để chọn chế đ ộ mong muốn Chế độ P1: Ở chế độ này, nhiệt độ đo nhiệt độ cài đặt T1 relay đóng relay tắt nhiệt độ tăng lêni nhiệt độ cài đặt T2 Chế độ P2: Ở chế độ này, nhiệt độ đo nhiệt độ cài đặt T2 relay đóng relay tắt nhiệt độ hạ xuống nhiệt độ cài đặt T1 Chế độ P3: Ở chế độ relay đóng dải nhiệt độ cài đặt T1 Chức chân : 25 // hàm LED_red thực thi gửi hàm LED_RED 26 void LED(){ 27 //Đoạn code dùng để đọc TỪNG tham số Các tham số mặc định có kiểu liệu "chuỗi" 28 char *arg; 29 arg = sCmd.next(); 30 31 int value = atoi(arg); // Chuyển chuỗi thành số 32 digitalWrite(LED_13, value); 33 } Mình xây dựng command có tên LED nh ận m ột tham số status - trạng thái LED 13 LED LED Bạn thử Serial Monitor trước Và thử xong đừng quên tắt Serial để Processing có để kết nối! Bây th upload đoạn code sau lên Processing import processing.serial.*; // import thư viện serial, tương tự nh hàm include :D Serial serial; // Khởi tạo đối tượng Serial có tên serial (phân biệt hoa thường nhé) int portIndex = 0; // Lựa chọn vị trí cổng Serial danh sách void setup() { size(100, 100); // mở screen có kích thức rộng x cao = width x heigth = 100 x 100 // cho vui, Processing lúc có u cầu 10 // Khơng có hàm size biên dịch gặp lỗi, 11 // tương tự hàm setup() hay loop() Arduino 12 println(Serial.list()); 13 14 // Mở cổng Serial vị trí với mức baudrate 9600 15 serial = new Serial(this, Serial.list()[portIndex], 9600); 16 } 17 18 long time = 0; 19 int status; 20 void draw() { 21 if (millis() - time > 1000) { // Mỗi giây thay đổi tr ạng thái lân 22 status = (status + 1) % 2; 23 serial.write("LED " + status + "\n");// Tương tự Serial.print hay Serial.write Arduino 24 time = millis(); 25 26 } } Khà khà, gửi lệnh từ máy tính đ ến Arduino thơng qua Processing hehe Làm để xác định mạch Arduino, sản phẩm c bạn Mình nghiên cứu vấn đề rút số nh ận xét sau :D Thực chẳng có cách để bạn kiểm tra phần mềm mạch bạn gắn vào máy tính Arduino hay khơng Vì sao? Chúng ta xét đến cổng COM máy Windows thơi nhé, MAC hay Linux cổng /dev/tty V ấn đề có th ể nói lại là, làm tìm mạch Arduino tập h ợp cổng COM máy tính? Rõ ràng, cho tập h ợp mẫu chẳng cho ta điều kiện để xác định mạch điện tử board Arduino Tuy nhiên, mạch điện tử có mã s ố riêng, xác định được, vấn đề ph ức tạp chưa biết nên chưa nói Mặt khác, th ực tế, thiết nghĩ, có cách tìm begginer khơng cần phải khổ sở lựa chọn cổng COM Arduino c COM máy tính Vậy vế thứ vấn đề đành bó tay, v ậy cịn vế lại? Làm để xác định sản phẩm vơ vàn thiết bị ? Cái thiết nghĩ làm được, có nhiều mơ hình làm Suy nghĩ cách đơn giản, "ping" thiết bị thiết bị trả lời lại u cầu ta sản phẩm ta Cịn bá đạo bạn tìm hiểu thêm cách xây dựng tập lệnh AT (AT command) Thử thôi, Arduino upload đoạn code đ ể có ping tới mã số trả "ping ok" + mã số #include // Thêm vào sketch thư viện Serial Command SerialCommand sCmd; // Khai báo biến sử dụng thư viện Serial Command const int LED_13 = 13; const int ProductCode = 321; // mã sản phẩm void setup() { //Khởi tạo Serial baudrate 9600 (trùng với HOST) 10 Serial.begin(9600); 11 12 //pinMode đèn LED 13 13 pinMode(LED_13, OUTPUT); 14 15 16 // Một số hàm thư viện Serial Command 17 18 sCmd.addCommand("PING", ping); 19 sCmd.addCommand("LED", led); 20 21 22 } 23 24 void loop() { 25 sCmd.readSerial(); 26 //Bạn không cần phải thêm dòng code hàm loop 27 } 28 29 // hàm LED_red thực thi gửi hàm LED_RED 30 void led(){ 31 //Đoạn code dùng để đọc TỪNG tham số Các tham số mặc định có kiểu liệu "chuỗi" 32 char *arg; 33 arg = sCmd.next(); 34 35 int value = atoi(arg); // Chuyển chuỗi thành số 36 digitalWrite(LED_13, value); 37 free(arg); 38 } 39 40 void ping() { 41 char *arg; 42 arg = sCmd.next(); 43 int code = atoi(arg); 44 if (code == ProductCode) { // Yêu cầu mã sản ph ẩm 45 Serial.print(F("PING OK ")); 46 Serial.println(ProductCode); 47 } 48 free(arg); 49 } Rồi, xem đoạn code Processing nh sau Mình ping tất cổng Serial được! import processing.serial.*; // import thư viện serial, tương tự nh hàm include :D Serial serial; // Khởi tạo đối tượng Serial có tên serial (phân biệt hoa thường nhé) final int PRODUCT_CODE = 321; final int BAUDRATE[] = {4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200}; final String OK_CODE = "PING OK " + PRODUCT_CODE; // PING OK 321 - độ dài 11 final int OK_CODE_LENGTH = 11; final int TIMEOUT = 1000; // 1000 mili giây = s 10 final int MAXIMUM_SETUP_TIME = 2000; 11 boolean serialStatus = false; 12 long time = 0; 13 14 void delay(long milli) { 15 time = millis(); 16 while (millis() - time 0) { 45 buffer += serial.readChar(); 46 time = millis(); 47 if (++length >= OK_CODE_LENGTH) 48 break; 49 if (millis() - time > TIMEOUT) { 50 serial.stop(); 51 throw new Exception("timeout\n"); 52 } 53 } 54 println(buffer); 55 if (!OK_CODE.equals(buffer)) { 56 serial.stop(); 57 throw new Exception("not match\n"); 58 } 59 serialStatus = true; 60 println("Connected to my sketch " + list[i] + " at baudrate " + BAUDRATE[j]); 61 break; 62 } catch (Exception e) { 63 println(e); 64 println("Can't connect to port " + list[i] + " at baudrate " + BAUDRATE[j]); 65 } 66 67 if (!serialStatus) { 68 noLoop(); // không chạy hàm draw 69 println("Can't connect to any port at any baudrate Sorry! please check your connection"); 70 } else 71 72 time = millis(); // đặt lại thời gian } 73 74 75 int status; 76 void draw() { 77 if (millis() - time > 1000) { // Mỗi giây thay đổi tr ạng thái lân 78 status = (status + 1) % 2; 79 try { 80 serial.write("LED " + status + "\n"); 81 } catch (Exception e) { 82 println(e); 83 } 84 time = millis(); 85 86 } } 87 88 /* 89 Tập lệnh try {} catch () {} bạn nên tham khảo thêm google Nôm na thực đoạn lệnh try có l ỗi tùy vào catch bắt lỗi mà thực thi 90 Ví dụ try {chơi game} catch (bị mét) { die; } 91 */ Oki, ổn Ứng dụng việc gì? Một biết Why (tại phải dùng máy tính điều khiển Arduino), How (làm để điều khiển), việc tìm câu tr ả l ời cho câu hỏi What (tơi ứng dụng vừa học để làm gì) đơn giản Ví dụ, tơi dùng module bluetooth từ gửi lệnh cho Arduino máy tính Ngồi ra, bạn cần phải làm đồ h ọa cho ph ần mềm Processing bạn để thứ trở nên sinh động I : Các khả LabVIEW : Các phiên LabVIEW : Xu hướng LabVIEW II : ARDUINO ? : Arduino kết nối với ? III : Đo độ ẩm nhiệt độ • Khái niệm: • Cơng thức tính: • Phương pháp: • Độ phân tán liệu: IV : Mạch cảm biến nhiệt độ 18b20 : Thông số kỹ thuật: a : Hướng dẫn sử dụng: b : Các chế độ hoạt động: V : Giới thiệu LCD 18B20 VI : Giao tiếp máy tính Arduino ... sử dụng nút K2 K3 để chọn chế đ ộ mong muốn Chế độ P1: Ở chế độ này, nhiệt độ đo nhiệt độ cài đặt T1 relay đóng relay tắt nhiệt độ tăng lêni nhiệt độ cài đặt T2 Chế độ P2: Ở chế độ này, nhiệt. .. chế độ này, nhiệt độ đo nhiệt độ cài đặt T2 relay đóng relay tắt nhiệt độ hạ xuống nhiệt độ cài đặt T1 Chế độ P3: Ở chế độ relay đóng dải nhiệt độ cài đặt T1