Đề tài đã thực hiện: Tìm hiểu và ứng dụng mạch Arduino Mega 2560 để lập trình và điều khiển. Thu thập tín hiệu cũng như tìm hiểu nguyên lí hoạt động của cảm biến nhiệt ẩm DHT11. Lưu dữ liệu thu thập từ cảm biến vào thẻ nhớ SD dưới dạng file Excel. Điều chỉnh thời gian lấy mẫu của nhiều cảm biến. Hiển thị tất cả số liệu lên LCD và lên màn hình máy tính. Phần cứng gồm: board mạch Arduino Mega 2560, 8 cảm biến nhiệt ẩm để thu số liệu, một SD Card Module dùng để lưu giá trị vào thẻ nhớ SD dưới file Excel, một biến trở để hiệu chỉnh thời gian lấy mẫu của các cảm biến, màn hình LCD 16x2 và một nút nhấn để hiển thị dữ liệu của cảm biến và nút nhấn để điều chỉnh chế độ hiển thị là nhiệt độ hay độ ẩm.
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 THIẾT BỊ THU THẬP DỮ LIỆU DATALOGGER Họ tên sinh viên: LÊ NGỌC ĐỨC Ngành: CƠ ĐIỆN TỬ Niên khố: 2011-2015 Tp Hồ Chí Minh, tháng năm 2015 THIẾT KẾ CHẾ TẠO THIẾT BỊ THU THẬP DỮ LIỆU DATALOGGER TÁC GIẢ LÊ NGỌC ĐỨC Khóa luận đệ trình đề để đáp ứng u cầu cấp Kỹ sư chuyên ngành Cơ Điện Tử Giảng viên hướng dẫn: TH.S ĐÀO DUY VINH Tháng 06 năm 2015 LỜI CẢM ƠN Với kiến thức thầy cô trang bị thời gian học tập trường với khoảng thời gian mệt mài nghiên cứu thiết kế phát triển luận văn em hoàn thành theo qui định Để làm điều em xin chân thành cảm ơn thầy Th.S Đào Duy Vinh người ln theo dõi bảo tận tình em suốt thời gian làm khóa luận tốt nghiệp Thầy hướng dẫn tận tình truyền đạt lại nhiều kiến thức kinh nghiệm quý báo giúp em hồn thành đề tài Bên cạnh em xin chân thành cảm ơn quý thầy cô môn Cơ Điện Tử nhà trường hướng dẫn tận tình dạy dỗ truyền đạt kiến thức cho em suốt năm vừa qua Cuối em xin chân thành cảm ơn gia đình, bạn bè giúp em giúp đỡ suốt trình học tập để em hồn thành khóa luận Em xin chân thành cảm ơn! TPHCM, ngày 10 tháng 06 năm 2015 Sinh viên thực Lê Ngọc Đức TÓM TẮT Đề tài nghiên cứu “THIẾT KẾ CHẾ TẠO THIẾT BỊ THU THẬP DỮ LIỆU DATA LOGGER” thực trường Đại Học Nơng Lâm Thành Phố Hồ Chí Minh, thời gian từ tháng đến tháng năm 2015 Đề tài thực hiện: Tìm hiểu ứng dụng mạch Arduino Mega 2560 để lập trình điều khiển Thu thập tín hiệu tìm hiểu ngun lí hoạt động cảm biến nhiệt ẩm DHT11 Lưu liệu thu thập từ cảm biến vào thẻ nhớ SD dạng file Excel Điều chỉnh thời gian lấy mẫu nhiều cảm biến Hiển thị tất số liệu lên LCD lên hình máy tính Phần cứng gồm: board mạch Arduino Mega 2560, cảm biến nhiệt ẩm để thu số liệu, SD Card Module dùng để lưu giá trị vào thẻ nhớ SD file Excel, biến trở để hiệu chỉnh thời gian lấy mẫu cảm biến, hình LCD 16x2 nút nhấn để hiển thị liệu cảm biến nút nhấn để điều chỉnh chế độ hiển thị nhiệt độ hay độ ẩm Do thời gian thực hạn chế, mức độ rộng lớn đề tài, nên phương án giải tốn em khơng thể tránh khỏi thiếu sót 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 LỜI CẢM ƠN II TÓM TẮT III DANH SÁCH CÁC CHỮ VIẾT TẮT vii DANH SÁCH CÁC HÌNH .viii DANH SÁCH CÁC BẢNG .x Chương 1: MỞ ĐẦU 1.1 Mục đích nghiên cứu .1 1.2 Mục tiêu đề tài .1 1.3 Ý nghĩa thực tiễn Chương 2: TỔNG QUAN 2.1 Tổng quan thiết bị đo đa kênh data logger 2.1.1 Tổng quan .3 2.1.2 Phân loại thành phần hệ thống thu thập liệu 2.1.3 Một số ứng dụng thiết bị thu thập liệu đa kênh 2.2 Tổng quan Arduino 2.2.1 Giới thiệu board mạch Arduino Mega 2560 .5 2.2.2 Thông số kỹ thuật Arduino Mega 2560 2.2.3 Một số ứng dụng board mạch Arduino Mega 2560 .6 2.3 Cảm biến nhiệt độ 2.3.1 Tổng quan cảm biến nhiệt độ 2.3.2 Các phương pháp đo nhiệt độ .8 2.4 Cảm biến độ ẩm 2.4.1 Tổng quan độ ẩm .9 2.4.2 Phân loại cảm biến đo độ ẩm 2.5 Cảm biến nhiệt, ẩm độ DHT11 11 2.5.1 Tổng quan cảm biến DHT11 11 2.5.2 Tính cảm biến DHT11 12 2.5.3 Các ứng dụng cảm biến DHT11 12 2.6 Màn hình hiển thị LCD 16x2 .12 2.7 Module thẻ nhớ (SD Card) 15 2.7.1 Tổng quan module thẻ nhớ 15 2.7.2 Thông số kỹ thuật Mini SD Card Module 17 2.7.3 Ứng dụng Mini Sd Card Module 17 2.7.4 Thẻ nhớ (SD Card) .17 2.7.5 Chuẩn truyền thông SPI (Serial Peripheral Interface) 18 Chương 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU 21 3.1 Đối tượng nghiên cứu 21 3.2 Thiết bị nghiên cứu .21 3.3 Phương pháp nghiên cứu .21 Truyền thông SPI (Serial Peripheral Interface) 21 Chương 4: KẾT QUẢ VÀ THẢO LUẬN 22 4.1 Giới thiệu thiết bị đo giám sát nhiệt độ, độ ẩm nhiều kênh .22 4.1.1 Bản vẽ hộp đựng boarb mạch datalogger 22 4.1.2 Sơ đồ khối tổng quát thiết bị đo nhiệt độ độ ẩm đa kênh .23 4.2 Tính toán thiết kế mạch điều khiển thu thập liệu đa kênh 24 4.2.1 Sơ đồ nguyên lý hệ thống thu thập liệu đa kênh 24 4.2.2 Nguyên lý làm việc thiết bị thu thập tín hiệu đa kênh 26 4.2.3 Mạch nguồn +5V 26 4.3 Tính tốn thiết kế mạch điều khiển thiết bị thu thập liệu đa kênh 27 4.3.1 Sơ đồ liên kết cảm biến nhiệt ẩm DHT11 với Arduino .27 4.3.1.1 Sơ đồ mạch nguyên lý cảm biến nhiệt ẩm DHT11 .27 4.3.1.2 Nguyên lý làm việc cảm biến nhiệt ẩm DHT11 27 4.3.1.3 Giải thuật điều khiển cảm biến nhiệt ẩm DHT11 30 4.3.2 Sơ đồ liên kết Arduino với LCD 16x2 31 4.3.2.1 Sơ đồ nguyên lý hiển thị giá trị cảm biến lên LCD 16x2 31 4.3.2.2 Nguyên lý hoạt động LCD 16x2 32 4.3.2.3 Giải thuật điều khiển LCD 16x2 33 4.3.3 Sơ đồ liên kết Arduino với volume .33 4.3.3.1 Sơ đồ nguyên lý điều khiển cụm điều chỉnh thời gian lấy mẫu 34 4.3.3.2 Nguyên lý hoạt động điều khiển cụm điều chỉnh thời gian lấy mẫu 34 4.3.3.3 Giải thuật điều khiển volume 35 4.3.4 Sơ đồ liên kết Arduino với thẻ SD Card Module 36 4.3.4.1 Sơ đồ nguyên lý lưu trữ giá trị cảm biến vào thẻ nhớ SD 36 4.3.4.2 Nguyên lý hoạt động lưu trữ liệu cảm biến vào thẻ nhớ SD .37 4.3.4.3 Giải thuật điều khiển lưu trữ liệu vào thẻ nhớ SD 38 4.4 Giải thuật điều khiển truyền tín hiệu đa kênh 39 4.5 Giao tiếp datalogger máy tính 40 4.5.1 Matlab GUI 40 4.5.2 Giao diện hiển thị giá trị nhiệt độ, độ ẩm lên máy tính .42 4.5.3 Nguyên lý làm việc hiển thị giá trị nhiệt độ, độ ẩm lên máy tính .42 4.5.4 Giải thuật hiển thị giá trị cảm biến lên máy tính 43 4.6 Khảo nghiệm sơ thiết bị 44 4.6.1 Sơ đồ bố trí thí nghiệm thiết bị .44 4.6.2 Bảng kết giá trị cảm biến .45 4.6.3 Biểu đồ .46 4.6.4 Kết luận biểu đồ cảm biến 46 Chương 5: KẾT LUẬN VÀ ĐỀ NGHỊ 47 5.1 Kết luận 47 5.2 Đề nghị 47 TÀI LIỆU THAM KHẢO .48 PHỤ LỤC DANH SÁCH CÁC CHỮ VIẾT TẮT SPI: Serial Peripheral Interface SCK: Serial Clock MISO: Master Input Slave Output MOSI: Master Ouput Slave Input DANH SÁCH CÁC HÌNH Hình 1.1: Board mạch Arduino Mega 2560 Hình 1.2: Cấu tạo cảm biến đo nhiệt độ dùng điốt tranzitor Hình 1.3: Cảm biến nhiệt ẩm DHT11 .11 Hình 1.4: Sơ đồ chân LCD 16x2 13 Hình 1.5: SD Card Module .16 Hình 1.6: Sơ đồ chân thẻ SD 17 Hình 1.7: Giao diện SPI 19 Hình 1.8: Truyền liệu SPI 20 Hình 1.9: Bản vẽ hộp đựng thiết bị thu thập tín hiệu đa kênh 22 Hình 2.1: Phần thiết kế hộp đựng thiết bị thu thập liệu data logger .23 Hình 2.2: Sơ đồ nguyên lý điều khiển thu thập liệu đa kênh 23 Hình 2.3: Sơ đồ nguyên lý mạch vi điều khiển thiết bị thu thập liệu đa kênh 25 Hình 2.4: Sơ đồ chi tiết mạch nguồn 26 Hình 2.5: Sơ đồ nguyên lý cảm biến nhiệt ẩm DHT11 với Arduino Mega 2560 27 Hình 2.6: Hình mơ hoạt động bước 28 Hình 2.7: Mơ hoạt động bit 29 Hình 2.8: Mơ hoạt động bit 29 Hình 2.9: Lưu đồ giải thuật nguyên lý hoạt động DHT11 30 Hình 3.1: Sơ đồ hiển thị giá trị cảm biến lên LCD 16x2 31 Hình 3.2: Lưu đồ giải thuật hiển thị giá trị cảm biến lên LCD 16x2 33 Hình 3.3: Sơ đồ điều khiển cụm điều chỉnh thời giam lấy mẫu 34 #define DHTPIN_5 31 #define DHTTYPE_5 DHT11 #define DHTPIN_6 33 #define DHTTYPE_6 DHT11 #define DHTPIN_7 35 #define DHTTYPE_7 DHT11 #define DHTPIN_8 37 #define DHTTYPE_8 DHT11 DHT dht_1(DHTPIN_1, DHTTYPE_1); DHT dht_2(DHTPIN_2, DHTTYPE_2); DHT dht_3(DHTPIN_3, DHTTYPE_3); DHT dht_4(DHTPIN_4, DHTTYPE_4); DHT dht_5(DHTPIN_5, DHTTYPE_5); DHT dht_6(DHTPIN_6, DHTTYPE_6); DHT dht_7(DHTPIN_7, DHTTYPE_7); DHT dht_8(DHTPIN_8, DHTTYPE_8); const int interval = 10*1000; long lastReadTime = 0; const int chipSelect = 53; void setup() { Serial.begin(9600); pinMode(doi,INPUT); lcd.begin(numCols, numRows); lcd.print("a"); lcd.setCursor(0,1); lcd.print("b "); lcd.setCursor(3,0); lcd.print("c"); lcd.setCursor(3,1); lcd.print("d "); lcd.setCursor(6,0); lcd.print("e"); lcd.setCursor(6,1); lcd.print("f "); lcd.setCursor(9,0); lcd.print("g"); lcd.setCursor(9,1); lcd.print("h "); dht_1.begin(); dht_2.begin(); dht_3.begin(); dht_4.begin(); dht_5.begin(); dht_6.begin(); dht_7.begin(); dht_8.begin(); while (!Serial) { ; } Serial.print("Initializing SD card "); pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); } void loop() { int value=analogRead(A0); int voltage=map(value,0,1023,0,5); int tglaymau; if(voltage==0){ tglaymau=0; } else if(voltage==1){ tglaymau=10; } else if(voltage==2){ tglaymau=1000; } else if(voltage==3){ tglaymau=2000; } else if(voltage==4){ tglaymau=5000; } else if(voltage==5){ tglaymau=10000; } long currentTime = millis(); if (currentTime > lastReadTime + interval) { float h_1 = readSensor ('HUMIDITY1'); float t_1 = readSensor('TEMPERATURE1'); float h_2 = readSensor ('HUMIDITY2'); float t_2 = readSensor('TEMPERATURE2'); float h_3 = readSensor ('HUMIDITY3'); float t_3 = readSensor('TEMPERATURE3'); float h_4 = readSensor ('HUMIDITY4'); float t_4 = readSensor('TEMPERATURE4'); float h_5 = readSensor ('HUMIDITY5'); float t_5 = readSensor('TEMPERATURE5'); float h_6 = readSensor ('HUMIDITY6'); float t_6 = readSensor('TEMPERATURE6'); float h_7 = readSensor ('HUMIDITY7'); float t_7 = readSensor('TEMPERATURE7'); float h_8 = readSensor ('HUMIDITY8'); float t_8 = readSensor('TEMPERATURE8'); String dataString=""; dataString= String(t_1) + String(",") + String(h_1) + String(",") + String(",") + String(t_2) + String(",") + String(h_2) + String(",") + String(",") + String(t_3) + String(",") + String(h_3) + String(",") + String(",") + String(t_4) + String(",") + String(h_4) + String(",") + String(",") + String(t_5) + String(",") + String(h_5) + String(",") + String(",") + String(t_6) + String(",") + String(h_6) + String(",") + String(",") + String(t_7) + String(",")+ String(h_7)+String(",") + String(",") + String(t_8) + String(",") + String(h_8) ; chaydoi=digitalRead(doi); if (chaydoi==0){ lcd.setCursor(1,0); lcd.print(round(t_1)); lcd.setCursor(1,1); lcd.print(round(t_2)); lcd.setCursor(4,0); lcd.print(round(t_3)); lcd.setCursor(4,1); lcd.print(round(t_4)); lcd.setCursor(7,0); lcd.print(round(t_5)); lcd.setCursor(7,1); lcd.print(round(t_6)); lcd.setCursor(10,0); lcd.print(round(t_7)); lcd.setCursor(10,1); lcd.print(round(t_8)); } else if(chaydoi==1){ lcd.setCursor(1,0); lcd.print(round(h_1)); lcd.setCursor(1,1); lcd.print(round(h_2)); lcd.setCursor(4,0); lcd.print(round(h_3)); lcd.setCursor(4,1); lcd.print(round(h_4)); lcd.setCursor(7,0); lcd.print(round(h_5)); lcd.setCursor(7,1); lcd.print(round(h_6)); lcd.setCursor(10,0); lcd.print(round(h_7)); lcd.setCursor(10,1); lcd.print(round(h_8)); } File dataFile = SD.open("datalog.csv", FILE_WRITE); if (dataFile) { dataFile.println(dataString); dataFile.close(); Serial.print(t_1); Serial.print("\t"); Serial.print(h_1); Serial.print("\t"); Serial.print("\t"); Serial.print(t_2); Serial.print("\t"); Serial.print(h_2); Serial.print("\t"); Serial.print("\t"); Serial.print(t_3); Serial.print("\t"); Serial.print(h_3); Serial.print("\t"); Serial.print("\t"); Serial.print(t_4); Serial.print("\t"); Serial.print(h_4); Serial.print("\t"); Serial.print("\t"); Serial.print(t_5); Serial.print("\t"); Serial.print(h_5); Serial.print("\t"); Serial.print("\t"); Serial.print(t_6); Serial.print("\t"); Serial.print(h_6); Serial.print("\t"); Serial.print("\t"); Serial.print(t_7); Serial.print("\t"); Serial.print(h_7); Serial.print("\t"); Serial.print("\t"); Serial.print(t_8); Serial.print("\t"); Serial.print(h_8); Serial.println(""); delay(tglaymau); } else { Serial.println("error opening datalog.csv"); } } } boolean startSDCard() { boolean result = false; Serial.print("Initializing SD card "); pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { Serial.println("Card failed, or not present"); result = false; } else { Serial.println("card initialized."); File dataFile = SD.open("datalog.csv", FILE_WRITE); if (dataFile) { dataFile.println(); dataFile.println("rH (%) \t temp (*C)"); dataFile.close(); result = true; } } return result; } float readSensor( int thisValue) { float result; if (thisValue == 'TEMPERATURE1') { result = dht_1.readTemperature(); } else if(thisValue == 'TEMPERATURE2'){ result = dht_2.readTemperature(); } else if(thisValue == 'TEMPERATURE3'){ result = dht_3.readTemperature(); 10 } else if(thisValue == 'TEMPERATURE4'){ result = dht_4.readTemperature(); } else if(thisValue == 'TEMPERATURE5'){ result = dht_5.readTemperature(); } else if(thisValue == 'TEMPERATURE6'){ result = dht_6.readTemperature(); } else if(thisValue == 'TEMPERATURE7'){ result = dht_7.readTemperature(); } else if(thisValue == 'TEMPERATURE8'){ result = dht_8.readTemperature(); } else if (thisValue == 'HUMIDITY1') { result = dht_1.readHumidity(); } else if( thisValue == 'HUMIDITY2') { result = dht_2.readHumidity(); } else if (thisValue == 'HUMIDITY3') { result = dht_3.readHumidity(); } else if (thisValue == 'HUMIDITY4') { 11 result = dht_4.readHumidity(); } else if (thisValue == 'HUMIDITY5') { result = dht_5.readHumidity(); } else if (thisValue == 'HUMIDITY6') { result = dht_6.readHumidity(); } else if (thisValue == 'HUMIDITY7') { result = dht_7.readHumidity(); } else if (thisValue == 'HUMIDITY8') { result = dht_8.readHumidity(); } if (isnan(result)) { result = -273.0; } return result; } Code Matlab function varargout = doan(varargin) % DOAN M-file for doan.fig % DOAN, by itself, creates a new DOAN or raises the existing % singleton* % % H = DOAN returns the handle to a new DOAN or the handle to % the existing singleton* 12 % % DOAN('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in DOAN.M with the given input arguments % % % DOAN('Property','Value', ) creates a new DOAN or raises the existing singleton* Starting from the left, property value pairs are % applied to the GUI before doan_OpeningFcn gets called % unrecognized property name or invalid value An makes property application % stop All inputs are passed to doan_OpeningFcn via varargin % % *See GUI Options on GUIDE's Tools menu % instance to run (singleton)" Choose "GUI allows only one % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help doan % Last Modified by GUIDE v2.5 28-May-2015 15:11:06 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', 'gui_Singleton', mfilename, gui_Singleton, 'gui_OpeningFcn', @doan_OpeningFcn, 'gui_OutputFcn', @doan_OutputFcn, 'gui_LayoutFcn', [] , 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT 13 % - Executes just before doan is made visible function doan_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to doan (see VARARGIN) % Choose default command line output for doan handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes doan wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = doan_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % - Executes during object creation, after setting all properties function figure1_CreateFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % - Executes during object creation, after setting all properties 14 function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double % - Executes during object creation, after setting all properties function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows % See ISPC and COMPUTER if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % - Executes on button press in pushbutton1 function pushbutton1_Callback(hObject, eventdata, handles) char a; a=serial('com4'); fopen(a); fscanf(a); pause(20); char b; b=fscanf(a); 15 char c; c=str2num(b); bar(c); % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - Executes on button press in pushbutton2 function pushbutton2_Callback(hObject, eventdata, handles) fclose(a); quit; % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % - Executes during object creation, after setting all properties function axes4_CreateFcn(hObject, eventdata, handles) imshow('C:\Users\ducym\Desktop\DETAITN\matlap\a.jpg'); % hObject handle to axes4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: place code in OpeningFcn to populate axes4 % - Executes during object creation, after setting all properties function axes5_CreateFcn(hObject, eventdata, handles) imshow('C:\Users\ducym\Desktop\DETAITN\matlap\b.jpg'); % hObject handle to axes5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: place code in OpeningFcn to populate axes5 16 ... thống thu thập liệu bao gồm thành phần sau: Các thu thập liệu điểm đo (data logger) Phần mềm thu thập xem liệu trung tâm Mạng truyền thông (GSM, LAN, VPN) 2.1.3 Một số ứng dụng thiết bị thu thập liệu. .. 19 Hình 1.8: Truyền liệu SPI 20 Hình 1.9: Bản vẽ hộp đựng thiết bị thu thập tín hiệu đa kênh 22 Hình 2.1: Phần thiết kế hộp đựng thiết bị thu thập liệu data logger .23 Hình... Excel hiển thị số liệu lên hình máy tính Mục đích hệ thống thu thập liệu nói chung phân tích liệu thu thập vào, xử lí, lưu trữ liệu thực mục đích muốn đo Hệ thống thu thập liệu thường dựa sở