이 튜토리얼에서는 로터리 엔코더 작동 원리와 아두이노와의 사용법을 배웁니다. 아래 비디오를 시청하거나 작성된 튜토리얼을 읽어보세요.
개요
로터리 엔코더는 회전축의 각도 위치를 결정하는 위치 센서 유형입니다. 회전 움직임에 따라 아날로그 또는 디지털 전기 신호를 생성합니다.
출력 신호나 센싱 기술에 따라 다양한 유형의 로터리 엔코더가 분류됩니다. 이 튜토리얼에서 사용할 특정 엔코더는 증분형 로터리 엔코더로, 회전을 측정하는 가장 간단한 위치 센서입니다.
이 엔코더는 쿼드러처 엔코더 또는 상대적 로터리 엔코더라고도 하며, 출력이 일련의 사각파 펄스입니다.
로터리 엔코더 작동 원리
엔코더를 자세히 살펴보고 작동 원리를 확인해 보겠습니다. 사각파 펄스가 어떻게 생성되는지 보겠습니다: 엔코더에는 공통 핀 C에 연결된 균등하게 간격된 접점 영역이 있는 디스크와 두 개의 별도 접점 핀 A, B가 있습니다.
디스크가 단계적으로 회전하기 시작하면 핀 A와 B가 공통 핀과 접촉하면서 두 개의 사각파 출력 신호가 생성됩니다.
두 출력 중 하나만으로 펄스를 세어 회전 위치를 알 수 있습니다. 하지만 회전 방향도 파악하려면 두 신호를 동시에 고려해야 합니다.
두 출력 신호가 위상 차 90도(90° out of phase)로 어긋나 있음을 알 수 있습니다. 엔코더가 시계 방향으로 회전하면 출력 A가 출력 B보다 앞서갑니다.
신호가 하이에서 로우로, 또는 로우에서 하이로 변할 때마다 두 출력 신호가 반대 값을 가집니다. 반대로 반시계 방향 회전 시 두 출력 신호는 같은 값을 가집니다. 이를 이용해 컨트롤러가 엔코더 위치와 회전 방향을 쉽게 읽도록 프로그래밍할 수 있습니다.
로터리 엔코더 아두이노 예제
아두이노로 실습 예제를 만들어 보겠습니다. 이번에 사용할 모듈은 브레이크아웃 보드 형태로 5개 핀이 있습니다. 첫 번째 핀이 출력 A, 두 번째가 출력 B, 세 번째가 버튼 핀, 나머지 두 개는 VCC와 GND입니다.
출력 핀은 아두이노 보드의 아무 디지털 핀에 연결하면 됩니다.
필요한 부품은 아래 링크에서 구할 수 있습니다:
로터리 엔코더 모듈……………….
아두이노 보드 ……………………………
브레드보드와 점퍼 와이어 ………
소스 코드
아두이노 코드입니다:
/* 아두이노 로터리 엔코더 튜토리얼
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define outputA 6
#define outputB 7
int counter = 0;
int aState;
int aLastState;
void setup() {
pinMode(outputA, INPUT);
pinMode(outputB, INPUT);
Serial.begin(9600);
// 출력 A의 초기 상태 읽기
aLastState = digitalRead(outputA);
}
void loop() {
aState = digitalRead(outputA); // 출력 A의 "현재" 상태 읽기
// 이전 상태와 현재 상태가 다르면 펄스 발생
if (aState != aLastState) {
// 출력 B 상태가 출력 A 상태와 다르면 시계 방향 회전
if (digitalRead(outputB) != aState) {
counter++;
} else {
counter--;
}
Serial.print("Position: ");
Serial.println(counter);
}
aLastState = aState; // 이전 상태를 현재 상태로 업데이트
}코드 언어: Arduino (arduino)
코드 설명: 엔코더 연결 핀 정의와 프로그램에 필요한 변수 정의. setup에서 두 핀을 입력으로 설정, 시리얼 통신 시작, 출력 A의 초기값을 읽어 aLastState 변수에 저장.
loop에서 출력 A를 다시 읽어 aState 변수에 저장. 엔코더를 돌려 펄스가 발생하면 두 값이 달라져 첫 번째 if 문이 참이 됩니다. 두 번째 if 문으로 회전 방향 판별: 출력 B 상태가 출력 A 상태와 다르면 카운터 증가, 같으면 감소. 시리얼 모니터에 결과 출력 후 aLastState를 aState로 업데이트.
이것만으로 기본 예제는 완료입니다. 코드 업로드 후 시리얼 모니터를 열고 엔코더를 돌리면 값이 출력됩니다. 사용한 모듈은 한 바퀴에 30 카운트입니다.