로그인회원가입

[카테고리:] 부품 리뷰

DIY 용 단일 부품 리뷰

  • 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

  • I2C 주소 똑같아도 상관없음! 멀티플랙서 TCA9548A 사용법

    I2C 주소 똑같아도 상관없음! 멀티플랙서 TCA9548A 사용법

    I2C 주소가 같은 ssd1306 5개를 esp32-c3 mini 에 연결해서 구동하려고 한다. 어떻게 연결해야 하나?

    1. I2C 주소 문제 (0x3C, 0x3D)

    일반적인 SSD1306 모듈은 뒷면의 저항(Jumper) 위치를 옮겨서 주소를 0x3C 또는 0x3D 중 하나로 설정할 수 있습니다.

    • 결론: 동일한 I2C 버스 하나에는 최대 2개까지만 직접 연결할 수 있습니다.
    • 우리는 5개를 연결해야 하므로, 단순히 병렬로 연결하는 것만으로는 불가능합니다.

    2. 해결 방법: I2C Multiplexer (TCA9548A) 사용

    가장 깔끔하고 권장되는 방법은 TCA9548A 같은 I2C 확장 모듈을 사용하는 것입니다.

    • 원리: 이 칩은 1개의 I2C 입력을 받아 8개의 독립된 I2C 채널(선택 가능)로 분리해 줍니다.
    • 연결 방식: ESP32-C3의 I2C 핀을 TCA9548A에 연결하고, 각 OLED를 TCA9548A의 SD0/SC0부터 SD4/SC4까지 하나씩 연결합니다.
    • 장점: 코드가 매우 단순해지며 전압 관리도 수월합니다.

    3. 멀티플렉서 없이 연결하는 방법 (S/W I2C 또는 Multi-Bus)

    부품을 추가하고 싶지 않다면 두 가지 대안이 있습니다.

    A. 소프트웨어 I2C (Bit-banging)

    ESP32-C3는 핀 매핑이 자유롭습니다. 5개의 디스플레이를 위해 각각 다른 GPIO 쌍을 사용하는 방식입니다.

    • 핀 소모: SDA 5개 + SCL 1개(공통) = 총 6개의 핀 필요.
    • 단점: CPU 부하가 늘어나고 화면 업데이트 속도가 느려질 수 있습니다.

    B. 공통 SCL + 개별 SDA 방식

    SSD1306 라이브러리(u8g2 등)에서 SDA 핀을 각각 다르게 설정하여 5개의 인스턴스를 생성합니다.

    • ESP32-C3 GPIO 예시:
      • SCL: GPIO 8 (공통)
      • SDA1: GPIO 0, SDA2: GPIO 1, SDA3: GPIO 2, SDA4: GPIO 3, SDA5: GPIO 4

    4. 회로 연결 가이드 (TCA9548A 기준 권장)

    ESP32-C3 MiniTCA9548ASSD1306 (5개)
    3.3VVINVCC (모두 연결)
    GNDGNDGND (모두 연결)
    GPIO 8 (SCL)SCL
    GPIO 10 (SDA)SDA
    SD0~SD4각 OLED의 SDA에 하나씩 연결
    SC0~SC4각 OLED의 SCL에 하나씩 연결

    ⚠️ 주의사항

    1. 전류 소모: OLED 5개를 동시에 켜면 전류 소모가 상당합니다. ESP32-C3 Mini의 3.3V 출력 핀만으로는 부족할 수 있으니, 외부 3.3V 전원을 사용하는 것이 안정적입니다.
    2. 메모리(RAM): ESP32-C3는 RAM이 넉넉한 편이지만, 128×32 해상도 버퍼 5개를 동시에 유지하면 메모리 압박이 올 수 있습니다. u8g2 라이브러리의 _F_(Full Buffer) 모드 대신 _1_ 또는 _2_ (Page Buffer) 모드 사용을 권장합니다.

    Pythone PCA9548A.py


  • 왜 내 OLED는 얼룩덜룩해질까? 수명을 2배 늘리는 팁 (feat. PIR sensor)

    왜 내 OLED는 얼룩덜룩해질까? 수명을 2배 늘리는 팁 (feat. PIR sensor)

    OLED 번인 방지: PIR 센서로 디스플레이 수명 늘리는 법

    OLED 디스플레이의 최대 단점인 밝기 저하와 번인 현상! 장시간 화면을 켜두었을 때 발생하는 얼룩덜룩한 잔상을 방지하기 위해, PIR 인체감지 센서를 활용하여 사람이 있을 때만 화면이 켜지게 만드는 스마트한 해결 방법을 소개합니다.


    ※📱 OLED의 원리와 치명적인 약점: 왜 번인이 생길까?

    1. OLED란 무엇인가? (Organic Light Emitting Diode)

    OLED는 ‘유기 발광 다이오드’의 약자로, 화면 뒤에서 빛을 쏴주는 백라이트가 필요한 LCD와 달리 소자 하나하나가 스스로 빛을 내는(자발광) 방식입니다.

    • 완벽한 블랙: 빛을 아예 꺼버릴 수 있어 무한대의 명암비를 자랑합니다.
    • 얇은 두께: 백라이트가 없어 디스플레이를 매우 얇게, 심지어 종이처럼 휠 수도 있습니다.

    2. 치명적인 단점: 번인(Burn-in)과 수명

    하지만 OLED는 **’유기물’**을 태워서 빛을 냅니다. 마치 촛불처럼 켜두면 서서히 타들어 가며 수명이 줄어듭니다.

    • 밝기 불균형: 특정 픽셀만 계속 켜져 있으면 그 부분의 소자가 다른 곳보다 빨리 노화되어 어두워집니다.
    • 잔상(Ghosting): 화면을 꺼도 예전 모습이 얼룩처럼 남는 현상입니다. 특히 고정된 UI(시계, 메뉴바)가 있는 DIY 프로젝트에서 자주 발생합니다.

    3. 실제 1~2개월만 계속 켜놔도 OLED가 아래처럼 얼룩덜룩 된 사례

    왼쪽: 정상, 중앙:상시 켜논 화면, 오른쪽: 번인현상으로 밝기 불균형

    ※🛠️ 공학적 해결책: PIR 센서와의 만남

    OLED의 수명을 늘리는 가장 확실한 방법은 **”필요할 때만 켜는 것”**입니다. 하지만 매번 버튼을 누르기는 귀찮죠. 이때 PIR(Passive Infrared) 센서가 훌륭한 대안이 됩니다.

    PIR 센서란?

    적외선을 통해 사람의 움직임을 감지하는 센서입니다. 현관문 자동등에 쓰이는 바로 그 센서입니다!

    작동 알고리즘 (PIR + OLED)

    1. 감지 모드: PIR 센서가 주변의 움직임을 감시합니다. (OLED는 Off 상태로 수명 보존)
    2. 활성화: 사람이 다가오면 센서가 신호를 보내고, MCU(아두이노, ESP32 등)가 즉시 OLED를 켭니다.
    3. 자동 종료: 설정한 시간 동안 움직임이 없으면 다시 OLED를 꺼서 소자를 보호합니다.

    “OLED의 선명함은 포기할 수 없지만, 번인이 걱정된다면 PIR 센서를 달아보세요. 하드웨어적인 보호 수단 하나가 여러분의 디스플레이 수명을 2배, 아니 10배까지도 늘려줄 것입니다. 이번 프로젝트를 통해 똑똑하고 오래가는 DIY 기기를 만들어보시길 바랍니다!”


    1. PIR 센서란? (Passive Infrared)

    • Passive(수동형): 센서가 스스로 빛이나 에너지를 쏘는 게 아니라, 외부에서 들어오는 적외선 에너지를 ‘받기만’ 하기 때문에 붙여진 이름입니다.
    • 작동 원리: 모든 생명체(사람, 동물)는 열을 방출하며, 이 열은 적외선 형태로 나타납니다. PIR 센서 안에는 두 개의 적외선 감지 소자가 있는데, 사람의 움직임으로 인해 두 소자에 들어오는 적외선 양에 차이가 생기면 “사람이 있다!”라고 판단하고 신호를 보냅니다.

    2. 왜 하얀색 축구공 모양인가요? (프레넬 렌즈)

    센서 위를 덮고 있는 올록볼록한 반구 모양은 단순한 덮개가 아니라 **’프레넬 렌즈(Fresnel Lens)’**입니다.

    • 주변의 적외선을 한곳으로 모아주고, 감지 범위를 넓혀주는 역할을 합니다.
    • 이 렌즈 덕분에 아주 작은 센서 하나로도 수 미터 앞의 움직임을 포착할 수 있습니다.

    3. 주요 조절 장치 (뒷면 가변 저항)

    보통 센서 뒷면에는 작은 나사(가변 저항)가 두 개 있습니다.

    • Sensitivity (감도): 감지 거리를 조절합니다 (약 3m ~ 7m).
    • Delay Time (지연 시간): 움직임이 감지된 후 얼마나 오랫동안 신호를 유지할지 결정합니다 (5초 ~ 5분).
      • OLED 프로젝트 팁: 지연 시간을 10~20초 정도로 설정하면 사람이 자리를 떠나고 잠시 후에 화면이 꺼지게 할 수 있어 자연스럽습니다.

    4. OLED 수명 연장에 왜 최고인가요?

    • 초저전력: 센서 자체가 전기를 거의 안 먹어서 24시간 켜두어도 부담이 없습니다.
    • 비접촉: 버튼을 누를 필요가 없어 기기 마모가 없고 위생적입니다.
    • 확실한 효과: “사람이 없을 땐 끄고, 있을 때만 켠다”는 로직을 통해 OLED 소자의 발광 시간을 물리적으로 줄이는 가장 효율적인 방법입니다.

    5. PIR 센서는 온도 변화에 민감합니다. (주의)

    • 에어컨 실외기 근처나 햇빛이 너무 강하게 드는 곳에 OLED 장치를 두면, 사람이 없어도 화면이 제멋대로 켜질 수 있습니다.

    🐍 최종 코드

    Python

    🐍 OLED 전면 점등 테스트 코드 (ESP32-C3)

    Python