II Thiết kế và thi công mô hình
2 Nguyên Lý Hoạt Động
Dây chuyền bắt đầu hoạt thì sản phẩm sẽ được đưa vào từ bang tải theo chiều mũi tên số 1. Khi vật được đưa vào thì sẽ bị cảm biến phát hiện răcảm biến ở mũi tế số 3). Ngay khi cảm biến phát hiện ra vật băng tải sẽ dừng lại, sau thới gian 1 giây khi bang tải dừng lại camera (mũi tên số 4) sẽ chụp hình vật đó , hình ảnh vừa thu được sẽ được camera chuyển vào chương trình matlab, tại đây matlab sẽ xử lý hình ảnh, phân tích và đưa hình ảnh vào mạng noron đã được học trước đó , mạng noron sẽ cho ta nhận dạng đó là vật vuông, tròn hay tam giác, rồi từ đó matlab sẽ gửi xuống PLC tín hiện vật đó hình dạng thế nào . sau 2 giây để camera chụp hình thì băng tải chạy tiếp và đưa vật ra khỏi camera theo chiều mũi tên số 2.
Hình 2.2.1 hoạt động của mô hình
• Giao diện của chương trình
Hình 2.2.2 giao diện của giao tiếp
Hình 2.3.1 sơ đồ khối
Khối thiết bị trường là cảm biến phát hiện ra có vật thì thông qua PLC sẽ truyền cho matlab trên máy tính biết đã có vật ở vị trí , lúc này máy ảnh sẽ chụp hình và đưa vào chương trình để phân , nhận dạng ra vật đó và chuyền ngược trở lại cho PlC bào đó là vật gì, từ đó PLC sẽ điều khiển cho cánh tay robot hoạt động. để có thể truyền và nhận dử liệu từ PLC tới máy tính bắt buộc phải thông qua giao tiếp là OPC trong matlab và PC Access để có thể hiểu được nhaụ
3.1 Khối camera
Khi cảm biến được tích cực lên thì lúc này PLC sẽ báo hiệu cho matlab biết là có vật , từ đó matlab sẽ ra lệnh cho camera chụp hình và gửi dữ liệu quay chở lại cho matlab xữ lý.
Camera được dùng ở đây là colorvis.do ở đây ta không cần tới chất lượng của ảnh tốt nên chọn loại camera này để nó sẽ cho ra ảnh 480x640x3,điều này là rất tích hợp với mô hình.
3.2 Khối cảm biến
Sử dụng cảm biến quang E3T – FT11 để phát hiện vật. khi có vật thì cảm biển sẽ tích cực lên mức 1. đay
Hình 2.3.3 hình dáng và hoạt động của cảm biến
Hình dạng của cảm biến E3T-FT11. Cảm biến quang này gồm 1 con thu và 1 con phát. Khi không có vật đèn bào sẽ sáng lên và đưa ra tín hiệu là mức thấp. khi có vật đi qua đèn báo tắt , lúc này dây tín hiệu sẽ lên mức 1.
3.3 Khối máy tính
Máy tính sẽ liên kết với camera và webcam thông qua cổng USB, máy tính là trung tâm của điều khiển, bằng phần mềm matlab, đọc tính hiệu được gửi về từ camera và xữ lý dữ liệu để đưa ra kết quả phân biệt vật xuống PLC. Máy tính liên kết với PLC qua giao thức có trong matlab đó là OPC.
3.4 Khối PLC
PLC nhận tín hiệu từ cảm biến, khi cảm biến tích cực thì PLC sẽ báo cho máy tính thông qua giao thức liên kết là PC Access. Sau khi máy tính xử lý xong thì PLC sẽ nhận được giá trị nhận dạng của vật vừa được phát hiện và từ đó PLC sẽ điều khiển cho cánh tay robot đi đúng hướng.
4 Học Và Huấn Luyện Mạng Noron
Hình 2.4.1 ma trận ngõ vào
Đây là ma trận thực tế được đưa vào mạng noron để học.ở đây khoanh tròn 1 là một phần của ma trận, ma trận này có kích thước 4800x225 ở đây nghĩa là mổi ảnh mẫu đã tạo ra ma trận 4800x1 như vậy thì mổi 1 cột của khoanh tròn 2 là một ảnh lấy mẫu, 225 ở đây có nghĩa là có 225 ảnh mẫụ
Từ những hình đã được chụp từ webcam làm ảnh mẫụ ta phải biến những hình ảnh này thành những ma trân để đưa vào mạng noron để học. hình ảnh của webcam thu được là 480x640x3. Sau đây là các bước làm:
- Đọc ảnh được lưu:
A=imread('C:\Users\Admin\Documents\Youcam\hinh tron\Snapshot_20130511_18.JPG');% 480x640x3
- Chuyển đổi ảnh màu thành ảnh xám J = rgb2gray(A);%tao ra ảnh 480x640
- Chuyển đổi ảnh xám thành ảnh nhị phân H = im2bw(J,0.15);%ảnh 480x640
- Do kích thước của ảnh quá lớn nên cần phải giảm dung lượng ảnh xuống 8 lần cho dể xử lý
G = imresize(H,0.125);% ảnh 60x80
- Lọc nhiểu ảnh
K=bwmorph(G,'branchpoints');%ảnh 60x80 Lệnh bwmorph được mô tả như sau:
ảnh chúng ta thu được bây giờ là ảnh nhị phân với kích thước 60x80, tổng số điểm ảnh là 4800 điểm ảnh, mục đích của chúng ta là đưa về ma trận 4800x1 để tiện xử lý.
- Tạo ma trận điểm ảnh là 4800x1 p=reshape(N,4800,1);% ảnh 4800x1
- Gán ma trận ban đầu ngovao=p
- Khi đã tạo ra được ma trận 4800x1 thì chúng ta bắt đầu ghép ma trận ngovao=horzcat(ngovao,p);
+ ở lần đâu tiên ta sẽ gán ma trận ban đầu mà chưa ghép ma trận. ở các lần sau, đổi hình lần lượt không gán ma trận ban đầu nữa mà tiến hành ghép ma trận đâu tiên với ma trận saụ Cứ làm như vậy cho tới khi hết ảnh là chúng ta đã có
4.2 Tạo ma trận dữ liệu ra
Hình 2.4.2 ma trận ngõ ra của mạng noron
ở khoanh tròn 1 là giá trị ngõ ra của hình tròn. Vậy tương ứng với cột thứ nhất của ma trận đâu vào, mạng noron sẽ huấn luyện làm sao để cho ra cột thứ nhất ở khoanh tròn 1. ở đây nghĩa là tương ứng 1 cột ngõ vào là 1 cột ngõ rạ Khoanh tròn 2 thể hiện là 1 dãy các cột ban đâu là hình tròn. ở khoanh tròn 3 là mà trận ra 3x225 tương ứng với ngõ vào là 4800x225.
Hình 2.4.3 ma trận ngõ ra của mạng noron
Dể phân biệt hình tròn với hình khác thì, ở khoanh tròn 1 là hình tròn còn khoanh tròn 2 là hình tam giác.
Hình 2.4.4 chọn hình thức học mạng noron
Vào trong “Command Window” trong giao diện matlab gõ lệnh “ nnstart”
Lúc đấy sẽ hiện ra cho chúng ta thanh công cụ để tạo ra mạng noron. ở đây ta chọn mạng noron là “Pattern Recognition Tool”
Hình 2.4.5 giớ thiệu về mạng noron Nhấn Next
Nhấn vào hình tròn 1 để chọn ngõ vào mà bạn đã tạo ra trước đó. Nhấn hình tròn thứ 2 để chọn ngõ ra đã được tạo trước đó. Khi đã chọn ngõ và ra phù hợp thì lúc đó nút nhấn “Next” sẽ được hiện lên
Hình 2.4.7 chọn ma trận ngõ vào Chọn ngõ vào mà đã được tạo trước đó rồi nhấn Finish
Hình 2.4.8 chọn ma trận ngõ ra
Chọn ngõ ra đã được tạo trước đó. Nếu ma trận ngõ ra không quá lớn thì khung được khoanh 2 ô tròn sẽ hiển thị lên giá trị của nó.
Hình 2.4.9 chọn tỉ lệ học mạng noron Nhấn “Next” qua
Hình 2.4.10 giới thiệu về hình thức của mạng
Chọn có bao nhiêu lớp ấn mà bạn muốn. nhìn vào mạng noron chúng ta thấy có 4800 ngõ vào, 10 lớp ẩn và 3 ngõ rạ
Hình 2.4.11 học mạng noron
Nhấn vào nút “Train” được khoanh tròn để cho mạng Noron học. khi học xong ở ô tròn “%E”xuất hiện 3 giá trị, nếu 3 giá trị này tiến tới 0 thì mạng noron được huấn luyện là tốt. còn nếu giá trị nay mà lớn hơn 2 thì tốt nhất mạng noron được học lại cho đến khi đạt được giá trị tốt nhất.
Hình 2.4.12 mạng noron đang được học Quá trình đang được học
Ô tròn “Train Again” sẽ được nhấn khi bạn muốn học lại chương trình,nếu không thì Next quạ
Hình 2.4.14 kết quả của việc học mạng noron
ở ô tròn 1 nếu bạn muốn xem tất cả các lệnh trong quá trình huấn luyện mạng noron thì nhấn nút ô tròn 1.ở ô tròn 2, nếu kết quả huấn luyện mạng noron bạn thấy là tốt thì khi ấy hãy lưu kết quả đó để sau này lấy nó ra sử dụng. ô tròn 3 là chọn các kết quả muốn lưụ
Hình 2.4.15 chương trình mạng noron
ở ô tròn 1 thể hiện các lệnh và quá trình chúng ta vừa tạo mạng noron, cái này chỉ được hiện ra khi nhấn nút “simple script” ở hình trước đó. ở ô thứ 2 là hiển thị các mục khi bạn nhấn nút “Save Result” ở hình trước đó. Khi muốn lưu mạng noron vừa tạo được thì hãy nhấn nút thứ 3 để lưu nó lạịnếu trong khung thứ 2 có những giá trị không muốn lưu thì chung ta hãy nhâp sáng lên và nhấn nút 4. Khi lưu file lại thì nó sẽ có dạng giống file trong hình số 5.
5 Phần Mềm
Khi cảm biến được tích cực thì máy chụp hình sẽ chụp hình ảnh , đưa hình vào matlab để xử lý ảnh, quá trình xử lý ảnh sẽ phân biệt được hình dạng của vậy thể , và chuyền dữ liệu xuống cho PLC.
Khi có ảnh được đưa vào matlab thì khi đó ảnh sẽ được chuyển ảnh màu sang ảnh xám để thuận lợi cho việc lấy mẫu và đưa vào mạng noron. Sau khi có ảnh xám rồi thì phải chuyển ảnh nhị phân, do ảnh nhị phân có dung lượng ảnh quá lơn nên người ta phải giảm dung lượng ảnh xuống, rồi tạo ma trận dữ liệu của ảnh. Khi đó bắt đâu đưa vào mạng noron để kiểm tra, và đưa ra được phân biệt vật rồi chuyền xuống PLC cho PLC
IIỊ Thực Nghiệm
1 Thiết Lập Thực Nghiệm
Chương trình nhằm mục đích xác đinh được đâu là vật hình vuông đâu là vật hình tròn và đâu là tam giác,qua lấy hình ảnh chup được từ camera và phân tích dữ liệu nhận đượcvà đưa vào mạng noron vừa được học , mạng noron sẽ xuất ra dữ liệu để phân biệt hình dạng của vật thể.
2 Kết Quả
Sau một thời gian tìm hiểu và nghiên cứu về mạng noron, em đã huấn luyện thành công mạng noron và tiến hành đưa vào thực nghiệm vật thể thì kết quả cho ra là chính xác so với vật thể thực. từ đó cho thấy về cơ bản đã đáp ứng được như cầu về đề tài đạt ra , đó là phân loại sản phẩm dùng xử lý ảnh và mạng noron.
3 Đánh Giá
Đề tài về mạng noron còn tương đối mới mẽ, tìm tài liệu về lý thuyết về mạng noron thì khá nhiều tuy nhiên về phần học và luyện mạng noron thì tương đối ít, tuy vậy với sự cố gắng và sự giúp đỡ của thầy Lũy em đã thực hiện được đề tài theo đúng kế hoạch.
IV Kết Luận Và Hướng Phát Triển
1 Kết Luận
Với những kết quả đã được trình bày ở trên, và chạy trên mô hình thực tế . có thể đưa ra kết luận sau:
* những điều đã làm được
- Đề tài đáp ứng đúng tiến độ mà nhà trường đưa ra - Phận loại sản phẩm chình xác khoảng 90%
- Kết nối với PLC qua OPC và kết nối với giữa matlab và camera là tốt
- Học và huấn luyện mạng noron đã làm được và đáp ứng yêu cầu
* những điều chưa làm được
- Việc camera chụp hình còn chưa thực sự ổn định
- Camera hiển thị trên màn hình bị đứng khi đọc dữ liệu từ PLC
2 hướng phát triển của đề tài
- Camera không bị đứng hình khi đọc dữ liệu từ PLC
- Phát triển và hoàn thiện trong ứng dụng tự động phục vụ công nghiêp
CHƯƠNG 3 PHỤ LỤC Chương trình chính: global nn mm nn=0; mm=0; test2 chương trình con:
function varargout = test2(varargin)
% TEST2 MATLAB code for test2.fig
% TEST2, by itself, creates a new TEST2 or raises the existing % singleton*.
%
% H = TEST2 returns the handle to a new TEST2 or the handle to % the existing singleton*.
%
% TEST2('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TEST2.M with the given input arguments. %
% TEST2('Propertý,'Valué,...) creates a new TEST2 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before test2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application % stop. All inputs are passed to test2_OpeningFcn via varargin.
%
% *See GUI Options on GUIDÉs Tools menụ Choose "GUI allows only one % instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help test2 % Last Modified by GUIDE v2.5 09-May-2013 16:04:54 % Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Namé, mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @test2_OpeningFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_Statẹ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 test2 is made visiblẹ
function test2_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 test2 (see VARARGIN)
set(handles.vat,'String','');
set(handles.bao,'String','khong co vat'); handles.figure1=gcf;
warning off;
global ngat tin_hieu_1 tin_hieu_2 n m p k
m=0; k=1; n=0; p=0; set(handles.slvuong,'String',0); set(handles.sldagiac,'String',0); set(handles.sltron,'String',0); ngat = 'MicroWin.Project1.USER1.ngat';
handles.da = opcdă'localhost','S7200.OPCServer');
connect(handles.da);
try
handles.data = ađgroup(handles.da,'Group_1');
handles.dataIDS = {ngat};
handles.data_itm = ađitem(handles.data,handles.dataIDS); guidatăhandles.figure1, handles);
set(handles.data,'DataChangeFcn',{@Data_Group_Callback,handles},'UpdateRaté,0);
end
Group_2 = ađgroup(handles.da);
handles.output = hObject;
%global handl %handl=handles;
handles.video = videoinput('winvideó, 1);
set(handles.video,'TimerPeriod', 0.05, ...
'TimerFcn',['if(~isempty(gco)),'...
'handles=guidatăgcf);'... % Update handles
'image(getsnapshot(handles.video));'... % Get picture using GETSNAPSHOT and put it into axes using IMAGE
'set(handles.cameraaxes,''ytick'',[],''xtick'',[]),'... % Remove tickmarks and labels that are inserted when using IMAGE
'else '...
'delete(imaqfind);'... % Clean up - delete any image acquisition objects
'end']);
triggerconfig(handles.video,'manual');
handles.videọFramesPerTrigger = Inf; % Capture frames until we manually stop it
% Update handles structure
guidatăhObject, handles);
guidatăhandles.figure1, handles);
global hand han
hand=handles; han=handles;
% UIWAIT makes test2 wait for user response (see UIRESUME)
uiwait(handles.figure1);
% --- Outputs from this function are returned to the command linẹ
function varargout = test2_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;
function Data_Group_Callback(hObject, eventdata, handles)
global ngat tin_hieu_1 tin_hieu_2 n p m
global hand han k v
%guidatăhObject, handles);
try global nn mm if (nn==0) x = read(handles.data); y = x.Value; drawnow; end end if (y == 1) nn=1; k=0 end if (k==0) clear O; %v=%=1000000; s = videoinput('winvideó, 1); %v=2; %end thuhinh = getsnapshot(s); mm=mm+1 %imwrite(frame,'d.jpg'); %save data for vv=1:v kk=2; end
set(han.bao,'String','co vat,dang xu lý); set(han.vat,'String',' ');
load('C:\Program Files\MATLAB\R2010b\bin\neural');
%I = imread('d.jpg');
J = rgb2gray(thuhinh);
%figure, imshow(frame)%, figure, imshow(J);
H = im2bw(J,0.15); %figure, imshow(H); G = imresize(H,0.25); %figure, imshow(G); K=bwmorph(G,'branchpoints'); figure, imshow(K); %imwrite(K,'t1.bmp'); %N=imread('C:\Users\Admin\Downloads\New folder (2)\t1.bmp'); %figure, imshow(N) o=reshape(K,4800,1); O =net(o)
aa=a*O b=[0 1 0] bb=b*O ccc=[0 0 1] cc=ccc*O if (aa>=bb) if (aa>=cc) đ=aa else đ=cc end else if (bb>=cc) đ=bb else đ=cc end end if (đ==aa) n = n+1;
set(han.vat,'String','hinh tron'); set(han.slvuong,'String',n); write(tin_hieu_1,1); write(tin_hieu_2,1);
set(han.bao,'String','khong co vat');
end
if (đ==bb)
m = m+1;
set(han.vat,'String','hinh tam giac'); set(han.sltron,'String',m);
write(tin_hieu_1,0); write(tin_hieu_2,1);
set(han.bao,'String','khong co vat');
end
if (đ==cc)
p = p+1;
set(han.vat,'String','hinh vuong'); set(han.sldagiac,'String',p); write(tin_hieu_1,1);
write(tin_hieu_2,0);
set(han.bao,'String','khong co vat');
end
k=1; nn=0; stop(s);
end
%handles.output = hObject;
% --- Executes on button press in ngat.
function ngat_Callback(hObject, eventdata, handles)
% hObject handle to ngat (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %global handl
%chup=handles;
start(handles.video);
%chup.video=handles.video;
set(handles.state,'String','camera, mang neural va ket noi OPC thanh cong');
% --- Executes during object creation, after setting all properties.
function cameraaxes_CreateFcn(hObject, eventdata, handles)
% hObject handle to cameraaxes (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 cameraaxes
function state_Callback(hObject, eventdata, handles)
% hObject handle to state (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 state as text
% str2double(get(hObject,'String')) returns contents of state as a double % --- Executes during object creation, after setting all properties.
function state_CreateFcn(hObject, eventdata, handles)
% hObject handle to state (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called