Trong đồ án này tôi trình bày những kiến thức cơ bản về bo mạch Arduino Uno R3, module điều khiển động cơ L293D, thiết bị cảm biến cử chỉ 3D Leap Motion Controller như là cấu tạo, nguyên
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH
-
BẢN NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP Họ và tên sinh viên: Nguyễn Thế Lâm Mã số sinh viên: 1151083795 Ngành : Kỹ thuật điện tử truyền thông Khoá: 52 Giảng viên hướng dẫn: ThS Hồ Sỹ Phương Cán bộ phản biện: 1 Nội dung thiết kế tốt nghiệp:
2 Nhận xét của cán bộ phản biện:
Ngày tháng năm
Cán bộ phản biện
(Ký, ghi rõ họ và tên)
Trang 3MỤC LỤC
Trang
TÓM TẮT ĐỒ ÁN 4
MỞ ĐẦU 6
DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ 8
DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT 10
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 11
1.1 Giới thiệu phần mềm Labview 11
1.1.1 Khái quát chung về Labview 11
1.1.2 Kỹ thuật lập trình Lapview 13
1.2 Tổng quan về Arduino Uno R3 và module L293D 21
1.2.1 Bo mạch Arduino Uno R3 21
1.2.2 Module điều khiển động cơ L293D 23
1.3 Tổng quan về bộ điều khiển bằng cử chỉ 24
1.4 Kết luận 26
CHƯƠNG 2 PHÂN TÍCH, THIẾT KẾ HỆ THỐNG 27
2.1 Phân tích, lựa chọn thiết bị 27
2.1.1 Leap Motion Controller 27
2.1.2 Board mạch Arduino Uno R3 27
2.1.3 Motor driver shield L293D 29
2.2 Mạch cầu H 30
2.3 Bài toán điều khiển động cơ 33
2.3.1 Mô hình động cơ một chiều 33
2.3.2 Các phương pháp điều chỉnh tốc độ động cơ một chiều 38
2.4 Lập trình Labview điều khiển robot 44
2.5 Kết luận 47
CHƯƠNG 3 MÔ PHỎNG VÀ THI CÔNG 48
3.1 Thi công phần cứng 48
3.1.1 Khối cảm biến cử chỉ 48
3.1.2 Khối máy chủ 48
3.1.3 Khối vi điều khiển 49
3.1.4 Khối động cơ 49
3.2 Lập trình phần mềm 50
3.2.1 Chương trình trên vi điều khiển 50
3.2.2 Chương trình trên Labview 51
3.3 Kết luận 58
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 59
Kết luận 59
Trang 4TÓM TẮT ĐỒ ÁN
Từ khi bộ điều khiển Leap Motion được phát hành, nhiều kỹ sư, lập trình
viên đã nghiên cứu cho ra đời những sản phẩm mới khai thác được khả năng mà Leap Motion mạng lại Điều khiển bằng cử chỉ là một phương pháp điều khiển mới, mang lại nhiều lợi ích cũng như hứng thú cho mọi người
Đề tài được thực hiện bằng các phương pháp: tìm hiểu qua internet, các diễn đàn và sự hướng dẫn của giáo viên
Trong đồ án này tôi trình bày những kiến thức cơ bản về bo mạch Arduino Uno R3, module điều khiển động cơ L293D, thiết bị cảm biến cử chỉ 3D (Leap Motion Controller) như là cấu tạo, nguyên lý hoạt động, khai thác một số cử chỉ
mà bộ điều khiển Leap Motion hỗ trợ như vị trí và tốc độ của bàn tay, trình bày những kiến thức cơ bản về phần mềm Labview, cách viết lệnh để điều khiển arduino và cách kết nối với Leap Motion
Đi vào thiết kế mô hình động cơ gồm 2 motor DC, phân tích và xây dựng chương trình điều khiển động cơ này trên phần mềm Labview kết hợp với bộ điều khiển Leap Motion
Để ứng dụng được vào thực tế thì đề tài phải tiếp tục nghiên cứu và phát triển thêm
Trang 5In this thesis i present the basic knownledge of Arduino Uno R3 board, module shield driver L293D, gesture sensor device (Leap Motion Controller) as structure, principle of operation, exploit some gestures that Leap Motion Controller support as position and velocity of hand, present the basic knownlodge of Labview software as command write to control arduino and way
to connect with Leap Motion
Design motor model consist of 2 DC motors, analyze and build code to control this motor on Labview software combined with Leap Motion Controller For practical apply, the thesis must continue to research and develop
Trang 6MỞ ĐẦU
Cùng với sự phát triển của khoa học kỹ thuật thì việc điều khiển các thiết
bị, máy móc từ xa cũng trở nên phổ biến hơn Cách thức điều khiển từ xa phổ biến bây giờ vẫn là dùng điện thoại thông minh, laptop kết nối qua bluetooth hay wifi để điều khiển, và việc này đòi hỏi người kỹ sư phải biết và hiểu rõ về lập trình truyền thống (gõ từng dòng lệnh) điều này gây khó khăn cho hầu hết các
kỹ sư Điện tử Viễn thông là những người không chuyên về lập trình
Labview ra đời đã giải quyết được khó khăn trên, việc lập trình trên phần mềm labview đơn giản hơn rất nhiều, đối với Labview việc lập trình đơn giản chỉ là kéo và thả các khối chức năng rồi kết nối chúng lại với nhau như việc chúng ta vẽ mạch điện tử Khả năng viết code dễ dàng là vậy nhưng việc cứ ngồi trước màn hình máy tính và điều khiển thiết bị bằng việc click chuột cũng gây nhàm chán cho người sử dụng nên việc thay thế cách điều khiển mới là cần thiết
Từ khi bộ điều khiển Leap Motion được giới thiệu vào năm 2013, rất nhiều ứng dụng đã được các kỹ sư, lập trình viên phát triển để khai thác khả năng của thiết bị này, trong đó có ứng dụng hữu ích là thay thế chuột máy tính Việc kết hợp Labview và Leap Motion để điều khiển thiết bị đang còn khá
mới mẻ ở việt nam nên tôi chọn đề tài “Nghiên cứu, thiết kế robot điều khiển
Trang 7- Và cuối cùng là tổng hợp những hiểu biết trên để thiết kế một mô hình điều khiển thiết bị bằng cử chỉ kết hợp giữa Labview và Leap Motion
Đề tài được thực hiện bằng các phương pháp: tìm hiểu qua internet, các diễn đàn và sự hướng dẫn của giáo viên
Cấu trúc của đồ án, ngoài phần mở đầu, kết luận, danh mục bảng biểu, tài liệu tham khảo, nội dung của đồ án được trình bày trong 3 chương:
Chương 1: Cơ sở lý thuyết
Chương này trình bày các kiến thức cơ bản về bo mạch Arduino Uno R3, module điều khiển động cơ sử dụng IC L293D, kiến thức cơ bản về phần mềm Labview và tìm hiểu về bộ điều khiển Leap Motion
Chương 2: Phân tích, thiết kế hệ thống
Chương này đi vào phân tích yêu cầu của đồ án, lý do lựa chọn các thiết bị
sử dụng và tiến hành xây dựng các khối lệnh để điều khiển robot
Chương 3: Mô phỏng và thi công
Trên cơ sở lý thuyết ở chương 1 cũng như các phân tích yêu cầu và thuật toán ở chương 2, chương này đi vào mô phỏng chương trình trên phần mềm và tiến hành thi công mô hình điều khiển động cơ bằng sự kết hợp giữa Labview và Leap Motion đảm bảo đúng mục đích yêu cầu đặt ra
Nghệ an, ngày tháng năm 2016
Sinh viên thực hiện
Nguyễn Thế Lâm
Trang 8DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ
Bảng 2.1: Bảng trạng thái chân Arduino 45
Hình 1.1: Giao diện làm việc của Labview 12
Hình 1.2: Các khối cơ bản của arduino 13
Hình 1.3: Khối init 14
Hình 1.4: Khối close 14
Hình 1.5: Các khối cơ bản của khối low level 15
Hình 1.6: Các khối cơ bản của khối sensor 16
Hình 1.7: Các khối cơ bản của leap 16
Hình 1.8: Khối open của leap 17
Hình 1.9: Khối read all data 17
Hình 1.10: Khối read hand position velocity 17
Hình 1.11: Các khối lệnh boolean 18
Hình 1.12: Các khối lệnh so sánh 19
Hình 1.13: Khối lệnh select 19
Hình 1.14: Cấu trúc vòng lặp while 20
Hình 1.15: Cấu trúc vòng lặp For 20
Hình 1.16: Cấu trúc Case 21
Hình 1.17: Board mạch Arduino Uno R3 22
Hình 1.18: Module shield L293D 24
Hình 1.19: Cấu tạo bên trong của Leap Motion 25
Hình 1.20: Thiết kế trên autodesk sử dụng leap motion 26
Hình 2.1: Sơ đồ chân Atmega328 29
Hình 2.2: Sơ đồ chân IC L293D 30
Hình 2.3: Sơ đồ mạch cầu H 31
Hình 2.4: Nguyên lý hoạt động của mạch cầu H 31
Hình 2.5: Cấu tạo và ký hiệu của MOSFET kênh N và kênh P 32
Hình 2.6: Cấu tạo động cơ DC 33
Hình 2.7: Sơ đồ nguyên lý của động cơ một chiều kích thích độc lập 36
Hình 2.8: Sơ đồ nguyên lý của động cơ một chiều kích thích song song 36
Hình 2.9: Sơ đồ nguyên lý của động cơ một chiều kích thích nối tiếp 37
Hình 2.10: Sơ đồ nguyên lý của động cơ một chiều kích thích hỗn hợp 37
Hình 2.11: Sơ đồ thay thế mạch điện phần ứng động cơ một chiều 38
Hình 2.12: Xác định phạm vi điều chỉnh 39
Hình 2.13: Phạm vi điều chỉnh tốc độ và mômen 40
Hình 2.14: Đặc tính điều chỉnh khi điều chỉnh từ thông động cơ 42
Hình 2.15: Đặc tính điều chỉnh điện trở phụ trên mạch điện phần ứng 43
Hình 2.16: Điều chỉnh độ rộng xung PWM 43
Hình 2.17: Dạng sóng dòng và áp trên động cơ 44
Trang 9Hình 2.18: Block code điều khiển 2 động cơ DC 46
Hình 2.19: Trường hợp TRUE của cấu trúc case 47
Hình 3.1 Sơ đồ khối hệ thống điều khiển robot bằng cử chỉ 48
Hình 3.2: Bộ điều khiển leap motion 48
Hình 3.3: Sơ đồ đấu nối chân Arduino và module L293D 48
Hình 3.4: Giao diện nạp chương trình cho bo mạch Arduino 50
Hình 3.5: Nạp chương trình cho Arduino 50
Hình 3.6: Lưu đồ thuật toán chương trình điều khiển 51
Hình 3.7: Các khối kết nối Arduino trong Labview 52
Hình 3.8: Mô phỏng giao diện điều khiển động cơ 53
Hình 3.9: Chương trình điều khiển động cơ bằng leap motion 54
Hình 3.10: Trường hợp TRUE của trạng thái led tiến 54
Hình 3.11: Giao tiếp Leap Motion với Labview 56
Hình 3.12: Khối điều khiển tốc độ động cơ 57
Hình 3.13: Giao diện hiển thị tốc độ động cơ 57
Hình 3.14: Giao diện chương trình điều khiển chính 58
Trang 10DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT
Ký hiệu Tiếng anh Tiếng việt
DC Dirrect Current Dòng một chiều
NI National Instrument Hãng NI
Vis Virtual Instrument Thiết bị ảo
PWM Pulse Width Modulation Điều chỉnh độ rộng xung
PID Proportional Integral Derivative Tỷ lệ vi tích phân
IC Integrated Circuit Mạch tích hợp
RISC Reduced Instruction Set Computer Máy tính tập lệnh đơn giản UART Universal Asynchronous Serial
Receiver and Transmiter
Bộ truyền nhận nối tiếp không đồng bộ
ADC Analog - to digital Converter Bộ chuyển đổi tương tự số DAC Digital - to Analog Converter Bộ chuyển đổi số tương tự
Trang 11CHƯƠNG 1 CƠ SỞ LÝ THUYẾT
1.1 Giới thiệu phần mềm Labview
1.1.1 Khái quát chung về Labview
Labview (Laboratory Virtual Instrument Engineering Workbench) là một nền tảng thiết kế hệ thống và là môi trường phát triển cho ngôn ngữ lập trình đồ họa Labview hỗ trợ tạo các ứng dụng với giao diện người dùng chuyên nghiệp một cách nhanh chóng và hiệu quả, Labview được sử dụng để phát triển các ứng dụng đo lường, kiểm thử, và điều khiển tinh vi bằng cách sử dụng các khối lệnh trực quan và dây nối tín hiệu Ngoài ra, Labview còn có thể được mở rộng cho nhiều nền tảng phần cứng và hệ điều hành khác nhau
Labview cũng làm một ngôn ngữ lập trình, giống như các ngôn ngữ lập trình hiện đại khác thì Labview cũng cung cấp các thư viện thu nhận dữ liệu, một loạt các thiết bị điều khiển, phân tích dữ liệu, biểu diễn và lưu trữ dữ liệu
Nó còn có các công cụ phát triển được thiết kế riêng cho việc nối ghép và điều khiển thiết bị
Labview khác với các ngôn ngữ lập trình truyền thống ở điểm cơ bản là: các ngôn ngữ lập trình khác thường dùng trên cơ chế dòng lệnh, trong khi đó Labview dùng ngôn ngữ lập trình đồ họa để tạo ra các chương trình ở dạng sơ
đồ khối
Vì Labview là chương trình mô phỏng giao diện và hoạt động của các thiết
bị thực, nên chương trình Labview được gọi là VI (Virtual Instrument) Một chương trình VI gồm có Front Panel và Block Diagram Front panel là giao diện người dùng – nơi mà sẽ hiển thị các hình ảnh trực quan để người dùng dễ thao tác còn Block Diagram là nơi mà chúng ta viết lệnh cho chương trình
Không gian làm việc của Front Panel và Block Diagram được cho ở hình
Trang 12Hình 1.1 Giao diện làm việc của Labview
Như hình trên ta thấy: hình a là giao diện làm việc của Front Panel, chứa các biểu tượng trực quan như trong đời thực nên việc người dùng tiếp cận để điều khiển là rất dễ dàng
Hình b chưa các khối lệnh được ghép nối một cách logic với nhau để thực hiện một thuật toán nào đó Với cách viết code như thế này, Labview đã cho phép nhiều đối tượng người dùng không chuyên về lập trình có thể tiếp cận và khai thác cũng như tự phát triển các ứng dụng thiết thực trong đời sống mà không cần phải tìm hiểu về các ngôn ngữ lập trình truyền thống như C, C++, Chức năng chính của Labview có thể tóm tắt như sau:
- Thu thập tín hiệu từ các thiết bị bên ngoài như cảm biến nhiệt độ, hình ảnh từ webcam, vận tốc của động cơ,
- Giao tiếp với các thiết bị ngoại vi thông qua nhiều chuẩn giao tiếp như RS232, USB, Ethernet,
- Mô phỏng và xử lý các tín hiệu thu nhận được để phục vụ các mục đích nghiên cứu hay mục đích của hệ thống mà người lập trình mong muốn
- Xây dựng các giao diện người dùng một cách nhanh chóng
Trang 13- Cho phép thực hiện các thuật toán điều khiển nhƣ PID một cách nhanh chóng thông qua các chức năng tích hợp sẵn trong Labview
- Cho phép kết hợp với các ngôn ngữ lập trình truyền thống nhƣ C++, Java
Labview đƣợc dùng nhiều trong các phòng thí nghiệm, lĩnh vực khoa học
kỹ thuật nhƣ tự động hóa, điều khiển, điện tử, cơ điện tử, hàng không, hóa sinh, điện tử y sinh,
1.1.2 Kỹ thuật lập trình Lapview
- Các khối lệnh cơ bản cho arduino
Để lập trình đƣợc cho arduino trên phần mềm Labview thì từ ứng dụng VI Package Manager (đƣợc cài đặt sẵn khi cài đặt Labview) chúng ta phải cài đặt gói Labview Interface for Arduino Đây là bộ công cụ hỗ trợ giao tiếp giữa labview và nền tảng vi điều khiển Arduino
Sau khi cài đặt xong, trên phần mềm labview bây giờ đã có thêm hàm arduino hỗ trợ cho chúng ta lập trình
Đây là cửa sổ tích hợp các khối từ gói Arduino:
Hình 1.2 Các khối cơ bản của arduino
Một khối đƣợc chia làm hai dãy chân dữ liệu, dãy chân đƣa dữ liệu vào hoặc là các thiết lập ban đầu của tín hiệu và dãy chân đƣa dữ liệu ra
Trang 14Hình 1.3 Khối init
Khối init có nhiều chân song để thiết lập cho việc kết nối ta chỉ cần quan
tâm:
Chân VISA resource: sẽ lựa chọn cổng COM khi kết nối arduino với máy
tính, tùy vào các máy tính khác nhau mà cổng COM này cũng khác nhau Chân này sẽ thiết lập cổng COM để giao tiếp giữa Labview và Arduino
Chân Baud Rate: chân này cho phép lựa chọn tốc độ baud cho Arduino
Tùy vào các ứng dụng khác nhau mà ta lựa chọn tốc độ này cho phù hợp,
Arduino hỗ trợ nhiều tốc độ baud khác nhau nhƣng giá trị mặc định khi khởi tạo
khối là 115200
Chân Board Type cho phép chúng ta lựa chọn kiểu module Arduino, ở đây
hỗ trợ 3 kiểu là: uno, atmega 328 và mega 2560
Chân Connection Type cho phép chọn kiểu kết nối, có 3 chuẩn là:
usb/serial, xbee và bluetooth
Chân Arduino Resource để kết nối với các khối khác
Để thiết lập bất kỳ chân nào của một khối ta di chuyển con trỏ chuột tới
chân cần thiết lập rồi click chuột phải sau đó chọn create, ở đây sẽ có ba kiểu
thiết lập là: constant (hằng số), control (điều khiển) và indicator (hiển thị), tùy vào mục đích mà ta lựa chọn cho phù hợp
Tiếp theo là khối close:
Hình 1.4 Khối close
Trang 15Là khối để đóng một chương trình giao tiếp với arduino Chỉ gồm các chân
cơ bản là arduino resource, error in và error out
Khối low level chứa nhiều khối quan trọng của Arduino bao gồm các khối
để đọc, ghi tín hiệu analog hoặc digital từ bo Arduino Ngoài ra còn có các khối phục vụ việc băm xung, bus,
Hình 1.5: Các khối cơ bản của khối low level
Khối sensors bao gồm các khối VI sensor thường dùng như: cảm biến nhiệt
độ, cảm biến ánh sáng, LCD, led 7 thanh,
Trang 16Hình 1.6 Các khối cơ bản của khối sensor
- Các khối lệnh cơ bản cho leap motion
Để lập trình cho Leap Motion trên phần mềm Labview, chúng ta phải cài đặt gói MakerHub Interface for Leap Motion từ ứng dụng VI Package Manager Sau khi cài đặt xong, trong cửa sổ làm việc Block Diagram, click chuột phải chúng ta sẽ có các khối cơ bản của leap như sau:
Hình 1.7 Các khối cơ bản của leap
Tương tự như Arduino thì Leap cũng có các khối open và close để phục vụ
cho việc khởi tạo và kết thúc một kết nối của Leap với Labview
Trang 17Khối open của Leap chỉ gồm vài chân cơ bản như sau:
Hình 1.8 Khối open của leap
Với chân Enable Gestures khi được thiết lập giá trị true (T) thì Leap sẽ bật
các cử chỉ mà nó hỗ trợ để người dùng khai thác
Chân leap handle sẽ được nối với chân leap handle của khối khác, với chân
error out cũng vậy
Khối read all data sẽ yêu cầu và phân tích các khung dữ liệu từ bộ điều
khiển Leap, tất cả các dữ liệu kết hợp với khung được tổ chức trong một cụm gọi là Labview cluster để phục vụ cho việc truy cập
Hình 1.9 Khối read all data
Khối read hand position velocity có chức năng đọc vị trí và tốc độ của bàn
tay, hình dạng khối này như sau:
Hình 1.10 Khối read hand position velocity
Ngoài ra còn có một số khối các để đọc các cử chỉ khác mà bộ điều khiển Leap hỗ trợ như: ngón tay vẽ vòng tròn, chỉ ngón tay,
- Một số khối lệnh, vòng lặp thường dùng
Các khối lệnh boolean
Trang 18Hình 1.11 Các khối lệnh boolean
Các khối lệnh And, Or, Not, thực hiện các phép toán logic tương ứng là phép And, phép Or hay phép Not Các khối lệnh And, Or, Not And, Not Or có 2 đầu vào và một đầu ra
Khối lệnh Bool to (0,1) thực hiện chuyển đổi giá trị kiểu boolean (true và
false) sang giá trị 0 và 1
Ngoài ra còn có các khối lệnh chuyển đối số sang mảng (Num to Array) và ngược lại, các khối lệnh tạo hằng số true và false
Các khối lệnh so sánh
Trang 20Hình 1.14 Cấu trúc vòng lặp while
Giống như vòng lặp while trong ngôn ngữ lập trình thông thường, vòng lặp
while trong Labview là một cấu trúc lặp thực hiện các khối lệnh bên trong nó ít
nhất một lần
Trong hình trên:
1 Gọi là subdiagram: sẽ chứa các khối lệnh mà vòng lặp while thực thi
2 Gọi là iteration terminal (i): đếm số vòng lặp lại hiện tại, đếm số vòng
luôn bắt đầu bằng 0 cho vòng lặp đầu tiên
3 Gọi là conditional terminal: sẽ ước lượng một giá trị boolean để xác định có hay không tiếp tục thực thi vòng lặp while
Giá trị boolean này là: true hoặc false
Trang 21Cấu trúc vòng lặp for khác while ở chỗ vòng lặp for hoạt động với số lần lặp xác định, trong khi đó vòng lặp while chỉ dừng quá trình lặp khi giá trị điều
kiện được kiểm tra là đúng
Cấu trúc case
Cấu trúc case trong Labview được cho ở hình sau:
Hình 1.16 Cấu trúc Case
Các thành phần của cấu trúc case:
1 Gọi là selector label: hiển thị giá trị tương ứng với mỗi trường hợp thực
thi
2 Gọi là subdiagram(case): chứa khối lệnh để thực thi khi giá trị của case
selector khớp với giá trị xuất hiện trong selector label
3 Gọi là case selector: sẽ lựa chọn trường hợp nào để thực thi dựa trên giá trị dữ liệu đầu vào Dữ liệu đầu vào có thể ở dạng boolean, string, integer
1.2 Tổng quan về Arduino Uno R3 và module L293D
1.2.1 Bo mạch Arduino Uno R3
Bo mạch Arduino có nhiều phiên bản với hiệu năng và mục đích sử dụng khác nhau như: Arduino Mega, Arduino LyliPad, Trong số đó, Arduino Uno
Trang 22Hình 1.17 Board mạch Arduino Uno R3
Arduino Uno R3 được xây dựng với vi điều khiển là Atmega328 sử dụng thạch anh có chu kỳ dao động là 16 MHz Với vi điều khiển này, ta có tổng cộng
14 chân ra/vào được đánh số từ 0 đến 13, trong đó có 6 chân PWM, được đánh thêm dấu ~ trước số chân Ta có thêm 6 chân nhận tín hiệu analog được ký hiệu
từ A0 đến A5, 6 chân này cũng có thể được sử dụng như các chân ra/vào bình thường Chân 13 được nối trức tiếp với 1 con led tích hợp trên board
Trên board còn có 1 nút reset, 1 ngõ kết nối với máy tính qua cổng usb và một ngõ cấp nguồn sử dụng jack 2.1 mm
Board cung cấp cho chúng ta các chân khác nhau như chân nguồn 3.3V, 5V, GND,
Điện áp khuyên dùng cấp cho mạch là từ 7 đến 12V, cường độ dòng điện trên mỗi chân vào/ra là 20mA
Khi làm việc với bo mạch Arduino, cần chú ý một số thuật ngữ sau:
Flash Memory: bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi mất nguồn điện Về vai trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu trên bo mạch Chương trình được viết cho Arduino được lưu ở đây Kích thước của vùng nhớ này thông thường dựa vào vi điều khiển được sử dụng, ví dụ như Atmega8 có 8KB flash memory, loại bộ nhớ này có thể chịu được khoảng 10000 lần ghi/xóa
Trang 23 RAM: tương tự như RAM của máy tính, sẽ bị mất dữ liệu khi ngắt nguồn điện nhưng bù lại tốc độ đọc/ghi rất nhanh Kích thước thường nhỏ hơn flash memory nhiều
EEPROM: một dạng bộ nhớ tương tự như flash memory nhưng có chu kỳ ghi/xóa cao hơn – khoảng 100000 lần và có kích thước rất nhỏ Để đọc/ghi dữ liệu ta có thể dùng thư viện EEPROM của Arduino
Một số lưu ý khi làm việc với bo mạch Arduino Uno R3: mặc dù Arduino
có cầu chì tự phục hồi bảo vệ mạch khi xảy ra quá tải, tuy nhiên cầu chì này chỉ được mắc cho cổng USB nhằm tự động ngắt điện khi nguồn vào USB lớn hơn 5V Vì vậy, khi thao tác với Arduino, ta cần tính toán cẩn thận để tránh gây hư tổn đến bo mạch Các thao tác sau đây có thể gây hỏng một phần hoặc toàn bộ
bo mạch Arduino:
Nối trực tiếp dòng 5V vào chân GND
Nối một chân OUT bất kỳ vào GND
Cấp nguồn lớn hơn 5V cho các chân I/O
1.2.2 Module điều khiển động cơ L293D
Arduino Motor Shield là một phần board mở rộng cho các board Arduino, dùng để điều khiển các loại động cơ DC, động cơ bước và động cơ servo
Motor Driver Shield L293D sử dụng 2 IC cầu H L293D và 1 IC logic 74HC595 điều khiển, do đó, shield này có thể điều khiển nhiều loại motor khác nhau với mức áp lên đến 36V và dòng tối đa là 600mA cho mỗi kênh điều khiển
Số lượng motor mà shield có thể điều khiển như sau:
2 động cơ servo
4 động cơ DC (M1, M2, M3, M4) độc lập thông qua 4 cầu H của L293D
2 động cơ bước
Trang 24Hình 1.18 Module shield L293D
Các chân trên SHIELD được kết nối với Arduino như sau:
Servo Motor: 2 dây điều khiển 2 Servo kết nối với chân số 9 và 10 Nguồn nuôi lấy trực tiếp từ bo mạch Arduino
Động cơ 1 chiều DC:
Motor 1 nối với chân 11 Motor 2 nối với chân 3 Motor 3 nối với chân 5 Motor 4 nối với chân 6
Động cơ bước: chân 4, 7, 8 và 12 dùng điểu khiển motor thông qua IC74HC595
Trên SHIELD có 1 jumper PWR được sử dụng nếu kết nối nguồn ngoài cho board Arduino thông qua jack DC thì nguồn nuôi motor được lấy luôn từ jack này, không cần nối nguồn với EXT_PWR Nếu ngắt jumper, bạn cần nối một nguồn riêng vào terminal EXT_PWR để nuôi motor
1.3 Tổng quan về bộ điều khiển bằng cử chỉ
Leap motion là một thiết bị ngoại vi, dùng để hỗ trợ người dùng tương tác với máy tính tương tự như chuột và bàn phím thông qua các cử chỉ tay như: chỉ, cầm, nắm, chạm,
Hình ảnh bên trong của bộ điều khiển Leap Motion như sau:
Trang 25Hình 1.19 Cấu tạo bên trong của Leap Motion
Leap motion sử dụng 2 camera và 3 cảm biến hồng ngoại, với các camera này thiết bị có thể quan sát trong một vùng hình cầu với bán kính khoảng 1m Các đèn led tạo ra các mẫu hình ảnh ít ánh sáng hồng ngoại, mỗi camera sẽ tạo khoảng 300 khung hình mỗi giây cho các dữ liệu phản chiếu, sau đó các dữ liệu được gửi qua cổng usb đến máy chủ
Hiện tại, tính năng của leap motion gồm có: điều hướng bằng việc nhận dạng cử chỉ chạm, chỉ, tương tác với các dữ liệu 3D ảo bằng các cử chỉ của tay như cầm, nắm, hỗ trợ các thao tác vẽ trên màn hình
Leap Motion tương thích với hầu hết các hệ điều hành phổ biến hiện nay như: Microsoft Windows, Mac OSX và Ubuntu Thiết bị có 1 cổng kết nối USB
để kết nối với máy tính Leap Motion nhận diện cùng lúc được 2 bàn tay và cả
10 ngón tay
Mặc dù nhận dạng được cử chỉ tay với độ chính xác cao, tuy nhiên leap motion có độ nhạy chưa cao, sử dụng trong thời gian dài sản phẩm nóng lên rất nhiều Bên cạnh đó với các máy chủ có cấu hình thấp, việc xử lý các dữ liệu phản ánh do leap motion truyền tải cho máy chủ gặp khó khăn, dễ xảy ra hiện tượng treo máy
Tuy nhiên, tương lai của thiết bị này rất rộng mở, nói chung, bất cứ phần mềm nào có thể dùng chuột và bàn phím thì đều có thể dùng với Leap Motion Đến nay, các phần mềm tạo hình 3D, kiến trúc đang được ưu tiên để tích hợp
Trang 26kết sử dụng leap motion như hình sau minh họa việc thiết kế trên autodesk sử dụng Leap Motion:
Hình 1.20 Thiết kế trên autodesk sử dụng leap motion
Đặc biệt trong lĩnh vực điện tử, tự động hóa Leap Motion ứng dụng vào điều khiển các thiết bị như robot, máy in 3D,
1.4 Kết luận
Trong chương 1, tôi đã trình bày các nội dung như là cấu tạo và nguyên lý hoạt động về phần mềm labview, board mạch Arduino Uno R3, module điều khiển động cơ L293D và bộ điều khiển bằng cử chỉ leap motion Trong chương tiếp theo sẽ đi vào phân tích yêu cầu đề tài cũng như lựa chọn thiết bị và thuật
Trang 27CHƯƠNG 2 PHÂN TÍCH, THIẾT KẾ HỆ THỐNG
2.1 Phân tích, lựa chọn thiết bị
2.1.1 Leap Motion Controller
Trên thị trường hiện nay có một vài thiết bị cảm biến cử chỉ như Leap Motion Controller, Kinect của hãng Microsoft và mới nhất là hệ thống Ziro Khác với Kinect ở thời điểm hiện tại, Leap Motion cho phép người dùng tự phát triển các ứng dụng cho riêng mình Đây là yếu tố quyết định đến việc Leap Motion sẽ được sử dụng rộng rãi trong tương lai
Còn về Ziro cũng là một hệ thống cho phép bạn thiết kế robot và điều khiển
nó thông qua chuyển động bàn tay Hệ thống Ziro lần đầu tiên được giới thiệu tại triển lãm CES 2016 diễn ra vào đầu năm Mặc dù là một hệ thống hứa hẹn nhiều thành công nhưng với thời điểm hiện tay thì Ziro đang có giá thành tương đối đắt, với khoảng 229 USD chúng ta sẽ có trong tay một găng tay, 4 động cơ
và một số bộ phận lắp ráp robot
Nhưng với sự mới mẻ, giá rẻ và đặc biệt là khả năng nhận diện với độ chính xác cao nên Leap Motion là một thiết bị đáng để nghiên cứu và phát triển các ứng dụng để tận dụng hiệu quả quả năng mà nó mang lại
2.1.2 Board mạch Arduino Uno R3
Theo cách làm việc thông thường, để xây dựng một bo mạch vi xử lý, người kỹ sư sẽ gắn chip vi xử lý vào một bo mạch được thiết kế Bo mạch phải
có đầy đủ bộ nguồn cấp điện cho vi xử lý, thạch anh tạo dao động, các tụ điện để giữ ổn định cho tín hiệu Sau đó sẽ lập trình mã nguồn bằng ngôn ngữ C hoặc Assembly rồi biên dịch ra một file nhị phân, chuyển mã code này vào trong vi
xử lý để hoạt động
Trang 28lại mã nguồn, việc tháo lặp chip vi xử lý nhiều sẽ làm cho toàn bộ vi mạch kém
ổn định
Tuy hiện nay trên thị trường đã có các bộ kit phát triển tích hợp vi xử lý với
bo mạch, mạch nạp vi xử lý cũng được tích hợp trên bo mạch này Tuy nhiên, vẫn cần nhiều bước mới có thể thay đổi mã nguồn của một chip vi xử lý, lập trình trên phần mềm riêng, nạp code trên phần mềm riêng, nếu muốn gỡ rối (debug) chương trình thì lại càng phức tạp thêm
Nhưng với nền tảng Arduino, người kỹ sư chỉ cần sử dụng một phần mềm duy nhất là phần mềm Arduino và và một bo mạch phần cứng duy nhất Trong các loại bo mạch Arduino thì Arduino Uno R3 là bo mạch thông dụng nhất hiện nay bởi khả năng đáp ứng các ứng dụng trong thực tế, tính mở rộng cao và giá thành rẻ
Vi điều khiển AVR atmega328
Atmega328 là một chip vi điều khiển được sẩn xuất bởi hãng Atmel thuộc
họ MegaAVR có sức mạnh hơn hẳn Atmega8 Atmega328 là một bộ vi điều khiển 8 bít dựa trên kiến trúc RISC
Với 23 chân có thể sử dụng cho các kết nối vào ra, 32 thanh ghi, 3 bộ timer/counter có thể lập trình, có các ngắt nội và ngoại (2 lệnh trên một vector ngắt), giao thức truyền thông nối tiếp USART, SPI, I2C Ngoài ra có thể sử dụng bộ biến đổi số tương tự 10 bít (ADC/DAC) mở rộng tới 8 kênh, khả năng lập trình được watchdog timer, hoạt động với 5 chế độ nguồn, có thể sử dụng tới
6 kênh điều chế độ rộng xung (PWM), hỗ trợ bootloader
Atmega328 có khả năng hoạt động trong một dải điện áp rộng (1.8V – 5.5V)
Atmega328 là linh hồn của bo mạch Arduino, sức mạnh phần cứng mà Arduino Uno có được là từ đây
Sơ đồ chân Atmega328 được cho ở hình sau:
Trang 29Hình 2.1 Sơ đồ chân Atmega328
Các thông số chính của vi điều khiển Atmega328:
- Kiến trúc: AVR 8bit
- Số timer: 3 timer gồm 2 timer 8 bit và 1 timer 16 bit
- Số kênh xung PWM: 6 kênh (1 timer 2 kênh)
2.1.3 Motor driver shield L293D
Motor driver shield L293D tương thích tốt với bo mạch Arduino, sử dụng 2
IC cầu H L293D và 1 IC logic 74HC595 điều khiển
Trang 30Hình 2.2 Sơ đồ chân IC L293D
L293D là IC cầu H điều khiển động cơ Gồm 4 kênh điều khiển có thể điều khiển 2 động cơ DC Để điều khiển động cơ DC, ta sử dụng 2 kênh của L293D cho 1 động cơ
Mỗi kênh của L293D chịu được tải 600mA và dòng đỉnh là 1A Để sử dụng các động cơ có công suất cao hơn ta chỉ cần gắn song song 2 hoặc nhiều IC L293 lại với nhau
Với mỗi motor, có 3 chân từ vi điều khiển kết nối với L293D, trong đó có 1 chân điều khiển tốc độ động cơ dùng xung PWM, 2 chân còn lại là logic 0 hoặc
1 dùng điều chỉnh chiều quay của motor
Tín hiệu điều khiển được xử lý độc lập với nhau với từng đầu ra Ví dụ, bạn
có thể điều khiển 2 động cơ DC chạy với tốc độ khác nhau, hướng khác nhau, 1 động cơ dừng còn 1 động cơ chạy,
2.2 Mạch cầu H
Sơ đồ nguyên lý: