GIAO TIẾP NỐI TIẾP UART

Xin chào các bạn!
Chào mừng các bạn đến với Bài 7-8: UART truyền nhận dữ liệu trong chuỗi bài học Arduino.

Ở bài học này, chúng ta sẽ học cách:

  • Gửi dữ liệu từ máy tính đến Arduino qua cổng Serial
  • Arduino sẽ đọc dữ liệu này, sau đó bật hoặc tắt LED tương ứng
  • Cụ thể, khi gửi ký tự ‘1’, LED sẽ bật, và khi gửi ‘0’, LED sẽ tắt

🛠️ PHẦN 1: CHUẨN BỊ MẠCH

Truy cập https://www.tinkercad.com

🔧 Linh kiện cần có:

  • Arduino UNO
  • LED
  • 1 điện trở 220Ω
  • Dây nối

🔌 Cách nối mạch:

  1. Chân dài (dương) của LED → qua điện trở 220Ω → nối với chân D13 trên Arduino
  2. Chân ngắn (âm) của LED → nối về GND

👉 Đây là mạch cơ bản, LED nối với D13 – chúng ta sẽ điều khiển nó qua Serial Monitor.


💻 PHẦN 2: VIẾT CHƯƠNG TRÌNH

✏️ Mã chương trình:

void setup() {
Serial.begin(9600); // Bắt đầu giao tiếp Serial với baudrate 9600
pinMode(13, OUTPUT); // Thiết lập chân D13 là OUTPUT
}

void loop() {
if (Serial.available()) { // Nếu có dữ liệu nhận được từ máy tính
char c = Serial.read(); // Đọc 1 ký tự
if (c == '1') // Nếu là '1'
digitalWrite(13, HIGH); // Bật LED
else if (c == '0') // Nếu là '0'
digitalWrite(13, LOW); // Tắt LED
}
}

🧠 GIẢI THÍCH CHƯƠNG TRÌNH:

  • Serial.begin(9600): thiết lập tốc độ truyền là 9600 bps
  • Serial.available(): kiểm tra xem có dữ liệu từ máy tính gửi đến không
  • Serial.read(): đọc từng ký tự đơn từ luồng dữ liệu
  • digitalWrite() điều khiển LED dựa trên ký tự nhận được

📌 Lưu ý: Arduino xử lý dữ liệu ký tự, nên ‘1’ và 1 là khác nhau. Bạn cần gửi đúng ký tự chuỗi, không phải số.


▶️ PHẦN 3: CHẠY MÔ PHỎNG TRÊN TINKERCAD

🟢 Thực hiện như sau:

  1. Nhấn Start Simulation
  2. Nhấn vào nút Serial Monitor ở góc trên bên phải (biểu tượng màn hình)
  3. Tại ô nhập lệnh bên dưới, chọn “No line ending”, tốc độ 9600 baud
  4. Nhập ký tự:
    • Gửi ‘1’ rồi nhấn Enter → LED sẽ sáng
    • Gửi ‘0’ rồi nhấn Enter → LED sẽ tắt

🎉 Vậy là bạn đã điều khiển được LED bằng lệnh từ máy tính thông qua UART!


🎯 PHẦN 4: TỔNG KẾT

Sau bài học này, bạn đã nắm được:

  • Cách thiết lập giao tiếp UART (Serial) giữa Arduino và máy tính
  • Cách dùng Serial Monitor để gửi dữ liệu điều khiển thiết bị
  • Cách xử lý dữ liệu ký tự để điều khiển đầu ra (ở đây là LED)

📘 Gợi ý mở rộng:

  • Gửi các ký tự khác như ‘A’, ‘B’ để điều khiển nhiều thiết bị
  • Dùng Serial.print() để Arduino phản hồi ngược lại lên máy tính
  • Kết hợp với nút nhấn và cảm biến để gửi dữ liệu ngược từ Arduino về PC

BÀI TẬP THỰC HÀNH

🧪 Bài 1: Gửi phản hồi trạng thái LED về Serial Monitor

Mô tả:

  • Khi gửi ‘1’ hoặc ‘0’, LED bật/tắt như bài 7-8
  • Arduino gửi lại phản hồi “LED ON” hoặc “LED OFF” lên Serial Monitor

Gợi ý:

if (c == '1') {
digitalWrite(13, HIGH);
Serial.println("LED ON");
} else if (c == '0') {
digitalWrite(13, LOW);
Serial.println("LED OFF");
}

Kỹ năng: Truyền dữ liệu hai chiều, phản hồi lệnh – nền tảng cho giao tiếp máy chủ – thiết bị.


🧪 Bài 2: Nhập số qua Serial để nhấp nháy LED

Mô tả:

  • Gửi một số nguyên bất kỳ từ Serial Monitor (ví dụ: 5)
  • Arduino cho LED nhấp nháy đúng số lần tương ứng

Gợi ý: Đọc chuỗi số bằng Serial.readStringUntil('\n'), chuyển sang int rồi dùng vòng for.

Kỹ năng:

  • Nhận và xử lý số nhiều ký tự (string → số)
  • Ứng dụng điều khiển bằng tham số

🧪 Bài 3: Gửi chuỗi lệnh và phân tích từng ký tự

Mô tả:

  • Gửi chuỗi như "10101"
  • Arduino đọc từng ký tự trong chuỗi, với mỗi ký tự:
    • ‘1’ → LED sáng
    • ‘0’ → LED tắt
    • Delay 500ms giữa mỗi ký tự

Gợi ý: Dùng Serial.readString()for duyệt chuỗi → xử lý từng ký tự.

Kỹ năng: Phân tích và xử lý chuỗi lệnh điều khiển phức tạp


🧪 Bài 4: Gửi nhiệt độ giả lập từ Arduino về Serial

Mô tả:

  • Mỗi 2 giây, Arduino gửi ngẫu nhiên một số (giả lập nhiệt độ) về Serial Monitor
  • Ví dụ: “NHIET DO: 28°C”

Gợi ý: Dùng random(25, 35)Serial.println() trong chu kỳ millis() 2000ms.

Kỹ năng: Gửi dữ liệu cảm biến (giả lập) – ứng dụng giám sát từ xa.


🧪 Bài 5: Menu điều khiển qua Serial

Mô tả:

  • Gửi lệnh:
    • 1 → Bật LED
    • 2 → Tắt LED
    • 3 → Nhấp nháy 3 lần
    • ? → In menu hướng dẫn

Gợi ý: Mỗi lệnh là 1 case trong if-else hoặc switch-case, in menu khi bắt đầu.

Kỹ năng: Thiết kế giao diện điều khiển qua Serial, mô phỏng menu hệ thống nhúng.