이 방식의 핵심은 time.ticks_us()와 time.ticks_diff()를 이용해 상태가 변한 시점 간의 마이크로초 단위 시간차를 구하는 것입니다.
출력된 durations 배열을 확인해보면, 대략 9000, 4500, 560, 1690, 560, 560... 과 같은 숫자들의 나열을 볼 수 있습니다. 이 숫자들을 if/else 문으로 0과 1로 치환한 뒤 비트 연산을 해주면, 라이브러리 없이도 완벽한 나만의 IR 디코더를 만들 수 있습니다.
단순한 제어가 필요할 때 무거운 라이브러리를 통째로 올리는 대신, 이처럼 펄스 폭을 직접 측정하는 방식을 사용해보시면 임베디드 하드웨어의 통신 원리를 이해하는 데 큰 도움이 될 것입니다.
응용 예제 코드: 리모콘으로 LED 램프를 토글식으로 켜고 타이머로 30초만 켜짐. 자동 모드로 랜덤으로 깜빡이는 촛불 모드로 5초 켜기
안녕하세요! 메이커 여러분. 오늘은 IoT 프로젝트를 진행할 때 필수적으로 마주하게 되는 ‘전력 관리(Power Management)’에 대해 이야기해보려고 합니다.
cam 은 사용할 때만 켜고 평상시는 아예 전원을 끊어 놓는게 보안상 좋습니다.
배터리로 구동되는 가젯이나 스마트 장치를 만들 때, 평소에는 전원을 완전히 차단했다가 필요할 때만 특정 모듈을 켜고 싶을 때가 많죠. 특히 ESP32-CAM처럼 카메라와 Wi-Fi를 동시에 사용하며 순간 피크 전류를 500mA 이상 잡아먹는 헤비한 모듈은 일반 트랜지스터(TR)로 제어하기가 까다롭습니다. “어? 트랜지스터를 달았더니 ESP32가 무한 리부팅(Brownout)에 빠지네?” 하시는 분들이 많으셨을 텐데요.
오늘은 그 해결사이자, 소형 표면실장(SMD) 타입으로 메이커들 사이에서 가성비 최고로 불리는 N-채널 Logic Level MOSFET, SI2302에 대해 자세히 알아보고 실전 회로까지 마스터해 보겠습니다.
1. 왜 일반 TR이 아니라 MOSFET(마스펫)일까?
우리가 흔히 쓰는 2N2222 같은 일반 트랜지스터(BJT)는 ‘전류’로 ‘전류’를 제어하는 부품입니다. 컬렉터와 에미터 사이에 전류가 흐를 때, 필연적으로 약 0.2V ~ 0.6V 수준의 전압 강하(Voltage Drop)가 발생합니다. 5V 전원을 공급했는데 모듈에는 4.5V만 들어가는 현상이 생기죠. 이 때문에 전류를 많이 쓰는 ESP32-CAM은 전압 부족으로 리셋이 걸리게 됩니다.
반면, MOSFET(전계효과트랜지스터)은 ‘전압’으로 ‘전류’를 제어합니다. 완전히 켜졌을 때(Turn-on), MOSFET은 단순히 ‘저항이 매우 낮은 도선’처럼 작동합니다. 전압 강하가 거의 없어서 저전압 대전류 스위칭에 완벽한 솔루션이 됩니다.
2. SI2302 핵심 성능 사양 (Datasheet 정밀 분석)
SI2302(주로 SOT-23 패키지)는 아주 작은 크기임에도 불구하고 놀라운 사양을 자랑합니다. 왜 이 녀석이 ESP32-CAM 스위칭에 제격인지 데이터시트 수치로 증명해 드립니다.
주요 항목
사양 (Specification)
메이커를 위한 의미 해석
소자 타입
N-Channel MOSFET
부하의 GND 라인을 끊고 맺는 ‘로우 사이드’ 스위치에 적합
드레인-소스 전압 (VDS)
Max 20V
3.3V, 5V, 12V 회로까지 넉넉하게 커버 가능
연속 드레인 전류 (ID)
Max 2.8A
ESP32-CAM의 피크 전류(약 0.5A)의 5배 이상 감당!
게이트 문턱 전압 (VGS(th))
0.65V ~ 1.2V
전압이 매우 낮아도 켜지기 시작함
도통 저항 (RDS(on))
@4.5V : 0.045Ω @2.5V : 0.070Ω
핵심 포인트! 3.3V GPIO를 넣으면 저항이 약 0.055Ω으로 극도로 낮아짐
🧮 옴의 법칙으로 보는 실제 전압강하와 발열량
ESP32-CAM이 Wi-Fi 전송으로 최대 500mA(0.5A)를 당길 때, SI2302에서 발생하는 손실을 계산해 볼까요? (ESP32-C3의 3.3V 제어 기준, 저항은 0.055Ω 적용)
실제 전압 강하 (V=I×R):0.5A×0.055Ω=0.0275V5V 전원을 통과시켜도 고작 0.027V만 깎입니다. ESP32-CAM에는 4.97V 이상이 그대로 전달되므로 브라운아웃 리셋 걱정이 없습니다.
MOSFET 자체 발열량 (P=I2×R):0.5A2×0.055Ω=0.01375W(13.75mW)소모 전력이 미미하여 방열판은커녕 만져봐도 온기가 느껴지지 않을 정도로 쾌적하게 작동합니다.
3. ESP32-C3를 이용한 ESP32-CAM 전원 제어 실전 회로도
메인 컨트롤러인 ESP32-C3의 GPIO 1번 핀을 사용하여 ESP32-CAM의 5V 전원을 켜고 끄는 로우 사이드(Low-Side) 스위칭 회로입니다.
게이트 보호 저항 (100Ω): MCU의 GPIO 핀에서 MOSFET 게이트로 순간적으로 흘러 들어가는 서지 전류를 제한하여 핀을 보호합니다.
풀다운 저항 (10kΩ): MCU가 부팅되거나 핀이 플로팅(불안정) 상태일 때, 게이트 전압을 GND로 잡아두어 ESP32-CAM이 제멋대로 켜지는 것을 방지합니다.
돌입 전류 방지용 콘덴서 (470μF):가장 중요합니다! MOSFET이 딱 켜지는 나노초(ns) 단위의 순간, 회로 전체 전압이 휘청이는 것을 콘덴서가 댐퍼 역할을 하며 막아줍니다. 이 콘덴서가 있어야 안정적인 구동이 가능합니다.
4. 하드웨어 메이커를 위한 최종 주의사항 (UART 역류)
이 회로는 구조가 간단한 대신 ESP32-CAM의 GND 라인을 차단하는 방식입니다. 만약 ESP32-C3와 ESP32-CAM 사이에 TX, RX 같은 통신선이 직접 연결되어 있다면, MOSFET을 꺼서 GND를 차단하더라도 5V 전원이 내부 회로와 통신선을 타고 ESP32-C3의 3.3V 핀으로 역류할 수 있습니다.
이를 방지하기 위해 소프트웨어 코드를 작성하실 때는 “전원을 차단하기 직전, 통신선 핀 모드를 INPUT으로 변경하거나 LOW로 떨어뜨리는 로직”을 반드시 추가해 주시는 것이 좋습니다.
SI2302는 알리익스프레스나 국내 부품몰에서 개당 수십 원 단위로 구할 수 있는 초가성비 아이템이니, 배터리 기반의 IoT 가젯을 설계 중이시라면 꼭 한 번 활용해 보세요!
컨트롤 MCU와 게이트 사이 저항값에 대해서
마이크로컨트롤러(MCU)의 GPIO 보호 목적만 본다면 100Ω은 충분한 값이며, 1kΩ으로 올려도 정상 작동은 하지만 스위칭 속도가 미세하게 느려집니다. 그리고 아예 저항을 걸지 않으면(직결하면) 최악의 경우 MCU의 GPIO 핀이 고장 날 위험이 있습니다.
왜 그런지 MOSFET 게이트의 독특한 구조인 ‘기생 커패시턴스(Cgs)’ 특성을 바탕으로 쉽게 설명해 드릴게요.
1. 아예 저항을 안 걸면 어떻게 될까? (0Ω 직결)
MOSFET의 게이트(Gate)는 내부적으로 완벽히 절연되어 있어서, 전류가 계속 흘러 들어가지 않습니다. 대신 아주 작은 콘덴서(커패시터)가 들어있다고 보시면 됩니다.
스위칭 순간의 문제: 텅 비어있는 콘덴서에 전압을 거는 그 ‘찰나의 순간’에는 저항이 0인 쇼트 상태와 같습니다.
MCU의 위험: ESP32-C3의 GPIO 1번이 HIGH로 바뀌는 순간, 순간적으로 수십~백 mA 이상의 과전류(돌입 전류)가 게이트로 왈칵 흘러 들어갑니다. ESP32-C3의 GPIO가 안전하게 버틸 수 있는 최대 전류는 보통 20mA ~ 40mA 수준이기 때문에, 저항 없이 직결하면 이 순간적인 과전류 스트레스가 누적되어 GPIO 핀이 타버리거나 고장 날 수 있습니다.
따라서 단 100Ω이라도 직렬로 달아주면, 옴의 법칙(I=V/R)에 의해 최대 피크 전류가 3.3V / 100Ω = 33mA 수준으로 제한되므로 MCU를 완벽하게 보호할 수 있습니다. 그래서 100Ω이 결코 작은 값이 아닙니다.
2. 1kΩ 저항을 걸면 어떻게 될까?
1kΩ을 걸면 피크 전류가 3.3V / 1kΩ = 3.3mA로 줄어드니 MCU 입장에서는 훨씬 더 안전하고 편안합니다. ESP32-CAM 전원 제어 같은 일반적인 ON/OFF 스위칭용으로는 1kΩ을 써도 아무런 문제 없이 잘 작동합니다.
다만, 기술적으로 한 가지 트레이드오프(개념적 손해)가 발생합니다.
RC 시상수(Time Constant)의 증가: 앞서 게이트가 ‘소형 콘덴서’ 같다고 말씀드렸죠? 저항(R)의 크기가 커지면 콘덴서(C)에 전압이 완전히 충전되는 데 걸리는 시간(τ=R×C)이 늘어납니다.
스위칭 속도 저하와 발열: 저항이 100Ω일 때는 나노초(ns) 단위로 순식간에 켜지던 MOSFET이, 1kΩ일 때는 켜지는 시간이 살짝 늘어납니다. MOSFET이 ‘어정쩡하게 켜져 있는 구간(과도기)’이 길어지면, 그 순간만큼은 도통 저항(RDS(on))이 높기 때문에 MOSFET 자체에 순간적인 발열과 전압 강하가 발생할 수 있습니다.
3. 상황별 추천 가이드
게이트 저항 값
MCU 안전성
스위칭 속도 (효율)
한줄평
0Ω (직결)
❌ 위험 (핀 고장 가능성)
⚡ 초고속
절대 비추천 (테스트할 때나 잠깐 사용)
100Ω ~ 220Ω
안전 (전류 제한)
⚡ 고속
가장 추천 (PWM 제어나 고속 스위칭에 필수)
1kΩ ~ 10kΩ
둥글게 안전 (매우 안전)
느림
일반 ON/OFF용으론 무난 (단단한 안전 제일주의)
요약하자면, ESP32-CAM을 단순히 하루에 몇 번, 혹은 몇 분에 한 번씩 껐다 켰다 하는 용도라면 부품 박스에 굴러다니는 1kΩ을 쓰셔도 아무런 지장이 없습니다. 다만 모터 제어처럼 고속으로 ON/OFF를 반복하는 회로(PWM)라면 MOSFET의 발열을 줄이기 위해 확실히 100Ω~220Ω 정도의 작은 저항을 써야 효율이 좋습니다.
최근 ESP32-C3나 S3 같은 고성능 신형 마이크로컨트롤러(MCU)들이 쏟아져 나오면서, 예전에 유행하던 구형 ESP8266(NodeMCU) 보드는 서랍 구석에 잠들어 있는 경우가 많습니다.
하지만 단순히 센서 데이터를 수집하고, 무선(Wi-Fi)으로 서버에 전송하는 홈 자동화나 데이터 로깅 프로젝트라면 어떨까요? 비싸고 복잡한 신형 칩셋 대신, 서랍 속 ESP8266을 꺼내야 할 이유는 충분합니다.
오늘은 구형이지만 여전히 매력적인 ESP8266 NodeMCU 보드의 장점과, 작업할 때마다 매번 찾아보게 되는 핵심 핀맵(Pinout)을 깔끔하게 정리해 드립니다.
1. 왜 아직도 ESP8266인가? (구관이 명관인 이유)
검증된 Wi-Fi 안정성: 수년간 전 세계 수많은 메이커들에 의해 필드 테스트를 거쳤습니다. 2.4GHz 대역에서 끊김 없는 데이터 송수신을 보여주며, 단순 TCP/UDP 통신이나 MQTT, HTTP 요청 환경에서는 신형 칩셋 못지않게 매우 견고하고 안정적으로 동작합니다.
압도적인 가성비와 콤팩트함: 복잡한 멀티코어나 블루투스 기능이 필요 없는 단순 IoT 기기(예: 온습도 모니터링, 스마트 인큐베이터 등)를 대량으로 구축할 때 이보다 경제적인 대안은 없습니다.
풍부한 라이브러리와 레퍼런스: 아두이노 IDE든 MicroPython이든, 문제가 생겼을 때 구글링 한 번이면 전 세계 개발자들이 미리 겪고 해결해 둔 코드 템플릿을 쉽게 찾을 수 있습니다.
2. ESP8266 NodeMCU 핵심 핀맵 (Pinout) 바로보기
개발 보드의 실크 인쇄(D0, D1 등)와 아두이노/MicroPython에서 제어하는 실제 GPIO 번호는 다릅니다. 코딩할 때 헷갈리지 않도록 핀맵을 표로 정리했습니다.
◼️ 상단 핀 라인 (안테나가 왼쪽일 때 위쪽)
핀 이름
주요 기능
GPIO 번호
비고
D0
GPIO16
16
Deep Sleep 해제 시 RST 핀과 결선하는 핀
D1
GPIO5 / SCL
5
**I2C 통신(SCL)**으로 가장 권장하는 핀
D2
GPIO4 / SDA
4
**I2C 통신(SDA)**으로 가장 권장하는 핀
D3
GPIO0
0
Flash 버튼 연결 핀 (부팅 모드 관여, 내부 풀업)
D4
GPIO2 / TXD1
2
부팅 시 High 상태, 보드 내장 LED와 연동
3V / G
3.3V / Ground
–
전원 및 접지
D5
GPIO14 / HSCLK
14
SPI 통신 (SCK)
D6
GPIO12 / HMISO
12
SPI 통신 (MISO)
D7
GPIO13 / HMOSI
13
SPI 통신 (MOSI)
D8
GPIO15 / HCS
15
SPI 통신 (CS) / 부팅 시 Low 상태여야 함
RX / TX
UART0 RX / TX
3 / 1
PC와의 시리얼 통신 및 펌웨어 다운로드용
◼️ 하단 핀 라인 (안테나가 왼쪽일 때 아래쪽)
핀 이름
주요 기능
GPIO 번호
비고
A0
ADC0
ADC0
유일한 아날로그 입력 (입력 범위 0V ~ 1.0V 주의)
VV
VBUS (5V)
–
USB 연결 시 5V 전원 출력 핀
S3 ~ SK
SDIO 라인
10, 9, 8, 11, 7, 6
⚠️ 사용 금지: 내부 플래시 메모리 전용 핀
EN
CH_PD
–
칩 활성화 (기본 High, Low 시 칩 종료)
RST
Reset
–
리셋 핀 (RST 버튼과 연동)
UIN
VIN
–
외부 5V 전원 입력 공급 핀
3. ESP8266 사용 시 꼭 기억해야 할 주의사항 (Troubleshooting)
SD 라인 핀(S3, S2, S1, SC, S0, SK)은 건드리지 마세요! 보드 중앙 하단에 나열된 이 핀들은 내부 플래시 메모리와 통신하는 통로입니다. 이곳에 센서를 연결하거나 풀업/풀다운을 걸면 보드가 부팅되지 않고 무한 루프에 빠집니다. 일반 GPIO가 부족하더라도 이 핀들은 비워두셔야 합니다.
부팅 모드 핀 (Boot Pins) 매핑 주의GPIO0(D3), GPIO2(D4), GPIO15(D8) 핀은 전원이 켜질 때 칩이 어떻게 작동할지 결정하는 부팅 설정 핀입니다. 예를 들어, D8 핀이 부팅 순간에 High 상태가 되면 정상 동작(Flash 실행)을 하지 않습니다. 따라서 부팅 시 전위에 영향을 주는 릴레이나 특정 센서 모듈을 연결할 때는 가급적 이 핀들을 피하고 D1, D2, D5, D6 등을 우선적으로 사용하는 것이 정신 건강에 좋습니다.
아날로그 전압 범위 ESP8266의 아날로그 핀(A0)은 기본적으로 0~1V까지만 측정할 수 있습니다. NodeMCU 보드 자체에 전압 분배 저항이 내장되어 있어 대략 0~3.3V까지 입력받을 수 있게 설계되어 있긴 하지만, 정밀한 전압 센싱이나 그 이상의 전압을 다룰 때는 반드시 외부에 저항 분배 회로를 추가해야 안전합니다.
📝 마치며
블루투스(BLE)나 고성능 AI 연산이 필요한 프로젝트가 아니라면, Wi-Fi 네트워크를 통해 데이터를 주기적으로 쏘아주는 웹 서버나 데이터 로거 역할로 ESP8266은 여전히 훌륭하고 차고 넘치는 성능을 보여줍니다.
무엇보다 오랜 기간 다듬어진 네트워크 스택 덕분에 Wi-Fi 연결 안정성 하나만큼은 신형 못지않게 탄탄하다는 점이 가장 큰 무기입니다.
집 안 서랍 속에서 잠자고 있는 구형 NodeMCU 보드가 있다면, 이번 기회에 가벼운 가전 제어나 온습도 모니터링 시스템으로 다시 숨을 불어넣어 보는 건 어떨까요?
** esp8266 에 마이크로 파이썬 설치가 안될때
플래시 메모리 모드(DIO vs QIO) 설정 차이
ESP8266칩과 내장 메모리가 통신하는 방식(Flash Mode)에는 QIO, QOUT, DIO, DOUT 등이 있습니다.
아두이노 IDE는 스마트하게 보드에 맞춰 이 모드를 자동으로 조절해 컴파일하는 경우가 많지만, 마이크로파이썬 펌웨어를 직접 구울 때는 이 모드가 맞지 않으면 펌웨어 쓰기가 실패하거나, 써지더라도 무한 부팅(Boot loop)에 빠집니다.
안 되는 보드가 유독 구형이거나 다른 제조사 칩이라면 플래시 모드를 DIO 또는 DOUT으로 낮추어 구워보아야 합니다.
대량 생산되는 저가형 ESP8266 보드들은 묶음 상품이라도 내부에 들어가는 플래시 메모리 칩셋(Winbond, BergMicro 등)을 섞어서 쓰는 경우가 많습니다. 아두이노는 컴파일 시점에 이 칩셋 특성을 덜 타지만, 이미 만들어진 파일(바이너리)을 통째로 굽는 마이크로파이썬은 칩셋 특성을 심하게 탑니다.
AS5600과 MT6701은 모두 비접촉식 자기식 엔코더(Magnetic Encoder)로, DIY 프로젝트나 로봇 관절 제어 등에 널리 사용됩니다. 하지만 두 칩은 성능과 기능 면에서 몇 가지 결정적인 차이가 있습니다.
1. 주요 사양 비교
항목
AS5600 (ams OSRAM)
MT6701 (MagnTek)
해상도 (I2C)
12-bit (4096 CPR)
14-bit (16384 CPR)
최대 회전 속도
낮음 (정적 위치 제어에 적합)
높음 (최대 55,000 RPM 지원)
인터페이스
I2C, 아날로그, PWM
I2C, SSI, ABZ(증분형), UVW, PWM
샘플링 속도
약 150µs (느린 편)
약 5µs (매우 빠름)
전압 범위
3.3V / 5.0V
3.3V / 5.0V
2. 핵심 차이점 상세 분석
해상도 및 정밀도
AS5600: 12비트 해상도를 가집니다. 일반적인 각도 측정에는 충분하지만, 매우 미세한 제어가 필요한 경우에는 한계가 있을 수 있습니다.
MT6701: 14비트 해상도로 AS5600보다 4배 더 정밀합니다. 정밀한 서보 모터 제어나 고해상도 피드백이 필요한 경우 유리합니다.
반응 속도와 RPM (가장 큰 차이)
AS5600: 내부 신호 처리 속도가 느려 고속 회전 시 오차가 커집니다. 주로 밸브 조절, 다이얼, 저속 로봇 관절 등 ‘위치’를 측정하는 용도에 적합합니다.
MT6701: 고속 샘플링을 지원하여 수만 RPM의 고속 회전에서도 안정적으로 데이터를 출력합니다. BLDC 모터 제어나 빠른 반응이 필요한 동적 시스템에 훨씬 적합합니다.
출력 모드 (유연성)
AS5600: 주로 I2C나 아날로그 전압 출력을 사용합니다.
MT6701: I2C 외에도 ABZ 위상(엔코더 모드) 출력을 지원하므로, 일반적인 하드웨어 카운터 인터럽트를 사용하는 MCU(예: ESP32, STM32)에서 활용도가 더 높습니다.
3. 프로젝트별 추천
AS5600을 선택해야 할 때:
회전 속도가 느리고 정적인 각도 확인이 주 목적인 경우 (예: 스마트 팜 환기창 개폐 각도, DIY 볼륨 노브).
라이브러리가 풍부하고 예제가 많아 구현이 쉬운 것을 원할 때.
정밀도보다는 가성비와 단순 구현이 중요할 때.
MT6701을 선택해야 할 때:
고속으로 회전하는 모터의 속도나 위치를 실시간으로 제어해야 할 때 (예: FOC 모터 제어, 드론).
12비트 이상의 높은 정밀도가 필요할 때.
ABZ나 SSI 같은 다양한 통신 프로토콜을 사용해야 할 때.
요약
단순히 각도만 읽는 용도라면 저렴하고 익숙한 AS5600이 편하지만, 모터 제어나 정밀한 동적 움직임이 포함된다면 MT6701이 압도적으로 성능이 좋습니다. 최근 오픈 소스 하드웨어 씬(SimpleFOC 등)에서는 MT6701로 넘어가는 추세입니다.
AS5600과 MT6701 외에도 프로젝트의 성격(정밀도, 가격, 인터페이스)에 따라 고려해 볼 만한 훌륭한 자기식 엔코더들이 더 있습니다. 주로 산업용 수준의 신뢰성이나 더 높은 해상도를 원할 때 사용하는 칩들입니다.
1. AS5048 (A/B 타입)
AS5600의 상위 버전 격으로, 고성능 DIY 프로젝트에서 가장 표준적으로 사용되는 칩입니다.
해상도: 14-bit (16,384 CPR)
특징: AS5600보다 훨씬 정밀하며, 노이즈에 강합니다.
인터페이스: AS5048A는 SPI, AS5048B는 I2C를 지원합니다.
추천 용도: 고정밀 짐벌(Gimbal) 모터 제어, 로봇 관절.
2. TLE5012B (Infineon)
가성비와 성능의 균형이 매우 뛰어나 고성능 모터 제어 커뮤니티(SimpleFOC 등)에서 매우 선호하는 칩입니다.
해상도: 내부적으로 최대 15-bit 수준의 연산을 수행합니다.
특징: 데이터 업데이트 속도가 매우 빠르고, SSC(SPI 호환), PWM, Encoder(IIF) 출력을 동시에 지원합니다.
추천 용도: 고속 BLDC 모터의 정밀 위치 제어.
3. MA730 (Monolithic Power Systems)
속도와 지연 시간(Latency)에 극도로 민감한 프로젝트라면 최적의 선택입니다.
해상도: 14-bit
특징: 지연 시간이 매우 짧아 고속 회전 시에도 위상 차이가 거의 없습니다. 칩 크기가 매우 작아 소형 모듈화에 유리합니다.
추천 용도: 초고속 모터 제어, 소형 서보 액추에이터.
💡 선택을 위한 가이드
요구 사항
추천 부품
이유
“가장 대중적이고 정밀한 것”
AS5048A
라이브러리가 가장 많고 검증된 성능을 보여줍니다.
“가성비와 속도 모두 챙기고 싶다”
TLE5012B
저렴한 모듈이 많으면서도 산업용급 성능을 냅니다.
“초소형/초고속 제어가 필요하다”
MA730
반응 속도가 압도적으로 빠릅니다.
추가 팁: 자기식 엔코더를 선택할 때는 칩 자체의 성능도 중요하지만, 자석(Magnet)과의 거리 및 정렬(Alignment)이 정밀도에 큰 영향을 미칩니다. 만약 축이 어긋날 가능성이 있다면, 어느 정도 오차를 보정해주는 기능이 있는 AS5047P 같은 모델도 좋은 대안이 됩니다.
2026년 5월 현재, 알리익스프레스와 주요 부품 시장의 시세를 기준으로 한 5가지 엔코더의 가격대 비교입니다. (모듈 1개, 자석 포함 기준 대략적인 원화 환산 가격)
💰 자기식 엔코더 5종 가격 비교
부품명
가격대 (대략)
특징 요약
가성비 평가
AS5600
약 1,500원 ~ 2,500원
12-bit, I2C 전용, 저속용
입문용 최저가. 단순히 각도만 읽을 때 가장 경제적입니다.
MT6701
약 2,500원 ~ 4,000원
14-bit, 고속 RPM 지원, SSI/I2C/ABZ
현재 압도적 1위. AS5600과 가격 차이는 적으면서 성능은 훨씬 뛰어납니다.
AS5048A
약 8,000원 ~ 12,000원
14-bit, SPI/PWM, 높은 신뢰성
표준형 중고가. 정밀도와 검증된 라이브러리가 필요한 고급 프로젝트용입니다.
TLE5012B
약 10,000원 ~ 25,000원
15-bit, 초고속 데이터 갱신, 산업용
전문가용. 고성능 FOC 모터 제어 등에 쓰이며 가격대가 높은 편입니다.
MA730
약 15,000원 ~ 30,000원
14-bit, 초저지연(Latency), SPI/SSI
하이엔드. 지연 시간이 극도로 짧아야 하는 정밀 로봇 관절용입니다.
📊 블로그용 가격 분석 팁
가성비 깡패는 MT6701: AS5600보다 불과 1,000~2,000원 정도만 더 투자하면 4배의 해상도(14-bit)와 50,000 RPM급 속도 대응 능력을 얻을 수 있습니다. DIY 개발자들에게 가장 추천하기 좋은 포인트입니다.
가격 차이의 이유: * AS5600: 생산량이 어마어마하고 구조가 단순해 가장 저렴합니다.
TLE5012B / MA730: 내부 연산 속도가 훨씬 빠르고, 노이즈 필터링 및 고속 통신 프로토콜(SPI/SSI)을 지원하기 때문에 칩 단가가 비쌉니다.
번들 구매 팁: 알리익스프레스 등에서 5개 또는 10개 묶음으로 구매하면 개당 가격이 20~30% 정도 더 저렴해집니다. ‘Mana’s Lab’ 구독자들에게 “여러 개 사서 쟁여두고 쓰기에는 MT6701이 가장 합리적”이라고 조언해 주시면 좋을 것 같네요.
MT6701은 I2C와 SSI(SPI와 유사) 방식을 모두 지원하지만, 14비트의 높은 해상도와 속도를 온전히 활용하기 위해 SSI(SPI) 방식을 사용하는 예제를 준비했습니다.
1. ESP32 – MT6701 연결 (SSI 방식)
MT6701 핀
ESP32 핀 (예시)
설명
VDD
3.3V
전원
GND
GND
접지
CSN
GPIO 5
Chip Select (Active Low)
CLK
GPIO 18
Serial Clock
DO
GPIO 19
Data Out (MISO)
2. MicroPython 예제 코드
이 코드는 하드웨어 SPI를 사용하여 MT6701로부터 14비트 각도 데이터를 읽어와 도(Degree) 단위로 변환합니다.
단순한 모터 회전을 넘어, 엔코더 신호를 정밀하게 분석하여 원하는 각도에 정확히 멈추는 절대 위치 제어 시스템을 구축했습니다. 특히, 저해상도 엔코더의 한계를 극복하기 위한 PID 튜닝 과정과 브라우저에서 실시간으로 조작 가능한 WebSocket 기반의 현대적인 웹 GUI 구현 과정을 공유합니다.
1. 하드웨어의 한계를 소프트웨어로 극복하기
처음 사용한 펄스당 2회(PPR 2)의 저해상도 엔코더와 높은 기어비(666:359) 환경에서 발생하는 오차를 줄이기 위해 PID(Proportional-Integral-Derivative) 제어를 도입했습니다.
Kp(비례): 목표치에 빠르게 도달하는 힘
Ki(적분): 누적된 미세 오차를 제거
Kd(미분): 목표 지점 근처에서 브레이크를 걸어 오버슈트 방지 사용자 맞춤형 튜닝을 통해 모터가 부드럽고 정확하게 멈추는 최적의 값을 찾아가는 과정을 담았습니다.
2. WebSocket을 이용한 실시간 웹 컨트롤러
HTTP 방식의 느린 반응 속도를 해결하기 위해 WebSocket 핸드쉐이크를 직접 구현했습니다.
실시간성: 브라우저의 슬라이더를 움직이는 즉시 모터가 반응합니다.
다크 모드 GUI: 터치가 용이하도록 큼직한 버튼과 직관적인 슬라이더 디자인을 적용하여 사용자 편의성을 극대화했습니다.
제로 포인트 설정: 물리적 위치가 틀어졌을 때 언제든 현재 위치를 0도로 고정할 수 있는 ‘SET ZERO’ 기능을 추가하여 실용성을 높였습니다.
3. 고해상도 상상(Quadrature) 엔코더로의 진화
더 정밀한 제어를 위해 Phase A/B 두 개의 신호를 사용하는 상상 엔코더 방식으로 시스템을 업그레이드했습니다. ESP32-C3의 인터럽트 기능을 활용해 방향 판별과 카운팅을 실시간으로 처리하며, 촘촘한 엔코더 디스크 환경에서도 데이터 누락 없이 안정적으로 동작하는 코드를 완성했습니다.
4. 주요 설정 팁: Duty_u16과 속도 제한
마이크로파이썬의 duty_u16이 가진 0~65535 범위를 효율적으로 배분했습니다. 기구부의 수명과 안정성을 고려해 MAX_DUTY를 제한하고, 모터가 멈추지 않고 돌아갈 수 있는 최소 전압인 MIN_DUTY를 설정하여 제어의 품질을 한 단계 끌어올렸습니다.
IR 엔코더에서 두개 신호로 정회전 역회전 구분하는 원리
IR 엔코더(일반적으로 광학식 인크리멘탈 엔코더)에서 회전 방향을 구분하는 핵심 원리는 **’위상차가 있는 두 개의 신호’**를 사용하는 것입니다. 보통 이 신호를 **A상(Phase A)**과 **B상(Phase B)**이라고 부릅니다.
상세한 원리는 다음과 같습니다.
1. 쿼드러처(Quadrature) 신호의 생성
엔코더 내부에는 슬릿(구멍)이 있는 디스크와 이를 감지하는 두 개의 IR 센서가 약간 어긋난 위치에 배치되어 있습니다. 디스크가 회전하면 두 센서는 각각 독립적인 펄스 신호를 만들어내는데, 이때 센서의 배치 덕분에 두 신호는 정확히 **90도(1/4 주기)**의 위상차를 갖게 됩니다.
2. 회전 방향에 따른 파형의 변화
정회전과 역회전일 때 A상과 B상 중 어느 것이 먼저 “상승”하느냐에 따라 방향을 판별합니다.
정회전 (Clockwise): A상 신호가 B상 신호보다 앞서서 발생합니다. 즉, A상이 ‘High’가 된 직후에 B상이 ‘High’가 됩니다.
역회전 (Counter-Clockwise): B상 신호가 A상 신호보다 앞서서 발생합니다. 즉, B상이 ‘High’가 된 직후에 A상이 ‘High’가 됩니다.
3. 상태 변화 판별 로직
실제 마이크로컨트롤러(MCU)에서 방향을 읽을 때는 특정 시점의 신호 상태를 비교합니다. 예를 들어, **A상이 상승 에지(Low → High)**일 때 B상의 상태를 확인하는 방식입니다.
기준점 (A상의 상승 에지)
B상의 상태
판별 결과
A: ↑ (Rising)
B: Low (0)
정회전
A: ↑ (Rising)
B: High (1)
역회전
이처럼 두 신호의 조합을 통해 현재 바퀴나 모터가 어느 쪽으로 돌고 있는지, 그리고 펄스의 개수를 세어 얼마나 돌았는지(변위)를 동시에 계산할 수 있습니다.
센서가 하나만 있다면 속도는 알 수 있지만 방향은 알 수 없기 때문에, 정밀 제어가 필요한 모터 시스템에서는 반드시 이 두 개의 신호(A, B상)를 활용하는 것이 표준입니다.