카테고리 없음

로터리 엔코더 기초 정리

bigrkei 2025. 5. 9. 16:34

로터리 엔코더 기초 정리 – 실물부터 아두이노 실습까지!

로터리 엔코더는 회전 방향과 회전량을 디지털 신호로 변환하는 센서입니다. 본 글은 유튜브 영상과 함께 입문자를 위해 제작되었으며, 로터리 엔코더의 구조, 신호 특성, 아두이노 실습, 그리고 디스플레이 응용까지 순서대로 쉽게 설명합니다.

1. 로터리 엔코더란?

로터리 엔코더는 축을 돌렸을 때 회전한 방향(CW/CCW)과 그 양을 알 수 있게 해주는 센서입니다.
아두이노용 로터리 엔코더는 주로 핀 5개짜리로 구성되어 있으며, 보통 다음과 같은 핀이 있습니다:

  • GND - 접지
  • VCC - 전원 (5V)
  • CLK (A 신호)
  • DT (B 신호)
  • SW - 푸시 버튼 (눌렀을 때 인식)

축을 회전시키면 CLK와 DT 핀에서 신호가 번갈아 나오며, 이를 통해 회전 방향을 구분할 수 있습니다.

 

2. 테스터기로 로터리 엔코더 신호 테스트

로터리 엔코더를 테스터기로 테스트해보면, 회전할 때 A(CLK), B(DT) 핀의 전압이 번갈아 가며 변화하는 것을 볼 수 있습니다.
이 신호의 패턴을 보고 CW(시계 방향)인지 CCW(반시계 방향)인지 확인할 수 있습니다.

일반적으로 시계 방향(CW)으로 돌리면 CLK 신호가 먼저 바뀌고, 반시계 방향(CCW)으로 돌리면 DT 신호가 먼저 바뀝니다. 이런 차이를 아두이노가 읽어 방향을 판단합니다.

 

 

테스터기로 로터리 엔코더 신호 테스트

3. 아두이노로 숫자 증가/감소 테스트

로터리 엔코더를 아두이노 우노 보드에 연결하여 회전 방향에 따라 숫자를 올리거나 줄이는 실습을 해볼 수 있습니다.
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;
}

이 코드를 아두이노에 업로드하고 시리얼 모니터를 보면, 회전할 때마다 숫자가 증가하거나 감소하는 것을 확인할 수 있습니다.

4. 도트 매트릭스 LED에 숫자 표시하기

로터리 엔코더로 조작한 숫자를 도트 매트릭스 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);
}

숫자 렌더링은 직접 배열을 만들거나 라이브러리를 활용해 표현할 수 있으며, 사용자 조작값을 직관적으로 보여줄 수 있습니다.

마무리

이 글은 로터리 엔코더의 기본 구조부터 아두이노 실습, 디스플레이 출력까지 초보자도 쉽게 따라 할 수 있도록 구성되었습니다.
영상을 함께 보며 실습하면 더 쉽게 이해할 수 있습니다. 앞으로 다양한 센서와 연동한 프로젝트도 소개할 예정이니 기대해주세요!