Home IoT Hub Series · 18

[18편] 강아지 밥그릇이 비었는지 눈으로 보자 - HX711 사료 잔량 측정 노드

[18편] 강아지 밥그릇이 비었는지 눈으로 보자 - HX711 사료 잔량 측정 노드 대표 이미지
시스템 아키텍처 및 데이터 파이프라인 안내
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. HX711 로드셀 노드가 사료 잔량을 보내 밥 보충 필요 여부를 중앙 허브 경고로 연결합니다. 수집된 데이터는 로컬 무선망 IoT_Hub_Net을 통해 중앙 서버의 20번 반려견 밥그릇 슬롯(/set?no20=값)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.

시리즈 마지막 편이다. HX711 로드셀은 무게를 정밀하게 측정하는 센서다. 밥그릇 아래에 깔아서 사료 무게를 잰다. 50g 이하로 떨어지면 두뇌가 부저를 울리고 OLED를 반전시켜 "밥 보충 필요"를 알린다. 20번 슬롯(Pet Bowl), 경고 대상.

준비물과 가격

부품수량개당 가격
Wemos D1 Mini1개2,000원
HX711 + 로드셀(5kg) 세트1세트3,000원
점퍼 와이어 4개
합계5,000원

핀 연결

[18편] 강아지 밥그릇이 비었는지 눈으로 보자 - HX711 사료 잔량 측정 노드 배선도
센서/모듈보드 연결
VCC3.3V
GNDGND
DTD1 (GPIO5)
SCKD2 (GPIO4)

선행 작업

HX711 Arduino Library by Bogdan Necula 설치. 검색어: HX711.

전체 코드

로드셀은 처음에 영점 조정(calibration)이 필요합니다. 빈 그릇을 올려놓은 상태에서 시리얼 모니터로 zero factor를 확인하고, 코드 상단의 CALIBRATION_FACTOR를 조정합니다.

[18편] 강아지 밥그릇이 비었는지 눈으로 보자 - HX711 사료 잔량 측정 노드 - 전체 코드
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <HX711.h>

const char* ssid     = "IoT_Hub_Net";
const char* password = "iothub1234";
const char* hubURL   = "http://192.168.1.1";

#define DOUT  5    // D1
#define CLK   4    // D2
#define SLOT_NO      20
#define THRESHOLD    50   // 50g 이하 → 경고
#define INTERVAL     10000

HX711 scale;

void setup() {
  Serial.begin(115200);
  scale.begin(DOUT, CLK);
  scale.set_scale(2280.f); // 보정 계수 (실측 후 조정)
  scale.tare();             // 현재 무게를 0으로

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to IoT_Hub_Net");
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println("\nConnected!");
  Serial.println("Pet Bowl ready. Tare done.");
}

void loop() {
  float weight = scale.get_units(5); // 5회 평균
  if (weight < 0) weight = 0;

  Serial.print("Pet Bowl: "); Serial.print(weight, 0);
  Serial.print(" g");
  if (weight < THRESHOLD) Serial.print("  REFILL!");
  Serial.println();

  WiFiClient client; HTTPClient http;
  String url = String(hubURL) + "/set?no"
             + String(SLOT_NO) + "=" + String((int)weight);
  http.begin(client, url);
  int code = http.GET(); http.end();
  Serial.print("HTTP "); Serial.print(code);
  Serial.print(" -> "); Serial.println(url);
  Serial.println();

  delay(INTERVAL);
}

영점 및 보정 방법

1. 아무것도 올리지 않은 상태에서 업로드. 시리얼 모니터에 0g 근처 값이 나올 때까지 scale.set_scale() 값을 조정한다. 2. 100g짜리 추(또는 저울로 확인한 물건)를 올려놓고 출력값이 100g에 가까워지도록 계수를 다시 조정. 3. 정확한 계수를 찾았으면 CALIBRATION_FACTOR로 저장하고 scale.tare()를 호출.

동봉된 로드셀마다 계수가 다릅니다. 위 예시 2280.f는 참고값일 뿐이며, 반드시 실측 보정이 필요합니다.

업로드 및 확인

빈 밥그릇을 올리고 업로드 → Pet Bowl: 0 g. 사료를 채우면 Pet Bowl: 120 g. 50g 이하로 떨어지면 두뇌 OLED 20번이 반전되고 부저가 울립니다.

