Giới thiệu Volume xoay rotary encoder 360 độ
Mạch Volume xoay Rotary Encoder 360 độ không giới hạn số vòng quay, encoder đưa ra 2 xung vuông 90 độ gọi là 2 phase A và B, xung từ encoder đưa ra có thể dùng để nhận biết chiều quay, tốc độ quay, vị trí, module cung cấp 2 ngõ ra cho 2 phase và 1 ngõ ra dạng nút nhấn.
Encoder module KY-040 trông giống 1 module biến trở nhưng có ngõ ra dạng xung số. Bằng việc xoay núm vặn, ngõ ra xung của 2 kênh sẽ thay đổi với 1 độ lệch pha xác định (90 độ) giúp phân biệt được chiều xoay.
Đếm số lượng xung ngõ ra sẽ cho biết vị trí góc xoay, vị trí này là không giới hạn. Đồng thời module cũng cung cấp 1 nút nhấn có thể được lập trình để trở thành 1 nút reset giá trị đếm.
Sơ đồ nguyên lý và chức năng chân
- Chân cấp nguồn 3~5VDC
- GND: chân cấp nguồn âm 0VDC
- CLK: phase A
- DT: phase B
- SW: button
Sơ đồ dạng sóng volume xoay rotary encoder
Thông số kỹ thuật
- Điện áp hoạt động : 5V
- Dòng điện hoạt động : 20mA
- Công suất hoạt động : 100mW
- Chuẩn truyền : dạng xung vuông
- Độ phân giải : 20xung/vòng
- Nhiệt độ hoạt động : -40°C – 150°C
- Số chân : 5
- Số nút : 1
- Loại : Module
- Quét tích cực : Do người thiết kế
- Kích thước : 87mm*70mm*20mm
Chương trình Test
Nguyên lý kết nối
Chương trình
Thư viện : Tại đây ButtonFever.h hoặc tải trực tiếp từ Arduino IDE
#include <BfButton.h> int btnPin=3; //GPIO #3-Push button on encoder int DT=4; //GPIO #4-DT on encoder (Output B) int CLK=5; //GPIO #5-CLK on encoder (Output A) BfButton btn(BfButton::STANDALONE_DIGITAL, btnPin, true, LOW); int counter = 0; int angle = 0; int aState; int aLastState; //Button press hanlding function void pressHandler (BfButton *btn, BfButton::press_pattern_t pattern) { switch (pattern) { case BfButton::SINGLE_PRESS: Serial.println("Single push"); break; case BfButton::DOUBLE_PRESS: Serial.println("Double push"); break; case BfButton::LONG_PRESS: Serial.println("Long push"); break; } } void setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(angle); pinMode(CLK,INPUT_PULLUP); pinMode(DT,INPUT_PULLUP); aLastState = digitalRead(CLK); //Button settings btn.onPress(pressHandler) .onDoublePress(pressHandler) // default timeout .onPressFor(pressHandler, 1000); // custom timeout for 1 second } void loop() { // put your main code here, to run repeatedly: //Wait for button press to execute commands btn.read(); aState = digitalRead(CLK); //Encoder rotation tracking if (aState != aLastState){ if (digitalRead(DT) != aState) { counter ++; angle ++; } else { counter--; angle --; } if (counter >=100 ) { counter =100; } if (counter <=-100 ) { counter =-100; } Serial.println(counter); } aLastState = aState; }
Liên hệ làm mạch
- Phone: 0967.551.477
- Zalo: 0967.551.477
- Email: dientunhattung@gmail.com
- Chi tiết : Nhận làm mạch và hướng dẫn đồ án sinh viên
Tham khảo chương trình mẫu và thông tin linh kiện chi tiết tại:
Reviews
There are no reviews yet.