Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
5,47 MB
File đính kèm
BaoCaoDeTai.rar
(5 MB)
Nội dung
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 ỨNG DỤNG XỬ LÝ ẢNH CHO PHÁT HIỆN ĐÁM CHÁY NGOÀI TRỜI Họ tên sinh viên: PHẠM QUỐC SỸ Ngành: CƠ ĐIỆN TỬ Niên khóa: 2014-2018 Tháng 06 năm 2018 ỨNG DỤNG XỬ LÝ ẢNH CHO PHÁT HIỆN ĐÁM CHÁY NGỒI TRỜI TÁC GIẢ PHẠM QUỐC SỸ 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 i 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 TP.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ử giúp đỡ chúng em nhiệt tình thời gian thực đề tài Em xin bày tỏ biết ơn chân thành Trần Thị Kim Ngà tận tình hướng dẫn em suốt trình làm Luận văn tốt nghiệp Đặ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 Cuối cùng, em xin gửi lời cảm ơn đến người thân 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 TPHCM, ngày tháng 06 năm 2018 Sinh viên thực PHẠM QUỐC SỸ ii TÓM TẮT Đề tài nghiên cứu “Ứng dụng Xử lý ảnh phát đám cháy trời” 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 2018 Mục tiêu đề tài tìm hiểu ứng dụng xử lý ảnh vào việc phát đám cháy trời đưa cảnh báo cách tự động Giải thuật xử lý ảnh phát đám cháy xây dựng đề tài dựa đặc điểm khói, lửa, gồm ba bước chính: - Giám sát suy giảm lượng ảnh - Nhận dạng màu - Phát hiện chuyển động Chương trình viết ngơn ngữ lập trình Matlab, giao diện giao tiếp với người quan sát đơn giản, dễ sử dụng; ứng dụng Module Sim 800L vi điều khiển Arduino Uno để thiết kế hệ thống báo cháy Do thời gian thực hạn chế, mức độ rộng lớn đề tài, nên dù cố gắng phương án giải tốn em chắn khơng thể tránh khỏi thiếu sót Em mong nhận đóng góp ý kiến q thầy bạn bè để đề tài em hoàn thiện iii MỤC LỤC LỜI CẢM ƠN .ii TÓM TẮT iii MỤC LỤC iv DANH SÁCH CÁC CHỮ VIẾT TẮT .vii DANH SÁCH CÁC HÌNH .viii Chương MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Mục đích Chương TỔNG QUAN .3 2.1 Một số nghiên cứu 2.2 Tổng quan hệ thống xử lý ảnh 2.2.1 Các thiết bị thu nhận ảnh 2.2.2 Thu nhận ảnh số hóa 2.2.3 Lưu trữ ảnh .7 2.2.4 Phân tích ảnh 2.2.5 Hệ định 11 2.3 Tổng quan vi điều khiển Arduino R3 12 2.3.1 Thông số kỹ thuật 12 2.3.2 Nguồn sử dụng 13 2.3.3 Các chân lượng .13 2.4 Tổng quan Module Sim 800L 13 2.4.1 Thông số kỹ thuật 14 iv 2.4.2 Chức chân 14 2.5 Phần mền Matlab ứng dụng xử lý ảnh .15 2.5.1 Khái niệm Matlab 15 2.5.2 Giao diện Matlab 15 2.5.4 Khả ứng dụng Matlab 16 2.5.5 Toollbox hỗ trợ việc xử lý ảnh .17 Chương 18 PHƯƠNG TIỆN VÀ PHƯƠNG PHÁP NGHIÊN CỨU 18 3.1 Thời gian thực đề tài 18 3.2 Đối tượng thiết bị nghiên cứu 19 3.2.1 Đối tượng nghiên cứu .19 3.2.2 Thiết bị nghiên cứu 19 3.3 Phương pháp nghiên cứu .19 Chương 20 KẾT QUẢ VÀ THẢO LUẬN 20 4.1 Sơ đồ khối hệ thống lưu đồ thuật toán .20 4.1.1 Sơ đồ khối hệ thống 20 4.1.2 Lưu đồ giải thuật phát đám cháy 21 4.2 Xử lý ảnh phát cháy .22 4.2.1 Thu nhận ảnh 22 4.2.1 Suy giảm lượng ảnh 23 4.2.2 Nhận dạng màu 25 4.2.3 Phát chuyển động 29 4.2.4 Giao diện chương trình 30 4.3 Cảnh báo cháy thông qua Module Sim 800L .31 v 4.3.1 Hộp điều khiển cảnh báo 31 4.3.2 Sơ đồ nguyên lý vi điều khiển kết nối Module Sim 800L 32 4.3.3 Sơ đồ nguyên lý mạch nguồn LM2596 33 4.3.4 Mạch vi điều khiển kết nối với Module Sim 800L 34 4.4 Khảo nghiệm độ ổn định hệ thống 35 4.4.1 Phát khói, lửa 35 4.4.2 Phát cảnh báo qua điện thoại .36 Chương 37 KẾT LUẬN VÀ ĐỀ NGHỊ 37 5.1 Kết đạt 37 5.2 Hướng phát triển đề tài 37 TÀI LIỆU THAM KHẢO 39 PHỤ LỤC 40 vi DANH SÁCH CÁC CHỮ VIẾT TẮT MATLAB: .Matrix Laboratory GUI: .Graphical User Interface COM: .component object model IP: Internet Protocol CMOS: Complementary Metal-Oxide-Semiconductor CCD: Charge Couple Device CCIR: .Consultative Committee On International Radio LED: .Light Emitting Diode DANH SÁCH CÁC HÌNH vii Hình 2.1 Sơ đồ hệ thống xử lý ảnh Hình 2.2 Camera có dây Hình 2.3 Camera không dây Hình 2.4 IP Camera .7 Hình 2.5 Mơ hình khơng gian màu RGB Hình 2.6 Mơ hình màu HLS Hình 2.7 Mơ hình màu L*a*b .9 Hình 2.8 Biến đổi Fourier 10 Hình 2.9 Mạch vi điền khiển Arduino Uno R3 12 Hình 2.10 Module Sim 800L sơ đồ chân .14 Hình 2.11 Giao diện Matlab 16 Hình 4.1 Sơ đồ khối tồn hệ thống .20 Hình 4.2 Lưu đồ giải thuật phát cháy 21 Hình 4.3 Camera Logitech C905 .22 Hinh 4.4 Ảnh thu nhận từ camera kết nối với matlab 23 Hình 4.5 Ảnh gốc biến đổi Fourier chiều ảnh .24 Hình 4.6 Ảnh khơng khói biến đổi Fourier chiều ảnh 25 Hình 4.7 Ảnh có khói biến đổi Fourier chiều ảnh .25 Hình 4.8 Ảnh thu nhận từ camera chuyển sang ảnh xám 26 Hình 4.9 Kênh màu đỏ ảnh 27 Hình 4.10 Ảnh sau trừ kênh màu đỏ với ảnh xám 27 Hình 4.11 Ảnh sau lọc chuyển sang nhị phân 28 Hình 4.12 Ảnh sau loại bỏ đối tượng nhỏ .28 Hinh 4.13 Ảnh phần tử đỏ lấy từ hai khung ảnh liên tiếp 29 Hình 4.14 Ảnh cho thấy khác biệt khung 29 Hình 4.15 Giao diện chương trình .30 Hình 4.16 Hộp điều khiển cảnh báo 31 Hình 4.17 Sơ đồ nguyên lý vi điều khiển kết nối Module Sim 800L 32 Hình 4.18 Sơ đồ nguyên lý mạch nguồn LM2596 33 Hình 4.19 Mạch vi điều khiển kết nối với Module Sim 800L 34 DANH SÁCH CÁC BẢNG Bảng 2.1 Thông số kỹ thuật Arduino Uno 12 viii Hình 4.18 Sơ đồ nguyên lý mạch nguồn LM2596 Sơ đồ nguyên lý khối nguồn LM2596S thể (Hình 4.5) Trong nguồn cấp cho mạch dòng điện chiều có điện áp khoảng - 40V Điện áp đầu vào vào chân LM2596S Tụ không phân cực C4 tụ phân cực C5 có nhiệm vụ lọc nhiễu làm phẳng điện áp trước vào LM2596S Chân LM2596S nối mass Chân ngõ với mức điện áp 5V Tụ không phân cực C6 tụ phân cực C7 tương tự tụ C4 C5 có nhiệm vụ lọc nhiễu làm ổn định điện áp ngõ LED báo D1 sáng cấp nguồn cho mạch hạn dòng điện trở R2 4.3.4 Mạch vi điều khiển kết nối với Module Sim 800L 33 Hình 4.19 Mạch vi điều khiển kết nối với Module Sim 800L Mạch dùng Arduino Uno R3 sử dụng chip ATMega328 nuôi cáp Port nối tiếp USB cắm trực tiếp vào laptop, để kết nối với phần mềm Matlab Nguồn 7.4V viên pin cell 3.8V dùng để cấp nguồn cho Module Sim 800L Khi Matlab phát cháy, Arduino nhận tín hiệu điều khiển Module Sim 800L thơng báo điện thoại Trên LM2596 có tích hợp Led đoạn hiển thị giá trị 4V thể giá trị nguồn ổn định cho Module Sim Khi khởi động thiết bị, ta nên đợi phút đến đèn Module Sim nháy 3s lần thiết bị ổn định Pin tháo rời đem sạc hết pin 4.4 Khảo nghiệm độ ổn định hệ thống 34 4.4.1 Phát khói, lửa Bảng 4.1 Khảo nghiệm hệ thống phát cháy Lần Ngày Tình Trạng Đêm Khói Lửa Kết phát cháy Ngày Ít Khơng Có Khơng Có Ngày Rất Ít Nhỏ Khơng Có Ngày Ít Rất Nhỏ Khơng Có Ngày Nhiều Nhỏ Có Ngày Ít Lớn Có Đêm Ít Khơng Có Khơng Có Đêm Ít Nhỏ Có Đêm Ít Lớn Có Đêm Nhiều Nhỏ Có 10 Đêm Nhiều Lớn Có Với: Tình trạng khói “Rất Ít”: Khói chiếm 30% khung ảnh Tình trạng lửa “Rất Nhỏ”: Lửa chiếm 30% khung ảnh Nhận xét: - Từ kết cho thấy chương trình có khả nhận diện đám cháy tương đối tốt điều kiện khác nhau, nhiên trường hợp có vật thể nhiễu, chương trình nhận diện sai đám cháy, lý mức ngưỡng thiết lập cứng chương trình nên chưa thể tối ưu trường hợp Ngoài có khả camera chụp bị rung lắc yếu tố điều kiện ngoại cảnh thời tiết dẫn đến chương trình khơng thể phát xác khói lửa Độ xác vào ban đêm cao giảm vào điều kiện ban ngày - Đối với tình trạng khói thấp lửa nhỏ: chương trình khơng phát đám cháy Đây hạn chế đề tài, nguyên nhân ngưỡng chọn 35 chưa đáp ứng điều kiện, giảm ngưỡng nhỏ dẫn tới cảnh báo giả khơng thực có cháy 4.4.2 Phát cảnh báo qua điện thoại Bảng 4.2 Khảo nghiệm thiết bị điều khiển cảnh báo Nhắn tin Gọi Điện Khơng Có Kết phát cháy Khơng Có Khơng Khơng Rất Ít Nhỏ Khơng Có Khơng Khơng Ngày Ít Rất Nhỏ Khơng Có Khơng Khơng Ngày Nhiều Nhỏ Có Có Có Ngày Ít Lớn Có Có Có Đêm Ít Khơng Có Khơng Có Khơng Khơng Đêm Ít Nhỏ Có Có Có Đêm Ít Lớn Có Có Có Đêm Nhiều Nhỏ Có Có Có 10 Đêm Nhiều Lớn Có Có Có Tình Trạng Lần Ngày/ Đêm Khói Lửa Ngày Ít Ngày Thơng Báo Với: Tình trạng khói “Rất Ít”: Khói chiếm < 10% khung ảnh Tình trạng khói “Ít”: Khói chiếm < 30% >10% khung ảnh Tình trạng khói “Nhiều”: Khói chiếm >30% khung ảnh Tình trạng lửa “Rất Nhỏ”: Lửa chiếm 30% khung ảnh Nhận xét: Hộp điều khiển cảnh báo dùng Module Sim 800L hoạt động ổn định, với kết phát cháy, khơng có tượng sóng, bị nhiễu, thơng báo giả Chương 36 KẾT LUẬN VÀ ĐỀ NGHỊ Quá trình thực kết hợp với lý thuyết sở tìm hiểu được, đề tài đạt số kết sau: 5.1 Kết đạt - Tìm hiểu vận dụng phương pháp phát cảnh báo cháy - Chương trình xây dựng phần mềm Matlab 2015a, giao diện thiết kế Guide Matlab đơn giản, dễ sử dụng - Xây dựng lưu đồ thuật toán xử lý ảnh - Camera kết nối trực tiếp với Matlab 2015a, hình ảnh thu nhận hiển thị khung ảnh lên GUI ổn định - Ứng dụng phương pháp Fourier vào tính tốn lượng ảnh - Nhận dạng màu đỏ, so sánh khung ảnh liên tiếp để phát chuyển động - Giao tiếp Arduino Matlab qua cổng COM - Thiết kế hộp điều khiển cảnh báo cháy dùng Module Sim 800L, xây dựng chương trình điều khiển cảnh báo cháy - Kết khảo nghiệm cho thấy hệ thống hoạt động tương đối xác ổn định 5.2 Hướng phát triển đề tài - Chất lượng hình ảnh phụ thuộc nhiều vào độ phân giải camera Trong phạm vi đề tài sử dụng camera có độ phân giải 640x480, chọn camera có độ phân giải cao cho độ xác cao Tuy nhiên với độ phân giải cao đòi hỏi hệ thống máy tính có tốc độ cao đường truyền tín hiệu nhanh - Việc xử lý ảnh Matlab thực chậm Nên chuyển sang sử dụng Open CV sử dụng ngơn ngữ C dựa thuật tốn xây dựng matlab phát triển tiếp đề tài 37 - Do giới hạn thời gian đề tài tốt nghiệp nên dừng lại mơ hình Ta đưa vào ứng dụng thực tế nâng cấp camera có độ phân giải cao gắn tháp canh rừng, hệ thống phát cháy rừng sớm báo cho kiểm lâm đơn vị có trách nhiệm để dập tắt kịp thời trước lửa tầm kiểm soát - Khi đưa vào giám sát IP Camera hệ thống phục vụ tốt công tắc phát cảnh báo cháy bên lẫn bên ngồi tòa nhà TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt 38 Nguyễn Hoàng Hải, Nguyễn Khắc Kiểm, Nguyễn Trung Dũng Trần Hà Đức, 2003 Lập trình MATLAB dành cho sinh viên kỹ thuật NXB Khoa Học Kỹ Thuật, Hà Nội, 308 trang Tài liệu tiếng Anh Dogan Ibrahim, 2008 Newnes Advanced PIC.Microcontroller Projects in C Mar Newnes, USA , 534 pages Patrick Marchand and O Thomas Holland, 2003 Graphics and GUIs with MATLAB CHAPMAN and HALL/CRC, USA, 524 pages Image Acquisition Toolbox Image Processing Toolbox Tài liệu Internet Data sheet linh kiện điện tử - Nguồn internet http://www.alldatasheet.com/ Trang chủ Matlab http://www.mathworks.com/ PHỤ LỤC Code xử lý ảnh Matlab: function varargout = G1(varargin) % G1 MATLAB code for G1.fig % G1, by itself, creates a new G1 or raises the existing 39 % singleton* % % H = G1 returns the handle to a new G1 or the handle to % the existing singleton* % % G1('CALLBACK',hObject,eventData,handles, ) calls the local % function named CALLBACK in G1.M with the given input arguments % % G1('Property','Value', ) creates a new G1 or raises the % existing singleton* Starting from the left, property value pairs are % applied to the GUI before G1_OpeningFcn gets called An % unrecognized property name or invalid value makes property application % stop All inputs are passed to G1_OpeningFcn via varargin % % *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one % instance to run (singleton)" % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help G1 % Last Modified by GUIDE v2.5 31-May-2018 08:03:36 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, 'gui_Singleton', gui_Singleton, 'gui_OpeningFcn', @G1_OpeningFcn, 'gui_OutputFcn', @G1_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 % - Executes just before G1 is made visible function G1_OpeningFcn(hObject, eventdata, handles, varargin) 40 % 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 G1 (see VARARGIN) % Choose default command line output for G1 handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes G1 wait for user response (see UIRESUME) % uiwait(handles.figure1); % - Outputs from this function are returned to the command line function varargout = G1_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 on button press in pushbutton1 function pushbutton1_Callback(hObject, eventdata, handles) % 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) global vid error=2; s=25; sss=serial('COM4','BaudRate',9600); vid=videoinput('winvideo',2,'YUY2_640x480');% take video input triggerconfig(vid,'manual'); % after triggering only we get video set(vid,'FramesPerTrigger',1); %only frame per trigger set(vid,'TriggerRepeat', Inf); %repeating trigger infinite timf set(vid,'ReturnedColorSpace','rgb');% colour space used is rgb i=0; m=0; j=0; u1=0; 41 u2=0; k=0; v=0; ss=0; tg = 0; ssum = 0; start(vid);% video is started %adjusting for background noise s=(s*(error+100))/100;% calculate sensitivity while (1) prev1 = getsnapshot(vid);%take video snpshot as previous one m = m+1; trigger(vid); temp = getdata(vid,1); axes(handles.axes4); imshow(temp); %clear sm; for m = : trigger(vid); temp = getdata(vid,1); %subplot(1,2,1); %imshow(temp); %show the frame on axes prev2 = getsnapshot(vid); %get current frame switch m case grayImage = prev2; gray = rgb2gray(grayImage); F = fft2(gray); magImage = abs(F).^2; u1 = sum(magImage(:)); case grayImage = prev2; gray = rgb2gray(grayImage); F = fft2(gray); magImage = abs(F).^2; u2 = sum(magImage(:)); end if m == n1 = u1 - u2; n2 = u2 - u1; if n1 > 0.7e+14 k = 0; set(handles.tkhoi,'String','Có'); while (1) 42 prev1 = getsnapshot(vid);%take video snpshot as previous one %clear sm; diff_im0 = imsubtract(prev1(:,:,1), rgb2gray(prev1)); diff_im0 = medfilt2(diff_im0, [3 3]); diff_im0 = im2bw(diff_im0,0.18); diff_im0 = bwareaopen(diff_im0,20); bw = bwlabel(diff_im0, 8); c = diff_im0; i = 0; i = i+1; clear sm; %clc for i = : trigger(vid); temp1 = getdata(vid,1);% take video data axes(handles.axes4); imshow(temp1); %subplot(1,2,1); %imshow(temp1); %show the frame on axes prev2 = getsnapshot(vid); %get current frame diff_im = imsubtract(prev2(:,:,1), rgb2gray(prev2)); diff_im = medfilt2(diff_im, [3 3]); diff_im = im2bw(diff_im,0.18); diff_im = bwareaopen(diff_im,20); bw = bwlabel(diff_im, 8); %subplot(3,2,2); %imshow(diff_im); b = diff_im; a = c-b; %subplot(3,2,3); %imshow(a); c = b; switch i case imwrite(a,'A1.jpg'); case imwrite(a,'A2.jpg'); case imwrite(a,'A3.jpg'); case imwrite(a,'A4.jpg'); end a1 = imread('A1.jpg'); a2 = imread('A2.jpg'); 43 a3 = imread('A3.jpg'); a4 = imread('A4.jpg'); s1 = imabsdiff(a1,a2); s2 = imabsdiff(a3,a4); s3 = imabsdiff(s1,s2); ssum = sum(sum(s3))/100; if ssum > ((s/10)*100*50)%check if difference axes(handles.axes5); imshow(b); tg = tg+1; if tg < set(handles.ttg,'String',datestr(now)); fopen(sss); readData=fscanf(sss) %reads "Ready" writedata=uint16(500); %0x01F4 fwrite(sss,writedata,'uint16') %write data fclose(sss); set(handles.tnhan,'String','Da gui'); set(handles.tgoi,'String','Da goi'); end if ssum > ((s/10)*100*100) set(handles.tlua,'String','Lua to'); else set(handles.tlua,'String','Lua nho'); end else k = k+1; c1 = imread('denvl2.jpg'); axes(handles.axes5); imshow(c1) set(handles.tlua,'String','Khơng có'); %subplot(1,2,2); %imshow(c1); %ss = 100; end end if k > 200 break end end else c1 = imread('denvl2.jpg'); 44 axes(handles.axes5); %hImage=image(zeros(640,640,3),'Parent',handles.axes4); imshow(c1); %subplot(1,2,2); %imshow(c1); m = 0; tg = 0; set(handles.tkhoi,'String','Không có'); set(handles.tlua,'String','Khơng có'); set(handles.tnhan,'String',''); set(handles.tgoi,'String',''); end end end j = j+1; if j > 100 %break end end stop(vid); Code Arduino: ///////////////////////////////////////////////////////////////// // CHƯƠNG TRÌNH ĐIỀU KHIỂN GPIO ARDUINO // SỬ DỤNG MODULE SIM 900 // ///////////////////////////////////////////////////////////////// // CÁCH NỐI CHẦN NHƯ SAU : // // BOAR ARDUINO MODULE SIM 900 // // 5V VCC // // GND GND // // TX // // RX // ///////////////////////////////////////////////////////////////// // CÁCH SỬ DỤNG // 45 // // THAY ĐỔI SỐ ĐIỆN THOẠI CỦA BẠN VÀO "SO_DT_CUA_BAN" // // NẠP CHƯƠNG TRÌNH CHO ARDUINO // // MỞ SERIAL TERMINAL VÀ CHỌN 9600 BAUND ĐỂ XEM SỐ GỌI TỚI // // DÙNG ĐIỆN THOẠI VỚI SỐ VỪA THAY ĐỔI, GỌI TỚI SIM 900 // // NẾU LED 13 ĐỔI TRẠNG THÁI LÀ BẠN ĐÃ LÀM ĐƯỢC ///////////////////////////////////////////////////////////////// #include "SoftwareSerial.h" #include "ktphuhung.h" //SoftwareSerial mySerial(2,3); ktphuhung sim900a; int gia_tri_cam_bien=0; int i = 0; void setup() { // // THAY CHÂN ARDUINO MUỐN ĐIỀU KHIỂN BẰNG CUỘC GỌI TẠI ĐÂY sim900a.cai_dat_pin_goi(13); // THAY SỐ CỦA BẠN TẠI ĐÂY // MẶC ĐỊNH BẠN CÓ THỂ CHO SỐ ĐIỆN THOẠI sim900a.cai_dat_so_dt("","","","","01639271793"); // THAY MÃ ĐIỀU KHIỂN BẬT TẮT BẰNG TIN NHẮN CỦA BẠN TẠI ĐÂY // CÁC CHÂN CÓ THỂ ĐIỀU KHIỂN GỒM // 4-5-6-7-8-9-10-11-12-13 // LƯU Ý MÃ DÀI TỐI ĐA 20 KÝ TỰ VÀ TỐI THIỂU KÝ TỰ // THAY ĐỔI MÃ THEO CÚ PHÁP SAU : // sim900a.pinx("MÃ BẬT","MÃ TẮT","MÃ KIỂM TRA"); sim900a.pin4("4bat","4tat","4kt"); sim900a.pin5("5bat","5tat","5kt"); sim900a.pin6("6bat","6tat","6kt"); sim900a.pin7("7bat","7tat","7kt"); sim900a.pin8("8bat","8tat","8kt"); sim900a.pin9("9bat","9tat","9kt"); sim900a.pin10("10bat","10tat","10kt"); sim900a.pin11("11bat","11tat","11kt"); sim900a.pin12("12bat","12tat","12kt"); sim900a.pin13("13bat","13tat","13kt"); pinMode(A5,INPUT_PULLUP); 46 pinMode(7,INPUT_PULLUP); digitalWrite(7,HIGH); sim900a.init(); Serial.begin(9600); Serial.println("Ready"); } void loop() { sim900a.start(); if (Serial.available() > 0) { i = i+1; if (i < 15){ sim900a.smsbegin("0982962714"); sim900a.smscontent("Co Chay"); sim900a.smssend();} else if ( 15