Luan Van Tot Ngiep

153
ĐÈN GIAO THÔNG THÔNG MINH Chương 1 GIỚI THIỆU TỔNG QUÁT VỀ ĐỀ TÀI TỐT NGHIỆP 1.1. Giới thiệu về các ứng dụng cXC xử lý ảnh trong thực tế: Các đề tài nghiên cứu về xử lý ảnh từ năm 1964 đến nay không ngừng phát triển. Chúng được ứng dụng trong kỹ thuật nhằm giải quyết các vấn đề về nâng cao chất lượng thông tin ảnh. Xử lý ảnh ngày nay được ứng dụng trong nhiều lĩnh vực. Trong y học, các thuật toán được ứng dụng để nâng cao độ tương phản, mã hóa các mức sáng thành các màu để nội suy ảnh X-quang…Các nhà thiên văn học, dùng kỹ thuật này nhằm tách các nhiễu thu được từ vệ tinh, tăng độ tương phản cho ảnh chụp để nhìn thấy được các chi tiết mà mắt thường khó phân biệt được. Trong vật lý, kỹ thuật máy tính nâng cao chất lượng ảnh được ứng dụng trong các lĩnh vực như: plasmas, microscopy điện tử… Đối với ngành điện tử tự động thì xử lý ảnh được ứng dụng trong thực tế như: máy nhìn công nghiệp để kiểm tra sản phẩm, nhận dạng mục tiêu trong quân sự, nhận dạng vân tay, nhận dạng đồng xu, nhận dạng mặt người, cảm biến màu, theo dõi mật độ giao thông… Có thể thấy các đề tài liên quan đến xử lý ảnh, cũng như các ứng dụng của nó trong thực tế thì vô cùng rộng lớn. Tuy nhiên, không phải bất cứ một ứng dụng nào của xử lý ảnh khi đưa vào thực tế cũng dễ dàng, việc làm một ứng dụng hoạt động tốt đó là cả một vấn đề khó khăn bởi các yếu tố ngoại cảnh rất dễ tác động đến công việc xử lý ảnh như: không gian thay đổi, ánh sáng thay đổi, độ Trang 1

Transcript of Luan Van Tot Ngiep

Page 1: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 1GIỚI THIỆU TỔNG QUÁT VỀ ĐỀ TÀI TỐT NGHIỆP

1.1. Giới thiệu về các ứng dụng cXC xử lý ảnh trong thực tế:Các đề tài nghiên cứu về xử lý ảnh từ năm 1964 đến nay không ngừng phát

triển. Chúng được ứng dụng trong kỹ thuật nhằm giải quyết các vấn đề về nâng cao chất lượng thông tin ảnh.

Xử lý ảnh ngày nay được ứng dụng trong nhiều lĩnh vực. Trong y học, các thuật toán được ứng dụng để nâng cao độ tương phản, mã

hóa các mức sáng thành các màu để nội suy ảnh X-quang…Các nhà thiên văn học, dùng kỹ thuật này nhằm tách các nhiễu thu được từ vệ tinh, tăng độ tương phản cho ảnh chụp để nhìn thấy được các chi tiết mà mắt thường khó phân biệt được. Trong vật lý, kỹ thuật máy tính nâng cao chất lượng ảnh được ứng dụng trong các lĩnh vực như: plasmas, microscopy điện tử…

Đối với ngành điện tử tự động thì xử lý ảnh được ứng dụng trong thực tế như: máy nhìn công nghiệp để kiểm tra sản phẩm, nhận dạng mục tiêu trong quân sự, nhận dạng vân tay, nhận dạng đồng xu, nhận dạng mặt người, cảm biến màu, theo dõi mật độ giao thông…

Có thể thấy các đề tài liên quan đến xử lý ảnh, cũng như các ứng dụng của nó trong thực tế thì vô cùng rộng lớn. Tuy nhiên, không phải bất cứ một ứng dụng nào của xử lý ảnh khi đưa vào thực tế cũng dễ dàng, việc làm một ứng dụng hoạt động tốt đó là cả một vấn đề khó khăn bởi các yếu tố ngoại cảnh rất dễ tác động đến công việc xử lý ảnh như: không gian thay đổi, ánh sáng thay đổi, độ tương phản của ảnh cần xử lý với môi trường không gian là không cao…

1.2. Nội dung đề tài và các ứng dụng đã có trước đó:1.2.1. Nội dung đề tài:

Yêu cầu của đề tài tốt nghiệp bao gồm việc thiết kế và chế tạo hoàn thiện mô hình tại một ngã tư có hai chiều lưu thông, có mô hình đèn giao thông và camere được bố trí hợp hợp lý.

Mô hình là những chiếc xe được đặt tại hai chiều luư thông của một ngã tư, ta sắp xếp những chiếc xe đó ứng với nhiều trường hợp như : mật độ thưa, mật độ bình thường, và mật độ cao, để ta xử dụng công cụ matlab chụp lại và đư ra kết quả phân tích. Sau khi phân tích tín hiệu sẽ được gửi xuống để thực hiện đặt thời gian cho đèn giao thông.

Tìm hiểu truyền thông máy tính với vi xử lý

Tạo giao diện người dùng.

Trang 1

Page 2: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Tìm hiểu các thuật toán xử lý ảnh, bắt ảnh trên Matlab.

Phải thực hiện được giải thuật và chưong trình để đánh giá được mật độ lưu thông thông qua công cụ matlab.

Tránh được các yếu tố gây nhiễu từ môi trường ngoài như: độ tương phản giữa xe và nền đường không cao.

Sơ đồ hệ thống:

1.2.2. Lý do chọn và làm đề tài “ Đèn giao thông thông minh ”: Như đã nói, cùng với sự phát triển không ngừng của xử lý ảnh thì hàng loạt

các sản phẩm ra đời được ứng dụng rộng rãi trong thực tế. Các đề tài liên quan đến xử lý ảnh trong giao thông đường bộ cũng như đường thủy ngày càng được quan tâm. Nhóm “Mắt thần” gồm các thành viên đang nghiên cứu và công tác tại Trung tâm Công nghệ Mô phỏng – Học viện kỹ thuật quân sự (Bộ Quốc phòng). Với đề tài: “Hệ thống ghi vé tự động và quản lý phương tiện sử dụng công nghệ xử lý và nhận dạng ảnh” (đã đoạt Giải nhì trong cuộc thi trí tuệ Việt Nam 2006). Cùng theo đó nhóm cũng đã và đang nghiên cứu hệ thống quản lý trật tự giao thông, thống kê được lưu lượng phương tiện qua lại trên đường, đo tốc độ, chụp lại hình phương tiện vi phạm trật tự giao thông như: vượt đèn đỏ, đi sai làn đường.

Đề tài của Lê Quốc Anh, đến từ Viện tin học Pháp ngữ Hà Nội (dự thi TTVN 2005) với đề tài “Giải pháp giám sát giao thông”. Tác giả đã mô tả hệ thống có khả năng: biết được số lượng xe trên đường, vận tốc xe, chiều dài hàng đợi khi xảy ra ách tắc…

Thế giới đã phát triển các chương trình đếm xe và tính vận tốc tự động bằng máy tính từ lâu như hệ thống giám sát giao thông bằng công nghệ xử lý ảnh của phòng thí nghiệm máy tính của hãng IBM, hệ thống đếm xe bằng xử lý ảnh máy tính của trường đại học Berkeley (Mỹ)…

Trong thực tế chúng ta thấy, tại các ngã tư đèn xanh đèn đỏ có những lúc phía bên đường chỉ có vài phương tiện tham gia giao thông. Phía bên còn lại thì mật độ lưu thông thì quá cao nhưng vẫn phải chờ cho thời gian đèn xanh đỏ được đặt cố định rồi mới được lưu thông tiếp nhiều khi còn gây ra ách tắc giao thông do những người không y thức nóng lòng muốn qua đường nhanh. Vì vậy đề tài nghiên cứu “ Đèn giao thông thông minh “ được đưa ra với mục đích đánh giá được mật độ lưu thông tại các ngã tư nhằm giải quyết được vấn đề nêu trên. Theo em nghĩ đây là một đề tài hết sức mới mẻ và thử sức sinh viên.

Do đây là một đề tài mới mẻ và thời gian có hạn nên trong quá trình ngiên cứu còn gặp rất nhiều khó khăn trong việc xử lý. Em hy vọng rằng đề tài này sẽ

Trang 2

Page 3: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

được các bạn sinh viên ham thích và sẽ phát triển để đề tài ngày càng hoàn thiện hơn.

1.3. Khó khăn: Ảnh hưởng từ độ tương phản giữa xe và nền đường:

Vì nền đường thì cố định. Nhưng các loại xe lưu thông trên đường thì đa dạng. Do đó vấn đề là sẽ làm như thế nào nếu như giữa xe và nền đường có màu sắc gần giống nhau?Chẳng hạn:

Nếu giữa chiếc xe và không gian quanh nó có độ tương phản cao. Ví dụ: Xe trắng so với nền đường màu đen (độ tương phản cao).

(a)

(b)

(c)Hình 1.1 (a) Ảnh chụp từ webcam, (b) ảnh đa cấp xám, (c) ảnh trắng đen

Trang 3

Page 4: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 1.2 Biểu đồ histogram Ví dụ: Xe đỏ so với nền đường màu đen (Độ tương phản khá cao)

(a)

(b)

Trang 4

Page 5: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

(c)Hình1.3 (a) Hình xe màu đỏ chụp từ webcam, (b) Ảnh xám, (c) Ảnh trắng đen.

Nếu độ tương phản giữa chiếc xe với nền đường là thấp? Ví dụ: Xe xanh so với nền đường màu đen (độ tương phản thấp):

(a)

(b)

Trang 5

Page 6: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

(c)Hình 1.4 (a) Xe chụp từ webcam, (b) Ảnh đa cấp xám, (c) Ảnh trắng đen

Hình 1.5 Biểu đồ histogram với xe màu xanh, nền đường màu đen.

? Nhận xét:

Từ biểu đồ histogram hình 1.5. Đối với xe màu xanh, nền đường màu đen rõ ràng có độ tương phản rất thấp (các thành phần histogram hẹp và tập trung ở cuối). Điều này dẫn tới ảnh sau khi chuyển sang trắng đen hình 1.4 (c) là không tốt. Do đó, không thể tính diện tích chiếc xe trong trường hợp này.

Nhiễu bởi ánh sáng môi trường:Ánh sáng sẽ biến thiên theo giờ giấc trong ngày. Hơn nữa, nó còn chịu sự tác động trực tiếp hoặc gián tiếp từ các đối tượng như: xe vào trạm lúc ban đêm sẽ bật đèn, người đi đường chiếu đèn vào, đèn đường…

Trang 6

Page 7: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

1.3.1. Cách giải quyết:Về nhiễu ánh sáng: Trong Matlab có hỗ trợ một công cụ để thực hiện việc san bằng các vùng sáng tối.I = imread('rice.png');imshow(I)

se = strel('disk',12);J = imtophat(I,se);figure, imshow(J)

K = imadjust(J);figure, imshow(K)

Trang 7

Page 8: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Giải quyết độ tương phản giữa không gian nền và xe:Để giải quyết công việc tách xe thì giữa xe và không gian quanh nó phải có

độ tương phản cao.Các phương pháp đã làm thử:

1. Tách màu2. Tách biên

Tuy nhiên, cả hai phương pháp đều không thực hiện được vì kết quả của tách màu và tách biên có tốt hay không là phụ thuộc vào độ tương phản giữa xe và không gian quanh nó. Đối với những xe có màu sắc tạo nên độ tương phản cao so với nền đường thì công việc này không gặp khó khăn, nhưng đối với những xe có màu sắc mà độ tương phản của nó là thấp thì phương pháp này không hiệu quả.

Đối với trường hợp trên ta có cách làm tăng độ tương phản giữa xe và nền đường bằng cách tạo nền đường sao cho có những vạch trắng xen kẽ những vạch đen, và cách làm này rất hiệu quả và phù hợp với bố trí nền đường tại ngã tư là những vạch trắng giảm tốc độ xe.

Hình 1.6 nền đường cho mô hình

Trang 8

Page 9: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 2GIỚI THIỆU VỀ XỬ LÝ ẢNH VÀ MATLAB

2. Giới thiệu cách thức truy cập thông tin trên help của matlab:Cài đặt:

Thực hiện cài đặt matlab 7.0 (hoặc 6.5). Có hai đĩa, một đĩa phần mềm chạy chương trình matlab 7.0 và một đĩa help.Sử dụng:

Có thể vào help để tìm thông tin, tập lệnh liên quan Trực tiếp:

Trong cửa sổ command windows gõ: help “lệnh hay biểu thức liên quan”

Ví dụ:

>> help find Gián tiếp:

Vào menu/help/demos

Demos: một số ví dụ để tham khảo.

Search: kiếm thông tin liên quan.

2.1. Quá trình xử lý ảnh:Quá trình xử lý ảnh bắt đầu bằng công việc thu nhận ảnh từ camera hoặc các

sensor bên ngoài.Sơ đồ của quá trình xử lý:

Hình 2.1 Sơ đồ của quá trình xử lý ảnh

Trang 9

CameraCamera

SensorSensor

Thu nhận ảnhThu nhận ảnh

Lưu ảnhLưu ảnh

Tiền xử lý ảnhTiền xử lý ảnh

Phân tích ảnhPhân tích ảnh

Trích chọn đặc trưng

Trích chọn đặc trưng

Page 10: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.1.1. Thu nhận ảnh:Thu nhận ảnh có thể sử dụng máy quay (camera), webcam, máy quét (scanner)

…Ảnh thu được có thể là ảnh trắng đen hoặc cũng có thể là ảnh màu. Tuy nhiên, để có thể xử lý và tính toán các ảnh trên máy tính thì chỉ có ảnh số là đơn giản nhất.

Tùy thuộc vào chất lượng thiết bị thu nhận ảnh, các ảnh sẽ có chất lượng khác nhau. Điều này ảnh hưởng lớn đến quá trình tiền xử lý ảnh.

Các thiết bị ảnh có thể cho ra các kết quả tương tự hoặc ảnh số cho nên ảnh sau khi chụp phải được chuyển thành ảnh số (có thể dùng máy scanner để quét lại tấm ảnh tương tự, để chuyển nó sang ảnh số đưa lên máy tính xử lý).

2.1.2. Quá trình tiền xử lý ảnh:Đó là quá trình xử lý và nâng cao chất lượng ảnh. Ảnh sau khi thu nhận được

có thể chứa nhiều thông tin không cần thiết như: nhiễu, lòe,…Điều này làm cho ảnh có dung lượng lớn và có chất lượng không tốt, ảnh hưởng không nhỏ đến quá trình xử lý ảnh.

Đối với đề tài luận văn thì ảnh sau xử lý phải đạt được các yếu tố như: cân bằng các mức sáng tối, khử nhiễu, nâng cao độ tương phản.

2.1.3. Quá trình phân tích ảnh:Phân tích ảnh là quá trình biến đổi ảnh để từ đó đưa ra các đặc trưng quan

trọng của ảnh. Đây là giai đoạn quan trọng nhất của quá trình xử lý ảnh. Các đặc trưng của tấm ảnh có thể là: đường biên, phân vùng ảnh, hoặc cả hai…

2.1.4. Đặc trưng của ảnh:Ảnh sau khi qua các bước tiền xử lý và phân tích ảnh sẽ đưa ra các thông số

của đối tượng mà chúng ta cần quan tâm tới. Các thông số này sẽ được tính toán lại để từ đó chúng ta có thể đưa ra các đặc trưng của tấm ảnh. Chúng ta có thể sử dụng đặc trưng này để nhận dạng sự khác biệt của: các khuôn mặt người, sản phẩm bị lỗi trong dây chuyền, nhận dạng biển số xe…

Trong thực tế, quá trình xử lý ảnh thì có nhiều phương pháp làm khác nhau và vì thế chúng ta sẽ có nhiều thuật toán tìm ra đặc trưng của một tấm ảnh là khác nhau.

Trang 10

Page 11: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.2. Một số khái niệm về ảnh số:2.2.1. Cơ sở về màu:

Isaac Newton phát hiện ra rằng, nếu một chùm tia sáng mặt trời đi qua một lăng kính thì chùm sáng khi qua nó không phải là ánh sáng trắng. Mà nó là một phổ màu liên tục từ tím tới đỏ.

Ánh sáng là những nguồn năng lượng điện từ trong dãy bước sóng quang phổ từ 400nm đến 700nm.

Phổ màu được chia thành 6 vùng màu: tím, lam, lục, vàng, cam, đỏ. Nếu nhìn màu đầy đủ thì không có ranh giới giữa các màu kế nhau, mà màu này liền sang màu khác.

Màu mà mắt người cảm nhận được là do sự phản xạ ánh sáng từ vật thể.

2.2.2. Ảnh RGB:

Ảnh RGB (ảnh màu) hay còn gọi là ảnh “truecolor” do tính trung thực của nó. Ảnh này được biểu diễn theo một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước ảnh theo pixels. Ma trận này định nghĩa các thành phần màu red, green, blue cho mỗi điểm ảnh. Ví dụ: Điểm ảnh ở vị trí (10,5) sẽ có 3 thành phần màu được xác định bởi các giá trị (10,5,1), (10,5,2) và (10,5,3). Với 1, 2, 3 là tương ứng với các màu R, G, B.

2.2.3. Ảnh trắng đen, ảnh đa cấp xám:Ảnh trắng đen chỉ bao gồm hai màu: màu đen và màu trắng. Chúng ta phân sự

biến đổi này thành L mức. Nếu L bằng hai tức chỉ có hai mức là 0 và 1 thì đó là ảnh trắng đen, hay còn gọi là ảnh nhị phân. Nếu L lớn hơn hai thì ta có ảnh đa cấp xám. Việc xác định số mức này phụ thuộc vào tiêu chí lượng tử hóa. L thường chọn là 32, 64, 128, 256. Trong đó ảnh đa cấp xám 256 mức là ảnh có chất lượng cao và thường được chọn.

Với ảnh nhị phân thì mỗi pixel mã hóa trên một bit. Còn ảnh đa cấp xám 256 mức thì mỗi pixel mã hóa trên tám bits.

Chúng ta có thể thấy rõ được nguyên lý của một tấm ảnh màu, cũng như ảnh trắng đen thông qua một số lệnh trong matlab:

2.2.4. Ví dụ trong matlab về ảnh màu và ảnh trắng đen, đa cấp xám:%Thực hiện lấy ảnh RGB có sẵn trong máy tính, ảnh được lưu sẵn tại thư mục %work trong matlab, có path là: C:\ Matlab7.0\Work\file ảnh

>> anh=imread('k.jpg'); %phải có dấu phẩy cuối hàng vì đây là một ma trận ảnh %có dung lượng lớn.

Trang 11

Page 12: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

figure(1), imshow(anh); % trình diễn ảnh màu RGB

Hình 2.2 Hình màu RGB%Thực hiện tách ma trận màu đỏ ra khỏi ảnh màu RGB

>> goc=anh;>> goc(:,:,2)=0; %Cho ma trận màu xanh Green bằng không>> H1=goc;>> H1(:,:,3)=0; %Cho ma trận màu xanh Blue bằng không>> figure(2),imshow(H1);

Hình 2.3 Màu R tách từ RGB

Trang 12

Page 13: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

%Thực hiện chuyển đổi ảnh màu thành ảnh đa cấp xám, tăng độ tương phản và chuyển thành ảnh trắng đen.

>> T1=rgb2gray(anh); %chuyển thành ảnh đa cấp xám>> figure(3),imshow(T1);>> tuong_phan = imadjust(T1); %tăng độ tương phản>> figure(4),imshow(tuong_phan);>>lay_nguong = graythresh(tuong_phan); %lấy ngưỡng theo thuật toán otsu>> trang_den = im2bw(tuong_phan,lay_nguong); %ảnh trắng đen>> figure(5),imshow(trang_den);

Hình 2.4 Ảnh đa cấp xám

Hình 2.5 Ảnh trắng đen

Trang 13

Page 14: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.2.5. Định dạng ảnh:Ảnh Bitmap (Microsoft Windows Bitmap (*.BMP)):

Là ảnh được định dạng theo chuẩn do Microsoft đưa ra. Với định dạng này, ảnh được chuyển mã và được lưu lại đầy đủ thông tin. Tuy nhiên, ảnh được định dạng theo dạng này có dung lượng rất lớn vì nó không được nén.Ảnh GIF (Graphic Interchanger Format (*.GIF)):

Được định dạng theo chuẩn nén LZW dựa trên sự lặp lại của một nhóm điểm ảnh thay vì các mã loạt dài như các định dạng khác nên dung lượng lưu trữ nhỏ hơn. Ảnh GIF thường được dùng để lưu trữ các ảnh đơn giản và ít có sự chuyển đổi màu giữa các vùng ảnh. Chẳng hạn các ảnh đồ họa hay đồ thị, biểu đồ…Tuy nhiên, ảnh GIF có chất lượng cao, độ phân giải đồ họa cao, có thể hiển thị trên hầu hết các phần mềm đồ họa.Ảnh JPEG (Joint Photographic Expert Group (*.JPEG hay *.JPG)):

Ảnh JPEG là chuẩn nén ảnh tĩnh có mất mát, thường được dùng để lưu trữ các ảnh màu hoặc các ảnh đa mức xám khi không có yêu cầu cao về ảnh giải nén phải giống hoàn toàn ảnh gốc. Dung lượng của ảnh JPEG thường rất nhỏ. Người dùng có thể chủ động dung lượng của ảnh lưu trữ bằng cách chọn tỉ lệ nén nhiều hay ít. Ảnh lưu với định dạng JPG có thể lưu được 24 bits/pixel dữ liệu màu (tương đương 16 triệu màu).

2.3. Các phương pháp xử lý ảnh trong quá trình tiền xử lý:2.3.1. Thay đổi độ tương phản:Trong ảnh số, mỗi điểm ảnh có một giá trị độ sáng khác nhau để mắt người có thể nhìn thấy và cảm nhận. Tuy nhiên, nếu hai đối tượng có cùng độ sáng nhưng đặt trên hai nền ảnh khác nhau thì cho chúng ta các cảm nhận khác nhau.

Khái niệm độ tương phản được đưa ra để biểu diễn sự thay đổi độ sáng của đối tượng so với nền, hay độ nổi của điểm ảnh (vùng ảnh) so với vùng nền chứa nó.Ảnh với độ tương phản thấp có thể do điều kiện sáng không đủ, không đều, hoặc sự tương đối giống nhau về màu sắc, ánh sáng giữa đối tượng và không gian quanh đối tượng hoặc do tính không tuyến tính hay biến động nhỏ của bộ cảm nhận ảnh.

Để điều chỉnh lại độ tương phản của ảnh, ta điều chỉnh lại biên độ trên toàn dải hay trên dải có giới hạn bằng cách biến đổi tuyến tính đầu vào (dùng hàm biến đổi là hàm tuyến tính) hay phi tuyến (hàm mũ hay hàm logarit).Thay đổi độ tương phản dùng trong matlab:>> anh=imread('race_02.jpg');>> figure(1),imshow(anh);>> T1=rgb2gray(anh);>> figure(3),imshow(T1);

Trang 14

Page 15: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

>> tuong_phan = imadjust(T1); %tạo nên tương phản với imadjust>> figure(4),imshow(tuong_phan);>> lay_nguong = graythresh(tuong_phan);>> trang_den = im2bw(tuong_phan,lay_nguong);>> figure(5),imshow(trang_den);

Hình 2.6 Ảnh chưa tăng độ tương phản

Hình 2.7 Ảnh sau khi tăng độ tương phảnCông thức chung cho lệnh imadjust (đối với tất cả các ảnh xám, màu…) là:>> J = imadjust(I,[low_in; high_in], [low_out; high_out],gamma);Trong đó:

I: là ma trận ảnh gray.

[low_in; high_in]: là giá trị mức xám ở ảnh ban đầu. Nếu tương ứng ta nhập thông số là [0 1] thì mặc định là kiểu uint8, [0 1] tương ứng với mức lượng tử của tấm ảnh là từ [0 255], với uint16 thì [0 1] tương ứng với [0 65535].[low_out; high_out]: là giá trị mức xám ở ảnh sau biến đổi. Các giá trị được chọn của nó nằm trong khoảng [0 1], tương tự như [low_in; high_in].

Gamma:Nếu gamma nhỏ hơn 1 thì ảnh sau biến đổi phi tuyến với ảnh ban đầu, theo hàm mũ dạng:

Trang 15

Page 16: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Nếu gamma bằng 1 thì ảnh sau biến đổi sẽ tỉ lệ tuyến tính với ảnh ban đầu

Nếu gamma lớn hơn 1 thì ảnh sau biến đổi phi tuyến với ảnh ban đầu theo hàm mũ dạng:

Chú ý: Ta có thay đổi các thông số của [low_in; high_in] hoặc [low_out; high_out] để tạo nên những tấm ảnh âm bản.

Thực hiện với Matlab:>> T1=rgb2gray(anh); % biến đổi thành ảnh mức xám>> figure(3),imshow(T1);>> tuong_phan = imadjust(T1,[0 1],[1 0]); % tạo ảnh âm bản>> figure(4),imshow(tuong_phan);

Trang 16

Page 17: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

>> lay_nguong = graythresh(tuong_phan);>> trang_den = im2bw(tuong_phan,lay_nguong);>> figure(5),imshow(trang_den);>> T2=rgb2gray(anh);>> figure(6),imshow(T2);>> tuong_phan = imadjust(T1,[0 0.75],[0 1]);>> figure(7),imshow(tuong_phan);

Hình 2.8 Ảnh âm bản

Hình 2.9 Ảnh tăng độ tương phản

2.3.2. Làm bằng histogram:Histogram của một ảnh số với các mức xám nằm trong dải [0, L-1] là một hàm rời rạc h(rk)=nk. Trong đó, rk là mức xám thứ k và nk là số điểm ảnh có mức xám rk. Trong thực tế, histogram thường được chuẩn hóa bằng cách chia mỗi giá trị của nó cho tổng số điểm ảnh, ký hiệu là n. Do đó, histogram chuẩn hóa cho bởi p(rk)=nk/n, với k=0, 1, 2, …, L-1.

Trang 17

Page 18: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Ví dụ 1:

>> anh=imread('huanrace.jpg'); >> figure(1),imshow(anh);>> T2=rgb2gray(anh);>> figure(6),imshow(T2);>> figure(8),imhist(T2,64); % trình diễn đồ thị histogram

Hình 2.10 Ảnh xám

Hình 2.11 Biểu đồ Histogram

Trang 18

Page 19: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

? Nhận xét:

Từ biểu đồ Histogram ta thấy các thành phần Histogram ở vùng sáng và vùng tối dàn tập trung về hai góc của biểu đồ (vùng tối là có giá trị từ (0 đến 50) tập trung khá nhiều, vùng sáng từ (200 đến 250) cũng khá nhiều). Điều này chứng tỏ đây là một tấm ảnh có độ tương phản cao. Ví dụ 2:

Thực hiện tương tự như trên với một tấm ảnh khác.

Hình 2.12 Ảnh xám

Hình 2.13 Biểu đồ Histogram

Trang 19

Page 20: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

? Nhận xét:

Ở biểu đồ này, các thành phần Histogram tập trung hẹp và nằm ở giữa biểu đồ thang xám. Vì thế, đây là một tấm ảnh có độ tương phản thấp. Ví dụ 3:

Hình 2.14 Ảnh đa cấp xám

Hình 2.15 Biểu đồ Histogram

Trang 20

Page 21: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

? Nhận xét:

Biểu đổ Histogram hình 2.15. Các thành phần histogram tập trung hẹp và bị phân cực về phía thấp của biểu đồ. Do đó, đây là một tấm ảnh có độ tương phản thấp và tối. Trong matlab có hỗ trợ hàm strectchlim. Hàm này tính toán histogram của ảnh và xác định các giá trị giới hạn của mức xám một cách tự động. Nó trả về một vector mà ta có thể dùng làm cặp thông số [low_in; high_in] cung cấp cho hàm imadjust (trong trường hợp mặc định, hàm imadjust sử dụng hàm stretchlim để tạo ra cặp [low_in; high_in] nếu người sử dụng không cung cấp). Bình thường hàm stretchlim sẽ lấy giá trị mức xám nằm ở mức 1% và 99% trong vùng biến thiên mức xám của ảnh. Tuy nhiên, ta cũng có thể thay đổi mở rộng hoặc thu hẹp các giới hạn này bằng cách cung cấp thêm các thông số tol cho hàm stretchlim. Đó là một vector gồm hai phần tử thuộc [0 1] cho biết ta sẽ chọn các giới hạn ở mức nào trong vùng biến thiên mức xám (mặc định là [0.01 0.99]).

>> [low, high]=stretchlim(I, tol)>> H1=imread('chup_02.png'); >> H1=rgb2gray(H1);>> figure(3), imshow(H1);>> l=stretchlim(H1,[0 1]);>> ansl = 0.0196 0.9882

2.4. Các phương pháp phát hiện biên ảnh:

Toán tử sobel:

BW = edge(I,'sobel')

>> H1=imread('huanrace.jpg');>> H1=rgb2gray(H1);>> figure(3), imshow(H1); >> BW = edge(H1,' prewitt’);>> figure(6), imshow(BW);

Trang 21

Page 22: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.16 Ảnh ban đầu

Hình 2.17 Ảnh sau khi tách biên với sobel

Trang 22

Page 23: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Ứng dụng với prewitt:

Hình 2.18 Ảnh sau khi tách biên với prewitt

Ngoài hai phương pháp tách biên trên, thì trong matlab còn hỗ trợ một số phương pháp khác như:

Roberts:BW = edge(I,'roberts')BW = edge(I,'roberts',thresh)[BW,thresh] = edge(I,'roberts',...)

Log:BW = edge(I,'log')

Zerocross:BW = edge(I,'zerocross',thresh,h)

CannyBW = edge(I,'canny')

Trang 23

Page 24: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.5. Matlab với các phép tính ma trận: Nhập ma trận:

>>A = [ 1 2 3; 4 5 6 ; 7 8 9]ans = 1 2 3 4 5 6 7 8 9

Chuyển một vector hàng thành cột và ngược lại:

>> A'ans = 1 4 7 2 5 8 3 6 9

Tìm vị trí các phần tử trong một ma trận:

>> [i,j]=find(A>5)i =

3 3 2 3

j =

1 2 3 3Với i là hàng, tương ứng với cột j trong ma trận có giá trị lớn hơn 5.

Ma trận rỗng: F=[];

Xóa hàng và cột trong ma trận:

Thực hiện xóa hàng thứ hai.>> A(:,2)=[]A = 1 3 4 6 7 9

Quay ma trận:

Trang 24

Page 25: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

B=rot90(A)B = 3 6 9 2 5 8 1 4 7

Kích thước ma trận:

>> size(B)ans =

3 3Tức ma trận có 3 hàng, 3 cột.

Tìm giá trị lớn nhất trong mỗi cột ma trận:

>> A = [1 2 3 ; 4 5 6; 7 8 9]A = 1 2 3 4 5 6 7 8 9>> v=max(A)v = 7 8 9

Tìm giá trị nhỏ nhất trong mỗi cột ma trận:>> v=min(A)v = 1 2 3

Số chiều của ma trận:

>> n=rank(A)n = 2

Trang 25

Page 26: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Một số hàm đọc và lưu ảnh:

Hàm Mục đích

Axis Vẽ trục

Image, imshow Hiển thị ảnh

Imread Đọc ảnh từ file ảnh có sẵn

Immovie Tạo phim từ nhiều khuôn hình

Imwrite Lưu ảnh

Imfinfo Lấy thông tin ảnh

Ind2rgb Đổi ảnh chỉ số sang ảnh RGB

Imview Hiển thị ảnh, có thể đưa dấu nhắc chuột vào ảnh này để xem thông tin (màu sắc, vị trí các pixels)_

Ví dụ:Đọc ảnh có sẵn trong máy tính:>> anh=imread('d:\dien_tu\m.png');>> image(anh);

Hình 2.19 Ảnh đọc từ máy tính.

Trang 26

Page 27: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.6. Bắt ảnh:Giao tiếp máy tính với webcam:

Mua một webcam có kèm theo đĩa driver. Nếu có webcam mà không có driver thì có thể tìm thông tin của hãng bán webcam đó (có ghi trên sản phẩm), có thể vào Phong Vũ nhờ kỹ thuật viên chép phần mềm driver vào USB.Cài đĩa driver vô máy tính (rất dễ dàng).

Cắm đầu nối webcam vào cổng USB.

Mở chương trình chạy, lúc này máy tính đã có thể giao tiếp với webcam.

Matlab giao tiếp với Webcam:Trong quá trình xử lý ảnh, muốn chụp, quay phim…xử lý ảnh một cách trực tiếp từ webcam với phần mềm matlab. Thì cần phải thực hiện những bước sau:

1.Phải có file vfm.dll (File này có thể đi xin thầy, bạn bè…).2.Sau khi có file vfm.dll thì thực hiện chép file này vào địa chỉ: C:/Windows/System32.3.Lúc này, matlab có thể hoạt động giao tiếp với webcam.

Ví dụ:Thực hiện thu ảnh từ webcam:

>> vid=videoinput(‘winvideo’,1); % khai báo ngõ vào cho webcam>> preview(vid); % trình diễn ảnh động thu được từ webcam>> chup_hinh=getsnapshot(vid); % chụp hình ảnh động.>> figure(2), imshow(chuphinh2); % trình diễn ảnh tĩnh vừa chụp>> imwrite(chuphinh2, 'chup.png', 'png'); % lưu lại ảnh vừa chụp trong matlab/work>> delete(vid); >> clear vid; % thực hiện xóa và đóng ngõ vào.

2.7. Tạo giao diện người sử dụng:

Giao diện người sử dụng (Graphical User Interface - GUI) là giao diện bằng hình ảnh của chương trình. Một GUI tốt có thể làm cho chương trình trở nên dễ sử dụng bằng cách cung cấp những thông tin ban đầu cần thiết và với những công cụ điều khiển như: nút nhấn (Pushbutton), hộp liệt kê (list box), thanh trượt (slider), trình đơn (menu),…GUI nên được thiết kế một cách dễ hiểu và thân thiện để người sử dụng có thể hiểu và dự đoán được kết quả của một tác động.

2.7.1. Cách làm việc của một GUI:

Trang 27

Page 28: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

GUI bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu,… chúng cung cấp cho người sử dụng một môi trường làm việc thân thiện.Với GUI thì người sử dụng chỉ cần hiểu được cách ứng dụng của nó, không cần đi chi tiết quá sâu vào chuyên môn, không cần hiểu rõ cách thức làm việc của chương trình như thế nào. Tuy nhiên, để tạo một GUI là một công việc rất khó khăn đối với người lập trình bởi vì GUI trong matlab thì chưa được phổ biến, nghiên cứu kỹ, các hướng dẫn cũng như ví dụ ứng dụng là chưa nhiều.

Các thành phần chính trong một GUI của matlab:- Component (các thành phần cấu thành): mỗi đối tượng trong GUI (nút nhấn, nhãn, hộp soạn thảo,…) sau khi kết hợp lại thì tạo thành một GUI hoàn chỉnh.- Các thành phần phân loại thành:

oCông cụ điều khiển: nút nhấn, hộp soạn thảo, thanh trượt, …

oCác thành phần tĩnh: khung hình, chuỗi ký tự,…

oMenu và axes: là các hệ trục dùng để hiển thị hình đồ họa.

oFigure: các thành phần của GUI phải được sắp xếp vào trong một

figure, là một cửa sổ được hiển thị trên màn hình máy vi tính. oCallback: cuối cùng, khi người sử dụng tác động vào chương trình

bằng cách nhấn chuột, hay gõ bàn phím thì chương trình phải đáp ứng lại mỗi sự kiện này.

Công cụ Tạo bởi hàm Miêu tả

Các công cụ điều khiển

Pushbutton Uicontrol Là một nút nhấn. Nó sẽ gọi hàm khi ta nhấn vào nó

Toggle button Uicontrol Là nút nhấn có hai trạng thái là “on” và “off”. Khi có tác động nó sẽ gọi hàm tương ứng và thay đổi trạng thái từ “on” sang “off” và ngược lại.

Radio button Uicontrol Cũng là một nút nhấn có hai trạng thái được thể hiện bởi một vòng tròn nhỏ, trạng thái “on” tương ứng với trường hợp

Trang 28

Page 29: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

có dấu chấm chấm giữa vòng tròn và ngược lại “off”. Trong một nhóm Radio button ta chỉ có thể chọn được một thành phần. Khi có tác động vào mỗi thành phần sẽ có một hàm được gọi.

Check box Uicontrol Cũng là một nút nhấn có hai trạng thái được thể hiện bởi một hình vuông nhỏ, trạng thái “on” tương ứng với trường hợp có đánh dấu giữa hình vuông và ngược lại là trạng thái “off”. Khi có tác động nó sẽ gọi hàm tương ứng và thay đổi trạng thái từ “on” sang “off” hoặc ngược lại.

List box Uicontrol Là một danh sách các chuỗi. Người sử dụng có thể chọn một chuỗi bằng cách click hoặc double click vào nó. Chương trình sẽ gọi một hàm khi có một chuỗi được chọn.

Popup menus Uicontrol Là công cụ cho phép chúng ta chọn một chuỗi trong một nhóm các chuỗi. Danh sách tất cả các chuỗi sẽ được hiển thị khi có click chuột. Khi không có click chuột công cụ chỉ thể hiện chuỗi hiện tại được chọn.

Trang 29

Page 30: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Slider Uicontrol Là công cụ cho phép điều chỉnh một cách liên tục giá trị trong một thanh trượt. Mỗi khi giá trị của thanh trượt thay đổi sẽ có hàm được gọi.

Các thành phần tĩnh

Frame Uicontrol Được sử dụng để tạo ra một khung hình chữ nhật. Frame còn được sử dụng để nhóm các công cụ điều khiển lại với nhau. Frame không có khả năng gọi hàm.

Text field Uicontrol Được sử dụng để tạo ra một nhãn bao gồm các ký tự. Text field không có khả năng gọi hàm.

Menu và trục đồ thị

Menu items Uicontrol Được sử dụng để tạo ra menu trên thanh công cụ. Chương trình sẽ gọi hàm khi một đối tượng trong menu được chọn.

Axes Axes Được sử dụng để tạo một hệ trục đồ thị. Axes không có khả năng gọi hàm.

Context menus Uicontextmenu Được sử dụng để tạo ra menu xuất hiện khi righ click vào một hình trong giao diện.

Trang 30

Page 31: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.20 Một số thành phần trong giao diệ

2.7.2. Tạo và hiển thị một GUI:Mở màn hình GUI: Vào Matlab 7.0\menu\GUIDE. Chọn Create New Gui.Ví dụ: Tạo một giao diện để đánh giá mật độ lưu thông trên đường từ tấm hình cho trước_cơ sơ để phát triển luận văn “đèn giao thông thông minh”.

Hình 2.21 tạo giao diện điều khiểnPhân tích:Chúng cần có: Năm nút Pushbutton, bảy Text field, hai Axes. Bước 1: Vào Menu\Gui để phác họa giao diện có dạng như hình vẽ:

Trang 31

Page 32: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Bước 2: Lưu lại giao diện với tên là: giaodien_doan3. Sau khi lưu thì ta sẽ có hai file đó là: giaodien_doan3.fig và giaodien_doan3.m. Với giaodien-doan3.fig là file chạy giao diện và giaodien_doan3.m là file code chương trình.

Hình 2.22 Cửa sổ để thực hiện viết chương trình cho giao diện

Bước 3: Quay lại giaodien_doan3.fig để thay đổi một số thuộc tính cho các nút nhấn và textfield.Nhấn double click vào nút pushbutton thứ nhất ta sẽ thấy cửa sổ thuộc tính hiện ra

Hình 2.23 Cửa sổ thuộc tính cho nút Pushbutton thứ nhất

Trang 32

Page 33: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Trong cửa sổ thuộc tính của nút nhấn Pushbutton thứ nhất vào: Vào Style gõ: “ANH NEN”.

Vào FontSize chọn kích cỡ chữ là 10.0.

Vào FontWeigh chọn kiểu chữ đậm là bold.

Tương tự cho nút nhấn Pushbutton thứ hai,ba,bốn,năm lần lượt: Thay Style: “ANH SO SANH”, “PHAN TICH ANH”, “RESET”, “CANCEL”

Đối với textfield thì vô bảng thuộc tính chọn Style sau đó ghi: “Danh Gia Mat Do Luu Thong” cho text10, “TRUONG DAI HOC TON DUC THANG,KHOA DIEN-DIEN TU….”cho các text còn lạiSau khi thay đổi thuộc tính ta có màn hình giao diện sau:

Hình 2.24 giao diện chính

2.7.3. Lập trình cho Gui:function pushbutton2_Callback(hObject, eventdata, handles)H1=imread('anh nen1.jpg');imnen=image(H1,'parent',handles.axes7); function pushbutton3_Callback(hObject, eventdata, handles)global H3 H2[filename, pathname, filterindex]=uigetfile( ... {'*.jpg','JPEG File (*.jpg)'; ...

Trang 33

Page 34: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

'*.*','Chon file anh bat ky (*.*)'}, ... 'Chon 1 buc anh');var=strcat(pathname,filename);H2=imread(var);H3=image(H2,'parent',handles.axes8);function pushbutton1_Callback(hObject, eventdata, handles)H1=imread('anh nen1.jpg');global H3 H2[filename, pathname, filterindex]=uigetfile( ... {'*.jpg','JPEG File (*.jpg)'; ... '*.*','Chon file anh bat ky (*.*)'}, ... 'Chon 1 buc anh');var=strcat(pathname,filename);H2=imread(var);H2=H2(42:351,120:502,:);figure(3),imshow(H2),title('Anh xe duoc phan vung gioi han');a2=rgb2gray(H2);figure(),imshow(a2);H1=H1(42:351,120:502,:);figure(5),imshow(H1),title('Anh goc duoc phan vung gioi han');a1=rgb2gray(H1);figure(),imshow(a1);a3=imabsdiff(a2,a1);a3 = medfilt2(a3);figure(6),imshow(a3);for i=1:310 for j=1:383 if 0<=a3(i,j) & a3(i,j)<=20 a3(i,j)=0; else a3(i,j)=a2(i,j); end endend figure(7),imshow(a3);b3 = imadjust(a3);b3 = medfilt2(b3);figure(8),imshow(b3);

Trang 34

Page 35: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

H= bwareaopen(b3,500);figure(13),imshow(H);%_______thuc hien tim gioi han cua hinh can tach_________[m,n]=size(H);for i=1:m for j=1:n if H(i,j)==1 h1=i; break; end endendfor i=m:-1:1 for j=1:n if (H(i,j)==1) h2=i; break; end end endfor j=1:n for i=1:m if (H(i,j)==1) c1=j; break; end; end;end;for j=n:-1:1 for i=1:m if (H(i,j)==1) c2=j; break; end; end;end;H3=H(h2:h1,c2:c1);figure(10),imshow(H3);

Trang 35

Page 36: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

dt_nenduong=m*n[q,t]=size(H3);p=0;for i=1:q; for j=1:t; if H3(i,j)==1 p=p+1; end endenddt_chiemcho=pdt_tyle=(dt_chiemcho/dt_nenduong)*100if 0<=dt_tyle&dt_tyle<=25 %disp('mat do luu thong thua') set(handles.text10,'string','Mat Do Luu Thong Thua');else if 25<dt_tyle&dt_tyle<39 %disp('mat do luu thong binh thuong') set(handles.text10,'string','Mat Do Luu Thong Binh Thuong'); else if 39<dt_tyle&dt_tyle<100 %disp('mat do luu thong qua cao') set(handles.text10,'string','Mat Do Luu Thong Qua Cao'); end endend

function pushbutton4_Callback(hObject, eventdata, handles)global IMG IMG1;IMG=IMG1;image(IMG)function pushbutton5_Callback(hObject, eventdata, handles)close;

Trang 36

Page 37: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

2.8. Kết quả:Sau khi chạy chương trình ta thu được kết quả sau:

Hình 2.25 Ảnh gốc và ảnh được so sánh

Trang 37

Page 38: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.26 Ảnh gốc và ảnh được so sánh sau khi được phân vùng giới hạn

Trang 38

Page 39: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.27 Ảnh gốc và ảnh được so sánh sau khi được chuyển về ảnh đa cấp sám

Trang 39

Page 40: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.28 Ảnh sau khi thực hiện phép trừ tuyệt đối

Hình 2.29 Ảnh trừ đã được xử lý

Trang 40

Page 41: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.30 ảnh sau khi tăng độ tương phản và lọc trung vị

Hình 2.31 ảnh sau khi được trích chọn đặc trưng

Trang 41

Page 42: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.32 ảnh đặc trưng sau khi được lấy giới hạn

Đây chính là đặc trưng cuối cùng của việc xử lý ảnh. Từ hình ảnh cuối cùng này ta có thể tính được diện tích màu trắng của xe đã chiếm chỗ,từ đó ta suy ra được tỷ lệ diện tích giữa nền đường và từ đó đánh giá được mật độ lưu thông trên đường.

Trang 42

Page 43: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 2.33 ảnh giao diện sau khi phân tích xongMột số ứng dụng khác trong tạo giao diện:

Nhấn nút gởi xuống vi xử lý một ký tự “A”.

Bước 1: Tạo một màn hình giao diện có nút Pushbutton. Sau đó, lưu lại giao diện này. Có thể thay đổi thuộc tính của nút nhấn tùy thích. Bước 2: Trong file.m ta viết chương trình cho hàm con callback để gởi và nhận ký tự ở vi xử lý. function pushbutton1_Callback(hObject, eventdata, handles)s=serial('COM1','BAUDRATE',9600,'DATABITS',8); % Chọn cổng COM1, tốc độ baud là 9600, gởi ký tự 8 bitsfopen(s); % Mở cổng COMfprintf(s,'A'); % Truyền xuống vi xử lý chữ Aout = fscanf(s); % Nhận dữ liệu từ vi xử lý đưa lên.fclose(s);delete(s);clear s; % Đóng và xóa COM

Hình 2.34 Giao tiếp máy tính với vi xử lýXác định trạng thái của nút Toggle Buttons:Bước 1: Phác thảo và tạo giao diện có một nút toggle button, và một text field.

Hình 2.35 Nút Toggle button

Trang 43

Page 44: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Bước 2: Viết chương trình cho Callback:function togglebutton1_Callback(hObject, eventdata, handles)% hObject handle to togglebutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hint: get(hObject,'Value') returns toggle state of togglebutton1state=get(handles.togglebutton1,'Value');if state == 0 set(handles.Text2,'String',')else set(handles.Text2,'String','')end

2.9. Xuất nhập qua cổng nối tiếp:

Trong matlab hỗ trợ các lệnh truyền thông qua cổng COM.Ví dụ: Truyền xuống Vi xử lý chữ “M”.s=serial('COM1','BAUDRATE',9600,'DATABITS',8);fopen(s);fprintf(s,'M');out = fscanf(s)fclose(s);delete(s);clear s;

Trong đó:s=serial('COM1','BAUDRATE',9600,'DATABITS',8);Là thực hiện truyền nối tiếp thông qua cổng COM 1, tốc độ baud được chọn là 9600, truyền 8 bits dữ liệu.Sau khi cài đặt các thông số truyền thông trên máy tính thì chúng ta thực hiện lệnh fopen(s). Lệnh này cho phép mở cổng COM trên máy tính. Máy sẵn sàng đợi tín hiệu để gởi xuống Vi xử lý.Lệnh fprintf(s, ‘M’): Gởi chữ ‘M’ xuống Vi xử lý.Lệnh fscanf(s): Nhận tín hiệu (dữ liệu) từ Vi xử lý gởi lên.fclose(s), deletet(s), clear s: đóng cổng truyền thông nối tiếp, xóa tín hiệu cổng nối tiếp khỏi bộ nhớ (Remove a serial port object from memory), xóa các kết quả (đã tính toán) về cổng truyền thông ra khỏi cửa sổ làm việc (workspace).

Trang 44

Page 45: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Lưu đồ cho truyền thông nối tiếp với Matlab:

Hình 2.36 Lưu đồ truyền thông nối tiếp trên Matlab

Trang 45

Đặt thông số truyền thông (cổng COM)

cho máy tính

Đặt thông số truyền thông (cổng COM)

cho máy tính

Gởi dữ liệu cho VXLGởi dữ liệu cho VXL

Nhận dữ liệu từ VXLNhận dữ liệu từ VXL

Đóng, xóa các tín hiệu của cổng COM

Đóng, xóa các tín hiệu của cổng COM

Mở cổng COMMở cổng COM

Page 46: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 3GIỚI THIỆU VỀ VI XỬ LÝ AT89C51

3.1. Giới thiệu về AT89C51: Là một Microcomputer 8 bit, loại CMOS, có tốc độ cao và công suất thấp với bộ nhớ Flash có thể lập trình được. Nó được sản xuất với công nghệ bộ nhớ không bay hơi mật độ cao của hãng Atmel, và tương thích với chuẩn công nghiệp của 80C51 và 80C52 về chân ra và bộ lệnh. Một số nhà sản xuất được phép cung cấp các IC tương thích với các sản phẩm MCS-51 của Intel là Siemens, Advanced Micro Devices, Fujitsu, Philips, Atmel…

3.2. Sơ đồ khối:

Hình 3.1: Sơ đồ khối của AT98C51

Trang 46

Page 47: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

3.3. Đặc trưng của AT89C51:+ Tương thích với các sản phẩm MCS-51.+ 4KByte bộ nhớ Flash có thể lập trình lại với 1000 chu ky đọc/xoá.+ Hoạt động tĩnh đầy đủ: 0Hz đến 24MHz.+ Khóa bộ nhớ chương trình ba cấp.+ 128 x 8 bit RAM nội .+ 32 đường xuất-nhập lập trình được (tương ứng 4 port) .+ Hai timer/counter 16 bit .+ Một port nối tiếp song công lập trình được .+ Mạch đồng hồ và bộ dao động trên chip .

3.4. Cấu hình chân của AT89C51:

Hình 3.2: Các chân của AT89C51AT89C51 có tất cả 40 chân. Mỗi chân có chức năng như các đường I/O

(xuất/nhập), trong đó 24 chân có công dụng kép: mỗi đường có thể hoạt động như một đường I/O hoặc như một đường điều khiển hoặc như thành phần của bus địa chỉ và bus đữ liệu. Mô tả chân:

+ VCC (chân 40): Chân cấp nguồn. + GND (chân 20): Chân nối đất. + Port 0: là một port xuất/nhập song hướng cực máng hở 8 bit. Nếu được sử

dụng như là một ngõ xuất thì mỗi chân có thể kéo 8 ngõ vào TTL. Khi mức 1 được viết vào các chân của port 0, các chân này có thể được dùng như là các ngõ nhập tổng trở cao. Port 0 có thể được định cấu hình để hợp kênh giữa bus địa chỉ và bus

Trang 47

Page 48: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

dữ liệu (phần byte thấp) khi truy cập đến bộ nhớ dữ liệu và bộ nhớ chương trình ngoài. Ở chế độ này, P0 có các điện trở pullup bên trong. Port 0 cũng nhận các byte code (byte mã chương trình) khi lập trình Flash, và xuất ra các byte code khi kiểm tra chương trình. Cần có các điện trở pullup bên ngoài khi thực hiện việc kiểm tra chương trình.

+ Port 1: Port 1 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong. Các bộ đệm ngõ ra của port 1 có thể kéo hoặc cung cấp 4 ngõ nhập TTL. Khi mức 1 được viết vào các chân của port 1, chúng được kéo lên cao bởi các điện trở pullup nội và có thể được dùng như là các ngõ nhập. Nếu đóng vai trò là các ngõ nhập, các chân của port 1 (được kéo xuống thấp qua các điện trở bên ngoài) sẽ cấp dòng IIL do các điện trở pullup bên trong.

+ Port 2: Port 2 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong. Các bộ đệm ngõ ra của port 2 có thể kéo hoặc cung cấp 4 ngõ vào TTL. Khi các mức 1 được viết vào các chân của port 2 thì chúng được kéo lên cao bởi các điện trở pullup nội và có thể được dùng như các ngõ vào. Khi được dùng như các ngõ vào, các chân của port 2 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do có các điện trở pullup bên trong. Port 2 phát ra byte cao của địa chỉ khi đọc từ bộ nhớ chương trình ngoài và khi truy cập bộ nhớ dữ liệu ngoài dùng các địa chỉ 16 bit (MOVX @DPTR). Trong ứng dụng này, nó dùng các điện trở pullup nội "mạnh" khi phát ra các mức 1. Khi truy cập bộ nhớ dữ liệu ngoài dùng các địa chỉ 8 bit (MOVX @RI), port 2 phát ra các nội dung của thanh ghi chức năng đặc biệt P2. Port 2 cũng nhận các bit cao của địa chỉ và một vài tín hiệu điều khiển khi lập trình và kiểm tra Flash.

+ Port 3: Port 3 là một port xuất-nhập song hướng 8 bit có điện trở pullup nội bên trong. Các bộ đệm ngõ ra của port 3 có thể kéo hoặc cung cấp 4 ngõ vào TTL. Khi các mức 1 được viết vào các chân của port 3 thì chúng được kéo lên cao bởi các điện trở pullup nội và có thể được dùng như các ngõ vào. Khi được dùng như các ngõ vào, các chân của port 3 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do có các điện trở pullup bên trong.

3.5. Các chức năng chuyển đổi trên Port 3:+ RST (chân 9): Ngõ vào reset. Một mức cao trên chân này khoảng hai chu

ky máy trong khi bộ dao động đang chạy sẽ reset thiết bị. + ALE/ PROG: ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong

khi truy cập bộ nhớ ngoài. Chân này cũng là ngõ nhập xung lập trình (PROG) khi lập trình Flash. Khi hoạt động bình thường, ALE được phát với một tỷ lệ không đổi là 1/6 tần số bộ dao động và có thể được dùng cho các mụch đích timing và clocking bên ngoài. Tuy nhiên, lưu ý rằng một xung ALE sẽ bị bỏ qua mỗi khi truy

Trang 48

Page 49: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

cập bộ nhớ dữ liệu ngoài. Nếu muốn, hoạt động ALE có thể cấm được bằng cách set bit 0 của SFR tại địa chỉ 8Eh. Nếu bit này được set, ALE chỉ dược hoạt động khi có một lệnh MOVX hoặc MOVC. Ngược lại, chân này được kéo lên cao bởi các điện trở pullup "nhẹ". Việc set bit cấm-ALE không có tác dụng khi bộ vi điều khiển đang ở chế độ thi hành ngoài.

+ PSEN (Program Store Enable): là xung đọc bộ nhớ chương trình ngoài. Khi AT89C51 đang thi hành PSEN được kích hoạt hai lần mỗi chu ky máy, nhưng hai mã (code) từ bộ nhớ chương trình ngoài, hoạt động PSEN sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài.

+ EA/Vpp: EA (External Access Enable) phải được nối với GND để cho phép thiết bị đọc code từ bộ nhớ chương trình ngoài có địa chỉ từ 0000H đến FFFFH. Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit 1) được lập trình, EA sẽ được chốt bên trong khi reset. EA phải được nối với Vcc khi thi hành chương trình bên trong. Chân này cũng nhận điện áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó áp lập trình 12V được chọn).

