[#18 WEKIT 아두이노 종합키트 공략] 로터리 엔코더 모듈 공략하기

 


안녕하세요 디바이스마트입니다


이번 시간은 로터리 엔코더 모듈에 대해

알아보도록 하겠습니다



"

로터리 엔코더란?

"

시계방향 또는 반 시계방향으로 360도 회전하는 모듈이며,

손잡이(노브) 부분을 눌러 스위치 역할로 사용할 수 있는 모듈입니다.


현재 로터리 엔코더는 모터와 드라이브 장치 또는 자동화와 관련된

모든 장비에서 감지 업무를 담당하는 모듈입니다.


하지만 실생활에서 쓰이는 가전제품에 경우 세탁기, 전자레인지

등 물높이를 맟추거나 작동시간을 조절하는 조절기능으로 많이 사용됩니다



이러한 로터리 엔코더는 회전 할때마다 특정 펄스를 발생시켜,

특정신호를 주는 특성으로 이번 시간엔 로터리 엔코더 모듈

기본적인 원리와 동작방법에 대해 포스팅 해보도록 하겠습니다 !




WK 로터리 엔코더 모듈
[WK-ADB-K07-26]

▼스펙▼

정격전압 : 5V, 3.3V

포트 : 펄스 신호

펄스 수 : 1회전 당 20스텝 펄스 출력


크기 : 32 * 25 * 25mm

무게 : 8g




- 로터리 엔코더 원리 -

로터리 엔코더는 시계 방향, 반 시계 방향으로 회전하며,

회전 할 시 A 신호와 B 신호의 위상 차가 발생하게 됩니다



로터리 엔코더는 총 3개의 신호 핀으로 구성되며,

회전할 시 신호 특성입니다 !!


이러한 특성들을 이용해서 회전 시 카운트로 동작 하도록 설계할 수 있으며,

이번 시간에 실습 할 예제를 통해 로터리 엔코더 모듈로

LED 밝기를 제어해 보도록 하겠습니다~



아두이노 우노와 쉴드 사용법을 모를 경우 !

[아두이노 우노와 센서 쉴드 사용법]

🔼클릭🔼




1. 회로도 & 배선도




2. 코드 예제


(로터리 엔코더 예제 코드)

// 로터리 엔코더 모듈 예제(https://www.devicemart.co.k)
// 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 밝기를 제어하는 영상입니다


A센서 값 = ENOTA
int Last = LOW;     
 
if ((Last == LOW) && (ENOTA == HIGH))
         if (ENOTB == LOW) {    
               encoder0Pos = encoder0Pos - 10;
         }     
        else {                
          encoder0Pos = encoder0Pos + 10;
        }
                                                                              
     }
      Last = ENOTA;    


로터리 엔코더 모듈에 초기값은 A , B 모두 HIGH 입니다.

Last 초기값을 LOW로 지정한 뒤 업로드한다면, 처음 한번은 IF문이 적용됩니다.

하지만 Last=ENOTA 코드를 통해 Last는 HIGH가 되어 IF문이 진행되지 않습니다.

따라서 한번 회전할 때마다 Last 가 LOW -> HIGH로 출력 되어 1회전 시 IF문이 한번 출력 되게 됩니다.

if (ENOTB == LOW) 반 시계 방향 1회 회전 시  카운트 -10
else 시계 방향 1회 회전 시 카운트 +10



지금까지 로터리 엔코더 모듈에 대해 실습 해 보았습니다

위 예제를 참고해서 여러가지 방식으로

작동해보시길 바랍니다 ~

그럼 저는 다음 센서/모듈 포스팅으로 돌아오겠습니다

🔽상품정보🔽

WK 로터리 엔코더 모듈 [바로가기]

WK 아두이노 우노 호환보드 (USB-C타입) [바로가기]

WK 아두이노 호환 센서 쉴드 V5.0 [바로가기]

WK Piranha LED 모듈 [바로가기]

[아두이노 우노 스페셜 센서 종합키트]


댓글 쓰기

0 댓글