Tải bản đầy đủ (.docx) (71 trang)

THIẾT KẾ VÀ THI CÔNG BÚT CHẤM ĐỌC (có code phần mềm và layout phần cứng)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.62 MB, 71 trang )

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ
o0o
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
THIẾT KẾ VÀ THI CÔNG BÚT CHẤM ĐỌC
GVHD:Th.S BÙI QUỐC BẢO
SVTH: TRẦN MINH TÂM
MSSV: 41002868
TP. HỒ CHÍ MINH, THÁNG 12 NĂM 2014
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC BÁCH KHOA Độc lập – Tự do – Hạnh phúc.
✩ ✩
Số: ______ /BKĐT
Khoa: Điện – Điện tử
Bộ Môn: Điện Tử
NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP

1. HỌ VÀ TÊN: TRẦN MINH TÂM MSSV: 41002868
2. NGÀNH: ĐIỆN TỬ - VIỄN THÔNG LỚP : DD10DV567
3. Đề tài: “THIẾT KẾ VÀ THI CÔNG BÚT CHẤM ĐỌC”
4. Nhiệm vụ (Yêu cầu về nội dung và số liệu ban đầu):






5. Ngày giao nhiệm vụ luận văn: 03/09/2014
6. Ngày hoàn thành nhiệm vụ: 23/12/2014


7. Họ và tên người hướng dẫn: Phần hướng dẫn
Giáo viên: Th.S BÙI QUỐC BẢO Toàn bộ luận văn

Nội dung và yêu cầu LVTN đã được thông qua Bộ Môn.
Tp.HCM, ngày… tháng… năm 20
CHỦ NHIỆM BỘ MÔN NGƯỜI HƯỚNG DẪN CHÍNH
PHẦN DÀNH CHO KHOA, BỘ MÔN:
Người duyệt (chấm sơ bộ):
Đơn vị:
Ngày bảo vệ :
Điểm tổng kết:
Nơi lưu trữ luận văn:
2
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
LỜI CẢM ƠN
Xin gửi lời cảm ơn sâu sắc đến thầy hướng dẫn ThS. Bùi Quốc Bảo đã gợi ý đề tài cũng
như hướng dẫn tận tình để giúp tôi hoàn thành luận văn. Cảm ơn các thầy cô trong Bộ môn Điện
Tử nói riêng và Khoa Điện-Điện tử nói chung đã tạo điều kiện giúp đỡ và giảng dạy nhiệt tình
trong suốt các năm học qua.
Xin gửi lời cảm ơn đến các anh chị, các bạn và các em trong Câu lạc bộ Nghiên Cứu
Khoa Học Khoa Điện-Điện tử, Đại học Bách Khoa TPHCM Pay It Forward đã đồng hành, giúp
đỡ và động viên tôi trong suốt quá trình học tập cũng như thực hiện luận văn.
Đặc biệt xin cảm ơn đến gia đình đã luôn hỗ trợ và động viên giúp tôi có động lực để
phấn đấu trong học tập và cuộc sống.
Tp. Hồ Chí Minh, tháng 12 năm 2014.
Sinh viên

TRẦN MINH TÂM
3
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO

TÓM TẮT LUẬN VĂN
- Nội dung đã thực hiện:
• Đọc và tìm hiểu lý thuyết Anoto dot pattern, tìm hiểu các giải thuật xử lý ảnh và phát
triển giải thuật decode pattern thu được từ camera.
• Thiết kế và thực hiện phần cứng bút thông minh. Bút có chức năng decode được vị trí của
bút trên giấy, phát nhạc file wav.
• Xây dựng chương trình in dot pattern lên giấy, có thể điều chỉnh kích thước và mật độ dot
pattern phù hợp với yêu cầu phần cứng.
• Xây dựng chương trình xử lý ảnh trên PC bằng ngôn ngữ C, từ đó nhúng xuống MCU
ARM, tối ưu bộ nhớ và tốc độ với các thuật toán đã thực hiện trên vi xử lý ARM.
- Kết quả cần đạt được:
• Thực hiện chức năng chấm đọc cơ bản của bút thông minh.
Nội dung bài báo cáo gồm có 5 chương:
Chương 1: Giới thiệu đề tài:
Chương này trình bày sơ lược về đề tài, những mục tiêu, nhiệm vụ và tình hình hiện tại của
luận văn.
Chương 2: Lý thuyết:
Chương 2 trình bày tổng quan lý thuyết về coding pattern, giới thiệu các thư viện được sử
dụng.
Chương 3: Thiết kế và thực hiện.
Chương này trình bày các thiết kế về phần cứng của bút chấm đọc. Đồng thời trình bày quy
trình hệ thống hoạt động, các giải thuật xử lý ảnh được sử dụng, các giải thuật tác giả tự thiết kế
và áp dụng lên bút thông minh.
Chương 4: Kết quả thực hiện.
Trình bày kết quả đạt được về phần cứng và phần mềm của hệ thống.
Chương 5: Kết luận và hướng phát triển.
Trình bày về ưu và khuyết điểm của đề tài, những điều đạt được và những hạn chế của đề tài so
với mục tiêu đề ra. Đồng thời qua đó nêu lên hướng phát triển của đề tài trong tương lai.
4
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO

