로터리 엔코더 기초 정리 – 실물부터 아두이노 실습까지!
로터리 엔코더는 회전 방향과 회전량을 디지털 신호로 변환하는 센서입니다. 본 글은 유튜브 영상과 함께 입문자를 위해 제작되었으며, 로터리 엔코더의 구조, 신호 특성, 아두이노 실습, 그리고 디스플레이 응용까지 순서대로 쉽게 설명합니다.
로터리 엔코더는 회전 방향과 회전량을 디지털 신호로 변환하는 센서입니다. 본 글은 유튜브 영상과 함께 입문자를 위해 제작되었으며, 로터리 엔코더의 구조, 신호 특성, 아두이노 실습, 그리고 디스플레이 응용까지 순서대로 쉽게 설명합니다.
로터리 엔코더는 축을 돌렸을 때 회전한 방향(CW/CCW)과 그 양을 알 수 있게 해주는 센서입니다.
아두이노용 로터리 엔코더는 주로 핀 5개짜리로 구성되어 있으며, 보통 다음과 같은 핀이 있습니다:
축을 회전시키면 CLK와 DT 핀에서 신호가 번갈아 나오며, 이를 통해 회전 방향을 구분할 수 있습니다.
로터리 엔코더를 테스터기로 테스트해보면, 회전할 때 A(CLK), B(DT) 핀의 전압이 번갈아 가며 변화하는 것을 볼 수 있습니다.
이 신호의 패턴을 보고 CW(시계 방향)인지 CCW(반시계 방향)인지 확인할 수 있습니다.
일반적으로 시계 방향(CW)으로 돌리면 CLK 신호가 먼저 바뀌고, 반시계 방향(CCW)으로 돌리면 DT 신호가 먼저 바뀝니다. 이런 차이를 아두이노가 읽어 방향을 판단합니다.
로터리 엔코더를 아두이노 우노 보드에 연결하여 회전 방향에 따라 숫자를 올리거나 줄이는 실습을 해볼 수 있습니다.
CLK은 3번 핀, DT는 2번 핀에 연결한다고 가정합니다.
int counter = 0;
int clkPin = 3;
int dtPin = 2;
int lastClkState;
void setup() {
pinMode(clkPin, INPUT);
pinMode(dtPin, INPUT);
Serial.begin(9600);
lastClkState = digitalRead(clkPin);
}
void loop() {
int currentClkState = digitalRead(clkPin);
if (currentClkState != lastClkState) {
if (digitalRead(dtPin) != currentClkState) {
counter++;
} else {
counter--;
}
Serial.println(counter);
}
lastClkState = currentClkState;
}
이 코드를 아두이노에 업로드하고 시리얼 모니터를 보면, 회전할 때마다 숫자가 증가하거나 감소하는 것을 확인할 수 있습니다.
로터리 엔코더로 조작한 숫자를 도트 매트릭스 LED에 표시하면 시각적으로 확인할 수 있습니다.
여기서는 MAX7219 드라이버 모듈과 8x8 도트 매트릭스를 사용합니다.
#include
LedControl lc = LedControl(12, 11, 10, 1); // DIN, CLK, CS
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
}
void loop() {
lc.clearDisplay(0);
// counter 값을 숫자 형태로 출력하는 함수 필요
// 예: lc.setDigit(0, 자리수, 숫자, false);
}
숫자 렌더링은 직접 배열을 만들거나 라이브러리를 활용해 표현할 수 있으며, 사용자 조작값을 직관적으로 보여줄 수 있습니다.
이 글은 로터리 엔코더의 기본 구조부터 아두이노 실습, 디스플레이 출력까지 초보자도 쉽게 따라 할 수 있도록 구성되었습니다.
영상을 함께 보며 실습하면 더 쉽게 이해할 수 있습니다. 앞으로 다양한 센서와 연동한 프로젝트도 소개할 예정이니 기대해주세요!