filebaocao-131105210631-phpapp02

156
KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN Qua những ngày tháng nỗ lực phấn đấu, qua những đêm không ngủ cuối cùng với sự giúp đỡ tận tình của các thầy cô và bạn bè chúng em đã hoàn tất đề tài này đúng thời hạn. Một đề tài tuy không mới nhưng đây cũng là một trong những hướng nghiên cứu khá hấp dẫn. Lời đâu tiên, chúng em xin bày tỏ lòng biết ơn sâu sắc đến Tiến sĩ: Nguyễn Minh Sơn người đã tận tình truyền đạt những kiến thức trong quá trình học tập và trực tiếp hướng dẫn đề tài này, chỉ bảo những kinh nghiệm quý báu để chúng em hoàn thành tốt đề tài. Chúng em xin bày tỏ lòng biết ơn trân trọng nhất tới các thầy cô trong khoa Kỹ thuật Máy tính và tất cả các thầy cô trường Đại học CNTT đã nhiệt tình truyền đạt cho chúng em những kiến thức trong những năm học vừa qua. Chân thành cảm ơn các bạn sinh viên K2C2 và lớp KTMT02 đã giúp đỡ trong những năm học vừa qua, là những người luôn bên cạnh chia sẻ và giúp đỡ những kiến thức trong quá trình học tập cũng như những khó khăn trong cuộc sống. WIFI-ROBOT BOARD TINY6410

Upload: truong-van-truong

Post on 22-Dec-2015

10 views

Category:

Documents


5 download

DESCRIPTION

file báo cáo

TRANSCRIPT

Page 1: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Qua những ngày tháng nỗ lực phấn đấu, qua những đêm không ngủ

cuối cùng với sự giúp đỡ tận tình của các thầy cô và bạn bè chúng em đã hoàn

tất đề tài này đúng thời hạn. Một đề tài tuy không mới nhưng đây cũng là một

trong những hướng nghiên cứu khá hấp dẫn. Lời đâu tiên, chúng em xin bày

tỏ lòng biết ơn sâu sắc đến Tiến sĩ: Nguyễn Minh Sơn người đã tận tình truyền

đạt những kiến thức trong quá trình học tập và trực tiếp hướng dẫn đề tài này,

chỉ bảo những kinh nghiệm quý báu để chúng em hoàn thành tốt đề tài.

Chúng em xin bày tỏ lòng biết ơn trân trọng nhất tới các thầy cô trong

khoa Kỹ thuật Máy tính và tất cả các thầy cô trường Đại học CNTT đã nhiệt

tình truyền đạt cho chúng em những kiến thức trong những năm học vừa qua.

Chân thành cảm ơn các bạn sinh viên K2C2 và lớp KTMT02 đã giúp đỡ trong

những năm học vừa qua, là những người luôn bên cạnh chia sẻ và giúp đỡ

những kiến thức trong quá trình học tập cũng như những khó khăn trong cuộc

sống.

Em xin gửi lời chúc sức khỏe đến tất cả các thầy cô để mãi là những

người thầy, người cô hướng dẫn, giúp đỡ, nuôi ước mơ cho biết bao thế hệ

sinh viên ngày một trưởng thành hơn, vững vàng hơn trong quá trình học tập

và rèn luyện trong trường cũng như trong cuộc sống sau này.

Sinh viên thực hiện

Phạm Hoài Phước

Võ Đình Chinh

WIFI-ROBOT BOARD TINY6410

Page 2: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

MỤC LỤCChương I........................................................................................................................................................1GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI.....................................................................................................1

I.1. GIỚI THIỆU ĐỀ TÀI:...................................................................................................................2

I.2. MÔ HÌNH TỔNG QUAN HỆ THỐNG:.......................................................................................4

I.2.1. Phần cứng:............................................................................................................................4

I.2.2. Mô hình tương tác:..............................................................................................................5

I.3. MÔ HÌNH THAM KHẢO CỦA MỘT SỐ ĐỀ TÀI.....................................................................7

I.3.1. Iandrobot:.............................................................................................................................7

I.3.2. WowWee Rovio:.................................................................................................................10

I.3.3. BProjects.net Robot:..........................................................................................................12

I.4. CÁC CÔNG CỤ HỖ TRỢ CHO VIỆC THỰC HIỆN ĐỀ TÀI..................................................13

I.4.1. Phần cứng:..........................................................................................................................13

I.4.2. Phần mềm:..........................................................................................................................13

I.5. GIỚI THIỆU CÁC CHUẨN WIFI-3G VÀ KỸ THUẬT AJAX...............................................20

I.5.1. Giới thiệu một số chuẩn Wifi:...........................................................................................20

I.5.2. Công nghệ 3G:....................................................................................................................22

I.5.3. Kỹ thuật AJAX:.................................................................................................................24

Chương II.....................................................................................................................................................27PHÂN TÍCH VÀ THIẾT KẾ.......................................................................................................................27

II.1 THIẾT KẾ VÀ LẬP TRÌNH ĐIỀU KHIỂN ROBOT.................................................................28

II.1.1. Phần cơ khí:........................................................................................................................28

II.1.2. Phần mạch điện tử:............................................................................................................31

II.1.3. Lập trình điều khiển Robot:.............................................................................................42

II.2. ỨNG DỤNG BOARD TINY6410 VỚI WIFIROBOT...............................................................48

II.2.1. Giới thiệu board Tiny6410(xem phần phụ lục)...............................................................48

II.2.2. Cài đặt hệ điều hành Linux cho board:...........................................................................48

II.3. WEB SERVER CHO BOARD TINY6410.................................................................................60

II.3.1. Giới thiệu?..........................................................................................................................60

II.3.2. Web và giao thức?..............................................................................................................60

II.4. MJPG STREAMER TRUYỀN HÌNH ẢNH VIDEO..................................................................64

II.4.1. MJPG Streamer là gì?.......................................................................................................64

II.4.2. Hiện thực chương trình trên máy tính:...........................................................................65

II.4.3. Cài đặt mjpg-streamer cho board:...................................................................................66

WIFI-ROBOT BOARD TINY6410

Page 3: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.5. GIỚI THIỆU OPENCV VÀ CÀI ĐẶT OPENCV CHO BOARD TINY6410:.........................70

II.5.1. Giới thiệu OpenCV:...........................................................................................................70

II.5.2. Cài đặt OpenCV Board Tiny6410:...................................................................................78

II.6. ĐIỀUKHIỂN GPIO BOARD TINY6410 QUA WEB SERVER................................................81

II.6.1. GPIO PORTE:...................................................................................................................81

II.6.2. Cài đặt Wifi và điều khiển board qua trình duyệt:........................................................81

II.6.2. Code ví dụ (xem phần phụ lục):.......................................................................................85

KẾT LUẬN..................................................................................................................................................86I. CÁC KẾT QUẢ ĐẠT ĐƯỢC:........................................................................................................87

II. HẠN CHẾ:.......................................................................................................................................87

III. HƯỚNG PHÁT TRIỂN:..............................................................................................................87

Ebook:.............................................................................................................................................89

Website:..........................................................................................................................................89

PHỤ LỤC.....................................................................................................................................................90I. KIẾN TRÚC AVR:..........................................................................................................................91

II. TỔNG QUAN VỀ BOARD TINY6410..........................................................................................96

II.1. Giới thiệu board Tiny6410 tổng quan:................................................................................96

II.2. Các khối chính:....................................................................................................................101

III. PHỤ LỤC HÌNH ẢNH:.............................................................................................................110

IV. MỘT SỐ SOURCE CODE MẪU:............................................................................................113

IV.1. CGI:...................................................................................................................................113

IV.2. PWM:................................................................................................................................114

IV.3. GPIO Memory:.................................................................................................................115

WIFI-ROBOT BOARD TINY6410

Page 4: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Chương I

GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI

1WIFI-ROBOT BOARD TINY6410

Page 5: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.1. GIỚI THIỆU ĐỀ TÀI:Công nghệ mỗi ngày một biến đổi không ngừng, tốc độ phát triển phải gọi là

đến mức không thể theo kịp nếu chúng ta không ngừng học hỏi và trau dồi những kiến thức cần thiết. Nếu như trước đây máy tính PC hầu như là không có đối thủ thì hiện nay thị trường này dần đang bị lấn sân bởi máy tính bảng, smart phone. Vậy tương lai sẽ đi về đâu cho những thiết bì cồng kềnh này, hay chỉ có những Developer IT mới dùng máy PC còn lại đa số người dùng cá nhân với mục đích giải trí, học tập sẽ quên lãng PC cồng kềnh này.

Hãng nghiên cứu thị trường Nielsen đã thực hiện một nghiên cứu về việc sử dụng máy tính bảng tại Mỹ. Kết quả thu được là khá thú vị. Hơn một phần ba (35%) số người được hỏi cho biết họ không hoặc rất ít sử dụng PC hoặc laptop từ khi có máy tính bảng, trong khi 30% nói rằng họ ít sử dụng laptop hơn. Báo cáo của Nielsen còn chỉ ra rằng 77% người dừng sử dụng máy tính bảng của họ cho các công việc mà trước đây họ phải nhờ đến PC hoặc laptop. Lý do phổ biến nhất được đưa ra cho việc máy tính bảng được ưa chuộng lại khá đơn giản và gây ngạc nhiên - chúng dễ dàng mang theo. 31% người dùng máy tính bảng cho biết tính cơ động là lý do chính họ sử dụng máy tính bảng thay vì PC hay laptop. Giao diện dễ sử dụng và khả năng khởi động nhanh cũng là những lý do phổ biến mà người dùng đưa ra.

Một phát hiện thú vị khác là rất ít người được hỏi thích chia sẻ chiếc máy tính bảng của họ với các thành viên khác trong cùng một gia đình. 43% số người tham gia khảo sát nói rằng họ rất ít hoặc không chia sẻ chiếc máy tính bảng của họ với thành viên khác trong gia đình. Với các thiết bị khác, 27% người được hỏi cho biết họ không còn trung thành với thiết bị đọc sách điện tử E-reader của mình nữa, trong khi 25% người dùng ít sử dụng game console. Thay vào đó, họ chơi game trên máy tính bảng. Chỉ có TV kết nối Internet và điện thoại thông minh là những thiết bị có vẻ như không bị tác động bởi máy tính bảng.

Cùng với sự lấn sân của thị trường máy tính bảng thì sự ra đời của HTML5 mở ra một hướng đi mới trong lĩnh vực thiết kế và sử dụng website trên nền tảng các smart phone, máy tính bảng với tốc độ được cải thiện hơn rất nhiều. Với HTML5 các website thiết kế có thể chạy trên mọi trình duyệt và mọi thiết bị từ PC tới các loại điện thoại di động khác nhau. HTML5 hứa hẹn sẽ là ngôn ngữ để định dạng mọi website trong tương lai. Khi xem một đoạn video trên web được thiết kế với HTML5 người dùng có thể xem một cách “rất tự nhiên” như họ đang đọc một cuốn sách, họ có thể tương tác trực tiếp với các video đó, họ không cần thiết phải cài đặt thêm bất kỳ tính năng hỗ trợ nào ( flash chẳng hạn).Vậy đâu là chìa khóa cho những ứng dụng đó trong đề tài này?

Từ những sự thay đổi trên chúng ta thấy rằng với 1 smart phone, máy tính bảng cộng với công nghệ 3G hiện nay sẽ được giới thiệu ở phần sau chúng ta có thể truy cập Web mọi lúc mọi nơi mà không bị giới hạn về không gian và thời gian. Chúng ta có thể tải những đoạn Video với chất lượng khá tốt mà không còn lo lắng nữa. Tất cả sẽ nằm trong tầm tay với những “touch screen”. Trong đề tài này với sự ra đời của những công nghệ trên chúng em đã đã nghĩ đến ý tưởng là điều khiển những thiết bị

2WIFI-ROBOT BOARD TINY6410

Page 6: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

từ xa qua Internet với các thiết bị như smart phone, máy tính bảng dựa trên các ứng dụng trên trình duyệt Web với Internet 3G không giới hạn về không gian và thời gian. Với những thiết bị trên chúng ta có thể điều khiển các thiết bị gia đình, văn phòng một cách dễ dàng không sợ bất kỳ một ngăn cách nào bởi vì hiện nay mạng 3G đã phủ sóng gần như hầu hết mọi nơi. Các ứng dụng CameraIP quan sát từ xa, các thiết bị an ninh, giám sát sẽ dựa trên nền tảng này mà không bị hạn chế về hệ điều hành vì trình duyệt Web có thể chạy trên mọi nền tảng.

Trong giới hạn của đề tài này, em đã xây dựng một Web Server để điều khiển một Robot từ xa thông qua mạng lan với bộ thu và phát Wifi. Theo nguyên tắc thiết lập Home Server ta vẫn có thể cài đặt trên Internet để truy cập với một ánh xạ về DNS Server IP tĩnh hay một Domain đã được đăng ký trước đó. Hơn thế nữa, với ý tưởng xây dựng một Robot có thế điều khiển thông qua mạng Internet 3G là một ý tưởng hoàn toàn mới mẻ và quá táo bạo. Bởi thực sự hiện nay, tốc độ đường truyền của mạng này vẫn chưa thực sự tương xứng với những gì mà nhiều người mong đợi.

Hơn thế nữa, trong đề tài này em còn có một hướng đi khác là dùng Robot vào những mục đích thám hiểm, thăm dò những vùng mà con người có thể bị nguy hiểm khi đặt chân đến như những khu vực chứa nhiều thuốc nổ, bom…Trong hướng đi này chúng ta sẽ dùng một bộ Router Wifi có công suất phát khá lớn khoảng 500m-1000m và dùng làm kết nối mạng Lan giữa hai thiết bị là Robot và PC hay bất kỳ một thiết bị thông minh nào như đã đề cập ở trên. Quá trình còn lại chỉ là truyền và nhận dữ liệu giữa chúng và đảm bảo các kết nối bền vững.

Mặc dù quá trình hiện thực đề tài còn nhiều hạn chế chỉ mang tính nghiên cứu vì chưa đảm bảo được các thiết kế Robot theo yêu cầu về địa hình. Tuy nhiên, với mỗi sinh viên ngành kỹ thuật như Điện tử, Kỹ thuật Máy tính thì thiết kế những Robot tuy khá đơn giản là một trong những niềm đam mê lớn, là áp dụng tổng hợp những kiến thức về cơ khí, điện tử, lập trình các giải thuật điều khiển tự động. Đề tài Wifi-Robot là sự tổng hợp những kiến thức nền tảng về mạng máy tính, lập trình Web, lập trình điều khiển các low level như GPIO, lập trình điều khiển Input/Output các boarb mạch điều khiển động cơ, những điều không thể thiếu trong tổng quan lập trình một hệ thống nhúng hoàn chỉnh. Với tất cả các ứng dụng khi đưa đến người dùng là ở những mức dễ sử dụng nhất như trình duyệt Web nhưng các tầng bên dưới sẽ là nhửng nhiệm vụ điều khiển khác nhau như các GPIO, PWM. Wifi-Robot sẽ trở thành Internet-Robot hoặc có thể tiến xa hơn nữa là một trong những điều hoàn toàn có thể thực hiện được.

I.2. MÔ HÌNH TỔNG QUAN HỆ THỐNG:

3WIFI-ROBOT BOARD TINY6410

Page 7: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.2.1. Phần cứng:

Hình 1.2.0: Mô hình phần cứng điều khiển Robot

PC Laptop đóng vai trò phát Wifi cũng như là thiết bị truy cập và điều khiển Robot. PC Laptop truy cập vào board thông qua trình duyệt,hoặc telnet.

Board Tiny6410 là board mạch trung tâm cho việc kết nối với máy tính qua Wifi và gửi tín hiệu sang board ARV thông qua GPIO.

Board AVR nhận tín hiệu Input từ board Tiny6410 và điều khiển chuyển động của động cơ với phương pháp PWM thông qua mạch cầu H.

Robot thiết kế và di chuyển theo sự điều khiển từ máy tính. Quá trình sẽ gửi tín hiệu điều khiển từ PC Laptop đến board Tiny6410 rồi đến board AVR. Board Tiny6410 sẽ gửi các tín hiệu hình ảnh, kết quả truy xuất GPIO về PC Laptop dưới dạng html.

I.2.2. Mô hình tương tác:

4WIFI-ROBOT BOARD TINY6410

Page 8: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.2.1: Mô hình phần tương tác điều khiển Robot

User sẽ truy cập vào trình duyệt Web và gửi tín hiệu về Board Server thông qua việc nhấn một phím trên bàn phím giả sử như phím “Q”Quit.

Server nhận thông tin gửi từ Client mà sẽ gọi file command.cgi. File command.cgi là một file binary được biên dịch từ một file source.c dùng đẽ tương tác giữa Web Server và GPIO bên dưới hệ thống phần cứng

5WIFI-ROBOT BOARD TINY6410

Page 9: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.2.2: Tương tác giữa GPIO và commmand.html

Board AVR sẽ nhận tín hiệu từ GPIO PORTE và sẽ xử lý theo yêu cầu. Thông qua bất kỳ một thiết bị smart phone truy cập chung mạng Wifi ta có thể dễ dàng điều khiển board và nhiều ứng khác nữa.

I.3. MÔ HÌNH THAM KHẢO CỦA MỘT SỐ ĐỀ TÀII.3.1. Iandrobot:

a. Mô hình:

6WIFI-ROBOT BOARD TINY6410

Page 10: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Microprocessor nhận tín hiệu điều khiển từ Router Wifi qua cổng RS232 và điều khiển sự di chuyển của Robot. Hình ảnh được truyền về qua một CameraIP. Robot còn sử dụng cảm biến gia tốc điều khiển hướng di chuyển, tọa độ vị trí. Phần cứng và phần mềm của Wifi-Robot này như sau:

b. Phần cứng: Robot trong đồ án này sử dụng RC car của New Bright.

Hình 1.3.0: Xe Jeep dùng đồ chơi Iandrobot

Board điều khiển động cơ: Sử dụng 8 Transistors-2 mạch cầu H cho việc điều khiển các chuyển động trái phải của Robot

Hình 1.3.1: Mạch cầu H điều khiền động cơ Iandrobot

Router: Linksys WRT54G với Broadcom 125 MHz processor, 16 MB memory and 4 MB flash, được tích hợp shell Linux.

Hình 1.3.2: Router Linksys WRT54G Iandrobot

7WIFI-ROBOT BOARD TINY6410

Page 11: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Port nối tiếp: Linksys WRT54G router hỗ trợ truyền dữ qua port nối tiếp với chuẩn RS232. Project sử dụng chip MAX232 convert RS-232 to TTL logic.

Hình 1.3.3: Mạch testboard RS232 Iandrobot

Board điều khiển trung tâm: Microcontroller: sử dụng ATmega328 processor, 14 digital I/O pins, a 16 MHz crystal oscillator dùng để nhận tín hiệu logic từ RS232 và điều khiển động cơ thông qua mạch cầu H.

Hình 1.3.4: Board mạch trung tâm Iandrobot

Network Camera: sử dụng Panasonic BL-C1A network . Camera này dùng để truyền nhận hình ảnh thông qua TCP/UDP và hiển thị trên trình duyệt của Web Brower.

8WIFI-ROBOT BOARD TINY6410

Page 12: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.3.5: CameraIP Panasonic BL-C1A Iandrobot

c. Phần mềm: Sử dụng phần mềm  DD-WRT được nhúng trên Router dùng làm

Web Server. Client sử dụng phần mềm XurajFi dùng cho ứng dụng Streamer và

Control các tín hiệu gửi về Server. Phần mềm này phát triển dựa trên nền Visual Basic.NET dùng cho Socket Programming.

Hình 1.3.6: Phần mềm điều khiển truyền nhận dữ liệu Iandrobot

Chương trình điều khiển động cơ viết trên AVR dùng phương pháp PWM

d. Hình ảnh Wifi-Robot:

9WIFI-ROBOT BOARD TINY6410

Page 13: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.3.7: hoàn chỉnh kết cấu Iandrobot

I.3.2. WowWee Rovio:a. Giới thiệu:

