Tải bản đầy đủ - 0 (trang)
2 Hướng phát triển của đề tài

2 Hướng phát triển của đề tài

Tải bản đầy đủ - 0trang

-



Do giới hạn thời gian của một đề tài tốt nghiệp nên nó chỉ dừng lại ở mơ hình.



Ta có thể đưa vào ứng dụng thực tế khi nâng cấp camera có độ phân giải cao gắn trên

một tháp canh ở trong rừng, hệ thống sẽ phát hiện cháy rừng sớm và báo cho các kiểm

lâm cũng như các đơn vị có trách nhiệm để dập tắt kịp thời trước khi ngọn lửa ngồi

tầm kiểm sốt.

-



Khi đưa vào giám sát trên các IP Camera hệ thống có thể phục vụ tốt công tắc



phát hiện cảnh báo cháy bên trong lẫn bên ngồi các 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 và 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

1.



Dogan Ibrahim, 2008. Newnes Advanced PIC.Microcontroller Projects in C



Mar. Newnes, USA , 534 pages.

2.



Patrick Marchand and O. Thomas Holland, 2003. Graphics and GUIs with



MATLAB. CHAPMAN and HALL/CRC, USA, 524 pages.

3.



Image Acquisition Toolbox



4.



Image Processing Toolbox



Tài liệu Internet

Data sheet các 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 1 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 = 1 : 2

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 1

grayImage = prev2;

gray = rgb2gray(grayImage);

F = fft2(gray);

magImage = abs(F).^2;

u1 = sum(magImage(:));

case 2

grayImage = prev2;

gray = rgb2gray(grayImage);

F = fft2(gray);

magImage = abs(F).^2;

u2 = sum(magImage(:));

end

if m == 2

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 = 1 : 4

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 1

imwrite(a,'A1.jpg');

case 2

imwrite(a,'A2.jpg');

case 3

imwrite(a,'A3.jpg');

case 4

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 < 2

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

//

//

2

TX

//

//

3

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 5 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 3 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
delay(100);

sim900a.call("0982962714");

}}}



47



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

2 Hướng phát triển của đề tài

Tải bản đầy đủ ngay(0 tr)

×