MỤC LỤC
5
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
DANH SÁCH HÌNH MINH HỌA
6
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
DANH SÁCH BẢNG SỐ LIỆU
7
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
CHƯƠNG 1. GIỚI THIỆU
1.1GIỚI THIỆU ĐỀ TÀI:
1.1.1 Tổng quan
về bút
thông minh:
Bút thông minh là thiết bị có thể định vị chính xác vị trí trên giấy viết bằng nhiều loại công nghệ
khác nhau, và ứng dụng của bút thông minh cũng rất rộng, từ những bút ghi nhận chữ viết của
người, các loại bút cảm ứng (stylus), các bút chấm đọc.
1.1.2 Các công
nghệ được
sử dụng
trong bút
thông minh:
Công nghệ bút thông minh đã có một lịch sử phát triển dài, đã được áp dụng qua nhiều công
nghệ, từ đó tạo nên nhiều dòng dòng sản phẩm với các tính năng và chất lượng đa dạng:
• Công nghệ siêu âm:
Hình 1.1. IRIS Note
Executive
- Thiết bị gồm một bút và một bộ thu phát. Bộ thu phát thường được gắn vào giữa, phía
trên vùng cần ghi chép. Mục đích của bộ thu phát là nó sẽ phát các sóng siêu âm ra vùng
không gian mà người dùng đang đặt bút. Trên ngòi bút sẽ có một loại chất liệu đặc biệt

mà khi sóng siêu âm chạm vào nó sẽ phản xạ trở lại bộ thu phát, chú ý rằng bộ thu phát sẽ
gồm phía thu và phía phát không cùng nằm một vị trí. Việc xác định thời gian truyền –
phản xạ và tính góc nhận về sẽ xác định được vị trí của viết trên giấy.
8
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
- Ưu điểm của thiết bị này là hoạt động được trên nhiều bề mặt (miễn là gắn được bộ thu –
phát), bút có thể không cần dùng pin (vì bút chỉ là một thiết bị thụ động), tuy nhiên với
việc các tính năng của bút ngày càng mở rộng thì việc dùng pin và gắn các ngoại vi lên
bút là chuyện không thể tránh khỏi.
- Nhược điểm của thiết bị này so với các công nghệ khác là giữa bút và bộ thu phát cần có
khoảng trống để sóng siêu âm truyền, vì thế cách đặt bút và cách cầm bút của người dùng
cũng có thể ảnh hưởng đến chất lượng của bút.
• Công nghệ camera (optical):
Hình 1.2. Livescribe
Smartpen
- Thiết bị gồm một bút có gắn camera hồng ngoại, và giấy viết được in sẵn các dot
pattern. Loại dot pattern này được in bằng một loại mực đặc biệt mà nó sẽ hấp thu
toàn bộ ánh sáng hồng ngoại, vì thế chúng ta sẽ hoàn toàn không thấy các dot pattern
có trên giấy. Các dot pattern có thể chứa nhiều thông tin, một trong các thông tin
quan trọng nhất đó là tọa độ của chính pattern đó, cũng chính là tọa độ của bút khi
chấm lên các pattern. Viết sẽ đọc pattern khi được chấm xuống bề mặt, giải mã
pattern đó và suy ra được vị trí của bút trên bề mặt giấy.
- Ưu điểm của thiết bị này là phần cứng dễ thực hiện, độ chính xác có thể tùy biến dựa
vào mật độ các dot pattern.
- Tuy nhiên thiết bị này cũng có các nhược điểm như giấy phải được in sẵn các dot
pattern.
• Ngoài ra còn rất nhiều công nghệ khác như công nghệ dùng cảm biến gia tốc, công nghệ
Active (sử dụng trường điện từ và bộ dao động LC trên bút để phát hiện vị trí), công nghệ
Trackball pen (sử dụng một đầu bi – giống như chuột máy tính), tuy nhiên hai công nghệ
camera và siêu âm hiện tại đang có ưu điểm hơn cả.