+ XTAL1 và XTAL2: là hai ngõ vào và ra của một bộ khuếch đại dao động nghịch được cấu hình để dùng như một bộ dao động trên chip.

Hình 3.3: Cách gắn thạch anh với AT89C51Không có yêu cầu nào về duty cycle của tín hiệu xung ngoài,vì ngõ nhập nối với mạch tạo xung nội là một flip-flop chia đôi, nhưng các chỉ định về thời gian high và low, các mức áp tối đa và tối thiểu phải được tuân theo.

Trang 49

Page 50: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

3.6. Tổ chức bộ nhớ:Vi xử lý AT89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ

riêng biệt cho chương trình và dữ liệu. Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên trong; dù vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến tối đa 64 Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu. Bộ nhớ bên trong bao gồm ROM và RAM trên chip, RAM trên chip bao gồm nhiều phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt.

Các thanh ghi và các port xuất nhập đã được xếp trong bộ nhớ và có thể được truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác. Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các bộ vi xử lý khác. RAM bên trong được phân chia giữa các bank thanh ghi (00H–1FH), RAM địa chỉ hóa từng bit (20H–2FH), RAM đa dụng (30H–7FH) và các thanh ghi chức năng đặc biệt (80H–FFH).

3.7. Các thanh ghi chức năng đặc biệt: Một bản đồ vùng bộ nhớ trên chip được gọi là không gian thanh ghi chức

năng đặc biệt (SFR). Không phải tất cả các địa chỉ đều được sử dụng, và các địa chỉ không được sử dụng có thể không được cung cấp trên con chip. Các hành động đọc đến các địa chỉ này nói chung sẽ trả về các dữ liệu ngẫu nhiên, và các hành động viết sẽ có một hiệu ứng không xác định.

Các phần mềm người dùng không nên viết các mức 1 đến những vị trí không được liệt kê này, vì chúng có thể được dùng trong các sản phẩm tương lai khi thêm vào các đặc trưng mới. Trong trường hợp này, các giá trị reset hoặc không tích cực của các bit mới sẽ luôn là 0.

Các thanh ghi nội được truy xuất ngầm định bởi bộ lệnh. Ví dụ lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1. Tác động này được ngầm định trong mã lệnh.

Các thanh ghi này được định dạng như một phần của RAM trên chip. Vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp, nên không có lợi khi đặt chúng vào trong RAM trên chip).