시리얼 모니터

업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, 로드셀 무게값 필터링과 20번 슬롯 전송 흐름을 확인하는 예시입니다.

[BOOT] Home IoT Node #18 - Pet bowl load cell
[CAL] HX711 tare=complete, scale=2280.0
[SENSOR] raw_weight=164.2g stable_window=10
[FILTER] eating_motion=NO, outlier=PASS
[HTTP] GET /set?no20=164.2
[HUB] 200 OK - slot no20 updated
[LOOP] send only when stable for 5 minutes
  • Connected 또는 connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.
  • HTTP 200 또는 200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.
  • 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.

안 될 때 체크포인트

증상원인해결
항상 0만 나옴로드셀 배선 오류HX711 모듈의 E+/E-/A+/A-가 로드셀 색상과 일치하는지 확인 (보통 빨=E+, 검=E-, 흰=A+, 초=A-)
값이 무작위로 튐진동 or 간섭로드셀이 단단한 바닥에 놓였는지 확인. 반려견이 건드리지 않는 곳에 설치

현장 추가 체크포인트

이 노드는 코드만 보면 짧아 보일 수 있지만, 실제 집에 붙이면 센서 위치·전원·무선망·노이즈 때문에 값이 쉽게 흔들립니다. 아래 항목은 두뇌 서버에 잘못된 판단 근거가 들어가지 않도록 현장에서 먼저 점검할 내용입니다.

증상가능한 원인현장 해결 방법
강아지가 먹는 동안 값이 미친 듯이 튐그릇을 핥거나 밀면서 순간 하중과 진동이 생김초당 50g 이상 급변하는 값은 식사 중으로 보고 전송을 보류하며, 5분 안정 후 평균값만 보냅니다.
빈 그릇인데 0g이 아님로드셀 영점이 온도·장착 응력에 따라 조금씩 드리프트됨부팅 시 무부하 영점 보정과 주기적 tare 기능을 넣고, 음수는 0으로 클램프합니다.
무게가 한쪽으로 치우치면 값이 다름그릇 받침 구조가 로드셀 중앙에 힘을 고르게 전달하지 못함상판을 단단하게 만들고 하중이 로드셀 측정 방향으로만 걸리도록 스페이서를 조정합니다.
Wi-Fi 전송 때 값이 튐HX711 미세 신호가 전원 노이즈와 보드 동작에 영향받음로드셀 신호선은 짧게 유지하고 전원 안정화 후 측정하며, 측정과 HTTP 전송 타이밍을 분리합니다.

시리즈 완결

이 단계까지 진행하면 우리집 IoT 허브의 20개 슬롯이 모두 채워집니다. 거실 온도부터 반려견 밥그릇까지 연결하면 집 안의 상태를 말하듯 알려주는 시스템에 가까워집니다.

  • 두뇌: NodeMCU + OLED + 부저
  • 센서 노드: Wemos D1 Mini 19개
  • WiFi: IoT_Hub_Net으로 전부 연결
  • 총예산: 약 11만 원

앞으로 이 시스템을 기반으로 MQTT 연동, ESP-NOW 저전력 통신, 외부 접속용 서버 구축 같은 확장을 시도해 보자. iothub.co.kr에서 추가 확장편을 이어갈 예정이다. 수고했다.

반려견 밥그릇 무게 센서 활용과 설치 가이드

HX711과 로드셀을 밥그릇 아래에 두면 단순한 '밥 보충 알림'을 넘어 반려동물의 건강까지 지켜보는 작은 파수꾼이 됩니다. 여기서는 배선과 코드가 아니라, 실제로 어떻게 활용하고 어디에 설치하는지에 집중합니다.

활용 방안

  • 사료 잔량 알림: 50g 이하가 되면 허브가 '밥 보충 필요'를 알려, 외출 중에도 빈 그릇을 놓치지 않습니다.
  • 급여량·식욕 모니터링: 하루 시작 무게와 끝 무게의 차이를 기록하면 실제 섭취량이 그래프로 남습니다. 갑자기 먹는 양이 줄면 질병·스트레스의 조기 신호일 수 있어, 병원 방문 판단에 큰 도움이 됩니다.
  • 다묘·다견 급여 관리: 그릇별로 센서를 두면 어느 아이가 얼마나 먹는지 구분되어, 비만이나 편식 관리가 쉬워집니다.
  • 자동급식기 연동: 무게가 임계값 아래로 떨어지면 허브가 급식기에 '한 번 배출' 신호를 보내는 폐루프 자동 급여도 가능합니다.

