chế tạo lõi pm rô bốt
Trang 1Chương 1 Bộ não rô 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ú rô 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 rô 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 Rô bốt BOE Shield-Bot và bo mạch Arduino
Trang 33 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
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 rô bốt BOE Shield-Bot thực hiệnc bốn nhiệm vụ rô 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.
Trang 51. // Chương trình đầu tiên "Xin chao!"
Trang 6Mộ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
Trang 7Sau 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
Trang 8Hình 1.4: Dòng "Xin chao!" được lặp lạ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’
Trang 9Hình 1.5: Dòng "Xin chao!" được lặp lại theo dòng mới
Trang 10Hình 1.6: Chọn Trợ giúp - Tham khảo
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
Trang 13Cho đến bây giờ chúng ta đã khai biến trong khối hàm (nằm trong dấu ngoặc tròn của hàm số), có nghĩa là biến cục bộ (local variables) Chỉ có hàm khai báo biến cục bộ có thể nhìn thấy và thay đổi Cũng như một biến cục bộ có thể tồn tại trong khi hàm số khai báo sử dụng biến đó Sau đó biến đó sẽ quay trở lai bộ nhớ chưa đuợc xác định sao cho hàm khác (như loop) có thể dùng bộ nhớ đó cho biến cục bộ khác.
Nếu chương trình của bạn có cho hơn một hàm tiếp cận đến giá trị của biến số, bạn có thể sử dụng các biến toàn cục Để làm cho một biến toàn cục, chỉ cần khai báo biến đó ngoài một hàm nào đó, tốt nhất trước hàm setup Rồi tất cả các hàm trong chương trình sẽ có thể thay đổi hoặc lấy lại giá trị Chương trình ví dụ sau đây khai báo các biến toàn cục và gán các giá trị cho chúng trong một hàm
2. // Lưu biến toàn cục
Trang 143. // Robotics with the BOE Shield - StoreRetrieveGlobal
Trang 16Hình 1.8 Kết quả phép tính cộng trong Kiểm tra nối tiếp
• Kiểm tra kết quả trong Kiểm tra nối tiếp Có đúng vậy không?
c code
1. // Bài thực hành 4 Giải bài tập toán
3. // Robotics with the BOE Shield – SimpleMath
Trang 18• T h a y t h ế p h é p c ộ n g ( + ) , b ằ n g p h é p t r ừ ( - ) v à n ạ p l ạ i c h ư ơ n g t r ì n h v à o A r d u i n o ( B ạ n s ẽ m u ố n t h a y t h ế c ả p h é p + t r o n g c h ư ơ n g t r ì n h
Bạn hãy hình dung rô bốt BOEbot của bạn sẽ tham gia cuộc thi mà bạn phải di chuyển trên vòng tròn mà bán kính của vòng tròn chỉ đuợc thông báo vài phut trước cuộc thi Chu kỳ là 2 × π × r trong đó r là bán kính của vòng tròn và π ≈ 3.14159 Phép tính toán này có thể là đơn giản hơn nhiều làm với phép toán dấu thập phân
Dưới đây là phần trích đọan mã thực hiện phép tính Chú ý rằng phép tính sử dụng số PI gần đúng bằng 3.14159 PI là hằng số ngôn ngữ C làm sẵn (một giá trị có tên không làm thay đổi qua chương trình) Cũng chú ý rằng tất cả các giá trị có điểm thập phân Đoạn mã tạo ra các điểm này là các giá trị thập phân
1. // Bài thực hành 4 Giải bài tập toán Chu vi
3. // Robotics with the BOE Shield – Circumstance
4.
5. void setup()
6. {
Trang 202. // Tên chương trình: No5_1_QuyetDinh
3. // Robotics with the BOE Shield - SimpleDecisions
Trang 2114. Serial.print("a is greater than b");
Trang 25Nhiều nhiệm vụ rô bốt lặp lại một hành động lặp đi lặp lại Tiếp theo, chúng ta hãy xem hai lựa chọn lặp lại mã: vòng lặp for và vòng lặp while Vòng lặp for thường đuợc sử dụng để lặp lại một khối mã một số thời gian nhất định nào đó Vòng lặp while đuợc dùng để lặp lại một khối mã suốt theo điều kiện đúng.
Vòng lặp for đuợc sử dụng để thực hiện các mệnh lệnh trong một khối mã lặp lại một số lần Ví dụ, rô bố BOEbot sẽ seử dụng năm giá trị khác nhau để cho cảm biến đo khoảng cách, ví vậy nó cần lặp lại một khối mã 5 lần Để làm nhiệm vụ này chúng ta sử dụng vòng lặp for Hình sau là ví dụ sử dụng vòng lặp for để đếm từ 1 đến 10 và biểu diễn giá trị trong Kiểm tra nối tiế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
Trang 263. // Robotics with the BOE Shield - Count to Ten (Đếm đến mười)
Trang 27V ò n g l ặ p f o r c h ạ y n h ư t h ế n à o ?
Hình sau giải thích vòng lặp for từ chương trình mẫu ở trên, Vonglap Chương trình có ba phần tử trong ngoặc của vòng lặp for điều khiển để vòng lặp đếm
Hình 1.10 Vòng lặp for
• Điều kiện: những gì mà vòng lặp for kiểm tra giữa mỗi lần lặp để chắc chắn điều kiện vẫn còn thực Nếu là thực thì vòng lặp lặp lại Nếu không vòng lặp sẽ cho phóep mã chuyển đến dòng lệnh tiếp theo khối mã vòng lặp for Trong trường hợp này điều kiển là “nếu i nhỏ hơn hoặc bằng 10”
• Số gia: thay đối giá trị i ch o lần tiếp theo sau qua vòng lặp Biểu thức i++ là tương đuơng với i = i + 1 Biểu thức này viết ngắn gọn để cộng thêm một vào biến Chú ý rằng ++ đến sau i, nghĩa là “sử dụng i như là lần này thông qua hàm, và tăng lên một giá trị sau đó” Đây là sử dụng số gia sau của phép toán
Lần đầu tiên qua vòng lặp giá trị của i bắt đầu từ 1 Vì thế Serial.println(i) biểu diễn giá trị 1 trong Kiểm tra nối tiếp Lần tiếp theo qua vòng lặp, i++ đã làm giá trị của i tăng lên 1 Sau một thời gian trễ (bạn có thể quan sát những giá trị xuất hiện ở trong Kiểm tra nối tiếp), dòng lệnh for kiểm tra xem điều kiện i <= 10 vẫn là thực Vì i bây giờ lưu 2, là đúng vì 2 nhỏ hơn 10, vì thế nó cho phép khối mã bởi vì không đúng theo điểu kiện i <= 10
Trang 29Chương trình kế tiếp, No7_1_HangSo_LoiChu, khác với chương trình Vonglap một số điểm Trước hết chương trình này có lời chú khối ở trên cùng Một lời chú có khối bắt đầu bằng /* và kết thúc bằng */, và bạn có thể viết nhiều dòng chú giữa chúng như bạn muốn Mỗi dòng mã có lời chú dòng (bắt đầu bằng //) ở bên phải, giải thích mã làm gì.
Cuối cùng là hai biến const int (hằng số là số thực) đuợc khai báo ở đầu chương trình, cho các tên startVal, endVal, và baudRate, có các giá trị lần lượt là 1, 10 và 9600 Tiếp theo chương trình sử dụng các tên này ở những nơi mà chương trình cần tới các giá trị này
c code
Trang 301. /* Bài thực hành 7 Hằng số và Lời chú
4. */
5.
6. const int startVal = 1; // Giá trị bắt đầu
7. const int endVal = 10; // Giá trị kết thúc
8. const int baudRate = 9600; // Tốc độ truyền dữ liệu
16. Serial.println(i); // Biểu diễn i trong Kiểm tra Nối tiếp
17. delay(500); // Tạm dừng 0.5 giây giữa các giá trị
18. }
19. Serial.println("Hoan thanh!"); // Biểu diễn thông điệp "Hoàn thành!"
Trang 32Trong chương này chúng ta ta đã tải xuống và nạp phần mềm lập trình Arduino, đã làm một số bài tập thực hành lập trình với Arduino Những chương trình ví dụ này đã cho bạn biết cách làm cho một vi điều khiển thực hiện một số nhiệm vụ thông thường, giới thiệu các khái niệm lập trình và đưa ra một số mẹo lập trình để bạn phát triển kỹ năng lập trình.