1.1.3 Tình hình
nghiên cứu
hiện tại
1.1.3.1 Tình hình ngoài nước:
9
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Bút thông minh là thiết bị được sử dụng phổ biến ở nhiều nước phát triển. Bút thông minh được
nhiều công ty nước ngoài phát triển như Livescribe, Polyvision, Maxell, LogiTech,… với các
công nghệ sử dụng và ứng dụng rất đa dạng, từ các thiết bị hỗ trợ học tiếng anh, hỗ trợ ghi chép
đến các thiết bị tích hợp nhiều tính năng.
1.1.3.2 Tình hình trong nước:
Ở nước ta, nghiên cứu và chế tạo bút thông minh vẫn còn là một lĩnh vực mới và chưa được quan
tâm. Các sản phẩm smartpen ở nước ta hầu hết là các sản phẩm nhập từ Trung Quốc, ứng dụng
còn hạn chế, chỉ tập trung vào ứng dụng chấm đọc, các thiết bị hỗ trợ học tiếng anh…
1.2NHIỆM VỤ LUẬN VĂN:
- Mục tiêu chung của luận văn là tiến tới thiết kế một bút chấm đọc đơn giản nhưng vẫn có
được đầy đủ các tính năng, cụ thể là bút có thể xác định chính xác vị trí trên giấy, phát
một file nhạc theo ý muốn, có độ chính xác và tốc độ tương đối, đồng thời xây dựng các
công cụ hỗ trợ việc kiểm tra hoạt động của bút và công cụ để thiết kế các thành phần của
bút.
- Xây dựng phần cứng của bút chấm đọc, phần cứng phải đảm bảo tính chất nhỏ gọn, có
thể cầm nắm được, đồng thời phần cứng phải hỗ trợ các tính năng cũng như khả năng xử
lý các tác vụ của bút chấm đọc.
- Tìm hiểu hoạt động của camera CMOS, vi điều khiển ARM Cortex M4, thẻ nhớ SD, chip
DAC, chip cảm biến gia tốc, module bluetooth và cách kết nối, truyền tải dữ liệu giữa
chúng.
- Nghiên cứu và áp dụng các giải thuật coding pattern, lựa chọn loại coding phù hợp với
phần cứng và khả năng triển khai. Đồng thời thiết kế một công cụ để tạo ra kho pattern
mẫu, và một công cụ để xuất pattern mẫu đó ra giấy.
- Nghiên cứu các giải thuật xử lý ảnh để tiền xử lý hình ảnh thu về từ camera CMOS.

- Thực hiện các bộ lọc ảnh để loại bỏ nhiểu, áp dụng thuật toán nhận diện cạnh để phân
đoạn các vật thể, thuật toán chuyển ảnh từ ảnh màu sang ảnh xám, thuật toán chuyển từ
ảnh xám sang ảnh binary, thuật toán phát hiện và tách các đối tượng, thuật toán lọc thông
minh các đối tượng.
- Xây dựng một thuật toán có thể giải mã ra tọa độ của bút dựa vào thông tin thu được từ
việc xử lý ảnh.
- Sử dụng SD card và chip DAC để có thể xuất âm thanh, nghiên cứu giải thuật để chạy
file mp3, wav.
- Xây dựng ứng dụng bút chấm đọc dựa vào các tính năng nêu trên.
10
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
CHƯƠNG 2. LÝ THUYẾT
2.1ANOTO DOT PATTERN:
2.1.1 Tìm hiểu về
coding
pattern:
- Coding pattern được mã hóa dưới dạng các dấu chấm. Bề mặt giấy được chia ra làm
nhiều "Code Windows". Việc decode các "Code Windows" ta sẽ tính ra được tọa độ x và
y của vị trí đang decode. Việc xác định coding pattern cùng với các tiêu chí kĩ thuật phù
hợp với ứng dụng thực tế, ta sẽ có các khó khăn chính sau:
 Khó khăn đầu tiên là việc xác định kích thước của các chấm. Vì các chấm càng nhỏ
thì việc tạo các chấm và cách decode các chấm càng khó khăn. Ngược lại, khi kích
thước của các chấm tăng lên thì độ phân giải sẽ bị giảm xuống đáng kể.
 Khó khăn tiếp theo là việc thực thi trên phần cứng có giới hạn. Vì khi decode các
pattern có thuật toán cũng như được mã hóa phức tạp thì cần phần cứng xử lí mạnh
cũng như là giải thuật decode tối ưu.
- Qua việc cân nhắc các khó khăn ở trên và qua một thời gian tìm kiếm kĩ càng. Tác giả đã
tìm hiểu và quyết định sử dụng một loại coding pattern được đề cập ở patent: WO
01/26033, đây là dot pattern được hãng Anoto phát triển, hầu hết các hãng phát triển bút
thông minh đều sử dụng patent của hãng Anoto để tạo dot pattern cho sản phẩm của

