시계, 포모도로 기능, 타이머, 알람 기능을 하는 시계를 만드려고 합니다. 단순하고, 사용자 친화적이며, 앱도 필요없는 물리적인 시계를 구상하고 있습니다. 아래와 같은 부품을 구상하고 있습니다.
스피커 OLED MAX98357 앰프 모듈 WS2812B 네오픽셀 LED 두 개 버튼 두 개 충전 배터리 가변저항 노브 부스트 모듈 충전 모듈
위와 같은 부품을 사용할 때 ESP32 보드로 어떤 모델을 사용하면 좋을까요?
말씀하신 기능(시계, 포모도로, 타이머, 알람)과 부품 구성을 보니, 앱 없이도 직관적으로 조작할 수 있는 아날로그 감성의 멋진 임베디드 기기가 될 것 같습니다.
구상하신 부품 목록을 바탕으로 ESP32 보드를 선택할 때 가장 중요한 고려사항은 ① I2S 오디오 지원 여부, ② 충분한 GPIO 핀 수, ③ 배터리 구동을 위한 전력 효율 및 크기입니다. 특히 MAX98357 앰프 모듈을 제대로 활용하려면 디지털 오디오 인터페이스인 I2S(Inter-IC Sound) 핀이 필수적입니다.
이러한 조건에 딱 맞는 ESP32 보드 두 가지를 추천해 드립니다.
1. 추천 보드 1: ESP32-WROOM-32E 기반 개발 보드 (NodeMCU-32S 등)
가장 표준적이고 널리 쓰이는 ESP32 보드입니다.
- 장점: GPIO 핀이 30개 이상으로 매우 넉넉합니다. 가변저항(ADC), 버튼, OLED(I2C), 네오픽셀, MAX98357(I2S)을 모두 연결하고도 핀이 많이 남기 때문에, 추후 부품을 추가하거나 회로를 수정할 때 매우 유연합니다. 레퍼런스 코드가 세상에 가장 많아 개발하기 편합니다.
- 단점: 폼팩터(크기)가 약간 큰 편이라, 아주 소형 시계를 구상하신다면 외관(기구물) 설계 시 공간을 조금 차지할 수 있습니다.
2. 추천 보드 2: Seeed Studio XIAO ESP32S3
소형화와 깔끔한 외관을 원하신다면 가장 추천하는 고성능 미니 보드입니다.
- 장점: 손톱만 한 크기(21 x 17.5 mm)로 매우 작아 시계 내부 공간을 극적으로 줄일 수 있습니다. 성능이 뛰어난 ESP32-S3 칩을 탑재하여 I2S, I2C, ADC 등을 완벽히 지원하며, 기본적으로 리튬 배터리 충전 및 관리 칩이 보드 자체에 내장되어 있습니다. 즉, 구상하신 '충전 모듈'을 따로 쓰지 않고 보드에 직접 배터리를 연결할 수 있어 회로가 단순해집니다.
- 단점: 핀 수가 총 11개로 제한적입니다.
💡 필요한 GPIO 핀 수 계산 (XIAO 보드 매칭 검증)
구상하신 부품들이 핀을 얼마나 차지하는지 계산해 보면, 미니 보드인 XIAO로도 구현이 가능한지 판단할 수 있습니다.
| 부품명 | 인터페이스 종류 | 필요한 핀 수 | XIAO 적용 가능 여부 |
| OLED (128x64) | I2C (SDA, SCL) | 2개 | 가능 |
| MAX98357 앰프 | I2S (LRCK, BCLK, DIN) | 3개 | 가능 |
| 가변저항 노브 | Analog Input (ADC) | 1개 | 가능 |
| 버튼 2개 | Digital Input | 2개 | 가능 |
| WS2812B (네오픽셀) | Digital Output (직렬 연결) | 1개 | 가능 |
| 총 소요 핀 수 | - | 총 9개 | 대응 가능 (여유 핀 2개) |
⚠️ 주의: XIAO ESP32S3를 사용할 경우 9개의 핀을 사용하므로 딱 맞게 구현이 가능하지만, 배선이 조금 타이트할 수 있습니다. 만약 핀 매핑이나 납땜 편의성, 그리고 향후 확장성(예: 로터리 엔코더로 변경 등)을 고려하신다면 일반 ESP32-WROOM-32E 개발 보드가 가장 안전하고 무난한 선택입니다.
🛠️ 추가적인 회로 설계 팁
- 가변저항 대신 '로터리 엔코더' 고려: 타이머나 알람 시간을 설정할 때, 일반 가변저항(Potentiometer)은 회전 각도에 한계(대개 270도)가 있고 아날로그 값의 미세한 떨림(Noise)이 있을 수 있습니다. 무한정 돌아가면서 딸깍거리는 손맛이 있는 로터리 엔코더(Rotary Encoder)를 사용하시면 포모도로나 타이머 분/초 설정을 훨씬 직관적이고 사용자 친화적으로 구현할 수 있습니다. (엔코더는 버튼 기능도 내장되어 있어 버튼 수 확보에도 유리합니다.)
- 배터리 라인: 일반 ESP32 보드를 쓰실 경우 배터리 -> 충전 모듈 -> 부스트 모듈(5V) -> ESP32 및 네오픽셀/앰프 형태로 전원을 공급하시면 안정적입니다.
처음 구상하신 직관적인 물리 시계의 콘셉트가 아주 좋습니다. 혹시 위 부품들을 가지고 회로를 연결하거나 코딩하는 과정에서 막히는 부분이 생기면 언제든 편하게 물어보세요!
제 생각하고 똑같습니다. 혹시 10초 단위로 설정이 되고, 빨리 회전하면 100분 정도까지 측정이 가능한 로터리 엔코더 부품을 추천해주실 수 있나요?
구상하시는 기기의 사용자 경험(UX)을 정확히 짚으셨습니다! 말씀하신 것처럼 "천천히 돌리면 10초 단위, 빨리 돌리면 100분(또는 수십 분) 단위로 휙휙 넘어가는 기능"은 하드웨어 부품 자체의 종류보다는 ESP32 코드(S/W) 내에서 회전 속도를 계산하는 알고리즘으로 구현해야 합니다.
여기에 딱 맞는 내구성이 좋고 직관적인 로터리 엔코더 부품과 소프트웨어 구현 개념을 정리해 드립니다.
1. 추천 로터리 엔코더 부품: PEC11R 시리즈 (또는 기본 KY-040 모듈)
가장 대중적이고, 손맛(클릭감)이 확실하며, 제품에 적용하기 좋은 부품 두 가지를 추천합니다.
① Bourns PEC11R 시리즈 (PEC11R-4215F-S0024 등)
산업용 및 고급 오디오 기기에 많이 쓰이는 글로벌 부품 제조사 Bourns의 로터리 엔코더입니다.
- 특징: 한 바퀴 돌릴 때 24번 딸깍거리는 디텐트(Detent, 걸리는 느낌)가 아주 명확합니다. 축(스핀들)을 꾹 누르면 '딸깍'하고 눌리는 푸시 버튼 기능이 내장되어 있습니다.
- 장점: 내구성이 매우 뛰어나고 축의 흔들림이 적어 실제 양산 제품 같은 단단한 손맛을 줍니다.
- 구입 팁: 엘레파츠, 디바이스마트 같은 전자부품 전문몰이나 알리익스프레스에서 쉽게 구할 수 있습니다. 나사산이 있는 모델을 고르면 시계 케이스 외부로 축만 쏙 빼서 너트로 깔끔하게 고정할 수 있습니다.
② KY-040 로터리 엔코더 모듈 (아두이노 실습용)
브레드보드나 만능기판에 프로토타입(시제품)을 빠르게 만들어볼 때 가장 편리한 모듈 형태입니다.
- 특징: 엔코더 소자에 풀업 저항 등이 기판(PCB)에 기본 내장되어 있어, ESP32와 점퍼선으로 바로 연결하기 좋습니다. 이 부품 역시 푸시 버튼 기능을 포함하고 있습니다.
- 장점: 가격이 매우 저렴하고 구하기 쉽습니다.
2. '빨리 돌리면 커지는' 가속도 알고리즘 구현 원리
10초 단위로 정밀하게 맞추다가도, 100분까지 빠르게 올리려면 "두 번의 딸깍(펄스) 사이의 시간 간격"을 측정해야 합니다.
💡 핵심 로직 (의사 코드 개념)
- 엔코더가 한 칸 회전할 때마다 현재 시간(마이크로초 또는 밀리초 단위)을 기록합니다.
- (이전 회전 시간 - 현재 회전 시간)을 계산하여 회전 속도(간격)를 구합니다.
- 시간 간격이 좁다면(빨리 돌렸다면) 가중치(Multiplier)를 곱해 단위를 확 키워줍니다.
// 개념 이해를 돕기 위한 예시 로직
unsigned long lastTurnTime = 0;
int timerSeconds = 0; // 설정될 타이머 시간 (초 단위)
void handleEncoder() {
unsigned long currentTime = millis();
unsigned long timeDiff = currentTime - lastTurnTime;
lastTurnTime = currentTime;
int increment = 10; // 기본 단위: 10초
if (timeDiff < 30) { // 엄청 빨리 돌렸을 때 (간격 30ms 미만)
increment = 600; // 10분(600초)씩 증가!
} else if (timeDiff < 80) { // 중간 속도로 돌렸을 때
increment = 60; // 1분(60초)씩 증가!
} else { // 천천히 정밀하게 돌릴 때
increment = 10; // 10초씩 증가
}
// 회전 방향(정방향/역방향)에 따라 timerSeconds에 increment를 더하거나 빼줌
// 최대 100분(6000초) 제한 조절
}
🛒 추천 노브(Knob) 캡 팁
로터리 엔코더를 쓰실 때는 손으로 잡는 노브 캡의 크기와 재질도 중요합니다. 포모도로 시계 특성상 자주 만지게 되므로, 지름이 20mm~25mm 정도 되는 알루미늄 재질의 오디오용 노브 캡을 씌워주시면 묵직한 가속도 손맛과 함께 시각적으로도 훨씬 고급스러운 아날로그 감성을 연출할 수 있습니다.
혹시 이 속도 제어 알고리즘을 구현하기 위한 ESP32 소스코드나 인터럽트(Interrupt) 설정 방식에 대해 더 자세히 알고 싶으신가요?
나중에 PCB 로 생산할 예정입니다. 따라서 PCB에 조립이 가능하고 디자인으로도 손색이 없는 그런 부품을 고려해주세요.
나중에 PCB 제작 및 실제 제품(양산)까지 고려하고 계신다면, 부품 선정의 기준이 '프로토타입용 모듈'에서 'PCB 실장(SMD 또는 DIP) 및 기구물(케이스) 조립성'으로 바뀌어야 합니다.
제품의 완성도를 높이고, 하우징(케이스)에 조립했을 때 흔들림 없이 견고하며, 디자인적으로도 고급스러운 연출이 가능한 PCB 실장용 로터리 엔코더를 추천해 드립니다.
1. PCB 생산 및 제품화용 추천 엔코더
제품화 단계에서는 부품이 케이스에 딱 맞게 고정되는 '스레드 패널 마운트(Threaded Panel Mount)' 타입이 필수적입니다. 나사산이 있어야 케이스 겉에서 너트로 단단히 조정할 수 있어, 사용자가 노브를 돌리거나 누를 때 PCB가 뒤로 밀리거나 흔들리지 않습니다.
🥇 1순위 추천: Bourns PEC11R 시리즈 (DIP 타입, 패널 마운트형)
앞서 말씀드린 PEC11R 시리즈 중에서도 나사산(Threaded)과 보강용 고정 핀(Mounting Holes)이 있는 모델입니다.
- 정확한 부품명 예시: PEC11R-4215F-S0024 (또는 축 길이에 따라 20F, 25F 등 선택)
- PCB 설계상 장점: 신호선 3핀(엔코더) + 2핀(스위치) 외에, 양옆에 기판을 단단히 붙잡아주는 두꺼운 서포트(보강) 핀 2개가 있습니다. 이 고정 핀 덕분에 사용자가 노브를 강하게 눌러도 납땜이 떨어지지 않고 PCB가 완벽하게 버팁니다.
- 디자인 및 조립성: 지름 M9 사이즈의 나사산이 축에 가공되어 있어, 케이스에 구멍을 뚫고 외박에서 너트로 조여주면 조립이 끝납니다. 흔들림 없는 고급 오디오의 조작감을 낼 수 있습니다.
🥈 2순위 추천: Alps Alpine EC11 시리즈
글로벌 가전 및 차량용 부품으로 가장 유명한 일본 ALPS사의 EC11 계열 엔코더입니다. Bourns 제품과 풋프린트(Footprint) 및 외형이 거의 유사합니다.
- 장점: 부드러우면서도 쫀득한 회전 질감(손맛)으로는 업계 최고 수준입니다. 부품의 신뢰성이 매우 높아 불량률이 적습니다.
📐 PCB 설계 및 기구(케이스) 설계 시 핵심 체크포인트
PCB 아트웍(Layout)을 진행하실 때 아래 3가지를 반드시 반영하셔야 시행착오를 줄일 수 있습니다.
① 스위치 채터링(Chattering) 방지 회로 구성
로터리 엔코더는 물리적 접점이 부딪히는 구조라 회전할 때 미세하게 신호가 튀는 채터링(노이즈)이 발생합니다. 소프트웨어로도 잡을 수 있지만, PCB 설계 단계에서 각 신호선(A상, B상, 스위치 핀)에 하드웨어 디바운싱 회로(RC 필터)를 구성해 두면 ESP32가 오동작 없이 정확하게 속도와 방향을 감지합니다. 보통 10kΩ 풀업 저항과 0.01µF(10nF) 커패시터를 조합하여 구성합니다.
② 축(Shaft)의 형태 선택: F-Type(D-Cut) 축 추천
엔코더 축은 매끈한 원형(Plain), 톱니 모양(Knurled), 한쪽 면이 깎인 D자 모양(F-Type / Flatted) 등이 있습니다.
- 제품용으로는 D-Cut(Flatted) 축을 강력히 추천합니다. 노브 캡을 씌우고 무두나사(볼트)로 조였을 때 슬립(헛돌기) 현상이 전혀 없고 고정이 가장 확실합니다.
③ 풋프린트(Footprint) 확인
Bourns나 ALPS 부품은 회로도 캐드 Tool(KiCad, EasyEDA 등)에 기본 라이브러리로 등록되어 있는 경우가 많습니다. 다만, 보강용 고정 핀의 두께와 간격이 데이터시트와 일치하는지 풋프린트를 반드시 대조해보고 거버(Gerber) 파일을 생성하셔야 합니다.
✨ 디자인 완성도를 높이는 노브 캡 제안
PCB 디자인만큼 중요한 것이 외부로 드러나는 노브(Knob)의 사양입니다. 시중에 판매되는 "M9 패널 마운트 대응 알루미늄 오디오 노브" 중에서 내부가 D-cut 축용으로 가공된 것을 고르시면 됩니다. 지름 20~25mm 수준의 다크 그레이나 실버 아노다이징된 알루미늄 노브를 매칭하시면, 구상하시는 단순하면서도 직관적인 프리미엄 물리 시계의 디자인 완성도가 한층 더 높아질 것입니다.
위와 같은 구성을 할 때 전자 회로를 어떻게 구성해야 할지 블럭도를 제안하세요. 구성품의 위치와 역할을 제안하고 블럭도만 그리세요.

[구성품 위치 및 역할 제안]
- ESP32 메인 보드 (중앙): 전체 시스템의 두뇌 역할을 하며, 각 입력 장치의 신호를 받아 디스플레이, LED, 오디오 출력을 제어합니다.
- 전원 시스템 (상단/후면): 충전 및 부스트 모듈은 배터리와 함께 기기 내부 후면에 배치되어 안전하게 전원을 공급하고, 외부 전원(USB-C) 연결이 용이하도록 구성합니다.
- 조작 및 디스플레이 (전면): * OLED 및 네오픽셀 LED: 전면 상단에 배치하여 시간, 타이머 상태, 알람 아이콘 및 진행 상황을 직관적으로 시각화합니다.
- 가변저항 노브 & 버튼: 사용자의 손이 가장 잘 닿는 전면 하단에 배치하여 앱 없이도 직관적이고 빠른 조작(시간 설정, 모드 변경, 알람 해제)이 가능하도록 합니다.
- 오디오 시스템 (측면 또는 하단): MAX98357 앰프와 스피커는 기기 측면이나 하단에 배치하여 알람 음과 포모도로 종료 신호음이 효과적으로 울려 퍼지도록 공간을 확보합니다.
제가 이전 블록도에서 로터리 엔코더(PEC11R)의 신호 특성을 간과하고 일반 가변저항처럼 ADC(아날로그)로 잘못 표기했네요. 지적해주셔서 감사합니다.
Bourns PEC11R 로터리 엔코더는 회전 방향과 속도를 감지하는 두 개의 디지털 펄스 신호(A상, B상)와 누르는 신호인 푸시 스위치 신호(SW)를 출력하는 디지털 소자입니다.
따라서 ESP32의 일반 디지털 GPIO 핀(특히 인터럽트 설정이 가능한 핀)에 연결해야 하며, 하드웨어 디바운싱(채터링 방지)을 위한 RC 필터 회로가 거쳐 가도록 구성해야 합니다. 이를 반영하여 실제 회로 연결 구조에 맞게 블록도를 수정했습니다.


[연결 및 인터페이스 수정 사항]
- Bourns PEC11R 로터리 엔코더 ➡️ 하드웨어 디바운싱 ➡️ ESP32 (Digital GPIO): 엔코더의 내부 스위치 접점이 붙고 떨어질 때 발생하는 미세한 전기적 노이즈(채터링)를 거르기 위해, PCB 상에 저항과 커패시터로 이루어진 RC 필터 회로(디바운싱 회로)를 거친 후 ESP32의 디지털 입력 핀으로 들어갑니다.
- A상 (Terminal A): 회전 방향 및 속도 측정을 위한 디지털 펄스 (ESP32 인터럽트 핀 연결 권장)
- B상 (Terminal B): 회전 방향 판별을 위한 위상 차 디지털 펄스 (ESP32 디지털 핀 연결)
- SW상 (Switch): 노브를 꾹 눌렀을 때 동작하는 푸시 스위치 신호 (ESP32 디지털 핀 연결)
- 푸시 버튼 (2개): 기존 구상하신 버튼 2개 역시 디지털 GPIO 핀에 풀업(Pull-up) 또는 풀다운(Pull-down) 형태로 연결됩니다. (로터리 엔코더 내부 스위치 기능 덕분에 필요에 따라 물리 버튼 수를 줄이거나 기능을 더 다양하게 매핑할 수 있습니다.)
PCB 아트웍(배선 설계)을 하실 때 엔코더 신호선 3개는 모두 디지털 신호 라인으로 빼주시면 됩니다.
위 구성품을 ESP32-WROOM-32E 보드에 연결하는 연결도를 제안하세요. 전원 부분 연결하는 것도 나오도록 빠짐없이 연결하세요.
ESP32-WROOM-32E 개발 보드(NodeMCU-32S 사양 기준)의 실제 핀 맵을 바탕으로 한 상세 연결도입니다.
배터리 전원 시스템(3.7V ➡️ 5V 승압)부터 I2S 오디오, I2C 디스플레이, 네오픽셀 및 엔코더 디바운싱 회로까지 양산용 PCB 설계에 바로 반영할 수 있도록 핀 이름과 전원 라인을 빠짐없이 정리했습니다.
1. 전원 계통 연결도 (Power System)
충전 배터리 전원을 안전하게 5V로 승압하여 전체 시스템에 분배하는 구성입니다.

- 메인 5V 전원 버스 연결 채널: * ESP32 보드의 5V (또는 VIN) 핀
- MAX98357 앰프 모듈의 VDD 핀
- WS2812B 네오픽셀의 5V VCC 핀
- 메인 GND 버스 연결 채널:
- 모든 부품(ESP32, OLED, 앰프, 네오픽셀, 버튼, 엔코더)의 GND 핀 공통 연결 (스타 그라운드 권장)
2. ESP32-WROOM-32E 메인 I/O 연결 테이블
ESP32-WROOM-32E는 핀 설정이 비교적 자유롭지만, 부팅 시 신호 상태에 영향을 주는 스트래핑 핀(GPIO 0, 2, 5, 12, 15)을 피하고 고유 특성에 맞게 최적의 핀을 할당했습니다.
| 부품명 | 부품 핀 이름 | ESP32 연결 핀 번호 | 핀 특성 및 비고 |
| OLED 디스플레이 | VCC | 3.3V | ESP32 내부 레귤레이터 출력 사용 |
| 2핀 | GND | GND | 공통 그라운드 |
| SCL | GPIO 22 | 하드웨어 I2C SCL 기본 핀 | |
| SDA | GPIO 21 | 하드웨어 I2C SDA 기본 핀 | |
| MAX98357 앰프 | VDD | 5V (부스트 출력) | 오디오 출력을 위해 5V 권장 |
| 3핀 | GND | GND | 공통 그라운드 |
| LRC (WS) | GPIO 25 | 하드웨어 I2S LRCK (좌우 클록) | |
| BCLK (BCK) | GPIO 26 | 하드웨어 I2S BCLK (비트 클록) | |
| DIN (DATA) | GPIO 27 | 하드웨어 I2S DATA (데이터 입력) | |
| WS2812B LED (2개) | 5V | 5V (부스트 출력) | LED 구동 전원 |
| 1핀 | GND | GND | 공통 그라운드 |
| DIN | GPIO 13 | 고속 데이터 출력이 가능한 GPIO | |
| 푸시 버튼 1 (모드) | 1번 핀 | GPIO 32 | 내부 풀업(Pull-up) 설정 가능 |
| 1핀 | 2번 핀 | GND | 누르면 GND로 떨어지는 Active-Low 방식 |
| 푸시 버튼 2 (시작/정지) | 1번 핀 | GPIO 33 | 내부 풀업(Pull-up) 설정 가능 |
| 1핀 | 2번 핀 | GND | Active-Low 방식 |
| Bourns PEC11R | Terminal A | GPIO 14 (필터 거침) | 외부 인터럽트 설정 (회전 감지 핵심) |
| 로터리 엔코더 | Terminal B | GPIO 12 (필터 거침) | 회전 방향 판별 핀 |
| 3핀 | Terminal C (Common) | GND | 엔코더 공통 그라운드 |
| Switch 1번 핀 | GPIO 4 (필터 거침) | 엔코더 푸시 버튼 신호 | |
| Switch 2번 핀 | GND | 스위치 그라운드 |
3. 로터리 엔코더(PEC11R) 하드웨어 디바운싱(RC 필터) 연결 상세
PCB 생산 시 채터링 노이즈를 완벽히 차단하기 위해 엔코더와 ESP32 사이에 아래와 같은 구조로 저항과 커패시터를 배치해야 합니다. (A상, B상, 스위치 핀 총 3조 회로 구성)

