22. Cảm biến góc xoay - Rotary Encoder

../../_images/23.1.png

  • Rotary Encoder (hoặc gọi tắt là Encoder) là loại cảm biến có khả năng biến đổi chuyển động (chuyển động tịnh tiến, chuyển động quay của trục, …) thành tín hiệu đầu ra thành xung hoặc tín hiệu số

  • Ta cần phân biệt Rotary Encoder và Analog Rotary có sự khác nhau như sau:

    • Rotary Encoder:

      • Không giới hạn góc xoay, xoay được 360 độ vô hạn

      • Có thể xoay được 1 khoảng chính xác theo từng nấc

      • Giá trị đọc được là số nấc đã xoay qua trái hoặc qua phải

    • Rotary Analog:

      • Góc xoay bị giới hạn trong 1 khoảng nhất định

      • Không thể xoay được 1 khoảng chính xác

      • Giá trị đọc được là dạng analog (từ 0 đến 4095 đối với Yolo:Bit)

  • Rotary Encoder thường ứng dụng vào những dự án như: điều khiển tốc độ quạt, điều khiển tốc độ xe, điều khiển độ sáng đèn, điều khiển âm lượng, …

  • Trong hướng dẫn này, OhStem sẽ hướng dẫn bạn lập trình điều khiển tốc độ quạt bằng module Rotary Encoder.

1. Mua sản phẩm


some image

2. Thông số kỹ thuật


  • Thông số kỹ thuật:

    • Điện áp sử dụng: 3.3V

    • Độ phân giải 20 xung/vòng

    • Tín hiệu cảm biến: 2 pha

    • Kích thước của mạch: 24mm x 48mm x 16mm

  • Pinout của cảm biến:

Cảm biến có 4 chân, mỗi chân có chức năng như sau:

STT

Chân

Chức năng

1

GND

Nối đất

2

VCC

Cấp nguồn (3.3V)

3

SIGA (CLK)

Pha A

4

SIGB (DT)

Pha B

3. Kết nối


  • Bước 1: Chuẩn bị các thiết bị như sau:

../../_images/yolo.png ../../_images/mmr.png ../../_images/23.1.png ../../_images/quat_mini.png

Máy tính lập trình Yolo:Bit

Mạch mở rộng cho Yolo:Bit

Module Rotary Encoder (kèm dây Grove)

Quạt mini (kèm dây Grove)

Mua sản phẩm

Mua sản phẩm

Mua sản phẩm

Mua sản phẩm

  • Bước 2: Cắm Yolo:Bit vào mạch mở rộng

  • Bước 3: Sử dụng dây Grove cắm vào cảm biến

  • Bước 4: Kết nối Rotary Encoder và quạt mini với mạch mở rộng như sau:

../../_images/23.2.png

Vì module Rotary Encoder có 2 chân tín hiệu là chân CLK và chân DT do đó ta phải kết nối module Rotary Encoder vào các port có 2 chân tín hiệu của mạch mở rộng Yolo:Bit , không được kết nối module Rotary Encoder vào các port có 1 chân tín hiệu như port P0, port P1 hoặc port P2.

4. Hướng dẫn lập trình với OhStem App


  • Bước 1: Tải thư viện Rotary Encoder, bằng cách dán đường link sau vào phần tìm kiếm thư viện: https://github.com/AITT-VN/yolobit_rotary_encoder.git

    Xem hướng dẫn tải thư viện tại đây

    ../../_images/rotary.png

    Sau khi tải thư viện, trong danh mục khối lệnh sẽ xuất hiện các khối lệnh tương ứng:

    ../../_images/lenh_rotary.png

  • Bước 2: Để làm việc với quạt mini bạn hãy tải thư viện AIOT KIT , xem hướng dẫn tại đây

  • Bước 3: Lập trình điều khiển quạt bằng Rotary Encoder

    • Trước tiên chúng ta sẽ khởi tạo các chân, chế độ xoay và khoảng giá trị cho Rotary, như sau:

    ../../_images/23.3.png

    • Tiếp theo, gửi chương trình sau xuống Yolo:Bit:

    ../../_images/23.4.png

    Câu lệnh bật quạt chân P14 với tốc độ (0 -100) nằm trong danh mục khối lệnh AIOT KIT

Note

Giải thích chương trình: Chúng ta sẽ lập trình các mức độ của quạt khi xoay Encoder:

  • Đặt điều kiện “nếu đọc giá trị của rotary = 3” thì quạt sẽ quay ở mức độ cao nhất tương ứng với tốc độ 100% và hiển thị ra màn hình LED Yolo:Bit mức độ quạt đang hoạt động.

  • Tương tự như vậy ta sẽ tạo ra thêm các điều kiện để quạt quay ở mức độ 2 và mức độ 1 và mức 0 tương ứng với 50% và 25% và 0%.

5. Chương trình mẫu:


../../_images/23.5.png

6. Hướng dẫn lập trình Arduino


  • Mở phần mềm Arduino IDE. Xem hướng dẫn lập trình với Arduino tại đây.

  • Copy đoạn code sau, click vào nút Verify để kiểm tra lỗi chương trình. Sau khi biên dịch không báo lỗi, bạn có thể nạp đoạn code vào board.

// Định nghĩa cấu hình mắcro của cảm biến góc xoay và chân LED

#include "YoloBit.h"

Yolobit yolobit;

#define ROTARY_ANGLE_SENSOR P10
#define LED P13  // Chân LED được kết nối đến chân PWM P13 của YoloBit
#define ADC_REF 3.3 // YoloBit sử dụng 3V3, ADC_REF nên là 3,3
#define GROVE_VCC 3.3 // Cấp nguồn VCC của giao diện Grove thường là 3,3V
#define FULL_ANGLE 300 // Giá trị đầy đủ của góc quay là 300 độ

void setup()
{
  yolobit.serialBegin(9600); // Khởi tạo UART với tốc độ baud rate 9600
  yolobit.pinMode(ROTARY_ANGLE_SENSOR, INPUT); // Thiết lập chân cảm biến góc xoay là chế độ đầu vào
  yolobit.pinMode(LED, OUTPUT); // Thiết lập chân LED là chế độ đầu ra
}

void loop()
{
  float voltage;
  int sensor_value = yolobit.analogRead(ROTARY_ANGLE_SENSOR); // Đọc giá trị của cảm biến
  voltage = (float)sensor_value*ADC_REF/4095; // Chuyển đổi giá trị analog sang giá trị điện áp
  float degrees = (voltage*FULL_ANGLE)/GROVE_VCC; // Tính góc quay dựa trên giá trị điện áp đọc được
  yolobit.println("The angle between the mark and the starting position:"); // In thông báo lên serial monitor
  yolobit.println(degrees); // In giá trị góc quay lên serial monitor

  int brightness;
  brightness = map(degrees, 0, FULL_ANGLE, 0, 1023); // Chuyển đổi giá trị góc quay sang giá trị độ sáng của LED
  yolobit.analogWrite(LED, brightness); // Điều khiển độ sáng của LED thông qua kết nối PWM
  yolobit.delay(500); // Chờ 500ms
}

Note

Giải thích chương trình: Sau khi chạy chương trình, giá trị của độ sáng sẽ được chuyển từ giá trị analog 0- 4095 thành 0 - 100%. Khi núm xoay của cảm biến được vặn, độ sáng sẽ được thay đổi.