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.
Trang 1-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
Trang 2Bộ 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
Trang 3Xin 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.
Trang 4- 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áttriể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ủabú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 độ dotpattern 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 MCUARM, 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ủaluậ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 quytrì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 sovớ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
Trang 55
Trang 66
Trang 77
Trang 8CHƯƠNG 1 GIỚI THIỆU1.1 GIỚ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ủangườ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ôngnghệ, 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 NoteExecutive
- 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íatrê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ùngkhô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
Trang 9- Ư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ớiviệ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ênbú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ùngcũng có thể ảnh hưởng đến chất lượng của bút
• Công nghệ camera (optical):
Hình 1.2 LivescribeSmartpen
- 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 dotpattern Loại dot pattern này được in bằng một loại mực đặc biệt mà nó sẽ hấp thutoà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 tinquan trọng nhất đó là tọa độ của chính pattern đó, cũng chính là tọa độ của bút khichấ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ựavà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 dotpattern
• 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:
Trang 10Bú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 đượcnhiều công ty nước ngoài phát triển như Livescribe, Polyvision, Maxell, LogiTech,… với cáccô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 quantâ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ụngcò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.2 NHIỆ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átmộ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áccô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ủabú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, chipDAC, 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ữachú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ớiphầ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 patternmẫ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ôngminh 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ạyfile 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
Trang 11CHƯƠNG 2 LÝ THUYẾT2.1 ANOTO 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àmnhiề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íchthướ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ácpattern 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ạnhcũ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) Virtualraster 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
Trang 12Hì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ự
Trang 13- 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 trungbì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ôngthườ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ácvirtual 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ơn1/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 trungbì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:
- 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 đầutiê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 10” Với chuỗi bit này ta sẽ có được 7 position number tương ứng:
Trang 14Position number trong chuỗi bit: Đoạn 4 bit tương ứng:
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ẽ baogồ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ủaF(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 codewindows, 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áccộ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ớncủ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ừ 12 tương ứng là số có trọng số thấp nhất, Δ2 và Δ3 sẽ
có giá trị từ 36 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: (36), (36), (12), (36),(36), (12), (36), (36)…
o Ta sẽ tọa độ x được tính từ một số đa cơ số tạo từ Δ1, Δ2, Δ3 như sau:
độ x
Trang 15- Để 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ừ 06, tuy nhiên với số có trọng số thấp nhất S0 giá trị nó có thểnhận là 01, các số có trọng số cao hơn là S1, S2, S3 có giá trị từ 26
o Như vậy các số S được tính từ các hàng sẽ có dạng: (26), (26), (26),(01), (26), (22), (26), (01), (26)…
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:
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ấtmá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ó 7bit đượ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:
Trang 16sẽ 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 startposition: 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ằngcộ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ớnnhấ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ớnnhấ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étnà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
Trang 17và 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 = 42Cộ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ó startposition 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.2 THƯ 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ụngrộ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 PortableDocument 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 trongVisual 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
Trang 18Như 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:
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 APIthô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ụngcho 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ònghiệ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ínhnă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:
Trang 19Hình 2.4 Cấu trúc thư viện
FatFSHì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ềukhiể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ìnhbà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 dataprotected, 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àmnày có thể khởi tạo các module tương ứng làm việc với sd card (SDIO, SPI, USB)
Trang 20• 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 SDCard 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ôngtin 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, taphả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 haychưa)
Trang 22CHƯƠNG 3 THIẾT KẾ VÀ THỰC HIỆN3.1 TỔ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.2 CODING 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áccoding pattern generate được vào một file txt Toàn bộ quá trình này được tác giả viếtbằ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 inlê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 trongphầ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 userinterface), nhằm có thể tạo được coding pattern theo ý muốn và sở thích của người sửdụng
Trang 233.2.2 Giải thuật
chương trình generate coding pattern:
Trang 24Hì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 độclậ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
Trang 25Hì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
Trang 27Hình 3.7 Mạch nguyên lý mạch nguồn
• Khối nguồn gồm:
IC ASM1117-3.3, là một LDO với các thông số sau:
- Input: 4.75V ≤ VIN ≤ 12V
- Outpt: 3.3V, 800mA Với Vdrop-out khoảng 1V
- Nguồn 3.3V cung cấp cho hầu hết linh kiện trên mạch: nguồn cho MCU, SDCard, IC DAC PCM5141, Accelerometer MMA8452, các led…
IC TLV7101828 là một dual LDO với các thông số:
- Input: 2V ≤ VIN ≤ 5.5V
- Output1: 1.8V, 100mA với Vdrop-out khoảng 100mV
- Output2: 2.8V, 200mA với Vdrop-out khoảng 150mV
- Nguồn dual 1.8V và 2.8V từ TLV7101828 dùng để cung cấp nguồn cho modulecamera
3.3.3 Khối
camera: 3.3.3.1 Giới thiệu camera OV9655:
Camera OV9655 là một module bao gồm cả camera on-board và ống kính được thiết kế cho cácứng dụng di động đòi hỏi yêu cầu tiêu thụ ít năng lượng và kích thước nhỏ
Module OV9655 có thể lập trình để xuất hình ảnh với nhiều chuẩn output khác nhau, cộng với
bộ xử lý DSP on-chip giúp ta có thể tối ưu hình ảnh xuất ra từ module
Trang 28Đặc điểm chính của camera OV9655:
• Độ nhạy cao cho các ứng dụng ánh sáng thấp
Chức năng các chân của OV9655:
• SIOC,SIOD: là 2 chân I2C để cài đặt thanh ghi cho camera hoạt động
• theo chức năng mà mình muốn thiết lập
• VSync, HRef là 2 chân clock để đồng bộ ngang và động bộ dọc
• PCLK: Cấp xung thạch anh ngoài để tạo xung clock cho camera
• XCLK: Xung clock được truyền từ camera về STM32F4
• D0-D7: 8 chân truyền dữ liệu từ camera vè STM32F4
3.3.3.2 Thiết kế khối camera trên bút chấm đọc:
Trang 29Hình 3.8 Mạch nguyên lý khối camera
• Khối camera:
- Nguồn: cần cả 1.8V và 2.8V
- Input: có các đường SCCB (SDA – SCL), CLK_IN là các đường input
- Module camera không sử dụng thạch anh ngoài để cấp xung clock mà sử dụngchân vi điều khiển để cấp clock cho module hoạt động, mục đích là để giảm kíchthước board mạch
- Output: các chân SCCB (SDA – SCL), các chân data DCMI_D0 DCMI_D7,các chân đồng bộ: DCMI_PIXCLK, DCMI_HSYNC, DCMI_VSYNC Các chânSCCB đều có trở kéo lên vì các chân này đều là chân cực thu hở (open-collector)
3.3.3.3 Giải thích cách hoạt động và sử dụng OV9655:
• Giao thức SCCB:
o Đây là một tên giao thức do hãng OmniVision đặt tên cho giao thức điều khiển vớicamera của họ Giao thức này được sử dụng khi ta muốn thay đổi hoặc đọc giá trị cácthanh ghi điều khiển trong OV9655, đây là cách chúng ta config cho camera hoạtđộng dựa trên ý muốn của mình
o Về cơ bản giao thức này giống với giao thức I2C mà ta đã quen thuộc khi sử dụng cácloại vi điều khiển
o Ta có timing diagram của giao thức SCCB, module OV9655:
Trang 30Hình 3.9 Timing diagram của module OV9655
• Đọc data từ OV9655:
Data từ module OV9655 được đồng bộ qua 2 tín hiệu: tín hiệu hàng (Horizontal Timing) vàtín hiệu khung (Frame Timing)
• Đồng bộ hàng (Horizontal Synchronization):
Hình 3.10 Horizontal Timing của module OV9655
Đường data sử dụng ở module camera có thể config từ 10-16 bit
Ban đầu tín hiệu HREF ở mức cao, khi đó các đường data có thể đang truyền data ở frame trướchoặc đang idle Khi có xung clock từ vi điều khiển (chân PCLK) và chân HREF được tích cực
Trang 31mức 0 Khi xuất hiện cạnh lên thì ngõ vào dữ liệu bắt đầu được lấy mẫu Trong khi chân HREF ởmức cao ta sẽ lấy được data trên một hàng (row).
• Đồng bộ khung (Frame Synchronization):
Trong khi đồng bộ hàng giúp ta đọc được các dữ liệu trên một hàng của một ảnh thì đồng bộkhung giúp chúng ta thu được toàn bộ bức ảnh
Hình 3.11 Frame timing cuả module OV9655
Ở đây, module đang hoạt động ở độ phân giải XVGA (1280x1024) Đầu tiên chânVSYNC sẽ tích cực, đánh dấu cho một khung ảnh mới sẽ được lấy mẫu về
Khi chân HREF tích cực, data sẽ được truyền qua các chân D[9:0] Với mỗi khoản HREF ở mứccao ta sẽ thu được dữ liệu trên một hàng (1280 điểm ảnh) Để báo cho vi xử lý rằng data quahàng mới, chân HSYNC sẽ được tích cực Sau đó dữ liệu hàng tiếp theo sẽ được truyền ra Việclấy dữ liệu cột sẽ được lặp lại 1024 lần, đầy đủ cho một ảnh kích thước XVGA
3.3.4 Khối DAC
PCM5141: 3.3.4.1 Giới thiệu:
Trang 32PCM5141 là IC Stereo DAC (digital to analog converter), có chức năng chuyển tín hiệu số sangtín hiệu analog, là sản phẩm của hãng Texas Instrument, có những đặc trưng cơ bản sau:
• Hỗ trợ nhiều chuẩn truyền thông (I2C/SPI)
• Kích thước: 5mm x 9mm, đóng gói 28 chân TSSOP
• Có bộ miniDSP, thực hiện chức năng equalizer, lập trình được
• Không cần tụ lọc DC ở ngõ ra khi thiết kế
• Tích hợp mạch Charge Pump nên không cần cấp nguồn âm cho DAC
• Tích hợp bộ Audio PLL, nhằm tái tạo lại clock SCK dựa vào clock BCK của bus I2S, cóthể giảm số đường I2S từ 4 chân xuống còn 3 chân
• Hỗ trợ data 16, 24, 32 bit audio data
Hình 3.12 Sơ đồ khối của PCM5141
Chức năng các chân của PCM5141:
• MOSI/SDA: chân truyền data master to slave trong chuẩn truyền SPI, hoặc chân truyềndata trong chuẩn I2C
Trang 33• MISO/ ADR1: chân truyền slave to master trong chuẩn truyền SPI hoặc là bit 1 trong địachỉ I2C.
• MODE1, MODE2: chân lựa chọn chuẩn truyền thông (I2C hoặc SPI)
• CAPP, CAPM: chân nối tụ để mạch internal charge pump trong chip hoạt động
• VNEG: chân V- reference của bộ charge pump, có thể được sử dụng để làm áp âm ref
• DIN (I2S): chân data của chuẩn I2S
• LRCK: chân clock đánh dấu cho frame truyền theo word trên đường DIN
• SCK: system clock input, thông thường clock ở đường này sẽ bằng với 256xFS với FS làtốc độ lấy mẫu của tín hiệu âm thanh
• BCK: clock đồng bộ cho audio data trên đường DIN
3.3.4.2 Thiết kế khối DAC trên bút chấm đọc:
Mạch nguyên lý khối DAC PCM5141:
Hình 3.13 Mạch nguyên lý khối DAC PCM5141
Trang 34- Ở đây chip DAC được thiết kế để hoạt động với chuẩn truyền thông I2C, nhằmtận dụng một bus I2C duy nhất để giao tiếp với toàn bộ ngoại vi trên sản phẩm.
- Ngõ ra audio của DAC được thiết kế một bộ lọc thông thấp với tần số cắt -3dB tạitần số 153kHz, nhằm có thể tái tạo các tần số maximum đến 384kHz (chipPCM5141 hỗ trợ tín hiệu đến tần số 384kHz PCM)
3.3.5 Khối cảm
biến gia tốc: 3.3.5.1 Giới thiệu:
MMA8452 là cảm biến đo gia tốc 3 trục X, Y, Z, là sản phẩm của hãng Freescale, ngõ ra Digital,công suất thấp, có những đặc trưng cơ bản sau:
• Ngõ ra Digital (I2C/SPI) – 10-bit ở Mode 8g(glà gia tốc trọng trường)
• Kích thước: 3mm x 5mm x 1mm, đóng gói 14 chân LGA
• Dòng tiêu thụ thấp 400µA
• Chức năng Self Test trục Z
• Điện áp vận hành thấp 2.4V – 3.6V
• Sử dụng các thanh ghi User Assigned để chỉnh Offset
• Lập trình giá trị ngưỡng cho phép ngắt
• Phát hiện chuyển động: Shock, dao động, rơi
• Phát hiện xung: xung đơn và xung kép
• Độ nhạy: 64 LSB/g@ 2gvà @ 8gở 10-Bit Mode
• Có thể chọn tầm đo (±2g, ±4g, ±8g)
• Chịu shock tới 10000g
Trang 35Hình 3.14 Hình dáng và sơ đồchân của MMA8452
Mô tả các chân:
#1: VDDIO, cấp nguồn digital cho các chân I/O
#2: BYP, nối tụ bypass
#3: DNC, không dùng, để hở hoặc nối đất
#4: SCL, xung clock của chuẩn truyền thông nối tiếp I2C
#5: GND, nối đất
#6: SDA, dữ liệu ra của chuẩn truyền thông nối tiếp I2C
#7: SA0, bit0 của địa chỉ I2C
3.3.5.2 Thiết kế khối cảm biến gia tốc trên bút chấm đọc:
Mạch nguyên lý khối cảm biến gia tốc MMA8542: