Khởi đầu với Arduino

Category: Arduino Published: 13 December 2016
Hits: 905

Hướng dẫn này là một bài học miễn phí trong khóa học về Arduino. Để đăng ký khóa học, nhấp chuột vào đây.

Giờ thì xắn tay áo lên và chúng ta cùng nhau nghiên cứu! Trong bài học này, chúng ta sẽ bắt đầu với những hiểu biết sơ khai về Arduino. Chúng tôi sẽ thực hiện một số thí nghiệm cơ bản với Breadboard (Bộ cắm dây) để giới thiệu sơ lược về Arduino và quy trình làm việc của nó.

Đầu tiên, hãy cố định bảng mạch Arduino Uno và Solderless Breadboard (Bộ cắm dây không có mối hàn) lên tấm gá. Việc này rất hữu hiệu vì giúp các mẫu thí nghiệm tránh khỏi nhiều vấn đề rắc rối. Phía dưới Solderless Breadboard có lớp băng dính mà bạn có thể bóc ra (cũng như là bóc lớp giấy lót trên giá đỡ), còn bảng mạch Arduino Uno thì bắt vít vào các góc ở mặt dưới. Nếu mạch Arduino tiếp xúc với Breadboard cũng không có vấn đề gì. Tốt nhất nên sử dụng một chiếc tô-vít nhỏ, vì như vậy bạn có thể giữ đai ốc ở mặt trên của và xoáy ốc vào từ mặt dưới của bảng mạch. Chỉ cần bắt vít ở 2 góc chéo nhau là đủ để giữ nó cố định. Các chân đế cao su (đi kèm cùng giá đỡ) giúp các bộ phận mà bạn đã lắp ráp được giữ cố định trong khi bạn làm việc và giờ mạch của bạn đã có thể sử dụng và được bảo vệ khỏi bất kì dòng điện không may xuất hiện trên bề mặt nơi đặt giá đỡ.

Bước 1: Nhà cung cấp linh kiện

Để tiện cho việc theo bài học này bạn sẽ cần một vài linh kiện, thiết bị như sau:

Bước 2: Breadboards Solderless

Breadboards Solderless được sử dụng để làm mạch mẫu một cách đơn giản và nhanh gọn. Bạn có thể coi nó như là một cái bảng để viết và xóa, do đó bạn có thể dễ dàng trong việc tư duy và thực hiện ý tưởng của mình trên nó. Breadboards cho phép bạn kết nối các thành phần sử dụng chân cắm kim loại nhiều kênh. Các bộ phận dẫn điện của Breadboard giúp điện tử truyền đi giữa các điểm mà bạn cắm vào.

Ở hình trên bên phải, bạn có thể thấy phía trong của breadboard các chân cắm liên kết với nhau như thế nào. Hai đường chạy dọc xuống ở mỗi bên, được đánh dấu bởi các đường màu đỏ và xanh ở mặt trước, chúng là các kết nối dài thường được sử dụng cho các kết nối với nguồn điện. Các hàng ngang nhỏ ở giữa Breadboard được sử dụng để cắm dây điện và các linh kiện. Chú ý là bên dưới rãnh chia ở chính giữa Breadboard, đó là nơi để các chip có thể hoạt động đồng thời, và tạo một kết nối độc lập với mỗi chân của nó.

Ta cần thực hành một vài lần để nắm được cách kết nối của Solderless Breadboards, chủ yếu ở là cần nắm được vị trí các điểm kết nối với nhau. Đôi khi bạn cần phải xem lại ảnh bên trong của Breadboards để nắm được cách kết nối các điểm với nhau.

Bước 3: Mạch đèn nhấp nháy

Ở mạch đầu tiên ta sẽ thực hiện thí nghiệm nối một LED đỏ trên Breadboard với mạch Arduino. Trước hết ta có một dây nối, nên dùng dây cùng màu để thuận tiện cho việc ghi nhớ. Đồng thời kiểm tra xem cáp USB đã ngắt chưa, trước thực hiện việc nối mạch. Lấy sợi dây màu đỏ cắm vào chân có ghi 5V trên mạch Arduino. Đầu còn lại cắm vào đường dọc trên Breadboard được đánh dấu bởi 1 đường màu đỏ - đây là đường nối cực dương.