mình.
2.1.2 Anoto dot
pattern:
2.1.2.1 Lý thuyết:
- Coding pattern bao gồm các “khung ảo” (virtual raster) và các “chấm” (mark). Virtual
raster là các trục ảo mà không được nhìn thấy bởi mắt thường cũng như là thiết bị
smartpen, nó chỉ được suy ra bằng nội suy. Dựa vào vị trí các mark mà chúng ta sẽ có
được các bit 0 và 1.
11
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Hình 2.1. Mô tả coding pattern mẫu trong đề tài
.
- Hình trên gồm coding pattern 3. Các mark 4, bề mặt sẽ được chia làm trục X và trục Y.
Các "Code Windows" 5a, 5b.
Hình 2.2. Các mark và cách encoding
kí tự.
12
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
- Hình bên mô tả cách định vị các mark và vị trí của nó so với điểm trung bình. Điểm trung
bình là một điểm ảo được cắt bởi các virtual raster. Các mark 7 có thể là hình tròn. Mark 7 và
điểm trung bình 6 tạo thành một ký tự (symbol).
- Trong các thiết kế thực tế, khoảng cách giữa các raster line là 300um. Các virtual raster sẽ
vuông góc với nhau. Các khoảng cách giữa raster line cũng có thể thay đổi, ví dụ 254um để
có thể tương thích với các máy in, vì các máy in thường có độ phân giải là bội của 100dpi.
(100dpi tương đương với vị trí ngắn nhất là 25.4mm/100 = 254um). Khoảng cách giữa mark
và điểm trung bình là bằng nhau đối với các symbol.
- Cũng trong các thiết kế mẫu, khoảng cách giữa các mark và điểm trung bình là 50um. Thông
thường khoảng cách giữa mark và điểm trung bình được chọn tầm 1/6 khoảng cách giữa các
virtual raster. Và khoảng các được chọn vào tầm 1/8 đến 1/4. Nếu chọn khoảng cách bé hơn
1/8 ta sẽ rất khó khăn trong việc phân biệt khoảng cách. Nếu chọn khoảng cách lớn hơn ¼ thì

ta sẽ phải cần camera độ phân giải cao hơn nhiều để đọc chính xác vị trí của mark.
- Kích thước của các mark sẽ từ tầm 25% đến 120% khoảng cách giữa mark và điểm trung
bình.
2.1.2.2 Cách xác định vị trí:
- Giá trị của một symbol phụ thuộc vào vị trí của mark so với điểm trung bình. Như ở hình 4,
ta có tất cả 4 symbol tương ứng với 4 giá trị. Hình 4a có giá trị 1, 4b có giá trị 2, 4c có giá trị
3, 4d có giá trị 4. Với mỗi giá trị, ta sẽ có các thông số tương ứng cho vị trí trục X và vị trí
trục Y. Bảng giá trị được cho như sau:
Mark value Cell value x-code y-code
1 a 1 1
2 b 0 1
3 c 1 0
4 d 0 0
Bảng 2.1. Giá trị của x-code và y-code
tương ứng với mark value
- Với việc chia ra x-code và y-code cho mỗi symbol. Ta sẽ có được 2 thông tin độc lập cho
mỗi symbol.
- Mỗi vị trí sẽ được mã hóa bởi 4x4 điểm, vị trí sẽ bao gồm tọa độ X và tọa độ Y.
- Việc mã hóa một vị trí sẽ được ghi thành các chuỗi bit, chuỗi bit này có đặc tính là không có
một cụm 4 bit kề nhau nào lặp lại lần thứ 2 trong chuỗi bit đó. Chuỗi bit còn có đặc tính là
cyclic, nghĩa là cụm 4 bit với các bit cuối cùng của chuỗi bit cũng sẽ được xét với các bit đầu
tiên của chuỗi. Với đặc tính như vậy, ta có thể tạo được chuỗi bit có độ dài 16 bit. Tuy nhiên
ta chỉ xét chuỗi bit có độ dài là 7 bit trong các tính toán tiếp theo. Chuỗi bit đó là “0 0 0 1 0 1
0”. Với chuỗi bit này ta sẽ có được 7 position number tương ứng:
13
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Position number trong chuỗi bit: Đoạn 4 bit tương ứng:
0 0001
1 0010
2 0101