Đó là lý do để AT89C51 có nhiều thanh ghi như vậy. Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR : Special Function Register) ở vùng trên của RAM nội, từ địa chỉ 80H đến FFH. Chú ý rằng hầu hết 128 địa chỉ từ 80H đến FFH không được định nghĩa. Chỉ có 21 địa chỉ SFR là được định nghĩa. Ngoại trừ tích lũy (A) có thể được truy xuất ngầm như đã nói, đa số các SFR được truy xuất dùng địa chỉ trực tiếp. Chú ý rằng một vài SFR có thể được địa chỉ hóa bit hoặc byte. Người thiết kế phải thận trọng khi truy xuất bit và byte. Ví dụ lệnh sau : SETB

Trang 50

Page 51: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

0E0H sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không đổi. Ta thấy rằng E0H đồng thời là địa chỉ byte của cả thanh ghi tích lũy và là địa chỉ bit của bit có trọng số nhỏ nhất trong thanh ghi tích lũy. Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ bit là có hiệu quả.

3.8. Hoạt động của port nối tiếp:Vi xử lý AT89C51 có một port nối tiếp trong chip có thể hoạt động ở nhiều

chế độ trên một dãi tần số rộng. Chức năng chủ yếu của port nối tiếp là thực hiện chuyển đổi song song sang nối tiếp đối với dữ liệu xuất, và chuyển đổi nối tiếp sang song song với dữ liệu nhập.

Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD. Các chân này có các chức năng khác với hai bit của Port 3, P3.1 ở chân 11 (TXD) và P3.0 ở chân 10 (RXD). Port nối tiếp cho hoạt động song công (full duplex : thu và phát đồng thời), và đệm lúc thu (receiver buffering) cho phép một ký tự sẽ được thu và được giữ trong khi ký tự thứ hai được nhận. Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được thu được thu đầy đủ thì dữ liệu sẽ không bị mất. Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến port nối tiếp là : SBUF và SCON. Bộ đệm port nối tiếp (SBUF) ở địa chỉ 99H thật sự là hai bộ đệm. Viết vào SBUF để nạp dữ liệu sẽ được phát, và đọc SBUF để truy xuất dữ liệu thu được. Đây là hai thanh ghi riêng biệt : thanh ghi chỉ ghi để phát và thanh ghi chỉ đọc để thu.

3.9. Tóm tắt tập lệnh: Tập lệnh của AT89C51 được tối ưu hóa cho các ứng dụng điều khiển 8 bit, nhiều kiểu định địa chỉ cô đọng và nhanh dùng để truy xuất RAM nội được dùng nhằm tạo thuận lợi cho các thao tác trên các cấu trúc dữ liệu nhỏ. Tập lệnh cũng hỗ trợ các biến 1 bit cho phép quản lý bit trực tiếp trong các hệ logic và điều khiển có yêu cầu xử lý bit. Do các lệnh của MCS-51 có 8 bit nên 89C51 có tối đa 256 lệnh (thực tế có 255 lệnh, 1 lệnh không được định nghĩa) gồm 139 lệnh 1 byte, 92 lệnh 2 byte, 24 lệnh 3 byte. Để xác định rõ nguồn và đích của dữ liệu, ta dùng đến các kiểu định địa chỉ sa + Thanh ghi + Trực tiếp + Gián tiếp + Tức thời + Tương đối + Dài + Chỉ số

Trang 51

Page 52: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Định địa chỉ thanh ghi: Các lệnh sử dụng kiểu định địa chỉ thanh ghi được mã hóa bằng cách dùng 3 bit thấp nhất của lệnh để chỉ ra một thanh ghi bên trong không gian địa chỉ logic này. Người lập trình có thể truy xuất 8 thanh ghi làm việc được đánh số từ R0 đến R7. Có 4 dãy thanh ghi làm việc nhưng tại một thời điểm chỉ có một dãy thanh ghi được tích cực. Các dãy thanh ghi chiếm 32 byte đầu tiên của RAM dữ liệu trên chip ( địa chỉ từ 00H đến 1FH ) và ta dùng các bit 4 và 3 trong từ chương trình PSW để chỉ ra dãy thanh ghi tích cực. Khi reset bằng phần cứng cho phép dãy 0 tich cực, còn các dãy khác được chọn bằng cách sửa đổi các bit 4 và 3 của PSW sao cho phù hợp.Định địa chỉ trực tiếp: Kiểu định địa chỉ trực tiếp được sử dụng dùng truy xuất các biến nhớ hoặc các thanh ghi trên chip. Một byte được thêm vào tiếp theo mã lệnh dùng để xác định địa chỉ. Tùy thuộc vào bit có giá trị vị trí cao của địa chỉ trực tiếp, một trong hai không gian nhớ trên chip được chọn. Khi bit 7 bằng 0, địa chỉ trực tiếp trong tầm từ 0 đến 127 ( 00H - 7FH ) và 128 byte thấp trên chip của RAM nội được tham chiều. Khi bit 7 bằng 1, tất cả các port xuất/nhập, các thanh ghi chức năng đặc biệt, điều khiển, trạng thái được gán địa chỉ trong tầm từ 128 đến 255 ( 80H - FFH ). Ta không nhất thiết phải nhớ địa chỉ của các thanh ghi này, trình hợp dịch cho phép ta sử dụng mã gợi nhớ viết tắt dễ hiểu như P0 thay cho port 0, TMOD cho thanh ghi chế độ định thời...Định địa chỉ gián tiếp: Kiểu định địa chỉ này dùng xác định 1 biến khi địa chỉ của biến đó được xác định, và rất thuân tiện trong trường hợp quản lý các vị trí nhớ liên tiếp, các điểm nhập được định chỉ số trong các bảng chứa trong RAM, các số chính xác hoặc các chuỗi ký tự. Kiểu định địa chỉ này chỉ áp dụng cho 2 thanh ghi R0, R1. Các thanh ghi này hoạt động như là các con trỏ và nội dung của chúng chỉ ra địa chỉ trong RAM, nơi mà dữ liệu được đọc hay được ghi. Bit có ý nghĩa thấp nhất của lệnh xác định thanh ghi nào (R0 hay R1) được sử dụng làm con trỏ.Định địa chỉ tức thời: Khi toán hạng nguồn là một hằng số thay vì là một biến, kiểu định địa chỉ này được sử dụng. Trong hợp ngữ, các toán hạng tức thời đựoc nhận biết nhờ vào dấu # đặt trước chúng. Toán hạng này có thể là một hằng số, một biến, hoặc một biểu thức số học sử dụng các hằng số, các ký hiệu và các toán tử. Trình dịch hợp ngữ tính giá trị và thay thế dữ liệu tức thời vào trong lệnh. Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm dữ liệu tức thời. Tuy nhiên, khi ta dùng con trỏ dữ liệu 16 bit DPTR, hằng địa chỉ 16 bit được cần đến.Định địa chỉ tương đối:

Trang 52

Page 53: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối (hay còn gọi là offset) là một giá trị 8 bit có dấu. Giá trị này được cộng với bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần thực thi. Do ta sử dụng một offset có dấu, cho nên tầm nhảy được giới hạn từ (-128) byte đến 127 byte. Byte địa chỉ tương đối là byte thêm vào tiếp theo byte mã lệnh của lệnh.Định địa chỉ tuyệt đối: Kiểu định chỉ tuyệt đối chỉ được sử dụng với các lệnh ACALL và AJUMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2K hiện hành của bộ nhớ chương trình bằng cách cung cấp 11 bit thấp của địa chỉ đích, trong đó 3 bit cao (A8 - A10) đưa vào mã lệnh và 8 bit thấp (A7 - A0) thành lập byte thứ 2 của lệnh. 5 bit cao của địa chỉ đích là 5 bit cao hiện hành trong bộ đếm chương trình, do vậy lệnh theo sau lệnh rẽ nhành và đích của lệnh rẽ nhánh phải ở trong cùng 1 trang 2K, vì A11 - A5 không thay đổi.Định địa chỉ dài: Kiểu định địa chỉ dài được dùng cho các lệnh LCALL và LJUMP. Các lệnh 3 byte này chứa địa chỉ đích 16 bit (byte 2 và byte 3) của lệnh. Kiểu định địa chỉ này có phạm sử dụng rộng hết toàn bộ không gian nhớ của chương trình 64K, nhưng lại phụ thuộc vào vị trí và chiếm 3 byte.Định địa chỉ chỉ số: Kiểu này sử dụng một thanh ghi nền (hoặc bộ đếm chương trình hoặc con trỏ dữ liệu) và một offset (thanh chứa A) tạo thành dạng địa chỉ hiệu dụng cho lệnh JUMP hoặc MOVC.Các loại lệnh : Các lệnh của 89C51 được chia làm 5 nhóm : + Nhóm lệnh số học + Nhóm lệnh logic + Nhóm lệnh di chuyển dữ liệu + Nhóm lệnh xử lý bit + Nhóm lệnh rẽ nhánhCác lệnh số học: Tất cả các lệnh số học được thực hiện trong một chu ky máy, ngoại trừ lệnh tăng INC DPTR trong 2 chu ky máy, các lệnh MUL AB và DIV AB trong 4 chu ky máy.Các lệnh logic: Nhóm lệnh logic của 89C51 rhực hiện các phép toán logic (AND, OR, XOR, NOR) trên các byte dữ liệu và thực hiện trên từng bit có cùng giá trị vị trí (trọng số). Tất cả các lệnh logic sử dụng thanh chứa A để lưu một toán hạng sẽ được thực thi trong 1 chu ky máy, ngược lại nếu sử dụng thanh ghi khác hoặc byte

Trang 53

Page 54: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

nhớ khác thay cho thanh chứa A, lệnh phải được thực hiện trong 2 chu ky máy. Các phép toán logic có thể được thực hiện trên một byte bất ky trong bộ nhớ dữ liệu nội mà không cần qua trung gian thanh chứa A.Các lệnh di chuyển dữ liệu: Trong RAM nội: các lệnh di chuyển dữ liệu trong không gian nhớ nội được thực thi trong 1 hoặc 2 chu ky máy. Trong RAM ngoài: với các lệnh thực hiện việc di chuyển dữ liệu giữa RAM nội với RAM ngoài, ta phải sử dụng kiểu định địa chỉ gián tiếp. Tất cả các lệnh di chuyển dữ liệu hoạt động trên bộ nhớ ngoài được thực thi trong 2 chu ky máy và sử dụng thanh chứa làm toán hạng nguồn hoặc toán hạng đích. Các tín hiệu dùng truy xuất RAM ngoài (RD và WR) chỉ tích cực trong khi lệnh MOVX được thực thi. Các bảng tìm kiếm: có 2 lệnh di chuyển dữ liệu dành cho việc đọc các bảng tìm kiếm trong bộ nhớ chương trình. Do các lệnh này truy xuất bộ nhớ chương trình, các bảng tìm kiếm chỉ có thể đọc và không được cập nhật. Mã gợi nhớ của lệnh là MOVC (move constant : di chuyển hằng). MOVC hoặc sử dụng bộ đếm chương trình hoặc con trỏ dữ liệu làm thanh ghi nền và thanh chứa A chứa địa chỉ offset. Lệnh này có thể truy xuất một bảng 256 điểm nhập được đánh số từ 0 đến 255. Số của điểm nhập yêu cầu được nạp cho thanh ghi A và con trỏ dữ liệu được khởi động để chứa địa chỉ đầu bảng.Các lệnh xử lý bit: Bộ xử lý 89C51 chứa 1 bộ xử lý logic trên bit cho phép ta thực hiện các phép toán đơn bit. Các lệnh truy xuất bit gồm các lệnh rẽ nhánh, di chuyển, set, xóa, lấy bù, OR và AND. Mọi thao tác truy xuất bit đều sử dụng kiểu định địa chỉ trực tiếp với địa chỉ bit từ 00H đến 7FH trong 128 vị trí thấp, và từ địa chỉ 80H đến FFH trong không gian SFR. Các địa chỉ bit ở 128 vị trí thấp thuộc các byte có địa chỉ từ 20H đến 2FH được đánh số liên tục từ bit 0 của byte ở địa chỉ 20H ( bit 00H ) đến bit 7 của byte ở địa chỉ 2FH (bit 7FH). Các bit có thể được set và xóa bằng 1 lệnh. Điều khiển đơn bit được dùng cho các thiết bị xuất/nhập như relay, động cơ, cuộn dây, các LED, mạch còi báo động, loa, hoặc nhập từ các chuyển mạch hoặc các bộ chỉ thị trạng thái.Các lệnh rẽ nhánh: - Trong tập lệnh của 89C51 có nhiều lệnh điều khiển luồng chương trình, gồm các lệnh gọi một thủ tục và quay về từ một thủ tục, rẽ nhánh có điều kiện hoặc không có điều kiện. - Các bảng nhảy : lệnh JMP @A+DPTR hỗ trợ các thao tác nhảy phụ thuộc vào trường hợp cụ thể cho các bảng nhảy. Địa chỉ đích được tính ở thời điểm thực thi lệnh là tổng của nội dung thanh ghi 16 bit DPTR với nội dung của thanh chứa A. DPTR được nạp địa chỉ của bảng nhảy và thanh chứa A đóng vai trò của một thanh ghi chỉ số.

Trang 54

Page 55: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

- Chương trình con và ngắt : dùng các lệnh CALL, ACALL và LCALL, sử dụng các lệnh tuyệt đối và dài. Các chương trình con được kết thúc bằng lệnh RET, lệnh này trả việc thực thi chương trình trở về lệnh theo sau lệnh CALL. Còn lệnh RETI trả điều khiển về chương trình gọi từ 1 trình phục vụ ngắt ISR. Điểm khác nhau giữa RET và RETI là RETI báo hiệu cho hệ thống điều khiển ngắt rằng quá trình xử lý ngắt đã xong. Nếu không có một ngắt nào được duy trì trong thời gian RETI thực thi, RETI thực thi giống như RET. - Nhảy có điều kiện : 89C51 cung cấp cho ta các lệnh nhảy có điều kiện, sử dụng kiểu định địa chỉ tương đối và cùng bị giới hạn ở khoảng cách nhảy từ -128 byte đến +127 byte kể từ lệnh theo sau lệnh nhảy có điều kiện.

Trang 55

Page 56: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 4GIỚI THIỆU VỀ CHUẨN RS 232

4.1. Giới thiệu chung về chuẩn RS232 :Để bảo đảm sự tương thích giữa các thiết bị truyền dữ liệu nối tiếp do các

hãng khác nhau sản xuất, năm 1960 Hiệp hội Công nghiệp Điện tử (EIA) đã xây dựng một chuẩn giao diện gọi là RS232. 1963, chuẩn này được cải tiến gọi là RS232A, RS232B, RS232C… gọi chung là chuẩn RS232.RS232 lúc đầu được xây dựng phục vụ chủ yếu trong việc ghép nối điểm - điểm giữa hai thiết bị đầu cuối DTE (Data Terminal Equipment) chủ yếu là máy tính và các thiết bị đầu cuối gửi và nhận dữ liệu. Còn DCE (Data Cornmunication Equipment) là thiết bị truyền thông dữ liệu, chẳng hạn như các modem chịu trách nhiệm về truyền dữ liệu. Vì thế chuẩn RS232 tích hợp không những ở Modem, PC… mà còn được tích hợp rất nhiều ở các thiết bị công nghiệp có chức năng truyền dữ liệu số.

Đặc điểm:

Chuẩn RS232 quy định 9 đường truyền dữ liệu ở dạng cơ bản và 25 đường truyền ở dạng mở rộng. Nó quy định theo phương pháp truyền dữ liệu theo dạng nhị phân nối tiếp giữa thiết bị đầu cuối truyền số liệu và thiết bị truyền số liệu. Tuy nhiên chúng ta chỉ cần một số đường là đáp ứng đủ chức năng truyền số liệu.

Ở RS232 có mức điện áp từ -12V +12V. Mức cao [1] tương ứng với mức -12V -3V, mức thấp [0] tương ứng với mức +3V +12V, khoảng từ -3V đến +3V không xác định. Do đó, để nối RS232 với PC đều phải qua bộ biến đổi điện áp như MAX232 để chuyển mức logic TTL sang mức điện áp của RS232 và ngược lại.

Đối tượng Mức logic Mức điện áp tương ứng

Cổng COM(Mức RS232C)

1 -12V đến -3V

0 +3V đến +12V

Vi điều khiển(Mức TTL)

1 +5V

0 0V

Chế độ làm việc :

Chế độ làm việc của hệ thống RS232 là hai chiều toàn phần, tức là hai thiết bị tham gia cùng có tác dụng thu và phát tín hiệu cùng một lúc. Như vậy, việc thực hiện truyền thông cần tối thiểu 3 dây dẫn - trong đó hai dây tín hiệu nối chéo các đầu thu phát của hai trạm và một dây đất.

Trang 56

Page 57: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Ngày nay cùng với sự ra đời của các vi mạch thế hệ mới đã làm tăng tốc độ truyền nhận của chuẩn này nhưng mà nó không đạt được tốc độ tới 460kB. Lý do thật đơn giản: đầu tiên ta phải xét tới nguyên tắc truyền của RS232 đó là truyền nối tiếp, thứ hai việc truyền nhận thông tin theo một cách nào đó luôn phải tuân thủ theo nguyên tắc "bắt tay" nghĩa là phải có một bên yêu cầu sau đó yêu cầu phải được chấp nhận rồi dữ liệu mới được truyền đi. Chuẩn RS232 đầy đủ luôn tuân thủ đúng theo nguyên tắc này. Việc truyền dữ liệu theo RS232 với 3 dây chỉ thực hiện được trong hệ thống chỉ có hai thành viên mà thôi. Nếu trong một mạng truyền thông có nhiều thành viên tham gia bắt buộc truyền theo RS232 phải có đầy đủ các dây nối. Nguyên tắc truyền dữ liệu thông qua RS232 dựa trên sự so sánh điện áp của dây dẫn với đất theo các mức [0] hoặc [1] như nguyên lý đã trình bày ở trên. Chính vì lý do này mà nó không truyền đi xa được (chỉ hoạt động trong khoảng tầm 40m trở lại). Khi truyền đi xa vượt qua mức quy định thì lúc này do sự tiêu tán điện năng trên đường dây làm cho việc thu nhận thông tin dễ rơi vào tình trạng không xác định. Còn một khuyết điểm nữa đó là các tín hiệu đều lấy điểm chuẩn là đường mass chung dẫn đến dễ bị nhiễu, dẫn đến không thể truyền xa được. Vì thế cần chú ý điều này khi thiết kế bất ky hệ thống truyền tin nào.

4.2. IC Max 232 và cách giao tiếp :4.2.1. Giới thiệu về IC Max 232 :

Do chuẩn RS232 ra đời khá lâu, trước khi có họ mạch vi điện tử TTL, vì vậy mức điện áp vào/ra của nó không tương thích với TTL. Vì thế đòi hỏi cần có một bộ điều khiển đường truyền (bộ chuyển đổi điện áp) để chuyển đổi các tín hiệu RS232 về các mức điện áp TTL được các chân TxD và RxD của 8051 chấp nhận. Vì thế IC MAX232 ra đời để chuyển đổi từ mức điện áp RS232 về mức TTL và ngược lại. Một điểm mạnh khác của MAX232 đó là dùng điện áp +5V như 8051.

Trang 57

Page 58: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

MAX 232 có 2 bộ điều khiển đường truyền là nhận và truyền dữ liệu. Các bộ điều khiển đường truyền dùng cho TxD được gọi là T1 và T2 và bộ điều khiển đường nhận cho RxD được gọi là R1 và R2. Trong nhiều ứng dụng thì chỉ có 1 cặp được dùng. Ví dụ T1 và R1 được dùng với nhau cho trường hợp TxD và RxD của 8051, cặp còn lại (T2 và R2) thì không sử dụng. Để ý rằng, bộ điều khiển T1 của MAX232 có gán T1in và T1out (trên các chân số 11 và 14 tương ứng), R1 cũng có R1in và R1out (trên các chân 13 và 12). Chân T1in (chân 11) của MAX232 được nối với chân TxD của VXL (chân 11) để truyền mức logic TTL từ VXL vào MAX232; sau đó T1out được nối tới chân RxD (chân 2) của cổng COM_là chân nhận dữ liệu để PC đọc tín hiệu này. Ngược lại chân R1in (chân 13) là chân đọc dữ liệu vào của MAX232 nối vào chân TxD (chân 3) của cổng COM_là chân truyền dữ liệu của PC để MAX232 nhận tín hiệu từ PC, sau đó chân R1out (chân 12) của MAX232 được nối với chân RxD của VXL (chân 10) để VXL nhận tín hiệu điều khiển từ PC.

Chi tiết cổng COM của PC

Trang 58

Page 59: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

4.2.2. Cách giao tiếp giữa RS 232 và PC :

V C C

XTA L 1

R S T

C 1 0

3 3 P

C 1 11 0 U F

R 1 71 0 0

C 2 3

1 0 U F

U 3

MA X232

13

8

1 1

1 0

1

3

4

5

2

6

1 2

9

14

7

16

15

R1I

N

R 2 I N

T1 I N

T2 I N

C +

C 1 -

C 2 +

C 2 -

V+

V -

R 1 O U T

R 2 O U T

T1O

UT

T2 O U T VC

CG

ND

Y 1

1 1 . 0 5 9 2 M H z

C 9

3 3 P

U 1

A T8 9 C 5 1

9

1 81 9

20

2 93 0

3 14

0

12345678

2 12 22 32 42 52 62 72 8

1 01 11 21 31 41 51 61 7

3 93 83 73 63 53 43 33 2

R S T

XTA L 2XTA L 1

GN

D

P S E NA L E / P R O G

E A / V P PV

CC P 1 . 0

P 1 . 1P 1 . 2P 1 . 3P 1 . 4P 1 . 5P 1 . 6P 1 . 7

P 2 . 0 / A 8P 2 . 1 / A 9P 2 . 2 / A 1 0P 2 . 3 / A 1 1P 2 . 4 / A 1 2P 2 . 5 / A 1 3P 2 . 6 / A 1 4P 2 . 7 / A 1 5

P 3 . 0 / R XDP 3 . 1 / TXD

P 3 . 2 / I N T0P 3 . 3 / I N T1

P 3 . 4 / T0P 3 . 5 / T1

P 3 . 6 / W RP 3 . 7 / R D

P 0 . 0 / A D 0P 0 . 1 / A D 1P 0 . 2 / A D 2P 0 . 3 / A D 3P 0 . 4 / A D 4P 0 . 5 / A D 5P 0 . 6 / A D 6P 0 . 7 / A D 7

R S T

C 2 11 0 U F

V C C

V C C

R 1 88 . 2 K

V B 1 S U B -D 9

59 48 37 261

XTA L 2

1 0 U F

C 2 21 0 U F

XTA L 2

XTA L 1

S W 1

Hình 4.1 Sơ đồ đấu nối MAX 232 với VXL và giao tiếp PC thông qua cổng COM

MAX 232 cần có 4 tụ điện có giá trị từ 1 đến 22uF. Ghi chú : Trong mạch trên ta thấy chỉ sử dụng chân số 2, số 3 và số 5 của cổng COM mà thôi. Tất cả các chân khác đều bỏ.

Trang 59

Page 60: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 5THIẾT KẾ VÀ THI CÔNG MÔ HÌNH

5.1. Thiết kế mô hình :5.1.1. Yêu cầu đặt ra cho mô hình :

Thiết kế mô hình tại một ngã tư có hai chiều lưu thông.

Đèn báo và vị trí đặt camera cho phù hợp.

Bố trí màu sắc nền đường đúng với yêu cầu.

5.1.2. Thi công mô hình :

Hình 5.1 khung mô hình và nền đường

Trang 60

Page 61: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 5.2 khung mô hình khi gắn camera

Hình 5.3 mô hình khi gắn camera và đèn

Trang 61

Page 62: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 5.4 cận cảnh mô hình khi gắn đèn

Trang 62

Page 63: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 5.5 mô hình khi có xe

Trang 63

Page 64: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 5.6 những hình ảnh về mô hình hoàn chỉnh

Trang 64

Page 65: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

5.1.3. Thi công mạch điều khiển :Sơ đồ mạch điều khiển :

Trang 65

Page 66: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

D A TA 2

S L E _ L E D 2

SLE_

LED_

VANG

R 1 5 3 3 0

R 1 7 3 3 0

U 2

L E D 7 D O A N

7 510912463 8

A DPGFEDCBCA CA

C 5C

S L E _ L E D _ XA N H _ 1

S L E _ L E D 3

+ C 1 11 0 u F

SLE_

LED2

V C C

V C C

S L E _ L E D _ V A N G

Q 1

P N P B C E

+

C 9

1 0 u F

S L E _ L E D 1

SLE_

LED4

R 1 6 3 3 0

R 6R

D 4

L E D

C 13 3 p

D 5

L E D

-+

D 7

B R I D G E

1

3

2

4V C C

Q 4

P N P B C E

R S T

SLE_

LED_

XANH

_1

R XD

J 1

C O N 3

123

Q 2

P N P B C E

D 3

L E D

U 7

M A X2 3 2

1

3

4

526

1 2

9

1 1

1 0

1 3

8

1 4

7

C 1 +

C 1 -

C 2 +

C 2 -V +V -

R 1 O U T

R 2 O U T

T1 I N

T2 I N

R 1 I N

R 2 I N

T1 O U T

T2 O U T

Q 3

P N P B C E

R 1 2 3 3 0

C 2

3 3 p

C 4C A P N P

VCC

SLE_

LED1

V C C

R 1 3 3 3 0

S W 1

R E S E T

1

4

2

3

R 3R

R 1 0R

D 6

L E D

D 2

L E D

+

C 8

1 0 u F

D A TA 1

S L E _ L E D _ XA N H

Y 1

Z TA

U 3

L E D 7 D O A N

7 510912463 8

A DPGFEDCBCA CA

TXD

R S T D A TA 4

SLE_

LED_

DO_1

D A TA 7

C 31 0 u

V C C

S L E _ L E D 4

U 6

L M 7 8 0 5 / TO1

2

3V I N

GNDV O U T

R 4R

SLE_

LED_

XANH

SLE_

LED3

U 5

A T8 9 C 5 1

9

1 8

1 9

2 93 0

31

12345678

2 12 22 32 42 52 62 72 8

1 01 11 21 31 41 51 61 7

3 93 83 73 63 53 43 33 2

R S T

XTA L 2

XTA L 1

P S E NA L E / P R O G

EA/VP

P

P 1 . 0P 1 . 1P 1 . 2P 1 . 3P 1 . 4P 1 . 5P 1 . 6P 1 . 7

P 2 . 0 / A 8P 2 . 1 / A 9

P 2 . 2 / A 1 0P 2 . 3 / A 1 1P 2 . 4 / A 1 2P 2 . 5 / A 1 3P 2 . 6 / A 1 4P 2 . 7 / A 1 5

P 3 . 0 / R XDP 3 . 1 / TXD

P 3 . 2 / I N T0P 3 . 3 / I N T1

P 3 . 4 / T0P 3 . 5 / T1

P 3 . 6 / W RP 3 . 7 / R D

P 0 . 0 / A D 0P 0 . 1 / A D 1P 0 . 2 / A D 2P 0 . 3 / A D 3P 0 . 4 / A D 4P 0 . 5 / A D 5P 0 . 6 / A D 6P 0 . 7 / A D 7

R 1 1 3 3 0

V C C

R 2R

R 1 91 0 K

R 9R

U 1

L E D 7 D O A N

7 510912463 8

A DPGFEDCBCA CA

SLE_

LED_

VANG

_1

R 7R

D 1

L E D

D A TA 3

C 6C

S L E _ L E D _ D O _ 1

S L E _ L E D _ D O

TXD

SLE_

LED_

DO

J 2

C O N 9

123456789

R 1R

U 4

L E D 7 D O A N

7 510912463 8

A DPGFEDCBCA CA

D A TA 5

S L E _ L E D _ V A N G _ 1

R XD

V C C

R 5R

+ C 1 01 0 u F

C 7C

D A TA 6

R 8R

R 1 4 3 3 0

P 1

rs 2 3 2

594837261

Trang 66

Page 67: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 5.7 mạch điều khiển

Trang 67

Page 68: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

5.2. Xây dựng chương trình điều khiển trên máy tính và vi xử lý :5.2.1. Lưu đồ giải thuật :Trên máy tính :

Trang 68

Page 69: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Trang 69

Page 70: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Trên vi xử lý :

5.2.2. Chương trình cho vi xử lý :

Trang 70

END

Page 71: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

$MOD51

XANH1 BIT P1.0DO1 BIT P1.1VANG1 BIT P1.2

XANH2 BIT P1.5DO2 BIT P1.6VANG2 BIT P1.7BIEN_XANH EQU 30HBIEN_DO EQU 31HS_KTRA BIT 20H

;PORT 2 CHON LED;PORT 0 DATA

