아두이노 I2C 센서를 배선하고 주소를 읽기까지

profile_image
작성자 버스첫걸음민재
댓글 0건 조회 10회

센서 예제 코드를 그대로 올렸는데 값이 나오지 않거나 ‘장치를 찾을 수 없음’이라는 메시지만 보이나요? 초보자에게는 코드보다 먼저 확인해야 할 것이 있습니다. 바로 I2C 통신의 네 가닥 배선, 전압, 주소입니다. 이 세 가지를 순서대로 이해하면 센서가 응답하지 않을 때도 어디서부터 살펴봐야 하는지 보이기 시작합니다.

I2C 통신이 두 신호선으로 대화하는 원리

SDA와 SCL의 역할부터 구분합니다

I2C는 마이크로컨트롤러와 여러 주변 장치가 가까운 거리에서 데이터를 주고받을 때 널리 사용하는 직렬 통신 방식입니다. 전원선을 제외하면 데이터가 오가는 SDA와 통신 박자를 만드는 SCL 두 선만 사용합니다. 아두이노가 센서에 질문을 보내고 센서가 측정값을 돌려주는 동안 두 신호선이 함께 움직입니다.

초보자가 가장 먼저 기억할 개념은 버스입니다. 버스란 하나의 SDA·SCL 배선에 온도 센서, 조도 센서, OLED 같은 장치가 함께 연결되는 구조를 뜻합니다. 각 장치는 고유한 주소로 구분되므로 선을 매번 따로 늘리지 않아도 됩니다. 다만 주소가 같거나 전압 조건이 맞지 않으면 통신이 정상적으로 시작되지 않습니다.

  • SDA: 명령, 주소, 측정값이 이동하는 데이터 선입니다.
  • SCL: 데이터 읽기 시점을 맞추는 클록 선입니다.
  • 컨트롤러: 통신을 시작하는 아두이노 같은 장치입니다.
  • 주변 장치: 요청에 응답하는 센서나 디스플레이입니다.
I2C 입문에서는 전송 속도보다 ‘어느 핀이 SDA이고 어느 핀이 SCL인지’를 보드별로 확인하는 습관이 더 중요합니다.

보드와 센서의 핀 표기를 먼저 읽습니다

같은 기능도 보드마다 위치가 다릅니다

아두이노 우노에서는 일반적으로 A4가 SDA, A5가 SCL로 사용됩니다. 반면 메가 계열이나 일부 소형 보드는 핀 위치가 다르고, ESP32처럼 소프트웨어에서 I2C 핀을 지정할 수 있는 보드도 있습니다. 따라서 인터넷 배선 사진만 따라 하기보다 사용 중인 보드의 핀맵과 센서 모듈의 실크 인쇄를 함께 확인해야 합니다.

센서 모듈에는 보통 VCC, GND, SDA, SCL이 적혀 있습니다. VIN이라고 표시된 제품은 전압 조정 회로를 포함할 수 있지만 모든 모듈이 그런 것은 아닙니다. 센서 칩 자체가 3.3V 전용인데 5V를 직접 연결하면 손상될 수 있으므로 판매 페이지보다 데이터시트의 절대 최대 정격을 우선해 읽어야 합니다. 아두이노의 개념과 보드 구성이 낯설다면 지식백과의 아두이노 설명도 기초 용어를 익히는 데 도움이 됩니다.

표기연결 대상주의점
VCC·VIN허용 전압의 전원 핀3.3V 전용 여부 확인
GND아두이노 GND반드시 공통 접지
SDA보드의 SDA 핀SCL과 바꾸지 않기
SCL보드의 SCL 핀SDA와 나란히 짧게 배선
  • 보드 이름과 정확한 리비전을 확인합니다.
  • 센서 모듈 앞뒤의 핀 표기를 모두 살펴봅니다.
  • 전원 허용 범위를 확인한 뒤 USB를 연결합니다.

전원을 끈 상태에서 네 가닥을 연결합니다

GND부터 시작하면 실수가 줄어듭니다

배선을 바꿀 때는 아두이노의 USB 케이블과 외부 전원을 먼저 분리합니다. 전원이 들어온 상태에서 점퍼선을 옮기면 핀이 순간적으로 잘못 닿거나 전원과 접지가 합선될 수 있습니다. 책상 위에서 센서 방향을 고정한 다음 GND, VCC, SDA, SCL 순서로 한 가닥씩 연결해 보세요.

브레드보드에서는 같은 세로 줄이 전기적으로 연결되는지, 긴 전원 레일이 중간에서 끊겨 있지 않은지도 확인해야 합니다. 점퍼선 색상은 기능과 무관하지만 검정은 GND, 빨강은 전원, 파랑은 SDA, 노랑은 SCL처럼 규칙을 정하면 사진을 다시 볼 때 빠르게 오류를 찾을 수 있습니다. 선은 처음부터 길게 쓰지 말고 10~20cm 안에서 실습하는 편이 안정적입니다.

  1. USB와 외부 전원을 모두 분리합니다.
  2. 아두이노 GND와 센서 GND를 연결합니다.
  3. 데이터시트에 맞는 3.3V 또는 5V 전원을 연결합니다.
  4. SDA끼리, SCL끼리 연결한 뒤 손으로 가볍게 당겨 접촉을 확인합니다.
  5. 배선 사진을 한 장 찍고 전원을 넣습니다.

여러 센서를 연결한다면 처음부터 전부 꽂지 마세요. 센서 하나로 주소 검색에 성공한 뒤 한 개씩 추가해야 어느 장치에서 문제가 생겼는지 분리할 수 있습니다. 이 방법은 부품이 늘어나도 그대로 적용할 수 있는 임베디드 개발의 기본 진단 습관입니다.

풀업 저항과 전압이 신호 모양을 결정합니다

모듈에 이미 달린 저항부터 찾습니다

I2C의 SDA와 SCL은 장치가 스스로 높은 전압을 만들어 내는 구조가 아니라, 필요할 때 선을 낮은 전압으로 끌어내리는 오픈 드레인 방식으로 동작합니다. 그래서 두 신호선을 기본적으로 HIGH 상태로 유지하는 풀업 저항이 필요합니다. 시판 센서 모듈에는 4.7kΩ 또는 10kΩ 저항이 포함된 경우가 많아 입문 실습에서는 별도 저항 없이도 작동할 수 있습니다.

문제는 모듈을 여러 개 연결할 때입니다. 각 모듈의 풀업 저항이 병렬로 묶이면 전체 저항값이 낮아져 장치가 신호선을 LOW로 내릴 때 더 많은 전류가 흐릅니다. 반대로 풀업이 전혀 없거나 저항값이 지나치게 크면 신호가 천천히 올라가 고속 통신에서 오류가 날 수 있습니다. 회로도를 구할 수 없다면 기판에서 SDA·SCL 근처의 ‘472’ 또는 ‘103’ 표기 저항을 찾아보는 것도 한 방법입니다.

  • 472는 대개 4.7kΩ, 103은 대개 10kΩ을 뜻합니다.
  • 3.3V 센서와 5V 보드를 섞을 때는 신호선 풀업 전압을 확인합니다.
  • 전압이 다른 장치를 연결할 때는 양방향 레벨 시프터 사용을 검토합니다.
  • 초기 실습 속도는 보통 100kHz로 두는 것이 무난합니다.

센서 전원만 3.3V로 공급했다고 항상 안전한 것은 아닙니다. 모듈의 풀업 저항이 5V에 연결되어 있다면 SDA와 SCL도 5V까지 올라갈 수 있습니다. 특히 라즈베리파이와 3.3V 마이크로컨트롤러는 5V 신호에 민감하므로 멀티미터로 유휴 상태의 신호선 전압을 재보는 습관이 유용합니다.

I2C 스캐너로 센서 주소를 확인합니다

라이브러리보다 먼저 통신 자체를 시험합니다

배선을 마쳤다면 곧바로 복잡한 센서 예제를 실행하기보다 I2C 스캐너를 올려 보세요. 스캐너는 가능한 주소에 차례로 요청을 보내고 응답한 장치의 주소를 시리얼 모니터에 표시합니다. 이 과정은 측정 알고리즘이나 센서 라이브러리를 제외하고 물리적 연결과 기본 통신만 점검한다는 장점이 있습니다.

아두이노 IDE에서 Wire 라이브러리를 불러오고, 1부터 126까지 주소를 순회하며 응답 코드를 확인하는 예제를 사용할 수 있습니다. 업로드 후 시리얼 모니터의 전송 속도를 코드와 동일하게 맞춥니다. ‘0x3C’처럼 표시되는 값이 센서의 I2C 주소이며, 앞의 0x는 16진수라는 뜻입니다. 개발 도구와 드라이버의 관계가 궁금하다면 디바이스 드라이버 통합개발환경 개요를 함께 읽어볼 수 있습니다.

  1. Arduino IDE에서 보드 종류와 포트를 정확히 선택합니다.
  2. Wire 기반 I2C 스캐너 예제를 업로드합니다.
  3. 시리얼 모니터를 열고 코드에 지정된 보드레이트를 선택합니다.
  4. 검색된 16진수 주소를 메모합니다.
  5. 센서 데이터시트의 기본 주소와 결과를 대조합니다.