3 1010
4 0100
5 1000
6 0000
Bảng 2.2. Đoạn 4 bit tương ứng với
mỗi position number
- Pattern sẽ được chia thành các code windows F với đặc tính là mỗi code windows sẽ bao
gồm 4*4 điểm, các code windows kề nhau về trục x sẽ có một cột chung.
• Ví dụ: code windows F(0,0) sẽ bao gồm các chuỗi bit từ các cột K0, K1, K2, K3 và
các chuỗi bit từ các hàng R0, R1, R2, R3. Và code windows kề theo đường chéo của
F(0,0) sẽ là code windows F(1,1) có các tọa độ cột là K3, K4, K5, K6 và các tọa độ
hàng tương ứng là R4, R5, R6, R7. Gọi tọa độ Fx và Fy tương ứng là tọa độ của code
windows, ta sẽ có mối liên hệ giữa code windows và số cột và hàng:
Ki = 3*Fx
Rj = 4*Fy
- Để mã hóa tọa độ X, các chuỗi bit sẽ được ghi tuần tự theo cột. Cột bên trái ngoài cùng
được gọi là K0 tương ứng với tọa độ x=0. Việc mã hóa trục X sẽ dựa vào hiệu giữa các
cột đối diện nhau. Giá trị của các cột được tính ra từ position number của cột đó. Độ lớn
của hiệu sẽ quyết định bởi vị trí của coding pattern. Hiệu đó sẽ được modulo cho 7 sau đó
được gọi là Δ. Ta sẽ có 3 giá trị được tính ra là Δ0 Δ1 và Δ2. Coding pattern sẽ được mã
hóa sao cho Δ0 luôn có giá trị từ 12 tương ứng là số có trọng số thấp nhất, Δ2 và Δ3 sẽ
có giá trị từ 36 với Δ3 là số có trọng số cao nhất.
• Như vậy các số Δ được tính từ các cột sẽ có dạng: (36), (36), (12), (36),
(36), (12), (36), (36)…
o Ta sẽ tọa độ x được tính từ một số đa cơ số tạo từ Δ1, Δ2, Δ3 như sau:
Fx = (Δ2 – 3)*4*2 + (Δ1-3)*2 + Δ0-1
o Vì thế, với cách coding pattern này ta sẽ có được 4*4*2 = 32 code windows
theo trục x, các code windows theo trục x sẽ có các tọa độ: 0, 1, 2, … 31.
o Vì các code windows khác nhau sẽ cách nhau 3 cột nên số cột có thể định vị là
32*3 = 96 cột.

o Trong vài trường hợp, khi một ma trận 4*4 điểm được thu về, tọa độ trục x có
thể không được tính ra trực tiếp vì ma trận 4*4 có thể bị trùng giữa 2 code
windows khác nhau, tuy nhiên vì Δ0 có giá trị từ 12 vì thế ta sẽ xác định
được bit trọng số thấp nhấp trong chuỗi bit. Từ đó có thể tính ra vị trí của tọa
độ x.
14
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
- Để mã hóa tọa độ Y, các chuỗi bit cyclic sẽ được ghi tuần tự theo hàng ngang. Tọa độ Y
sẽ được tính trực tiếp từ các chuỗi bit mà được mã hóa cho trục y.
o Vì cũng được sử dụng các position number như trục x, các số từ trục y cũng sẽ
có giá trị từ 06, tuy nhiên với số có trọng số thấp nhất S0 giá trị nó có thể
nhận là 01, các số có trọng số cao hơn là S1, S2, S3 có giá trị từ 26.
o Như vậy các số S được tính từ các hàng sẽ có dạng: (26), (26), (26),
(01), (26), (22), (26), (01), (26)…
o Ta sẽ tọa độ x được tính từ một số đa cơ số tạo từ S0, S1, S2, S3 như sau:
Fy = (S3 - 2)*5*5*2 + (S2 - 2)*5*2 + S1*2 +S0
o Vì thế, với cách coding pattern này ta sẽ có được 5*5*5*2 = 250 code
windows theo trục y, các code windows theo trục x sẽ có các tọa độ: 0, 1, 2,
… 249.
o Vì các code windows khác nhau sẽ cách nhau 4 hàng nên số hàng có thể định
vị là 250*4 = 1000 hàng.
 Việc định vị được 1000 hàng và 96 cột sẽ cho ta 96*1000 = 96000 vị trí có thể
xác định. Ta có thể thay đổi chuỗi bit xuất hiện đầu tiên của code windows
đầu tiên. Có 7 chuỗi bit tất cả, với mỗi chuỗi bit như vậy ta mã hóa được
96000 vị trí vì thế ta sẽ mã hóa được tối đa 96000*7 = 672000 vị trí.
- Về lý thuyết với ma trận 4*4 điểm, mỗi điểm mã hóa được 2 bit thì ta sẽ có được 4^(4*4) =
4294967296 (hơn 4 tỉ) vị trí. Tuy nhiên với việc sử dụng loại mã hóa này ta sẽ có hệ số mất
mát là hơn 6000 ( 4294967296 / 672000).
- Sỡ dĩ có hệ số mất mát như vậy vì các yếu tố về giới hạn về hiệu khi tính toán trục x, chỉ có 7
bit được sử dụng thay vì sử dụng một chuỗi 16 bit trong position code. Các yếu tố này có thể

