로터리형 엔코더 모듈
: 전기모터, 엔진 회전 각도 / 속도 측정 시 사용
노브를 수직으로 눌러 출력 값 변경 가능
축이 일정량 회전 시 펄스 발생, 펄스 수 세어 축 각도 측정
사용 예시) 마우스 휠, 스피커 볼륨, 전자 피아노 설정 조절 버튼, 자동차 노브
축 회전 = 핀 A, B가 공통 핀과 접촉 = 2개 디지털 신호 출력
신호 펄스 계산 = 두 출력 中 1개 만 사용 but 회전 방향 결정 위해 2개 고려
좌측 시계방향 초(동시)파
우측 반시계방향 파(동시)초
핀 구성 : CLK / DT / SW / VCC / GND
특징 : 회전부를 회전시켜 전기신호 발생, 360도 무한 회전
실습 예제
결선 회로도
GND = GND
VCC = 5V
SW = D4
DT = D3
CLK = D2
int LED_T = 10; // 위 LED
int LED_B = 9; // 아래 LED
int CLK = 2; // CLK
int DT = 3; // DT
int SW = 4; // SW
static int oldCLK = LOW; // CLK 값 저장 변수
static int oldDT = LOW; // DT 값 저장 변수
int brightness = 143; // LED 밝기 값(=중간(0~255))
int location = 0; // 켜진 LED 위치 저장 변수 (0(=위) 초기화)
void setup() {
pinMode(CLK, INPUT_PULLUP); // 내장 풀업 저항 사용하는 입력
pinMode(DT, INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
pinMode(LED_T, OUTPUT);
pinMode(LED_B, OUTPUT);
}
void loop() {
if (digitalRead(SW) == LOW) { // 노브 눌렸을 때
changeLED(); // changeLED 함수 호출, LED 켜기
location++; // LED 위치 바꾸기
delay(300); // 중복 입력 방지
}
else { // 노브 돌렸을 때
brightness += (getDirection()*5); // 밝기 조절
if(brightness < 0) // LED 밝기 최솟값(0)이하 떨어지는 것 방지
brightness = 0;
if(brightness > 255) // LED 밝기 최댓값(255)이상 올라가는 것 방지
brightness = 255;
changeLED(); // 변화한 밝기값 적용
}
}
//방향 반환 함수
int getDirection() {
int direct = 0; // 방향 초기화
int newCLK = digitalRead(CLK); // 현재 CLK 값 저장 변수
int newDT = digitalRead(DT); // 현재 DT 값 저장 변수
if (newCLK != oldCLK) { // CLK 값 변한 경우
if (oldCLK == LOW) { // LOW에서 HIGH 경우
direct = oldDT * 2 - 1; // direct 값 변경
}
}
oldCLK = newCLK; // 갱신
oldDT = newDT;
return direct; // 시계방향 = -1, 반시계방향 = +1 반환
}
// LED 위치 조절 함수
void changeLED() {
if(location%2 == 1) { // 변수를 2로 나눈 나머지 = 1
analogWrite(LED_T, brightness); // 위 LED만 ON
analogWrite(LED_B, LOW);
}
else { // 나머지 = 0
analogWrite(LED_T, LOW);
analogWrite(LED_B, brightness); // 아래 LED만 ON
}
}
실행 결과
'Arduino' 카테고리의 다른 글
TCS3200 컬러 감지 센서 2 (0) | 2022.08.29 |
---|---|
TCS3200 컬러 감지 센서 1 (0) | 2022.08.29 |
피에조 부저 (0) | 2022.08.19 |
리드 스위치 모듈 KY-025 (Dry Reed Switch Sensor) (0) | 2022.08.19 |
적외선 PIR센서 (인체 감지 모션 센서) (0) | 2022.08.19 |