주소가 하나라도 검색되면 SDA·SCL과 공통 접지가 대체로 동작한다는 의미입니다. 다만 값 읽기 실패는 초기화 명령이나 라이브러리 설정에서 별도로 발생할 수 있습니다.

응답이 없을 때 질문별로 원인을 좁힙니다

초보자가 자주 묻는 상황을 순서대로 봅니다

Q. 스캐너가 장치를 하나도 찾지 못합니다.
가장 먼저 SDA와 SCL이 뒤바뀌지 않았는지 확인하고, 센서 VCC와 GND 사이의 실제 전압을 멀티미터로 측정합니다. 보드의 전용 SDA·SCL 핀을 사용했는지도 살펴보세요. 납땜되지 않은 헤더를 브레드보드에 단순히 끼운 경우에는 겉보기와 달리 전기적 접촉이 거의 없을 수 있습니다.

Q. 데이터시트 주소와 다른 값이 표시됩니다.
일부 센서는 ADDR 핀 상태에 따라 주소가 달라지고, 판매 모듈의 납땜 점퍼가 기본 주소를 변경하기도 합니다. 또한 데이터시트가 읽기·쓰기 비트를 포함한 8비트 주소를 표기하면 스캐너의 7비트 주소와 숫자가 달라 보일 수 있습니다. 라이브러리에는 대개 스캐너가 보여준 7비트 주소를 입력합니다.

Q. 주소는 보이는데 측정값이 이상합니다.
이 경우 배선보다는 센서 초기화 시간, 라이브러리 호환성, 측정 모드와 데이터 변환식을 확인해야 합니다. 같은 이름의 라이브러리가 여러 개 검색될 수 있으므로 예제 코드가 요구하는 제작자와 버전을 확인하세요. 주소 탐색 성공과 정상 측정은 서로 다른 시험이라는 점이 핵심입니다.

  • 주소가 간헐적으로 사라지면 점퍼선 접촉과 선 길이를 확인합니다.
  • 두 장치가 같은 주소라면 주소 선택 핀, 멀티플렉서 또는 별도 버스를 검토합니다.
  • 센서가 뜨거워지면 즉시 전원을 끄고 전원 극성을 다시 확인합니다.
  • 업로드 오류는 I2C 문제가 아니라 USB 포트나 보드 선택 문제일 수 있습니다.

지금 센서 하나로 첫 주소 기록을 만듭니다

10분 실습을 재현 가능한 기록으로 남깁니다

첫 실습의 목표를 측정값 출력까지 크게 잡지 않아도 됩니다. 센서 하나를 안전하게 배선하고 스캐너에서 주소 하나를 확인하는 것만으로도 충분한 진전입니다. 준비물은 아두이노 호환 보드, I2C 센서 모듈, 점퍼선 네 가닥, USB 케이블이며 보유 장비가 없다면 기본 보드는 대략 1만~3만원대, 간단한 센서는 수천 원대부터 구성할 수 있습니다. 호환 보드는 가격 차이가 크므로 전압과 USB 칩 드라이버 지원 여부를 함께 살펴보세요.

기록에는 보드명, 센서명, 공급 전압, SDA·SCL 핀 번호, 검색 주소, 사용한 라이브러리 이름을 적습니다. 배선 사진과 시리얼 모니터 화면도 남겨 두면 며칠 뒤 같은 회로를 다시 만들 때 시간을 크게 줄일 수 있습니다. 센서 데이터를 장기간 저장하면 생활 패턴을 읽는 라이프로그 프로젝트로도 확장할 수 있으며, 관련 개념은 라이프로그 서비스 용어 설명에서 살펴볼 수 있습니다.

  • 보드 전원을 끄고 GND부터 네 가닥을 연결합니다.
  • 전원을 넣은 뒤 센서가 뜨거워지지 않는지 확인합니다.
  • I2C 스캐너를 업로드하고 시리얼 모니터를 엽니다.
  • 검색 주소와 공급 전압을 메모장에 한 줄로 기록합니다.
  • 성공한 배선 사진에 SDA와 SCL 표시를 추가합니다.

지금 바로 센서 하나만 책상에 놓고 ‘보드명 / 센서명 / 전압 / 주소’ 네 칸을 적어 보세요. 이어서 전원을 분리한 상태에서 GND부터 연결하고, 주소 검색 결과가 나오는 순간 마지막 칸을 채우면 첫 번째 I2C 통신 기록이 완성됩니다.

아두이노 I2C 센서를 배선하고 주소를 읽기까지

댓글목록

등록된 댓글이 없습니다.