Chương 1: Quá trình của kĩ thuật ArdruinoTrong chương này, chúng ta sẽ thảo luận về các quy trình kỹ thuật và làm thế nào bạn có thể sử dụng nó để hợp lí hóa các mẫu thử bằng cách tránh
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA ĐIỆN TỬ VIỄN THÔNG
THỰC HÀNH KĨ THUẬT
ARDUINO
Trang 2Sinh viên thực hiện:
D6-DTVT2
Nguyễn Văn Hà
Trang 3Chương 1: Quá trình của kĩ thuật Ardruino
Trong chương này, chúng ta sẽ thảo luận về các quy trình kỹ thuật và làm thế nào bạn có thể sử dụng nó để hợp lí hóa các mẫu thử bằng cách tránh các vấn đề xảy ra với phần cứng và phần mềm và giữ một tiến trình cố định Trong suốt cuốn sách này, bạn sẽ có những thiết kế mà sẽ được tổ chức thành một trình tự có thể gọi là các “quá trình kĩ thuật “ Dưới đây là tóm tắt của các trình tự này
Thu thập các yêu cầu
Tạo các tài liệu yêu cầu
để chủ đề; một vài trang web sẽ giúp bạn bắt đầu học arduino là www.Arduino.cc và
http://tronixstuff.wordpress.com/tutorials/
Trang 4Nhưng cuốn sách này là một cách đợn giản hơn để tham khảo; cuốn sách này sẽ dạy cho bạn về quá trình kĩ thuật arduino - một kỹ năng rất hữu ích cho việc tạo các thiết kế dễ đọc hơn, hiệu quả và đáng tin cậy hơn
Thu Thập Phần Cứng
Trước khi nghiên cứu các bước quy trình kỹ thuật, điều quan trọng là phải biết một số các bộ phận và vật liệu cần có Trong suốt cuốn sách này, bạn sẽ cần những linh kiện kế tiếp của phần cứng để hoàn thành các thiết kế khác nhau.Chúng ta sẽ làm việc trên (đối với một danh sách đầy
đủ của phần cứng được sử dụng trong cuốn sách này, xin vui lòng xem Phụ lục A):
Arduino Duemilanove hoặc UNO : Bạn có thể sử dụng vi điều khiển Duemilanove hoặc
UNO trong cuốn sách này (Hình 1-1) Chúng có nhiều cổng I / O cho các cảm biến và động cơ Chúng ta sẽ sử dụng các điểm I / O để điều khiển và theo dõi các thiết kế khác nhau trong cuốn sách này
Hình 1-1 : Arduino UNO (trái ) and Duemilanove (phải)
Arduino BT hoặc Bluetooth Mate sliver: Ta nên sử dụng modem Bluetooth Mate sliver cho
cuốn sách này bởi vì nó có thể làm cho Arduino Duemilanove hoặc UNO của bạn hành xử như một ArduinoBT với một nửa chi phí Ngoài ra, các ArduinoBT không có điểm đầu ra 3.3V, vì vậy bạn sẽ cần phải thêm mạch để các Arduino để có được 3.3V , cái mà bạn cần trong chương 6của cuốn sách này Hình 1-2 minh họa hai phần của phần cứng
Trang 5
Hình 1-2: ArduinoBT (left) and Bluetooth Mate Silver (right)
Solderless breadboard: Một phần rất quan trọng của phần cứng là breadboard solderless (xem Hình 1-3), được sử dụng để thực hiện mạch của bạn Đối với cuốn sách này, bạn cần phải có mộtbreadboard solderless hạng trung Nó sẽ được sử dụng trong cả hai giai đoạn thiết kế và xử lý sự
cố của dự án
Hình 1-3 : Một ví dụ về một solderless breadboard
Trang 6Dây: Chúng ta sẽ sử dụng một số lượng lớn các dây trong cuốn sách này; bạn có thể có được
một kit wire jumper ( kit đi dây ) ở hầu như bất kỳ cửa hàng điện tử
Lá chắn Arduino: Chúng tôi sẽ sử dụng một số lá chắn trong cuốn sách này, bao gồm cả lá chắn
động cơ, GPS, GSM, và LCD (xem Hình 1-4)
Hình 1-4 : Một cặp lá chắn Arduino , GPS Shield ở bên trái và lá chắn motor ở bên phải
Lá chắn động cơ : Lá chắn này được sử dụng để điều khiển động cơ lên tới 18V Nó bao gồm
một mặt gắn kết cầu H , cái mà cho phép một mô tơ điện áp cao hơn đc sử dụng tốt cũng như điều khiển hai mô tơ Để biết thêm thông tin về cầu H , chúng ta có thể đọc chương 3
Lá chắn GPS : Lá chắn này được sử dụng để có được thông tin vị trí từ vệ tinh GPS Nó sử
dụng các tiêu chuẩn của Hiệp hội Điện tử Hàng Hải Quốc gia (NMEA) , có thể được phân tích
để cho bạn biết bất kỳ các con số về những thứ như kinh độ và vĩ độ cho dù GPS có một số vấn
đề về sửa lỗi , loại sửa lỗi , một sự đánh dấu thời gian và tỉ số tín hiệu trên nhiễu Thông tin chi tiết về hệ thống GPS được trình bày ở chương 5
Lá chắn GSM : Lá chắn này sẽ cho phép bạn sử dụng sức mạnh của Hệ Thống Truyền Thông
Di Động Toàn Cầu (GSM) để gửi tin nhắn văn bản qua lại ở khoảng cách lớn ; lá chắn này cũng
sử dụng một giao thức chuẩn, gọi là giao thức GSM
Lá chắn LCD : Được sử dụng để thêm các hình ảnh về cuộc sống vào trong các robot Các lá
chắn LCD cũng có thể được sử dụng để tạo giao diện người dùng của riêng bạn cho robot của bạn hoặc bất kỳ thiết kế nào khác mà bạn muốn persue
Trang 7Cảm biến : Đây là rất quan trọng vì chúng tạo ra sự sống cho các thiết kế của bạn Một số ví dụ
là cảm biến PIR (hồng ngoại thụ động ), sonar và nhiệt độ (xem Hình 1- 5)
Hình 1-5 : Một cảm biến PIR (trái) và một cảm biến sonar (phải)
Cảm biến PIR: Đây là một bộ cảm biến vượt trội để phát hiện những thay đổi trong ánh sáng
hồng ngoại và có thể phát hiện những thay đổi về nhiệt độ Nó cũng là rất tốt với khả năng phát hiện chuyển động
Cảm biến Sonar: Sonar cảm biến phát hiện tốt các đối tượng trong môi trường xung quanh Các
cảm biến Sonar mà chúng ta sẽ sử dụng là một bộ cảm biến Parallax và cho ta biết khoảng cách bao xa tới các đối tượng
Cảm biến nhiệt độ: Những cảm biến này được sử dụng để đọc nhiệt độ Để sử dụng chúng,
trước tiên bạn cần mở rộng quy mô điện áp với nhiệt độ bạn muốn ghi lại; bạn có thể tìm thêm thông tin về bộ cảm biến này trong chương 6
Servos và motor : điều khiển nhiều khía cạnh của thiết kế (xem Hình 1-6)
Trang 9Kìm mũi nhọn: Những kìm là rất quan trọng; chúng được sử dụng để giữ dây và mạch tại chỗ,
quấn dây xung quanh mạch, (xem hình 1-9)
Kính phóng đại : Công cụ này được sử dụng để xem tốt hơn mạch.
Kềm (dikes): Chúng được sử dụng để cắt dây (xem hình 1-9).
Kìm cắt tuốt dây: Công cụ này được sử dụng để tách dây cách điện (xem hình 1-9)
Trang 10Đồng hồ vạn năng: Có thể là công cụ quan trọng nhất mà bạn có thể sở hữu, công cụ này cho
phép bạn đọc điện áp AC (dòng xoay chiều) và DC (dòng một chiều), amps (ampe), và ohms (xem Hình 1-9)
Máy tính khoa học: Điều này cho phép bạn làm các phép tính khác nhau (Luật Ohm, chia điện
áp, vv).
Hình 1-9 : Công cụ bổ sung từ trái sang phải: Đồng hồ vạn năng, kìm nhọn , kìm cắt dây (trên) ,
kìm cắt,tuốt dây (dưới )
Tìm hiểu về Quy Trình Kỹ Thuật
Các quy trình kỹ thuật là rất hữu ích trong việc tạo các thiết kế của bạn hiệu quả hơn, sắp xếp hợp lý, và dễ hiểu Quá trình này bao gồm thu thập yêu cầu, tạo ra các tài liệu yêu cầu, tập hợp các phần cứng chính xác, cấu hình phần cứng, viết phần mềm, gỡ lỗi phần mềm, khắc phục sự cốphần cứng, và phát tín hiệu ngừng trên nguyên mẫu hoàn thành
Thu thập yêu cầu
Một ngày, khi bạn là một kỹ sư, bạn có thể được yêu cầu để tới một công ty và đánh giá nhu cầucủa họ cho một thiết kế cụ thể Phần này của quá trình kỹ thuật là rất quan trọng; tất cả mọi thứ
sẽ phụ thuộc vào các yêu cầu bạn thu thập tại cuộc gặp đầu tiên này Ví dụ, giả sử bạn biết rằng
Trang 11khách hàng của bạn cần phải nhấp nháy đèn LED ở một tốc độ nhất định [chèn một trường hợp ví dụ ở đây để tuôn ra các ý tưởng] Và đối với công việc đó, bạn và khách hàng xác định
rằng các bộ vi xử lý Arduino là sự lựa chọn tốt nhất Để sử dụng Arduino nhấp nháy đèn LED
[chèn một ví dụ ở đây], một khách hàng cần một đèn LED nhấp nháy ở khoảng 100ms.
Khởi tạo những tài liệu yêu cầu
Dựa trên nhu cầu của khách hàng và giải pháp đề xuất của bạn, sau đây là một tài liệu yêu cầu rấtđơn giản:
Một chương trình nhấp nháy LED ở khoảng 100ms
Có thể đây là một ví dụ đơn giản , nhưng chúng ta sẽ sử dụng định dạng này cho phần còn lại củacuốn sách Một trong những lý do bạn tạo một tài liệu yêu cầu là để ngăn chặn tính năng biến dạng từ biến Điều này xảy ra khi một khách hàng tiếp tục thêm tính năng cho phần mềm và / hoặc phần cứng Điều nàydĩ nhiên là một vấn đề bởi vì bạn sẽ làm việc nhiều giờ mà không phải trả thêm tiền vào một thiết kế mà có thể không bao giờ kết thúc Bạn nên tạo một tài liệu yêu cầu, vì vậy bạn và khách hàng có thể biết những gì bạn đang làm và các tính năng bạn sẽ tạo cho thiết kế của bạn Sau khi bạn đã tạo ra các tài liệu yêu cầu, bạn có thể tạo một sơ đồ sẽ giúp bạn
gỡ lỗi các phần mềm sau này trong quá trình thiết kế (xem hình 1-10)
Trang 12Cấu Hình Phần Cứng
Một khi bạn có phần cứng chính xác, đó là thời điểm để cấu hình nó Tùy thuộc vào phần cứng cần thiết cho thiết kế , cấu hình có thể thay đổi Ví dụ, chúng ta hãy nhìn vào cấu hình phần cứngcho thiết kế LED nhấp nháy
Arduino
Pin 9V
LED
Cổng kết nối Pin 9V
Trang 13Để thiết lập phần cứng, chúng ta cần phải kết nối các đèn LED tới pin kỹ thuật số 13 và nối đất trên Arduino (xem hình 1-11), như minh họa trong sơ đồ thể hiện trong hình 1-12.
Hình 1-11 : Các thiết lập phần cứng cho thiết kế nhấp nhát LE
Hình 1-12 : Một sơ đồ nguyên lí của thiết kế nhấp nháy LED
Trang 14Đầu tiên, chúng ta cần phải cài đặt Arduino IDE Để làm điều này, đi đến
www.Arduino.cc/en/Main/Software Arduino IDE sẽ làm việc với Windows Vista hoặc 7, Mac
OS X, và các hệ thống Linux Sau khi Arduino IDE sẽ được tải về máy tính để bàn của bạn, nó
sẽ được trong một định dạng nén, do đó giải nén file Arduino-0022 trên máy tính để bàn của bạn Arduino IDE đã được cài đặt
Bây giờ bạn có Arduino IDE được cài đặt trên máy tính của bạn, bạn cần phải chắc chắn rằng nó được cấu hình đúng Để làm điều này, mở Arduino IDE, và vào Tools cổng nối tiếp (Serial port) ; chọn cổng nối tiếp ( Serial port) Arduino của bạn được kết nối với Tiếp theo, chọn Toolsboard , và chọn Arduino board bạn đang sử dụng (cuốn sách này sử dụng Arduino Duemilanove Atmega328) Một khi phần cứng của bạn được cấu hình, nó là thời điểm để viết chương trình phần mềm
Viết Chương trình
Bây giờ, chúng ta hãy xem xét các chương trình cần phải viết Đây là một phần quan trọng của quá trình kỹ thuật Chúng ta hãy nhìn vào tài liệu yêu cầu của thiết kế nhấp nháy LED để quyết định những gì chương trình sẽ cần phải làm: đèn LED cần nhấp nháy trong khoảng thời gian 100msn Chương trình có thể viết được dưới dạng sau:
// Nhấp nháy led trong 100ms
const int LEDdelay = 100; // gọi trễ
Trang 15bit to pin 13 delay(LEDdelay); // trễ 100ms
digitalWrite(13, LOW);
delay(LEDdelay) // điều này sẽ tạo một lỗi cú pháp do một dấu chấm phẩy bị thiếu
Chú ý Khi bạn cố gắng để biên dịch chương trình này để Arduino của bạn, nó mang lại cho bạn một lỗi Điều này là do một lỗi cú pháp mà mà chúng ta sẽ gỡ lỗi trong phần tiếp theo.
Sửa Lỗi Chương Trình Arduino
Chương trình cuối cùng thất bại trong việc biên dịch vì một lỗi cú pháp Đây là loại lỗi là do mã định dạng không chính xác, chẳng hạn như một dấu chấm phẩy mất tích (đó là lý do tại sao các chương trình cuối cùng không biên dịch) Dưới đây là mã sửa đổi:
// Nhấp nháy led trong 100ms
const int LEDdelay = 100; // gọi trễ
digitalWrite(13, HIGH); // ghi ở mức cao
bit to pin 13 delay(LEDdelay); // trễ 100ms
Trang 16Xử lí sự cố phần cứng
Công cụ số một được sử dụng để xử lí sự cố phần cứng là đồng hồ vạn năng Công cụ này có thểcứu phần cứng của bạn khỏi bị hư hỏng Ví dụ, nếu đồng hồ vạn năng của bạn phát hiện rằng nguồn điện là nhiều hơn là cần thiết, thiết lập phần cứng cho thiết kế nhấp nháy đèn LED có thể
sử dụng một điện trở 22 Ohm để hạn dòng cho LED
Hoàn Thành Mẫu Thử
Một khi bạn đã hoàn thành việc gỡ lỗi phần mềm và khắc phục sự cố phần cứng, bạn cần phải cómột nguyên mẫu hoàn thành sẽ làm việc trong hầu hết các trường hợp Một khi b đã hoàn thànhviệc gỡ lỗi phần mềm và khắc phục sự cố phần cứng, bạn cần phải có một nguyên mẫu hoàn thành sẽ làm việc trong hầu hết các trường hợp Trong chương này, chúng ta sử dụng một thiết
kế rất đơn giản, nhưng trong các chương sau, thiết kế sẽ trở nên phức tạp hơn, và các quy trình
kỹ thuật sẽ trở nên cần thiết hơn để đảm bảo mã code là hiệu quả, hợp lý, và dễ hiểu
Tóm Tắt Sơ Lược
Trong chương này, ta đã học được những phần khác nhau của phần cứng và các công cụ khác nhau như: Arduino, Arduino Shields (lá chắn arduino), Đồng hồ vạn năng, và kìm nhọn , sau đó chúng ta đã tìm hiểu về qui trình kĩ thuật Arduino Các bước trong quá trình này là : thu thập yêu cầu, tạo các tài liệu yêu cầu, tập hợp các phần cứng , cấu hình phần cứng, viết phần mềm, gỡlỗi các phần mềm Arduino, khắc phục sự cố phần cứng, và hoàn thành nguyên mẫu Tacũng xác định một số điều khoản mới sẽ giúp hiểu được quy trình kỹ thuật, vàchúng ta đã học được sự khác biệt giữa các lỗi logic và cú pháp
Trang 17Chương 2: Tìm hiểu về chương trình phần mềm
Arduino
Trong chương này, chúng ta sẽ thảo luận về các khối lập trình khác nhau sẽ được sử dụng trong cuốn sách này Nếu bạn đã được lập trình trong C, bạn sẽ thấy rằng lập trình cho các Arduino là rất giống nhau Nếu không, chương này sẽ dạy cho bạn những khái niệm cơ bản Tại sao nó quantrọng cho bạn để tìm hiểu những điều cơ bản của lập trình Arduino? Về lâu dài, điều này sẽ giúp giữ mã của bạn thoáng và dễ đọc Ngoài ra, học tập các vòng lặp cơ bản (loop) và cấu trúc ban đầu sẽ cho phép chúng ta tập trung hơn vào các thư viện sau đó Thư viện có thể có các lớp, loại, hoặc các chức năng và có thể được gọi bằng cách sử dụng các từ khóa trong chương trình Mục đích của thư viện là để dễ dàng thêm nhiều chức năng hơn cho chương trình của bạn bằng cách
sử dụng mã code đã được tạo ra trước Một số thư viện ta sẽ tìm hiểu trong chương này là
NewSoftwareSerial, Thư viện LCD, TinyGPS,và một vài thư viện khác
Bắt Đầu Với setup( ) và loop( )
Tất cả các chương trình Arduino phải có hai thành phần chính để làm việc đúng là setup () và loop () Chúng được thực hiện như sau :
// chương trình Arduino cơ bản
Trang 18setup ( ) được sử dụng để thiết lập cổng I / O chẳng hạn như đèn LED, cảm biến, động cơ, và
cổng nối tiếp Cần chú ý thiết lập là rất quan trọng bởi vì để sử dụng các chân trên Arduino, chúng ta cần phải thông báo với Arduino rằng chúng sẽ được sử dụng
loop ( ) nắm giữ tất cả các mã điều khiển các cổng I / O Ví dụ, ở đây bạn sẽ thông báo với
động cơ (motor) của bạn chạy với một tốc độ nhất định Chúng ta sẽ tìm hiểu làm thế nào để thiết lập và điều khiển I / O trong các phần tiếp theo Chương trình Arduino cũng có chức năng
bổ sung các chương trình con, rất hữu ích bạn có thể gọi trong vòng lặp loop () hoặc chương trình con của nó Để sử dụng một chương trình con, trước tiên bạn phải khởi tạo nó ở phần đầu của chương trình , đó là một mẫu thử chức năng Dưới đây là một ví dụ :
Khởi Tạo Biến
Biến là các khối xây dựng một chương trình cơ bản nhất; chúng được sử dụng để truyền dữ liệu xung quanh chương trình của bạn và được sử dụng trong tất cả các chương trình chúng tai sẽ tìm hiểu trong cuốn sách này Chúng tacó thể viết một số dạng của các biến ngôn ngữ Arduino trongBảng 2-1 :
Trang 19Bây giờ bạn cần phải biết làm thế nào để khai báo các biến Để khai báo, bạn cần phải biết những
gì trong phạm vi các biến có thể được sử dụng và sau đó xác định (hoặc liệt kê) phạm vi đáp ứngnhu cầu của bạn Trong cuốn sách này, chúng ta sẽ tìm hiểu hai loại biến : biến cục bộ và biến
số chung Một biến cục bộ chỉ hoạt động trong phạm vi nhất định của nó Ví dụ, một vòng lặp giữ các biến khai báo của nó chỉ trong dấu ngoặc đơn của nó, do đó, những biến này là cục bộ cho một vòng lặp loop Một biến số chung (toàn cục ) có thể được gọi tại bất kỳ điểm nào trongchương trình của bạn Để xác định một biến số chung , khởi tạo nó ở phần đầu của chương trình của bạn Chương trình sau đây minh họa cách khởi tạo các biến cục bộ và biến số chung :
// Khởi tạo biến
int x; // Biến này được là toàn cục và có sẵn để truy cập trong suốt chương trình này
Trang 20int pins[ ] = {13,9,8};
Đó là một ý tưởng tốt để khai báo kích thước của mảng, như trong ví dụ sau:
const int NumOfPins = 3;
int pins[NumOfPins] = {13,9,8};
Điều này sẽ cho phép bạn truy cập thông tin của mảng, và sau đó, bạn có thể truyền thông tin đó
để một pin kỹ thuật số hoặc bất cứ điều gì khác mà bạn muốn Biến bây giờ đã được khai báo, làm thế nào để bạn sử dụng chúng ? Điều này sẽ được thảo luận trong phần tiếp theo của chươngnày
Lưu ý : Whitespacing có nghĩa là bạn đã thêm dòng trống và không gian trong mã code để làm cho nó dễ đọc hơn
Viết Câu Lệnh Có Điều Kiện
Câu lệnh điều kiện có thể được sử dụng để kiểm soát dòng dữ liệu của chương trình của bạn Ví
dụ, nói rằng bạn muốn chạy một động cơ chỉ khi một nút được nhấn; bạn có thể làm như vậy bằng cách sử dụng câu lệnh điều kiện Chúng tôi sẽ thảo luận về các câu lệnh có điều kiện sau
đây: if, if-elseif, if-else, câu lệnh chuyển đổi
Một câu lệnh if rất quan trọng , dưới đây là một ví dụ về câu lệnh if :
int i;
if (i < 10)
{
Trang 22switch (potValue){ case 500;
Làm Việc Với Vòng Lặp LOOP
Loops có nhiều công dụng bao gồm cả việc loại bỏ mã dư thừa và lặp qua mảng Các vòng lặp chúng ta sẽ sử dụng là : for , while và do….while Những vòng lặp sẽ cho phép chúng ta chạy qua mã trong khi một điều kiện là đúng (hay sai, trong một số trường hợp)
Vòng lặp for : Vòng lặp này được sử dụng để lặp lại một khối mã một số cố định của thời gian Các thiết lập cơ bản của vòng lặp này là :
For ( int i=0 ; i<=10 ;i++ )
{ // viết câu lệnh ở đây
}
Một ứng dụng thực tế cho một cho vòng lặp for là sử dụng nó để cập nhật nhiều cài đặt pinMode: int pins [ ] = {13,9,8};
void setup()
Trang 23Lưu ý pinMode được sử dụng để thiết lập các chân I / O của bạn trên Arduino
Vòng lặp while : vòng lặp này sẽ chạy cho đến khi một điều kiện đã được đáp ứng; nếu điều
kiện đầu tiên là sai, nó sẽ không chạy ở tất cả Ví dụ, bạn muốn sử dụng một vòng lặp while nếubạn muốn chạy mã cho đến khi được một giá trị nhất định đến từ một cảm biến Ví dụ sau đây minh họa nguyên tắc này :
int potPin = A1;
Trang 24Vòng lặp Do while : Nó giống như các vòng lặp while ngoại trừ các câu lệnh điều kiện được
kiểm tra ở cuối vòng lặp, vì vậy vòng lặp này sẽ chạy ít nhất một lần Dưới đây là một ví dụ:
Liệt kê 2-1 : Câu lệnh số
Trang 25Lưu ý : sử dụng các chân số PWM để kiểm soát tốc độ động cơ và độ sáng LED
Giao Tiếp Với Các Linh Kiện Tương Tự
Bạn cũng có thể sử dụng giao tiếp tương tự với cảm biến và động cơ, có nghĩa là bạn có thể kết nối chiết áp để điều khiển tốc độ động cơ thông qua một chân điều chế độ rộng xung (PWM) trên Arduino Các chức năng cho giao tiếp tương tự là analogRead (giá trị) và analogWrite (chân, giá trị) Điều duy nhất bạn cần phải ghi nhớ là một chiết áp sẽ cho một giá trị từ 0 đến 1024, do
đó bạn sẽ có quy mô analogWrite từ 0 đến 255, ví dụ:
analogWrite (LED,ledValue/4) ; // 1024/4 = 255
Giao Tiếp Nối Tiếp
Chúng ta sẽ sử dụng giao tiếp nối tiếp trong suốt cuốn sách này Giao tiếp nối tiếp cho phép chúng ta giao tiếp với một máy tính, màn hình LCD, và nhiều thiết bị khác, như bạn sẽ thấy
trong một số chương tiếp theo Một số lệnh nối tiếp là : Serial.begin (baud), Serial.Println
Trang 26("bất cứ điều gì bạn muốn viết cho chân nối tiếp"), Serial.read ( ), Serial.write (dữ liệu nhị phân), Serial.available ( ) , và Serial.end () Những lệnh này cho phép chúng ta đọc và viết thư cho bất kỳ thiết bị ngoại vi nối tiếp chúng ta muốn Đây là một mô tả ngắn gọn của mỗi lệnh nốitiếp:
Serial.begin (baud): Bạn sẽ đặt lệnh này bên trong cấu trúc setup () và đưa tỷ lệ baud thích hợp
cho các thiết bị có nối tiếp sẽ được giao tiếp, ví dụ:
Serial.read (): Dùng để đọc một giá trị từ cổng nối tiếp Ví dụ, bạn có thể sử dụng để đọc một
cái gì đó từ máy tính của bạn sau đó bạn muốn viết lệnh cho một màn hình LCD trên Arduino
Void loop()
{
char var = Serial.read () ; // Đọc byte đến từ cổng nối tiếp
}
Trang 27Serial.write (): Sử dụng điều này để ghi dữ liệu nhị phân đến một cổng nối tiếp, ví dụ:
Void loop()
{
while(Serial.available() > 0)
{
char var = Serial.read () ; // Đọc byte đến từ cổng nối tiếp
Serial.write (var) ; // ghi dữ liệu nhị phân vào cổng nối tiếp
}
}
Chú ý: Trong cuốn sách này, hầu hết thời gian bạn sẽ sử dụng Serial.println () bởi vì chúng tôi
sẽ ghi các giá trị int hoặc string cho các bộ giám sát nối tiếp_ Các Serial.write () chức năng được sử dụng để gửi dữ liệu nhị phân để bộ giám sát nối tiếp hoặc bất kỳ chương trình cổng nối tiếp khác
Serial.available (): Chức năng này sẽ kiểm tra xem nếu có bất kỳ byte đến vào cổng nối tiếp, ví
Serial.end (): Điều này vô hiệu hóa giao tiếp nối tiếp
Bây giờ bạn đã thấy các tập lệnh cho giao tiếp nối tiếp, chúng ta có thể sử dụng chúng trong các chương trình Bảng liệt kê 2-2 minh họa hầu hết các chức năng chúng ta đã thảo luận
Trang 28
Bảng liệt kê 2-2 : Giao tiếp nối tiếp
incomingByte = Serial.read(); // đọc byte đến
Serial.println(incomingByte, BYTE); // xuất byte đến tới cổng nối tiếp
digitalWrite(ledPin, incomingByte) // ghi tới chân LED
}
}
Chương trình này là nền tảng của giao tiếp nối tiếp: nó khởi tạo incomingByte và ledPin tới trong cấu trúc setup tốc độ truyền được thiết lập là 9600 Khi chúng ta nhận được bên trong cấutrúc vòng lặp, vòng lặp while đang kiểm tra để xem nếu bất cứ điều gì tại cổng nối tiếp Nếu
có, nó gán các thông tin trên cổng nối tiếp đến incomingByte Cuối cùng, chương trình ghị các
dữ liệu vào cổng nối tiếp và ghi dữ liệu vào ledPin ( trường hợp 1 hoặc 0)
Sử Dụng Thư Viện Arduino
Bây giờ bạn biết những điều cơ bản của lập trình Arduino, chúng ta sẽ điểm qua các thư viện sẽ được sử dụng trong các chương tới Các thư viện chính mà chúng ta sẽ sử dụng là
NewSoftwareSerial, TinyGPS, và thư viện LCD, và một vài thư viện khác sẽ được giải thích trong các chương sau Để sử dụng các thư viện này, bạn sẽ cần phải tải về và giải nén chúng vào
Trang 29thư mục Libraries trong thư mục Arduino-022 Sau khi bạn làm điều đó, bạn sẽ có thể sử dụng bất kỳ thư viện tương thích với các Arduino.
NewSoftwareSerial
Thư viện NewSoftwareSerial cho phép chúng tôi viết lệnh cho nhiều chương trình nối tiếp Để
sử dụng thư viện này, điều đầu tiên bạn phải làm là có được thư viện NewSoftwareSerial từ Internet và thêm nó vào thư mục Libraries trong thư mục Arduino IDE Bạn có thể tải
NewSoftwareSerial tại http://arduiniana.org/libraries/newsoftserial
Một khi bạn đã tải về và thêm vào NewSoftwareSerial vào thư mục Arduino IDE điều bạn phải làm là gọi NewSoftwareSerial trong các chương trình mà bạn muốn sử dụng nó như sau :
#include <NewSoftwareSerial.h>
NewSoftwareSerial gps(2,3); / / Điều này tạo ra dạng mới củaewSoftwareSerial dưới
// Gps tên_
// Định dạng trong dấu ngoặc (rx, tx)
Điều này sẽ bao gồm gps nối tiếp đến chân 2 và 3 Trong cấu trúc setup , bạn phải thiết lập tốc
độ truyền nối tiếp mới, như vậy:
void setup()
{
gps.begin(4800);
}
Sau đó, thay vì sử dụng các thư viện Serial, bạn sẽ có chức năng gọi từ thư viện
NewSoftwareSeria bạn có thể gọi những chức năng từ các đối tượng gps nối tiếp chúng tôi tạo
ra trước đó, ví dụ:
serial.ready () ;
Become…
Gps.read () ;
Trang 30TinyGPS
Thư viện này phân tích dữ liệu NMEA, như kinh độ, vĩ độ, độ cao, và tốc độ, thành một phong cách thân thiện Chúng ta sẽ đi vào chi tiết hơn nữa về các thư viện TinyGPS trong Chương 5 Tất cả mà bạn cần làm bây giờ là tải về các thư viện TinyGPS từ
http://arduiniana.org/libraries/tinygps
Thư viện ColorLCDShield
Thư viện hình LCD sẽ được sử dụng để đọc và ghi vào một màn hình LCD Chúng ta sẽ tìm hiểucác thư viện LCD trong chương 4 Bây giờ, chỉ cần tải các thư viện LCD từ :
http://www.apress.com/9781430238850
Nghiên Cứu Kết Hợp Ngôn Ngữ Cơ Bản Arduino
Bây giờ bạn sẽ biết làm thế nào để tạo ra các chương trình Arduino cơ bản nhất, vì vậy hãy dành vài phút để tóm tắt lại một số điểm lập trình chìa khóa cần thảo luận Bạn có thể sử dụng bản tóm tắt này để giúp cho việc viết chương trình trong suốt cuốn sách này, và thông qua đó tạo các thiết kế của riêng bạn Dưới đây là một ví dụ của chương trình:
Chúng tôi cũng thực hiên khai báo biến và sử dụng biến toàn cục , như trong ví dụ sau:
char ch = 'A'; int pin = 13;
Những giá trị này có loại kí tự và số nguyên Bạn cũng đã học về lệnh if ; lệnh if-else và cách
sử dụng chúng:
Trang 31// đặt code tại đây
Ngoài ra bây giờ bạn có thể thêm câu lệnh elseif để tạo ra lệnh if -elseif để thêm điều kiện , nếu bạn cần chúng
Trang 32Sau khi câu lệnh có điều kiện đã được giải thích, chúng tôi thực hiên các cấu trúc vòng lặp khácnhau mà bạn có thể sử dụng để phân tích hoặc lặp thông qua mã Vòng lặp đầu tiên chúng tôi thảo luận là vòng lặp for:
For ( initialization;condition; variable ; Manipulation )
Tiếp theo, bạn cần thiết phải tìm hiểu về những cách khác nhau để giao tiếp với các bộ cảm biến
; thiết bị ngoại vi khác, và ta đã thảo luận về các hàm digitalRead () và digitalWrite () như sau :
Trang 33Sau khi tìm hiểu về những cách thức khác nhau để giao tiếp với các bộ cảm biến, chúng ta cần
một cách để giao tiếp với giao tiếp nối tiếp_ Dưới đây là các lệnh cho giao tiếp nối tiếp:
Trang 34KIỂM SOÁT CHUYỂN ĐỘNG
Trong chương này, chúng ta sẽ thảo luận về điều khiển động cơ, một phần rất quan trọng của thiết kế robot sẽ được dùng trong cuốn sách này Điều khiển động cơ cho phép chúng ta cung cấpcho cuộc sống robot, nhưng chúng tôi sẽ không chỉ đơn giản được nhấn nhím để điều khiển ra robot Thay vào đó, theo yêu cầu của một khách hàng giả định, chúng tôi sẽ kiểm soát tốc độ động cơ và định hướng qua truyền thông nối tiếp
Chúng ta có thể thực hiện điều này bằng cách sử dụng một H-bridge và một biến tần hex CácH-bridge sẽ được sử dụng để điều khiển hai động cơ và biến tần hex sẽ được sử dụng để chuyển đổi một tín hiệu từ 0 sang 1 (từ 1 sang 0) Công ty muốn từng tham số được tách để đi đến nhữngchân cụ thể Một yêu cầu nữa công ty đó là các mẫu thử nghiệm cuối cùng cần phải được cấu hình trên một khung-nhưng không phải cho đến khi các phần cứng và phần mềm đã được thử nghiệm
Để tận dụng tối đa trong dự án này, bạn sẽ cần một sự hiểu biết cơ bản của tiến trình kỹ thuật
và ngôn ngữ lập trình Arduino như đã nói trong hai chương đầu tiên Nếu bạn chưa đọc bài viết nào, xin vui lòng làm điều đó trước khi tiếp tục Trước khi giải quyết yêu cầu của khách hàng, tuy nhiên, bạn sẽ cần một số thông tin cơ bản cung cấp cho bạn những cơ sở cần thiết để tạo ra các dự án cuối cùng Để bắt đầu mọi thứ, chúng ta sẽ thảo luận về H-bridge và mục đích sử dụngkhác nhau của nó tiếp theo là một đánh giá về phần cứng cần dùng trong chương này Sau đó chúng ta sẽ tạo ra 4 dự án nhỏ mà sẽ dạy bạn làm thế nào để bật và tắt một động cơ với một nút bấm Tiếp theo, bạn sẽ tìm hiểu làm thế nào để sử dụng một chiết áp để kiểm soát tốc độ trên mộtđộng cơ Sau đó, bạn sẽ học cách điều khiển nhiều động cơ với H-bridge và làm thế nào để kiểm soát cả tốc độ và hướng với một chiết áp và một nút bấm Trang bị kiến thức mới học của bạn, bạn sẽ tạo ra một robot có sử dụng H-bridge để điều khiển chuyển động của nó
Giải thích phần cứng: Các H-bridge
Trang 35Các H-bridges là mạch tích hợp rất hữu dụng (IC); chúng cho phép điện áp cao hơn để được kết nối với động cơ mà không cần sử dụng nguồn 5V yếu của Arduino Với một số Các H-cầu, bạn có thể sử dụng lên đến 30V Hình 3-1 cho thấy ba ví dụ về một H-bridge; cho chương này, chúng ta sẽ dùng lá chắn động cơ từ Spark Fun được hiển thị phía trên bên phải.
Hình 3-1 Một vài H-bridges (từ trái sang phải: bề mặt gắn kết H-bridge, thông qua hố
H-bridge, và động cơ từ lá chắn SparkFun)
Các motor Sparkfun lá chắn có hai cổng motor, cổng A và cổng B; các cổng tương ứng với bốn chân trên lá chắn động cơ từ Sparkfun Chúng là chân digital 3: PWMA, cái mà kiểm soát tốc độ của motor A, chân digital 12: DIRA, cái mà điều khiển hướng của motor A, chân digital 11: PWMB, cái mà kiểm soát tốc độ của motor A, và chân digital 13: DIRB , cái mà điều khiển hướng của motor B Chúng ta sẽ dùng một H-bridge để điều khiển tốc độ và hướng của động cơ Các lá chắn động cơ từ Sparkfun có được xây tích hợp trong L298P H-bridge, có thể xử lý lên đến 18V và sử dụng các chân digital 3, 11, 12, và 13 để điều khiển tốc độ và hướng Bạn cũng cóthể sử dụng một H-bridge độc lập như L293D, thiết bị có một điện áp đầu vào lên tới 37V Trongchương này, chúng ta sẽ sử dụng trình điều khiển motor để điều khiển động cơ với một chiết áp
và một nút bấm, kiểm soát tốc độ và hướng điều khiển những thứ khác
Tập hợp các phần cứng cho Chương này
Trang 36Chúng ta sẽ sử dụng Dagu 2WD Beginner Robot Chassis V2 từ Robotshop.com Sau đó trong chương này, các yêu cầu tài liệu trình bày sẽ có một chuẩn cho khung này Phần này của phần cứng sẽ được sử dụng để giữ mạch, chẳng hạn như Arduino và lá chắn motor Bạn có thể tìm thấy khung này ở www.robotshop.com/dagu-2wd-beginner-robot-chassis-v2-2.html
Tôi đã chọn khung này cho thiết kế hai bánh xe của nó và không gian rộng rãi trên đó nó có mẫu thử nghiệm Nếu bạn đã có một khung hoặc bạn muốn mua một cái khác, chỉ cần đảm bảo nó là một khung xe hai bánh, như chúng ta sẽ dùng hệ thống hai bánh suốt phần còn lại của cuốn sách này
Hình 3-2 Trong chương này, chúng ta sẽ sử dụng Dagu 2WD Beginner Robot Chassis V2.
Sự hiểu biết các vấn đề cơ bản của điều khiển động cơ
Trong phần này, chúng ta sẽ thảo luận về các vấn đề cơ bản của điều khiển động cơ trong bốn dự
án riêng biệt: bật một động cơ với một nút bấm, kiểm soát tốc độ của một động cơ với chiết áp, kiểm soát nhiều động cơ với Arduino, và cuối cùng, kiểm soát tốc độ và hướng Những điều này
sẽ tạo nên nền tảng chúng ta dùng để xây dựng dự án chúng ta khi chúng ta có các tài liệu yêu cầu cho một robot sau chương này
Dự án 3-1: Bật một động cơ với một Switch
Trang 37Dự án này sẽ chủ yếu tập trung vào các chân digital và sẽ sử dụng một H-bridge vì vậy chúng ta
có thể sử dụng điện áp cao hơn để chạy các động cơ với Arduino Dự án 3-1 sẽ cho phép chúng tôi bật một động cơ trên chuyển động theo một chiều kim đồng hồ
Tập hợp các phần cứng
Hình 3-3 cho thấy phần cứng cho dự án này, trừ pin 9V, kết nối 9V, và solderless breadboard:
• Arduino Duemilanove (hoặc UNO)
• đầu nối pin 9V
• Hai khối thiết bị đầu cuối từ Sparkfun
• Dây phụ
Hình 3-3 Phần cứng cho dự án này
Cấu hình phần cứng
Trang 38Đầu tiên, hàn các header cái vào lá chắn motor và nối lá chắn động cơ đến header cái trên
Arduino Duemilanove Tiếp theo, cắm đầu cuối trên một lá chắn motor cho động cơ 6V bằng cách hàn một khối đầu cuối để lá chắn motor và động cơ của bạn kết nối với khối đầu cuối (Hình3-4 cho thấy cấu hình này) Cuối cùng, kết nối bật / tắt chuyển đổi từ chân nối đất đến digital 10 trên Arduino, như Hình 3-5 cho thấy Hình 3-6 và 3-7 minh họa cho cấu hình phần cứng cho dự
án này
Hình 3-4 Khối đầu cuối thêm vào lá chắn motor
Trang 39
Hình 3-5 Công tắc được kết nối với chân digital 10 và nối đất trên Arduino.
Hình 3-6 Động cơ được kết nối với cổng motor A trên lá chắn motor, và chuyển đổi được
kết nối với chân digital 10 và nối đất trên Arduino.
Hình 3-7 Các sơ đồ cho dự án này
Trang 40Bây giờ bạn đã kết nối các nút nhấn và động cơ, bạn cần phải kết nối Arduino của bạn để máy tính của bạn để cho phần mềm có thể được upload vào Arduino Chúng tôi sẽ viết chương trình cho dự án này trong phần tiếp theo.
Viết phần mềm
Các phần mềm cho dự án này sẽ tương tự như các dự án LED nhấp nháy mà chúng ta tạo ra trong Chương 1 Nó sẽ có một đầu vào digital, một đầu ra digital, và một câu lệnh có điều kiện kiểm soát đầu ra Listing 3-1 cung cấp mã cho dự án này
Listing 3-1 Turning on a Motor
const int buttonPin = 10;
const int motorPin = 3;