Tương tự, lấy một sợi dây xanh và cắm vào chân có ghi GND, nằm ngay bên phải dây đỏ. Có ba chân nối cực âm (GND) trên một mạch Arduino, và tất cả chúng đều được nối với cùng 1 cực âm cũng giống như chip và phần còn lại của mạch, vì vậy bạn có thể chọn bất cứ chân nào. Cắm đầu còn lại của dây xanh với đường nối cực âm màu xanh trên Breadboard. Đây là một cách thiết lập phổ biến mà bạn sẽ còn sử dụng lại nhiều lần, bạn nên để nó sẵn như vậy, thậm chí ngay cả khi bạn không cần dùng đến 2 cực của nguồn điện. Trong bài học này, mạch sẽ được nối với cực âm của nguồn, và trong bài học tới bạn sẽ sử dụng một vào linh kiện để nối với cực dương của nguồn 5V.

Tiếp theo, cắm dây vàng vào chân Arduino digital số 13. Cắm đầu còn lại vào bất kì hàng ngang nào trên Breadboard (hàng 10 trong hình trên). Đối với bảng mạch đầu tiên này của bạn, mọi kết nối đều được thực hiện trên 1 nửa của Breadboard – phần gần Arduino hơn.

Nối dây màu xanh khác (dây thứ 2) từ bất kì chân nào trên đường cực âm tới hàng ngang khác trên Breadboard (hàng 18 trên hình).

Bây giờ thì lấy một điện trở 1K (cái có sọc nâu-đen-đỏ-vàng), và cắm vào chân trên cùng một hàng ngang với dây xanh thứ 2. Các điện trở trông đều giống nhau, trừ các sọc dùng để chỉ giá trị của nó.

Cắm đầu kia vào một hàng ngay bên cạnh dây màu vàng.

Bây giờ lấy một đèn LED màu đỏ. Xem dây nào của nó dài hơn. Dây dài hơn là đầu dương (anode), và ngắn hơn là đầu âm (cathode). Trong mạch mà chúng ta đang xây dựng, điện dương được lấy từ chân cắm trên Arduino, nó đi qua đèn LED và điện trở tới cực âm, vì thế mà bạn nên nối đầu dương (dài hơn) với dây vàng và đầu âm (ngắn hơn) với điện trở. Điện trở giúp giới hạn dòng điện đi qua LED.

Một cách khác để đoán được sự phân cực của đèn LED là nhìn vào bên trong của ống kính ở anvil (mảnh kim loại lớn) và post (mảnh kim loại nhỏ). Anvil thường là cực âm, nhưng như bạn thấy trong video trên, không phải tất cả các đèn LED đều có cùng cách phân cực. Để chắc chắn nhất thì phải kiểm tra nó trước khi dùng.

Cắm cáp USB vào thì đèn LED sẽ bắt đầu nhấp nháy. Nó được lập trình để nhấp nháy bất cứ khi nào kết nối với ổ 13. Nó được bao gồm onboard LED mà bạn nhìn thấy trong cài đặt phần mềm, ngay khi mà dây nối được cắm vào.

Nếu LED không nhấp nháy, hãy rút cáp USB ra, sau đó đảo chiều cắm LED và kết nối lại cáp USB; nguyên nhân có lẽ do LED bị cắm ngược chiều dòng điện. Hoặc có thể do một trong các dây điện trở chưa được nối một cách chính xác. Hãy kiểm tra lại các kết nối trên sơ đồ mạch một lần nữa.

Nhấn "Start Simulation" để chạy giả lập Arduino, cái mà “nhấp nhảy” trong chương trình mẫu được tải lên. Chúng ta sẽ sử dụng Autodesk Circuits module như thế này trong suốt khóa học để giúp bạn xây dựng mạch. Nó chứa sơ đồ kết nối cho các thí nghiệm Breadboard cũng như là các đoạn code bạn sẽ cần cho mỗi bài học. Nhấp vào nút "Code Editor" để xem chương trình, được gọi là một Arduino sketch.

// Pin 13 has an LED connected on most Arduino boards.

// give it a name:

int led = 13;

 

// the setup routine runs once when you press reset:

void setup() {

  // initialize the digital pin as an output.

  pinMode(led, OUTPUT);

}

 

// the loop routine runs over and over again forever:

void loop() {

  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);               // wait for a second

  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);               // wait for a second

}

Bạn sẽ sử dụng Arduino IDE để thao tác các chương trình như thế này và dùng chúng trên bảng mạch Arduino để chạy. Bạn đã từng chạy bản phác thảo (sketch) trên bảng mạch Arduino trong phần cài đặt phần mềm từ bài học trước, nhưng chỉ một làm ví dụ không thể giúp bạn giỏi được: bạn nên tìm nhiều ví dụ khác để thực hành thông qua phần mềm Arduino (File -> Examples -> Basics -> Blink)

Các bản ví dụ phác thảo là một điểm khởi đầu lí tưởng để tập viết những dòng code đầu tiên cho projects của bạn. Những ví dụ này là vô giá giúp cải thiện kĩ năng sử dụng Arduino. Khi tập code, bạn thường mắc phải rất nhiều lỗi khi lần đầu tập code, điều này có thể khiến bạn thấy bối rối. Do đó, với những ví dụ đã có trong tay là khi bạn có thể sửa lại những dòng code sai không chạy được (gọi là debugging). So sánh đoạn code của bạn với đoạn code của ví dụ đã chạy thành công là một cách hữu hiệu để sửa lỗi.

Chúng ta hãy xem xét kỹ hơn các thành phần trên bản phác thảo Arduino này. Đầu tiên là một lưu ý nhỏ:

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:

Đây chỉ là một dòng comment, nó giúp người đọc hiểu được chương trình bạn viết. Trong chương trình Arduino, comments được biểu thị bằng 2 dấu gạch chéo; bất kì một dòng đơn nào sau 2 dấu gạch chéo đều được chương trình bỏ qua cho đến khi nó compile (xây dựng đoạn code thành một chương trình máy đọc được – chương trình chạy trên mạch Arduino). Do đó comments không góp phần làm nên kích cỡ chương trình của bạn, vì thế hãy comment thoải mái! Đôi khi bạn có thể bị quên phần này của chương trình nhằm thiện mục đích gì; chúng tôi rất khuyến khích bạn tập thói quen thường xuyên comment vào những dòng code của bạn, và đọc lại phần comments trong mỗi ví dụ được sự dụng trong khóa học này.

int led = 13;

Bước tiếp theo là khai báo biến (variable). Bạn có thể coi mỗi biến như là một hộp chứa một vài thông tin. Các biến, giống như các hộp, có các hình dáng và kích cỡ chúng chứa những loại thông tin khác nhau. Các biến cũng có tên gọi, giống như các nhãn hiệu trên các hộp hàng hóa. Dòng code định nghĩa một biến kiểu int , có nghĩa là biểu thị số nguyên. Nhớ lại thời học toán phổ thông, khi bạn phải học về số nguyên là hầu hết các số (dương và âm). Ta có một hộp chứa các số nguyên. Đây là nhãn led nhưng nó có thể được coi như là “Chân cắm LED” - “MyLEDPin” hoặc bất kì từ đơn (chữ cái, số, hoặc trường hợp nhạy cảm) nào, bởi vì phần này của khai báo biến tùy thuộc vào bạn. Chúng tôi chân thành khuyên bạn sử dụng tên để mô tả cho biến, để bạn có thể dễ dàng theo dõi khi làm chương trình. 

Sau dòng code trên, bất cứ khi nào bạn nhìn thấy từ “led” trong chương trình, nó sẽ thể hiện thay cho số 13. Điều này tiện dụng cho việc cấu hình chương trình giống như chúng tôi, đây là nơi chân LED được kết nối. Hơn thế nữa, nếu như dây nối thay đổi ta chỉ cần cập thật sự thay đổi này tại 1 điểm duy nhất trên đoạn code.

// the setup routine runs once when you press reset:

