
I. GIỚI THIỆU VỀ MẠCH ARDUINO UNO
Mạch Arduino Uno là một trong những loại mạch phổ biến nhất được sử dụng cho nhiều mục đích công nghiệp cũng như việc giảng dạy về điện tử và lập trình.
Dưới đây là một vài thông số cơ bản của một mạch điện Arduino Uno.
Chi tiết hơn có thể tìm kiếm thông số trên trang chủ của Arduino.
II. LẬP TRÌNH CÙNG ARDUINO
Có rất nhiều ngôn ngữ lập trình khác nhau có thể được sử dụng để lập trình Arduino như C, Python, … tuy nhiên, giáo trình này sẽ hướng dẫn các bạn sử dụng lập trình kéo thả Blockly để điều khiển mạch Arduino.
1. Cài đặt phần mềm
Bước 1: Trước hết, chúng ta phải lên mạng để tải về những chương trình cần thiết. Các bạn có thể gõ lên thanh công cụ là github Blockly@duinohoặc truy cập vào đường link dưới đây.
https://github.com/technologiescollege/BlocklyArduino_AIO
Sau khi các bạn đã vào được trang github BlocklyArduino_AIO, màn hình của bạn sẽ hiện ra như sau.
Bước 2:Các bạn bấm vào ô hình chữ nhật màu xanh lá cây có chữ Code ở góc bên tay trái. Một ô cửa sổ sẽ hiện ra cho bạn. Các bạn bấm tiếp vào Download Zip để tải chương trình về máy.
Sau đó, các bạn lựa chọn vị trí ở trong ổ cứng của máy tính để các bạn tải về máy.
Sau khi tải thành công, vào địa chỉ mà các bạn đã lưu chương trình ở trên máy tính, các bạn sẽ nhìn thấy cửa sổ sau.
2. Giao diện của phần mềm Blockly@rduino
Sau khi đã tải về thành công, chúng ta kích đúp chuột trái vào file block@rduino_AIO.exe để chạy chương trình. Lưu ý, để chương trình chạy được, cần phải kết nối một bảng mạch Arduino với máy tính đang được dùng để lập trình.
Dưới đây là giao diện của chương trình khi đã chạy được thành công.
Nút Save project được sử dụng để lưu chương trình ở về máy tính.
Nút Load project được sử dụng để load chương trình từ máy tính lên app để viết chương trình.
Nút Open example sẽ mở ra một ô cửa sổ chứa các ví dụ khác nhau sử dụng mạch Arduino.
Nút màu xanh nước biển ở góc phía dưới bên tay trái ấn vào thì hiện ra một tab được dùng để tự tạo Block của mình.
Nút Modify examples được dùng để chỉnh sửa các ví dụ có sẵn.
Chương trình này được phát triển bởi người Pháp nên ngôn ngữ của nó là tiếng Pháp. Để chuyển sang tiếng Anh, chúng ta click chuột vào Project setup. Một ô cửa sổ sẽ hiện ra.
Ô chứa chữ Language được dùng để lựa chọn ngôn ngữ. Chúng ta sẽ chọn English. Ô chứa chứ OpenDyslexic được dùng để lựa chọn kiểu chữ.
Ô chứa chữ Board được dùng để lựa chọn loại bảng mạch chúng ta sẽ sử dụng để lập trình. Chúng ta sẽ lựa chọn bảng mạch Arduino Uno.
Sau khi hoàn thành xong các bước, chúng ta nhận vào nút Ok để kết thúc.
Nút bấm Configure Block được sử dụng để lựa chọn những loại Block mà mình sẽ sử dụng.
Mình sẽ bấm vào thanh hình chữ nhật ở trên đầu của ô cửa sổ, nó sẽ hiện ra các cấp độ và mức độ khác nhau của Block. Mình sẽ bấm vào ô All để hiển thị toàn bộ các block được sử dụng.
Sau khi đã chọn xong, mình sẽ nhấn vào Ok để hoàn thành chương trình. Vậy là mình đã thực hiện xong phần set up xong.
Bên cạnh việc tải chương trình về máy, các bạn cũng có thể làm việc online bằng cách truy cập vào đường link sau:
https://projecthub.arduino.cc/scanet/5756fb3f-c98f-4083-b230-0b44ff98a0bcSau đó các bạn bấm vào nút Blockly@rduino để vào giao diện lập trình.
3. Lập trình Arduino Uno
Trong lập trình Arduino, chúng ta sẽ thao tác chính với các kiểu dữ liệu sau. Int: số tự nhiên
Float: số thập phân
String: chuỗi kí tự
Char: mỗi đơn vị kí tự
Boolean: giá trị logic, gồm True và False.
Chương trình trong Arduino Blockly sẽ được đọc từ trên chạy xuống. Sau đây là các khối lệnh phổ biến được sử dụng nhiều trong Arduino Blockly.
Khối lệnh Loops
Bất cứ khối lệnh nào đưa vào trong khối lệnh Loops đều sẽ lặp lại nhiều lần. Số lần lặp lại phụ thuộc vào số mình điền vào, có vòng lặp sẽ lặp đi lặp lại vô hạn lần. Ở khối lệnh thứ 1 và thứ 2, đó là vòng lặp chạy theo số lần mà mình đưa ra yêu cầu để chạy theo. Ví dụ ở đây là chạy 10 lần. Ở khối lệnh thứ 3, vòng lặp sẽ chạy theo một điều kiện, khi điều kiện ấy là đúng thì vòng lặp tiếp tục chạy, khi điều kiện ấy trở thành sai thì bỏ vòng lặp. Ở khối lệnh thứ 4, vòng lặp sẽ chạy theo một biến i. Biến i sẽ chạy từ giá trị 1 đến giá trị 10 như ví dụ ở trên, sau khi hoàn thành 1 vòng lặp nó sẽ cộng thêm 1 hoặc một giá trị tùy ý do mình tự điền vào. Khi chạm đến 10 hoặc vượt quá 10 thì chương trình sẽ tự động ngừng lại. Ở khối lệnh cuối cùng, vòng lặp sẽ kết thúc khi chạy đến khối lệnh này.
Khối lệnh Logic
Khối lệnh điều kiện sẽ chạy theo một điều kiện xác định. Ở khối lệnh thứ nhất, chúng ta đặt một khối lệnh bên cạnh if để biểu thị điều kiện kiểm tra, ví dụ như 0 = 1. Nếu điều kiện đó là đúng, thì khối lệnh sẽ thực thi lệnh được bên cạnh chữ do. Ở khối lệnh thứ hai, chúng ta sẽ kiểm tra điều kiện của biến i ghi bên cạnh chữ Switch, nếu i bằng 1 chẳng hạn, hoặc i lớn hơn 10, thì sẽ thực hiện khối lệnh đặt bên cạnh chữ do. Ở khối lệnh thứ ba, đó là khối lệnh được dùng để kiểm tra hai kết quả có lớn hơn, bằng nhau hoặc nhỏ hơn. Ấn vào ô chữ nhật ở giữa để lựa chọn hình thức kiểm tra. Ở khối lệnh thứ tư là kiểm tra điều kiện đồng thời, hoặc 1 trong 2. Ở khối lệnh thứ năm là điều kiện ngược lại. Ở khối lệnh thứ sáu biểu thị giá trị Boolean là true (đúng) hoặc false(sai).
Khối lệnh Math
Các khối lệnh này được sử dụng để thực hiện hoặc biểu lộ các phép toán. Khối lệnh đầu tiên biểu thị giá trị số. Khối thứ 2 biểu thị giá trị góc. Khối thứ 3 biểu thị phép tính cộng, trừ, nhân, chia. Khối thứ 4 biểu thị các bất đẳng thức, lớn hơn, nhỏ hơn, bằng. Khói thứ 5 dùng để tính căn số. Khối thứ 6 được dùng để tính các hàm lượng giác. Khối thứ 7 được dùng để biểu thị các hằng số toán học như pi, e, Khối thứ 7 được dùng để kiểm tra tính chẵn lẻ của một số. Khối thứ 8 được dùng để tính tổng của một dãy. Khối thứ 9 được dùng để tính phần dư trong phép chia. Khối thứ 10 được dùng để giới hạn giá trị lớn nhất và bé nhất của một giá trị. Khối thứ 11 được dùng để chọn bừa 1 giá trị trong khoảng giữa 2 số. Khối thứ 11 được dùng để chọn bừa 1 phân số.
Khối lệnh Arrays
Khối lệnh này được sử dụng để thao tác với các chuổi và danh sách. Khối thứ nhất được sử dụng để tạo ra một chuỗi hoặc danh sách có tên xác định chứa những giá trị thuộc kiểu cụ thể và gồm tối đa bao nhiều thành phần. Khối thứ 2 được sử dụng để thay đổi một giá trị ở trong chuổi thành một giá trị khác. Khối thứ 3 được dùng để tạo 1 chuỗi rỗng với số lượng bất kì. Khối thứ 4 được dùng để tạo 1 chuỗi chứa những giá trị thuộc kiểu cụ thể. Khối thứ 5 được dùng để thay đổi giá trị của một giá trị trong chuỗi thành giá trị khác. Khối thứ 6 được dùng để trả về một giá trị ở trong chuỗi. Khói thứ 7 được dùng để lấy một giá trị có số thứ tự ở trong một chuỗi.

Khối lệnh Variable
Khối lệnh được sử dụng để tạo nên các biến. Click vào chữ Create variables sẽ hiện ra một cửa sổ để chúng ta có thể đặt tên biến.

Sau khi đã tạo xong biến, mình sẽ thấy tên của các hàm mới với biến mình đã tạo. Khối lệnh thứ nhất được sử dụng để gán giá trị cho biến mình đã tạo. Khối lệnh thứ hai được sử dụng để gán giá trị hằng số cho biến mình đã tạo và không thể thay đổi được nó. Khối lệnh thứ ba được sử dụng để gán kiểu cho một biến. Khối lệnh thứ tư khởi tạo một biến với kiểu xác định và có giá trị xác định. Khối lệnh thứ năm được sử dụng để thay đổi giá trị của một biến thành giá trị khác. Khối lệnh thứ 6 thể hiện biến.

Khối lệnh Function
Khối lệnh được sử dụng để thao tác tạo các hàm lệnh khác nhau để thực hiện các nhiệm vụ được giao. Khối lệnh đầu tiên được sử dụng để tạo ra các hàm có trả về giá trị như kết quả của một tính toán hoặc chữ cái. Chỗ type sẽ quy định giá trị trả về của hàm này thuộc kiểu nào. Khối lệnh thứ hai được sử dụng để tạo ra các hàm không trả về giá trị mà chỉ đơn thuần thực hiện hành động ví dụ như tính toán hoặc in ra màn hình.

Khối lệnh Arduino
Khối lệnh này sẽ bao gồm những câu lệnh được dùng để thao tác với mạch Arduino, cụ thể là mạch Arduino Uno. Lập trình Arduino gồm 3 phần.
Phần 1: Khởi tạo các biến, lựa chọn xem sử dụng các thư viện nào từ bên ngoài cho chương trình của mình.

Phần 2: Hàm setup() được sử dụng để chạy những hàm ở đầu chương trình để setup như gắn cổng, mặc định giá trị tốc độ trao đổi thông tin, …
Phần 3: Hàm loop() được dùng để chạy liên tục những hàm được cho vào trong đó. Khối lệnh số 1 ở bên tay trái được sử dụng để bắt đầu chương trình. Khối lệnh số 2 chính là hàm setup(). Bất cứ hàm nào cho vào trong khối lệnh này sẽ chạy đúng 1 lần duy nhất và chạy ở đầu chương trình. Khối lệnh thứ 3 chính là hàm loop(). Nó sẽ chạy ngay sau hàm setup() và bất cứ lệnh nào để trong khối lệnh này sẽ chạy liên tục không dừng. Khối lệnh thứ 4 là sự kết hợp của cả 2 khối lệnh trên. Khối lệnh thứ 5 được dùng để định nghĩa một biến. Ngay bên cạnh chữ Variable chúng ta sẽ cho khối lệnh Variable và bên cạnh chữ as chúng ta sẽ cho lấy khối lệnh chứa giá trị của chúng. Khối lệnh thứ 6 được dùng cũng để định nghĩa một biến. Khối lệnh thứ 7 được dùng để lấy thông tin từ một thư viện ở bên ngoài để dùng cho chương trình của mình. Ở trong ô chữ nhật xanh nhạt, mình có thể điền tên của file thư viện đó. Khối lệnh thứ 8 được dùng để lấy thông tin từ một file khác và dùng cho chương trình hiện giờ mình đang viết. Trong loạt khối lệnh dành cho Output, khối lệnh này được dùng để gửi giá trị đến các cổng khác nhau. Ví dụ, cổng digital sẽ nhận hai giá trị là 0 và 1, mỗi mức độ thì mạch sẽ cấp một hiệu điện thế nhất định cho cổng đấy.

Ví dụ từ 0,5 đến 0 V có thể tượng trưng cho mức 0. Từ 3,3 V đến 5 V có thể tượng trưng cho mức 1. HIGH tượng trưng cho mức 1. LOW tượng trưng cho mức 0. Khối lệnh thứ nhất được sử dụng để gắn cổng dẫn ra đèn led của mạch điện với một mức logic (HIGH hoặc LOW), Cổng này thường là cổng số 13 trên Arduino Uno. Khối lệnh thứ 2 được sử dụng để gắn một cổng digital với một mức logic. Khối lệnh thứ 3 được dùng để viết giá trị PWM vào một cổng xác định. Analog là một dạng tín hiệu liên tục, không bị ngắt quãng như Digital. Giá trị có thể là bất kì. PWM còn được gọi là tín hiệu giả analog. Như đã biết, digital pin chỉ cho phép 2 giá trị là 0 và 1. PWM cũng chỉ có 2 mức điện thế là thấp và cao nhưng thời gian giữa các xung tín hiệu là liên tục, qua đó nó trở thành dạng tín hiệu có thể coi như là liên tục với một mức độ chính xác nhất định. Tương tự như thế, khối lệnh thứ 4 được dùng dể viết giá trị vào một cổng Analog. 3 khối lệnh cuối có công dụng lần lượt giống khối lệnh 2, 3, 4 tuy chỉ có cách viết khác. Thay vì ta trực tiếp viết số mã hiệu của cổng thì ta sẽ gắn một khối code biểu thị số hiệu của cổng.

Trong mục Time, sẽ có 3 khối lệnh chính cần lưu ý. Khối lệnh số 1 được dùng để tạm dừng chương trình trong 1 đơn vị thời gian tính theo ms. Khối lệnh số 2 được dùng để tạm dừng chương trình trong 1 đơn vị thời gian tính theo s. Khối lệnh số 3 dùng để kiểm tra xem nếu tượng thời gian xác định đã trôi qua, thì thực hiện những khối lệnh được đặt ở trong nó. Khối lệnh số 4 được dùng để tính thời gian đã trôi qua từ khi bắt đầu theo ms. Tương tự thế, khối lệnh số 5 thời gian từ lúc bắt đầu nhưng theo đơn vị s.
Trong mục Serial Communication, sẽ có hai khối lệnh dưới đây cần lưu ý. Khối lệnh đầu tiên sẽ ra lệnh cho mạch thực hiện tốc độ giao tiếp thông tin. Tốc độ mặc định là 9600 bit/s nhưng có thể thay đổi được. Ví dụ như ở đây là 300 bps.

Khối lệnh thứ hai được dùng để in dự liệu theo dòng, Tức là mỗi giá trị được đặt ở trong dấu ngoặc kếp kia sẽ nằm trên đúng một dòng, nếu có khối lệnh in tiếp theo thì sẽ in ở dòng tiếp theo. Trong mục converting, ta sẽ có vài khối lệnh sau cần lưu ý. Khối lệnh số 1 để đổi giá trị sang kiểu char (character).Khối lệnh số 2 để đổi giá trị sang kiểu byte. Khối lệnh số 3 để đối giá trị sang kiểu int. Khối lệnh số 4 để đổi giá trị sang kiểu float. Khối lệnh số 5 để đổi giá trị sang kiểu String.

4. Ví dụ
Dùng Arduino Blockly để điều khiển động cơ Servo quay một góc xác định.
Trong khối lệnh setup(), ta có hai khối lệnh khác nhau. Khối lệnh đầu tiên được dùng để thiết lập tốc độ trao đổi thông tin là 115200 bps. Tiếp theo, khối lệnh tiếp theo được dùng để gắn cổng điều khiển của động cơ servo vào cổng số 19 ở trên bo mạch.
Trong khối lệnh loop(), ta có những câu lệnh sau. Khối lệnh đầu tiên được dùng để in ra giá trị lên trên Serial port để thể hiện giá trị góc mà mình đang muốn động cơ servo chạy đến, cụ thể ở đây là vị trí 0 độ. Khối lệnh tiếp theo được sử dụng để tạm dừng chương trình trong 2 s. Khối lệnh tiếp theo giống khối lệnh đầu để in ra vị trí mà hiện tại mình đang mong muốn động cơ servo của mình sẽ quay đến, cụ thể là 90 độ. Khối lệnh tiếp theo điều khiển động cơ servo chạy đến vị trí 90 độ. Khối lệnh cuối được dùng để tạm dừng chương trình trong 2s.

Toàn bộ chuỗi cụ thể của chương trình sẽ như sau. Ban đầu, mình sẽ in ra một dòng chữ là “Go to 0 degree” rồi động cơ servo sẽ chạy đến vị trí góc 0 độ rồi tạm nghỉ ở đó trong 2s. Rồi mình sẽ in tiếp ra dòng “Go to 90º” rồi động cơ servo sẽ chạy đến vị trí góc 90 độ, rồi dừng tại đó trong 2s. Sau đó, chương trình sẽ bắt đầu một chu trình mới, bắt đầu lại từ bước đầu cho đến khi ta ngắt nó khỏi chương trình.
Dùng Arduino Blockly để điều khiển Motor quay theo Joystick theo hướng xác định.
Lần này, mình sẽ sử dụng thêm một linh kiện điện tử mới là Adafruit motorshield ver 2 để hỗ trợ điều khiển động cơ. Trong khối lệnh setup(), có khối lệnh Serial communication để thiết lập tốc độ truyền tín hiệu ở mức 115200. Trong khối lệnh loop(), có khối lệnh điều khiển motor bằng joystick. Trục x của joystick được kết nối với cổng A0. Trục y của joystick được kết nối với cổng A1. Điều khiển 2 motor dc được gắn vào 2 cổng M1, M2 của motorshield, tốc độ nằm trong khoảng 0 đến 255 xung tín hiệu.


5. Load chương trình vào trong bo mạch.
Chương trình sau khi đã được hoàn tất có thể được load vào mạch để thực hiện. Chương trình này hỗ trợ kết nối với mạch điện để có thể thực thi, tuy nhiên, do cách đó hơi đôi chút phức tạp nên trong giáo án này sẽ hướng dẫn cách khác dài hơn đôi chút nhưng dễ dàng hơn.
Bước 1: Tải Arduino IDLE từ trên trang chủ của Arduino xuống máy.
Bước 2: Bấm vào file exe của file Arduino, một ô cửa sổ sẽ hiện ra chứa những thủ tục và thông tin cần thiết để tải Arduino về máy. Thực hiện theo những yêu cầu đó.
Bước 3: Sau khi tải thành công, trên máy tính của bạn sẽ hiển thị phiên bản Arduino bạn đã tải về. Click đúp chuột để vào biểu tượng của Arduino. Một ô cửa sổ sẽ hiện ra.
Bước 4: Sau khi đã bấm vào, ô cửa sổ sau sẽ hiện lên.

Tài liệu được trích dẫn, tham khảo từ các nguồn:
- Tài liệu team First Global Challenge VietNam
License.
This work is licensed under a Creative Commons Attribution-NonCommercial ShareAlike 4.0 International License.