안녕하세요 디바이스마트입니다
이번 시간은 로터리 엔코더 모듈에 대해
알아보도록 하겠습니다
"
로터리 엔코더란?
"
시계방향 또는 반 시계방향으로 360도 회전하는 모듈이며,
손잡이(노브) 부분을 눌러 스위치 역할로 사용할 수 있는 모듈입니다.
현재 로터리 엔코더는 모터와 드라이브 장치 또는 자동화와 관련된
모든 장비에서 감지 업무를 담당하는 모듈입니다.
하지만 실생활에서 쓰이는 가전제품에 경우 세탁기, 전자레인지
등 물높이를 맟추거나 작동시간을 조절하는 조절기능으로 많이 사용됩니다
이러한 로터리 엔코더는 회전 할때마다 특정 펄스를 발생시켜,
특정신호를 주는 특성으로 이번 시간엔 로터리 엔코더 모듈에
기본적인 원리와 동작방법에 대해 포스팅 해보도록 하겠습니다 !
[WK-ADB-K07-26]
▼스펙▼
정격전압 : 5V, 3.3V
포트 : 펄스 신호
펄스 수 : 1회전 당 20스텝 펄스 출력
크기 : 32 * 25 * 25mm
무게 : 8g
- 로터리 엔코더 원리 -
로터리 엔코더는 시계 방향, 반 시계 방향으로 회전하며,
회전 할 시 A 신호와 B 신호의 위상 차가 발생하게 됩니다
로터리 엔코더는 총 3개의 신호 핀으로 구성되며,
회전할 시 신호 특성입니다 !!
이러한 특성들을 이용해서 회전 시 카운트로 동작 하도록 설계할 수 있으며,
이번 시간에 실습 할 예제를 통해 로터리 엔코더 모듈로
LED 밝기를 제어해 보도록 하겠습니다~
아두이노 우노와 쉴드 사용법을 모를 경우 !
🔼클릭🔼
1. 회로도 & 배선도
2. 코드 예제
// LED 밝기 제어 및 점멸
#define ENOTS_PIN 4
#define ENOTB_PIN 3
#define ENOTA_PIN 2
#define LED_PIN 5 //핀번호 지정
int ENOTS;
int ENOTB;
int ENOTA;
int n = LOW;
int Last = LOW;
int encoder0Pos = -10; // 변수 초기값 설정
void setup() {
Serial.begin(9600); //시리얼 통신
pinMode(ENOTS_PIN,INPUT);
pinMode(ENOTB_PIN,INPUT);
pinMode(ENOTA_PIN,INPUT);
pinMode(LED_PIN, OUTPUT); //핀 모드 지정
}
void loop() {
ENOTS = digitalRead(ENOTS_PIN);
ENOTB = digitalRead(ENOTB_PIN);
ENOTA = digitalRead(ENOTA_PIN); //센서 값 지정
if ((Last == LOW) && (ENOTA == HIGH)) { // 센서 값이 HIGH -> LOW 로 변경될때
if (ENOTB == LOW) { // B 값이 변할 경우 -10 (반 시계방향 회전)
encoder0Pos = encoder0Pos - 10;
}
else { // A 값이 변할 경우 +10 (시계방향 회전)
encoder0Pos = encoder0Pos + 10;
}
Serial.print (" LED 밝기 : ");
Serial.println (encoder0Pos); // 회전 시 변화하는 값
}
Last = ENOTA; // Last 변수 값 = A -> HIGH if 문 무한 방지
analogWrite(LED_PIN,encoder0Pos); // LED 제어
if(ENOTS == LOW){ // 푸쉬 버튼 눌렀을 때 LED 점멸
Serial.print (" LED 밝기 : ");
Serial.print (encoder0Pos);
Serial.println (" 점멸 ");
analogWrite(LED_PIN,encoder0Pos);
delay(500);
analogWrite(LED_PIN,0);
delay(500);
}
}
▲
위 예제는 로터리 엔코더 카운트 예제로,
LED 밝기를 제어하는 영상입니다
encoder0Pos = encoder0Pos - 10;
}
else {
encoder0Pos = encoder0Pos + 10;
}
로터리 엔코더 모듈에 초기값은 A , B 모두 HIGH 입니다.
Last 초기값을 LOW로 지정한 뒤 업로드한다면, 처음 한번은 IF문이 적용됩니다.
하지만 Last=ENOTA 코드를 통해 Last는 HIGH가 되어 IF문이 진행되지 않습니다.
따라서 한번 회전할 때마다 Last 가 LOW -> HIGH로 출력 되어 1회전 시 IF문이 한번 출력 되게 됩니다.
else 시계 방향 1회 회전 시 카운트 +10
지금까지 로터리 엔코더 모듈에 대해 실습 해 보았습니다
위 예제를 참고해서 여러가지 방식으로
작동해보시길 바랍니다 ~
그럼 저는 다음 센서/모듈 포스팅으로 돌아오겠습니다
0 댓글