được sử dụng để có thể xác định chính xác vị trí khi bề mặt bị xoay đi các góc khác nhau, ví
dụ các góc 90°, 180°, 270°.
Ví dụ: thiết bị thu về hình ảnh các mark như sau:
15
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Hình 2.3 Coding pattern ví dụ
Với cách quy định giá trị ở trên, ta có giá trị tương ứng của ma trận 4*4 như sau:
4 4 4 2
3 2 3 4
4 4 2 4
1 3 2 4
Bảng 2.3 Coding pattern ví dụ
Ma trận trên ta suy ra được 2 ma trận 4*4 cho x-coding và y-coding
x-code: y-code:
0 0 0 0 0 0 0 1
1 0 1 0 0 1 0 0
0 0 0 0 0 0 1 0
1 1 0 0 1 0 1 0
Bảng 2.4 x-code và y-code trong
ví dụ
Từ x-code, tra theo các hàng dọc, ta có được giá trị sau: 2 0 4 6. Hiệu tương ứng cho mỗi
cột là: 2 4 2, modulo cho 7 ta được: 5 4 2. Đây là một số đa cơ số có giá trị tương ứng là:
(5-3)*8 + (4-3)*2 + (2-1) = 19
Code windows đầu tiên có position number là 0. Vì thế hiệu có giá trị 12 nằm ở ma
trận 4*4 sẽ là code windows thứ 20. Thêm vào đó, mỗi ma trận sẽ gồm 4 cột, mỗi hiệu ta
sẽ có một cột, cột xa nhất phía bên phải của ma trận sẽ có tọa độ 60 (cột thứ 61 = 3*20
+1), và cột xa nhất về bên trái của ma trận 4*4 sẽ là cột có tọa độ 57 (cột thứ 58).
Từ y-code, tra theo hàng ngang, ta có được giá trị: 0 4 1 3. Vì tọa độ x nằm ở cột thứ 58,
vị trí bắt đầu của hàng sẽ là giá trị trên trừ cho (57 modulo 7 = 1) vì thế ta có được start
position: 6 3 0 2. Chuyển đổi số đa cơ số này ta được giá trị: 4 1 0 0, ta nhận thấy rằng

cột thứ 3 chứa bit có trọng số thấp nhất, vậy cột thứ 4 sẽ là cột chứa số có trọng số lớn
nhất của code windows tiếp theo, thông thường thì số này sẽ bằng với số có trọng số lớn
nhất của code windows ta đang xét. (vì chỉ số ta sẽ tăng liên tục từ trái sang phải, cách xét
này luôn đúng, trừ trường hợp số chúng ta đang xét là số cao nhất có thể trong cột thứ 1
16
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
và thứ 2, khi đó giá trị code windows tiếp theo sẽ có số trọng số cao nhất lớn hơn một
đơn vị so với vùng đang xét). Ta tính được tọa độ tương ứng theo trục y là:
0*50 + 4*10 + 1*2 + 0*1 = 42
Cột thứ 3 tương ứng là cột có trọng số thấp nhất sẽ thuộc về code windows thứ 43 có start
position là 0 hoặc 1. Một ma trận có 4 cột vậy cột thứ 3 sẽ có tọa độ 43*4 = 172.
Như vậy có thể suy ra được tọa độ điểm nằm ở vị trí cao nhất bên trái sẽ là (58, 170).
2.2THƯ VIỆN ITEXT SHARP:
2.2.1 Giới thiệu
iText
Sharp:
iTextSharp là một thư viện mã nguồn mở để tạo và thao tác tập tin PDF bằng ngôn ngữ .NET.
Nó được viết bởi Bruno Lowagie, Paulo Soares. iText là một thư viện mạnh mẽ, được sử dụng
rộng rãi trên toàn thế giới.
2.2.2 Tính năng
của iText:
- iText có thể sử dụng bằng các ngôn ngữ: Java, .NET, GAE.
- iTextSharp là bản iText đã được port cho .NET.
- Với iText ta có thể dễ dàng tạo, sửa chữa, điều chỉnh các các tài liệu dưới dạng Portable
Document Format (PDF) với các tính năng nổi bật:
o Tạo file PDF.
o Chỉnh sửa file PDF (tạo các watermarks, nối – tách các file PDF…).
o Tạo các form điền dưới dạng PDF.
o Tạo các tài liệu dựa vào dữ liệu trong các file XML hoặc database.
2.2.3 Cài đặt

