✵
60/7/10/1A đường số 4, khu phố 5, P.Trường Thọ Q.Thủ Đức, TP.HCM 0986.977.330
HOTLINE LIÊN HỆ
0986.977.330
CỬA HÀNG VÀ ĐẠI LÝ
CH1: 60/7/10/1A đường số 4, khu phố 5, p.Trường Thọ, q.Thủ Đức, TP.HCM
Tel: 0986.977.330
CH2: Cầu Cái Sơn, ấp 2B, xã Nhơn Thạnh, TP.Bến Tre, tỉnh Bến Tre
Tel: 0986.977.330
THANH TOÁN TRỰC TUYẾN
Khách hàng có thể chuyển khoản qua số tài khoản sau:
AGRIBANK
- Chủ tài khoản: Huỳnh Minh Phú
- Số tài khoản: 6300205184282
- Địa chỉ: Chi nhánh 9, TP.HCM
VIETCOMBANK
- Tài khoản: Huỳnh Minh Phú
- Số tài khoản: 0381000510491
- Địa chỉ: Chi nhánh Thủ Đức, TP.HCM
Rotary Encoder (Encoder quay) được sử dụng để đo tốc độ động cơ. Module này có thể đo chiều thuận và chiều nghịch, đồng thời trong module có 1 nút nhấn khi ấn thanh quay sẽ reset lại quá trình đo. Xin gửi các bạn mã code mà mình đã lập trình cho nó và clip do chính mình làm.
Mã code chương trình:
/*
Chương trình ĐẾM SỐ VÒNG QUAY BẰNG ENCODER QUAY
Chương trình được viết bởi Huỳnh Minh Phú
Các bạn có thể tham khảo video thứ 44 để hiểu rõ về việc kết nối
Một encoder quay thông thường có 3 chân, nhìn từ mặt trước là A C B
Quay theo chiều kim đồng hồ A(on)>B(on)>A(off)->B(off)
Quay ngược chiều kim đồng hồ B(on)>A(on)>B(off)->A(off)
Ngoài ra còn có một chân có nút nhấn và 2 chân nguồn
Chương trình này hiện đo rất tốt khi chiều ngược chiều kim đồng hồ nhưng chiều cùng chiều kim đồng hồ thì đo chưa đạt
Mình đã mất 3 ngày cho nghiên cứu này
Vì công việc bận bịu nên mình đành tạm gác việc phát triển hướng này, mong các bạn sẽ bổ sung thêm
Các bạn có thể đo thủ công bằng cách đổi 2 chân DT và CLK nếu muốn đo cùng chiều kim đồng hồ
Hoặc 1 ngày nào đó khi có thời gian rãnh mình sẽ chỉnh việc đọc chiều quay cùng chiều kim đồng hồ cho chính xác
*/
// Cách nối các chân trên Encoder quay
#define encoderPinA 2 // Tương ứng chân DT trên Encoder quay
#define encoderPinB 3 // Tương ứng chân CLK trên Encoder quay
// Chân + nối nguồn 5V và chân GND nối cực âm
volatile unsigned int encoderPos = 0; // Cho vị trí đầu bằng 0
unsigned int lastReportedPos = 1; // Vị trí cuối bằng 1
static boolean rotating=false; // Quản lý debounce (giống như là chống nhiễu)
// các biến cho trình phục vụ ngắt interrupt service routine vars
boolean A_set = false;
boolean B_set = false;
//Đo tốc độ
unsigned int newposition;
unsigned int oldposition=0;
unsigned long newtime;
unsigned long oldtime=0;
float vantoc;
void setup() {
pinMode(encoderPinA, INPUT_PULLUP); // INPUT-PULLUP tương đương Mode INPUT và tự động nhận trạng thái HIGH hoặc LOW
pinMode(encoderPinB, INPUT_PULLUP);
// Chân encoder trên ngắt 0 (chân 2)
attachInterrupt(0, doEncoderA, CHANGE);
// Chân encoder trên ngắt 1 (chân 3)
attachInterrupt(1, doEncoderB, CHANGE);
Serial.begin(9600); // chuyển dữ liệu lên cổng Serial Port
}
// Vòng lặp chính, công việc được thực hiện bởi trình phục vụ ngắt
void loop() {
rotating = true; // Khởi động bộ debounce (có thể hiểu như bộ chống nhiễu)
newtime=millis();
newposition=encoderPos;
if (newtime-oldtime==1000){
detachInterrupt(0);
detachInterrupt(1);
vantoc=(newposition-oldposition)*60/20;
Serial.print("vantoc=");
Serial.println(vantoc,DEC);
oldposition=newposition;
oldtime=newtime;
attachInterrupt(0, doEncoderA, CHANGE);
attachInterrupt(1, doEncoderB, CHANGE);
}
}
// Ngắt khi chuyển trạng thái của A
void doEncoderA(){
// debounce
if ( rotating ) delay (1); // Chờ 1 chút
// Kiểm tra việc chuyển đổi trạng thái, xem có thật sự thay đổi trạng thái chưa
if( digitalRead(encoderPinA) != A_set ) { // debounce một lần nữa
A_set = !A_set;
// Cộng 1 nếu có tín hiệu A rồi có tín hiệu B
if ( A_set && !B_set )
encoderPos += 1;
rotating = false; // Không cần debounce nữa cho đến khi được nhấn lần nữa
}
}
// Ngắt khi thay đổi trạng thái ở B, tương tự như ở A
void doEncoderB(){
if ( rotating ) delay (1);
if( digitalRead(encoderPinB) != B_set ) {
B_set = !B_set;
// Trừ 1 nếu B rồi đến A
if( B_set && !A_set )
encoderPos -= 1;
rotating = false;
}
}
1,400,000 đChi tiết →
350,000 đChi tiết →
180,000 đChi tiết →
120,000 đChi tiết →
50,000 đChi tiết →
1,150,000 đChi tiết →
160,000 đChi tiết →
80,000 đChi tiết →
120,000 đChi tiết →
150,000 đChi tiết →
155,000 đChi tiết →
180,000 đChi tiết →
320,000 đChi tiết →
40,000 đChi tiết →
105,000 đChi tiết →
40,000 đChi tiết →
65,000 đChi tiết →
860,000 đChi tiết →
40,000 đChi tiết →
90,000 đChi tiết →
70,000 đChi tiết →
900,000 đChi tiết →
35,000 đChi tiết →
50,000 đChi tiết →
45,000 đChi tiết →
80,000 đChi tiết →
40,000 đChi tiết →
45,000 đChi tiết →
30,000 đChi tiết →
900,000 đChi tiết →
130,000 đChi tiết →
110,000 đChi tiết →
50,000 đChi tiết →
40,000 đChi tiết →
150,000 đChi tiết →
140,000 đChi tiết →
35,000 đChi tiết →
45,000 đChi tiết →
45,000 đChi tiết →
40,000 đChi tiết →
90,000 đChi tiết →
55,000 đChi tiết →
300,000 đChi tiết →
260,000 đChi tiết →
110,000 đChi tiết →
90,000 đChi tiết →
190,000 đChi tiết →
500,000 đChi tiết →
420,000 đChi tiết →
180,000 đChi tiết →
55,000 đChi tiết →