;60H HANG CHUC 1;61H HANG DON VI 1;62H HANG CHUC 2;63H HANG DON VI 2

ORG 00HJMP BEGIN

ORG 0023HJMP ISR

ORG 0030HBEGIN:

MOV P2,#255MOV P0,#255MOV P1,#255MOV P3,#255;------------------------THIET LAP SERIAL---MOV TMOD,#21HMOV SCON,#01010010B ;BIT REN =1 CHO PHEP THU CAC KY TU 52hMOV TH1,#-3 ;TOC DO 9600 BAUD

Trang 71

Page 72: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

SETB ESSETB TR1SETB TISETB EA

;------------------------------------------------------MOV BIEN_XANH,#30HMOV BIEN_DO,#34H

MAIN:MOV P1,#0FFHLCALL DO_XANHLCALL XANH_DOLJMP MAIN

;_______________________________________TEST_TR:

JNB TI,$CLR TIMOV SBUF,ARET

ISR:TRUYEN:

;JNB TI,NHAN;CLR TI

NHAN:JNB RI , EXIT_SERIALCLR RIMOV A,SBUFCALL TEST_TR

;RETI;===================================

CJNE A,#'A',NEXT1

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#40HMOV BIEN_DO,#44H

Trang 72

Page 73: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

JMP EXIT_SERIAL;--------------------------------------

NEXT1:CJNE A,#'B',NEXT2

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#32HMOV BIEN_DO,#32HJMP EXIT_SERIAL;----------------------------------------

NEXT2:CJNE A,#'C',NEXT5CLR AMOV BIEN_XANH,#34HMOV BIEN_DO,#30HJMP EXIT_SERIAL;---------------------------------------

NEXT3:CJNE A,#'D',NEXT4

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#36HMOV BIEN_DO,#28HJMP EXIT_SERIAL

NEXT4:CJNE A,#'E',NEXT5

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#38HMOV BIEN_DO,#26HJMP EXIT_SERIAL

NEXT5:

Trang 73

Page 74: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

CJNE A,#'F',NEXT6CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#28HMOV BIEN_DO,#36HJMP EXIT_SERIAL

NEXT6:CJNE A,#'G',NEXT7

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#26HMOV BIEN_DO,#38HJMP EXIT_SERIAL

NEXT7:CJNE A,#'H',NEXT8

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#24HMOV BIEN_DO,#40HJMP EXIT_SERIAL

NEXT8:CJNE A,#'S',NEXT9

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#22HMOV BIEN_DO,#42HJMP EXIT_SERIAL

NEXT9:CJNE A,#'U',NEXT10

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#20H

Trang 74

Page 75: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

MOV BIEN_DO,#44HJMP EXIT_SERIAL

NEXT10:

CALL TEST_TRSETB S_KTRACLR AMOV BIEN_XANH,#18HMOV BIEN_DO,#46HJMP EXIT_SERIAL

; MOV 08H,AEXIT_SERIAL:

RETI;---------------------------------------DO_XANH:

MOV R3,BIEN_DOMOV R4,BIEN_XANH;MOV P1,#00HMOV DPTR,#DULIEUCLR DO1CLR XANH2

LOOP:MOV A,R3ADD A,#99H DA AMOV R3,AANL A,#0FHMOV 61H,AMOV A,R3ANL A,#0F0HSWAP AMOV 60H,A

MOV A,R4ADD A,#99HDA AMOV R4,AANL A,#0FHMOV 63H,AMOV A,R4

Trang 75

Page 76: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

ANL A,#0F0HSWAP AMOV 62H,A

CJNE R4,#99H,LOOP2SETB XANH2CLR VANG2MOV R4,#03HMOV 63H,#03HMOV 62H,#00H

LOOP2:LCALL QUETLEDJNB S_KTRA,CONTI1CLR S_KTRAJMP DO_XANH

CONTI1:CJNE R3,#00H,LOOPRET

;___________________________________________XANH_DO:

MOV P1,#0FFHMOV R4,BIEN_DOMOV R3,BIEN_XANH;MOV P1,#00HMOV DPTR,#DULIEUCLR DO2CLR XANH1

LOOP3:

MOV A,R3ADD A,#99HDA AMOV R3,AANL A,#0FHMOV 61H,AMOV A,R3ANL A,#0F0HSWAP AMOV 60H,A

MOV A,R4

Trang 76

Page 77: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

ADD A,#99HDA AMOV R4,AANL A,#0FHMOV 63H,AMOV A,R4ANL A,#0F0HSWAP AMOV 62H,A

CJNE R3,#99H,LOOP4SETB XANH1CLR VANG1MOV R3,#03HMOV 61H,#03HMOV 60H,#00H

LOOP4:LCALL QUETLEDJNB S_KTRA,CONTI2CLR S_KTRAJMP XANH_DO

CONTI2:CJNE R4,#00H,LOOP3RET

HIENTHI:PUSH 00HPUSH ACCMOV R6,#0F7H ;BIEN CHON LED TICH CUCMOV R0,#063H ;DIA CHI DE LAY DU LIEU HIEN THI

DISP:MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,R6LCALL DELAYMOV P2,#0FFHDEC R0MOV A,R6

Trang 77

Page 78: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

RR AMOV R6,ACJNE R0,#05FH,DISP ;DIEU KIEN QUET DU 4 LEDPOP ACCPOP 00HRET

;_______________________________________________DELAY:

PUSH 00HPUSH 01HMOV R0,#10

DEL:MOV R1,#25DJNZ R1,$DJNZ R0,DELPOP 01HPOP 00HRET

;_______________________________________________QUETLED:

PUSH 00H

MOV R0,#100LOOP1:

MOV TH0,#HIGH(-10000)MOV TL0,#LOW(-10000)SETB TR0

SCAN:LCALL HIENTHIJNB TF0,SCANCLR TR0CLR TF0DJNZ R0,LOOP1POP 00HRET

;======================================DELAY_MS123:

MOV R2,#5DELAY_2:

MOV R0,#200

Trang 78

Page 79: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

DELAY_1:MOV R1,#250DJNZ R1,$DJNZ R0,DELAY_1DJNZ R2,DELAY_2

RET

DULIEU:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

5.2.3. Chương trình trên máy tính :Chương trình cho giao diện chính :

function varargout = LuanVan_DenGiaoThongThongMinh(varargin)% LUANVAN_DENGIAOTHONGTHONGMINH M-file for LuanVan_DenGiaoThongThongMinh.fig% LUANVAN_DENGIAOTHONGTHONGMINH, by itself, creates a new LUANVAN_DENGIAOTHONGTHONGMINH or raises the existing% singleton*.%% H = LUANVAN_DENGIAOTHONGTHONGMINH returns the handle to a new LUANVAN_DENGIAOTHONGTHONGMINH or the handle to% the existing singleton*.%% LUANVAN_DENGIAOTHONGTHONGMINH('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in LUANVAN_DENGIAOTHONGTHONGMINH.M with the given input arguments.%% LUANVAN_DENGIAOTHONGTHONGMINH('Property','Value',...) creates a new LUANVAN_DENGIAOTHONGTHONGMINH or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before LuanVan_DenGiaoThongThongMinh_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to LuanVan_DenGiaoThongThongMinh_OpeningFcn via varargin.

Trang 79

Page 80: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help LuanVan_DenGiaoThongThongMinh

% Last Modified by GUIDE v2.5 27-May-2009 12:33:22

% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @LuanVan_DenGiaoThongThongMinh_OpeningFcn, ... 'gui_OutputFcn', @LuanVan_DenGiaoThongThongMinh_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 LuanVan_DenGiaoThongThongMinh is made visible.function LuanVan_DenGiaoThongThongMinh_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.

Trang 80

Page 81: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

% 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 LuanVan_DenGiaoThongThongMinh (see VARARGIN)

% Choose default command line output for LuanVan_DenGiaoThongThongMinhhandles.output = hObject;

% Update handles structureguidata(hObject, handles);

% UIWAIT makes LuanVan_DenGiaoThongThongMinh wait for user response (see UIRESUME)% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.function varargout = LuanVan_DenGiaoThongThongMinh_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 pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles)% hObject handle to pushbutton6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

H1a=imread('chupnenA.png');axes(handles.axes7),imshow(H1a);H2a=imread('chupsosanhA.png');

Trang 81

Page 82: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

axes(handles.axes8),imshow(H2a);H1b=imread('D:\ProgramFiles\MatLab\work\chupnenB.png');axes(handles.axes12),imshow(H1b);H2b=imread('D:\ProgramFiles\MatLab\work\chupsosanhB.png');axes(handles.axes13),imshow(H2b);

%s=serial('com1','baudrate',9600,'databits',8);%la thuc hien tryen noi tiep thong wa cong COM1,toc do baud dc chon la 9600, truyen 8 bit du lieu%fopen(s);% cho phep mo cong COM tren may tinh.May san sang doi tin hieu de gui xuong vi xu ly%fprintf(s,'S');%gui chu S xuong vi xu ly%out=fscanf(s);%nhan tin hieu (du lieu) tu vi xu ly gui len%fclose(s);%dong cong truyen thong noi tiep%delete(s);%xoa tin hieu cong noi iep khoi bo nho%clear s;%xoa cac ket qua ve cong truyen thong ra khoi cua so lam viec

% --- Executes on button press in pushbutton7.

function pushbutton7_Callback(hObject, eventdata, handles)% hObject handle to pushbutton7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

%s=serial('com1','baudrate',9600,'databits',8);%la thuc hien tryen noi tiep thong wa cong COM1,toc do baud dc chon la 9600, truyen 8 bit du lieu%fopen(s);% cho phep mo cong COM tren may tinh.May san sang doi tin hieu de gui xuong vi xu ly%fprintf(s,'R');%gui chu S xuong vi xu ly%out=fscanf(s);%nhan tin hieu (du lieu) tu vi xu ly gui len%fclose(s);%dong cong truyen thong noi tiep%delete(s);%xoa tin hieu cong noi iep khoi bo nho%clear s;%xoa cac ket qua ve cong truyen thong ra khoi cua so lam viec

h=imread('hinhnen.png'); axes(handles.axes11),imshow(h); set(handles.text15,'string',''); axes(handles.axes7),imshow(h); axes(handles.axes8),imshow(h);

Trang 82

Page 83: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

axes(handles.axes12),imshow(h); axes(handles.axes13),imshow(h); set(handles.text10,'string','Danh gia Mat Do Luu Thong');

delete('chupsosanhA.png');clear chupsosanhA.png;

set(handles.text11,'string','Danh Gia Mat Do Luu Thong');

delete('chupsosanhB.png');clear chupsosanhB.png;

set(handles.text16,'string','Danh Gia Ket Qua Phan Tich');

% --- Executes on button press in pushbutton17.

function pushbutton17_Callback(hObject, eventdata, handles)% hObject handle to pushbutton17 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)close;% --- Executes on button press in radiobutton1.function radiobutton1_Callback(hObject, eventdata, handles)% hObject handle to radiobutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)

state=get(handles.radiobutton1,'value');if state==0 h=imread('hinhnen.png'); axes(handles.axes11),imshow(h); set(handles.text15,'string',''); axes(handles.axes7),imshow(h); axes(handles.axes8),imshow(h); axes(handles.axes12),imshow(h); axes(handles.axes13),imshow(h);

Trang 83

Page 84: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

else h=imread('huan.jpg'); axes(handles.axes11),imshow(h); set(handles.text15,'string','XIN KINH CHAO QUY KHACH'); i=imread('hinhnen.png'); axes(handles.axes7),imshow(i); axes(handles.axes8),imshow(i); axes(handles.axes12),imshow(i); axes(handles.axes13),imshow(i);end

% Hint: get(hObject,'Value') returns toggle state of radiobutton1

% --- Executes on button press in pushbutton30.function pushbutton30_Callback(hObject, eventdata, handles)% hObject handle to pushbutton30 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)H1a=imread('chupnenA.png');

H2a=imread('chupsosanhA.png');

%H2=imread('chup_02.png');%figure(1),imshow(H1),title('Hinh khong gian mau');%figure(2),imshow(H2),title('Hinh can so sanh');%_______________kiem tra ca thong so tam hinh__________%imview(H2);%______phan vung xe ra khoi khung canh ngoai_________H2a=H2a(42:351,120:502,:);figure(3),imshow(H2a);a2=rgb2gray(H2a);figure(),imshow(a2);%imview(a2);%_____phan vung tuong tu cho anh goc_________________H1a=H1a(42:351,120:502,:);figure(5),imshow(H1a),title('Anh goc duoc phan vung gioi han');a1=rgb2gray(H1a);figure(),imshow(a1);

Trang 84

Page 85: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

%imview(a1);%______kiem tra khung hinh duoc gioi han?_____________%size(H2)a3=imabsdiff(a2,a1);%a3=bwareaopen(a3,150);%chu y them vaoa3 = medfilt2(a3);%a3=bwareaopen(a3,5);figure(6),imshow(a3);%imview(a3);%____________________________________________________________for i=1:310 for j=1:383 if 0<=a3(i,j) & a3(i,j)<=20 a3(i,j)=0; else a3(i,j)=a2(i,j); end endend figure(7),imshow(a3);%_____________________________________________________b3 = imadjust(a3);b3 = medfilt2(b3);figure(8),imshow(b3);Ha= bwareaopen(b3,500);figure(13),imshow(Ha);%se = strel('disk',0);%c3 = imopen(b3,se);%threshold = graythresh(c3);%H = im2bw(c3,threshold);%H = bwareaopen(H,50);%figure(9),imshow(H);%_______thuc hien tim gioi han cua hinh can tach_________[m,n]=size(Ha);for i=1:m for j=1:n if Ha(i,j)==1 h1=i;

Trang 85

Page 86: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

break; end endendfor i=m:-1:1 for j=1:n if (Ha(i,j)==1) h2=i; break; end end endfor j=1:n for i=1:m if (Ha(i,j)==1) c1=j; break; end; end;end;for j=n:-1:1 for i=1:m if (Ha(i,j)==1) c2=j; break; end; end;end;H3a=Ha(h2:h1,c2:c1);%figure(10),imshow(H3);%H3 = bwareaopen(H3,100);figure(10),imshow(H3a);

%imview(H3);dt_nenduong_a=m*n[q,t]=size(H3a);p=0;for i=1:q;

Trang 86

Page 87: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