WowWee Rovio - robot thông minh với hai tính năng chính là vừa làm một thiết bị bắt sóng Wifi vừa là một chiếc Webcam. Robot này có hình dáng giống một chiếc xe trang bị ba bánh có thể di chuyển được. Ngoài một ăngten có chức năng bắt sóng Wifi, nó còn được trang bị một camera màn hình màu làm nhiệm vụ thu hình ảnh của bạn như một Webcam, có thể nâng lên hoặc hạ xuống một cách dễ dàng. Wi-Fi cho phép webcam robot / dẫn chiếu sáng / 1 x loa / 1 x xây dựng trong micro, Kiểm soát từ các thiết bị truy cập Web Brower.

b. Đặc trưng:WowWee Rovio - robot thông minh với hai tính năng chính là vừa làm một thiết bị bắt sóng Wifi vừa là một chiếc Webcam.Robot này có hình dáng giống một chiếc xe trang bị ba bánh có thể di chuyển được. Ngoài một ăngten có chức năng bắt sóng Wifi, nó còn được trang bị một camera màn hình màu làm nhiệm vụ thu hình ảnh của bạn như một Webcam, có thể nâng lên hoặc hạ xuống một cách dễ dàng. Khi nó hết Pin sẽ tự mình tìm đến nơi sạc để sạc điện- Dễ dàng điều khiển từ xa Rovio 24 / 7 từ bất cứ nơi nào trên thế giới với một kết nối internet. Sử dụng bất kỳ thiết bị web-enabled: PC hoặc Mac, điện thoại di động, điện thoại thông minh, PDA hay thậm chí video game console của bạn.

10WIFI-ROBOT BOARD TINY6410

Page 14: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

- Rovio phát hiện các thiết lập máy tính của bạn và hướng dẫn bạn qua tiến trình thiết lập.-Đầu của nó gắn trên máy ảnh di chuyển và phạm vi rộng tầm nhìn cho phép bạn xem và nghe thấy chính xác những gì nhìn thấy và nghe Rovio, trên màn hình của bạn.- Đặt waypoints để Rovio có thể điều hướng tự xung quanh nhà, mà không cần phải kiểm soát mỗi bước mình! - Tại một nút bấm, gửi Rovio trở lại dock sạc bằng cách sử dụng khả năng của mình tự docking - ngay cả khi bạn không ở nhà! - Hướng dẫn Rovio qua địa điểm sáng lờ mờ với sự hỗ trợ của nó, tích hợp đèn pha LED.- Pin sạc NiMH bao gồm pin- 1 x sạc dock với built-in TrueTrack Beacon- 3 x Omni-directional bánh xe- 1 x đầu gắn trên máy ảnh VGA- LED chiếu sáng- 1 x 1 x loa và micro cho âm thanh 2 chiều- Kết nối USB- Kết nối Wi-Fi (802.11b và 802.11g)

c. Hình ảnh:

Hình 1.3.8: WowWee Rovio

11WIFI-ROBOT BOARD TINY6410

Page 15: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.3.3. BProjects.net Robot:a. Mô hình:

Robot cũng với mô hình tương như iandrobot sử dụng Laptop ở khoảng cách gần  500m điều khiển các di chuyển.

b. Phần cứng:Về phần cứng cũng tương tự như iandrobot chỉ khác là dùng PIC để làm làm bộ xử lý cho việc điều khiển động cơ.

Router: WRT54GL  CameraIP: Panasonic BL-C1A

Hình 1.3.9:Mạch giao tiếp RS232 JBProjects.net Robotc. Phần mềm:

Tương tự như iandrobot sử dụng kỹ thuật lập trình socket để truyền nhận dữ liệu.

d. Hình ảnh:

Hình 1.3.10:Kết cấu hoàn chỉnh JBProjects.net Robot

12WIFI-ROBOT BOARD TINY6410

Page 16: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.4. CÁC CÔNG CỤ HỖ TRỢ CHO VIỆC THỰC HIỆN ĐỀ TÀII.4.1. Phần cứng:

a. Board Tiny6410:Đây là kit phát triển bởi FriendlyARM sử dụng chip Samsung hỗ trợ hệ điều hành nhúng Linux Kernel 2.38 và các Driver IO ngoại vi. Chi tiết hơn về Kit sẽ trình bày ở phần sau.

b. Robot:Thiết kế Robot cho việc Demo đề tài này dựa trên một số thiết kế, cách gia công khung nhôm, mạch điện tử, giải thuật lập trình của các Robot tham gia các cuộc thi Robocon ở Việt Nam. Các linh kiện hầu hết được chọn lựa ở mức trung bình và chỉ đáp ứng yêu cầu demo đơn giản. Chi tiết hơn về thiết kế sẽ trình bày ở phần sau.

c. PC:Sử dụng Laptop Dell Vostro1014 với USB Wifi Tenda làm Router Wifi. PC dùng để test kết nối Server-Client cũng như việc biên dịch và mô phỏng source code. PC cài đặt 3 hệ điều hành WinXP, Fedora, Win7, và các hệ điều hành khác trên máy ảo Vmware.

d. USB Wifi:Sử dụng USB Wifi TendaW311U hỗ trợ chuẩn N cho việc thu phát sóng với băng thông 150Mb, khoảng cách hơn 100m theo đường thẳng. USB này khá rẻ tiền (dưới 200K) nhưng nhược điểm là công suất thu phát không lớn và chỉ dừng lại ở mức test chương trình. Nếu muốn chương trình chạy ổn định hơn có thể dùng các Router công suất thu phát lớn hơn với những khoảng cách xa hơn như 500m-1Km.

I.4.2. Phần mềm:a. Proteus - mô phỏng mạch điện tử:

Proteus VSM (Virtual Simulation Microprocessor) là chương trình tạo và chạy các mạch điện ,các mạch có vi xử lý và mô phỏng quá trình làm việc của mạch nguyên lý, giúp cho chúng ta hình dung trực quan hơn vào thực tế của các linh kiện điện tử. Phiên bản mới nhất là Proteus Design Suite 7.1 với nhiều tính năng vượt trội.Một số điểm đặc trưng của Proteus như sau:

Dễ dàng tạo ra một sơ đồ nguyên lý đơn giản từ các mạch điện đơn giản, đến các mạch có bộ lập trình vi xử lý .

Dễ dàng chỉnh sửa các đặc tính của linh kiện trên sơ đồ nguyên lý: chỉnh sửa số bước của động cơ bước, chỉnh sửa nguồn nuôi cho mạch ,thay đổi tần số hoạt động cơ bản của vi xử lý…

13WIFI-ROBOT BOARD TINY6410

Page 17: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Chạy mô phỏng và phân tích các tính chất của mạch điện cơ bản. Công cụ hỗ trợ cho việc chạy và mô phỏng rất mạnh và chính xác.

Các công cụ và đồ thị hỗ trợ mạnh cho việc phân tích tần số , sóng , âm thanh .. không những thế phần mềm còn có thêm các máy phân tích từ đơn giản như : đồng hồ đo Vôn, Ampe, đến các máy đo dao động ,máy tạo sóng dao động …

Ngoài ra Proteus còn cung cấp cho người sử dụng các công cụ mạnh mà các phần mềm khác hầu như không có. Chẳng hạn thư viện LED với các loại màu sắc khácnhau kể cả led 7 đoạn. Nhưng phần hiển thị mạnh nhất mà Proteus cung cấp là LCD, nó có thể mô phỏng cho rất nhiều LCD từ đơn giản đến phức tạp.

Một điểm mạnh khác của Proteus là cung cấp cho người sử dụng công cụ biên dịch cho các họ vi xử lý như MSC51, AVR ,HC11 … Qua đó tạo ra các tập tin HEX dùng để nạp cho vi xử lý và tập tin DSI dùng để xem và chạy kiểm tra từng bước trong chương trình mô phỏng .

Trong đề tài này em dùng Proteus để mô phỏng Input/Output của mạch điều khiển động cơ AVR, sơ đồ như sau:

Hình 1.4.0: Mạch mô phỏng Robot bằng Proteus

14WIFI-ROBOT BOARD TINY6410

Page 18: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

b. AVR Studio - lập trình AVR:AvrStudio: là trình biên dịch ASM chính thức cung cấp bởi Atmel, đây là trình biên dịch hoàn toàn miễn phí và tất nhiên là tốt nhất cho lập trình AVR bằng ASM. Về bản chất AVRStudio không hỗ trợ lập trình ngôn ngữ C vì không có trình dịch C. Tuy nhiên nó cho phép tích hợp trình dịch C của bộ công cụ WinAVR. Vì thế, nếu muốn sử dụng AVRStudio để lập trình C cho AVR bạn phải cài đặt trình dịch và thư viện avr-gcc từ GNU hoặc đơn giản là cài đặt WinAVR cùng AVRStudio. Khi cài AVR Studio phải cài WinAVR trước.Phiên bản mới nhất là AVR Studio 5 với hỗ trợ giao diện lập trình như Visual Studio, hỗ trợ bộ Visual Assistant giúp cho việc lập trình linh hoạt hơn với các tracking. Atmel® AVR Studio® 5 là công cụ tích hợp dành cho phát triển (IDE) các ứng dụng nhúng trên chip Atmel AVR®. AVR Studio 5 IDE hỗ trợ giao diện khá thân thiện, hỗ trợ biên dịch, debug C/C++ assembler code.

Hình 1.4.1: Giao diện AVR Studio 5

Download 2 gói này trên trang chủ:http://www.atmel.com/microsite/avr_studio_5http://www.atmel.com/microsite/avr_studio_5

Một số nét đặc trưng của hai gói phần mềm này: Hỗ trợ môi trường lập trình cho chip 8– và 32–bit. AVR Studio 5 hỗ trợ

cho tất cả các dòng AVR.

15WIFI-ROBOT BOARD TINY6410

Page 19: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.4.2: Chip AVR được hỗ trợ trong AVR Studio 5

Tích hợp C Compiler không cần cài WinAVR làm toolchain biên dịch source code.

Hình 1.4.3: C Compiler được hỗ trợ trong AVR Studio 5

Dễ dàng quản lý source code với Visual Assistant, đây là cải tiến rất mới hỗ trợ cho người lập trình.

Hình 1.4.4: Visual assistant hỗ trợ trong AVR Studio 5

Hỗ trợ Build, Debug, các chuẩn giao tiếp như JTAGICE3, RS232. Dễ dàng nâng cấp và quản lý project với Solution Explorer.

Hình 1.4.5: Solution trong AVR Studio 5

16WIFI-ROBOT BOARD TINY6410

Page 20: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

c. C# Web - thiết kế giao diện Web Server:Đây là phiên bản mới nhất của Microsoft hỗ trợ lập trình C# ứng dụng, Web Design. Trong đề tài này em sử dụng bộ Visual Web để thiết kế giao diện cho Web Server. Việc thiết kế chủ yếu là các thẻ html, javascript file, cách sử dụng ajax control.Với C# Web ta có thể dễ dàng thiết kế Web Form, các thẻ một cách gần như tự động với các hỗ trợ từ Toolbox, các script có thể viết trực tiếp trong file html, htm. Các file dạng này có thể chạy trên mọi trình duyệt và các OS khác nhau mà không phụ thuộc vào Server. Để xem kết quả trên trình duyệt ta có thể View ngay trên các trình duyệt như IE, Firefox, Chrome…

Hình 1.4.6: Giao diện Visual Studio 2010d. Arm-linux-gcc – biên dịch source code:

Arm-linux-gcc là một Toolchain dùng để biên dịch Source Code trên máy tính thành file binary và có thể thực thi dưới board. Cách biên dịch source code bằng tool này cũng như biên dịch các source code trên nền Linux bằng các toolchain như Gcc, G++…Arm-linux-gcc có thể chạy trên bất kỳ một hệ điều hành Linux nào như Fedora, Ubuntu…Tool này không chỉ dùng để biên dịch những file source

17WIFI-ROBOT BOARD TINY6410

Page 21: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

code đơn giản mà còn hỗ trợ trong việc biên dịch Makefile với hàng loạt file trong project như quá trình biên dịch Kenel, các file Config…Makefile là giúp cho việc biên dịch hàng loạt file một cách nhanh và tiện lợi

Hình 1.4.7: Kiểm tra arm-linux-gcc

e. Thiết kế board mạch với ExpressPCB:ExpressPCB là một công cụ hoàn toàn miễn phí giúp cho việc thiết kế các mạch in một cách khá nhanh với những mạch đơn giản. Không phức tạp như Orcard hay Proteus, ExpressPCB có thể mất vài phút để thiết kế xong một board mạch như mạch nguồn, mạch MCU. Tuy không có phần mô phỏng nhưng thiết kế bằng ExpressPCB rất dễ chỉnh sửa. Trong đề tài này em dùng ExpressPCB để thiết kế toàn bộ mạch điều khiển Robot với AVR.

18WIFI-ROBOT BOARD TINY6410

Page 22: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 1.4.8: Giao diện PCB Express

Với chủ yếu trong thiết kế là các via Pad và các Trace, Wire nên ExpressPCB rất tiện lợi chỉ với việc nhấp chuột và thay đổi kích thước.

19WIFI-ROBOT BOARD TINY6410

Page 23: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.5. GIỚI THIỆU CÁC CHUẨN WIFI-3G VÀ KỸ THUẬT AJAXI.5.1. Giới thiệu một số chuẩn Wifi:

a. 802.11Năm 1997, Viện kỹ sư điện và điện tử (IEEE- Institute of Electrical and Electronics Engineers) đưa ra chuẩn mạng nội bộ không dây (WLAN) đầu tiên – được gọi là 802.11 theo tên của nhóm giám sát sự phát triển của chuẩn này. Lúc này, 802.11 sử dụng tần số 2,4GHz và dùng kỹ thuật trải phổ trực tiếp (Direct-Sequence Spread Spectrum-DSSS) nhưng chỉ hỗ trợ băng thông tối đa là 2Mbps – tốc độ khá chậm cho hầu hết các ứng dụng. Vì lý do đó, các sản phẩm chuẩn không dây này không còn được sản xuất nữa.b. 802.11bTừ tháng 6 năm 1999, IEEE bắt đầu mở rộng chuẩn 802.11 ban đầu và tạo ra các đặc tả kỹ thuật cho 802.11b. Chuẩn 802.11b hỗ trợ tốc độ lên đến 11Mbps, ngang với tốc độ Ethernet thời bấy giờ. Đây là chuẩn WLAN đầu tiên được chấp nhận trên thị trường, sử dụng tần số 2,4 GHz. Chuẩn 802.11b sử dụng kỹ thuật điều chế khóa mã bù (Complementary Code Keying - CCK) và dùng kỹ thuật trải phổ trực tiếp giống như chuẩn 802.11 nguyên bản. Với lợi thế về tần số (băng tần nghiệp dư ISM 2,4GHz), các hãng sản xuất sử dụng tần số này để giảm chi phí sản xuất. Nhưng khi đấy, tình trạng "lộn xộn" lại xảy ra, 802.11b có thể bị nhiễu do lò vi sóng, điện thoại “mẹ bồng con” và các dụng cụ khác cùng sử dụng tần số 2,4GHz. Tuy nhiên, bằng cách lắp đặt 802.11b ở khoảng cách hợp lý sẽ dễ dàng tránh được nhiễu. Ưu điểm của 802.11b là giá thấp, tầm phủ sóng tốt và không dễ bị che khuất. Nhược điểm của 802.11b là tốc độ thấp; có thể bị nhiễu bởi các thiết bị gia dụng.c. 802.11aSong hành với 802.11b, IEEE tiếp tục đưa ra chuẩn mở rộng thứ hai cũng dựa vào 802.11 đầu tiên - 802.11a. Chuẩn 802.11a sử dụng tần số 5GHz, tốc độ 54Mbps tránh được can nhiễu từ các thiết bị dân dụng. Đồng thời, chuẩn 802.11a cũng sử dụng kỹ thuật trải phổ khác với chuẩn 802.11b - kỹ thuật trải phổ theo phương pháp đa phân chia tần số trực giao (Orthogonal Frequency Division Multiplexing-OFDM). Đây được coi là kỹ thuật trội hơn so với trải phổ trực tiếp (DSSS). Do chi phí cao hơn, 802.11a thường chỉ được sử dụng trong các mạng doanh nghiệp, ngược lại, 802.11b thích hợp hơn cho nhu cầu gia đình. Tuy nhiên, do tần số cao hơn tần số của

20WIFI-ROBOT BOARD TINY6410

Page 24: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

chuẩn 802.11b nên tín hiện của 802.11a gặp nhiều khó khăn hơn khi xuyên tường và các vật cản khác.Do 802.11a và 802.11b sử dụng tần số khác nhau, hai công nghệ này không tương thích với nhau. Một vài hãng sản xuất bắt đầu cho ra đời sản phẩm "lai" 802.11a/b, nhưng các sản phẩm này chỉ đơn thuần là cung cấp 2 chuẩn sóng Wi-Fi cùng lúc (máy trạm dùng chuẩn nào thì kết nối theo chuẩn đó). Ưu điểm của 802.11a là tốc độ nhanh; tránh xuyên nhiễu bởi các thiết bị khác. Nhược điểm của 802.11a là giá thành cao; tầm phủ sóng ngắn hơn và dễ bị che khuất.d. 802.11gNăm 2002 và 2003, các sản phẩm WLAN hỗ trợ chuẩn mới hơn được gọi là 802.11g nổi lên trên thị trường; chuẩn này cố gắng kết hợp tốt nhất 802.11a và 802.11b. 802.11g hỗ trợ băng thông 54Mbps và sử dụng tần số 2,4GHz cho phạm vi phủ sóng lớn hơn. 802.11g tương thích ngược với 802.11b, nghĩa là các điểm truy cập (access point –AP) 802.11g sẽ làm việc với card mạng Wi-Fi chuẩn 802.11b...Tháng 7/2003, IEEE phê chuẩn 802.11g. Chuẩn này cũng sử dụng phương thức điều chế OFDM tương tự 802.11a nhưng lại dùng tần số 2,4GHz giống với chuẩn 802.11b. Điều thú vị là chuẩn này vẫn đạt tốc độ 54Mbps và có khả năng tương thích ngược với chuẩn 802.11b đang phổ biến. Ưu điểm của 802.11g là tốc độ nhanh, tầm phủ sóng tốt và không dễ bị che khuất. Nhược điểm của 802.11g là giá cao hơn 802.11b; có thể bị nhiễu bởi các thiết bị gia dụng.e. 802.11nChuẩn Wi-Fi mới nhất trong danh mục Wi-Fi là 802.11n. 802.11n được thiết kế để cải thiện tính năng của 802.11g về tổng băng thông được hỗ trợ bằng cách tận dụng nhiều tín hiệu không dây và anten (gọi là công nghệ MIMO-multiple-input and multiple-output). Khi chuẩn này hoàn thành, 802.11n sẽ hỗ trợ tốc độ lên đến 100Mbps. 802.11n cũng cho tầm phủ sóng tốt hơn các chuẩn Wi-Fi trước đó nhờ tăng cường độ tín hiệu. Các thiết bị 802.11n sẽ tương thích ngược với 802.11g. Ưu điểm của 802.11n là tốc độ nhanh nhất, vùng phủ sóng tốt nhất; trở kháng lớn hơn để chống nhiễu từ các tác động của môi trường. Nhược điểm của 802.11n là chưa được phê chuẩn cuối cùng; giá cao hơn 802.11g; sử dụng nhiều luồng tín hiệu có thể gây nhiễu với các thiết bị 802.11b/g kế cận.

21WIFI-ROBOT BOARD TINY6410

