I2C 통신 풀업 저항을 빼고 센서 연결해봤더니

profile_image
작성자 신호추적자도윤
댓글 0건 조회 1회

센서가 가끔만 잡히는 첫 번째 실수는 배선이 아니었습니다

풀업 저항을 빼면 운 좋게 보일 때가 더 위험합니다

I2C 센서를 처음 붙일 때 가장 헷갈리는 순간은 완전히 안 되는 때가 아닙니다. 스캐너에서는 주소가 보이는데, 실제 값을 읽으면 0으로 튀거나 몇 분 뒤 버스가 멈추는 상황이 더 사람을 지치게 합니다. 저도 아두이노에 온습도 센서와 OLED를 같이 붙여 테스트하다가 I2C 통신은 성공했다고 착각했습니다.

문제는 풀업 저항이었습니다. 모듈에 이미 저항이 있다고 생각하고 외부 풀업을 생략했는데, 가지고 있던 센서 보드 중 하나는 풀업이 없었고 다른 하나는 값이 너무 커서 배선 길이가 늘자 신호 상승 시간이 버티지 못했습니다. 주소 검색 성공은 정상 동작 보증서가 아닙니다.

  • SDA, SCL을 디지털 출력처럼 다루지 마세요. I2C는 라인을 직접 High로 밀어 올리는 방식이 아니라 풀업을 통해 High가 만들어지는 구조입니다.
  • 모듈에 풀업이 있는지 눈으로만 판단하지 마세요. 보드 실크에 R1, R2가 보여도 실제로 SDA/SCL에 연결된 저항인지 회로를 확인해야 합니다.
  • 여러 센서를 붙일수록 풀업이 중복됩니다. 4.7kΩ이 여러 개 병렬로 들어가면 전체 저항값이 낮아져 전류가 커지고, 마이크로컨트롤러가 Low를 제대로 끌어내리기 어려워질 수 있습니다.

실패 사례에서 얻은 기준은 간단했습니다. 10cm 안팎의 짧은 배선, 100kHz 표준 속도, 센서 1~2개라면 4.7kΩ부터 시작하고, 배선이 길어지거나 400kHz를 쓰면 오실로스코프나 로직 애널라이저로 상승 시간을 확인하는 쪽이 훨씬 빠릅니다. 장비가 없다면 2.2kΩ, 4.7kΩ, 10kΩ을 준비해두고 증상이 어떻게 바뀌는지 비교해 보세요.

팁: I2C 주소가 한 번 보였다고 바로 프로젝트 코드를 짜지 말고, 같은 배선으로 10분 이상 연속 읽기 테스트를 먼저 돌려보세요. 간헐 오류는 늘 뒤늦게 나타납니다.

아두이노 예제 코드만 믿고 배선을 확장하면 생기는 일

아두이노 예제는 보통 센서 하나를 책상 위에서 짧게 연결한 조건을 전제로 합니다. 아두이노의 기본 개념처럼 교육용 보드의 장점은 접근성이지만, 실제 프로젝트에서는 전원, 배선, 주변 노이즈까지 함께 봐야 합니다. 브레드보드에서는 잘 되던 코드가 케이스 안으로 들어가자 멈춘다면 코드보다 신호 품질을 먼저 의심해야 합니다.

  1. 센서 하나만 연결해 주소를 확인합니다.
  2. 동일 코드로 5분 이상 값을 읽고 누락 횟수를 기록합니다.
  3. 두 번째 센서를 붙인 뒤 풀업 저항의 병렬 효과를 계산합니다.
  4. 점퍼선 길이를 실제 설치 길이로 늘린 뒤 다시 테스트합니다.

이 순서를 건너뛰면 나중에 어디서부터 망가졌는지 알 수 없습니다. 특히 OLED, RTC, 온습도 센서, 조도 센서를 한 번에 연결한 뒤 문제가 생기면 주소 충돌인지, 전원 강하인지, 풀업 저항 문제인지 분리하기 어렵습니다.

전원과 GND를 대충 묶었더니 센서 연결이 흔들렸습니다

3.3V 센서를 5V 보드에 붙일 때 하지 말아야 할 것

