아두이노 I2C 내부 풀업과 외부 풀업, 무엇이 다를까
아두이노에 I2C 센서를 연결했는데 예제 코드는 정상적으로 컴파일되고, 주소 검색도 가끔 성공하지만 측정값은 불규칙하게 끊기는 경우가 있습니다. 초보자는 배선이나 센서 고장부터 의심하기 쉽지만, 실제 원인은 SDA와 SCL 신호선을 HIGH 상태로 끌어올리는 풀업 저항에 있을 수 있습니다.
I2C 통신에서 풀업 저항은 선택 부품처럼 보이지만 신호가 만들어지는 원리를 이해하면 반드시 확인해야 할 회로 요소입니다. 특히 아두이노의 내부 풀업과 센서 모듈의 외부 풀업은 저항값과 동작 조건이 다르므로, 단순히 “둘 다 풀업이니까 같다”고 생각하면 예상하지 못한 통신 오류를 만날 수 있습니다.
센서는 연결됐는데 통신은 왜 불안정할까
I2C 신호선은 스스로 HIGH를 만들지 못합니다
I2C 통신에는 데이터용 SDA와 클록용 SCL 두 신호선이 사용됩니다. 이 선에 연결된 장치는 LOW 신호가 필요할 때 선을 접지 방향으로 끌어내리지만, HIGH 신호를 능동적으로 출력하지는 않습니다. 이런 방식을 오픈 드레인 또는 오픈 컬렉터 구조라고 부르며, 여러 장치가 같은 버스를 안전하게 공유하도록 돕습니다.
문제는 아무 장치도 선을 LOW로 당기지 않을 때입니다. 풀업 저항이 없다면 SDA와 SCL의 전압은 확실한 HIGH가 아니라 주변 잡음에 흔들리는 불확정 상태가 됩니다. 멀티미터로 측정했을 때 얼핏 3V나 5V가 보이더라도 빠르게 변하는 디지털 신호의 상승 모양까지 정상이라는 뜻은 아닙니다.
아두이노의 개념과 활용 범위가 낯설다면 지식백과의 아두이노 설명을 먼저 읽어도 좋습니다. 보드가 어떤 역할을 하는지 이해한 뒤 회로를 보면, 센서 모듈과 마이크로컨트롤러 사이의 책임을 구분하기가 한결 쉬워집니다.
- SDA: 센서 주소, 명령, 측정값이 오가는 양방향 데이터선입니다.
- SCL: 통신 속도를 결정하는 클록선이며 일반적으로 마스터가 제어합니다.
- 풀업 저항: 아무 장치도 LOW를 출력하지 않을 때 신호선을 전원 전압으로 복귀시킵니다.
- 공통 접지: 아두이노와 센서가 같은 전압 기준을 사용하도록 반드시 연결합니다.
센서가 가끔만 인식된다면 프로그램을 바꾸기 전에 SDA와 SCL이 실제로 어느 전압에, 어떤 저항을 통해 올라가고 있는지부터 확인하세요.
내부 풀업과 외부 풀업은 위치만 다른 것이 아니다
아두이노 내부 풀업의 저항값은 비교적 큽니다
아두이노의 GPIO에는 소프트웨어로 활성화할 수 있는 내부 풀업 기능이 있습니다. 별도 부품 없이 입력 핀을 HIGH 상태로 유지할 수 있어 버튼 회로에서는 매우 편리합니다. 그러나 내부 풀업 저항은 보통 수십 kΩ 범위로 편차가 크며, I2C 버스에 흔히 사용하는 수 kΩ대 외부 저항보다 신호선을 천천히 끌어올립니다.
외부 풀업은 SDA와 SCL에서 버스 전원으로 직접 연결하는 물리적인 저항입니다. 4.7kΩ, 3.3kΩ, 2.2kΩ처럼 설계자가 값을 정할 수 있고 부품 허용오차도 명확합니다. 따라서 배선 길이, 연결 장치 수, 통신 속도에 맞춰 상승 시간을 조절할 수 있다는 점이 가장 큰 차이입니다.
내부 풀업이 켜져 있다고 해서 외부 저항을 반드시 제거해야 하는 것은 아닙니다. 병렬로 연결된 저항은 합성 저항값이 작아지므로 두 종류가 함께 켜져도 외부 풀업이 충분히 작다면 외부 저항이 전체 특성을 거의 결정합니다. 다만 센서 모듈 여러 개에 이미 풀업이 실장돼 있으면 합성값이 지나치게 작아질 수 있어 개수를 확인해야 합니다.
- 내부 풀업: 부품이 필요 없지만 값이 크고 정확한 설계값으로 다루기 어렵습니다.
- 외부 풀업: 부품 두 개가 필요하지만 통신 속도와 배선 조건에 맞게 선택할 수 있습니다.
- 모듈 내장 풀업: 편리하지만 여러 모듈을 연결하면 저항이 병렬로 누적됩니다.
- 브레이크아웃 보드: 기판의 472 표시는 대개 4.7kΩ, 103은 10kΩ 저항을 뜻합니다.
저항값이 크거나 작을 때 파형은 이렇게 달라진다
큰 저항은 느리고 작은 저항은 전류를 늘립니다
풀업 저항과 배선의 기생 커패시턴스는 함께 RC 회로를 만듭니다. 저항값이 크거나 연결된 장치와 전선이 많아 정전용량이 커지면 LOW에서 HIGH로 복귀하는 시간이 길어집니다. 100kHz에서는 겨우 동작하던 회로가 400kHz로 올리자 실패하는 이유도 짧아진 비트 시간 안에 전압이 HIGH 판정 수준까지 도달하지 못하기 때문입니다.
반대로 저항을 무조건 작게 만드는 것도 좋은 해법은 아닙니다. 장치가 LOW를 출력할 때 풀업 저항을 통해 전류가 흐르므로 저항값이 너무 작으면 마이크로컨트롤러나 센서가 선을 충분히 낮추지 못할 수 있습니다. 발열이 눈에 띌 정도가 아니더라도 LOW 전압 상승, 소비 전력 증가, 출력 핀 정격 초과 가능성을 함께 따져야 합니다.
아래 비교는 초보자가 증상과 원인을 연결하기 위한 실무적 기준입니다. 정확한 한계값은 사용하는 MCU와 센서의 데이터시트에 있는 입력 임계 전압, 허용 싱크 전류, 버스 정전용량 조건을 우선해야 합니다.
| 상태 | 신호 특징 | 나타날 수 있는 증상 | 먼저 할 조치 |
|---|---|---|---|
| 저항이 너무 큼 | HIGH 상승이 완만함 | 고속에서 NACK, 값 끊김 | 외부 풀업 추가 또는 값 축소 |
| 저항이 적절함 | HIGH와 LOW가 명확함 | 주소 검색과 연속 읽기 안정 | 현재 구성을 기록 |
| 저항이 너무 작음 | LOW 전압이 높아질 수 있음 | 과전류, 특정 장치만 실패 | 중복 풀업 제거 또는 값 확대 |
- 짧은 점퍼선과 센서 한 개라면 4.7kΩ부터 시험하기 편합니다.
- 3.3V 버스에서 장치가 많거나 배선이 길다면 3.3kΩ 또는 2.2kΩ가 필요할 수 있습니다.
- 10kΩ도 저속·저용량 조건에서는 동작하지만 여유가 충분한지 측정해야 합니다.
- 1kΩ 이하로 낮추기 전에는 각 장치의 LOW 출력 전류 정격을 반드시 확인합니다.
3.3V와 5V 사이에서는 저항보다 전압이 먼저다
풀업이 연결된 전원이 버스의 HIGH 전압을 결정합니다
풀업 저항의 한쪽 끝을 어느 전원에 연결했는지가 SDA와 SCL의 HIGH 전압을 결정합니다. 3.3V 센서를 5V 아두이노와 연결하면서 저항을 5V에 달면 센서 핀에도 5V가 걸릴 수 있습니다. 센서가 5V 내성을 명시하지 않았다면 통신이 당장 되더라도 장기적인 신뢰성을 보장할 수 없습니다.
오픈 드레인 방식 덕분에 5V 마이크로컨트롤러가 3.3V를 HIGH로 인식하는 조건에서는 버스를 3.3V로 풀업해 함께 사용할 수 있습니다. 하지만 모든 보드가 같은 입력 임계값을 갖는 것은 아닙니다. “아두이노 계열이면 다 된다”는 추측 대신 사용 중인 칩의 데이터시트에서 VIH 최소값과 핀의 5V 허용 여부를 확인해야 합니다.
전압 조건이 맞지 않으면 BSS138 기반 양방향 레벨 시프터 같은 변환 회로를 고려할 수 있습니다. 다만 값싼 변환 모듈도 양쪽에 풀업 저항을 포함하는 경우가 많으므로 기존 센서 모듈의 저항과 중복되는지 살펴야 합니다. 회로와 코드를 함께 다루는 흐름은 디바이스 드라이버 통합개발환경의 개요처럼 하드웨어와 소프트웨어를 통합해 보는 관점과도 이어집니다.
- 아두이노 보드의 논리 전압이 5V인지 3.3V인지 확인합니다.
- 센서 데이터시트에서 전원 전압과 I/O 허용 전압을 따로 찾습니다.
- 모듈에 풀업 저항이 있다면 어느 전원 레일에 연결됐는지 회로도를 봅니다.
- 두 장치의 논리 전압이 다르면 3.3V 풀업 가능 여부를 판단합니다.
- 조건이 불명확하면 양방향 I2C 레벨 시프터를 사용하고 양쪽 합성 저항을 계산합니다.
저항값을 고르기 전에 버스 전압부터 결정하세요. 잘못된 전압에 연결된 4.7kΩ은 적절한 풀업이 아니라 위험을 안정적으로 전달하는 통로가 될 수 있습니다.
브레드보드에서 외부 풀업을 추가하는 순서
센서 한 개와 짧은 배선부터 기준 회로를 만듭니다
첫 실습에서는 여러 센서를 한꺼번에 연결하지 않는 편이 좋습니다. 아두이노, I2C 센서 한 개, 짧은 점퍼선, 4.7kΩ 저항 두 개로 기준 회로를 만들면 문제가 발생했을 때 원인을 빠르게 좁힐 수 있습니다. 센서 모듈에 풀업이 내장돼 있다면 전원을 끈 상태에서 SDA와 VCC 사이 저항을 측정해 대략적인 값을 확인합니다.
외부 풀업을 추가할 때는 저항 하나를 SDA와 버스 전원 사이에, 다른 하나를 SCL과 같은 버스 전원 사이에 연결합니다. 저항에는 방향이 없으므로 띠의 방향은 중요하지 않습니다. 중요한 것은 5V와 3.3V 레일을 혼동하지 않고 모든 장치의 GND를 공통으로 묶는 것입니다.
배선 후에는 주소 스캐너만 한 번 실행하고 끝내지 마세요. 주소가 반복해서 동일하게 검색되는지 확인한 다음 실제 측정 코드를 수백 회 동작시켜야 합니다. 손으로 점퍼선을 살짝 움직였을 때 오류가 생긴다면 풀업뿐 아니라 접촉 불량이나 지나치게 긴 배선도 의심할 수 있습니다.
- USB와 외부 전원을 모두 분리한 뒤 보드의 전압 사양을 확인합니다.
- 센서 VCC와 GND를 연결하고 공통 접지가 맞는지 연속성 모드로 검사합니다.
- SDA와 SCL을 보드의 실제 I2C 핀에 연결합니다.
- 4.7kΩ 저항 두 개를 각각 SDA·SCL과 올바른 버스 전원 사이에 꽂습니다.
- 전원을 넣고 유휴 상태의 SDA와 SCL 전압이 버스 전압 근처인지 측정합니다.
- 주소 스캐너를 여러 번 실행한 뒤 센서 데이터를 연속으로 읽습니다.
- 브레드보드 전원 레일이 중간에서 끊긴 제품인지 확인합니다.
- A4·A5처럼 보드별로 다른 I2C 핀 번호를 외우기보다 핀 배치도를 확인합니다.
- 저항값과 센서 개수, 배선 길이를 실험 노트에 적어 재현 가능한 기준을 남깁니다.
측정 도구가 없어도 증상을 단계적으로 좁힐 수 있다
멀티미터 다음에 로직 애널라이저를 사용합니다
오실로스코프가 없더라도 기본적인 진단은 가능합니다. 전원을 끄고 SDA-VCC, SCL-VCC 사이 저항을 측정하면 풀업의 존재와 대략적인 합성값을 알 수 있습니다. 전원을 켠 뒤 통신하지 않는 유휴 상태에서 두 신호선이 버스 전압 가까이 올라오는지도 확인하세요. 단, 저항 측정은 반드시 무전원 상태에서 해야 합니다.
로직 애널라이저는 주소, ACK, NACK와 같은 디지털 결과를 확인하는 데 유용하지만 아날로그 상승 곡선을 정확히 보여주지는 않습니다. 캡처 화면에서 HIGH로 보인다고 해서 전압 여유가 충분하다고 단정하면 안 됩니다. 저속에서는 성공하고 고속에서 실패하거나, 손을 가까이 댔을 때 결과가 달라진다면 상승 시간과 잡음 문제를 우선 의심할 수 있습니다.
초보자가 자주 묻는 질문도 이 진단 순서 안에서 답을 찾을 수 있습니다. 내부 풀업을 끄는 코드보다 먼저 모듈에 이미 달린 저항과 전압을 확인하고, 통신 속도를 낮췄을 때 증상이 사라지는지도 비교해 보세요.
- Q. 센서 모듈에 4.7kΩ이 있으면 저항을 또 달아야 하나요?
대개 짧은 배선과 센서 한 개라면 추가할 필요가 없습니다. 실제 합성 저항과 파형을 확인한 뒤 결정합니다. - Q. 내부 풀업만으로 주소가 검색되면 계속 써도 되나요?
저속 시제품에서는 가능하지만 온도, 배선 길이, 장치 추가 후에도 안정적인지는 별도 검증해야 합니다. - Q. SDA만 오류가 나는데 두 선의 저항값을 같게 해야 하나요?
보통 같은 값으로 시작합니다. 한쪽 파형만 다르면 배선, 핀 설정, 모듈 불량도 함께 점검합니다. - Q. 통신 속도를 낮추면 왜 살아나나요?
신호가 HIGH 수준까지 상승할 시간이 늘어나기 때문입니다. 이는 원인을 좁히는 단서이지 항상 최종 해결책은 아닙니다.
느린 실습에서는 내부 풀업도 충분하다는 반론
목표가 학습인지 장기 운용인지에 따라 선택이 달라집니다
외부 풀업이 설계 재현성과 통신 여유 면에서 유리하지만, 내부 풀업을 무조건 잘못된 선택으로 볼 필요는 없습니다. 센서 한 개, 매우 짧은 배선, 낮은 통신 속도, 실내 책상 위 실습처럼 조건이 제한적이라면 내부 풀업만으로도 정상 동작할 수 있습니다. 부품 수를 줄이고 I2C 코드 흐름을 먼저 익히려는 입문자에게는 간단함 자체가 장점입니다.
반대 의견의 핵심은 “동작하면 충분한가”에 있습니다. 하루 동안 값을 읽는 교육용 장치와 계절 변화, 전원 잡음, 긴 케이블을 견뎌야 하는 사물인터넷 장치는 요구 수준이 다릅니다. 전자는 내부 풀업으로 학습 속도를 높일 수 있지만, 후자는 계산 가능한 외부 저항과 반복 시험을 통해 여유를 확보해야 합니다.
따라서 내부 풀업과 외부 풀업의 선택을 정답과 오답으로 나누기보다 허용할 실패 확률과 사용 환경으로 판단하는 편이 현실적입니다. 내부 풀업으로 시작했다면 센서 추가, 배선 연장, 400kHz 전환 같은 변화가 생기는 시점에 외부 풀업을 다시 검토하세요. 작은 실습에서는 단순함이 기술적 가치가 될 수 있고, 현장 장치에서는 측정 가능한 안정성이 더 큰 가치가 됩니다.
- 내부 풀업이 어울리는 경우: 짧은 교육 실습, 센서 한 개, 낮은 속도, 고장 영향이 작은 시제품입니다.
- 외부 풀업이 어울리는 경우: 다중 센서, 긴 배선, 고속 통신, 장시간 무인 운용 프로젝트입니다.
- 전환 시점: 장치를 추가했거나 속도를 높였거나 간헐적 NACK가 처음 관찰됐을 때입니다.
- 판단 기준: 한 번의 성공이 아니라 다양한 전원·온도·배선 조건에서의 반복 성공률입니다.

- 다음글아두이노 I2C 센서를 배선하고 주소를 읽기까지 26.09.09
등록된 댓글이 없습니다.
