로그인회원가입

[카테고리:] 부품 리뷰

DIY 용 단일 부품 리뷰

  • DS18B20으로 구축하는 정밀 다중 온도 모니터링 시스템 : 1-Wire 디지털 통신

    DS18B20으로 구축하는 정밀 다중 온도 모니터링 시스템 : 1-Wire 디지털 통신


    DIY 프로젝트에서 가장 사랑받는 온도 센서인 DS18B20을 활용해, 4개의 포인트를 동시에 측정하고 실시간 그래프로 시각화하는 시스템 구축 과정을 총정리해 드립니다.

    1. 왜 DS18B20인가? (핵심 특징)

    DS18B20은 일반적인 아날로그 센서와 달리 1-Wire 디지털 통신을 사용합니다.

    • 고유 ID: 각 센서마다 전 세계에 단 하나뿐인 64비트 시리얼 번호가 내장되어 있어, 선 하나(병렬)에 수십 개의 센서를 연결해도 각각 구분할 수 있습니다.
    • 정밀도: ±0.5°C의 오차 범위를 가지며, 9~12비트 분해능 설정이 가능합니다.
    • 간편한 배선: VCC, GND, DATA 단 3개의 선만 있으면 됩니다.

    2. 하드웨어 연결 가이드 (배선도 확인)

    센서의 평평한 면을 바라볼 때 왼쪽부터 GND – DATA – VCC 순서입니다.

    • 병렬 연결: 4개의 센서 DATA 핀을 모두 ESP32의 한 개 핀(예: GPIO 0)에 묶어서 연결합니다.
    • 풀업 저항 필수: 데이터 안정성을 위해 VCC와 DATA 사이에 4.7kΩ 저항을 반드시 달아주어야 합니다. (10kΩ 사용 시 통신 불안정이 생길 수 있으니 10k 두 개를 병렬로 엮어 5k로 쓰는 것을 추천합니다.)

    3. MicroPython 실시간 대시보드 구현

    이번 프로젝트의 핵심은 **웹소켓(WebSocket)**을 이용한 실시간 데이터 전송입니다. Chart.js를 활용해 모바일에서도 보기 편한 대형 그래프를 구현했습니다.

    주요 기능:

    1. 순서 고정: 센서 ID 스캔 후 코드에 고정하여, 센서 위치가 바뀌어도 데이터가 뒤섞이지 않게 설정.
    2. 모바일 최적화: 한 줄에 4개 카드가 나열되는 반응형 디자인.
    3. 자동 스케일: 0.1도의 미세한 변화도 잘 보이도록 Y축 범위를 실시간 최적화.

    4. 자주 묻는 질문 (Troubleshooting)

    • Q: 센서 4개가 같은 곳인데 왜 값이 다르죠?
      • A: 모든 센서는 제조 공정상 미세한 오차가 있습니다. 표준 온도계와 비교하여 소프트웨어적으로 오프셋(Offset) 값을 가감해 보정하는 과정이 필요합니다.
    • Q: 차트가 안 그려져요!
      • A: 센서 ID 중복이나 스캔 오류일 확률이 높습니다. ds.scan()을 통해 정확한 16진수 주소를 먼저 확인하세요.

    5. 마치며

    DS18B20은 부화기 온도 조절, 안방/거실 환경 모니터링 등 활용도가 무궁무진합니다. 이번에 구축한 실시간 웹 대시보드 코드를 활용해 여러분만의 스마트 홈 시스템을 완성해 보세요!


    📊 DS18B20 핵심 기술 사양 (Specification)

    항목상세 스펙비고
    측정 범위-55°C ~ +125°C광범위한 환경 대응 가능
    정밀도 (Accuracy)±0.5°C-10°C ~ +85°C 구간 기준
    분해능 (Resolution)9비트 ~ 12비트 (선택 가능)기본 12비트 설정 권장
    최소 측정 단위0.0625°C12비트 설정 시 해상도
    변환 시간최대 750ms12비트 기준 (데이터 처리 속도)
    동작 전압3.0V ~ 5.5VESP32(3.3V)와 완벽 호환
    통신 방식1-Wire (Single Bus)선 하나로 다중 연결 가능
    고유 식별자64-bit ROM Code공장 출하 시 부여된 고유 ID

    질문: 센서 몇개까지 거리는 얼마까지 병렬 연결 할 수 있나?

    DS18B20의 가장 큰 장점이 **’줄줄이 사탕’**처럼 엮을 수 있다는 점이지만, 무한정 늘릴 수는 없습니다. 통신 방식(1-Wire)의 특성상 센서 개수거리는 서로 밀접하게 연결되어 있습니다.


    1. 연결 가능한 센서 개수 (최대 몇 개?)

    이론과 실제 사용 환경에는 차이가 있습니다.

    • 이론적 한계: 고유 ID가 64비트이므로 거의 무한대에 가깝게 주소를 할당할 수 있습니다.
    • 실제 권장 한계: 일반적인 마이크로컨트롤러(ESP32 등) 환경에서는 10~20개 정도가 안정적입니다.
      • 이유: 센서가 늘어날수록 데이터 선의 전기적 부하(Capacitance)가 커져서 신호가 뭉개집니다.
      • 해결: 센서가 20개 이상으로 많아지면 풀업 저항 값을 2.2kΩ 정도로 낮추어 신호를 강하게 잡아줘야 합니다.

    2. 연결 가능한 거리 (얼마나 멀리?)

    선이 길어질수록 저항과 노이즈가 발생하여 통신 속도가 떨어집니다.

    • 일반적인 케이블 (전화선, 점퍼선):5~10m까지는 무난합니다.
    • 고급 케이블 (CAT5/6 랜선): 배선 방식만 최적화하면 50~100m까지도 가능합니다.
    • 주의: 거리가 10m를 넘어가면 전압 강하가 일어나므로, 전원 공급 방식을 ‘기생 전원(Parasite Power)’이 아닌 **전용 3선 방식(VCC 별도 연결)**으로 사용해야 합니다.

    3. 안정성을 높이는 배선 꿀팁 (중요!)

    네트워크를 구성할 때 모양이 매우 중요합니다.

    1. 데이지 체인 (Daisy Chain) 추천: 메인 선 하나를 길게 빼고, 거기서 센서를 하나씩 징검다리처럼 연결하는 방식이 가장 안정적입니다.
    2. 스타(Star) 구조 지양: 한 지점에서 사방으로 선을 뻗는 방식은 신호 반사(Reflection) 현상 때문에 에러가 자주 발생합니다. 가급적 피하세요.
    3. 랜선(UTP) 활용: 거리가 멀다면 랜선의 꼬임 쌍선(Twisted Pair) 중 하나는 DATA, 하나는 GND로 묶어서 사용하면 노이즈 차단 효과가 탁월합니다.

    💡 요약

    • 센서 4~5개, 거리 5m 이내: 지금처럼 4.7kΩ 저항 하나로 충분합니다.
    • 센서 20개 이상, 거리 20m 이상: 저항을 2.2kΩ으로 낮추고, 가급적 랜선을 사용해 데이지 체인 방식으로 연결하세요.

    Python ds18b20_ex.py

  • 38kHz 적외선(IR) 수신 모듈 8종 비교

    38kHz 적외선(IR) 수신 모듈 8종 비교

    1. 적외선(IR) 수신 모듈, 다 똑같은 게 아니다?

    아두이노 키트에 들어있는 저렴한 수신기부터 산업용 장비에 쓰이는 고사양 모델까지, 외형은 비슷하지만 성능 차이는 천차만별입니다. 특히 주변 광 노이즈가 많은 환경(형광등, 햇빛 등)에서 오작동을 줄이려면 내 프로젝트에 맞는 부품을 고르는 것이 중요합니다.

    2. IR 수신 모듈 8종 상세 비교 테이블

    시중에서 가장 많이 쓰이는 8가지 모델을 한눈에 비교해 보세요.

    모델명동작 전압소비 전류수신 거리핵심 특징
    TSOP48382.5V~5.5V0.7mA45m산업 표준. 가장 안정적이고 검증된 모델
    TSOP348382.5V~5.5V0.7mA45m소형 고성능. 노이즈 최적화 및 슬림한 크기
    TSOP382382.5V~5.5V0.35mA45m초저전력. 배터리 구동 IoT 기기 최적화
    IRM-36382.7V~5.5V0.9mA15m가전제품(TV, 에어컨) 내부 범용 모델
    HS0038BD2.7V~5.5V0.7mA35m성능과 가격의 적절한 밸런스형
    VS1838B2.7V~5.5V1.5mA18m가성비. 교육용 키트에 가장 흔히 포함됨
    TL18382.7V~5.5V1.5mA15m저가형 범용 호환 부품
    TSSP40382.5V~5.5V0.7mA센서 전용. 물체 감지 및 거리 측정 특화

    3. 상황별 부품 선택 가이드

    ✅ 정밀한 제어가 필요한 스마트홈/DIY 장비

    • 추천: TSOP4838, TSOP34838
    • 이유: 내부 AGC(자동 이득 제어) 알고리즘이 뛰어나 노이즈가 많은 환경에서도 리모컨 신호를 정확하게 디코딩합니다. 히터나 모터가 돌아가는 복잡한 환경일수록 이 제품들이 빛을 발합니다.

    ✅ 배터리로 작동하는 무선 센서 노드

    • 추천: TSOP38238
    • 이유: 소비 전류가 다른 모델의 절반 이하인 0.35mA입니다. ESP32-C3와 같은 칩과 조합하여 저전력 리모컨 수신기를 만들 때 필수적입니다.

    ✅ 단순 학습 및 가성비 프로젝트

    • 추천: VS1838B, TL1838
    • 이유: 가격이 매우 저렴하여 대량으로 구비해두고 테스트하기 좋습니다. 다만 수신 거리와 노이즈 내성이 떨어지므로 중요한 장비에는 가급적 TSOP 시리즈를 권장합니다.

    ✅ 장애물 감지나 비접촉 스위치 제작

    • 추천: TSSP4038
    • 이유: 리모컨 신호를 해석하는 게 아니라 IR 광선의 유무만 판단하므로, 물체 감지 센서를 만들 때 최적입니다.

    💡 하드웨어 구성 꿀팁 (안정성 Up!)

    IR 수신기는 전압 변동에 매우 민감합니다. VCC와 GND 사이에 0.1µF(또는 4.7µF) 디커플링 커패시터를 하나 달아주는 것만으로도 수신 감도가 몰라보게 좋아집니다.


    맺음말:

    겉모양만 보고 다 같은 부품이라 생각했다면, 이제 프로젝트의 목적에 맞춰 현명하게 선택해 보세요. 작은 부품 하나가 전체 시스템의 신뢰성을 결정합니다!


    1. 주요 사양 비교

    항목HS0038BDVS1838BTSOP4838
    제조사Vishay (주로 호환품)여러 범용 제조사Vishay (정품/표준)
    중심 주파수38kHz38kHz38kHz
    작동 전압2.7V ~ 5.5V2.7V ~ 5.5V2.5V ~ 5.5V
    소비 전류약 0.7mA약 1.5mA약 0.7mA (저전력)
    노이즈 필터보통낮음매우 높음
    특징가성비 모델가장 저렴함, 노이즈에 취약산업 표준, 높은 신뢰성

    2. 상세 특징 및 차이점

    TSOP4838 (산업 표준)

    • 신뢰성: 가장 정밀하고 신뢰도가 높습니다. 내부적으로 AGC(자동 이득 제어) 회로가 잘 설계되어 있어 햇빛이나 형광등 같은 외부 광 노이즈에 매우 강합니다.
    • 전력 효율: 소비 전류가 낮아 배터리로 구동되는 IoT 기기나 센서 노드에 가장 적합합니다.
    • 추천: 상업용 제품이나 오동작이 없어야 하는 정밀한 프로젝트에 사용됩니다.

    HS0038BD

    • 범용성: TSOP 시리즈의 호환 제품으로 많이 유통됩니다. 성능은 TSOP와 VS1838의 중간 정도라고 볼 수 있습니다.
    • 호환성: 핀 배열이 1: OUT, 2: GND, 3: VCC 순서인 경우가 많아 회로 수정 없이 교체 가능합니다.

    VS1838B (가성비)

    • 가격: 세 제품 중 가장 저렴하여 DIY 키트나 학습용 아두이노 모듈에 주로 포함됩니다.
    • 단점: 외부 노이즈(특히 전자기기 근처나 밝은 곳)에서 신호 왜곡이 발생할 확률이 다른 모델보다 높습니다.
    • 추천: 단순한 리모컨 제어 학습이나 저비용 시제품 제작에 적합합니다.

    3. 연결 시 주의사항 (핀 배열)

    대부분의 38kHz 수신기는 앞에서 바라봤을 때(수신부 튀어나온 면) 왼쪽부터 다음과 같은 핀 배열을 가집니다.

    1. Vout (Signal): 마이크로컨트롤러(ESP32, Arduino 등)의 디지털 핀에 연결
    2. GND: 그라운드
    3. VCC: 전원 (3.3V 또는 5V)

    참고: 제조사에 따라 1번과 2번 핀이 바뀌어 있는 경우가 간혹 있으니, 데이터시트나 모듈의 각인을 반드시 확인해야 합니다.


    요약 및 추천

    • 정밀한 측정이나 안정적인 제어가 필요하다면? TSOP4838을 권장합니다.
    • 저렴하게 대량으로 간단한 테스트를 하고 싶다면? VS1838B가 경제적입니다.
    • 밸런스를 고려한다면 HS0038BD를 선택하시면 됩니다.

    1. 추가 IR 수신 모듈 비교

    모델명주요 특징 및 용도비고
    TSOP38238소형/저전력의 끝판왕. TSOP4838보다 크기가 작고 소비 전류가 매우 낮음 (0.35mA 수준).배터리 구동 IoT 기기에 최적
    TSOP34838TSOP4838의 성능 강화 버전. 노이즈 억제력이 더 뛰어나고 수신 거리가 안정적임.산업용, 고신뢰성 장비
    IRM-3638Everlight사 제품. TSOP 시리즈와 유사한 성능을 내면서도 가격 경쟁력이 좋음.가전제품(TV, 에어컨) 내부용
    TL1838VS1838B와 거의 동일한 저가형 모델. 아두이노 키트에 단골로 들어감.교육용, 단순 테스트용
    TSSP4038센서 전용 (고정 이득). 리모컨 신호 해석보다는 **물체 감지(근접 센서)**에 특화됨.장애물 회피, 카운터용

    2. 프로젝트 상황별 추천 모듈

    ① 배터리로 작동하는 스마트 센서를 만든다면?

    • 추천: TSOP38238
    • 이유: 소비 전류가 일반 모듈의 절반 수준인 0.35mA 정도로 매우 낮습니다. ESP32의 딥슬립 모드와 결합하여 전력 효율을 극대화할 때 가장 유리합니다.

    ② 부화기 주변처럼 전기적 노이즈가 많은 환경이라면?

    • 추천: TSOP34838 또는 TSOP4838
    • 이유: 모터나 히터 제어 시 발생하는 전자기적 노이즈(EMI)에 강합니다. 저가형인 VS1838 계열은 이런 환경에서 리모컨 신호를 잘못 읽거나(오동작) 반응하지 않을 수 있습니다.

    ③ 리모컨 신호 수신이 아니라 “물체 감지”가 목적이라면?

    • 추천: TSSP4038
    • 이유: 일반적인 리모컨 수신기는 신호가 계속 들어오면 노이즈로 간주하고 차단하는 기능(AGC)이 있는데, TSSP 시리즈는 이 기능이 없어 IR LED를 계속 쏘아 반사되는 빛을 감지하는 장애물 센서를 만들기에 적합합니다.

    3. 하드웨어 구성 시 팁 (안정성 향상)

    만약 DIY 프로젝트에서 수신 거리가 짧거나 오작동이 발생한다면 아래 회로 구성을 추가해 보세요.

    1. 디커플링 커패시터: VCC와 GND 사이에 0.1µF(또는 4.7µF) 커패시터를 최대한 수신기 가까이 붙여주세요. 전원 노이즈를 획기적으로 줄여줍니다.
    2. 풀업 저항: 신호(OUT) 핀과 VCC 사이에 10kΩ 저항을 연결하면 신호가 없을 때 전압을 안정적으로 유지(High)해 줍니다. (대부분의 모듈형 제품엔 이미 포함되어 있습니다.)

    사용하시려는 ESP32-C3의 특정 핀(GPIO)과 연결 시 전압 레벨(3.3V) 호환성은 위 모델들 모두 문제없으므로, 프로젝트의 예산과 신뢰성 요구치에 맞춰 선택하시면 됩니다.


    Vishay사의 TSOP4838TSOP34838은 사실상 형제 모델이며 성능 수치는 매우 유사하지만, **패키지 크기(Physical Size)**와 노이즈 억제력의 미세한 튜닝에서 차이가 발생합니다.

    개발자 관점에서 두 부품을 정밀하게 비교해 드립니다.


    1. 하드웨어 사양 비교 (Side-by-Side)

    항목TSOP4838TSOP34838
    패키지 형태Standard Mold (표준형)Minimold (소형화)
    크기 (가로x세로x두께)약 6.0 x 6.95 x 5.6 mm약 5.0 x 6.95 x 4.8 mm
    소비 전류 (Is​)0.7mA (Typ.)0.7mA (Typ.)
    작동 전압 (Vs​)2.5V ~ 5.5V2.5V ~ 5.5V
    수신 거리최대 45m최대 45m
    내부 AGC 타입AGC2 (Standard)AGC2 (Standard)
    광학 필터에폭시 수지 (검정)에폭시 수지 (검정)

    2. 핵심 차이점 분석

    ① 패키징과 물리적 크기 (The Main Difference)

    • TSOP4838: 가장 전통적인 형태의 IR 수신기입니다. 부품이 약간 더 크고 다리가 굵어 빵판(Breadboard) 테스트나 수작업 납땜 시 물리적으로 더 튼튼하게 고정됩니다.
    • TSOP34838: TSOP48 시리즈를 현대적으로 소형화한 모델입니다. 기능은 동일하지만 부피가 작아 PCB 설계를 작게 뽑아야 하거나, 케이스 내부 공간이 협소한 장치에 유리합니다.

    ② 주변 광 노이즈(Ambient Light) 내성

    두 제품 모두 Vishay의 우수한 필터 기술이 적용되어 있지만, 최신 공정에서 생산되는 TSOP34838이 미세하게나마 형광등이나 LCD 백라이트에서 발생하는 광 노이즈를 걸러내는 능력이 최적화되어 있습니다. 다만, 체감상 수신 거리 차이는 거의 없습니다.

    ③ AGC(Automatic Gain Control) 알고리즘

    두 모델 모두 AGC2를 사용합니다. 이는 일반적인 리모컨 신호(NEC, RC5, Sony 등)를 해석하는 데 가장 표준적인 알고리즘입니다.

    • **연속적인 신호(Continuous Signal)**가 들어오면 노이즈로 간주하고 차단하는 능력이 동일하므로, 데이터 전송용보다는 **제어용(Remote Control)**에 최적화되어 있습니다.

    3. 어떤 상황에 무엇을 쓸까?

    • TSOP4838을 선택해야 할 때:
      • 기존의 구형 회로를 수리하거나 대체할 때.
      • 회로 기판의 크기에 제약이 없고, 납땜의 편의성이 중요할 때.
      • 부품을 손으로 자주 만져야 하는 프로토타입 단계일 때.
    • TSOP34838을 선택해야 할 때:
      • 제품의 외관을 최대한 슬림하게 만들어야 할 때.
      • 최신 부품을 사용하여 장기적인 수급 안정성을 확보하고 싶을 때.
      • 주변에 강력한 LED 조명이나 전자기기가 많아 미세한 노이즈라도 더 줄이고 싶을 때.

    결론

    사실상 두 부품은 전기적으로는 1:1 교체가 가능할 정도로 호환성이 높습니다. 만약 ESP32-C3 기반의 컨트롤러를 소형 케이스에 넣으실 계획이라면 공간 효율이 좋은 TSOP34838을, 빵판에서 점퍼 와이어로 연결하며 실험 중이시라면 다루기 편한 TSOP4838을 추천드립니다.

  • T7 멀티 테스터 결과값 완벽 해부: 다이오드, TR, MOSFET 측정 데이터 읽는 법

    T7 멀티 테스터 결과값 완벽 해부: 다이오드, TR, MOSFET 측정 데이터 읽는 법

    파란색 발광 LED

    LCR T-7이나 TC-1 같은 **멀티 테스터(M-Tester)**가 측정한 다이오드(Diode)의 결과 화면입니다. 각 수치가 의미하는 내용은 다음과 같습니다.

    1. 주요 측정 지표

    • Diode: 현재 측정 중인 부품이 ‘다이오드’임을 인식했다는 뜻입니다.
    • Uf​=2.71V (순방향 전압, Forward Voltage)
      • 다이오드가 작동(전류가 흐름)하기 위해 필요한 최소 전압입니다.
      • 일반적인 실리콘 다이오드는 0.6~0.7V, LED는 색상에 따라 1.8~3.3V 정도 나옵니다. **2.71V라면 고휘도 LED나 특정 색상의 LED(청색, 백색 등)**일 가능성이 매우 높습니다.
    • Ir​=8nA (역방향 누설 전류, Reverse Leakage Current)
      • 다이오드에 반대 방향으로 전압이 걸렸을 때 미세하게 흐르는 전류입니다. 8nA(나노암페어)는 매우 적은 양으로, 다이오드의 상태가 아주 건강하다는 것을 의미합니다.
    • C=26pF (접합 커패시턴스, Junction Capacitance)
      • 다이오드 내부의 물리적 구조 때문에 발생하는 아주 작은 정전용량입니다. 26pF 정도면 일반적인 소형 다이오드나 LED에서 흔히 볼 수 있는 수치입니다.

    2. 회로 연결 상태 (하단 그림)

    • 1번(빨간색): 다이오드의 **애노드(Anode, +)**가 테스터의 1번 단자에 연결됨.
    • 2번(파란색): 다이오드의 **캐소드(Cathode, -)**가 테스터의 2번 단자에 연결됨.
    • 삼각형 모양의 화살표 방향(1 → 2)으로 전류가 흐른다는 것을 보여줍니다.

    요약하자면?

    측정하신 부품은 **정상적으로 작동하는 다이오드(또는 LED)**입니다. 특히 Uf​ 값이 2.71V인 것으로 보아, 일반 다이오드보다는 LED를 측정하신 것으로 보입니다.


    IRLZ44N

    1. 부품 종류: N-E-MOS

    • N-channel Enhancement mode MOSFET의 약자입니다.
    • 게이트(Gate)에 일정 전압 이상의 ‘플러스(+)’ 신호를 주었을 때만 전류가 흐르는 스위치 역할을 하는 부품입니다.

    2. 주요 측정 지표

    • Vt=2.25V (문턱 전압, Threshold Voltage)
      • 이 MOSFET을 켜기(ON) 위해 게이트에 걸어줘야 하는 최소 전압입니다. 즉, 2.25V보다 높은 전압을 주어야 스위치가 닫히며 작동하기 시작합니다.
    • Cg=2.13nF (게이트 커패시턴스)
      • 게이트 전극에 쌓이는 정전용량입니다. 이 값이 클수록 스위칭 속도가 약간 느려질 수 있지만, 2.13nF 정도면 일반적인 파워 MOSFET 수준입니다.
    • RDS=0.2Ω (드레인-소스 온 저항)
      • MOSFET이 완전히 켜졌을 때 드레인과 소스 사이의 저항값입니다. 0.2옴은 매우 낮은 편으로, 전류가 흐를 때 열 발생이 적고 효율이 좋은 상태임을 나타냅니다.
    • 608mV (보호 다이오드 전압)
      • 화면 중앙에 작게 표시된 전압은 MOSFET 내부에 포함된 **기생 다이오드(Body Diode)**의 순방향 전압입니다. 일반적인 실리콘 다이오드 특성(0.6V 근처)을 잘 보여주고 있습니다.

    3. 핀 배열 (Pinout)

    그림에 표시된 숫자와 부품의 핀을 대조하면 됩니다:

    1. 1번(G, Gate): 제어 신호를 받는 게이트
    2. 2번(D, Drain): 전류가 들어오는 드레인
    3. 3번(S, Source): 전류가 나가는 소스

    요약하자면?

    측정하신 MOSFET은 상당히 효율이 좋고(낮은 RDS), 약 2.25V 정도의 신호로 제어가 시작되는 정상 제품입니다. ESP32나 아두이노 같은 마이크로컨트롤러(3.3V나 5V 출력)로 직접 제어하기에도 적합한 사양으로 보이네요.


    이번에는 가장 대중적인 트랜지스터인 BJT-NPN형을 측정하셨네요. 스위칭이나 신호 증폭 회로에서 가장 흔하게 쓰이는 부품입니다.

    1. 부품 종류: BJT-NPN

    • **Bipolar Junction Transistor (NPN형)**입니다.
    • 베이스(Base) 단자에 아주 작은 전류를 흘려주면, 컬렉터(Collector)에서 이미터(Emitter)로 더 큰 전류가 흐르게 하는 ‘수도꼭지’ 같은 역할을 합니다.

    2. 주요 측정 지표

    • hFE=241 (전류 증폭률)
      • 베이스에 흐르는 전류를 몇 배로 증폭시키는지 나타내는 값입니다. 여기서는 약 241배로 증폭된다는 뜻이며, 일반적인 소신호용 트랜지스터(C1815 등)의 아주 정상적인 범위입니다.
    • Ie​=1.6mA (이미터 전류)
      • 테스터가 측정하는 동안 이미터 단자에 흐른 전류값입니다.
    • Ube=592mV (베이스-이미터 순방향 전압)
      • 트랜지스터를 작동시키기 위해 베이스와 이미터 사이에 필요한 전압입니다. 약 0.59V 정도로, 전형적인 실리콘 트랜지스터의 특성을 잘 보여줍니다.

    3. 핀 배열 (Pinout)

    화면의 숫자와 부품의 다리 위치를 매칭하면 됩니다:

    1. 3번(B, Base): 제어 신호를 입력하는 베이스
    2. 2번(C, Collector): 전류가 들어오는 컬렉터
    3. 1번(E, Emitter): 전류가 나가는 이미터

    요약하자면?

    이 부품은 증폭 성능이 양호한 정상적인 NPN 트랜지스터입니다. hFE 값이 241 정도로 준수해서 센서 신호를 증폭하거나 LED, 소형 모터를 제어하는 스위치로 사용하기에 딱 좋습니다.


    이 트렌지스터 std 882 r4 라고 적혀있는데

    부품에 S882 (또는 2SD882)라고 적혀 있다면, 이는 아주 유명한 NPN 중출력 트랜지스터입니다. 일반적인 소형 트랜지스터보다 더 큰 전류를 흘릴 수 있는 부품이죠.

    방금 테스터로 측정하신 결과값(hFE=241, Ube=592mV)과 비교해서 이 부품의 특징을 정리해 드릴게요.

    1. S882 (2SD882) 트랜지스터의 특징

    • 중출력용 (Medium Power): 일반적인 소형 트랜지스터(예: C1815)가 보통 150mA 정도를 견디는 데 비해, S882는 최대 **3A**까지 견딜 수 있습니다.
    • 낮은 포화 전압: 전력 손실이 적어 모터 드라이버나 전원 스위칭 회로에 아주 자주 쓰입니다.
    • 측정값 분석:
      • hFE=241: S882의 증폭률 등급 중 ‘R’이나 ‘Q’ 등급에 해당하는 아주 좋은 수치입니다. (보통 60~400 사이)
      • Ube=592mV: 데이터시트상의 표준 범위 내에 있어 부품 상태가 매우 건강함을 의미합니다.

    2. 주의사항 (핀 배열 확인)

    테스터 화면에서 보신 것처럼 이 부품의 핀 배열은 다음과 같습니다:

    • 1번 단자 (테스터 3번 연결): B (Base)
    • 2번 단자 (테스터 2번 연결): C (Collector)
    • 3번 단자 (테스터 1번 연결): E (Emitter)

    참고: S882는 전면(글자가 써진 면)을 바라봤을 때 왼쪽부터 E – C – B 순서인 경우가 많습니다. 테스터가 알려준 핀 번호와 실제 꽂으신 위치를 잘 매칭해서 회로에 연결하세요.


    3. 활용 팁

    이 트랜지스터는 전류를 많이 소모하는 소형 DC 모터 제어고휘도 LED 스트립을 켜는 용도로 사용하기에 딱 좋습니다.


    이번 부품은 처음에 보여주신 다이오드와는 성격이 아주 다른 쇼트키 다이오드(Schottky Diode) 계열로 보입니다. 부품 명칭이 1N5822(사진 파일명 기준)라면 더욱 확실합니다.

    화면의 수치가 무엇을 의미하는지 분석해 드릴게요.

    1. 주요 측정 지표

    • Uf​=252mV (순방향 전압)
      • 가장 주목해야 할 수치입니다. 일반적인 다이오드가 600~700mV인 반면, 이 부품은 약 0.25V로 매우 낮습니다.
      • 순방향 전압이 낮다는 것은 전류를 흘릴 때 전력 손실이 적고 열이 덜 발생한다는 뜻입니다. 그래서 효율이 중요한 전원 회로나 역전압 방지용으로 아주 좋습니다.
    • Ir​=1.2μA (역방향 누설 전류)
      • 처음 보여주신 일반 다이오드(8nA)보다 약 150배 정도 높은 수치입니다. 이는 쇼트키 다이오드의 전형적인 특징으로, 작동 속도가 빠른 대신 역방향으로 흐르는 미세한 전류가 일반 다이오드보다는 조금 더 많습니다. 하지만 1.2마이크로암페어 정도면 회로 설계상 아주 정상적인 범위입니다.

    2. 1N5822 부품의 특징

    • 고속 스위칭: 반응 속도가 매우 빨라서 고주파 회로나 스위칭 전원 공급 장치(SMPS)에 주로 쓰입니다.
    • 3A 용량: 1N5822는 보통 최대 3A의 전류를 견딜 수 있는 튼튼한 녀석입니다.

    3. 활용 팁

    방금 설명해 드린 S882 트랜지스터와 함께 사용하신다면, 이 다이오드는 역전압 보호용이나 모터가 멈출 때 발생하는 역기전력을 흡수하는 플라이백(Flyback) 다이오드로 활용하기에 아주 완벽한 조합입니다.

    지금 제작 중인 부화기 제어 시스템이나 모터 구동 회로에서 전원부 보호용으로 배치하면 부품들이 손상되는 것을 효과적으로 막을 수 있습니다.


    A2SHB SOT-23

    1. 부품 식별: N-E-MOS

    • 이 부품은 N-채널 증가형(Enhancement mode) MOSFET입니다.
    • 주로 스위칭 회로나 전원 제어용으로 사용되는 반도체입니다.

    2. 핀 배열 (Pinout)

    화면의 회로도를 보면 테스터기의 소켓 번호와 부품의 핀이 어떻게 매칭되는지 알 수 있습니다.

    • 1번 단자: Gate (G) – 제어 신호가 들어가는 곳
    • 2번 단자: Source (S) – 전류가 나가는 곳 (보통 GND 연결)
    • 3번 단자: Drain (D) – 전류가 들어오는 곳 (부하 연결)

    3. 주요 측정 데이터

    이 데이터들은 해당 MOSFET이 정상인지, 그리고 회로 설계 시 어떤 특성을 가졌는지 판단하는 지표가 됩니다.

    • Vt​=926mV (문턱 전압): 게이트에 약 0.9V 정도의 전압이 걸리기 시작하면 MOSFET이 켜지기 시작한다는 뜻입니다. 이 값이 낮을수록 낮은 전압(MCU 로직 레벨 등)으로 제어하기 유리합니다.
    • Cg​=223pF (게이트 정전용량): 게이트의 커패시턴스입니다. 이 값이 작을수록 고속 스위칭에 유리합니다.
    • RDS​=0.7Ω (온 저항): MOSFET이 완전히 켜졌을 때 Drain과 Source 사이의 저항값입니다. 0.7옴이면 상당히 낮은 편이라 열 발생이 적고 효율이 괜찮은 부품임을 알 수 있습니다.
    • 690mV: 그림에 표시된 다이오드 기호 옆의 전압은 MOSFET 내부에 포함된 **보호 다이오드(Body Diode)**의 순방향 전압 강하를 나타냅니다.

    팁: 만약 이 부품이 이전에 사용하던 IRLZ44N과 같은 로직 레벨 MOSFET이라면, 현재 측정된 Vt​ 값이 1V 미만으로 매우 낮게 나왔으므로 ESP32 같은 3.3V 전압으로도 충분히 직접 구동이 가능한 상태임을 확인할 수 있습니다.

  • Hall Effect Sensor SS49E 센서로 RPM 측정하기

    Hall Effect Sensor SS49E 센서로 RPM 측정하기

    안녕하세요! 오늘은 보이지 않는 힘, ‘자기장’을 감지해서 실시간 데이터로 바꿔주는 신기한 부품, **SS49E 홀 센서(Hall Effect Sensor)**에 대해 깊이 있게 알아보겠습니다.

    최근 쇼츠 영상에서 보여드린 것처럼, 이 작은 부품 하나로 고속 회전하는 바퀴의 RPM을 측정할 수 있는데요. 그 원리와 구현 과정에서 겪었던 노하우를 모두 공유합니다.


    1. 홀 센서(SS49E)란 무엇인가?

    홀 센서는 **’홀 효과(Hall Effect)’**를 이용해 자기장의 세기를 전압 신호로 바꾸는 센서입니다.

    • 리니어(Linear) 출력: SS49E는 ‘리니어’ 타입입니다. 단순히 자석이 “있다/없다”만 알려주는 게 아니라, 자석이 얼마나 가까운지, 어느 극(N/S)인지에 따라 전압을 연속적으로 출력합니다.
    • 작동 원리: 자석의 N극이 가까워지면 기준 전압보다 값이 커지고, S극이 가까워지면 값이 작아지는 특성을 가집니다. (또는 그 반대)

    2. 리드 스위치(Reed Switch)와는 무엇이 다른가?

    자석에 반응한다는 점 때문에 리드 스위치와 헷갈려 하시는 분들이 많습니다. 하지만 결정적인 차이가 있습니다.

    특징리드 스위치 (Reed Switch)홀 센서 (SS49E)
    작동 방식물리적인 금속 접점이 자석에 의해 붙음반도체 소자가 자기장을 전기 신호로 변환
    수명물리적 접점이므로 수명에 한계가 있음반도체식이므로 반영구적임
    반응 속도느림 (기계적 움직임 필요)매우 빠름 (고속 회전 측정 가능)
    정밀도On/Off만 가능자기장의 세기를 숫자로 측정 가능

    결론: 고속으로 돌아가는 5,000 RPM 이상의 바퀴를 측정하려면, 물리적 접점이 없는 홀 센서가 필수입니다.


    3. RPM 측정의 핵심 로직 (자석 2개의 마법)

    이번 프로젝트에서는 바퀴에 자석을 2개 달았습니다. 왜일까요?

    바퀴의 무게 균형(Balance)을 맞추기 위해서이기도 하지만, 더 정밀한 측정이 가능하기 때문입니다.

    • 계산 공식: 자석이 2개라면, 센서에 신호가 2번 들어와야 한 바퀴를 돈 것입니다.
    • 따라서 신호와 신호 사이의 시간(duration)을 측정했다면, RPM 공식은 다음과 같습니다.$$RPM = \frac{60,000,000}{\text{duration\_us} \times 2} = \frac{30,000,000}{\text{duration\_us}}$$

    4. 실전 문제 해결: “자석이 없는데 왜 RPM이 나오죠?”

    개발 과정에서 가장 당황스러웠던 점은 자석이 가만히 있는데도 RPM이 300~400씩 찍히는 현상이었습니다. 원인은 바로 **전기적 노이즈(Noise)**였습니다.

    1. 스파이크 노이즈: 눈에는 보이지 않지만, 전압이 찰나의 순간에 튀면서 코드가 이를 자석으로 오해합니다.
    2. 해결책 (Hysteresis): 기준값(2318)에서 아주 미세하게 변하는 것은 무시하고, 확실하게 값이 튈 때(예: 차이가 500 이상)만 자석으로 인식하도록 **문턱값(Hysteresis)**을 설정해야 합니다.
    3. 시간 제한: 5,000 RPM의 물리적 한계 시간을 계산해, 그보다 너무 빠르게 들어오는 신호는 노이즈로 간주하고 버리는 로직을 추가했습니다.

    5. 최종 보정 코드 (MicroPython)

    ESP32-C3와 SS49E를 연결했을 때 가장 안정적으로 작동하는 코드 구조입니다.

    Python


    6. 응용 및 다음 단계: 가전제품 전원 감지?

    홀 센서의 활용도는 무궁무진합니다.

    SS49E는 워낙 예민해서, 전선에 흐르는 전류가 만드는 미세한 자기장도 읽어낼 수 있습니다.

    • 다음 프로젝트 예고: 가전제품 전선 근처에 홀 센서를 대면, 제품이 켜졌는지 꺼졌는지 비접촉으로 확인할 수 있을까요? 전류가 흐를 때 생기는 자기장의 변화를 포착하는 실험을 다음 포스팅에서 다뤄보겠습니다.

    Python ss49e.py

  • ESP32를 뒤로하고, RP2040과 CC1101로 구현한 초장거리 무선 제어

    ESP32를 뒤로하고, RP2040과 CC1101로 구현한 초장거리 무선 제어

    안녕하세요! 오늘은 무선 통신 프로젝트의 ‘진한 맛’을 느껴보고 싶어 시작한 RP2040 + CC1101 장거리 통신 프로젝트 제작기를 공유합니다.


    1. 왜 ESP32가 아닌 CC1101인가?

    많은 분이 묻습니다. “ESP32 쓰면 Wi-Fi도 있고 블루투스도 있는데, 왜 귀찮게 외부 모듈을 쓰나요?” 하지만 엔지니어라면 공감할 CC1101만의 대체 불가능한 매력이 있습니다.

    • 압도적인 장애물 투과력: 2.4GHz(Wi-Fi)는 벽 하나만 있어도 신호가 급감하지만, CC1101이 사용하는 Sub-1GHz(433MHz) 대역은 파장이 길어 벽을 타고 넘는 회절성이 뛰어납니다.
    • 미친 통신 거리: 설정만 잘하면 개활지에서 수백 미터, 심지어 1km 가까이 신호를 보낼 수 있습니다.
    • 날것의 전파(RAW RF): 표준 프로토콜에 갇히지 않고 주파수부터 데이터 레이트까지 내 입맛대로 주무를 수 있는 진정한 무선의 재미를 줍니다.

    2. CC1101의 명암: 장점과 단점

    직접 만져보며 느낀 CC1101의 특징을 솔직하게 정리합니다.

    👍 장점

    • 유연성: 300MHz부터 928MHz까지 광범위한 주파수 설정 가능.
    • 저전력: 전송 시 소모 전류가 매우 적어 배터리 구동에 최적화.
    • 호환성: 아두이노, STM32, 그리고 이번에 사용한 RP2040까지 SPI 통신만 있다면 어디든 연결 가능.

    👎 단점

    • 까다로운 초기 설정: 레지스터 값이 수백 개입니다. 하나만 틀려도 통신이 안 됩니다.
    • 안테나 의존성: 안테나 길이나 방향에 따라 성능 차이가 극명합니다.
    • 간섭 문제: 433MHz는 자동차 리모컨, 무선 벨 등이 많이 써서 나만의 ‘주소(Address)’ 설정이 필수입니다.

    3. 하드웨어 연결 (SPI 핀 맵)

    RP2040은 하드웨어 SPI 핀이 지정되어 있습니다. 매뉴얼에 명시된 SPI0 또는 SPI1 전용 핀을 반드시 사용해야 합니다.
    RP2040배선을 아래 중 하나로 반드시 바꾸셔야 에러가 해결됩니다.

    기능권장 (SPI 0)대안 (SPI 1)
    SCKGP2 또는 GP6GP10 또는 GP14
    MOSIGP3 또는 GP7GP11 또는 GP15
    MISOGP0 또는 GP4GP8 또는 GP12

    4. 양방향 통신 구현

    “CC1101의 기본 동작은 송신 또는 수신 중 한 방향으로만 작동하는 반이중(Half-Duplex) 방식입니다. 이를 극복하기 위해 멀티쓰레딩(Multithreading) 기법을 도입했습니다. 평상시에는 수신 대기 상태를 상시 유지하다가, 송신 이벤트 발생 시에만 즉시 모드를 전환하여 데이터를 전송하고 다시 수신 모드로 복귀하는 로직을 구현함으로써, 사용자 관점에서의 **심리스(Seamless)한 양방향 통신(Bidirectional Communication)**을 완성했습니다.”

    테스트의 편의를 위해 하나의 브레드보드 위에 구성했지만, 좌우측의 전원 라인까지 완전히 분리하여 전기적으로 독립된 두 개의 개별 장치(Standalone Device) 환경을 구축했습니다. 물리적 연결 없이 오직 CC1101의 RF 신호만을 이용해 데이터를 주고받는 실제 무선 통신 환경을 재현했습니다.

    5. 장거리 통신

    Python cc1101.py

    Python left.py

    Python right.py

  • 서보 모터 여러 개는 이거 하나로 끝! PCA9685 사용법

    서보 모터 여러 개는 이거 하나로 끝! PCA9685 사용법

    PCA9685 모듈의 양 끝에는 6개의 핀이 일렬로 배치되어 있습니다. 이 핀들은 I2C 통신을 주고받고 전원을 공급받기 위한 통로입니다.

    보통 모듈의 왼쪽과 오른쪽에 똑같은 구성으로 6개씩 있는데, 이는 여러 개의 PCA9685를 기차놀이처럼 직렬(Daisy Chain)로 연결하기 쉽게 하기 위해서입니다.

    핀의 명칭과 역할은 다음과 같습니다.


    📍 PCA9685 6핀 인터페이스

    핀 명칭역할 설명연결 대상 (ESP32-C3 기준)
    GND그라운드 (0V)ESP32-C3의 GND
    OEOutput Enable (출력 활성화)연결 안 함 (또는 GPIO 연결)
    SCLI2C 클럭 신호ESP32-C3의 GPIO 1
    SDAI2C 데이터 신호ESP32-C3의 GPIO 0
    VCC로직 전원 (3.3V ~ 5V)ESP32-C3의 3.3V
    V+서보 전원 (최대 6V)외부 전원(+) 또는 5V

    🔍 핵심 핀 상세 설명

    1. OE (Output Enable) – 중요!

    • 이 핀은 비상 정지 스위치 같은 역할입니다.
    • 기본적으로 내부에서 LOW(0)로 당겨져 있어서 연결하지 않아도 출력이 잘 나옵니다.
    • 만약 이 핀을 HIGH(3.3V)로 연결하면, 16개 모든 채널의 PWM 출력이 즉시 차단됩니다. 안전이 중요한 프로젝트에서 제어기에 연결해 사용합니다.

    2. VCC vs V+ (전원 구분 필수)

    • VCC: PCA9685의 **머리(칩)**를 깨우는 전원입니다. ESP32와 통신하기 위해 ESP32의 3.3V 전원을 씁니다.
    • V+: 서보 모터나 LED를 돌리는 힘입니다. 파란색 터미널 블록과 연결되어 있습니다. 모터를 많이 연결한다면 외부 전원(5V 건전지 등)을 여기에 공급해야 ESP32가 타지 않습니다.

    3. SCL & SDA

    • I2C 통신 라인입니다. 이 두 선만으로 16개의 채널을 제어합니다.

    💡 팁: 왜 양쪽에 6개씩 있나요?

    PCA9685는 확장성이 장점입니다. 첫 번째 모듈의 오른쪽 6핀과 두 번째 모듈의 왼쪽 6핀을 그대로 이어 붙이면, 선 4가닥(VCC, GND, SCL, SDA)만으로도 32개, 48개… 최대 992개의 서보 모터를 제어할 수 있게 설계되었기 때문입니다.

    Python pca9685.py

    Python test.py

  • INA226 초정밀 전력 모니터링 가이드: 소수점 단위까지 잡아내는 리얼타임 와트메타(Wattmeter) 만들기

    INA226 초정밀 전력 모니터링 가이드: 소수점 단위까지 잡아내는 리얼타임 와트메타(Wattmeter) 만들기

    1. 들어가며: “내 프로젝트, 전기를 얼마나 먹을까?”

    임베디드 프로젝트를 진행하다 보면 단순히 동작 여부를 넘어, 실제 소모 전력이 얼마나 되는지 궁금할 때가 많습니다. 특히 배터리로 구동되는 기기라면 ‘mA’ 단위의 미세한 차이가 기기의 수명을 결정짓죠. 오늘은 16비트 ADC의 강력한 성능을 가진 INA226 센서를 이용해, 단순한 전압 측정을 넘어 전력 소모의 흐름을 눈으로 직접 확인하는 초정밀 디지털 전력계를 만들어 보았습니다.

    2. 하드웨어 구성의 핵심: “데이터의 길목을 찾아라”

    이번 프로젝트에서 가장 중요한 부분은 INA226의 배선이었습니다. 시중의 모듈은 터미널 구멍이 여러 개라 헷갈리기 쉽지만, 테스터기를 이용해 직접 확인해 본 결과 2번(IN+)과 3번(IN-) 구멍이 션트 저항에 직접 연결된 핵심 경로임을 확인했습니다.

    • 제어기: ESP32-C3 (I2C 통신: SDA GPIO 0, SCL GPIO 1)
    • 센서: INA226 (High-side 측정 방식)
    • 디스플레이: SSD1306 OLED (128×64)
    • 부하(Load): LED 2개, 소형 DC 모터 (스위치로 개별 제어)

    3. 소프트웨어 구현

    단순히 숫자만 띄우는 것이 아니라, MicroPython을 이용해 데이터의 시인성을 극대화했습니다. OLED 화면에는 전압(V), 전류(mA), 전력(mW)을 소수점 자리까지 정밀하게 표기하고, 하단에는 현재 전력 소모량을 직관적으로 알 수 있는 **바 그래프(Bar Gauge)**를 구현했습니다.

    또한, PC의 **시리얼 플로터(Serial Plotter)**를 연동하여 스위치를 켤 때마다 전류가 계단식으로 상승하거나 모터에 부하가 걸릴 때 그래프가 요동치는 모습을 실시간으로 관찰할 수 있도록 설계했습니다.

    4. 프로젝트의 하이라이트: LED vs 모터

    실제 테스트 결과는 흥미로웠습니다.

    • LED 1개 점등: 안정적인 저전력 소모를 보여주며 그래프가 정지해 있는 느낌입니다.
    • 모터 가동: LED보다 훨씬 높은 전류를 소모하며, 특히 모터 축에 물리적인 부하를 주면 전류값이 즉각적으로 솟구치는 ‘피크 전류’ 현상을 INA226이 아주 예민하게 잡아냈습니다. 이는 가변저항 수치를 단순히 뿌려주는 것이 아니라, 진짜 흐르는 전기를 실시간으로 계측하고 있다는 증거입니다.

    5. 마치며: 정밀 측정의 즐거움

    INA226은 단순한 센서 그 이상이었습니다. 0.1mA의 미세한 변화까지 잡아내는 이 장치는 이제 제 책상 위에서 모든 프로젝트의 에너지 효율을 감시하는 ‘보디가드’ 역할을 하게 될 것입니다. 여러분도 직접 만든 장치로 보이지 않는 전기의 흐름을 제어해 보세요!

    빨간 동그라미 안의 두선이 전력측정선 부하에 직렬연결

    Python ina226.py

    Python wattmeter.py

  • 2.0 인치 TFT 디스플레이 ST7789V 성능리뷰

    2.0 인치 TFT 디스플레이 ST7789V 성능리뷰

    안녕하세요! 오늘은 마이크로컨트롤러(MCU) 프로젝트의 꽃, 디스플레이 업그레이드 이야기를 해보려 합니다. 최근 알리나 국내 오픈마켓에서 “2.0인치 OLED”라는 제목으로 팔리는 제품들, 아마 많이 보셨을 겁니다. 저도 이번에 스마트 부화기 프로젝트를 위해 하나 업어왔는데요. 결론부터 말씀드리면, 이건 OLED가 아니라 ST7789V 드라이버를 사용하는 TFT LCD입니다!

    하지만 실망하긴 이릅니다. 오히려 이 녀석, 제대로 다뤄보니 OLED보다 훨씬 매력적인 구석이 많거든요.

    1. “OLED라고 써있는데 왜 LCD인가요?”

    판매자들의 낚시성 제목에 속으셨나요? 괜찮습니다. 구조를 보면 명확합니다.

    • OLED: 소자 스스로 빛을 내어 백라이트가 없고 종이처럼 얇음. (번인 위험 있음)
    • TFT LCD: 뒤에서 LED가 빛을 쏴주는 백라이트 방식. (번인 걱정 없음!)

    24시간 내내 온도와 습도를 띄워야 하는 ‘스마트 부화기’ 같은 장치에는 오히려 화면이 타버릴 걱정 없는 TFT LCD가 신의 한 수입니다.


    2. 하드웨어 SPI: 고속도로를 타야 제맛!

    이 디스플레이의 핵심은 속도입니다. 보통 핀이 모자라다고 아무 핀에나 연결(Software SPI)하면 화면이 뚝뚝 끊기는 걸 보게 됩니다. 하지만 ESP32-C3의 **하드웨어 전용 핀(IOMUX)**을 사용하면 이야기가 달라집니다.

    • 권장 핀 배치 (ESP32-C3 SuperMini 기준):
      • SCK: GPIO 4 (전용 고속 통로)
      • MOSI: GPIO 6 (전용 고속 통로)
      • CS/DC/RES: GPIO 5, 7, 10 (비교적 자유로움)

    이렇게 연결하고 SPI 속도를 60MHz로 설정하면, MicroPython 환경에서도 초당 60프레임급의 부드러운 애니메이션을 감상할 수 있습니다.


    3. “깜빡임(Flicker)과의 전쟁”에서 승리하는 법

    처음 코드를 짜면 숫자가 바뀔 때마다 화면이 깜빡거려 눈이 아플 수 있습니다. 이건 ‘지우고(Black) -> 새로 쓰기(Text)’ 과정에서 검은색이 우리 눈에 잔상으로 남기 때문인데요.

    해결책은 ‘배경색 동시 출력’입니다. tft.text(font, "12:30", x, y, WHITE, BLACK) 처럼 글자색과 배경색을 한 번에 쏘면, 기존 글자를 지울 필요 없이 덮어씌워지기 때문에 깜빡임이 0%가 됩니다. 마치 고급 스마트워치 같은 부드러움을 느낄 수 있죠.


    4. 실전! 벽돌깨기 게임으로 증명하는 퍼포먼스

    단순히 수치만 띄우기엔 이 LCD의 성능이 아깝습니다. 하드웨어 SPI의 극한을 테스트하기 위해 벽돌깨기 게임을 돌려보았습니다.

    • 잔상 제거 팁: 공이 벽에 부딪힐 때 미세하게 남는 빨간 점들은 좌표 계산의 오차 때문입니다. 공이 벽을 뚫고 나가지 않도록 좌표를 강제로 고정(ball_x = WIDTH - size)해주면 아주 깨끗한 화면을 유지할 수 있습니다.

    5. 마무리하며: 2편 예고

    이번 1편에서는 2인치 TFT LCD의 정체를 밝히고, 하드웨어 SPI를 통한 성능 최적화까지 알아보았습니다.

    “작은 OLED의 답답함에서 벗어나, 240×320 고해상도의 시원시원한 화면을 보니 이제야 프로젝트 할 맛이 나네요!”

    이어지는 2편에서는 이 화면 아래에 ToF(거리 측정) 센서 3개를 연동하여 실시간 데이터를 멋지게 시각화하는 과정을 공유해 드리겠습니다. 핀이 부족할 것 같다고요? I2C 버스의 마법을 기대해 주세요!

    ※ 부록: 성능을 결정짓는 SPI 전용 핀 가이드

    ESP32-C3 SuperMini는 핀 수가 적지만, 내부적으로 **IOMUX(Input/Output Multiplexer)**라는 고속 도로가 특정 핀에 깔려 있습니다. 이 ‘전용석’을 지키느냐 아니냐에 따라 LCD의 주사율이 천차만별로 달라집니다.

    1. SPI 전용 핀 테이블 (성능 최우선)

    LCD 핀 이름ESP32-C3 핀 (GPIO)역할변경 가능 여부이유
    SCL (SCK)GPIO 4시리얼 클럭변경 불가 (고수)60MHz급 고속 신호를 낼 수 있는 하드웨어 전용 라인
    SDA (MOSI)GPIO 6데이터 송신변경 불가 (고수)화면의 픽셀 데이터를 쏘는 핵심 통로
    RES (RST)GPIO 2 리셋 신호자유롭게 변경 가능화면을 껐다 켤 때만 쓰므로 속도와 상관없음
    DC (RS)GPIO 3 데이터/명령 선택자유롭게 변경 가능제어 신호용이라 일반 GPIO 아무 곳이나 OK
    CSGPIO 1 칩 선택자유롭게 변경 가능통신 시작 시 한 번만 신호를 주면 됨

    2. 왜 4번과 6번을 사수해야 하나요?

    ESP32-C3의 내부 구조상, GPIO 4와 6은 CPU를 거치지 않고 메모리에서 디스플레이로 직접 데이터를 쏘는 IOMUX 경로를 탑니다.

    만약 핀이 부족하다고 0번이나 1번으로 SPI 핀을 옮기게 되면, 데이터가 내부 교환기(GPIO Matrix)를 한 번 더 거치게 되어 신호 지연이 발생합니다. 결과적으로 60MHz로 설정해도 실제로는 그 절반의 속도도 내기 힘들고, 화면에 미세한 노이즈나 끊김이 발생할 수 있습니다.

    🔍 심화 학습: 왜 I2C는 자유롭고, SPI는 까다로운가?

    배선을 하다 보면 “I2C는 0, 1번으로 옮겨도 괜찮은데, 왜 SPI는 꼭 전용 핀을 쓰라고 할까?”라는 궁금증이 생깁니다. 이는 ESP32-C3 내부의 데이터 배달 경로 차이 때문입니다.

    1. I2C: “천천히 가도 줄만 잘 서면 되는 우편물”

    I2C 통신(센서용)은 보통 400kHz(0.4MHz) 속도로 움직입니다.

    • 내부 구조: ESP32-C3 내부에는 ‘GPIO 매트릭스’라는 거대한 교환기가 있습니다.
    • 성능 유지 비결: I2C는 워낙 느린 신호라 이 교환기를 거쳐서 어떤 핀으로 나가더라도 데이터가 뭉개지거나 지연될 걱정이 없습니다. CPU 부하도 하드웨어 컨트롤러가 알아서 처리하므로 8, 9번 기본 핀이 아닌 0, 1번으로 옮겨도 하드웨어 가속 성능이 100% 유지됩니다.

    2. SPI: “초고속으로 달려야 하는 전용 고속도로”

    반면, 우리가 LCD에 사용하는 SPI는 **60MHz(60,000kHz)**라는 어마어마한 속도로 데이터를 쏩니다. I2C보다 무려 150배나 빠릅니다.

    • IOMUX(고속도로): 60MHz급 초고주파 신호는 내부 교환기(GPIO Matrix)를 거치면 신호가 감쇄되거나 노이즈가 생겨 통신이 끊깁니다. 그래서 CPU와 핀이 직접 연결된 IOMUX라는 ‘직통 고속도로’를 타야만 합니다.
    • 전용석의 마법: GPIO 4(SCK)와 6(MOSI)이 바로 그 고속도로 진입로입니다. 이 자리를 벗어나 다른 핀으로 SPI를 강제 할당(Software SPI 등)하면, 내부 교환기를 거치느라 속도가 20MHz 이하로 급감하거나 CPU가 직접 핀을 제어해야 해서 전체 시스템이 느려지게 됩니다.

    💡 요약하자면?

    통신 방식주요 용도속도 체감핀 전략
    I2C거리/온도 센서거북이 (느림)아무 핀이나 OK! 하드웨어 성능 저하 없음.
    SPI고해상도 LCD슈퍼카 (매우 빠름)전용 핀(4, 6) 필수! 옮기면 화면이 뚝뚝 끊김.

  • 1mm의 정밀함! 레이저 거리 센서 VL53L0X 초보 가이드 (1/2)

    1mm의 정밀함! 레이저 거리 센서 VL53L0X 초보 가이드 (1/2)

    안녕하세요! 오늘은 스마트 부화기 프로젝트의 쓰일 VL53L0X ToF(Time-of-Flight) 거리 센서를 ESP32-C3에 연결하고 정밀도를 높이는 과정을 공유합니다. 기존의 초음파 센서보다 훨씬 작고 정확한 이 녀석, 어떻게 다루는지 함께 보시죠.


    1. 사용 부품 소개

    이번 프로젝트에 사용된 주요 하드웨어입니다.

    • MCU: ESP32-C3 SuperMini
      • 초소형 사이즈에 Wi-Fi와 Bluetooth를 지원하며, RISC-V 아키텍처 기반으로 가성비가 매우 뛰어난 보드입니다.
    • Sensor: VL53L0X (ToF 방식)
      • Time-of-Flight(빛의 비행시간) 원리를 이용합니다. 보이지 않는 적외선 레이저를 쏘고 반사되어 돌아오는 시간을 측정해 거리를 계산합니다.
      • 장점: 초음파 센서(HC-SR04)처럼 소리에 의존하지 않아 주변 소음이나 공기 흐름에 강하고, mm 단위의 정밀한 측정이 가능합니다.
    • Display: 0.96″ SSD1306 OLED
      • I2C 통신을 통해 실시간 거리 데이터를 시각화합니다.
    • 기타: 90도 꺾임 헤더 핀, 브레드보드, 점퍼 와이어.

    2. 하드웨어 팁: 왜 90도 핀(Right Angle)인가?

    보통 센서를 사면 일자형 헤더 핀이 들어있지만, 저는 90도 꺾임 핀을 별도로 준비해 납땜했습니다.

    • 이유: 일자형 핀을 브레드보드에 꽂으면 센서가 하늘을 보게 됩니다. 하지만 90도 핀을 쓰면 센서가 브레드보드 정면을 바라보게 되어, 사물과의 거리를 측정하는 실험 환경을 만들기 훨씬 수월합니다.
    • 주의: 일반 핀을 펜치로 꺾으면 길이가 짧아져 접촉 불량이 생기니, 꼭 기성품 90도 핀을 사용하세요!

    3. 회로 구성 (Wiring)

    ESP32-C3의 I2C 핀은 자유롭게 설정 가능하지만, 저는 관리가 편하도록 아래와 같이 연결했습니다.

    센서/OLED 핀ESP32-C3 핀역할
    VCC (VIN)3.3V전원 공급
    GNDGND접지
    SCLGPIO 0I2C 클럭 라인
    SDAGPIO 1I2C 데이터 라인

    4. 소프트웨어 트러블슈팅: ImportError 해결

    MicroPython 환경에서 PC용 라이브러리를 그대로 쓰면 ImportError: no module named 'ctypes'라는 에러를 만나게 됩니다.

    • 해결책: ESP32의 가벼운 메모리에 맞게 설계된 경량화된 MicroPython 전용 드라이버를 사용해야 합니다. ctypes 모듈 없이 machine.I2C만으로 작동하는 코드를 적용하여 문제를 해결했습니다.

    5. 정밀도 높이기: 오프셋 보정과 필터링

    레이저 센서라고 해서 완벽하진 않습니다. 테스트 결과 두 가지 보정이 필요했습니다.

    1. 오프셋(Offset) 보정: 실제 거리보다 약 20mm(2cm) 정도 길게 측정되는 경향이 있어, 코드에서 raw_distance - 20을 해주어 영점을 잡았습니다.
    2. 지터(Jitter) 제거: 숫자가 미세하게 떨리는 현상을 잡기 위해 **가중 평균 필터(Low Pass Filter)**를 적용했습니다.
      • smooth_dist = (alpha * current_raw) + ((1 - alpha) * smooth_dist)
      • 이 공식을 통해 OLED의 바 그래프가 아주 부드럽게 움직이도록 만들었습니다.

    6. 결과 확인 (Thonny 플로터)

    Thonny의 Plotter 기능을 켜면 실시간으로 거리 변화가 그래프로 그려집니다. 손을 센서 앞에 가져다 대면 반응 속도가 얼마나 빠른지, 그리고 필터가 얼마나 부드럽게 작동하는지 한눈에 확인할 수 있습니다.


    마치며

    이번 1편에서는 단일 센서의 기초 설정과 최적화 방법을 알아봤습니다. mm 단위로 딱딱 끊어지는 데이터를 보니 벌써 부화기 프로젝트가 반쯤 성공한 기분이네요!

    이어지는 2편에서는 오늘 배운 내용을 바탕으로 I2C 주소 충돌을 해결하고 센서 3개를 동시에 제어하는 멀티 센서 시스템을 구축해 보겠습니다.

    Python vl53l0x.py

  • ESP32와 원형 LCD(GC9A01)를 활용한 실감 나는 로봇 눈 만들기 (feat. MicroPython)

    ESP32와 원형 LCD(GC9A01)를 활용한 실감 나는 로봇 눈 만들기 (feat. MicroPython)

    1.28 인치 7PIN 8PIN SPI TFT LCD 모듈 GC9A01 

    프로젝트 개요: 왜 원형 LCD인가?

    일반적인 사각형 디스플레이와 달리 GC9A01 원형 TFT LCD는 로봇의 눈을 표현하기에 최적화된 형태를 가집니다. 하지만 두 개의 고해상도(240×240) 화면을 동시에, 그것도 자연스럽게 구동하는 데는 여러 기술적 난관이 있었습니다.

    🛠️ 주요 문제 해결 및 기술적 포인트

    1. SPI 통신 속도 최적화 (60MHz의 발견)

    초기에는 통신 안정성을 위해 낮은 속도를 고려했으나, 고해상도 이미지를 실시간으로 뿌리기엔 역부족이었습니다.

    • 해결: SPI 클럭 속도를 60MHz로 설정하여 데이터 전송 병목 현상을 해결했습니다. 신호가 더 날카롭고 정확하게 전달되면서 화면 깨짐 없이 부드러운 프레임 전환이 가능해졌습니다.

    2. 하드웨어 리셋(Reset) 핀의 분리

    두 디스플레이의 리셋 핀을 하나로 묶었을 때 발생하는 초기화 오류를 해결했습니다.

    • 해결: 각 LCD에 독립적인 리셋 핀을 할당하고, 순차적으로 tft.reset()을 수행하여 컨트롤러가 확실하게 명령을 인식하도록 개선했습니다.

    3. 노이즈 없는 깨끗한 부팅 (Zero-Noise Start)

    전원을 넣을 때 비디오 램(VRAM)의 무작위 데이터 때문에 나타나는 ‘지직거리는 노이즈’를 잡았습니다.

    • 해결: 하드웨어 리셋 직후, 눈 이미지를 그리기 전에 tft.fill(0) 명령으로 화면을 검은색으로 즉시 초기화하는 로직을 추가하여 고급스러운 부팅 시퀀스를 완성했습니다.

    4. 시차 없는 동기화: 인터리빙(Interleaving) 기법

    왼쪽 눈을 다 그리고 오른쪽 눈을 그리면 발생하는 미세한 시차(약 0.1~0.2초)는 로봇의 생동감을 떨어뜨립니다.

    • 해결: 전체 이미지를 한 번에 보내지 않고, 20줄씩 번갈아 가며(Interleaving) 양쪽 눈에 쏘는 방식을 도입했습니다. 이를 통해 우리 눈에는 양쪽 눈이 동시에 움직이는 것처럼 보이는 완벽한 동기화를 구현했습니다.

    5. 코믹한 감정 표현 (윙크 및 사시 동작)

    단순한 시선 이동을 넘어 로봇에게 성격을 부여했습니다.

    • 기능: 한쪽 눈의 통신만 열어 수행하는 윙크, 그리고 좌우 이미지를 교차하여 시선을 모으거나 벌리는 코믹 사시(Eye Gag) 패턴을 랜덤으로 배치해 생동감을 더했습니다.

    💡 연결 시 주의사항 (Troubleshooting Tips)

    1. 전력 공급: ESP32의 3.3V 출력은 디스플레이 두 개를 감당하기에 충분하지만, 점퍼 와이어가 너무 길거나 헐거우면 전압 강하로 인해 화면이 떨릴 수 있습니다. 가급적 짧고 굵은 선을 사용하세요.
    2. 공유 핀 vs 독립 핀: * SCL, SDA, DC는 두 디스플레이가 사이좋게 나눠 쓰는 공유 핀입니다.
      • CS와 RES는 각 눈을 따로 제어하기 위한 독립 핀입니다. (이걸 합치면 어제 겪으셨던 초기화 지옥이 다시 찾아옵니다!)
    3. BL (Backlight) 핀: 만약 8핀 모듈을 사용 중이시라면 BL 핀을 3.3V에 직접 연결하거나, 남는 GPIO에 연결해 밝기 조절(PWM) 용도로 쓰실 수 있습니다. (7핀 모듈은 내부적으로 VCC에 묶여 있어 생략 가능합니다.)

    “SPI 통신의 효율을 극대화하기 위해 클럭과 데이터 라인은 공유하되, 각 디스플레이의 개별 제어를 위해 CS와 Reset 라인을 분리하여 하드웨어적 안정성을 확보했습니다.”

    라이브러리 gc9a01.py 다운로드

    Python gc10.py