로드셀과 HX711로 무게 측정하기 (아두이노 전자저울)

주방용 전자저울 속에는 로드셀(load cell) 이라는 힘 센서가 들어 있습니다. 이 실험에서는 로드셀을 HX711 증폭기 모듈로 아두이노에 연결해 전자저울을 직접 만들고, 그 과정에서 저울이 실제로 측정하는 것이 무엇인지(무게인지, 질량인지) 생각해 봅니다.

원리 — 저울은 무엇을 재는가

물체의 질량 m 은 물체 고유의 양이고, 무게 W 는 지구가 물체를 당기는 힘입니다. 질량이 정확히 무엇을 뜻하는지는 F=ma 글에서 자세히 다룹니다.

W = mg

로드셀이 감지하는 것은 힘, 즉 무게 쪽입니다. 로드셀은 알루미늄 막대에 스트레인 게이지(strain gauge, 얇은 저항선)를 붙인 구조인데, 물체를 올리면 막대가 아주 미세하게 휘고, 함께 늘어나거나 줄어든 저항선의 저항이 변합니다. 저항 R 의 변화는 변형률 \varepsilon (늘어난 비율)에 비례합니다:

\frac{\Delta R}{R} = k\,\varepsilon

응력·변형률이 정확히 무엇인지, 왜 텐서로 다루는지는 응력과 변형률, 그리고 텐서 글에서 자세히 설명합니다.

로드셀 막대에 붙어 있는 스트레인 게이지

로드셀 막대 가운데에 붙은 스트레인 게이지 (원본 사진)

이 변화는 수천 분의 일 수준으로 매우 작아서 그냥은 잴 수 없습니다. 그래서 게이지 4개를 **휘트스톤 브리지**로 연결해 저항의 "차이"만 전압으로 뽑아내고, 그 미소 전압(mV 수준)을 HX711 이 128배 증폭해 24비트 숫자로 바꿔 아두이노에 전달합니다.

정리하면: 무게(힘) → 막대의 변형 → 저항 변화 → 브리지 전압 → HX711 → 숫자.

준비물

  • 로드셀 (막대형, 1 kg 또는 5 kg 정격)
  • HX711 모듈
  • 아두이노 우노 (호환 보드 가능)
  • 점퍼선, 로드셀 고정용 판 2장 (아크릴/목재) 과 볼트
  • 질량을 아는 물체 (분동, 또는 새 동전·생수병 등)

막대형 로드셀(왼쪽)과 HX711 증폭 모듈(오른쪽)

막대형 로드셀(TAL220)과 HX711 증폭 보드. 사진: SparkFun Electronics, CC BY 2.0

배선

로드셀의 4가닥을 HX711 에, HX711 을 아두이노에 연결합니다.

로드셀 HX711 HX711 아두이노
빨강 E+ VCC 5V
검정 E− GND GND
초록 A+ DT D3
흰색 A− SCK D2

선 색은 제품마다 다를 수 있으니 로드셀에 붙은 표기를 우선하세요. 막대형 로드셀은 한쪽 끝만 아래판에 고정하고, 반대쪽 끝에 윗판을 달아 물체의 무게가 막대를 휘게 만들어야 합니다. 화살표(하중 방향) 표시가 아래를 향하게 조립합니다.

로드셀 → HX711 → 아두이노 배선도

Fritzing 으로 그린 배선도. 그림의 보드는 SparkFun HX711 (RED=E+, BLK=E−, WHT=A−, GRN=A+ — 초록 보드의 E±/A± 표기와 같은 순서)

아두이노 코드

라이브러리 매니저에서 HX711 (Bogdan Necula) 을 설치한 뒤 업로드합니다.

#include "HX711.h"

const int DT_PIN = 3;
const int SCK_PIN = 2;

// 보정 계수 — 아래 '보정' 단계에서 구한 값으로 바꿀 것
float CALIBRATION = 1.0;

HX711 scale;

void setup() {
  Serial.begin(9600);
  scale.begin(DT_PIN, SCK_PIN);
  scale.set_scale(CALIBRATION);
  scale.tare();   // 빈 저울을 0점으로
  Serial.println("ready");
}

void loop() {
  // 10회 평균 — 잡음을 줄인다
  Serial.println(scale.get_units(10), 1);
  delay(500);
}

보정 — 기준 질량으로 눈금 만들기

HX711 이 주는 값은 단위가 없는 숫자일 뿐입니다. 저울로 쓰려면 아는 질량으로 눈금을 매겨야 합니다.

  1. CALIBRATION = 1.0 인 상태로 실행하고, 빈 저울의 출력이 0 근처인지 확인합니다 (tare() 가 처리).
  2. 질량 m_0 (예: 100 g 분동)을 올리고 출력값 N 을 읽습니다.
  3. 보정 계수를 계산합니다: \text{CALIBRATION} = N / m_0 (g 단위 저울 기준).
  4. 코드의 CALIBRATION 을 이 값으로 바꿔 다시 업로드하면, 이후 출력이 그램 단위가 됩니다.

분동이 없다면 새 500원 동전(7.70 g) 여러 개나 새 생수(라벨의 내용량 + 빈 병 질량)를 쓸 수 있습니다.

측정해 보기

  • 같은 물체를 5회 반복해 올렸다 내리며 값이 얼마나 흔들리는지(반복성) 기록해 봅시다.
  • 100 g, 200 g, 300 g … 을 올리며 출력이 질량에 비례하는지 그래프로 확인해 봅시다. 훅 법칙 범위 안에서는 변형이 힘에 비례하므로 직선이 나와야 합니다.

보정 측정 예 — 질량에 비례하는 HX711 출력

보정 측정 예시 그래프 (실제 측정값으로 바꿔 넣을 것)

생각해 볼 것

  1. 이 저울이 직접 감지하는 물리량은 질량인가, 무게인가? 그런데 왜 눈금은 g(그램)으로 매겨도 되는가?
  2. 이 저울을 달에 가져가면 100 g 분동을 올렸을 때 얼마라고 표시될까? (g_\text{달} \approx g/6)
  3. 엘리베이터가 가속하며 올라가는 동안 측정하면 값이 어떻게 변할까? 직접 해 보자.
  4. 보정을 서울에서 했는데 적도 지방에서 쓰면 오차가 생길까? 생긴다면 몇 % 정도일까?

더 해 보기

  • HX711 의 24비트 분해능 이론값과 실제 흔들림(잡음)을 비교해 보기 — 평균 횟수를 바꾸면 잡음이 어떻게 줄어드는가? (√N 법칙과 맞는지 확인해 보자.)
  • 온도가 변하면 0점이 흐르는(drift) 현상 관찰하기 — 드라이어로 로드셀을 살짝 데워 보자.
  • 막대에 추를 매달아 단진동시키며 무게 값의 진동을 기록해 보기 — 용수철 저울과 같은 원리임을 확인할 수 있다.