동작 원리: 엔코더 스위치가 닫힐 때 발생하는 미세한 물리적 떨림 신호를 0.01µF 커패시터가 흡수하고, 1kΩ 저항이 전류 흐름을 안정화하여 ESP32에 정갈한 디지털 스퀘어 웨이브(사각형 신호)만 전달되게 합니다.
🛠️ PCB 아트웍(배선) 시 주의점
- 아날로그/디지털 그라운드 분리 유의: MAX98357 앰프 모듈과 스피커 선로는 순간적으로 큰 전류를 소모합니다. 오디오 노이즈(찌이-하는 험 노이즈)를 예방하기 위해, 앰프의 GND 라인은 ESP32를 거치지 않고 부스트 모듈의 GND 출력단에 최대한 가깝고 두껍게 직접 연결(스타 그라운드)해 주시는 것이 좋습니다.
- 네오픽셀 전원: 네오픽셀 2개는 소모 전류가 크지 않지만(최대 120mA 수준), 리플 노이즈를 방지하기 위해 네오픽셀 전원 입력단(5V와 GND 사이) 바로 옆에 100µF 전해 커패시터를 하나 실장해 두면 전원이 매우 안정됩니다.
위와 같은 제품을 구현할 때 이 시스템에서 가장 중요하고 핵심적인 기능은 무엇인가요? 그러니까 이 제품을 개발할 때 가장 먼저 테스트해서 검증할 부분처럼 핵심적인 부분을 말씀해주세요.
이 시스템을 개발할 때 가장 먼저 테스트하고 완벽하게 검증해야 하는 핵심 기능은 '로터리 엔코더의 실시간 회전 속도 감지와 인터럽트 처리(가속도 알고리즘)'입니다.
하드웨어와 소프트웨어가 완벽히 맞물려야 하는 이 기기에서, 제품의 성패와 '앱이 필요 없는 물리적 시계'라는 UX(사용자 경험)의 완성도를 결정짓는 가장 결정적인 부분이기 때문입니다.
이 기능이 가장 먼저 검증되어야 하는 이유와 구체적인 테스트 포인트는 다음과 같습니다.
1. 왜 로터리 엔코더 검증이 가장 먼저 이루어져야 할까요?
- 기기 조작의 유일한 입력 인터페이스: 구상하신 기기는 앱이나 터치스크린이 없습니다. 10초 단위부터 100분(6,000초)이라는 거대한 범위를 사용자가 답답하지 않게 조작할 수 있는 유일한 수단이 바로 이 엔코더의 '가속도 알고리즘'입니다. 이게 삐걱거리면 시계로서의 가치가 완전히 상실됩니다.
- ESP32의 자원 경합(리소스 스케줄링)의 핵심: ESP32는 내부적으로 디스플레이를 갱신(I2C)하고, 네오픽셀 LED를 켜며, 배경음/알람음(I2S)을 계속 재생해야 합니다. 이 와중에 사용자가 노브를 빠르게 돌릴 때 발생하는 수많은 디지털 펄스를 단 하나도 놓치지 않고 실시간으로 잡아내려면 하드웨어 인터럽트(Interrupt) 제어가 완벽해야 합니다. 오디오를 재생하다가 노브를 돌렸을 때 소리가 끊기거나, 반대로 노브를 돌리는데 펄스가 씹혀서 숫자가 안 올라가는 현상이 가장 흔하게 발생하는 부트캠프(지뢰밭)입니다.
2. 가장 먼저 선행되어야 할 핵심 테스트 단계 (Proof of Concept)
Breadboard(브레드보드)에 부품을 올리자마자 다른 기능(OLED, 오디오 등)은 다 접어두고 아래 순서로 엔코더 단독 테스트를 진행해야 합니다.
- 1단계: 하드웨어 디바운싱(RC 필터) 값 검증
- 앞서 설계한 10kΩ 저항과 0.01µF 커패시터 조합이 채터링 노이즈를 잘 걸러내는지 시리얼 모니터로 확인합니다. 노브를 한 칸(1 디텐트) 돌렸을 때 정확히 값이 1만 증가하는지, 손을 부르르 떨며 돌려도 값이 튀지 않는지 확인합니다.
- 2단계: 회전 속도(Interval) 측정 및 가속 임계값(Threshold) 튜닝
- 천천히 돌릴 때의 시간 간격(ms)과 아주 빠르게 휙 돌릴 때의 시간 간격을 시리얼 모니터에 출력해 봅니다.
- "아, 내가 손으로 가장 빨리 돌릴 때 펄스 간격이 약 15ms~20ms까지 떨어지는구나"를 직접 측정하여, 코드 시나리오에 넣을 속도 기준점(Threshold)을 잡아야 합니다. 이 값은 사람의 손맛에 따라 다르므로 실험을 통한 튜닝이 필수적입니다.
- 3단계: 멀티태스킹 부하 테스트 (가장 중요)
- 엔코더 코드가 완성되면, ESP32에 의도적으로 무거운 연산이나 I2S 오디오 더미 데이터를 계속 밀어 넣으면서 노브를 돌려봅니다. 이때도 인터럽트가 밀리지 않고 부드럽게 숫자가 10초, 1분, 10분 단위로 가속되며 바뀌는지 검증해야 합니다.
요약하자면
OLED에 화면을 띄우거나, 스피커로 소리를 내는 것은 기존 오픈소스 라이브러리가 매우 잘 되어 있어서 상대적으로 개발이 쉽습니다.
하지만 "빨리 돌리면 100분까지 휙 넘어가고, 천천히 돌리면 10초 단위로 딱딱 맞춰지는 손맛"은 하드웨어 특성과 MCU 인터럽트 제어, 그리고 개발자의 코드 튜닝이 삼박자를 이루어야만 성공할 수 있는 이 제품의 최고 핵심 기술이자 최우선 검증 과제입니다. PCB를 떠내기 전, 개발 보드 상태에서 이 가속도 조작감을 가장 먼저 만족스럽게 구현해 두시는 것을 강력히 추천합니다.
제미나이 2026년 6월 26일

'ESP32 Project' 카테고리의 다른 글
| ESP32를 소형 Wi-Fi 및 블루투스 보안 연구용 플랫폼 (0) | 2026.09.17 |
|---|---|
| ESP32 소형 PC 성능 대시보드 (0) | 2026.09.11 |
| ESP32에서 구현하는 3D 그래픽 (0) | 2026.09.11 |
| ESP32 제품 개발 및 펌웨어 바이브 코딩 오프라인 강의 (0) | 2026.09.09 |
| ESP32-C3 iPod 스타일의 음악 플레이어 (0) | 2026.09.05 |
| 오픈 소스 웨어러블 전자 펜던트 (0) | 2026.09.05 |
| 펜던트, 브로치, 키링 액세서리 및 오브제 (0) | 2026.09.05 |
| ESP-IDF 공식 문서 (0) | 2026.09.05 |
캐어랩