HX711 — 로드셀용 증폭기 + ADC
로드셀 속 휘트스톤 브리지가 내놓는 신호는 mV 수준의 아주 작은 전압입니다. HX711 은 이 미소 전압을 증폭하고 숫자로 바꿔서(ADC) 아두이노에 전달해 주는, 저울 전용으로 설계된 칩입니다. 몇백 원짜리 모듈 하나가 증폭기와 정밀 전압계 역할을 동시에 합니다.

HX711 보드. 왼쪽이 로드셀(브리지) 입력, 오른쪽이 아두이노 연결 핀. 사진: SparkFun Electronics, CC BY 2.0
왜 필요한가 — 아두이노가 직접 못 읽는 이유
휘트스톤 브리지 글의 예제에서 120 Ω 게이지의 저항이 0.1 Ω 변할 때 브리지 출력은 약 1.25 mV 였습니다. 아두이노 우노의 내장 ADC 로 이걸 읽을 수 있을까요?
- 우노의 ADC 는 10비트: 0~5 V 를 2^{10} = 1024 칸으로 나눕니다.
- 한 칸의 크기는 5\,\text{V} / 1024 \approx 4.9\,\text{mV}.
한 칸(4.9 mV)이 신호 전체(1.25 mV)보다 큽니다. 저울 눈금 하나가 잴 물체보다 굵은 셈이라, 아두이노가 직접 읽으면 그냥 0 입니다.
문제가 하나 더 있습니다. 우노의 ADC 는 입력 핀 하나의 전압을 GND 기준으로 재는 방식(단일 입력)입니다. 그런데 브리지 출력은 어느 한 점의 전압이 아니라 두 점 A, B 의 전압 차이입니다. 전압계라면 빨간 침을 A 에, 검은 침을 B 에 대면 되지만, ADC 입력은 검은 침이 GND 에 붙박이로 고정된 전압계와 같습니다. 즉 휘트스톤 브리지의 양단(A–B)을 ADC 에 직접 연결할 방법이 없습니다.
그래서 내장 ADC 로 읽으려면 어쩔 수 없이 채널 2개를 쓰는 우회로를 택해야 합니다: A0 에 A 점, A1 에 B 점을 연결해 각각 GND 기준으로 읽은 뒤 소프트웨어에서 빼는 것이지요. 숫자를 넣어 보면 왜 이게 안 되는지 보입니다:
- A 점: 약 3.00125 V → 4.9 mV 눈금으로 읽으면 3.00125 \times 1024 / 5 = 614.7 \to 614 칸
- B 점: 약 3 V → 3 \times 1024 / 5 = 614.4 \to 역시 614 칸
- 차이: 614 - 614 = 0
각 점의 전압(약 3 V)은 눈금 수백 칸짜리 큰 값인데 정작 알고 싶은 차이(1.25 mV)는 한 칸 아래에 묻혀 버립니다. 휘트스톤 브리지 글에서 "큰 값 위의 작은 변화를 0 위의 작은 변화로 바꿔치기"한 것이 브리지의 핵심이었는데, 큰 값 두 개를 따로 숫자화한 뒤 빼는 순간 그 장점을 도로 잃는 것입니다. 차이는 숫자로 바꾸기 전에, 아날로그 단계에서 뽑아 증폭해야 합니다.
그래서 중간에 두 가지 일을 해 줄 부품이 필요합니다:
- 증폭 — 신호를 128배 키워서 1.25 mV → 160 mV 로
- 정밀 변환 — 훨씬 촘촘한 눈금(24비트)으로 숫자화
무엇을 하는 칩인가
HX711 내부는 두 부분입니다.
① 증폭기 (PGA) — 입력이 GND 기준이 아니라 차동 입력입니다. 전압계처럼 브리지 양단(A–B)에 직접 걸 수 있고, 두 출력선(A+, A−)의 전압 차이를 128배 증폭합니다. 두 선의 차이만 보는 차동 증폭이라, 두 선에 공통으로 실리는 잡음은 상쇄됩니다. 증폭 배율(게인)은 채널 A 에서 128 또는 64, 보조 채널 B 에서 32 를 선택할 수 있습니다.
② 24비트 ADC — 증폭된 전압을 2^{24} \approx 1678만 칸의 눈금으로 숫자화합니다. 10비트(1024칸)와 비교하면 눈금이 16,384배 촘촘합니다. 변환 속도는 SPS(samples per second, 초당 변환 횟수) 단위로 나타내는데, HX711 은 10 SPS(정밀) 또는 80 SPS(고속) 중 하나를 선택합니다.
왜 최대가 겨우 80 SPS 일까? 아두이노 내장 ADC 는 초당 1만 번도 변환하는데 HX711 은 많아야 80번입니다. 느려서가 아니라 정밀도를 시간으로 사고 있기 때문입니다. HX711 같은 델타-시그마(ΔΣ) 방식 ADC 는 내부에서 빠르고 거친 측정을 수만 번 반복한 뒤 평균해서 24비트 정밀도를 만들어 냅니다 — 평균으로 잡음을 줄이는 √N 법칙 그대로입니다. 눈금을 촘촘하게 쓰려면 잡음이 눈금 한 칸보다 작아질 때까지 평균해야 하므로, 비트 수가 높을수록 변환 하나에 긴 시간이 필요합니다. 정밀도와 속도는 맞바꿈 관계입니다.
10 SPS 라는 값 자체에도 이유가 있습니다. 한 번의 변환이 1/10\ \text{s} = 100\ \text{ms} 구간을 평균하는데, 100 ms 는 우리나라 전원 주파수 60 Hz 의 주기(16.7 ms)의 정확히 6배이고 유럽 50 Hz 주기(20 ms)의 정확히 5배입니다. 콘센트에서 새어 들어오는 전원 잡음(험)은 한 주기를 평균하면 0 이 되므로, 100 ms 평균은 50 Hz 든 60 Hz 든 전원 잡음을 통째로 상쇄합니다. 80 SPS 는 이 정렬이 깨져서 빠른 대신 잡음이 커집니다.
한 가지 영리한 설계가 더 있습니다. HX711 은 브리지에 걸어 주는 전압(E+, E−)을 자기가 직접 공급하고, ADC 의 기준 전압도 같은 전원에서 가져옵니다. 브리지 출력식 V_{AB} \approx \frac{V}{4}\frac{\Delta R}{R} 은 공급 전압 V 에 비례하는데, 기준도 같이 V 에 비례하므로 전원 전압이 흔들려도 결과 숫자는 흔들리지 않습니다 (비율 측정, ratiometric).
핀 구성
| 쪽 | 핀 | 연결 |
|---|---|---|
| 로드셀 쪽 | E+, E− | 브리지 전원 (로드셀 빨강, 검정) |
| 로드셀 쪽 | A+, A− | 브리지 출력 (로드셀 초록, 흰색) |
| 아두이노 쪽 | VCC, GND | 전원 (2.7~5.5 V) |
| 아두이노 쪽 | DT(DOUT), SCK | 데이터, 클럭 |
DT/SCK 는 I2C 나 SPI 가 아니라 HX711 전용의 단순한 2선 방식입니다: SCK 를 한 번 튕길 때마다 DT 로 1비트씩 24비트를 내보내고, 마지막 여분 클럭 수(25/26/27회)로 다음 변환의 채널·게인을 정합니다. 라이브러리(bogde/HX711 등)가 다 처리해 주므로 직접 구현할 일은 거의 없습니다.
실제로 쓸 때 알아 둘 것
- 24비트가 다 유효하지는 않다. 아래쪽 몇 비트는 잡음으로 흔들립니다. 실효 분해능은 대략 17~19비트 수준입니다. 비율로 바꾸면 1/2^{17} \approx 0.0008\ \% 에서 1/2^{19} \approx 0.0002\ \%, 즉 측정 범위의 10만분의 1 안팎을 구분한다는 뜻입니다 — 5 kg 로드셀이면 0.1 g 근처가 되어 취미용 저울로는 충분합니다. 잡음은 실험 글처럼 여러 번 읽어 평균하면 줄어듭니다 (N 회 평균 시 \sqrt{N} 배 감소 — 왜 그런지는 평균은 왜 잡음을 줄이는가 참고).
- 출력은 단위 없는 숫자다. 그램으로 바꾸려면 아는 질량으로 보정해야 합니다 — 보정 절차 참고.
- 배선은 짧게. A+/A− 는 증폭 전의 미소 신호이므로 로드셀–HX711 사이가 길어질수록 잡음이 늘어납니다. HX711 모듈을 로드셀 가까이에 두고, 아두이노까지는 디지털 신호(DT/SCK)로 길게 끄는 배치가 유리합니다.
- 10 SPS 모드가 기본. 80 SPS 는 빠르지만 잡음이 커집니다. 저울 용도라면 10 SPS + 평균이 정석입니다.
무게 측정 전체 과정(배선, 코드, 보정)은 로드셀과 HX711로 무게 측정하기에서 다룹니다.