추천 설치 장소

  • 평평하고 단단한 바닥: 카펫·매트 위는 하중이 분산돼 값이 흔들립니다. 타일이나 판 위가 좋습니다.
  • 그릇 중앙 하중: 로드셀 중심에 그릇 무게가 실리도록 두어야 오차가 줄어듭니다.
  • 진동원(세탁기·현관) 과 발로 차기 쉬운 통로는 피하는 것이 좋습니다.
  • 물그릇 응용: 같은 원리로 물 잔량도 감지해 '물 보충 알림'으로 쓸 수 있습니다.

실전 팁과 주의점

  • 영점(tare): 빈 그릇을 올린 상태에서 0점을 잡으면 그릇 무게가 자동 상쇄돼, 사료 무게만 순수하게 읽힙니다.
  • 보정(캘리브레이션): 100g·200g 같은 기준 무게로 계수를 맞춰야 g 단위가 정확합니다.
  • 온도 드리프트: 창가·바닥난방 근처는 값이 서서히 흘러갈 수 있으니 온도가 안정된 곳에 두는 것이 좋습니다.
  • 4선 로드셀 배선: 보통 빨강(E+)·검정(E-)·초록/흰색(A±)입니다. 색이 다르면 데이터시트를 확인합니다.
  • 충격 대비: 강아지가 그릇을 밀거나 코로 치면 순간적으로 큰 값이 튑니다. 여러 번 읽어 평균 내면 오탐을 줄일 수 있습니다.

자주 묻는 질문

Q. 그릇을 바꾸면 다시 설정해야 하나요? 무게가 다르므로 영점만 다시 잡으면 됩니다. 보정 계수는 그대로 씁니다.

Q. 값이 자꾸 조금씩 변해요. 온도 드리프트나 바닥 흔들림입니다. 안정된 위치와 평균값 처리로 해결됩니다.

Q. 습기 있는 곳도 괜찮나요? 로드셀 접점과 HX711은 물에 약하니 방수 케이스에 넣고 물그릇과는 거리를 두는 것이 좋습니다.

우리집 IoT HUB 20슬롯 시스템 맵

이 글은 2편의 중앙 두뇌 서버와 3~19편의 분산 엣지 노드가 함께 구성하는 20채널 홈 IoT 시스템의 일부입니다. 필요한 편으로 이동해 슬롯과 센서 흐름을 함께 확인합니다.

[1편] 우리집 IoT 허브 전체 그림[2편] 중앙 두뇌 서버 만들기 · 슬롯 1~20[3편] 집 안 온습도, 감으로 보지 말고 숫자로 보자 · 슬롯 1·2[4편] 문 닫았나 계속 신경 쓰일 때 · 슬롯 9[5편] 냉장고가 제대로 돌고 있는지 눈으로 확인하자 · 슬롯 12[6편] 창문 열어도 될까? · 슬롯 3[7편] 욕실 곰팡이 생기기 전에 습도부터 잡자 · 슬롯 19[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 · 슬롯 5·17[9편] 외출했는데 가스레인지가 켜져 있지 않을까? · 슬롯 6[10편] 가스 냄새가 나기 전에 먼저 경고받자 · 슬롯 7[11편] 집을 비웠을 때 불꽃 징후를 먼저 잡자 · 슬롯 8[12편] 머리가 멍한 이유가 공기 때문인지 확인하자 · 슬롯 13·14[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 · 슬롯 15[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 · 슬롯 16[15편] 비 오는 줄 모르고 창문 열어두지 않게 · 슬롯 18[16편] 불 껐나, 문 잠갔나 한 번에 확인하자 · 슬롯 11·10[17편] 리모컨 없이 에어컨을 IoT 허브에서 제어하자 · 슬롯 4[18편] 강아지 밥그릇이 비었는지 눈으로 보자 · 슬롯 20[19편] 사람 있을 때만 시원하게, 없을 땐 아끼자 · 슬롯 1·4[20편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체