Chương 1 bộ não rô bốt BOEbot

37 241 0
Chương 1 bộ não rô bốt BOEbot

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

chế tạo lõi pm rô bốt

Chương 1 Bộ não bốt BOEbot Nội dung chương này bao gồm các phần sau: Phần cứng và phần mềm dùng cho BOE Shield-Bot Bài thực hành 1: Tải xuống và cài đặt phần mềm Bài thực hành 2: Viết chương trình đơn giản "Xin chao!" Bài thực hành 3: Lưu và lấy lại giá trị Bài thực hành 4: Giải bài tập toán Bài thực hành 5: Đưa ra quyết định Bài thực hành 6: Đếm và lặp điều khiển Bài thực hành 7: Hằng số và bình luận Tóm tắt chương 1 Chú bốt BOE Shield-Bot của Parallax Inc. có bộ khung đuợc thiết kế và chế tạo gọn nhẹ bằng vật liệu nhôm và việc lắp ráp khá đơn giản nhằm làm cho bạn có thể tập trung vào các bài tập thực hành và các đồ án trong tài liệu này. Bo mạch thực hành (Board of Education (BOE) Shield) gắn trên một chiếc xe nhỏ có gắn động cơ servo và bánh. Bo mạch Arduino bạn mua là bộ não lập trình đuợc của bốt gắn ở phía dưới bo mạch thực hành như minh họa trong hình sau. Hình 1.1 bốt BOE Shield-Bot và bo mạch Arduino C á c b à i t h ự c h à n h t r o n g t à i l i ệ u n à y h ư ớ n g d ẫ n b ạ n t ừ v i ệ c r á p c á c b ộ p h ậ n c ơ v à m ạ c h đ i ệ n l à m t h à n h t á c p h ẩ m r ô b ố t B O E S h i e l d - B o t . B ạ n s ẽ v i ế t c á c c h ư ơ n g t r ì n h đ ơ n g i ả n c h o b o m ạ c h A r d u i n o v à r ô b ố t t h ự c h i ệ n b ố n n h i ệ m v ụ r ô b ố t c ơ b ả n s a u : 1 . K i ể m t r a c ả m b i ế n đ ể c ả m n h ậ n t h ế g i ớ i x u n g q u a n h 2 . Đ ư a r a q u y ế t đ ị n h n h ờ v à o c ả m g i á c 3 . Đ i ề u k h i ể n c h u y ể n đ ộ n g ( b ằ n g v ậ n h à n h đ ộ n g c ơ l ă n b á n h ) 4 . T r a o đ ổ i t h ô n g t i n v ớ i n g ư ờ i l à m r ô b ố t ( c h í n h l à b ạ n ! ) P h ầ n c ứ n g v à p h ầ n m ề m Đ ể l à m c á c b à i t h ự c h à n h t r o n g t à i l i ệ u n à y b ạ n c ầ n n h ữ n g p h ầ n c ứ n g s a u : 1 . M ộ t b o m ạ c h A r d u i n o v à d â y l ậ p t r ì n h U S B 2 . M ộ t b ộ k i t B O E S h i e l d - B o t ( P a r a l l a x # 1 3 0 - 3 5 0 0 0 , g ồ m c ả b o m ạ c h t h ự c h à n h , B o a r d o f E d u c a t i o n S h i e l d ) V à b ạ n c ầ n p h ầ n m ề m A r d u i n o , b ạ n c ó t h ể t ả i p h i ê n b ả n m ớ i n h ấ t c ủ a p h ầ n m ề m A i r d u i n o Nếu đây là lần đầu bạn sử dụng Arduino thì Bài thực hành #1 sau đây sẽ giúp bạn tải xuống và cài đặt phần mềm, kết nối phần cứng và kiểm tra kết nối chương trình. Phần còn lại của chương này bao gồm một loạt chương trình ví dụ (đuợc gọi là "hình vẽ" sketches) giới thiệu các khái niệm lập trình chung. Các chương trình sẽ làm một số trong hầu hết các việc cơ bản nhưng quan trọng nhất cho một bốt: 1 . G ử i l ờ i c h à o " X i n c h a o ! " 2 . L ư u v à l ấ y l ạ i g i á t r ị 3 . G i ả i b à i t ậ p t o á n 4 . Đ ư a r a q u y ế t đ ị n h 5 . Đ ế m v à l ặ p đ i ề u k h i ể n Các ví dụ trong chương này chưa cần giao tiếp với mạhc điện bên ngoài. Trong các chương tiếp theo bạn sẽ bắt đầu ráp các mạch và làm bốt chuyển động. Bạn cũng sẽ học các kỹ thuật lập trình như là giữ danh mục các biến và viết lại các mã dùng đuợc. oOo B à i t h ự c h à n h 1 : T ả i x u ố n g v à c à i đ ặ t p h ầ n m ề m N ế u đ â y l à l ầ n đ ầ u b ạ n s ử d ụ n g A r d u i n o , b ạ n s ẽ p h ả i t ả i x u ố n g v à c à i đ ặ t p h ầ n m ề m . T h ự c h i ệ n c á c b ư ớ c s a u : 1 . V à o t r a n g 2. Theo chỉ dẫn bạn hãy tải xuống và cài đặt phần mềm Arduino mới nhất. Việc cài đặt rất đơn giản, sau khi tải xuống phần mềm thì giải nén và đưa vào một thư mục nào đó mà không cần phải chạy chương trình cài đặt, ví dụ My Documents\Arduino 1.0.1 là đuợc. 3 . C ắ m d â y U S B v à o m á y t í n h , m á y t í n h s ẽ g i a o t i ế p v ớ i A r d u i n o . K h i k ế t n ố i d â y U S B v à o m á y t í n h , m á y t í n h s ẽ t ự đ ộ n g c à i đ ặ t d r i v e r , b ạ n l à m t h e o c h ỉ d ẫ n v à đ ư a đ u ờ n g d ẫ n t ớ i t h ư m ụ c \ d r i v e r t r o n g t h ư m ụ c A r d u i n o 1 . 0 . 1 l à đ u ợ c . 4 . C h ắ c c h ắ n b ạ n l à m t h e o c h ỉ d ẫ n q u a c á c p h ầ n c h o t ớ i k h i m à b ạ n c ó t h ể t ả i t h à n h c ô n g m ộ t c h ư ơ n g t r ì n h t ừ m á y t í n h t ớ i b o m ạ c h A r d u i n o . Bạn sẽ sử dụng phần mềm Môi trường Phát triển Arduino (Arduino IDE) để viết chương trình (được gọi là sketches) để làm cho bốt BOE Shield-Bot thực hiệnc bốn nhiệm vụ bốt cơ bản. Các chương trình Arduino đuợc viết bằng các lệnh ngôn ngữ lập trình C và C++ chương trình mẫu thân thiện cho người mới sử dụng. Mẹo vặt: Nếu bạn gõ tất cả các chương trình mẫu thì bạn sẽ phát triển kỹ năng lập trình nhanh hơn. Tuy nhiên đôi lúc có những chương trình đã đuợc kiểm tra rồi có thể giúp đuợc bạn để giải quyết khó khăn về mạch điện hoặc tìm lỗi chương trình. Vì vậy tất cả các cưhơng trình hoàn thành trong chương này đuợc đưa ra dưới dạng tệp nén zip mà bạn có thể tải xuống để tham khảo. + T ả i x u ố n g + Lưu tệp tin nén vào máy tính của bạn, rồi giải nén trước khi sử dụng. oOo B à i t h ự c h à n h 2 : V i ế t c h ư ơ n g t r ì n h đ ơ n g i ả n " X i n c h à o ! " Hình sau là màn hình chương trình phần mềm Môi trường phát triển Arduino (Arduino Development Environment). Ô phía trái là cửa sổ lập trình, là chương trình đơn giản gửi một thông điệp "Xin chao!" tới cửa sổ Kiểm tra nối tiếp (Serial Monitor Window) ở bên phải. 1. // Chương trình đầu tiên "Xin chao!" 2. // 3. 4. void setup() 5. 6. { 7. Serial.begin(9600); 8. Serial.print("Xin chao!"); 9. } 10. 11. void loop() 12. 13. { 14. //Nhập mã lặp tự động ở đây. 15. } + C h ắ c c h ắ n l à b ạ n g õ c h ữ h o a " S e r i a l " c ả h a i l ầ n , n ế u k h ô n g c h ư ơ n g t r ì n h s ẽ k h ô n g c h ạ y . + L ư u ý r ằ n g t r o n g h ì n h t r ê n c h ư ơ n g t r ì n h s ử d ụ n g m ở n g o ặ c v à đ ó n g n g o ặ c t r ò n ( ) v à n g ặ c m ó c { } . C h ắ c c h ắ n b ạ n s ử d ụ n g n g o ặ c đ ú n g c h ỗ đ ú n g n ơ i . + S a u k h i g õ x o n g n h ấ n n ú t V e r i f y ( k i ể m c h ứ n g ) đ ể c h ắ c c h ắ n m ã c ũ a b ạ n k h ô n g c ó l ỗ i . + N h ì n v à o d ò n g c h ữ " B i n a r y s k e t c h s i z e " ở t r o n g ô t h ô n g đ i ệ p . - N ế u c ó d ò n g n à y m ã c ủ a b ạ n đ ã đ ư ợ c b i ê n d ị c h v à s ẵ n s à n g n ạ p s a n g A r d u i n o - N ế u c ó m ộ t d a n h m ụ c l ỗ i t h ì c h ư ơ n g t r ì n h b á o c h o b ạ n b i ế t l à k h ô n g t h ể b i ê n d ị c h đ ư ợ c m ã c ủ a b ạ n v ì t h ế b ạ n h ã y t ì m v à s ử a l ỗ i ! + N h ấ n v à o n ú t U p l o a d ( n ạ p ) . M ộ t d ò n g c h ữ t h ô n g b á o t r ạ n g t h á i n g a y d ư ớ i m ã c ủ a b ạ n s ẽ h i ể n t h ị " C o m p l i n g s k e t c h ( Đ a n g b i ê n d ị c h c h ư ơ n g t r ì n h ) . . . , " , " U p l o a d i n g ( Đ a n g n ạ p ) . . . . . " v à r ồ i c u ố i c ù n g l à " Đ ã n ạ p x o n g ( D o n e u p l o a d i n g . . . . " + S a u k h i c h ư ơ n g t r ì n h đ ư ợ c n a p x o n g , n h ấ n v à o n ú t K i ể m t r a n ố i t i ế p ( S e r i a l M o n i t o r ) . + N ế u t h ô n g đ i ệ p " X i n c h a o ! " k h ô n g x u ấ t h i ệ n n g a y s a u k h i c ử a s ổ K i ể m t r a n ố i t i ế p h i ệ n r a t h ì b ạ n h ã y k i ể m t r a t h i ế t t r í " 9 6 0 0 " ở g ó c p h ả i p h í a d ư ớ i c ủ a c ử a s ổ K i ể m t r a n ố i t i ế p . + L ư u t ệ p t i n : v à o F i l e → S a v e l ư u c h ư ơ n g t r ì n h c ủ a b a n . Đ ặ t t ê n l à N o 1 _ X i n c h a o . M ã c h ư ơ n g t r ì n h " X i n c h a o ! " c h ạ y n h ư t h ế n à o ? Một hàm (function) là một tập hợp các lệnh (dòng lệnh của mã chương trình) ra lệnh cho Arduino làm việc gì đó. Ngôn ngữ Arduino có hai hàm số lập sẵn: Trong ví dụ này, cả hai lệnh là lệnh gọi hàm (function calls) gọi tới các hàm trong thư viện mã viết trước cho ơổng nối tiếp lập sẵn của Arduino: Serial.begin(9600): chuyển giá trị 9600 tới tham số speed. Lệnh này nói với Arduino là hãy sẵn sàng trao đổi thông điệp với Kiểm tra nối tiếp ở tốc độ truyền dữ liệu 9600 bits trên giây. Nghĩa là truyền 9600 số nhị phân 1 hoặc 0 trong một giây, và thường được gọi là tốc độ baud (baud rate). Serial.print(val): chuyển thông điệp "Xin chao!" tới tham số val. Lệnh này nói với Arduino chuyển một chuỗi số 1 và 0 nhị phân tới Kiểm tra nối tiếp. Kiểm tra nối tiếp giải mã và biểu diễn thành một dòng bit nối tiếp thành thông điệp "Xin chao!". Hình 1.2. Giải thích mã chương trình với void Sau khi hàm setup thực hiện xong Arduino tự động chuyển tới hàm loopvà bắt đầu thực hiện các công việc mà các dòng lệnh trong ngoặc móc nói với Arduino phải làm gì. Bất kỳ một dòng lện nào trong phải của // trên một dòng nào đó chỉ để cho người lập trình đọ, không phải dòng lệnh để cho chương trình biên dịch phần mềm của Arduino thực hiện. (Một chươnng trình biên dịch Hình 1.3. Lời chú (lời bình, comments) được bắt đầu bằng // void là gì? Tại sao các hàm này lại kết thúc bằng ()? Dòng đầu tiên của một hàm là định nghĩa hàm, và bao gồm ba phần: return type (kiểu biến trở lại), name (tên) và parameter list (danh sách tham số). Ví dụ trong hàm n g h ĩ a l à c á c h à m n à y k h ô n g c ầ n n h ậ n b ấ t k ỳ m ộ t g i á t r ị n à o k h i đ ư ợ c g ọ i đ ể t h ự c h i ệ n n h i ệ m v ụ c ủ a m ì n h . T h a y đ ổ i c h ư ơ n g t r ì n h đ ể l ặ p l ạ i Chương trình vi điều khiển nhìn chung chạy theo vòng lặp, nghĩa là một hoặc nhiều lệnh đuợc lặp đi lặp lại. Nên nhớ rằng hàm lặp (loop function) lặp lại tự động bất kỳ một mã nào trong khối của nó (các lệnh nằm giữa ngoặc móc {}). Chúng ta hãy thử chuyển lệnh Serial.print(“Xin chao!”; vào trong hàm lặp (loop function). Để làm giảm tốc độ lặp lại thông điệp, chúng ta hãy lập thêm lệnh tạm dừng (pause) bằng hàm delay(ms) cho sẵn. • L ư u c h ư ơ n g t r ì n h N o 1 _ x i n c h a o t h à n h N o 2 _ L a p X i n c h a o . • D i c h u y ể n l ệ n h S e r i a l . p r i n t ( “ X i n c h a o ! ” ; t ừ s e t u p t ớ i h à m l ặ p ( l o o p ) • T h ê m d ò n g l ệ n h d e l a y ( 1 0 0 0 ) ; v à o s a o l ệ n h t r ê n • S o s á n h t h a y đ ổ i c ủ a b ạ n v ớ i h ì n h s a u v à k i ể m c h ứ n g x e m c á c l ệ n h đ ã đ ú n g h a y c h ư a • N ạ p c h ư ơ n g s a n g A r d u i n o v à m ở l ạ i K i ể m t r a n ố i t i ế p . Dòng lệnh thêm vào delay(1000) chuyển giá trị 1000 tới tham số ms của hàm delay. Lệnh này yêu cầu trễ 1000 miliseconds. 1 ms là 1/1000 của giây. Vì thế delay(1000) làm chương trình chờ 1000/1000 = 1 giây trước khi chuyển sang dòng lệnh tiếp theo của mã chương trình. Hình 1.4: Dòng "Xin chao!" được lặp lại T í n h i ệ u " X i n c h a o ! " c h ạ y t r ê n d ò n g m ớ i Làm sao chúng ta có thể in mỗi dòng “Xin chao!” ở một dòng mới? Việc này làm cho các thông điệp chạy xuống hàng mới ở trong Kiểm tra nối tiếp thay vì chạy sang ngang. Tất cả những gì bạn phải làm là thay lệnh print thành println, viết tắt của “print line’. Hình 1.5: Dòng "Xin chao!" được lặp lại theo dòng mới T h ự c h à n h • C h a y đ ổ i S e r i a l . p r i n t ( ‘ X i n c h a o ! ” ) t h à n h S e r i a l . p r i n t l n ( ‘ X i n c h a o ! ” ) • N ạ p c h ư ơ n g t r ì n h đ ã t h a y đ ổ i v à q u a n s á t c h ư ơ n g t r ì n h i n m ỗ i t h ô n g đ i ệ p “ X i n c h a o ! ” ở m ộ t d ò n g m ớ i . M ở t h ư v i ệ n t h a m k h ả o A r d u i n o Nếu bạn vẫn còn câu hỏi? Bạn hãy thử thư viện tham khảo Arduino (Arduino Language Reference). Thư viện tham khảo là một bộ trangs có liên kết mà bạn có thể theo dõi để học thêm về các hàm setup, loop, print, println, delay và nhiều hàm khác mà bạn có thể dùng trong các chương trình. T h ự c h à n h Nhấn vào Help, và chọn Reference Hình 1.6: Chọn Trợ giúp - Tham khảo T r a n g t h a m k h ả o s ẽ đ ư ợ c m ở r a t r o n g m ộ t c ử a s ổ t r ì n h d u y ệ t I n t e r n e t . T h ử t ì m b ấ t k ỳ m ộ t t h u ậ t n g ữ g ì m à b ạ n c ó c â u h ỏ i . B ạ n h ã y t h ử t ì m s e t u p , l o o p v à d e l a y t r o n g t r a n g t h a m k h ả o c h í n h . Nếu bạn đang tìm đường dẫn đến print or println, bạn sẽ phải tìm thấy và theo đường dẫn Serial. [...]... trị đuợc biểu diễn ch1 c code 1 // Tên chuơng trình: No3_2_BienToanCuc 2 // Lưu biến toàn cục 3 // Robotics with the BOE Shield - StoreRetrieveGlobal 4 5 int a; 6 char c; 7 float root2; 8 9 void setup() 10 { Serial.begin(9600); 11 12 13 a = 42; 14 c = 'm'; 15 root2 = sqrt(2.0); 16 } 17 18 void loop() 19 { 20 Serial.println(a); 21 Serial.println(c); 22 Serial.println(root2); 23 delay (10 00); 24 } Đ C ế... ể c code 1 // Bài thực hành 5 Quyết định 2 // Tên chương trình: No5 _1_ QuyetDinh 3 // Robotics with the BOE Shield - SimpleDecisions 4 5 void setup() 6 { 7 Serial.begin(9600); 8 9 int a = 89; 10 int b = 42; 11 12 if(a > b) 13 { i ã m à các k m i h t ệ v r n h quyết n à a địn ( o n Serial.print("a is greater than b"); 14 15 } 16 else 17 { Serial.print("a is not greater than b"); 18 } 19 20 } 21 22 void... Serial.begin(9600); 7 8 9 float r = 0.75; 10 float c = 2.0 * PI * r; 11 12 Serial.print("circumference = "); 13 Serial.println(c); 14 } 15 16 void loop() 17 { 18 19 Đ // Trống, không có mã lặp lại } ế n l ư ợ t b ạ n – D i ệ n t í c h c ủ a v ò n g • L ư u c h ư ơ n • Cộng thêm biến khác float để lưu kết quả của phép tính diện tích và mã dể biểu diễ oOo B à i bốt t của bạn h ự c BOEbot sẽ N ế u đ i • N h ậ p... Hình 1. 9 Sử dụng vòng lặp for biểu diễn giá trị từ 1 đến 10 trong Kiểm tra vòng lặp T h ự c h • N h ậ p , l ư u • Mở Kiểm tra vòng lặp và xác nhận chương trình đếm từ 1 đến 10 c code 1 // Bài thực hành 6 Vòng Lặp 2 // Tên chương trình: No6 _1_ VongLap à v 3 // Robotics with the BOE Shield - Count to Ten (Đếm đến mười) 4 5 void setup() 6 { Serial.begin(9600); 7 8 9 for(int i = 1; i . root2; 8. 9. void setup() 10 . { 11 . Serial.begin(9600); 12 . 13 . a = 42; 14 . c = 'm'; 15 . root2 = sqrt(2.0); 16 . } 17 . 18 . void loop() 19 . { 20. Serial.println(a); 21. Serial.println(c); 22 vào delay (10 00) chuyển giá trị 10 00 tới tham số ms của hàm delay. Lệnh này yêu cầu trễ 10 00 miliseconds. 1 ms là 1/ 1000 của giây. Vì thế delay (10 00) làm chương trình chờ 10 00 /10 00 = 1 giây trước. Serial.begin(9600); 8. 9. int a = 89; 10 . int b = 42; 11 . int c = a + b; 12 . 13 . Serial.print("a + b = "); 14 . Serial.println(c); 15 . } 16 . 17 . void loop() 18 . { 19 . // Trống, không có mã lặp

Ngày đăng: 08/05/2014, 11:24

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan