Arduino là gì?
Arduino là nền tảng mã nguồn mở về phần cứng và phần mềm được xây dựng với mục đích giúp cho người yêu thích điện tử, học sinh sinh viên hoặc giới chuyên nghiệp có thể tạo ra thiết bị có khả năng tương tác với môi trường thông qua các cảm biến.
Trong bài viết này, Nghĩa sẽ hướng dẫn các bạn cách cài đặt kết nối Unity với Arduino qua cổng USB và thực hành một bài test demo cơ bản với cảm biến siêu âm đo khoảng cách nhé.
Phần cứng bao gồm 1 board mạch được thiết kế trên nền tảng AVR Atmel 8bit, hoặc ARM Atmel 32-bit, những model hiện tại được trang bị 1 cổng USB, 6 chân đầu vào analog, 14 chân I/O digital.
Phần mềm là một môi trường phát triển IDE có thể chạy được trên Windows, Mac, Linux cho phép người dùng viết chương trình cho Arduino bằng C/C++
Bài viết dưới đây hướng dẫn kết nối Arduino với Unity, cách lấy giá trị của cảm biến được nối vào board Arduino. Khi kết nối được với Unity có thể mở rộng ra rất nhiều ứng dụng. Ví dụ sử dụng Hololens kết nối với Arduino thông qua BLE (Bluetooth Low Energy) để điều khiển các thiết bị xung quanh.
Bài viết dưới đây sử dụng:
Ngoài board Arduino R3 các bạn cũng có thể sử dụng ESP8266 hoặc ESP32 được tích hợp sẵn bluetooth và wifi. Hoặc module tích hợp như M5Stack có sẵn bluetooth, wifi, cảm biến gia tốc, pin, màn hình TFT. Tất cả đều sử dụng C++ và ArduinoIDE để lập trình hoặc Visual Studio Code nhưng phải cài thêm plugin PlatformIO
Cách tải và cài đặt
1. Cài đặt Arduino IDE
Từ link phía dưới hãy chọn phiên bản phù hợp với OS của bạn để tải về cài đặt
https://www.arduino.cc/en/Main/Software
2. Cài đặt Java
Từ link phía dưới hãy chọn phiên bản Java phù hợp với hệ điều hành, ở trong hình hiện đang sử dụng Windows-x64
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
3. Khởi tạo
- Sau khi cài đặt ArduinoIDE tiến hành cấu hình ban đầu
- Hãy chọn loại board đang sử dụng「Tools」→「Board」→「Arduino Uno」
- Sau đó chọn cổng kết nối USB「Tools」→「Serial Port」→「COM3」
- Cuối cùng chọn 「Tools」→「Programmer」→「AVR ISP」
4. Thiết lập cảm biến siêu âm đo khoảng cách
- Hãy gắn như hình bên dưới
- Chân [GND] ↔ [POWER/-]
- Chân [VCC] ↔ [POWER/+]
- Chân [TRIG] ↔ [INPUT (digitalport)]
- Chân [ECHO] ↔ [OUTPUT (Analogport)]
Tín hiệu xung rất ngắn (5 micro giây-cực đại) được phát ra từ cảm biến [TRIG] để đo khoảng cách. Sau đó, cảm biến sẽ tạo ra xung HIGH trên cảm biến [ECHO] cho đến khi nhận được tín hiệu phản xạ từ mã PIN. Độ rộng xung tương ứng với thời gian sóng siêu âm được truyền từ cảm biến và trở lại.
Tốc độ của âm thanh trong không khí là 340 m / s (hằng số vật lý), tương đương 29.412 micro giây / cm (106 / (340 * 100)). Sau khi tính thời gian, chia cho 29,412 để tính khoảng cách.
5. Code trên ArduinoIDE
const int trig = 12;
const int echo = 11;
void setup()
{
Serial.begin(9600);
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
}
void loop()
{
unsigned long duration;
int distance;
digitalWrite(trig,0);
delayMicroseconds(2);
digitalWrite(trig,1);
delayMicroseconds(5);
digitalWrite(trig,0);
duration = pulseIn(echo,HIGH);
distance = int(duration/2/29.412);
Serial.print(distance);
Serial.println("cm");
delay(200);
}
6. Kiểm tra kết quả tại Serial monitor
7. Kết nối Arduino và Unity
- Khởi động Unity
- Chọn「File」→「Build Settings…」→「Player Settings」→「Api Compatibility Level」、Tại thuộc tính「Api Compatibility Level」 Để thay đổi「.NET2.0」 sang「.NET4.0」
- Dưới nhãn Hierarchy bấm nút Create -> UI -> Image để tạo background cho UI
- Khi mới tạo thì image nhỏ nên sẽ Anchor lại phủ màn hình
- Chọn Object Image vừa tạo bên cửa sổ Inspector chọn ký hiệu Anchor như hình
- Giữ phím Alt và chọn như hình
- Sau đó tạo text để hiện kết quả của cảm biến siêu âm
- Giống như cách tạo Image phía trên, tạo Text như hình dưới
- Sau đó setting text như hình để text phóng to và nằm chính giữa
- Tạo script C#
- Thực hiện code C# như phía dưới
public class ArduinoController : MonoBehaviour
{
private Text m_DistanceText; //距離の表示するテキスト
private SerialPort m_SerialPort; //USBポート
void Start()
{
m_DistanceText = FindObjectOfType<Text>(); //シンでのテキストを探す
m_SerialPort = new SerialPort(“COM5”, 9600); //ポートを指定する
m_SerialPort.Open(); //ポートを開く
}
void Update()
{
if (m_SerialPort.IsOpen) // Arduinoと接続することを確認
{
string data = m_SerialPort.ReadLine(); // Arduinoからのデータを取得する
float dis = 0;
if (float.TryParse(data, out dis)) //Arduinoからのデータは数かどうか確認する
{
m_DistanceText.text = dis + “cm”; //画面に表示する
}
}
}
private void OnApplicationQuit()
{
m_SerialPort.Close();//アプリを閉める時ポートを閉める
}
}
- Cuối cùng gắn script vừa code vào object canvas
- Chọn object Canvas trên cửa sổ Hierarchy, cửa sổ Inspector bên phải bấm nút Add Component trên thanh tìm kiếm nhập tên script vừa tạo và chọn
- Sau cùng bấm nút play sẽ thấy được kết quả
Video demo
Demo với Arduino UNO R3 và HC SR04:
Dưới đây là Video demo kết quả đọc dữ liệu khoảng cách từ cảm biến siêu âm rồi hiện lên Unity realtime. Có thể sử dụng thêm Module HC-05 hoặc HC-10 cho chuẩn BLE để truyền dữ liệu mà không cần dây cáp nhưng bù lại phải có thêm module battery làm nguồn cho mạch nên mình ưu tiên sử dụng M5Stack hơn. (xem video bên dưới)
Arduino Demo mạch cảm biến đo khoảng cách với Unity với Arduino UNO R3 và Cảm biến siêu âm HC SR04
Test trên M5Stack:
Với M5Stack thì có sẵn màn hình TFT để hiện kết quả nên không cần Unity nữa. Giao diện có thể tùy biến linh động, trong video sử dụng thư viện M5Avatar để hiện kết quả. Hơn nữa M5Stack sử dụng board ESP32 nên có sẵn wifi và bluetooth có thể mở rộng ra truyền qua ứng dụng Android/iOS code bằng Unity hoặc bất kỳ ngôn ngữ nào khác.
Arduino Demo mạch cảm biến đo khoảng cách với M5Stack