iTextSharp:
- Ta có thể cài đặt iTextSharp bằng thư viện liên kết động (dll) hoặc sử dụng tool trong
Visual Studio để thực hiện cài đặt tự động.
- Ban đầu ta cài đặt Nuget package trong Visual Studio. Đây là add-in cho Visual Studio
để hỗ trợ cài đặt các gói thư viện cho lập trình viên.
- Sau khi cài đặt Nuget package thành công, mở cửa sổ Package Manager Console và gõ
dòng lệnh sau:
PM> Install-Package iTextSharp-LGPL
17
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Như vậy các file cần thiết của iTextSharp đã được add vào project.
Sau đó ta add các header sau để sử dụng thư viện trong source code:
using iTextSharp.text;
using iTextSharp.text.pdf;
2.3THƯ VIỆN FATFS:
2.3.1 Giới thiệu
thư viện
FatFS:
Thư viện FatFs là một thư viện mã nguồn mở được viết bởi tác giả ChaN, cung cấp các hàm API
thông dụng, hoàn toàn được viết bằng ANSI C. Như vậy, hầu hết các compiler đều có thể sử
dụng thư viện này để tạo chương trình sử dụng SDCard. Thư viện FatFS có thể được sử dụng
cho nhiều dòng vi điều khiển ví dụ như 8051, PIC, AVR, ARM, Z80,… , đặc biệt với các dòng
hiệu năng thấp và tài nguyên hạn chế, còn có bản thu gọn PetitFS.
Một số tính năng, đặc điểm của thư viện FatFS:
• Tương thích với FAT file system (file system mà windows sử dụng nhiều nhất).
• Có thể port cho nhiều platform khác nhau, vì thư viện tổ chức theo nhiều lớp khác nhau, từ
lớp hardware đặc trưng cho từng dòng vi điều khiển đến lớp phần mềm bên trên.
• Khối lượng code khi build ra nhỏ, tầm trên 10KB khi lựa chọn sử dụng hạn chế các tính
năng.
• Có thể sử dụng với nhiều thẻ nhớ khác nhau một lúc.

• Hỗ trợ RTOS, hỗ trợ nhiều sector size, có thể lên đến 4KB.
2.3.2 Sơ đồ các
module của
FatFS:
18
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Hình 2.4. Cấu trúc thư viện
FatFS
Hình trên thể hiện cấu trúc thư viện FatFS:
- ff.h: header mô tả các hàm chinh được sử dụng.
- diskio.h: chứa các macro, hàm hỗ trợ giao tiếp cấp thấp với card.
- ffconf.h: chứa các macro về các dữ liệu chuẩn và cấu hình cho thẻ nhớ của FatFS.
- integer.h: chứa các mô tả về kiểu dữ liệu được sử dụng trong thư viện fatfs.
- ff.c: chứa nội dung các hàm giao tiếp với card.
- mmc.c, spi.c, device.h: các module đặc trưng cho từng dòng vi điều khiển, ở đây ta sẽ
định nghĩa các hàm cấp thấp cho thư viện FatFS hoạt động.
2.3.3 Sử dụng
thư viện
FatFS:
Để có thể sử dụng thư viện FatFS, chúng ta cần viết các module đặc trưng cho dòng vi điều
khiển mà ta đang sử dụng. Các module này cung cấp các hàm I/O để phần cứng vi điều khiển có
thể làm việc được với lớp phần mềm của FatFS. Các hàm I/O mà chúng ta phải viết được trình
bày dưới đây:
• Hàm disk_status:hàm này trả về trạng thái hiện tại của sd card (trạng thái data
protected, sd có hiện diện hay không, đọc ghi thành công hay không, not ready,…)
• Hàm disk_initialize:hàm này có chức năng khởi tạo khi làm việc với sd card, hàm
này có thể khởi tạo các module tương ứng làm việc với sd card (SDIO, SPI, USB).
19
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
• Hàm disk_read:Hàm này có chức năng đọc nội dung một sector.

Các hàm trên là các hàm cơ bản nhất chúng ta cần định nghĩa để có thể làm việc được với SD
Card với các dòng vi điều khiển khác nhau.
Sau khi định nghĩa các hàm I/O, ta có thể import các file ff.c, ff.h và sử dụng thư viện FatFS cho
ứng dụng của mình, các hàm hay sử dụng với FatFS được mô tả dưới đây:
• Hàm FRESULT f_mount(Byte drv, FATFS *fs):
Hàm này phải được gọi trước khi ta thực hiện bất cứ thao tác gì với SDCard, hàm này trả về giá
trị FRESULT (FRESULT là một enum chứa các mã trả về khi giao tiếp với SDCard) nhận đối số
truyền vào là
+ drv (số SDCard mà ta muốn sử dụng).
+ đối số dạng tham trị fs (thuộc kiểu FATFS, kiểu FATFS là 1 struct lưu các thông tin của
SDCard mà ta đang làm việc cùng) fs sẽ lưu thông tin của SDCard hiện thời để sử dụng sau.
• Hàm FRESULT f_opendir( DIR *dirobj, const char *path):
DIR là 1 biến kiểu struct, lưu các thông tin về thư mục đang xử lí.
Chức năng của hàm này là mở 1 thư mục, thông *dirobj là biến pointer để lưu thông tin về thư
mục ta muốn mở, *path là biến pointer lưu đường dẫn đến thư mục mà ta muốn mở.
• Hàm FRESULT f_readdir(DIR *dirobj, FILINFO *finfo):
Hàm này có chức năng đọc nội dung thư mục mà ta đã trỏ tới trước đó khi dùng hàm f_opendir(),
hàm này có đối số truyền vào là biến *dirobj, và trả về biến struct *finfo biến này lưu các thông
tin về file ta đọc được. Như vậy, để muốn đọc được hết các thành phần trong một thư mục, ta
phải dùng hàm này liên tục đến khi giá trị finfo->fname là NULL.
• Hàm FRESULT f_open(FIL *fp, const char *path, BYTE mode):
Hàm này có chức năng trỏ tới 1 file, biến struct *fp sẽ lưu thông tin file ta trỏ tới, pointer *path
là đối số truyền vào cho hàm, giúp cho hàm xác định được đối tượng file ta sẽ trỏ tới, mode là
access mode khi làm việc với file này (đọc, ghi, …).
• Hàm FRESULT f_read(FIL *fp, void *buff, WORD btr, WORD *br):
Hàm này giúp ta đọc nội dung của file ta trỏ tới (thông tin file vừa lấy được nhờ hàm f_open và
lưu ở biến *fp), data đọc được sẽ được lưu ở biến pointer *buff, btr là số lượng byte ta đọc để
lưu vào *buff, *br là biến pointer chỉ số byte đã đọc thành công (dùng để kiểm tra đã hết file hay
chưa).
20

Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
21
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
CHƯƠNG 3. THIẾT KẾ VÀ THỰC HIỆN
3.1TỔNG QUAN VỀ THIẾT KẾ:
Sản phẩm bút thông minh sẽ gồm 5 phần chính: coding pattern, thiết kế phần cứng và thuật toán
xử lý ảnh, thuật toán decode pattern và ứng dụng bút chấm đọc.
3.2CODING PATTERN:
3.2.1 Sơ đồ khối
tổng quát:
Hình 3.1. Sơ đồ khối tổng quát coding pattern
Để có được coding pattern, ta đi qua hai bước thiết kế chính:
- Đầu tiên ta phải có một danh sách các pattern để có thể sử dụng được, qua trình bày lý
thuyết về coding pattern, ta sẽ viết một giải thuật có thể generate coding pattern với số
lượng theo ý muốn (tất nhiên sẽ bị giới hạn bởi lý thuyết về coding pattern) và lưu các
coding pattern generate được vào một file txt. Toàn bộ quá trình này được tác giả viết
bằng một chương trình bằng ngôn ngữ C++.
- Từ ngân hàng coding pattern mà ta tạo được, ta sẽ sử dụng nó để in lên giấy thực. Việc in
lên giấy phải đảm bảo về độ chính xác, bởi nó quyết định đến hiệu năng của bút trong
phần xử lý ảnh, để có thể tương tác, tạo các đối tượng hình vẽ trong file PDF, tác giả sử
dụng bộ thư viện iTextSharp và ngôn ngữ C# để có thể tạo một GUI (graphic user
interface), nhằm có thể tạo được coding pattern theo ý muốn và sở thích của người sử
dụng.
22
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
3.2.2 Giải thuật
chương
trình
generate
coding

pattern:
23
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Hình 3.2. Giải thuật chương trình generate x-code pattern
Như đã trình bày ở phần lý thuyết, do dot pattern được mã hóa với các trục x và trục y riêng độc
lập với nhau nên ta có thể viết từng hàm riêng cho mã hóa x-code và y-code.
24
Luận văn tốt nghiệp GVHD: Th.S BÙI QUỐC BẢO
Hình 3.4. Giải thuật chương trình generate y-code pattern
3.2.3 Chương
trình in
pattern lên
giấy:
Chương trình có chức năng đọc file “encoded pattern.txt”, sử dụng thư viện iTextSharp
để in các dot pattern tương ứng lên giấy.
Người sử dụng có thể thay đổi các thông số về mật độ dot pattern, kích thước của dot pattern,
khoảng cách của dot pattern so với nominal position
Hình 3.5. Chương trình thực hiện việc in dot pattern lên giấy
25

×