Arduino 전위차계와 로터리 엔코더의 차이점은 무엇입니까

Arduino Jeon Wichagyewa Loteoli Enkodeoui Chaijeom Eun Mueos Ibnikka



전위차계와 로터리 엔코더는 모두 회전을 감지하거나 위치를 감지하는 데 사용됩니다. 이들은 전자 분야에서 다양한 용도로 사용되는 전기 기계 장치입니다. 또한 다양한 프로젝트를 만들기 위해 Arduino와 인터페이스할 수 있습니다. 이 문서는 전위차계와 로터리 엔코더 간의 근본적인 차이점을 보여줍니다.

전위차계란?

전위차계는 가변 저항기 또는 가변 저항기라고 부를 수 있습니다. 전위차계의 축 회전에 따라 저항 값이 달라집니다. 전위차계는 설정된 거리로만 회전할 수 있습니다. 아날로그 및 디지털 전위차계가 모두 있지만 거의 비슷합니다. 아날로그 전위차계는 Arduino, Raspberry Pi 및 기타 장치의 마이크로컨트롤러와 인터페이스할 수 있습니다. 전위차계에는 입력 전압 핀 Vcc, 접지 핀 GND 및 입력 신호 핀인 세 개의 핀이 있습니다. 신호 핀은 Arduino에 입력을 제공합니다.









로터리 엔코더란?

로터리 엔코더는 로터리 노브의 각도 위치를 감지하고 마이크로컨트롤러 또는 연결된 다른 장치에 신호를 보냅니다. 공통 핀에 연결된 균일한 간격의 접촉 영역이 있는 디스크가 있습니다. 또한 로터리 엔코더에는 특정 요구 사항에 따라 ON 및 OFF 신호를 제공하는 푸시 버튼 또는 로터리 스위치가 내장되어 있습니다.







로터리 엔코더의 핀 배치도 및 핀 설명

아래 주어진 다이어그램은 로터리 엔코더의 핀을 보여줍니다. 이러한 핀은 다음과 같이 설명됩니다.

출력 B 또는 CLK



이 핀은 노브 또는 로터리 엔코더가 회전한 횟수를 출력합니다. 노브를 돌릴 때마다 CLK는 HIGH와 LOW의 사이클을 완료합니다. 1회전으로 계산됩니다.

출력 A 또는 DT

회전 방향을 결정하는 로터리 엔코더의 두 번째 출력 핀입니다. CLK 신호보다 90° 뒤쳐져 있습니다. 따라서 상태가 CLK의 상태와 같지 않으면 회전 방향은 시계 방향이고 그렇지 않으면 시계 반대 방향입니다.

스위치

스위치 핀은 푸시 버튼이 눌렸는지 여부를 확인하는 데 사용됩니다.

VCC

이 핀은 5V 공급 장치에 연결됩니다.

GND

이 핀은 접지에 연결됩니다.

전위차계와 로터리 엔코더의 차이점

사양 전위차계 로터리 엔코더
회전 전위차계는 한 방향으로만 회전할 수 있으며 그것도 원의 3/4에 대해 회전할 수 있습니다. 로터리 엔코더는 시계 방향과 시계 반대 방향 모두에서 연속적으로 360° 회전할 수 있습니다.
아날로그 또는 디지털 장치 전위차계는 대부분 저항 값의 변화를 통해 위치의 변화를 측정하는 아날로그 입력 장치입니다. 로터리 엔코더는 각도 위치를 감지하고 디지털 값을 제공하는 디지털 입력 장치입니다.

입력 위치 수 전위차계는 아날로그 장치이기 때문에 값을 취할 수 있는 무한한 수의 입력 위치를 가집니다. 로터리 엔코더에는 한정된 수의 입력 위치가 있습니다.

Arduino로 전위차계 설정

전위차계는 로터리 엔코더보다 Arduino로 설정하기가 더 쉽습니다. 전위차계에는 VCC, GND 세 개의 핀과 Arduino에 연결된 INPUT 핀만 있습니다. 전위차계와 Arduino의 인터페이스는 다음과 같습니다.

Arduino에서 전위차계를 프로그래밍하는 것이 로터리 엔코더보다 쉽습니다. 다음은 두 가지 모두에 대한 샘플 구문 코드입니다.

전위차계 샘플 코드

const int 포트 = A0; // 입력 핀 선언
무효 설정 ( ) {
  pinMode ( 냄비, 입력 ) ; // 전위차계에서 가져온 설정 값 ~처럼 입력
직렬 시작 ( 9600 ) ;
}
무효 루프 ( ) {
int potValue = 아날로그 읽기 ( 냄비 ) ; // 전위차계가 입력한 값 읽기
지도 ( 냄비 값, 0 , 1023 , 0 , 255 ) ; // 일치하도록 입력 값 스케일링 8 -조금
Serial.println ( 냄비값 ) ; // 전위차계에 입력된 값을 출력
지연 ( 100 ) ;
}

전위차계 코드는 매우 쉽고 간단합니다. 아두이노의 아날로그 입력 핀은 단순히 전위차계에서 입력을 받도록 선언한 다음 analogRead() 및 map() 함수를 사용하여 전위차계에서 읽은 정확한 값을 읽어서 제공합니다.

로터리 엔코더와 Arduino의 인터페이스

로터리 엔코더에는 5개의 핀이 있습니다. 로터리 엔코더의 VCC와 GND는 Arduino의 VCC와 GND에 연결됩니다. 나머지 핀 CLK, DT 및 SW는 Arduino의 디지털 입력 핀에 연결됩니다.

로터리 엔코더용 아두이노 코드

// 로터리 엔코더 입력
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
정수 카운터 = 0 ;
int 현재 CLK 상태;
int lastCLKState;
문자열 전류 방향 = '' ;
서명되지 않은 긴 lastButtonPressTime = 0 ;
무효 설정 ( ) {
// 인코더 핀 설정 ~처럼 입력
  pinMode ( CLK_PIN, 입력 ) ;
  pinMode ( DT_PIN, 입력 ) ;
  pinMode ( SW_PIN, 입력_풀업 ) ;
// 직렬 모니터 설정
직렬 시작 ( 9600 ) ;
// CLK의 초기 상태 읽기
lastCLKState = 디지털 읽기 ( CLK_PIN ) ;
}
무효 루프 ( ) {
// CLK의 현재 상태 읽기
currentCLKState = 디지털 읽기 ( CLK_PIN ) ;
// 만약에 마지막 CLK의 현재 상태가 다르며, 그 다음에 맥박이 뛰다
// 에만 반응 1 이중 카운트를 피하기 위한 상태 변경
만약에 ( 현재CLK상태 ! = lastCLK상태 && 현재CLK상태 == 1 ) {
// DT 상태가 CLK 상태와 다른 경우, 그 다음에
// 엔코더가 시계 반대 방향으로 회전하므로 감소합니다.
만약에 ( 디지털 읽기 ( DT_PIN ) ! = 현재CLK상태 ) {
카운터--;
현재 방향 = 'CCW' ;
} 또 다른 {
// 인코더는 시계 방향으로 회전하므로 증분합니다.
카운터++;
현재 방향 = 'CW' ;
}
직렬.인쇄 ( '회전 방향: ' ) ;
직렬.인쇄 ( 현재방향 ) ;
직렬.인쇄 ( ' | 카운터 값: ' ) ;
Serial.println ( 카운터 ) ;
}
// 기억하세요 마지막 CLK 상태
lastCLKState = 현재CLKState;
// 버튼 상태 읽기
int buttonState = 디지털 읽기 ( SW_PIN ) ;
// LOW 신호를 감지하면 버튼을 누릅니다.
만약에 ( 버튼 상태 == 낮음 ) {
// 50ms가 지난 경우 마지막 LOW 펄스는
// 버튼을 눌렀다 떼었다가 다시 눌렀습니다.
만약에 ( 밀리 ( ) - lastButtonPressTime > 오십 ) {
Serial.println ( '버튼을 눌렀다!' ) ;
}
// 기억하세요 마지막 버튼 누르기 이벤트 시간
lastButtonPressTime = 밀리초 ( ) ;
}
// 놓다 ~에 약간의 지연 돕다 독서를 디 바운스
지연 ( 1 ) ;
}

위의 코드에서 loop() 함수에서 CLK 핀의 상태를 확인합니다. 이전 상태와 같지 않으면 회전 노브가 회전했음을 나타냅니다. 이제 노브의 회전 방향을 확인하기 위해 CLK의 현재 상태와 DT의 상태를 비교합니다. 두 상태가 같지 않으면 노브가 시계 방향으로 회전했음을 나타내고 카운터는 회전 노브의 위치를 ​​표시하기 위해 해당 값을 증가시킵니다. 반대의 경우 카운터가 감소합니다.

애플리케이션

전위차계는 주로 제어 기능이 필요한 곳에 사용됩니다. 그들은 볼륨 조절, LED 밝기 조절에 사용됩니다. 반면에 로터리 엔코더는 광범위한 응용 분야를 제공합니다. 로봇 공학, 의료 장비, 자동화 및 게임에 사용됩니다.

결론

전위차계와 로터리 엔코더는 둘 다 전자 분야에서 특히 유용한 장치입니다. 로터리 엔코더는 360°까지 연속적으로 회전할 수 있기 때문에 전위차계에 비해 진보된 것입니다. 마찬가지로 현대 전자 제품에 더 많은 응용 프로그램이 있으며 전위차계보다 사용하기가 약간 더 어렵습니다. .