for j=1:t; if H3a(i,j)==1 p=p+1; end endenddt_chiemcho_a=p%[p,q]=size(H3);%dt_chiemcho=p*qdt_tyle_a=(dt_chiemcho_a/dt_nenduong_a)*100if 0<=dt_tyle_a&dt_tyle_a<=25 %disp('mat do luu thong thua') set(handles.text10,'string','Mat Do Luu Thong Thua');else if 25<dt_tyle_a&dt_tyle_a<39 %disp('mat do luu thong binh thuong') set(handles.text10,'string','Mat Do Luu Thong Binh Thuong'); else if 39<dt_tyle_a&dt_tyle_a<100 %disp('mat do luu thong qua cao') set(handles.text10,'string','Mat Do Luu Thong Qua Cao'); end endend

H1b=imread('D:\ProgramFiles\MatLab\work\chupnenB.png');%axes(handles.axes12),imshow(H1b);H2b=imread('D:\ProgramFiles\MatLab\work\chupsosanhB.png');%axes(handles.axes13),imshow(H2b);

%global H2%[filename, pathname, filterindex]=uigetfile( ... %{'*.jpg','JPEG File (*.jpg)'; ... %'*.*','Chon file anh bat ky (*.*)'}, ... %'Chon anh can so sanh');%var=strcat(pathname,filename);%H2=imread(var);

Trang 87

Page 88: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

%H2=imread('chup_02.png');%figure(1),imshow(H1),title('Hinh khong gian mau');%figure(2),imshow(H2),title('Hinh can so sanh');%_______________kiem tra ca thong so tam hinh__________%imview(H2);%______phan vung xe ra khoi khung canh ngoai_________H2b=H2b(42:351,120:502,:);figure(3),imshow(H2b);a2=rgb2gray(H2b);figure(),imshow(a2);%imview(a2);%_____phan vung tuong tu cho anh goc_________________H1b=H1b(42:351,120:502,:);figure(5),imshow(H1b),title('Anh goc duoc phan vung gioi han');a1=rgb2gray(H1b);figure(),imshow(a1);%imview(a1);%______kiem tra khung hinh duoc gioi han?_____________%size(H2)a3=imabsdiff(a2,a1);%a3=bwareaopen(a3,150);%chu y them vaoa3 = medfilt2(a3);%a3=bwareaopen(a3,5);figure(6),imshow(a3);%imview(a3);%____________________________________________________________for i=1:310 for j=1:383 if 0<=a3(i,j) & a3(i,j)<=20 a3(i,j)=0; else a3(i,j)=a2(i,j); end endend figure(7),imshow(a3);%_____________________________________________________

Trang 88

Page 89: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

b3 = imadjust(a3);b3 = medfilt2(b3);figure(8),imshow(b3);Hb= bwareaopen(b3,500);figure(13),imshow(Hb);%se = strel('disk',0);%c3 = imopen(b3,se);%threshold = graythresh(c3);%H = im2bw(c3,threshold);%H = bwareaopen(H,50);%figure(9),imshow(H);%_______thuc hien tim gioi han cua hinh can tach_________[m,n]=size(Hb);for i=1:m for j=1:n if Hb(i,j)==1 h1=i; break; end endendfor i=m:-1:1 for j=1:n if (Hb(i,j)==1) h2=i; break; end end endfor j=1:n for i=1:m if (Hb(i,j)==1) c1=j; break; end; end;end;for j=n:-1:1

Trang 89

Page 90: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

for i=1:m if (Hb(i,j)==1) c2=j; break; end; end;end;H3b=Hb(h2:h1,c2:c1);%figure(10),imshow(H3);%H3 = bwareaopen(H3,100);figure(10),imshow(H3b);

%imview(H3);dt_nenduong_b=m*n[q,t]=size(H3b);p=0;for i=1:q; for j=1:t; if H3b(i,j)==1 p=p+1; end endenddt_chiemcho_b=p%[p,q]=size(H3);%dt_chiemcho=p*qdt_tyle_b=(dt_chiemcho_b/dt_nenduong_b)*100if 0<=dt_tyle_b&dt_tyle_b<=25 %disp('mat do luu thong thua') set(handles.text11,'string','Mat Do Luu Thong Thua');else if 25<dt_tyle_b&dt_tyle_b<39 %disp('mat do luu thong binh thuong') set(handles.text11,'string','Mat Do Luu Thong Binh Thuong'); else if 39<dt_tyle_b&dt_tyle_b<100 %disp('mat do luu thong qua cao') set(handles.text11,'string','Mat Do Luu Thong Qua Cao');

Trang 90

Page 91: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

end endend

if dt_tyle_a > dt_tyle_b & 0<dt_tyle_a - dt_tyle_b< 10 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 10%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'A'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 10<dt_tyle_a - dt_tyle_b< 20 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 20%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'B'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 20<dt_tyle_a - dt_tyle_b< 30 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 30%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'C'); out=fscanf(s); fclose(s); delete(s); clear s;

Trang 91

Page 92: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

else if dt_tyle_a > dt_tyle_b & 30<dt_tyle_a - dt_tyle_b< 40 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 40%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'D'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 40<dt_tyle_a - dt_tyle_b< 50 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 50%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'D'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 50<dt_tyle_a - dt_tyle_b< 60 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 60%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'I'); out=fscanf(s); fclose(s); delete(s); clear s;

else

Trang 92

Page 93: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

if dt_tyle_a > dt_tyle_b & 60<dt_tyle_a - dt_tyle_b< 70 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : 70%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'K'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 70<dt_tyle_a - dt_tyle_b< 80 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 80%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'L'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 80<dt_tyle_a - dt_tyle_b< 90 set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 90%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'M'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_a > dt_tyle_b & 90<dt_tyle_a - dt_tyle_b< 100

Trang 93

Page 94: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

set(handles.text16,'string','Mat Do Tuyen A day Hon Mat Do Tuyen B : < 100%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'N'); out=fscanf(s); fclose(s); delete(s); clear s;

end end end end end end end end endend

if dt_tyle_b > dt_tyle_a & 0<dt_tyle_b - dt_tyle_a< 10 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 10%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'E'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 10<dt_tyle_b - dt_tyle_a< 20 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 20%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s);

Trang 94

Page 95: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

fprintf(s,'U'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 20<dt_tyle_b - dt_tyle_a< 30 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 30%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'Y'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 30<dt_tyle_b - dt_tyle_a< 40 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 40%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'H'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 40<dt_tyle_b - dt_tyle_a< 50 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 50%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'J'); out=fscanf(s);

Trang 95

Page 96: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 50<dt_tyle_b - dt_tyle_a< 60 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 60%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'V'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 60<dt_tyle_b - dt_tyle_a< 70 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : 70%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'O'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 70<dt_tyle_b - dt_tyle_a< 80 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 80%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'P'); out=fscanf(s); fclose(s); delete(s);

Trang 96

Page 97: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

clear s;

else if dt_tyle_b > dt_tyle_a & 80<dt_tyle_b - dt_tyle_a< 90 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 90%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'Q'); out=fscanf(s); fclose(s); delete(s); clear s;

else if dt_tyle_b > dt_tyle_a & 90<dt_tyle_b - dt_tyle_a< 100 set(handles.text16,'string','Mat Do Tuyen B day Hon Mat Do Tuyen A : < 100%'); s=serial('com1','baudrate',9600,'databits',8); fopen(s); fprintf(s,'Z'); out=fscanf(s); fclose(s); delete(s); clear s;

end end end end end end end end endend

Trang 97

Page 98: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

delete('chupsosanhA.png');clear chupsosanhA.png;

delete('chupsosanhB.png');clear chupsosanhB.png;

chương trình hỗ trợ camra :function varargout = Mat_Do_Tuyen_A(varargin)% MAT_DO_TUYEN_A M-file for Mat_Do_Tuyen_A.fig% MAT_DO_TUYEN_A, by itself, creates a new MAT_DO_TUYEN_A or raises the existing% singleton*.%% H = MAT_DO_TUYEN_A returns the handle to a new MAT_DO_TUYEN_A or the handle to% the existing singleton*.%% MAT_DO_TUYEN_A('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in MAT_DO_TUYEN_A.M with the given input arguments.%% MAT_DO_TUYEN_A('Property','Value',...) creates a new MAT_DO_TUYEN_A or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before Mat_Do_Tuyen_A_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to Mat_Do_Tuyen_A_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

% Copyright 2002-2003 The MathWorks, Inc.

Trang 98

Page 99: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

% Edit the above text to modify the response to help Mat_Do_Tuyen_A

% Last Modified by GUIDE v2.5 27-May-2009 11:00:12

% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Mat_Do_Tuyen_A_OpeningFcn, ... 'gui_OutputFcn', @Mat_Do_Tuyen_A_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 Mat_Do_Tuyen_A is made visible.function Mat_Do_Tuyen_A_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 Mat_Do_Tuyen_A (see VARARGIN)

% Choose default command line output for Mat_Do_Tuyen_Ahandles.output = hObject;

% Update handles structureguidata(hObject, handles);

Trang 99

Page 100: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

% UIWAIT makes Mat_Do_Tuyen_A wait for user response (see UIRESUME)% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.function varargout = Mat_Do_Tuyen_A_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 structurevarargout{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)

vid=videoinput('winvideo',1);%preview(vid);H1a=getsnapshot(vid);%figure(2),imshow(chup_hinh);imwrite(H1a,'chupnenA.png','png');delete(vid);clear vid;

% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% 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)

vid=videoinput('winvideo',1);%preview(vid);

Trang 100

Page 101: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

H2a=getsnapshot(vid);%figure(2),imshow(H2);imwrite(H2a,'chupsosanhA.png','png');delete(vid);clear vid;

function varargout = Mat_Do_Tuyen_B(varargin)% MAT_DO_TUYEN_B M-file for Mat_Do_Tuyen_B.fig% MAT_DO_TUYEN_B, by itself, creates a new MAT_DO_TUYEN_B or raises the existing% singleton*.%% H = MAT_DO_TUYEN_B returns the handle to a new MAT_DO_TUYEN_B or the handle to% the existing singleton*.%% MAT_DO_TUYEN_B('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in MAT_DO_TUYEN_B.M with the given input arguments.%% MAT_DO_TUYEN_B('Property','Value',...) creates a new MAT_DO_TUYEN_B or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before Mat_Do_Tuyen_B_OpeningFunction gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to Mat_Do_Tuyen_B_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

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help Mat_Do_Tuyen_B

Trang 101

Page 102: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

% Last Modified by GUIDE v2.5 27-May-2009 10:41:29

% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Mat_Do_Tuyen_B_OpeningFcn, ... 'gui_OutputFcn', @Mat_Do_Tuyen_B_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 Mat_Do_Tuyen_B is made visible.function Mat_Do_Tuyen_B_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 Mat_Do_Tuyen_B (see VARARGIN)

% Choose default command line output for Mat_Do_Tuyen_Bhandles.output = hObject;

% Update handles structureguidata(hObject, handles);

% UIWAIT makes Mat_Do_Tuyen_B wait for user response (see UIRESUME)% uiwait(handles.figure1);

Trang 102

Page 103: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

% --- Outputs from this function are returned to the command line.function varargout = Mat_Do_Tuyen_B_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 structurevarargout{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)

vid=videoinput('winvideo',1);%khai bao ngo vao cho wedcam%preview(vid);%trinh dien anh dong thu duoc tu wedcamH1b=getsnapshot(vid);%chup hinh dong%figure(2),imshow(chup_hinh);%trinh dien anh tinh vua chupimwrite(H1b,'chupnenB.png','png');%luu lai anh vua chup trong mablap/workdelete(vid);clear vid;%thuc hien xoa va dong ngo vao

% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% 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)

vid=videoinput('winvideo',1);%khai bao ngo vao cho wedcam%preview(vid);%trinh dien anh dong thu duoc tu wedcamH2b=getsnapshot(vid);%chup hinh dong%figure(2),imshow(H2);%trinh dien anh tinh vua chup

Trang 103

Page 104: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

imwrite(H2b,'chupsosanhB.png','png');%luu lai anh vua chup trong mablap/workdelete(vid);clear vid;%thuc hien xoa va dong ngo vao

5.2.4. Giao diện :

5.3. Vận hành :

Trang 104

Chụp ảnhPhân tích ảnh chụp

mẫu

Tách chọn đặc trưng cho ảnh

Tính diện tích đặc trưng của ảnh

So sánh với diện tích thực của nền đường Rút ra kết luận

Page 105: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Không gian trạm Xe lưu thông

Xe được trừ tuyệt đối Hình xe chuyển sang xám

Tăng độ tương phản lấy giới hạn để tính diện tích

Phương thức vận hành qua hình ảnh

Trang 105

Page 106: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Chương 6KẾT QUẢ

6.1. màn hình giao diện:

Hinh 6.1 giao diện chính

Hình 6.2 giao diện khi có xe ở hai tuyến

Trang 106

Page 107: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 6.3 giao diện khi phân tích

6.2. Kết quả:

Hình 6.4 hình xe được lấy tại trạm giao thông

Trang 107

Page 108: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 6.5 hình xe được chuyển sang đa cấp xám

Hình 6.5 hình xe qua phép trừ tuyệt đối

Trang 108

Page 109: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 6.5 hình xe được tăng độ tương phản

Hình 6.5 hình xe được phân tích đặc trưng

Trang 109

Page 110: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

Hình 6.5 lấy giới hạn của đặc trưng

Trang 110

Page 111: Luan Van Tot Ngiep

ĐÈN GIAO THÔNG THÔNG MINH

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀIKết luận:Đề tài “Đèn giao thông thông minh” đã hoàn chỉnh và có thể hoạt động tốt với mô hình kèm theo.Hệ thống đã hoạt động đúng với yêu cầu đặt ra của đề tài là:

- Mô hình đèn giao thông ở ngã tư có camera quan sát.- Chương trình xử lý ảnh để tính toán mật độ lưu thông.- Kết hợp mô hình đèn giao thông và chương trình.

Tuy nhiên để đề tài có thể được ứng dụng trong thực tế sẽ phát sinh nhiều yếu tố gây ảnh hưởng trong quá trình xử lý như: trời mưa nền đường bị vấy bẩn, nhiễu ánh sáng….

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

- Cần thiết kế phần mềm gọn và nâng cao tốc độ xử lý.- Cần thiết kế cho hệ thống hoạt động tự động (đã tìm hiểu và đã thử: trong matlab có hàm cho phép chương trình chạy lặp lại sau một khoảng thời gian cài đặt nhưng để nó hoạt động đúng với thời gian thực ta cần phải đầu tư thời gian tìm hiểu hơn nữa).- Tăng thêm khả năng tươg phản tốt hơn giữa xe và nền đường bằng cách tạo độ nhuyễn giữa các vạch trắng đen trên nền đường.- Nâng cao chất lượng hình ảnh cần xử lý bằng cách thay thế webcam bằng các camera chuyên dụng hơn.

Trang 111