Page 25: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.5.2. Công nghệ 3G:3G là thuật ngữ dùng để chỉ các hệ thống thông tin di động thế hệ thứ 3 (Third Generation). Đã có rất nhiều người nhầm lẫn một cách vô ý hoăc hữu ý giữa hai khái niệm 3G và UMTS (Universal Mobile Telecommunications Systems). Để hiểu thế nào là công nghệ 3G, chúng ta hãy xét qua đôi nét về lịch sử phát triển của các hệ thống điện thoại di động. Mặc dù các hệ thống thông tin di động thử nghiệm đầu tiên đựơc sử dụng vào những năm 1930-1940 trong các sở cảnh sát Hoa Kỳ nhưng các hệ thống điện thoại di động thương mại thực sự chỉ ra đời vào khoảng cuối những năm 1970 đầu những năm 1980. Các hệ thống điện thoại thế hệ đầu sử dụng công nghệ tương tự và người ta gọi các hệ thống điện thoại kể trên là các hệ thống 1G. Khi số lượng các thuê bao trong mạng tăng lên, người ta thấy cần phải có biện pháp nâng cao dung lượng của mạng, chất lượng các cuộc đàm thoại cũng như cung cấp thêm một số dịch vụ bổ sung cho mạng. Để giải quyết vấn đề này người ta đã nghĩ đến việc số hoá các hệ thống điện thoại di động, và điều này dẫn tới sự ra đời của các hệ thống điện thoại di động thế hệ 2. Ở châu Âu, vào năm 1982 tổ chức các nhà cung cấp dịch vụ viễn thông châu Âu (CEPT – Conférence Européene de Postes et Telécommunications) đã thống nhất thành lập một nhóm nghiên cứu đặc biệt gọi là Groupe Spéciale Mobile (GSM) có nhiệm vụ xây dựng bộ các chỉ tiêu kỹ thuật cho mạng điện thoại di động toàn châu Âu hoạt động ở dải tần 900 MHz. Nhóm nghiên cứu đã xem xét nhiều giải pháp khác nhau và cuối cùng đi đến thống nhất sử dụng kỹ thuật đa truy nhập phân chia theo mã băng hẹp (Narrow Band TDMA). Năm 1988 phiên bản dự thảo đầu tiên của GSM đã được hoàn thành và hệ thống GSM đầu tiên được triển khai vào khoảng năm 1991. Kể từ khi ra đời, các hệ thống thông tin di động GSM đã phát triển với một tốc độ hết sức nhanh chóng, có mặt ở 140 quốc gia và có số thuê bao lên tới gần 1 tỷ. Lúc này thuật ngữ GSM có một ý nghĩa mới đó là hệ thống thông tin di động toàn cầu (Global System Mobile). Cũng trong thời gian kể trên, ở Mỹ các hệ thống điện thoại tương tự thế hệ thứ nhất AMPS được phát triển thành các hệ thống điện thoại di động số thế hệ 2 tuân thủ tiêu chuẩn của hiệp hội viễn thông Mỹ IS-136. Khi công nghệ CDMA (Code Division Multiple Access – IS-95) ra đời, các nhà cung cấp dịch vụ điện thoại di động ở Mỹ cung cấp dịch vụ mode song song, cho phép thuê bao có thể truy cập vào cả hai mạng IS-136 và IS-95. Do có nhận thức rõ về tầm quan trọng của các hệ thống thông tin di động mà ở châu Âu, ngay khi quá trình tiêu chuẩn hoá GSM chưa kết thúc người ta đã tiến hành dự án nghiên cứu RACE 1043 với mục đích chính là xác định các dịch vụ và

22WIFI-ROBOT BOARD TINY6410

Page 26: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

công nghệ cho hệ thống thông tin di động thế hệ thứ 3 cho năm 2000. Hệ thống 3G của châu Âu được gọi là UMTS. Những người thực hiện dự án mong muốn rằng hệ thống UMTS trong tương lai sẽ được phát triển từ các hệ thống GSM hiện tại. Ngoài ra người ta còn có một mong muốn rất lớn là hệ thống UMTS sẽ có khả năng kết hợp nhiều mạng khác nhau như PMR, MSS, WLAN… thành một mạng thống nhất có khả năng hỗ trợ các dịch vụ số liệu tốc độ cao và quan trọng hơn đây sẽ là một mạng hướng dịch vụ. Song song với châu Âu, Liên minh Viễn thông Quốc tế (ITU – International Telecommunications Union) cũng đã thành lập một nhóm nghiên cứu để nghiên cứu về các hệ thống thông tin di động thế hệ 3, nhóm nghiên cứu TG8/1. Nhóm nghiên cứu đặt tên cho hệ thống thông tin di động thế hệ thứ 3 của mình là Hệ thống Thông tin Di động Mặt đất Tương lai (FPLMTS – Future Public Land Mobile Telecommunications System). Sau này, nhóm nghiên cứu đổi tên hệ thống thông tin di động của mình thành Hệ thống Thông tin Di động Toàn cầu cho năm 2000 (IMT-2000 – International Mobile Telecommunications for the year 2000). Đương nhiên là các nhà phát triển UMTS (châu Âu) mong muốn ITU chấp nhận hệ thống chấp nhận toàn bộ những đề xuất của mình và sử dụng hệ thống UMTS làm cơ sở cho hệ thống IMT-2000. Tuy nhiên vấn đề không phải đơn giản như vậy, đã có tới 16 đề xuất cho hệ thống thông tin di động IMT-2000 (bao gồm 10 đề xuất cho các hệ thống mặt đất và 6 đề xuất cho các hệ thống vệ tinh). Dựa trên đặc điểm của các đề xuất, ITU đã phân các đề xuất thành 5 nhóm chính: - IMT DS (trải phổ dãy trực tiếp). Người ta thường gọi các hệ thống này là UTRA FDD và WCDMA. Trong đó UTRA là từ viết tắt của UMTS Terrestrial Radio Access. - IMT MC (nhiều sóng mang). Đây là phiên bản 3G của hệ thống IS-95 (hiện nay gọi là cdmaOne) - IMT TC (mã thời gian). Về thực chất đây là UTRA TDD, nghĩa là hệ thống UTRA sử dụng phương pháp song công phân chia theo thời gian. - IMT SC (một sóng mang). Các hệ thống thuộc nhóm này được phát triển từ các hệ thống GSM hiện có lên GSM 2+ (được gọi là EDGE). - IMT FT (thời gian tần số). Đây là hệ thống các thiết bị kéo dài thuê bao số ở châu Âu.

23WIFI-ROBOT BOARD TINY6410

Page 27: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I.5.3. Kỹ thuật AJAX:a. Giới thiệu:AJAX là thuật ngữ viết tắt của Asynchronous Javascript and XML (JS và XML không đồng bộ). AJAX có thể đọc là "trao quyền cho javascript" và thông qua js để cung cấp một công nghệ phía client-script để gọi ngầm một lệnh background để phía server thực hiện và nhận thông tin trả về, update thông tin của trang nhanh mà không cần phải load lại cả trang, rất mất thời gian load lại những cái không cần update.Ví dụ: Để kiểm tra nickname đã tồn tại trong cơ sở dữ liệu hay chưa thì khi thành viên vừa nhập xong nick name, thông tin trên form lập tức javascript nắm thông tin rồi thực hiện gọi một hàm bằng PHP bên phía server để kiểm tra thông tin sau đó trả kết quả html về cho javascript xuất ra cho người dùng biết tính hợp lệ của nickname, lúc đó người dùng có thể thay đổi ngay chớ không cần đợi submit rồi kiểm tra và nhập lại như dùng PHP truyền thống.JQuery chính là một thư viện kiểu mới của Javascript giúp đơn giản hóa cách viết Javascript và tăng tốc độ xử lý các sự kiện trên trang web. JQuery thêm tương tác Ajax vào trong trang web của bạn. JQuery được thiết kế để thay đổi cách viết Javascript. Đây là một bộ thư viện hỗ trợ các object cho việc lập trình web.b. Phương thức POST-GET:Các form dữ liệu là nơi người dùng có thể nhập dữ liệu vào và gửi về phía Server. Một form chứa một hoặc nhiều điều khiển và người sử dụng có thể nhập các giá trị vào. Sau khi nhập xong dữ liệu người sử dụng sẽ ra lệnh gửi form đi, form chứa các dữ liệu này sẽ được gửi tới địa chỉ được chỉ định trong form để xử lý. Kết quả trả về cho người dùng phụ thuộcvào trình xử lý trên server. Để định nghĩa một form ta sử dụng đoạn mã Phương thức: Cách thức gửi form đi, có thể sử dụng GET hoặc POST. Trong đề tài này em xây dựng một Web Server sùng để nhận các phương thức gửi từ Client thông qua bàn phím với các mã Key Code. POST:Khi định nghĩa form dạng POST các dữ liệu sẽ được gửi thẳng đến trình xử lý theo phương thức POST, không qua URL do đó lượng dữ liệu được gửi đi là không hạn chế, các dữ liệu được gửi đi có thể là các frame. Người ta thường dùng phương thức POST để truyền các dữ liệu lớn.Để lấy dữ liệu từ form được gửi đến theo phương thức POST người ta dùng tập hợpFORM của đối tượng Request.Cú pháp:

Request.Form("<tên điều khiển>")

24WIFI-ROBOT BOARD TINY6410

Page 28: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Code ví dụ:<html><body><FORM ACTION="get.html" METHOD=POST><P>Please Fill the Registration Form</p><br>Enter Your Name<input type="text" name="username"><br>Enter Your Credit Card Number<input type="text" name="credit Number"><br><input type="submit" value="send"></FORM></body></html>

GET:Khi định nghĩa form dạng GET thì các dữ liệu mà form gửi đến trình xử lý sẽ được gửi đi theo phương thức GET. Nghĩa là các dữ liệu này sẽ được đưa thêm vào phần sau của chuỗi URL trên trình duyệt.Với cách làm này có đôi phần tiện dụng vì ta có thể nhập giá trị các biến trực tiếp lên URL của trình xử lý. Tuy nhiên có một nhược điểm là dung lượng kí tự có thể nhập lên URL là khá nhỏ (dưới 2000 kí tự). Do đó người ta chỉ dùng cách này khi lượng thông tin cần truyền là đơn giản, dung lượng ít.Để lấy dữ liệu từ form dạng GET người ta dùng tập hợp QueryString của đối tượng Request.Cú pháp:Request.QueryString("<tên điều khiển>")

Code ví dụ:<html><body><FORM ACTION="get.html" METHOD=GET><P>Please Fill the Registration Form</p><br>Enter Your Name<input type="text" name="username"><br>Enter Your Credit Card Number<input type="text" name="credit Number"><br><input type="submit" value="send"></FORM></body></html>

25WIFI-ROBOT BOARD TINY6410

Page 29: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

c. Cách GET QueryString từ phương thức Ajax:Thông thường phương thức GET sử dụng thông qua URL nhưng khi sử dụng AJAX JQUERY chúng ta không làm như thế mà có thể gửi và nhận sữ liệu trực tiếp như sau:

$.get( "command.cgi", { cmd : 0 }, function(data) { $("#show").html(data) })

get: phương thức truyền command.cgi: file thực thi trên server data: phương thức nhận dữ liệu show: div nhận dữ liệu html

Client chỉ cần gửi một Request bằng phương thức trên có thể bằng cách click button, click phím…Server sẽ trả kết quả ngay về mà trang hiện hành vẫn giữ nguyên không thay đổi URL.

26WIFI-ROBOT BOARD TINY6410

Page 30: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Chương II

PHÂN TÍCH VÀ THIẾT KẾ

27WIFI-ROBOT BOARD TINY6410

Page 31: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.1 THIẾT KẾ VÀ LẬP TRÌNH ĐIỀU KHIỂN ROBOT II.1.1.Phần cơ khí:

Thiết kế tổng quan:

Hình 2.1.0: Quy trình thiết kế Robot

28WIFI-ROBOT BOARD TINY6410

Page 32: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

a. Gia công khung nhôm:Vì trong đề tài Robot không cần tải nặng nên khung nhôm được gia công khá đơn giản và đảm bảo việc lắp đặt board mạch, acquy, bánh xe xho cân đối. Khung được tán bằng các đinh rive nên đảm bảo chắc chắn và gọn nhẹ.b. Lắp động cơ điện một chiều DCĐộng cơ điện một chiều là động cơ điện hoạt động với dòng điện một chiều. Động cơ điện một chiều ứng dụng rộng rãi trong các ứng dụng dân dụng cũng như công nghiệp. Thông thường động cơ điện một chiều chỉ chạy ở một tốc độ duy nhất khi nối với nguồn điện, tuy nhiên vẫn có thể điều khiển tốc độ và chiều quay của động cơ với sự hỗ trợ của các mạch điện tử cùng phương pháp PWM. Đề tài chọn động cơ với công suất 10W đảm bảo việc tải cho Robot với khối lượng khoảng 5kg. Động cơ được lắp trực tiếp vào khung sau Robot.

Hình 2.1.1: Động cơ DC Robotc. Lắp 2 bánh xe tải trọng dùng cho hai bánh sau:Loại bánh xe này có thể dùng làm bánh chủ động cho robot. Khối lượng 220g ,tải trọng 50kg. Đường kính ngoài 100mm. Bề rộng 35mm. Trục bánh có thể lắp trực tiếp với các loại động cơ giảm tốc có đường kính trục từ 4 đến 24mm. Ngoài ra có thể gắn bạc đạn (ổ bi) để làm bánh xe thụ động. Bánh xe được đúc bằng nhôm có độ bền cao,vỏ được bọc silicon mềm và có nhiều rãnh nên có độ bám cao. Bánh được lắp vào trục động cơ đảm di chuyển linh hoạt.

Hình 2.1.2: Bánh tải trọng Robotd. Lắp Encoder:Encoder này dùng nhiều trong các thiết bị tự động. Có thể dùng để đo quãng đường đi của robot tự động. Độ bền cơ học cao. Khối lượng 30g. Nguồn 5VDC ,hai pha A,B. Đường kính trục 6mm. Đường kính vỏ ngoài 45mm. Dùng Encoder có thể xác định chính xác tọa độ di chuyển cho Robot. Encoder được lắp gắn với chuyển động của 2 bánh sau.

29WIFI-ROBOT BOARD TINY6410

Page 33: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.3: Encoder Robote. Lắp 2 bánh xe đa hướng Omi trước: Bánh xe đa hướng Omi: Sườn bánh làm bằng nhựa PA, 8 bánh vệ tinh được gia công CNC từ loại nhôm cứng 6061 siêu bền hoặc Polime giúp bánh chạy êm và giảm hao mòn đáng kể trong quá trình sử dụng. Bánh có thể di chuyển theo bất kỳ một hướng nào.

Hình 2.1.4: Bánh Omi trước Robotf. Lắp Acquy:Acquy 12V, 1,5 Ah Loại acquy khô rất thích hợp cho robot khối lượng chỉ có 600g, robot chạy loại acquy này có khối lượng nhẹ nên di chuyển linh hoạt. Điện áp 12V và dòng là 1.5AH ( tức là có khả năng duy trì dòng 1.5 A trong vòng 1 giờ).

Hình 2.1.5: Acquy Robotg. Kiểm tra cân bằng:

Sau khi lắp đặt thành công phải kiểm tra xem Robot đã thật sự cân bằng chưa để đảm bảo di chuyển không bị lệch trọng lượng.

h. Hình vẽ thiết kế tổng quát:

30WIFI-ROBOT BOARD TINY6410

Page 34: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.6: Kết cấu hoàn chỉnh RobotII.1.2. Phần mạch điện tử:

Tổng quan mạch điện tử

Hình 2.1.7: Mạch tổng quát điều khiển động cơ DCa. Khối nguồn:

31WIFI-ROBOT BOARD TINY6410

Page 35: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Thông thường nó cung cấp cho các vi điều khiển và các IC với nguồn là 5V. Trong Board mạch này nguồn ổn định 5V từ nguồn Acquy bên ngoài 12V thông qua IC ổn áp 7805.

Với những mạch điện không đòi hỏi độ ổn định của điện áp quá cao, sử dụng IC ổn áp thường được người thiết kế sử dụng vì mạch điện khá đơn giản. Các loại ổn áp thường được sử dụng là IC 78xx, với xx là điện áp cần ổn áp. Ví dụ 7805 ổn áp 5V, 7812 ổn áp 12V. Việc sử dụng các loại IC ổn áp 78xx tương tự nhau, dưới đây là minh họa cho IC ổn áp 7805.Sơ đồ ở trên IC 7805 có 3 chân:

Chân số 1 là chân INChân số 2 là chân GNDChân số 3 là chân OUT

Ngõ ra OUT luôn ổn định ở 5V dù điện áp từ nguồn vung cấp thay đổi. Mạch này dùng để bảo vệ những mạch điện chỉ hoạt động ở điện áp 5V (các loại IC thường hoạt động ở điện áp này). Nếu nguồn điện có sự cố đột ngột: điên áp tăng cao thì mạch điện vẫn hoạt động ổn định nhờ có IC 7805 vẫn giữ được điện áp ở ngõ ra OUT 5V không đổi.

Mạch trên lấy nguồn một chiều từ một acquy điện áp từ 12V để đưa vào ngõ IN. Khi kết nối mạch điện, do nhiều nguyên nhân, người dùng dễ nhầm lẫn cực tính của nguồn cung cấp khi đấu nối vào mạch, trong trường hợp này rất dễ ảnh hưởng đến các linh kiện trên board mạch. Vì lí do đó một diode cầu được lắp thêm vào mạch, diode cầu đảm bảo cực tính của nguồn cấp cho mạch theo một chiều duy nhất, và người dùng cũng không cần quan tâm đến cực tính của nguồn khi nối vào ngõ IN nữa.

Chú ý: Điện áp đặt trước IC78xx phải lớn hơn điện áp cần ổn áp từ 1.5V đến 2V.

Hình 2.1.8: Mạch ốn áp 5V

Tụ điên đóng vai trò ổn định và chống nhiễu cho nguồn .

c. Khối vi xử lý trung tâm:

32WIFI-ROBOT BOARD TINY6410

Page 36: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Khối xử lý trung tâm dùng MCU AVR có nhiệm vụ nhận tín hiệu Input từ Port, từ tín hiệu ngắt ngoài và từ đó sẽ xác định các yêu cầu cần đáp ứng thông qua việc điều xung PWM để điều khiển động cơ Robot.

i. Giới thiệu MCU AVR Atmel:AVR do hãng Atmel chế tạo ra, là họ VĐK 8bit theo công nghệ mới với những tính năng rất mạnh được tích hợp trong trong chip. AVR ổn định hơn rất nhiều so với dòng VĐK 8051. Một số tính năng mới của họ AVR:

Tốc độ xử lý cao, tiêu thụ điện năng thấp Kiến trúc 131 tập lệnh thưc thi hầu hết trong mỗi chu kỳ xung clock 32x8 thanh ghi đa dụng Đạt tốc độ tối đa 16MIPS ở 16Mhz xung clock Dung lượng bộ nhớ: 16Kb Flash, 512 EEPROM, 1kb Internal SRAm Khả năng ghi và xóa có thể đạt đến 10000 lần, lưu trữ trong thời gian dài

trên 20 năm/85oC-100 năm 25oC. Giao tiếp chuẩn JTAG hỗ trợ debug, Lock, Fuse bit 2 bộ Timer 16 bit, 1 bộ timer 16 bit 4 kênh PWM 8 kênh ADC 10 bit 32 port xuất nhập Hỗ trợ gioa tiếp I2C, USART, SPI Hoạt động tốt ở hiệu điện thế 4.5-5.5 .

Chọn AVR cho đề tài vì lập trình dễ dàng, chi phí tương đối và độ bền khá cao,đảm bảo tính ổn định.

ii. Một số module chính cho việc điều khiển Robot: Input-Output: Vi điều khiểnATmega16 có 32 đường vào ra chia làm

bốn Port: PORTA-PORTB-PORTC-PORTD mỗi Port 8bit có thể tương tác điều khiển từng bit một. Các cổng ra có điện trở nội kéo lên nên khi dùng chức năng input ta không cần dùng điện trở kéo lên ở bên ngoài. Các Port được điều khiển bởi các bô thanh ghi sau: thanh ghi dữ liệu cổng PORT, thanh ghi dữ liệu điều khiển cổng DDR và cuối cùng là địa chỉ chân vào của cổng PIN. Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng

thái (0 1) từ đó ta có 4 kiểu vào ra cho một chân của avr. Khác với 89 là chỉ có 2 trạng thái duy nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp (mA) còn 89 chỉ là vài uA .

33WIFI-ROBOT BOARD TINY6410