두 번째 실수는 전원 레벨을 가볍게 본 일이었습니다. 센서 데이터시트에 3.3V 동작이라고 쓰여 있는데도 “I2C는 신호선 두 개뿐이니까 괜찮겠지” 하고 5V 아두이노에 바로 붙였습니다. 처음에는 값이 읽혔고, 그래서 더 오래 헤맸습니다. 문제는 센서가 즉시 죽지 않아도 입력 보호 다이오드에 무리가 갈 수 있고, 장기적으로 오동작이나 발열이 생길 수 있다는 점입니다.

센서 연결에서 전원 전압과 로직 전압은 따로 봐야 합니다. 어떤 모듈은 보드 위에 레귤레이터와 레벨 시프터가 있어 5V 입력을 받아도 안전하지만, 어떤 모듈은 칩 핀과 커넥터가 거의 그대로 이어져 있습니다. 판매 페이지의 “Arduino compatible” 문구만 믿기보다 회로도나 부품명을 확인해야 합니다.

  • VCC 허용 범위: 데이터시트의 absolute maximum이 아니라 recommended operating condition을 봅니다.
  • I2C 로직 레벨: SDA/SCL이 어느 전압으로 풀업되는지 확인합니다. 3.3V 센서에 5V 풀업이 걸리면 위험합니다.
  • GND 기준: 보드와 센서의 GND가 공통으로 묶이지 않으면 신호 기준점이 없어 통신이 불안정합니다.
  • 전원 여유: 와이파이 모듈이나 OLED처럼 순간 전류가 큰 장치를 같이 쓰면 센서 전압이 순간적으로 내려갈 수 있습니다.

저는 이 문제를 잡기 위해 멀티미터로 VCC만 재다가 시간을 잃었습니다. 실제로 봐야 할 것은 센서가 값을 읽는 순간의 전압 변화였습니다. ESP32처럼 3.3V 기반 보드를 쓰는 경우에도 USB 전원, 레귤레이터 용량, 케이블 품질에 따라 센서 전원이 흔들릴 수 있습니다.

전문가처럼 보이는 빠른 습관 하나는 전원을 연결하기 전에 풀업이 어느 전압으로 올라가는지 재는 것입니다. SDA와 SCL의 High 전압을 먼저 보면 회로의 의도가 드러납니다.

공통 GND를 빼먹으면 통신 로그가 거짓말을 합니다

분리 전원을 쓰는 프로젝트에서는 공통 GND 실수가 정말 자주 나옵니다. 릴레이 보드는 별도 어댑터, 마이크로컨트롤러는 USB, 센서는 다른 레귤레이터에서 전원을 받는 식으로 구성하면 선은 연결된 것처럼 보여도 기준 전위가 떠 있을 수 있습니다. 이 상태에서는 I2C 스캐너가 어떤 날은 주소를 찾고 어떤 날은 못 찾습니다.

사물인터넷 장치에서 센서 데이터는 단순 숫자가 아니라 사용자의 행동 기록이나 환경 기록으로 이어지기도 합니다. 라이프로그처럼 장치가 계속 데이터를 쌓는 개념은 라이프로그 서비스 설명에서도 확인할 수 있습니다. 그러니 센서 값 하나가 흔들리는 문제를 “가끔 튀네”로 넘기면 이후 데이터 해석 전체가 틀어질 수 있습니다.

  1. 모든 전원 공급원의 GND를 한 지점에서 공통으로 묶습니다.
  2. 릴레이, 모터, 펌프 전원선은 I2C 배선과 최대한 떨어뜨립니다.
  3. 센서 가까이에 0.1µF 세라믹 커패시터를 붙여 순간 노이즈를 줄입니다.
  4. 긴 배선이 필요하면 I2C 확장보다 먼저 배치 변경과 속도 저하를 검토합니다.

여기서 중요한 점은 비싼 부품부터 사는 것이 아니라 증상을 나누는 것입니다. 전원을 안정화했더니 주소 미검출이 사라졌다면 배선 문제가 아니라 전원 기준 문제였던 셈입니다. 반대로 전원을 정리해도 특정 센서만 사라진다면 주소 충돌, 풀업, 센서 불량으로 범위를 좁힐 수 있습니다.

버스에 센서를 계속 추가한 뒤 하루를 날린 순서

주소 충돌을 늦게 확인하면 코드가 범인처럼 보입니다

세 번째 실패는 센서를 하나씩 검증하지 않고 한 번에 붙인 것입니다. 온도, 습도, 기압, 조도, OLED까지 연결한 뒤 예제 코드를 합쳤더니 화면은 켜지는데 측정값은 멈췄습니다. 처음에는 라이브러리 충돌을 의심했지만 실제 원인은 같은 I2C 주소를 쓰는 센서 두 개였습니다.

임베디드 개발에서 라이브러리는 편리하지만, 장치 주소와 초기화 순서를 가려버릴 때가 있습니다. 통합개발환경이 개발 과정을 돕는다는 점은 통합개발환경 개요처럼 기본 개념으로 이해할 수 있지만, 하드웨어 주소 충돌까지 자동으로 해결해주지는 않습니다. 결국 스캐너 출력과 데이터시트를 함께 봐야 합니다.

  • 같은 칩을 쓴 센서 모듈: 제조사가 달라도 기본 주소가 같을 수 있습니다.
  • 주소 변경 핀: ADDR, SA0, A0 같은 핀이 있으면 납땜 점퍼나 풀업 상태로 주소를 바꿀 수 있습니다.
  • 주소 고정 장치: 주소 변경이 안 되면 I2C 멀티플렉서나 별도 버스가 필요합니다.
  • 라이브러리 기본값: 코드에서 주소를 직접 지정하지 않으면 예제의 기본 주소로 초기화되는 경우가 많습니다.

제가 추천하는 방식은 센서 목록표를 먼저 만드는 것입니다. 가격대가 낮은 프로젝트라도 이 표 하나가 디버깅 시간을 크게 줄입니다. 예를 들어 TCA9548A 같은 I2C 멀티플렉서 모듈은 대략 몇천 원대부터 구할 수 있지만, 단순히 부품을 추가하기 전에 주소 변경 점퍼로 해결 가능한지 먼저 확인하는 편이 낫습니다.

당장 해볼 행동은 15분짜리 버스 점검표입니다

지금 책상 위에 I2C 센서가 여러 개 꽂혀 있다면, 코드를 더 고치기 전에 15분만 하드웨어 점검을 해보세요. 이 과정은 프로젝트 규모가 작을수록 더 효과가 큽니다. 왜냐하면 작은 프로젝트에서는 한두 개의 점퍼선, 풀업 저항, 주소 설정만 바로잡아도 증상이 눈에 띄게 줄어들기 때문입니다.

아래 표처럼 현재 상태를 직접 적어보면 머릿속에서 섞여 있던 문제가 분리됩니다. 특히 “어제는 됐는데 오늘은 안 된다”는 상황일수록 기록이 중요합니다. 납땜 전 테스트, 케이스 조립 후 테스트, 전원 어댑터 변경 후 테스트를 같은 형식으로 남기면 나중에 원인을 되짚기 쉽습니다.

  • 1단계: 센서 하나만 연결하고 I2C 스캐너로 주소를 기록합니다.
  • 2단계: SDA/SCL High 전압을 멀티미터로 측정해 3.3V인지 5V인지 적습니다.
  • 3단계: 풀업 저항 유무와 값이 보이면 기록합니다. 모르면 “모름”이라고 적고 다음에 회로도로 확인합니다.
  • 4단계: 실제 사용할 배선 길이로 바꾼 뒤 100회 이상 읽기 테스트를 돌립니다.
  • 5단계: 센서를 하나 추가할 때마다 주소, 전압, 오류 횟수를 다시 적습니다.

점검표 예시는 간단합니다. “BME280 0x76, 3.3V 풀업, 오류 0회”, “OLED 0x3C, 3.3V 풀업 추정, 오류 2회”처럼 쓰면 됩니다. 완벽한 문서보다 중요한 것은 같은 기준으로 반복하는 것입니다. 이 습관이 생기면 아두이노든 라즈베리파이든, 새 센서를 붙일 때마다 불안하게 예제 코드만 바꾸는 시간이 줄어듭니다.

오늘 바로 할 일은 하나입니다. 지금 연결된 I2C 장치를 모두 뽑고, 센서 하나만 남긴 뒤 주소와 SDA/SCL High 전압을 기록하세요. 그 다음 센서를 하나씩 추가하면서 같은 표를 채우면, 통신 문제가 코드인지 회로인지 훨씬 선명하게 갈라집니다.

I2C 통신 풀업 저항을 빼고 센서 연결해봤더니

댓글목록

등록된 댓글이 없습니다.