Chuyển đến phần nội dung
  • Tiếng Việt
    • English
    • Tiếng Việt

 

  • Tiếng Việt
    • English
    • Tiếng Việt
Tài liệu sử dụng

Robot Arduino

13
  • Tổng quan
  • Cài đặt Arduino IDE
  • Điều khiển LED
  • Điều khiển động cơ Servo
  • Điều khiển động cơ DC với L298N
  • Đọc cảm biến HC-SR04
  • Đọc cảm biến encoder
  • Đọc cảm biến dò line
  • Kết nối Module Bluetooth HM-10
  • Điều khiển xe với PID
  • Lập trình robot điều khiển từ xa
  • Lập trình robot tránh vật cản
  • Lập trình robot dò line

Robot ESP32

12
  • Tổng quan
  • Điều khiển LED
  • Điều khiển động cơ Servo
  • Điều khiển động cơ DC với L298N
  • Đọc cảm biến HCSR04
  • Đọc cảm biến Encoder
  • Đọc cảm biến dò line
  • Bluetooth – Kết nối module HM10
  • Bluetooth – Lập trình điều khiển xe từ xa
  • Wifi – Lập trình web html
  • Wifi – Lập trình điều khiển xe từ xa
  • Lập trình robot dò line

Robot ESP32 Camera

1
  • Tổng quan

Robot ESP32 Lidar

1
  • Tổng quan

Robot ESP32 Lidar & Camera

1
  • Tổng quan
Xem danh mục

Đọc cảm biến encoder

1. Mục tiêu bài học #

Sau bài học này, bạn sẽ:

  • Hiểu encoder là gì
  • Biết cách đọc xung encoder bằng Arduino Nano
  • Đếm số vòng quay của động cơ
  • Hiển thị giá trị encoder lên Serial Monitor
  • Ứng dụng encoder để đo tốc độ hoặc quãng đường robot

2. Encoder là gì #

Encoder là cảm biến dùng để đo:

  • Tốc độ quay
  • Số vòng quay
  • Quãng đường di chuyển của bánh xe

Khi động cơ quay, encoder sẽ tạo ra các xung ON/OFF liên tục.

Arduino sẽ đếm số xung này để biết bánh xe đã quay bao nhiêu.

Ví dụ:

  • 1 vòng quay tạo ra 20 xung

Nếu Arduino đếm được:

  • 20 xung → bánh quay 1 vòng
  • 40 xung → quay 2 vòng

3. Sơ đồ kết nối #

4. Code đọc encoder cơ bản #

volatile long encoderCount = 0;

void encoderISR() {
  encoderCount++;
}

void setup() {
  Serial.begin(9600);

  pinMode(2, INPUT_PULLUP);

  // Ngắt khi tín hiệu thay đổi
  attachInterrupt(digitalPinToInterrupt(2), encoderISR, CHANGE);
}

void loop() {

  Serial.print("Encoder Count: ");
  Serial.println(encoderCount);

  delay(200);
}

5. Nạp code và kiểm tra #

Bước 1: Nạp code

Bước 2: Mở Serial Monitor

Chọn:

  • Baudrate: 9600

Bạn sẽ thấy:

Encoder Count: 15
Encoder Count: 22
Encoder Count: 35

Giá trị sẽ tăng liên tục.

6. Giải thích code #

Biến encoderCount

volatile long encoderCount = 0;

Dùng để lưu số xung encoder.

volatile giúp Arduino luôn cập nhật giá trị mới nhất.

Hàm encoderISR

void encoderISR() {
encoderCount++;
}

Mỗi khi encoder tạo xung:

  • Arduino tự động chạy hàm này
  • Giá trị encoder tăng thêm 1

attachInterrupt

attachInterrupt(digitalPinToInterrupt(2), encoderISR, CHANGE);

Ý nghĩa:

  • Theo dõi chân D2
  • Khi tín hiệu thay đổi:
    • LOW → HIGH
    • HIGH → LOW
  • Gọi hàm encoderISR()

7. Các lỗi thường gặp #

Encoder không đếm

Nguyên nhân:

  • Chưa nối GND chung
  • Sai chân tín hiệu
  • Sai nguồn cấp

Giá trị nhảy lung tung

Nguyên nhân:

  • Nhiễu tín hiệu
  • Dây quá dài
  • Không dùng INPUT_PULLUP

Đếm thiếu xung

Nguyên nhân:

  • Dùng delay quá nhiều
  • Tốc độ động cơ quá nhanh

Không hiển thị gì

Kiểm tra:

  • Đã mở Serial Monitor chưa
  • Baudrate có đúng 9600 không

8. Ứng dụng #

Encoder thường dùng để:

  • Robot chạy chính xác quãng đường
  • Đo tốc độ bánh xe
  • PID điều khiển động cơ
  • Robot tự cân bằng
  • Robot dò line chính xác
  • Robot SLAM

9. Tổng kết #

Cập nhật vào Tháng 5 29, 2026

Cảm xúc của bạn là gì

  • Vui
  • Bình thường
  • Buồn

Chia sẻ bài viết này :

  • Facebook
  • X
  • LinkedIn
  • Pinterest
Đọc cảm biến HC-SR04Đọc cảm biến dò line
Table of Contents
  • 1. Mục tiêu bài học
  • 2. Encoder là gì
  • 3. Sơ đồ kết nối
  • 4. Code đọc encoder cơ bản
  • 5. Nạp code và kiểm tra
  • 6. Giải thích code
  • 7. Các lỗi thường gặp
  • 8. Ứng dụng
  • 9. Tổng kết
Bản quyền; 2026 - Giao diện WordPress tạo bởi CreativeThemes