Page 37: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.9: IO AVR Logic

Bảng trạng thái truy xuất I/O:

Hình 2.1.10: Các trạng thái truy xuất IO AVR

- Read I/O:o Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx

(hoặc bit n trong port) đó là đầu vào (xóa thanh ghi DDRx hoặc bit).

o Kích hoạt điện trở pull-up bằng cách set thanh ghi PORTx ( bit).

o Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit).

- Write I/O:o Đưa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORTx

(hoặc bit n trong port) đó là đầu ra (xóa thanh ghi DDRx hoặc bit).

o Xuất giá trị ra Port

34WIFI-ROBOT BOARD TINY6410

Page 38: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

- Code ví dụ:#include <avr/io.h>#include <avr/interrupt.h>#include <util/delay.h>

int main(void){       DDRB=0xFF;                //PORTB la output PORT       PORTB=0x00; DDRD=0x00;                //PORTD la input PORT       PORTB=0xFF;             while (1){           //vòng lặp vô tận               //do nothing       }       return 0;}

Timer-Counter: Bộ định thời (timer/counter0) là một module định thời/đếm 8 bit/16 bit, Atmega 16 có 4 bộ định thời là Timer 0-Timer 2 8 bit và Timer 1 16 bit dùng để định thời gian và đếm sự kiện với các đặc điểm sau:

- Bộ đếm một kênh- Xóa bộ định thời khi trong mode so sánh (tự động nạp)- PWM- Tạo tần số- Bộ đếm sự kiện ngoài- Bộ chia tần 10 bit- Nguồn ngắt tràn bộ đếm và so sánh

Về phần kiến trúc, các thanh ghi Timer có thể tham khảo trong Datasheet của AVR. Trong đề tài này em dùng PWM của AVR cho việc điều khiển động cơ với chế độ Phase correct PWM.

35WIFI-ROBOT BOARD TINY6410

Page 39: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.11: Lưu đồ xung Phase Corect PWM AVR

- Chế độ này hoạt động dựa trên hai sườn lên xuống.Bộ đếm sẽ đếm liên tục từ giá trị BOTTOM đến giá trị MAX và sau đó từ giá trị MAX đến giá trị BOTTOM. Trong chế độ so sánh không đảo chân so sánh (OCx) sẽ bị xóa khi giá trị TCNTx bằng giá trị OCRx trong quá trình đếm lên và sẽ được set bằng 1 khi giá trị so sánh xuất hiện trong quá trình đếm xuống. Chế độ so sánh đảo thì các giá trị là ngược lại.

- Với hoạt động hai sườn xung này thì chế độ này không tạo ra được tần số nhỏ như chế độ một sườn xung. Nhưng do tính cân đối của hai sườn xung thì nó tốt hơn cho điều khiển động cơ. Chế độ phase correct PWM hoạt động cố định là 8 bit. Trong chế độ này bộ đếm sẽ tăng cho đến khi đạt giá trị MAX ,khi đó nó sẽ đổi chiều đếm.

- Các bước sử dụng Timer:o Step 1: Set pin Timer là output bằng cách set giá trị trong thanh

ghi DDRn.Xo Step 2: chọn chế độ Timer bằng cách set thanh ghi TCCRXo Step 3: chọn xung clock bằng cách set thanh ghi TCCRXo Step 4: chọn giá trị của thanh ghi OCRX-TCNTXo Step 5: bắt đầu Timer

36WIFI-ROBOT BOARD TINY6410

Page 40: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

o Code Ví dụ:#include <avr/io.h>#include <avr/interrupt.h>#include <until/delay.h>int main(void){       DDRB=0xFF;                //PORTB la output PORT       PORTB=0x00;       TCCR0=(1<<CS01);//CS02=0, CS01=1, CS00=0:

chon Prescaler = 8       TCNT0=131;              //gan gia tri khoi tao cho T/C0       TIMSK=(1<<TOIE0);//cho phep ngat khi co tran o T/C0       sei();                       //set bit I cho phep ngat toan cuc

       while (1){           //vòng lặp vô tận               //do nothing       }       return 0;}

Interrupt: - Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình

trạng sẵn sàng cho đổi dữ liệu của mình.Ví dụ: Khi bộ truyền nhận UART nhận được một byte nó sẽ báo cho CPU biết thông qua cờ RXC,hoặc khi nó đã truyền được một byte thì cờ TX được thiết lập…

- Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lưu vị trí đang thực hiên chương trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chương trình phục vụ ngắt đó cho tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chương trình mà trước khi có ngắt nó đang thực hiện. Trong trường hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lưu các cờ báo ngắt đó lại và thực hiện lần lượt các ngắt theo mức ưu tiên.

- Atmega16 có 3 ngắt ngoài INT0(PORTD.2) INT1(PORTD.3) và INT2(PORTB.2). Khi xảy ra một trong các sự kiện đối với các chân này :

o Low level - Điện áp ở chân ngắt xuống mức logic 0 Vo Any change - Bất kì sự thay đổi điện áp từ chân ngắto Falling Edge - Khi có 1 sườn điện áp xuống (5V->0V)o Rising Edge -Khi có 1 sườn điện áp lên (0V->5V)

37WIFI-ROBOT BOARD TINY6410

Page 41: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Sau đó 1 cờ ngắt sẽ dựng lên 1 và báo cho biết có ngắt , nhảy đến chương trình con thực hiện ngắt .

- Về phần kiến trúc, các thanh ghi Iterrupt có thể tham khảo trong Datasheet của AVR. Thiết lập ngắt ngoài như sau:

o Step 1: chọn chế độ ngắt trong than ghi MCUCRo Step 2: cho phép ngắt toàn cục trên thanh ghi GICRo Step 3: cho phép ngắt trong thanh ghi trạng thái SREGo Code ví dụ:

#include <avr/io.h>#include <avr/interrupt.h>#include <avr/delay.h>volatile int8_t  val=0int main(void){    DDRD=0x00;     //khai báo PORTD là Input để sử dụng 2 chân ngắt.    PORTD=0xFF;  //sử dụng điện trở nội kéo lên.     MCUCR|=(1<<ISC11)|(1<<ISC01); //cả 2 ngắt là ngắt cạnh xuống         GICR    |=(1<<INT1)|(1<<INT0);    //cho phép 2 ngắt hoạt động    sei();                                           //set bit I cho phép ngắt toàn cục    DDRC=0xFF;                             //PORTC là Output     while (1){                                    //vòng lặp vô tận            PORTC++;                               //quét PORTC        _delay_loop_2(60000);    }    return 0;}//Trình phục vụ ngắt của  INT0ISR(INT0_vect){    val++;                                      //nếu có ngắt INT0 xảy ra, tăng val thêm 1    if (val>9) val=0;                        //giới hạn không vượt quá 9    PORTB=val;}

d. Khối input điều khiển dùng Opto cách ly quang:Opto hay còn gọi là cách ly quang là linh kiện tích hợp có cấu tạo gồm 1 led và 1 photo diot hay 1 photo transitor. Được sử dụng đẻ các ly giữa các khối chênh lệch nhau về điện hay công suất nhu khối có công suất nhỏ với khối điện áp lớn hay đơn giản chỉ là chống nhiễu giữa hai khối điều khiển trong mạch. Tín

38WIFI-ROBOT BOARD TINY6410

Page 42: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

hiệu input vào PORTA của AVR nhận được từ GPIO của kit TinyS3C6410 sẽ đưa qua Opto PC817 kết hợp với Transistor BJT dùng như một khóa K để thay đổi trạng thái đầu vào.

Hình 2.1.12: Mạch Opto giao tiếp AVR

e. Khối đệm đảo tín hiệu đầu vào và đầu ra:ULN2803 là IC đệm đảo có 9 chân trong đó có 8 ngõ vào và 8 ngõ ra, dưới đây là hình dạng và cấu tạo bên trong của 2803:

Hình 2.1.13: IC2803 đệm đảo

Bộ đệm đảo dung IC2803 nhằm đảo bít nếu ngõ vào ở mức cao qua 2803 ra sẽ là mức thấp và ngược lại. ULN2803 chịu dựng mức điện áp từ 6V-15V hơn loai CMOS hay cả PMOS. Tín hiệu đầu vào và đầu ra của AVR được đệm đảo nhằm đảm bảo các mức tín hiệu ổn định và tránh gây nhiễu giữa các khối với MCU trung tâm.

f. Khối điều khiển động cơ dùng mạch cầu H với Mosfet:

39WIFI-ROBOT BOARD TINY6410

Page 43: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

MOSFET là viết tắt của cụm Meta Oxide Semiconductor Field-Effect Transistor tức Transisor hiệu ứng trường có dùng kim loại và oxit bán dẫn. Hình sau mô tả cấu tạo của MOSFET kênh n và ký hiệu của 2 loại MOSFET kênh n và kênh p.

Hình 2.1.14: Cấu tạo MOSFET

MOSFET có 3 chân gọi là Gate (G), Drain (D) và Source (S) tương ứng với B, E và C của BJT. Cơ bản, đối với MOSFET kênh N, nếu điện áp chân G lớn hơn chân S khoảng từ 3V thì MOSFET bão hòa hay dẫn. Khi đó điện trở giữa 2 chân D và S rất nhỏ (gọi là điện trở dẫn DS), MOSFET tương đương với một khóa đóng. Ngược lại, với MOSFET kênh P, khi điện áp chân G nhỏ hơn điện áp chân S khoảng 3V thì MOSFET dẫn, điện trở dẫn cũng rất nhỏ. Vì tính dẫn của MOSFET phụ thuộc vào điện áp chân G (khác với BJT, tính dẫn phụ thuộc vào dòng IB), MOSFET được gọi là linh kiện điều khiển bằng điện áp, rất lý tưởng cho các mạch số nơi mà điện áp được dùng làm mức logic (ví dụ 0V là mức 0, 5V là mức 1).

Hình 2.1.15: Hoạt động của MOSFET

MOSFET thường được dùng thay các BJT trong các mạch cầu H vì dòng mà linh kiện bán dẫn này có thể dẫn rất cao, thích hợp cho các mạch công suất lớn. Do cách thức hoạt động, có thể hình dung MOSFET kênh N tương đương một

40WIFI-ROBOT BOARD TINY6410

Page 44: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

BJT loại npn và MOSFET kênh P tương đương BJT loại pnp. Thông thường các nhà sản xuất MOSFET thường tạo ra một cặp MOSFET gồm một linh kiện kênh N và một linh kiện kênh P, hai MOSFET này có thông số tương đồng nhau và thường được dùng cùng nhau.. Cũng giống như BJT, khi dùng MOSFET cho mạch cầu H, mỗi loại MOSFET chỉ thích hợp với một vị trí nhất định, MOSFET kênh N được dùng cho các khóa phía dưới và MOSFET kênh P dùng cho các khóa phía trên.Ban đầu MOSFET ko được kích, ko có dòng điện trong mạch, điện áp chân S bằng 0. Khi MOSFET được kích và dẫn, điện trở dẫn DS rất nhỏ so với trở kháng của motor nên điện áp chân S gần bằng điện áp nguồn là 12V. Tác dụng của Mosfet là các van đóng mở dẫn dòng điện từ nguồn xuống tải với công suất lớn. Tìn hiệu điều khiển các van là tín hiệu nhỏ và cho dẫn dòng và điện áp lớn để cung cấp cho tải. Tín hiệu điều khiển của thường là tín hiệu đầu ra của vi điều khiển là nhỏ hơn 5V (do các điều chế PWM) mà điều khiển động cơ cần dòng điện và điện áp lớn. Các van điều khiển hay các chân điều khiển chỉ cần tín hiệu nhỏ là mở khóa dẫn dòng cho tải. Mạch cầu H có thể đảo chiều dòng điện qua tải nên thế nó hay được dùng trong các mạch điều khiển động cơ DC và các mạch băm áp. Đối với mạch điều khiển động cơ thì mạch cầu H có thể đảo chiều động cơ quá là đơn giản. Chỉ cần mở khóa các van đúng chiều mà mình mong muốn.Mạch này là điều khiển động cơ DC-24 hay nhỏ hơn 24V dùng cầu H sử dụng Mosfet công suất. Trong mạch này do tín hiệu từ vi điều khiển không đủ để mở khóa Fet cho nên phải dùng con kích xung là opto P521.

Ngoài ra các bạn còn thiết kế ra những mạch cầu H công suất lớn hơn như thế phải cần dùng các con FET hay IGBT có Id lớn phù hợp với tải khi đó mạch cầu H của bạn phải dùng tất cả các FET cùng kênh và có mạch lái

Trong thực tế có 1 loại IC bán dẫn được tích hợp luôn cả cầu H trong đó ta chỉ cần cấp xung điều khiển, có bảo vệ dòng :

+ L293 : Với điện áp đầu vào là 36V và dòng điện đỉnh qua nó là 1.2A+ L298 : Với điện áp đầu vào là 46V và dòng điện đỉnh qua nó là 4AMạch nguyên lý* Dùng hai Mosfet kênh N IRF 540 và 2 Mosfet kênh P IRF9540 (chống

hiện tượng trùng dẫn)* Dùng mạch Kit ATMEGA8 (VĐK bất kì) tạo xung PWM để cấp vào

mạch* Dùng 4 Opto đáp ứng để tần số trên 10KHz để cách ly mạch điều khiển và

mạch công suất (p521 tần số on off 3ms)

41WIFI-ROBOT BOARD TINY6410

Page 45: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.16: Mạch cầu H gồm 4 MOSFET

Nguyên lý hoạt động:- Chạy thuận phân áp cho Q1 và Q4 bằng cách cấp D1 =0; D2 =1. Dòng từ

nguồn qua Q1 rồi qua động cơ sau đó qua Q4 rồi trở về nguồn.- Chạy nghịch phân áp cho Q2 và Q3 bằng cách cấp D2=0; D1=1. Dòng từ

nguồn qua Q2 rồi qua động cơ sau đó qua Q3 trở về nguồn.- Thay đổi tốc độ động cơ bằng cách cấp trực tiếp PWM âm vào Q3 và Q4.Mạch tự hãm khi D1=D2=0 hay D1=D1=0;

II.1.3. Lập trình điều khiển Robot:a. Lập trình board Tiny6410:Xét về tổng quát thì lập trình board Tiny6410 trong đề tài này gồm 2 phần chính, đó là: Lập trình tương tác giữa Web Server và Web Client, client gửi tín hiệu

điều khiển về cho Server Truy xuất GPIO trên nền Web bằng CGI, CGI truy xuất vào bộ nhớ, điều

khiển GPIO

42WIFI-ROBOT BOARD TINY6410

Page 46: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Lưu đồ giải thuật như sau:

Hình 2.1.17: Client gửi lệnh điều khiển

Code mô tả client gửi mã lệnh://key event handle function KeyDown(ev) { ev = ev || window.event; pressed = ev.which || ev.keyCode; switch (pressed) { case 37: //<----: key left {

$.get( "command.cgi", { cmd : 0 }, function(data) { $("#show").html(data)//hiển thị html })

}break;

43WIFI-ROBOT BOARD TINY6410

Page 47: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Code Server nhận giá trị của biến và thực thi:char *data;

data = getenv("QUERY_STRING");// cmd : 0int getval=atoi(data+4);//là số 0 gửi về

b. Kỹ thuật lập trình PWM:Lập trình điều khiển chuyển động Robot thực sự là lập trình PWM. Vậy PWM là gì? PWM có tên tiếng anh là Pulse Width Modulation là phương pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông dẫn đếm sự thay đổi điện áp ra. Để tạo được ra PWM thì hiện nay có hai cách thông dụng : Bằng phần cứng và bằng phần mền. Trong phần cứng có thể tạo bằng phương pháp so sánh hay là từ trực tiếp từ các IC dao động tạo xung vuông như : 555, LM556...Trong phần mền được tạo bằng các chip có thể lập trình được. Tạo bằng phần mền thì độ chính xác cao hơn là tạo bằng phần cứng. Nên người ta hay sử dụng phần mềm để tạo PWM

Hình 2.1.18: mô tả PWM

Trong AVR có hỗ trợ PWM với các bộ Timer. Trong đề tài này em sử dụng Timer1 16 bit với 2 kênh A, B cho việc điều khiển động cơ. Dựa vào mạch cầu H ở trên ta việc lập trình điều khiển Robot như sau:

Các động cơ DC Robot quay thuận Các động cơ DC Robot quay ngược Xử lý các tín hiệu Input, ngắt ngoài Điều khiển các góc quay trái phải và tiến lùi

PWM mà mạch cầu H nhận được có thể thay đổi tùy theo yêu cầu lập trình. Giả sử như muốn động cơ quay nhanh thì ta tăng xung lên và ngược lại, muốn Robot rẽ trái thì ta giảm xung cho Motor điều khiển tốc độ bánh trái và tăng

44WIFI-ROBOT BOARD TINY6410

Page 48: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

xung cho Motor điều khiển tốc độ bánh phải, ngược lại cho rẽ phải. Nếu muốn Robot lùi lại thì ta không có thể giữ xung ở một mức nào đó là bằng nhau cho cả 2 Motor đồng thời phải đảo chiều quay động cơ với 2 mức tín hiệu điều khiển mạch cầu H ngược lại với trạng thái trước đó. Cụ thể trong đề tài này em tiến hành như sau:

Mạch cầu H sử dụng 1 xung PWM từ Timer và hai chân điều khiển quay thuận và quay nghịch động cơ

Thay đổi tốc độ động cơ bằng cách thay đổi xung PWM Động cơ quay thuận khi hai chân điều khiển: D1=0-D2=1, quay

nghịch khi D1=1-D2=0, động cơ hãm D1-D2=1, D1-D2=0.b. Kỹ thuật điều khiển Robot:Về điều khiển chuyển động của Robot gồm có chạy thẳng, quay trái, quay phải, chạy lùi, chạy có đo quãng đường. Giải thuật như sau: Chạy không encoder: khởi tạo chương trình bằng cách thiết lập các input,

output và các timer để điều khiển động cơ. Như PORTA làm dành cho tín hiệu input, PORTD dành cho tín hiệu output, các xung PWM được sử dụng là timer 1 16 bit…

45WIFI-ROBOT BOARD TINY6410

Page 49: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.19: Điều khiển Robot không có encoder

46WIFI-ROBOT BOARD TINY6410

Page 50: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Chạy có encoder đo quãng đường: chương trình có thể chạy với những góc quay, quãng đường theo yêu cầu với xung được gửi trực tiếp về hai chân ngắt ngoài Interrupt0 và 1

Hình 2.1.20: Điều khiển Robot với encoder

c. Chương trình minh họa bằng ngôn ngữ C:(xem phần phụ lục)

47WIFI-ROBOT BOARD TINY6410

Page 51: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.2.ỨNG DỤNG BOARD TINY6410 VỚI WIFIROBOTII.2.1. Giới thiệu board Tiny6410(xem phần phụ lục)II.2.2. Cài đặt hệ điều hành Linux cho board:

a. Tạo boot loader khởi động cho thẻ nhớ SD Card:Burn BIOS in WindowsXP:Đây là bước quan trọng nhất đầu tiên để đảm bảo rằng board có thể khởi động và cài đặt chương trình từ thẻ nhớ. Đầu đọc thẻ SD một số máy tính xách tay tích hợp không thích hợp và do đó phải sử dụng đầu đọc thẻ rời. các loại thẻ nhớ China thường sẽ bị lỗi vì không thể tạo được boot loader trong khi đó lựa chọn số 1 là thẻ SD máy ảnh Panasonic Japan và thẻ nhớ này có dung lượng là 2Gb. FriendlyARM cung cấp phần mềm SD-Flasher.exe dùng để burn boot loader cho thẻ SD. Các bước thực hiện như sau:

Bước 1: chạy chương trình SD-Flasher.exe với giao diện như hình vẽ

Hình 2.2.0: Chạy chương trình SD-Flasher.exe

Bước 2: click chọn Superboot(là một boot loader hỗ trợ cho thẻ nhớ SD Card được đi kèm với DVD của board).

48WIFI-ROBOT BOARD TINY6410

Page 52: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.1: Load file superboot

Bước 3: thẻ nhớ nên format với định dạng FAT32 bằng phần mềm HP Format USB, cắm thẻ nhớ SD card vào SD card socket trên board, click vào “Scan”, PC sẽ nhận được thẻ như hình vẽ

49WIFI-ROBOT BOARD TINY6410

Page 53: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.2: Chạy chương trình SD-Flasher.exe Bước 4: click “Fuse”, Superboot sẽ được burn vào thẻ nhớ SD card.

Quá trình cài đặt Superboot loader cho thẻ nhớ kết thúc.

Hình 2.2.3: Fuse superboot

50WIFI-ROBOT BOARD TINY6410

Page 54: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Để kiểm tra Superboot đã burn thành công vào thẻ SD card, ta cắm thẻ nhớ vào board và chọn switch S2 ở chế độ “SDBOOT” và khởi động board. Nếu LED1 sáng và có tiếng bip từ loa thì quá trình trên đã thực hiện thành công. Board có thể khởi động từ thẻ nhớ SD card.

b. Cài đặt tự động từ thẻ nhớ SD Card:Quá trình cài đặt này khá đơn giản với các bước thực hiện như sau:

Bước 1: tạo thư mục images trong thẻ nhớ SD card, tạo thư mục con Linux

Bước 2: tùy theo hỗ trợ RAM, Flash Nand mà ta có thể chọn boot loader cho board như sau: board 128Mb RAM thì chọn boot loader dành cho 128Mb RAM, sau đó chọn kernel với hỗ trợ driver LCD phù hợp và file hệ thống là một file ảnh dạng .img hay ubi. Chép cả 3 file này vào thư mục Linux trong thẻ nhớ SD card.

Hình 2.2.4: root file system

51WIFI-ROBOT BOARD TINY6410

Page 55: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Bước 3: chỉnh sửa file FriendlyARM.ini như sau:

Items Options (case insensitive)

Action Install

OS Linux

Linux-Kernel Linux/zImage_n43 (or your own image)

Linux-CommandLine root=ubi0:FriendlyARM-root ubi.mtd=2 rootfstype=ubifsinit=/linuxrc console=ttySAC0,115200

Linux-RootFs-InstallImage linux/rootfs_qtopia_qt4.ubi

#This line cannot be removed. by FriendlyARM(www.arm9.net)

CheckOneButton=NoAction=installOS= LinuxVerifyNandWrite=No

StatusType = Beeper| LED

#################### Linux #####################Linux-BootLoader = Linux/u-boot_nand.binLinux-Kernel = Linux/zImage_n43Linux-CommandLine = root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200Linux-RootFs-InstallImage = linux/rootfs_qtopia_qt4.imgLinux-RootFs-RunImage = linux/rootfs_qtopia_qt4.ext3

Bước 4: cắm thẻ nhớ vào board và chọn chế độ “SD BOOT”, power board và quan sát hiện tượng như sau:

o Board phát ra 1 tiếng bip

52WIFI-ROBOT BOARD TINY6410

Page 56: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

o Trong vài giây LED3, 2 và 1 bắt đầu sáng lần lượt

o Kết thúc quá trình cài đặt là 1 tiếng bip và led sẽ sáng lần lượt

o Tắt nguồn và chọn chế độ khởi động NAND-BOOT S2,

chương trình đã được cài đặt vào NAND-FLASH.

c. Cài đặt thông qua cáp OTG USB:Trước khi cài đặt thông qua cáp OTG USB ta phải cài driver cho giao tiếp này, Driver đi kèm với DVD. Sau khi cài driver cho giao tiếp ta sử dụng phần mềm DNW dùng để truyền dữ liệu từ máy tính đến board. Để cài đặt ta cần 2 cable là RS232 và USB OTG. USB OTG dùng để truyền dữ liệu còn RS232 để giao tiếp với các option khác nhau. Quá trình cài đặt như sau:

Bước 1: chọn chế độ khởi động S2-SD-BOOT, xóa thư mục images trong thẻ nhớ SD card

Bước 2: chạy chương trình DNW(lưu ý là phải thiết lập giao tiếp RS232 trước khi kết board) giao diện chương trình như hình vẽ:

Hình 2.2.5: Thiết lập giao tiếp với cổng COM

53WIFI-ROBOT BOARD TINY6410

Page 57: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.6: Menu boot của DNW

Bước 3: format the NAND Flash, nhấn phím f sẽ format lại bộ nhớ flash

Bước 4: install Bootloader, cài đặt boot loader nhấn phím v, với mỗi board với dung lượng RAM khác nhayu thì boot loader cũng khác nhau như sau:

o u-boot_sd-ram128.bin : support booting from the SD card, for

128M RAM o u-boot_sd-ram256.bin : support booting from the SD card, for

256M RAM o u-boot_nand-ram128.bin : support booting from the NAND

flash, for 128M RAMĐể cài đặt boot loader cho board thông qua cáp ta Click on “USB Port->Transmit/Restore”, chọn u-boot.bin file (thư mục “images/linux”) trong DVD. Quá trình download xuống board có thề trong vài giây.

54WIFI-ROBOT BOARD TINY6410

Page 58: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.7: uboot của board

Quá trình download thành công, “U-boot.bin” sẽ được burn xuống Nand Flash board. Trở lại menu chính và tiếp tục cài đặt kernel cho board.

Hình 2.2.8: Cài đặt uboot thành công

55WIFI-ROBOT BOARD TINY6410

Page 59: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Bước 5: install Linux kernel, với mỗi giao tiếp LCD, VGA khác nhau FriendlyARM cung cấp driver khác nhau như sau:

o zImage_x35 – for Sony 3.5”LCD, resolution 240x320

o zImage_n43 – for NEC4.3”LCD, resolution 480x272

o zImage_a70 – for 7” true color screen, resolution 800x480

o zImage_L80 – for Sharp 8”(or compatible models)LCD,

resolution 640x480o zImage_VGA1024x768 – for 1024x768 VGA module

o zImage_VGA800x600 – for 800x600 VGA module

o zImage_VGA640x480 – for 640x480 VGA module

o zImage_EZVGA800x600 – for simple VGA module, resolution

800x600 trên menu nhấn phím k để cài đặt kernel cho board. Giao diện như hình vẽ:

Hình 2.2.9: DNW yêu cầu truyền dữ liệu kernel

click “USB Port->Transmit”, chọn zImage (thư mục images/Linux) trong DVD để download xuống board

56WIFI-ROBOT BOARD TINY6410

Page 60: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.10: Chọn kernel cho phù hợp

Quá trình download hoàn thành, kernel Linux đã được cài đặt lên board

Hình 2.2.11: Cài đặt kernel thành công

57WIFI-ROBOT BOARD TINY6410

Page 61: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Bước 6: install target file system, là quá trình cài đặt file hệ thống. Với mỗi loại NAND- flash khác nhau thì ta chọn file hệ thống cài đặc khác nhau như sau:

o rootfs_qtopia_qt4.img : YAFFS2 image

o rootfs_qtopia_qt4.ubi : UBIFS image

o rootfs_qtopia_qt4.ext3 : EXT3 image

trên menu nhấn phím u để cài đặt file hệ thống cho board. Click “USB Port->Transmit/Restore” và chọn rootfs-qtopia-qt4.ubi (thư mục “images/Linux”) để tiến hành cài đặt

Hình 2.2.12: Chọn file root system

Quá trình cài đặt kết thúc, file hệ thống đã được cài đặt thành công lên NAND-flash:

58WIFI-ROBOT BOARD TINY6410

Page 62: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.2.13: Cài đặt root file system thành công

Quá trình cài đặt kết thúc nhấn phím b để khởi động lại board, chọn chế độ NAND-BOOT để chạy chương trình trực tiếp trên NAND-flash.

59WIFI-ROBOT BOARD TINY6410

Page 63: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.3.WEB SERVER CHO BOARD TINY6410II.3.1. Giới thiệu?

Có rất nhiều định nghĩa về Website như, Website là trang web, trang mạng, là một tập hợp trang web, thường chỉ nằm trong một tên miền hoặc tên miền phụ trên World Wide Web của Internet. Một trang web là tập tin HTML hoặc XHTML có thể truy nhập dùng giao thức HTTP. Website có thể được xây dựng từ các tệp tin HTML (website tĩnh) hoặc vận hành bằng các CMS chạy trên máy chủ (website động).Website còn gọi là trang web, trang mạng, là một tập hợp các trang web bao gồm văn bản, hình ảnh, video, flash vv, thường chỉ nằm trong một tên miền( domain name) hoặc tên miền phụ (subdomain). Trang web được lưu trữ (web hosting) trên máy chủ web (server web)  có thể truy cập thông qua Internet.Nhưng trong phạm vi của đề tài này em chỉ tập trung vào việc xây dựng một Webserver dùng để điều khiển các thiết bị. khái niệm Web còn có thể hiểu đơn giản hơn là Web là một ứng dụng được tạo từ những thẻ liên kết như html, java, php…các thẻ siêu văn bản. Nói đến Web là nói đến trình duyệt như IE, Firefox, Chrome…Vậy tóm lại có thể nói Web là những ứng dụng chạy trên nề trình duyệt thông qua liên kết mạng máy tính.

II.3.2. Web và giao thức?a. HTML:HTML (tiếng Anh, viết tắt cho HyperText Markup Language, tức là “Ngôn ngữ đánh dấu siêu văn bản”) là một ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web, nghĩa là các mẩu thông tin được trình bày trên World Wide Web. Được định nghĩa như là một ứng dụng đơn giản của SGML, vốn được sử dụng trong các tổ chức cần đến các yêu cầu xuất bản phức tạp, HTML giờ đây đã trở thành một chuẩn Internet do tổ chức World Wide Web Consortium (W3C) duy trì. Phiên bản mới nhất của nó hiện là HTML 5. Tuy nhiên, HTML hiện không còn được phát triển tiếp. Người ta đã thay thế nó bằng XHTML.

b. Web Programming Language:Web Programming Language (Ngôn ngữ lập trình Web): Ngôn ngữ được viết theo phong cách lập trình (khác so với HTML – ngôn ngữ đánh dấu) để hỗ trợ và tăng cường các khả năng của Web. Cho phép điều khiển các phần tử của trang Web dễ dàng hơn.Chúng ta có một số ngôn ngữ lập trình Web như là: ASP, ASP.Net, PHP, JSP ..

60WIFI-ROBOT BOARD TINY6410

Page 64: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

c. Web Server:Web Server (máy phục vụ Web): máy tính mà trên đó cài đặt phần mềm phục vụ Web, đôi khi người ta cũng gọi chính phần mềm đó là Web Server. Tất cả các Web Server đều hiểu và chạy được các file *.htm và *.html, tuy nhiên mỗi Web Server lại phục vụ một số kiểu file chuyên biệt chẳng hạn như IIS của Microsoft dành cho *.asp, *.aspx…; Apache dành cho *.php…; Sun Java System Web Server của SUN dành cho *.jsp…Apache - Chương trình máy chủ HTTP là một chương trình dành cho máy chủ truyền các thông điệp qua giao thức HTTP. Apache chạy trên các hệ điều hành tương tự như Unix, Microsoft Windows, Novell Netware và các hệ điều hành khác. Apache đóng một vai trò quan trọng trong quà trình phát triển của mạng web thế giới.Trong đồ án này em dùng Apache làm Webserver trên hệ điều hành Linux dùng cho Server Control. Apache được phát triển và duy trì bởi một cộng đồng mã nguồn mở dưới sự bảo trợ của Apache Software Foundation. Apache được phát hành với giấy phép Apache License và là một phần mềm tự do và miễn phí. Mô hình một Web Server như hình vẽ:

Hình 2.3.0: Mô tả Web Server với các Clientd. Web Client:

Web-client là một trong những ứng dụng Client của hệ thống, Web-client không có tệp thực thi. Web-client sử dụng DHTML, HTTPRequest và các phần tử của công nghệ AJAX (Asynchronous JavaScript and XML). Toàn

61WIFI-ROBOT BOARD TINY6410

Page 65: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

bộ các chức năng của Client trong chế độ này do hệ thống tự động thực hiện nhờ ngôn ngữ JavaScript. Web Client gửi Request và Web Server sẽ trả lời các Request đó theo mô hình sau:

Hình 2.3.1: Giao thức giữa Web Server và Client

e. HTTP:HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu văn bản). Nó là giao thức cơ bản mà World Wide Web sử dụng. HTTP xác định cách các thông điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video, và các file multimedia khác) được định dạng và truyền tải ra sao, và những hành động nào mà các Web server (máy chủ Web) và các trình duyệt Web (browser) phải làm để đáp ứng các lệnh rất đa dạng. Chẳng hạn, khi bạn gõ một địa chỉ Web URL vào trình duyệt Web, một lệnh HTTP sẽ được gửi tới Web server để ra lệnh và hướng dẫn nó tìm đúng trang Web được yêu cầu và kéo về mở trên trình duyệt Web. Nói nôm na hơn, HTTP là giao thức truyền tải các file từ một Web server vào một trình duyệt Web để người dùng có thể xem một trang Web đang hiện diện trên Internet.HTTP là một giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet).f. HTTPS:HTTPS( Secure HTTP), là một sự kết hợp giữa giao thức HTTP và giao thức bảo mật SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet. Các kết nối HTTPS thường được sử dụng cho các giao dịch thanh toán trên World Wide Web và cho các giao dịch nhạy cảm trong các hệ thống thông tin công ty. HTTPS được sử dụng trong nhiều tình huống, chẳng hạn như các trang đăng nhập cho ngân hàng, các hình thức đăng nhập công ty, và các ứng dụng khác, trong đó dữ liệu cần phải được an toàn.HTTPS không nên nhầm lẫn với Secure HTTP (S-HTTP) quy định trong RFC 2660.

62WIFI-ROBOT BOARD TINY6410

Page 66: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

g. Mô hình Web Server Linux Board Tiny6410:

Hình 2.3.1: Web Server và Client board Tiny6410

63WIFI-ROBOT BOARD TINY6410

Page 67: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.4. MJPG STREAMER TRUYỀN HÌNH ẢNH VIDEOII.4.1. MJPG Streamer là gì?

a. Giới thiệu:"MJPG streamer", là một ứng dụng cho việc truyền tải JPEG Camera hình ảnh, video trên mạng Lan qua IP và kết quả sẽ được hiển thị trực tiếp trên trình duyệt Web như Firefox, IE, Chrome mà không phụ thuộc vào hệ điều hành. Chỉ cần một server Linux dùng để streamer và client chỉ có trình duyệt Web hỗ trợ các giao thức, script căn bản như XHTML, POST, GET, Java…b. Ứng dụng: Dùng cho các Camera IP quan sát từ xa thông qua mạng Internet Dùng cho các ứng dụng truyền các file video, MJPG, UVC...

c. Yêu cầu hệ thống: Camera hỗ trợ MJPEG như Logitech Webcam. Logitech hỗ trợ nhiều định

dạng hình ảnh và video như YUV và MJPEG nhưng giá thành hơi đắt, do đó có thể chọn một loại Webcam khác rẻ tiền hơn như Colorvis.

Linux Kernel 2.6.32-36 hỗ trợ driver UVC, V4L2. V4L2 là viết tắt của "Video For Linux (V4L) là một API dùng cho video capturing, như TV, USB web cameras. Phiên bản đầu tiên được hiện thực trên Linux 2.2, bởi Alan Cox. Vào 1999, phiên bản này được phát triển thành V4L2 hỗ trợ nhiều thiết bị hơn và một số lỗi đã được fix giúp cho nó hoàn thiện hơn.

Board: ứng dụng này được hiện thực tên cả máy tính PC và hệ thống nhúng. Với hệ thống nhúng có thể chọn các board như Mini2440, Fox, Tiny6410, Miny6410, KM9260.

CPU tốc độ lớn hơn 200Mhz, RAM 128d. Mô hình:

64WIFI-ROBOT BOARD TINY6410

Page 68: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.4.0: Mô hình MJPG Streamer board Tiny6410II.4.2. Hiện thực chương trình trên máy tính:

a. Chương trình cài đặt:Là một ứng dụng Open Source tải từ trang http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_PageLicense: GNU General Public License (GPL)Gói cài đặt là file mjpg-streamer-r63.tar.gz. Sau khi tải về ta có các file web html, java script, file code c. Để chạy chương trình ta cần phải build lại cho phù hợp với OS hiện hành.b. Hiện thực: Giải nén file mjpg-streamer-r63.tar.gz ta được thư mục với các file như

sau:

Hình 2.3.1: Cấu trúc thư mục mjpg-streamer-r63

Trong đó bên cạnh các file source code thì có 1 file với tên là Makefile, đây là file dùng để biên dịch chương trình. ############################################################# Purpose: Makefile for "M-JPEG Streamer"# Author.: Tom Stoeveken (TST)# Version: 0.3# License: GPL###########################################################CC = gccCFLAGS += -O2 -DLINUX -D_GNU_SOURCE -Wall#CFLAGS += -O2 -DDEBUG -DLINUX -D_GNU_SOURCE -WallLFLAGS += -lpthread –ldl

65WIFI-ROBOT BOARD TINY6410

Page 69: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Build source bằng cách dùng lệnh cd trong linux đến thư mục mjpg-streamer-r63, sau đó dùng lệnh make để buid, Makefile được gọi, thực thi và linker đến những source file cần thiết.

Sau khi build thành công để chạy chương trình ta chỉ dùng lệnh cd đến thư mục mjpg-streamer-r63, sau đó chạy script ./ start.sh. Chương trình mjpg-streamer được thực thi.

Sử dụng trình duyệt như Firefox vào http://localhost:8080 sẽ thấy được web server vừa cài đặt thành công. 8080 có nghĩ là port dùng cho ứng dụng mjpg-streamer trên trình duyệt.

II.4.3. Cài đặt mjpg-streamer cho board:a. Chương trình cài đặt:Gói cài đặt mjpg-streamer-mini2440-read-only được tải từ http://www.pudn.com hoặc http://www.code.google.com , bên cạnh đó dùng gói Plug-in: input_s3c2410 cho mini2440, Mini6410, Tiny6410b. Hiện thực: Build:

o Tool chain: gcc-4.4.4-glibc-2.11.1-multilib-1.0

o Edit makefile:

Add plug-in: PLUGINS += input_s3c2410.soAdd to compile: input_s3c2410.so: mjpg_streamer.h utils.hmake -C plugins/input_s3c2410 all CC=$(CC)cp plugins/input_s3c2410/input_s3c2410.so .

o Compile:

export CC=arm-linux-gccmake clean allEdit start_uvc.sh: ./mjpg_streamer -o "output_http.so -w ./www" -i "input_uvc.so -y -d /dev/video2"(Colorvis Webcam: Note)

Sau khi build Makefile thành công ta copy cả thư mục chứa các file binary, html, javascript…xuống board. Để chạy chương trình trên board ta gọi file ./ start_uvc.sh và sau đó kết nối board với mạng Lan bên ngoài qua cáp hoặc qua Wifi.

Chạy ứng dụng như sau:o Telnet đến board qua mạng Lan hoặc qua cap RS232 Console

o Command “cd” to MJPG-streamer folder và thực thi chương

trình ./start_uvc.sh

66WIFI-ROBOT BOARD TINY6410

Page 70: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

o Kết quả như sau:

Hình 2.4.2: telnet đến board qua mạng Lan

67WIFI-ROBOT BOARD TINY6410

Page 71: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.4.3: Thực hiện lệnh streamer hình ảnh

68WIFI-ROBOT BOARD TINY6410

Page 72: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình ảnh, video sẽ hiển thị qua trình duyệt webbằng cách truy cập vào địa chỉ IP của board thông qua port 8080

Hình 2.4.4: Hiển thị hình ảnh gửi về

c. Ứng dụng trong project:• Dùng để gắn vào Robot camera stream hình ảnh về máy tính, từ đó có thể

quan sát và điều khiển hướng di chuyển của Robot• Xây dựng web server cho các ứng dụng qua mạng dựa trên nền tảng IP

control như Internet, Wifi, 3G…d. Một số command hỗ trợ streamer:

mjpg_streamer o -i | input "<inputplugin.so> [parameters]"o -o | output "<outputplugin.so> [parameters]"o [-h | help ]........: display this helpo [-v | version ].....: display version informationo [-b | background]...: fork to the background, daemon mode

69WIFI-ROBOT BOARD TINY6410

Page 73: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.5.GIỚI THIỆU OPENCV VÀ CÀI ĐẶT OPENCV CHO BOARD TINY6410:

II.5.1. Giới thiệu OpenCV:a. Tổng quan:

OpenCV viết tắt của Open Source Computer Vision Library. Nó chứa hơn 500 hàm sử dụng trong xử lý ảnh. OpenCV là một thư viện mã nguồn mở (open source). Thư viện được viết bằng ngôn ngữ C và C++ có thể chạy trên các hệ điều hành Linux, Window và Mac OS X. OpenCV được thiết kế để nâng cao hiệu suất tính toán và nhấn mạnh đến hệ thống thời gian thực. Một điều tuyệt vời của OpenCV là nó đưa ra một hệ thống đơn giản, dễ sử dụng giúp mọi người nhanh chóng xây dựng các ứng dụng trong thị giác máy, kể cả các hệ thống kiểm tra trong nhà máy, bức ảnh trong lĩnh vực y học, bảo mật, rô bốt học... OpenCV chứa các lập trình xử lý ảnh rất đơn giản, kể cả thực thi các hàm bậc cao như dò tìm khuôn mặt, theo dõi khuôn mặt, nhận dạng khuôn mặt, lọc Kalman.Kể từ khi được giới thiệu vào tháng 1 năm 1999, OpenCV đã được sử dụng trong rất nhiều ứng dụng, các sản phẩm và các nghiên cứu. Ví dụ trong lĩnh vực hàng không vũ trụ, bản đồ web, sử dụng giảm nhiễu trong y học, phân tích đối tượng, an ninh, hệ thống dò tìm, theo dõi tự động và hệ thống bảo mật, quản lý hệ thống sản xuất, xử lý camera, ứng dụng trong quân sự, hệ thống hàng không không người lái, trên mặt đất, các tàu ngầm. Ngoài ra, nó còn được sử dụng trong nhận dạng âm thanh. OpenCV còn là một chìa khá quan trọng trong các rô bốt sử dụng xử lý ảnh như Stanford, Asimo.

Hình 2.5.0: Sự phát triển của thư viện OpenCV

70WIFI-ROBOT BOARD TINY6410

Page 74: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Có rất nhiều công nghệ hiện đại và các công ty lớn sử dụng thư viện OpenCV trong ứng dụng của mình (điển hình như Intel, Microsoft, IBM, Siemens, Google v..v.) và các trung tâm nghiên cứu như (Stanford, MIT, CMU, Cambridge, INRIA…).

b. Những nét đặc trưng:OpenCV có rất nhiều chức năng. Sau đây là những tóm tắt cơ bản về hệ thống các về chức năng của các hàm căn bản trong OpenCV 2.0, mà cụ thể ở đây là ver 2.0 ( phiên bản sử dụng cho Board Tiny6410). OpenCV cung cấp các hàm mà cho phép chúng ta tương tác trực tiếp

với hệ điều hành, các file hệ thống, các phần cứng như Webcam. Các hàm này nằm trong thư viện HighGUI, HighGUI cho phép mở một window, hiển thị bức ảnh, đọc các file liên quan đến đồ hoạ (ảnh, video) các file ảnh như jpg, bmp v..v. các file video như avi, wma, mp4, dat v..v. Ngoài ra nó còn xử lý các sự kiện chuột, bàn phím, OpenCV còn cho phép chúng ta lựa chọn thuật toán linh động hơn bằng cách cung cấp các hàm tạo thanh trượt slider, switch v..v. Để làm việc với OpenCV trước hết phải học các hàm trong thư viện này.

Thư viện HighGUI có thể chia thành 3 phần: phần cứng, phần file hệ thống và phần GUI (Graphical User Interface) chúng ta có thể xem xét các phần trong thư viện HighGUI như sau.

o Phần cứng: là phần thiết yếu nhất, liên quan đến hoạt động của

Camera, trong phần lớn hệ điều hành việc tương tác với phần cứng rất khó khăn và thực sự rất khó nhưng OpenCV cung cấp hàm đơn giản để thực hiện việc tương tác này ví dụ: cvCaptureFromCAM().

o Phần file hệ thống: là khái niệm liên quan đến việc tải và lưu ảnh,

một đặc điểm rất tuyệt vời trong thư viện HighGUI là cho phép chúng ta làm việc với ảnh tương tự khi làm việc với video. Vì vậy chúng ta có thể nhanh chóng tiếp cận với việc xử lý ảnh mà không mất nhiều thời gian cho việc tải, lưu ảnh, video.

o Phần GUI: là hệ thống cửa sổ (Window), thư viện cung cấp một

số hàm đơn giản mà cho phép chúng ta mở một window hiển thị ảnh trên window này. Ngoài ra nó còn cho phép chúng ta thực thi các sự kiện nhận được từ chuột và bàn phím.

Đầu tiên chúng ta cần học cách làm thế nào để đọc và viết các files ảnh, chụp video chuyển đổi giữa các định dạng màu, và truy cập dữ liệu điểm ảnh tất cả qua giao diện OpenCV.

71WIFI-ROBOT BOARD TINY6410

Page 75: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

c. Các module trong thư viện OpenCV:Cấu trúc OpenCV gồm nhiều module.

CXCORE bao gồm các dạng dữ liệu cơ bản là lõi của thư viện OPenCV. Ví dụ cấu trúc dự liệu về ảnh, điểm, hình chữ nhật được xác định trong file cxtypes.h. CXCORE chứa các phép toán đại số tuyến tính và thống kê, các hàm lưu trữ lâu dài và các lỗi thao tác.

CV chứa đựng quá trình xử lý ảnh và các phương pháp đánh giá sơ bộ kích thước ảnh. Những hàm tính toán hình học cũng được lưu trữ tại đây.

CVAUX gồm các interfaces đơn giản nhất cho nhận dạng khuôn mặt được nằm trong modul này. Những mã nguồn nằm trong module này rất phù hợp cho việc nhận dạng mặt và chúng được sử dụng rộng rãi cho mục đích này.

HIGHGUI chứa các interfaces ở mức cao như show hình ảnh, các chuyển đổi hình ảnh, thực thi lệnh từ bàn phím, chuột…

Sơ đồ cấu trúc:

Hình 2.5.1: Cấu trúc thư viện OpenCV

d. Các header chính trong thư viện: Hầu hết chương trình OpenCV cần cv.h và highgui.h. Sau đó để

nhận dạng mặt chúng ta cần thêm cvaux.h. Phần còn lại của file header được thêm vào bởi những header cao nhất ( high-level headers).

Linker thư viện lẫn tên của thư viện tĩnh được sử dụng liên kết tới cxcore.lib, cv.lib và highgui.lib. Sau đó để phục vụ cho quá trình nhận dạng mặt cần liên kết tới cvaux.lib. Tất cả thư viện này đều nằm trong thư mục “lib” của OpenCV.

72WIFI-ROBOT BOARD TINY6410

Page 76: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

e. Một số chương trình cơ bản: Đọc và ghi hình ảnh:

Việc đọc một file ảnh, ta gọi hàm cvLoadImage. OpenCV hỗ trợ hầu hết các định dạng phổ biến như JPEG, PNG và BMP. Ta không cần cung cấp các thông tin định dạng cvLoadImage() nhận diện định dạng file bằng cách đọc file header.Việc ghi một ảnh vào file ta gọi hàm cvSaveImage(). Hàm này quyết định định dạng file ta sử dụng tử file ban đầu. Trong ví dụ này, file ban đầu có định dạng “png”, vì vậy nó sẽ ghi dữ liệu ảnh dạng PNG. Cả cvLoadImage() và cvSaveImage() đều nằm trong modul HighGUI.Khi chúng ta đã kết thúc quá trình nhập ảnh và sử dụng xong hàm cvLoadImage(), chúng ta cần gọi hàm cvReleaseImage() như dòng 29. Hàm này trả về địa chỉ của điểm khi mà ta nhập vào bởi vì nó đảm bảo an toàn dữ liệu. Nó trả tự do cho cấu trúc ảnh nếu nó là không rỗng. Sau khi giải phóng nó, nó tạo một điểm ảnh bằng 0 ( image pointer)Code ví dụ:IplImage* cvLoadImage(const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR)int cvSaveImage(const char* filename, const CvArr* image)

Input Video:Chụp ảnh từ một webcam hoặc từ một thiệt bị hình ảnh số khác thật dễ dàng giống như chạy từ một file. Nó được gọi ra bởi hàm cvCaptureFromCAM(). Hàm này trả về một điểm đến một cấu trúc cvCapture. Ta không thể truy nhập và cấu trúc này ngay được. Thay vào đó, ta sẽ lưu trữ điểm này thông qua hàm cvQueryFrame().Sau khi kết thúc quá trình nhập video, gọi hàm cvReleaseCapture() để giải phóng mã nguồn video. Giống như cvReleaseImage(), ta trả địa chỉ địa chỉ của điểm Cvcapture về hàm cvReleaseImage().Code ví dụ:VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded return -1;

Truy nhập giá trị điểm ảnh:Cách dễ nhất để đọc điểm ảnh đơn là dùng hàm cvGet2D().

CvScalar cvGet2D(const CvArr*, int row, int col);

73WIFI-ROBOT BOARD TINY6410

Page 77: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hàm này có 3 thông số là :- Một con trỏ chứa dữ liệu ( CvArr*)- Một mảng được xếp theo hang và theo cộtDữ liệu chứa đựng có thể có cấu trúc IplImage.Cái hàng cao nhất

của điểm ảnh có row =0 và hàng thấp nhất có row = chiều cao – 1.Hàm cvGet2D() trả về cấu trúc dạng C là CvScalar được xác định

như sau:typedef struct CvScalar{double val[4];}CvScalar;Giá trị của mỗi điểm ảnh cho mỗi kênh được nằm trong val[i]. Với

ảnh đen trắng, val[0] chứa độ sáng của điểm ảnh.Ba giá trị khác được đặt ở giá trị 0. Với ảnh BGR thì blue = val[0], green = val[1] và red = val[2].

Ta có hàm bổ sung cvSetd() cho phép bạn chỉnh sửa giá trị điểm ảnh. Nó được khai báo như sau:

void cvSet2D(CvArr*, int row, int col,CvScalar);

Chuyển đổi màu:Dùng để chuyển đổi các định dạng màu sắc hoặc để tách lấy các vùng đen, vùng xám khi hiển thị:Code ví dụ:IplImage* GetThresholdedImage(IplImage* img){

// Convert the image into an HSV imageIplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);cvCvtColor(img, imgHSV, CV_BGR2HSV);IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8,

1);// Values 20,100,100 to 30,255,255 working perfect for yellow

at around 6pmcvInRangeS(imgHSV, cvScalar(60, 100, 100), cvScalar(255,

255, 255), imgThreshed);cvReleaseImage(&imgHSV);return imgThreshed;

74WIFI-ROBOT BOARD TINY6410

Page 78: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

} Tách nền xám trên ảnh hiển thị:

Dùng các Vector để tách các định dạng màu sắc khác nhau như tách các hình màu đỏ, màu vàng trên nền khác nhau và hiển thị là ảnh màu trắng trên nền đen.Code ví dụ:

IplImage* channelBlue = cvCreateImage(cvGetSize(img), 8, 1);cvThreshold(channelRed, channelRed, 20, 255, CV_THRESH_BINARY);

f. Các bước trong xử lý ảnh với OpnenCV: Chụp ảnh

- Kết nối Camera với máy tính. Camera được sử dụng ở đây là Webcam Logitech.- Sử dụng một hàm trong thư viện OpenCV để thực hiện công việc chụp ảnh- Sau khi chụp ảnh xong ta cũng sử dụng một hàm trong OpenCV để lưu ảnh

Tiền xử lý dữ liệu ảnhQuá trình tiền xử lý dữ liệu ảnh bao gồm hai công việc sau:+ Phối cảnh cho ảnh+ Chuyển về ảnh xám và xác định lược đồ xámo Phối cảnh cho ảnh: Ảnh sau khi chụp sẽ có một góc nghiêng nhất

định so với mặt phẳng do đó cần phải thực hiện một công việc phối cảnh cho ảnh nhằm “xoay” và “kéo” ảnh thành ảnh trong mặt phẳng 2D. Việc này sẽ làm cho tỷ lệ, kích thước của ảnh giống như trong thực tế.

o Chuyển về ảnh xám và xác định lược đồ xám: Với ảnh màu thu

được ta không thể tiến hành nhận dạng được ngay mà trước hết cần phải chuyển ảnh đã cho về ảnh xám

o Mỗi một phần tử ảnh có một cường độ sáng nhất định, cường độ

sáng này được số hoá thành các mức xám và dựa vào các mức xám này ta sẽ chuyển ảnh thành ảnh xám. Lược đồ xám là lược đồ cung cấp thông tin về phân bố mức xám của ảnh, xác định xem ảnh là sáng hay tối.

Nhị phân ảnh:o Ảnh nhị phân là ảnh mà giá trị của các điểm ảnh chỉ có hai giá trị là

0 và 1 (trắng và đen)

75WIFI-ROBOT BOARD TINY6410

Page 79: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

o Để chuyển từ ảnh xám về ảnh nhị phân ta đặt một ngưỡng thích hợp

để so sánh. Mức xám của ảnh sẽ được dùng để so sánh với giá trị ngưỡng này. Việc chọn ngưỡng là rất quan trọng, nếu chọn ngưỡng hợp lý thì ta có thể phân biệt được vật thể với nền và ngược lại.

Phân vùng ảnh: Sau khi thực hiện nhị phân ảnh, ta thu được một ảnh gồm hai màu đen và trắng. Giá trị của các điểm ảnh chỉ là 0 và 1. Bước tiếp theo ta cần thực hiện công việc phân vùng ảnh nhằm phân biệt vật thể với nền và ngược lại. Thuật toán phân vùng ảnh dựa trên kỹ thuật đánh nhãn liên tiếp. Với kỹ thuật đánh nhãn liên tiếp ta có thể sử dụng ma trận mặt nạ 3x3 để quét lần lượt tất cả các điểm ảnh. Có 2 kỹ thuật có thể sử dụng ở đây:- Mặt nạ ảnh với 4 điểm lân cận- Mặt nạ ảnh với 8 điểm lân cận- Mặt nạ với bốn điểm lân cận và tám điểm lân cậnQuy ước khi quét ảnh:- Nếu điểm ảnh có giá trị là 0 thì gọi là điểm ảnh nền- Nếu điểm ảnh có giá trị là 1 thì gọi là điểm ảnh nổiTa chỉ đánh nhãn các điểm ảnh nổiQuá trình đánh nhãn ảnh được thực hiện theo các bước sau:Bước 1: Tiến hành quét lần lượt tất cả các điểm ảnh từ trái sang phải, từ trên xuống dưới. Nếu gặp điểm ảnh nền thì bỏ qua, nếu gặp điểm ảnh nổi thì tiến hành đánh nhãn. Trước khi đánh nhãn cho mỗi điểm ảnh nổi, ta cần quan tâm đến giá trị của điểm ảnh phía trên và điểm ảnh bên trái của điểm ảnh ta đang xét. Nếu các điểm ảnh này đã được đánh nhãn thì điểm ảnh đang xét được đánh nhãn trùng với điểm ảnh trên hoặc điểm ảnh bên trái đó. Nếu các điểm ảnh bên trên và điểm ảnh bên trái là các điểm ảnh nền thì ta đánh nhãn mới cho điểm ảnh đang xét.Bước 2: Sau khi đánh nhãn tất cả các điểm ảnh nổi, ta cần nhóm các điểm ảnh ở gần nhau nhưng lại được đánh nhãn khác nhau lại với nhau.Bước 3: Thực hiện quét lại và đánh nhãn mới cho các nhóm điểm ảnh vừa được nhóm lại ở trên.

Nhận dạng mục tiêu: Là quá trình xác định chính xác vật thể cần nhận dạng. Phương pháp được sử dụng ở đây là nhận dạng dựa vào đường biên vật thể. Từ biên dạng này ta sẽ xác định được các đỉnh, các cạnh và cả tâm của vật thể. Phương pháp phổ biến hiện nay là phương pháp Cany.Nội dung phương pháp Cany như sau:

76WIFI-ROBOT BOARD TINY6410

Page 80: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Bước 1: Làm trơn ảnh bằng bộ lọc Gauss để loại bỏ ảnh hưởng của nhiễuBước 2: Tính gradient của các phần tử ảnh và hướng của gradient

Xác định tâm vật thể: Sau khi đã nhận dạng được vật thể trong không gian làm việc, ta có thể kẻ các đường bao quanh vật và dễ dàng xác định được tâm của vật thể.Code ví dụ:// ThresholdingAdvanced.cpp : Defines the entry point for the console #include "stdafx.h"#include <cv.h>#include <highgui.h>int _tmain(int argc, _TCHAR* argv[]){

IplImage* img = cvLoadImage("Thresholding.jpg");IplImage* channelRed = cvCreateImage(cvGetSize(img), 8,

1);IplImage* channelGreen = cvCreateImage(cvGetSize(img),

8, 1);IplImage* channelBlue = cvCreateImage(cvGetSize(img), 8,

1);cvSplit(img, channelBlue, channelGreen, channelRed,

NULL);cvAdd(channelBlue, channelGreen, channelGreen);cvSub(channelRed, channelGreen, channelRed);cvThreshold(channelRed, channelRed, 20, 255,

CV_THRESH_BINARY);cvNamedWindow("original");cvNamedWindow("red");cvShowImage("original", img);cvShowImage("red", channelRed);cvWaitKey(0);return 0;

}

II.5.2. Cài đặt OpenCV Board Tiny6410:a. Mã nguồn

77WIFI-ROBOT BOARD TINY6410

Page 81: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Mã nguồn hoàn toàn miễn phí Download tại: http://sourceforge.net/projects/opencvlibrary/b. Toolchain:

X86: gcc,g++ Arm: arm-linux-gcc, arm-linux-g++

c. Cài đặt và hiện thực trên OpenCV trên Linux:X86: Visual Studio Linux Mac OSARM:Để porting thư viện OpenCV cho board ARM Tiny6410 trước tiên hết ta phải build gói thư viện OpenCV2.0 đã được down về trên Website. Lưu ý là thư viện OpenCV2.0 hiện tại build khá dễ dàng và ít gặp lỗi. Sau khi build thành công thư viện sẽ nằm trong /usr/local—và gồm có 4 thư mục như sau: bin+lib+include+share. Sau đó ta có thể copy thư mục này xuống board thông qua ftp, sdcard… Yêu cầu hệ thống:

Fedora 14, Linux Kernel 2.35 hoặc về sau nữa Toolchain: arm-linux-gcc-4.5.1-v6-vfp-20101103 đi kèm với

DVD của board Một số thư viện khác như: zlib, libpng, libjpeg, libz

Các bước tiến hành: Đảm bảo rằng Fedora đã cài toolchain arm-linux-gcc Giải nén source code Thiết lập config build như sau: ./configure --host=arm-linux --

without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --without-gtk --enable-static --enable-shared

Command : make & make install Build không lỗi thì xem như đã thành công được phần tạo thư

viện compile cho source code trên máy tính. Copy thư mục thư viện gồm 4 thư mục con như trên xuống board

tương ứng với các thư mục trên máy tính. Tạo file source code để test chương trình như sau:

// CameraCapture.cpp : Defines the entry point for the console application.

78WIFI-ROBOT BOARD TINY6410

Page 82: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

//#include <cv.h>#include <highgui.h>#include <stdio.h>

// A Simple Camera Capture Framework int main() {

printf("\nok1");CvCapture* capture = cvCaptureFromCAM(0);printf("\nok1");

if ( !capture ) {printf( "ERROR: capture is NULL \n" );getchar();return -1;

}printf("\nok1");int i=0;

while ( i<50 ) {// Get one frame

IplImage* frame = cvQueryFrame( capture );

if ( !frame ) {printf( "ERROR: frame is null...\

n" );getchar();break;

}i++;printf("\nok2");

cvReleaseCapture( &capture );printf("\nok1\n");

return 0;}

Dùng command build file CameraCapture.cpp như sau:

79WIFI-ROBOT BOARD TINY6410

Page 83: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

arm-linux-g++ CameraCapture.cpp -o CameraCapture-arm -I/usr/local/include/opencv /usr/local/lib/libhighgui.so \/usr/local/lib/libcvaux.so /usr/local/lib/libcv.so /usr/local/lib/libcxcore.so /usr/local/lib/libpng.so /usr/local/lib/libz.so -lpthread –ldlNếu build thành công không lỗi thì có 1 file binary được tạo ra là CameraCapture-arm cùng thư mục với source code. Copy file binary này xuống board và dùng lệnh ./CameraCapture-arm. Chương trình sẽ không thực thi được và hiện ra các lỗi là không tìm thấy thư viện.

Linker thư viện: dùng lệnh sau để liên kết các shared library- ln -s /usr/local/lib/libcv.so.4 /usr/lib/libcv.so.4- ln -s /usr/local/lib/libcvaux.so.4 /usr/lib/libcvaux.so.4- ln -s /usr/local/lib/libcxcore.so.4 /usr/lib/libcxcore.so.4- ln -s /usr/local/lib/libhighgui.so.4 /usr/lib/libhighgui.so.4- ln -s /usr/local/lib/libml.so.4 /usr/lib/libml.so.4….Và một số thư viện nếu chương trình báo lỗi thiếu thư viện…

Chạy chương trình và xem kết quả

II.6.ĐIỀUKHIỂN GPIO BOARD TINY6410 QUA WEB SERVER

80WIFI-ROBOT BOARD TINY6410

Page 84: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II.6.1. GPIO PORTE:Để control gpio trong Tiny6410 ta phải tham khảo dadtasheet của chip S3C6410. PortE gồm có các thanh ghi sau:

Trong đó mỗi thanh ghi có những chức năng khác nhau: GPECON: control data input/output GPEDAT: thanh ghi dữ liệu lưu trữ GPEPUD: thanh ghi Pull-up/down pin GPECONSLP: thanh ghi dùng cho chế độ Sleep GPEPUDSLP: thanh ghi dành cho chế độ Sleep với Pull-up/down

Các bit trạng thái dành cho quá trình điều khiển tham khảo thêm trong datasheet. Trong đề tài này em dùng phương pháp tham chiếu, đọc ghi vào bộ nhớ để điều khiển các giá trị truy xuất GPIO.

Các bước thực hiện truy xuất GPIO: Mở file truy xuất bộ nhớ: open("/dev/mem",…) Set các giá trị trong thanh ghi điều khiển là Input/Output Thiết lập các giá trị dữ liệu bằng cách map đến địa chỉ trong ô nhớ Đóng truy xuất: close(fd)

II.6.2. Cài đặt Wifi và điều khiển board qua trình duyệt:B1: chạy chương trình phát Wifi AP Mode của USB Tenda W311U. Lúc này máy tính đóng vai trò là một Access Point, địa chỉ IP của PC Laptop lúc này sẽ được gán tự động là 192.168.123.1, và Wifi phát ra có tên là Tenda-SoftAP, mã hóa WPA-PSK, password được thiết lập là zzzzzzzz:

81WIFI-ROBOT BOARD TINY6410

Page 85: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.6.0: Chạy ứng dụng phát Wifi USB tenda

B2: khởi động board Tiny6410, kết nối mạng Lan bằng cáp giữa PC Laptop và board. Lúc này board có IP mặc định là 192.168.1.230. Dùng lệnh telnet để vào cấu hình cho board

82WIFI-ROBOT BOARD TINY6410

Page 86: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.6.1: telnet đến board

Hình 2.6.2: Kiểm tra ứng dụng mjpg streamer hình ảnh

83WIFI-ROBOT BOARD TINY6410

Page 87: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

B3: chạy chương trình scan wifi và kết nối wifi với máy tính

Hình 2.6.3: Kết nối Wifi với máy tính

Board được gán IP tự động là 192.168.123.22 và hầu như ít thay đổi trong những lần kết nối sau. Kiểm tra bằng lệnh ping về máy tính thành công.B4: thực hiện việc gửi hình ảnh và điều khiển GPIO trên trình duyệt Web

Hình 2.6.4: Điều khiển GPIO và quan sát hình ảnh trên board

84WIFI-ROBOT BOARD TINY6410

Page 88: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Kết quả của quá trình điều khiển hiển thị trực tiếp trên trình duyệt

Hình 2.6.5: Bật sáng cả 4 led bằng phím mũi tênCả 4 led đều sáng: 4 GPIO PORTE, 1,2,3,4 đều là mức 0 khi nhấn phím mũi tên đi lên

Hình 2.6.6: Tắt cả 4 led bằng phím QCả 4 led đều tắt: 4 GPIO PORTE, 1,2,3,4 đều là mức 1 khi nhấn phím Q

II.6.2. Code ví dụ (xem phần phụ lục):

85WIFI-ROBOT BOARD TINY6410

Page 89: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

KẾT LUẬN

86WIFI-ROBOT BOARD TINY6410

Page 90: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I. CÁC KẾT QUẢ ĐẠT ĐƯỢC: Tìm hiểu được một số giao thức, hỗ trợ, kernel driver, các module của board

Tiny6410, hiện thực được một số ứng dụng như Led, keyboard, LCD…Thiết kế Robot demo cho đề tài đảm bảo các yêu cầu chuyển động, quay trái, quay phải, đo quãng đường di chuyển bằng Encoder, điều khiển tốc độ bằng phương pháp PWM, truy xuất các IO…

Hiện thực ứng dụng CameraIP stream video qua mạng Lan, có thể sử dụng như một CameraIP trên nền trình duyệt Web.

Sử dụng các kỹ thuật Ajax, CGI vào ứng dụng cho việc điều khiển các thiết bị từ xa thông qua nền trình duyệt.

Hiện thực Robot-Wifi với USB Tenda điều khiển chuyển động một cách linh hoạt theo yêu cầu. Robot có gắn Camera và có thể gửi hình ảnh về hiển thị ngay trên trình duyệt.

II. HẠN CHẾ: Chưa xây dựng được Wifi-Robot dựa trên các ứng dụng socket truyền nhận

dữ liệu, hình ảnh. USB Tenda chưa ổn định về tính năng thu phát sóng: khoảng cách, băng tần,

tốc độ truy xuất. Chưa xây dựng được một số tính năng như tracking khi Robot bị mất tín

hiệu, Robot không xác định được tọa độ. Đề tài còn sơ khai mang nhiều tính nghiên cứu.

III. HƯỚNG PHÁT TRIỂN: Là một hướng mới điều khiển các thiết bị trên nền Html5, Ajax, công nghệ

3G trên điện thoại di động, các smart phone, máy tính bảng. Tối ưu hóa đường truyền khi xử lý các thông tin, các ứng dụng stream hình

ảnh, video. Xây dựng các ứng dụng OpenCV nâng cao cho Robot như tracking, tự động

dò tìm các mục tiêu khi bị lạc đường… Xây dựng các ứng dụng điều khiển qua mạng Internet không chỉ dừng lại ở

Wifi-Robot mà còn nhiều ứng dụng khác nữa.

87WIFI-ROBOT BOARD TINY6410

Page 91: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

TÀI LIỆU THAM KHẢO

88WIFI-ROBOT BOARD TINY6410

Page 92: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Ebook:

[1] Mini6410 English FRIENDLYARM của FRIENDLYARM[2] Thiết kế Robot BK-Pro của Đại học Bách khoa TP Hồ Chí

Minh[3] Datasheet Atmel AVR, S3C6410, IC7805, 2803, IRF540,

IRF9540[4] USB Tenda Wifi Guide[5] Introduction to Linux của Machtelt Garrels[6] A Basic Linux Tutorial của John E. Floyd University of

Toronto

Website:

[1] Website cung cấp một số mã nguồn Kernel, root file, boot loader của board http://www.minidevs.com/[2] Trang chủ, forum của board http://www.friendlyarm.net/[3] Trang mã nguồn mjpg streamer phát triển ứng dụng truyền hình ảnh và video http://sourceforge.net/projects/mjpg-streamer/develop[4] Ajax-Jquery mã nguồn và một số ứng dụng

http://jquery.com/[5] Source code google mini2440

http://code.google.com/p/mini2440/[6] Tài liệu OpenCV http://opencv.willowgarage.com/wiki/

------Và nhiều tài liệu khác------

89WIFI-ROBOT BOARD TINY6410

Page 93: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

PHỤ LỤC

90WIFI-ROBOT BOARD TINY6410

Page 94: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

I. KIẾN TRÚC AVR:Sơ đồ khối:

Hình 5.1.0: Các pin của Atmega32

AVR có cấu trúc Harvard, trong đó đường truyền cho bộ nhớ dữ liệu (data memory bus) và đường truyền cho bộ nhớ chương trình (program memory bus) được tách riêng. Data memory bus chỉ có 8 bit và được kết nối với hầu hết các thiết bị ngoại vi, với register file. Trong khi đó program memory bus có độ rộng 16 bits và chỉ phục vụ cho instruction registers.

91WIFI-ROBOT BOARD TINY6410

Page 95: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 5.1.1: Sơ đồ khối của Atmega32

ALU làm việc trực tiếp với các thanh ghi chức năng chung. Các phép toán được thực hiện trong một chu kỳ xung clock. Hoạt động của ALU được chia làm 3 loại: đại số, logic và theo bit.

Thanh ghi trạng thái: Đây là thanh ghi 8 bit lưu trữ trạng thái của ALU sau các phép tính số học và logic.

Hình 5.1.2: Thanh ghi trạng thái của Atmega32

- C: Carry Flag cờ nhớ .- Z: Zero Flag Cờ zero. - N: Negative Flag kết quả phép toán âm.- V: Two’s complement overflow cờ bù 2.- S For signed tests (S=N XOR V) kiểm tra 2 cờ N và V.- H: Half Carry Flag được sử dụng trong BCD cho một số toán hạng.- T: Transfer bit used by BLD and BST instructionsđược sử dụng làm

nơi trung gian trong các lệnh BLD,BST.

92WIFI-ROBOT BOARD TINY6410

Page 96: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

- I: Global Interrupt Enable/Disable Flag ây là bit cho phép toàn cục ngắt. Nếu bit này ở trạng thái logic 0 thì không có một ngắt nào được phục vụ.

Thanh ghi chức năng chung: Atmega 16 có 32 thanh ghi chức năng chung thực thi nhiều tác vụ trong đó

Hình 5.1.3: Thanh ghi chức năng chung Atmega32

- Một 8 bit output toán hạng và một 8 bit cho input kết quả.- Hai 8 bit output toán hạng và một 8 bit cho input kết quả.- Hai 8 bit cho output kết quả và một 16 bit cho input kết quả.- Một 16 bit cho output toán hạng và một 16 bit cho input kết quả.

Con trỏ ngăn xếp SP: - Là một thanh ghi 16 bit nhưng cũng có thể được xem như hai thanh ghi

chức năng đặc biệt 8 bit dùng để lưu trữ biến trong quá trình tính toán. Stack được hiểu như là 1 “tháp” dữ liệu, dữ liệu được chứa vào stack ở đỉnh “tháp” và dữ liệu cũng được lấy ra từ đỉnh. Kiểu truy cập dữ liệu của stack gọi là LIFO.

Hình 5.1.4: Stack của Atmega32

- Khai báo SP tại một vùng nhớ trong SRAM với địa chỉ của SP thiết lập >$60. Con trỏ giảm địa chỉ xuống 1 khi dữ liệu được đưa vào Stack với lệnh PUSH và hai khi có Subroutine hoặc Interrupt được gọi. Con trỏ tăng địa chỉ lên 1 khi có lệnh POP dữ liệu thực hiện và lên hai khi trả dữ liệu về cho chương trình con.

93WIFI-ROBOT BOARD TINY6410

Page 97: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Bộ nhớ chương trình Flash:

Hình 5.1.5: Bộ nhớ của Atmega32

- Bộ nhớ Flash 16KB của ATmega16 dùng để lưu trữ chương trình với độ rộng 16 bit. Do các lệnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp theo kiểu 8KX16.

- Bộ nhớ chương trình chỉ gồm 1 phần là Application Flash Section nhưng trong các chip AVR mới chúng ta có thêm phần Boot Flash section. Boot Section. Thực chất, application section bao gồm 2 phần: phần chứa các instruction và phần chứa interrupt vectors. Các vector ngắt nằm ở phần đầu của application section từ địa chỉ 0x0000 và dài đến bao nhiêu tùy thuộc vào loại chip và phần chứa instruction nằm liền sau đó. Các chương trình được viết sau địa chỉ đó.

Bộ nhớ dữ liệu SRAM: Đây là phần chứa các thanh ghi quan trọng nhất của chip, việc lập trình cho chip phần lớn là truy cập bộ nhớ này và bộ nhớ này gồm các phần sau:

o Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu bao gồm 32 thanh General Purpose Rgegister – GPR. Tất cả các thanh ghi này đều là các thanh ghi 8 bits. Tất cả các chip trong họ AVR đều bao gồm 32 thanh ghi Register File có địa chỉ tuyệt đối từ 0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi này được đặt tên theo thứ tự là R0 đến R31. Chúng được chia thành 2 phần, phần 1 bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31.

o Phần 2: là phần nằm ngay sau SFR bao gồm 64 thanh ghi IO hay còn gọi là vùng nhớ IO. Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Vùng nhớ I/O có thể được truy cập như SRAM hay như các thanh ghi I/O. Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến

94WIFI-ROBOT BOARD TINY6410

Page 98: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

0x005F. Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F.

o Phần 3: internal SRAM là vùng không gian cho chứa các biến trong lúc thực thi chương trình.

Bộ nhớ dữ liệu EEPROM: ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512 byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ghi từng byte một. EEPROM được tách riêng và có địa chỉ tính từ 0x0000H.

Quá trình thực thi lệnh:

Hình 5.1.6: Quá trình thực thi lệnh của Atmega32

Các instruction được chứa trong bộ nhớ chương trình Flash memory dưới dạng các thanh ghi 16 bit. Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung clock và  1 instruction chứa trong program memory sẽ được load vào trong instruction register, instruction register tác động và lựa chọn register file cũng như RAM cho ALU thực thi. Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi một bộ đếm chương trình – PC (Program counter). Hầu hết các instruction đều được thực thi trong 1 chu kỳ xung clock.

95WIFI-ROBOT BOARD TINY6410

Page 99: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

II. TỔNG QUAN VỀ BOARD TINY6410II.1. Giới thiệu board Tiny6410 tổng quan:

a. Tiny6410 Board:Board Mini6410 thì được phát triển từ board ARM11, cung cấp một giải pháp toàn diện tích hợp cả phần cứng và phần mềm. Nó được thiết kế, phát triển và phân phối bởi FriendlyARM tại Quảng Châu, Trung Quốc. Nó ứng dụng các bộ xử lý Samsung S3C6410 và thừa hưởng các tính năng tiện ích nhất của board Mini2440, sản phẩm có nhiều ưu điểm về chất lượng và dễ sử dụng với chi phí thấp. So với sản phẩm trước đó của FriendlyARM Tiny6410 được thiết kế đáng tin cậy hơn và hỗ trợ một số giao tiếp. Nó được ứng dụng các thiết bị điện tử tự động, ứng dụng trong công nghiệp, hệ thống GPS và hệ thống đa phương tiện cũng như các ứng dụng giáo dục đào tạo, phát triển hệ thống nhúng.Nhìn chung board Mini6410 có các giao tiếp sau đây:

2 giao tiếp với LCD 1 giao tiếp 4-wire resistor màn hình cảm ứng 1 giao tiếp 100M Ethernet 1 giao tiếp DB9 5-wire serial port 1 giao tiếp Mini USB 2.0-OTG giao tiếp USB Host 1.1 1 giao tiếp audio output 3.5mm 1 giao tiếp microphone on board, 1 TV-OUT 1 SD card socket, 1 đầu nhận hồng ngoại 4 * TTL serial port, 1 giao tiếp CMOS camera, 1 giao tiếp 40 pin bus 1giao tiếp 30 pin GPIO (nó có thể được ghép với SPI, I2C và

interrupts. Nó bao gồm 3 ADC và 1 DAC.), 1 giao tiếp SDIO2 (có thể kết nối với module SD WiFi) 1 giao tiếp 10 pin JTAG PWM buzzer, I2C-EEPROM, backup battery for RTC, ADC adjustable resistor

96WIFI-ROBOT BOARD TINY6410

Page 100: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

8 * User button 4 * LED

Hình vẽ các khối của Tiny6410:

Hình 5.2.0: Các khối chính của board Tiny6410

97WIFI-ROBOT BOARD TINY6410

Page 101: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 5.2.1: Giao diện board Tiny6410 với Android

b. Sơ đồ khối:Kích thước Board Tiny6410:

Hình 5.2.2: Kích thước board Tiny6410

98WIFI-ROBOT BOARD TINY6410

Page 102: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Board Tyni6410 được phát triển với kích thước 110x110 (mm). Trên board được trang bị nhiều kết nối, giao tiếp và cổng. Layout của board Tyni6410 như hình vẽ trên.PCB layer: 6 110 x 110 mmSơ đồ các khối chức năng của Board như hình vẽ bên dưới:

Hình 5.2.3: Các khối chính của chip S3C6410

99WIFI-ROBOT BOARD TINY6410

Page 103: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

c. Các tính năng đặc trưng của Board: CPU Samsung S3C6410A, ARM1176JZF-S, 533Mhz, maximum 667Mhz DDR RAM On board 256M DDR RAM (128M Optional) 32bit Data Bus FLASH Memory On board 128M/256M/1GB SLC Nand Flash or 2GB

MLC Nand Flash Và một số giao tiếp ngoại vi như trên Hiện nay board Mini6410 có thể setup các hệ điều hành sau:

o Linux2.6.38(hoặc mới hơn) + Qtopia-2.2.0 + QtE-4.7.0

o WindowsCE.NET 6.0(R3)

o Android 2.3.2 (hoặc mới hơn)

o Ubuntu-0910

Hỗ trợ cài đặt hệ điều hành từ thẻ nhớ SD Card và hỗ trợ Debug qua J-Tag Link Board. Với hệ điều hành Linux có một số đặc trưng như sau:

o Boot Loader: sử dụng U-boot-1.6.1: open source, có thể cấu hình

như Nand booting hoặc SD booting, Superboot: phát triển bởi FriendlyARM, hỗ trợ boot từ thẻ nhớ SD Card.

o File Systems: hỗ trợ setup trên YAFFS2, UBIFS, CRAMFS,

EXT2/3, FAT32, NFS…o Driver (all open source): board hỗ trợ hầu hết các driver giao tiếp cơ

bản như serial ports, DM9000, Audio driver (WM9714), RTC, LEDs, USB host, LCD, USB camera, mouse, keyboard, flash drive, SD card, I2C, ADC, Watchdog, Multimedia bao gồm JPEG, FIMC, MFC, 2D/3D Accelerator, TVENC và TVSCALER), CMOS camera, SPI driver...

o Hỗ trợ Busybox1.17 (Linux tool kit bao gồm basic Linux

commands), Telnet, FTP and inetd (remote login tool), boa (web server), Madplay (command line mp3 player), Snapshot (command line screenshot tool), ifconfig, ping, route …(basic network commands)…

o Graphic User Interface bao gồm Qtopia-2.2.0: open source 2

version: x86 và ARM QtE-4.7.0: open source, chỉ cho ARM Qt-extended -4.4.3: open source…

100WIFI-ROBOT BOARD TINY6410

Page 104: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

d. Không gian địa chỉ:

Address Size Description0x0000_0000 0x07FF_FFFF 128MB BOOT

0x0800_0000 0x0BFF_FFFF 64MB ROM

0x0C00_0000 0x0FFF_FFFF 128MB Stepping Stone(8KB)

0x1000_0000 0x17FF_FFFF 128MB

0x1800_0000 0x1FFF_FFFF 128MB DM9000AEP

0x2000_0000 0x27FF_FFFF 128MB

0x2800_0000 0x2FFF_FFFF 128MB

0x3000_0000 0x37FF_FFFF 128MB

0x3800_0000 0x3FFF_FFFF 128MB

0x4000_0000 0x47FF_FFFF 128MB

0x4800_0000 0x4FFF_FFFF 128MB

0x5000_0000 0x5FFF_FFFF 256MB

128M DDR RAM0x6000_0000 0x6FFF_FFFF 256MB

II.2. Các khối chính:a. Nguồn:

Board Mini6410 được cung cấp nguồn với hiệu điện thế là 5V. Hiệu điện thế là 5V và dòng điện là 800mA từ các connect sau.

CON8 PIN Spec1 VDD5V2 GND3 GND4 VDDIN

101WIFI-ROBOT BOARD TINY6410

Page 105: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

b. Serial Port: Board S3C6410 có 4 cổng nối tiếp là: UAST0, 1, 2, 3. Trong đó UAST0

và UAST1 là 2 cổng nối tiếp có 5 đường tín hiệu. Còn 3 cổng nối tiếp tiếp còn lại là các cổng nối tiếp có 3 đường tín hiệu.

Trên board Mini6410, UAST0 thì được chuyển đổi qua RS232 (COM0) và có truyền dữ liệu với PC thông qua cáp nối tiếp.

4 cổng được kết nối với CPU qua CON1-4.

Hình 5.2.4: Cổng RS232 của board c. USB Interface:

Board Mini6410 có 2 USB interface. Một là USB host, nó giống như USB interface trong PC và có thể kết nối với USB camera, bàn phím, chuột, USB flash driver và thiết bị USB khác. Giao thức USB còn lại là OTG mini USB 2.0 nó được sử dụng để download chương trình xuống board. Khi board chạy hệ điều hành WinCE nó có thể đồng bộ với Windows thông qua ActiveSync. Nhưng khi board chạy hệ điều hành Linux thì hiện nay không có chương trình nào đồng bộ hóa với Windows.

Mini USB interface:Mini USB Pin Spec

5 GND 4 OTGID 3 D+ 2 D- 1 Vbus

Hình 5.2.5: Mini USB OTG của board

102WIFI-ROBOT BOARD TINY6410

Page 106: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

USB host:

Mini USB Pin Spec1 5v2 D- 3 D+ 4 GND

Hình 5.2.6: USB host 2.0 của board

d. Network Interface:Network interface của board Mini6410 được tích hợp trong chip DM9000 và có băng thông mạng có thể lên 10/100M. Với cáp mạng thông thường có thể kết nối với một Router hay Switch tới board Mini6410.

e. Audio Interface:Board S3C6410 hổ trợ I2S/PCM/AC97.Board Mini6410 có một AC97 interface sử dụng WM9714 làm chip giải mã âm thanh. Output của Audio là một jack cắm màu xanh lục và Input là microphone trên board như trên máy tính PC.

Hình 5.2.7: Cổng Audio của board f. TV Output:

Board S3C6410 có 2 TV output. Board Tinyni6410 khuếch đại tín hiệu output của DACOUT0, người dùng có thể kết nối board với TV qua một cáp AV. Output TV còn lại là phần mở rộng tử pin thứ 30 của CON6 trong CPU.Lưu ý: khi kết nối DACOUT0 với TV người sử dụng cần chuyển đổi TV qua chế độ CVBS.

103WIFI-ROBOT BOARD TINY6410

Page 107: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 5.2.8: Cổng Video của board

g. JTAG Interface:Một JTAG cơ bản có 4 đường tín hiệu :TDI (Test Data In ) kiểm tra dữ liệu đầu vào, TDO (Test Data Out) kiểm tra dữ liệu đầu ra, TCK (Test ClocK) , TMS (Test Mode Select)  chọn chế độ kiểm tra đầu vào, TRST (Test Reset) optional. Bốn đường tín hiệu đó cộng với một đường power và một đường ground thì toàn bộ là có 6 đường tín hiệu. Do đó một JTAG cở bản cần có những đường tín hiệu đó và nó không nhất thiết là phải 20 pin hay 10 pin. Board Mini6410 có một giao tiếp chuẩn JTAG 10 pin.

Hình 5.2.9: Jack JTAG của board

JTAG Spec2 4 6 8 10

3.3V nRESET TDO GND GND1 3 5 7 9

3.3V nTRST TDI TMS TCK

h. LED:Led thường được sử dụng để báo trạng thái. Board Tyni6410 có 4 đèn Led để lập trình. Các đèn Led được kết nối trực tiếp với GPIO. Các đèn Led hoạt động ở mức điện thế thấp.

104WIFI-ROBOT BOARD TINY6410

Page 108: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

LED4 LED3 LED2 LED1

GPIO GPK7 GPK6 GPK5 GPK4

Hình 5.2.10: Led hiển thị GPIO của board

i. User Key:Board Tyni6410 có 8 KEY. Tất cả đều là tín hiệu ngắt CPU và sẽ được kích hoạt ở mức thấp. Chúng cũng có thế thể kết hợp với GPIO và nhiều chức năng giao tiếp khác. Kết hợp chúng lại với nhau người sử dụng có thể mở rộng chúng qua CON12. 8 KEY và CON12 được định nghĩa như sau:

CON12 1 2 3 4 5 6 7 8 Key K1 K2 K4 K4 K5 K6 K7 K8 Interrupt EINT

0 EINT1

EINT2

EINT3

EINT4

EINT5

EINT19

EINT20

Multiplexed GPIO

GPN0 GPN1 GPN2 GPN3 GPN4 GPN5 GPL11 GPL12

Note: CON12.9 kết nối với nguồn (3.3V), CON12.10 kết nối với ground (GND)

j. LCD Interface:Để thuận tiện cho người sử dụng, FriendlyARM kết hợp 2 kết nối LCD : LCD2 và LCD3. LCD2 gồm 41 pin kết nối và tương thích với Mini2440 LCD, LCD3 gồm 40 pin. LCD sử dụng các tín hiệu điều khiển thường được sử dụng như dòng quét, xung clock... và hiển thị tín hiệu RGB lên đến 1,6 triệu điểm ảnh.

Hình 5.2.11: Giao tiếp LCD của board

105WIFI-ROBOT BOARD TINY6410

Page 109: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

LCD2 & LCD3

PIN Spec LCD2 & LCD3 PIN Spec

1 5V 2 5V3 VD0 4 VD15 VD2 6 VD37 VD4 8 VD59 VD6 10 VD711 GND 12 VD813 VD9 14 VD1015 VD11 16 VD1217 VD13 18 VD1419 VD15 20 GND21 VD16 22 VD1723 VD18 24 VD1925 VD20 26 VD2127 VD22 28 VD2329 GND 30 GPE0/LCD_PWR31 PWM1/GPF15 32 nRESET33 VDEN/VM 34 VSYNC35 HSYNC 36 VCLK37 TSXM 38 TSXP39 TSYM 40 TSYP

41 GND

k. ADC Input:Board Mini6410 có 4 kênh chuyển đổi A/D. AIN0 được kết nối có thể điều chỉnh được điện trở W1; AIN1, 2, 3 là mở rộng của các pin27, 28, 29 của CON6. Bộ chuyển đổi A/D của board S3C66410 có thể được cấu hình 10-bit/12-bit.

Hình 5.2.12: Giao tiếp ADC của board

106WIFI-ROBOT BOARD TINY6410

Page 110: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

l. PWM Buzzer:Speaker trên board thì được điều khiển bởi PWM, PWM0 tương ứng với GPF14, nó có thể được cấu hình như output PWM qua sosfware hoặc sử dụng một GPIO.

Hình 5.2.13: PWM của board

m. Infrared Receiver:Board Tiny6410 có một đầu thu hông ngoại. IRF là IRM3638. Nó kết nối đến pin EINT12.

Hình 5.2.14: Cảm biến hồng ngoại của board

n. I2C-EEPROM:Board Tiny6410 có một EEOROM AT24C08 kết nối với I2C của CPU. Nó có 256 bytes bộ nhớ và chủ yếu là kiểm tra bus I2C.

Hình 5.2.15: I2C EEPROM của board

107WIFI-ROBOT BOARD TINY6410

Page 111: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

o. SD Card:S3C6410 có 2 SDIO. SDIO0 thường được sử dụng cho thẻ SD. Tiny6410 được có một khe cắm SD chuẩn mở rộng SDIO0 qua CON7. Nó hỗ trợ SDHC tốc độ cao.

Hình 5.2.16: Giao tiếp SD Card của board p. SDIO-II//SD-WiFi:

Các SDIO khác của S3C6410 được mở rộng thông qua CON9. Nó có 20 pin và mỗi pin cách nhau 2.0mm và nó bao gồm một SPI, một I2C và 4 GPIOs.

Hình 5.2.17: Giao tiếp SD Wifi của board

CON9 PIN Spec CON9 PIN Spec1 VDD/3.3V 2 GND3 GPK8 4 GPK135 I2CSCL 6 I2CSDA7 SPI0_MOSI0 8 SPI0_MISO09 SPI0_CLK0 10 SPI0_CS11 GPP10/WiFi_I 12 GPP11/WiFi_PD13 SD1_CLK 14 SD1_CMD15 SD1_nCD 16 SD1_nWP17 SD1_DAT0 18 SD1_DAT119 SD1_DAT2 20 SD1_DAT3

108WIFI-ROBOT BOARD TINY6410

Page 112: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

q. CMOS Camera Interface:S3C6410 có một CMOS camera interface. Nó được mở rộng thông qua CON10. Nó có 20 pin kết nối và mỗi pin cách nhau 2.0 mm, người dùng có thể sử dụng các module CAM130.

Hình 5.2.18: Giao tiếp CMOS Camera của board

CON10 PIN Spec CON10 PIN Spec1 CAMSDA

(I2CSDA)2 CAMSCL

(I2CSCL)3 GPK2 4 CAMRSTn5 CAMCLK 6 CAMHREF7 CAMVSYNC 8 CAMPCLK9 CAMDATA7 10 CAMDATA611 CAMDATA5 12 CAMDATA413 CAMDATA3 14 CAMDATA215 CAMDATA1 16 CAMDATA017 3.3V 18 2.45-2.8V19 1.8V 20 GND

r. GPIO:GPIO viết tắt của từ General Purpose Input Output. Tiny6410 có 30 pin và mỗi pin cách nhau 2.0mm. GPIO interface thông qua CON6. Trong thực tế CON6 không chỉ hoàn toàn là vài pin GPIO, ngoài một số pin CPU như pin AD, pin DAC vv. Interface SPI, I2C, interrups và một số interface khác tất cả đều là GPIO.

Hình 5.2.19: Các pin GPIO của board

109WIFI-ROBOT BOARD TINY6410

Page 113: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

III. PHỤ LỤC HÌNH ẢNH:

STT TrangHình 1.2.0: Mô hình phần cứng điều khiển Robot 4Hình 1.2.1: Mô hình phần tương tác điều khiển Robot 5Hình 1.2.2: Tương tác giữa GPIO và commmand.html 6Hình 1.3.0: Xe Jeep dùng đồ chơi Iandrobot 7Hình 1.3.1: Mạch cầu H điều khiền động cơ Iandrobot 7Hình 1.3.2: Router Linksys WRT54G Iandrobot 8Hình 1.3.3: Mạch testboard RS232 Iandrobot 8Hình 1.3.4: Board mạch trung tâm Iandrobot 8Hình 1.3.5: CameraIP Panasonic BL-C1A Iandrobot 9Hình 1.3.6: Phần mềm điều khiển truyền nhận dữ liệu Iandrobot 9Hình 1.3.7: hoàn chỉnh kết cấu Iandrobot 10Hình 1.3.8: WowWee Rovio 11Hình 1.3.9:Mạch giao tiếp RS232 JBProjects.net Robot 12Hình 1.3.10:Kết cấu hoàn chỉnh JBProjects.net Robot 13Hình 1.4.0: Mạch mô phỏng Robot bằng Proteus 14Hình 1.4.1: Giao diện AVR Studio 515Hình 1.4.2: Chip AVR được hỗ trợ trong AVR Studio 5 16Hình 1.4.3: C Compiler được hỗ trợ trong AVR Studio 5 16Hình 1.4.4: Visual assistant hỗ trợ trong AVR Studio 5 16Hình 1.4.5: Solution trong AVR Studio 5 16Hình 1.4.6: Giao diện Visual Studio 2010 17Hình 1.4.7: Kiểm tra arm-linux-gcc 18Hình 1.4.8: Giao diện PCB Express 19Hình 2.1.0: Quy trình thiết kế Robot 29Hình 2.1.1: Động cơ DC Robot 29Hình 2.1.2: Bánh tải trọng Robot 29Hình 2.1.3: Encoder Robot 30Hình 2.1.4: Bánh Omi trước Robot 30Hình 2.1.5: Acquy Robot 30Hình 2.1.6: Kết cấu hoàn chỉnh Robot 31Hình 2.1.7: Mạch tổng quát điều khiển động cơ DC 31Hình 2.1.8: Mạch ốn áp 5V 32Hình 2.1.9: IO AVR Logic 33Hình 2.1.10: Các trạng thái truy xuất IO AVR 34Hình 2.1.11: Lưu đồ xung Phase Corect PWM AVR 35Hình 2.1.12: Mạch Opto giao tiếp AVR 38Hình 2.1.13: IC2803 đệm đảo 39Hình 2.1.14: Cấu tạo MOSFET 39

110WIFI-ROBOT BOARD TINY6410

Page 114: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 2.1.15: Hoạt động của MOSFET 40Hình 2.1.16: Mạch cầu H gồm 4 MOSFET 41Hình 2.1.17: Client gửi lệnh điều khiển 42Hình 2.1.18: mô tả PWM 44Hình 2.1.19: Điều khiển Robot không có encoder 45Hình 2.1.20: Điều khiển Robot với encoder 46Hình 2.2.0: Chạy chương trình SD-Flasher.exe 47Hình 2.2.1: Load file superboot 48Hình 2.2.2: Chạy chương trình SD-Flasher.exe 49Hình 2.2.3: Fuse superboot 49Hình 2.2.4: root file system 50Hình 2.2.5: Thiết lập giao tiếp với cổng COM 52Hình 2.2.6: Menu boot của DNW 53Hình 2.2.7: uboot của board 54Hình 2.2.8: Cài đặt uboot thành công 54Hình 2.2.9: DNW yêu cầu truyền dữ liệu kernel 55Hình 2.2.10: Chọn kernel cho phù hợp 56Hình 2.2.11: Cài đặt kernel thành công 56Hình 2.2.12: Chọn file root system 57Hình 2.2.13: Cài đặt root file system thành công 58Hình 2.3.0: Mô tả Web Server với các Client 60Hình 2.3.1: Giao thức giữa Web Server và Client 61Hình 2.3.1: Web Server và Client board Tiny641062Hình 2.4.0: Mô hình MJPG Streamer board Tiny6410 63Hình 2.4.2: telnet đến board qua mạng Lan 66Hình 2.4.3: Thực hiện lệnh streamer hình ảnh 67Hình 2.4.4: Hiển thị hình ảnh gửi về 68Hình 2.5.0: Sự phát triển của thư viện OpenCV 69Hình 2.5.1: Cấu trúc thư viện OpenCV 71Hình 2.6.0: Chạy ứng dụng phát Wifi USB tenda 81Hình 2.6.1: telnet đến board 82Hình 2.6.2: Kiểm tra ứng dụng mjpg streamer hình ảnh 82Hình 2.6.3: Kết nối Wifi với máy tính 83Hình 2.6.4: Điều khiển GPIO và quan sát hình ảnh trên board 83Hình 2.6.5: Bật sáng cả 4 led bằng phím mũi tên 84Hình 2.6.6: Tắt cả 4 led bằng phím Q 84Hình 5.1.0: Các pin của Atmega32 91Hình 5.1.1: Sơ đồ khối của Atmega32 91Hình 5.1.2: Thanh ghi trạng thái của Atmega32 91Hình 5.1.3: Thanh ghi chức năng chung Atmega32 92Hình 5.1.4: Stack của Atmega32 92Hình 5.1.5: Bộ nhớ của Atmega32 93Hình 5.1.6: Quá trình thực thi lệnh của Atmega3294

111WIFI-ROBOT BOARD TINY6410

Page 115: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Hình 5.2.0: Các khối chính của board Tiny6410 96Hình 5.2.1: Giao diện board Tiny6410 với Android 97Hình 5.2.2: Kích thước board Tiny6410 97Hình 5.2.3: Các khối chính của chip S3C6410 98Hình 5.2.4: Cổng RS232 của board 101Hình 5.2.5: Mini USB OTG của board 102Hình 5.2.6: USB host 2.0 của board 102Hình 5.2.7: Cổng Audio của board 102Hình 5.2.8: Cổng Video của board 103Hình 5.2.9: Jack JTAG của board 103Hình 5.2.10: Led hiển thị GPIO của board 104Hình 5.2.11: Giao tiếp LCD của board 105Hình 5.2.12: Giao tiếp ADC của board 106Hình 5.2.13: PWM của board 106Hình 5.2.14: Cảm biến hồng ngoại của board 106Hình 5.2.15: I2C EEPROM của board 107Hình 5.2.16: Giao tiếp SD Card của board 107Hình 5.2.17: Giao tiếp SD Wifi của board 107Hình 5.2.18: Giao tiếp CMOS Camera của board 108Hình 5.2.19: Các pin GPIO của board 109Hình 5.3.0: Form nhân hai số 113Hình 5.3.1: Kết quả nhân hai số 114

112WIFI-ROBOT BOARD TINY6410

Page 116: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

IV. MỘT SỐ SOURCE CODE MẪU:IV.1. CGI:

----html---<form action="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/mult.cgi"><div><label>Multiplicand 1: <input name="m" size="5"></label></div><div><label>Multiplicand 2: <input name="n" size="5"></label></div><div><input type="submit" value="Multiply!"></div></form>---c---

Hình 5.3.0: Form nhân hai số

#include <stdio.h> #include <stdlib.h> int main(void) { char *data; long m,n; printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1",13,10); printf("<TITLE>Multiplication results</TITLE>\n"); printf("<H3>Multiplication results</H3>\n"); data = getenv("QUERY_STRING"); if(data == NULL) printf("<P>Error! Error in passing data from form to script."); else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2) printf("<P>Error! Invalid data. Data must be numeric."); else printf("<P>The product of %ld and %ld is %ld.",m,n,m*n); return 0; }

113WIFI-ROBOT BOARD TINY6410

Page 117: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

Kết quả trả về như sau:

Hình 5.3.1: Kết quả nhân hai số

IV.2. PWM://Global variables and definition#define PULSE_WIDTH 0x40void pwm_start(){ OCR1AL = PULSE_WIDTH; //Load Pulse width OCR1AH = 0; DDRD |= (1<<5); //PortD.5 as o/p TCCR1A = 0x81; //8-bit, Non-Inverted PWM TCCR1B = 1; //Start PWM}

114WIFI-ROBOT BOARD TINY6410

Page 118: filebaocao-131105210631-phpapp02

KHÓA LUẬN TỐT NGHIỆP GVHD: TS NGUYỄN MINH SƠN

IV.3. GPIO Memory:#define MAP_SIZE 4096UL#define MAP_MASK (MAP_SIZE - 1)/*********************************/int main(int argc, char **argv) {

int fd;void *map_base, *virt_addr; off_t target = 0xB7A01084; if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) {printf("/dev/mem could not be opened.\n"); exit(1); } else {

printf("/dev/mem opened.\n"); } fflush(stdout); /* Map one page */map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target + & ~MAP_MASK); if(map_base == (void *) -1) { printf("Memory map failed.\n"); } else { printf("Memory mapped at address %p.\n", map_base); } fflush(stdout); virt_addr = map_base + (target & MAP_MASK); /* acess remapped region here */ if(munmap(map_base, MAP_SIZE) == -1) { printf("Memory unmap failed.\n"); } close(fd);

}

115WIFI-ROBOT BOARD TINY6410