아두이노 로터리 엔코더 LED
이 튜토리얼에서는 로터리 인코더의 출력값에 따라 LED의 밝기를 제어하기 위해 아두이노를 프로그래밍하는 방법을 배울 것입니다.
준비물
| 1 | × | 아두이노 우노 R3 | 쿠팡 | 아마존 | |
| 1 | × | USB 2.0 타입 A-to-B 케이블 (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 2.0 타입 C-to-B 케이블 (USB-C PC용) | 아마존 | |
| 1 | × | 로터리 엔코더 (Rotary Encoder) | 쿠팡 | 아마존 | |
| 1 | × | LED | 쿠팡 | 아마존 | |
| 1 | × | LED Module | 아마존 | |
| 1 | × | 220Ω Resistor | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
LED 및 로터리 엔코더에 대하여
LED와 로터리 엔코더(핀아웃, 작동 원리, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:
선연결

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 코드
/*
* 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다
* 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-rotary-encoder-led
*/
#include <Servo.h>
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
#define LED_PIN 9
#define DIRECTION_CW 0 // 시계 방향
#define DIRECTION_CCW 1 // 반시계 방향
int counter = 0;
int direction = DIRECTION_CW;
int CLK_state;
int prev_CLK_state;
int brightness = 125; // 중간 값
void setup() {
Serial.begin(9600);
// 엔코더 핀을 입력으로 설정
pinMode(CLK_PIN, INPUT);
pinMode(DT_PIN, INPUT);
// 로터리 엔코더의 CLK 핀의 초기 상태를 읽음
prev_CLK_state = digitalRead(CLK_PIN);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 로터리 엔코더의 CLK 핀의 현재 상태를 읽음
CLK_state = digitalRead(CLK_PIN);
// CLK의 상태가 변경되었다면, 펄스가 발생한 것임
// 이중 카운트를 피하기 위해 상승 에지(LOW에서 HIGH로)에만 반응
if (CLK_state != prev_CLK_state && CLK_state == HIGH) {
// DT 상태가 HIGH인 경우
// 엔코더는 반시계 방향으로 회전하고 있음 => 카운터 감소
if (digitalRead(DT_PIN) == HIGH) {
direction = DIRECTION_CCW;
counter--;
brightness -= 10; // 이 값을 변경할 수 있음
} else {
// 엔코더는 시계 방향으로 회전하고 있음 => 카운터 증가
direction = DIRECTION_CW;
counter++;
brightness += 10; // 이 값을 변경할 수 있음
}
if (brightness < 0)
brightness = 0;
else if (brightness > 255)
brightness = 255;
// 카운터에 따라 LED의 밝기를 설정
analogWrite(LED_PIN, brightness);
Serial.print("COUNTER: ");
Serial.print(counter);
Serial.print(" | BRIGHTNESS: ");
Serial.println(brightness);
}
// 마지막 CLK 상태 저장
prev_CLK_state = CLK_state;
}
사용 방법
- 아두이노를 USB 케이블을 통해 PC에 연결합니다
- 아두이노 IDE를 열고, 올바른 보드 및 포트를 선택합니다
- 위의 코드를 복사하고 아두이노 IDE로 열기
- 아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드합니다
- 시리얼 모니터 열기
- 로터리 인코더를 회전시킵니다
- LED의 밝기를 확인합니다
- 시리얼 모니터에서 결과를 확인합니다
8
Serial.println("Hello World!");
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
COUNTER: 1 | BRIGHTNESS: 135
COUNTER: 2 | BRIGHTNESS: 145
COUNTER: 3 | BRIGHTNESS: 155
COUNTER: 4 | BRIGHTNESS: 165
COUNTER: 5 | BRIGHTNESS: 175
COUNTER: 6 | BRIGHTNESS: 185
COUNTER: 7 | BRIGHTNESS: 195
코드 설명
소스 코드의 주석 줄에 있는 줄별 설명을 읽으세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.