void setup() {

Như phần comment đã cho thấy, bất cứ điều gì nằm giữa dòng này và dấu ngoặc } là phần thiết lập – setup , phần code chạy một lần mỗi lượt chạy. Đoạn code bên trong phần thiết lập chạy tốn một khoảng thời gian khi mạch của bạn được nối điện, hoặc khi bạn ấn nút Arduino’s reset.

 // initialize the digital pin as an output.

 pinMode(led, OUTPUT);

}

Chân cắm từ 1-13 trên mạch Arduino là các chân i/o đa phương tiện, có nghĩa là chúng có thể là đầu ra hoặc đầu vào (inputs or outputs). pinMode();là một hàm – function, một cách viết tắt để chỉ tập con của các lệnh “đi sâu vào chi tiết hơn” – “under the hood” . Arduino cho bạn thấy nó có thể nhận biết chắc chắn các thành phần của đoạn code bằng cách thay đổi mày chữ. Nếu như những từ khoa không đổi màu , có thể bạn đã mắc phải lỗi chính tả, lỗi viết hoa hoặc các lỗi khác. Những phần thông tin được thể hiện qua hàm được gọi là arguments. Lúc biến led thể hiện nội dung bất cứ khi nào bạn gõ nó, mã số chân truyền tới pinMode(); là 13, và trạng thái lúc này là OUTPUT. Điều này thiết lập chân 13 chịu trách nhiệm cho 1 đèn LED, và dấu ngoặc } để đóng lại phần thiết lập.

// the loop routine runs over and over again forever:

void loop() {

Đây là phần chính của một bản phác thảo Arduino, nơi mà những việc như kiểm tra chân vào and kiểm soát chân ra thường xuyên được thực hiện. Mọi việc giữa dòng này và dấu đóng ngoặc } sẽ được lặp đi lặp lại cho đến khi mạch bị ngắt điện.

digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)

Phần đầu trong khung trên là 1 hàm gọi là digitalWrite(); nó giữ 2 thông tin: số chân cắm, và trạng thái HIGH (mở) hoặc LOW (tắt). Phần thông tin được thực hiên bởi hàm được gọi là đối số (arguments). Lúc biến led thể hiện nội dung bất cứ khi nào bạn gõ nó, mã số chân truyền tới digitalWrite(); là 13, và trạng thái là HIGH (mở). Dòng code này dẫn tới việc đèn LED trên mạch được bật sáng.

delay(1000); // wait for a second

delay(); là một trong những hàm Arduino. Nó giúp ngừng chương trình trong 1 khoảng thời gian, được viết trong mili giây - milliseconds. Dòng code này làm chương trinh dừng trong khoảng thời gian 1000ms, nói cách khác là 1 giây.

digitalWrite(led, LOW); // turn the LED off by making the voltage LOW

Như trên đã nói, digitalWrite(); có thể bật hoặc tắt một ổ output. Trong khoảng thời gian này chân 13 ở trang thái LOW (tắt)

delay(1000); // wait for a second

}

Dòng này ngừng chương trình khoảng 1 giây, và khi kết thúc dấu ngoặc } ở cuối của khung bên trên, chương trình bắt đầu lại ngay tức thì. Để tóm tắt là chương trình bật và tắt đèn LED trong khoảng thời gian 1 giây. Hãy thử thay đổi khoảng thời gian đó. Thay đổi số mili giây trong 1 hoặc cả 2 trạng thái delay();. Ví dụ bạn có thể tạo một cái chớp không đồng đều :

void loop() {

 digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)

 delay(2000); // wait for two seconds

 digitalWrite(led, LOW); // turn the LED off by making the voltage LOW

 delay(500); // wait for a half second

}

Thử áp dụng sự thay đổi cách nháy đèn lên bảng mạch Arduino của bạn. Nó có thực hiện như những gì bạn mong đợi không?

cuongbilly95
Author: Nguyễn Phú Cường
About: Nguyen Phu Cuong. Center for Training of Excellent Students (CTES), Hanoi University of Science and Technology (HUST), 1 Dai Co Viet road, Hai Ba Trung Dist., Hanoi, Vietnam. Mobile: +84 (0)986909050. https://www.fb.com/cuong.billy

Donate

Donate using PayPal
Amount: