#!/usr/bin/env python3 """ LoadCell - Raspberry Pi Python library for HX711 load cell amplifier 하드웨어 연결: - HX711 [VCC] -> Pi 5 [Pin 1] (3.3V) - HX711 [GND] -> Pi 5 [Pin 6] (GND) - HX711 [DT] -> Pi 5 [Pin 29] (GPIO5) - HX711 [SCK] -> Pi 5 [Pin 31] (GPIO6) """ from HX711 import SimpleHX711, Rate import time # HX711 핀 설정 DT_PIN = 5 # GPIO5 -> 29번 핀 SCK_PIN = 6 # GPIO6 -> 31번 핀 # 설정 변수 CALIBRATION_FACTOR = -411.17 # 캘리브레이션 팩터 measure_delay = 0.1 # 측정 간격 (초) density = 1.0 # 기본값: 물 (1.0 g/ml) # 상태 변수 is_calibrated = False offset_value = 0 # HX711 인스턴스 hx = None def init_hx711(): """HX711 초기화""" global hx print("HX711 초기화 중...") print(f" DT 핀: GPIO{DT_PIN} (Pin 29)") print(f" SCK 핀: GPIO{SCK_PIN} (Pin 31)") try: hx = SimpleHX711(DT_PIN, SCK_PIN, 1, 0, Rate.HZ_10) print("HX711 연결 성공!") return True except Exception as e: print(f"HX711 연결 실패: {e}") print("배선 확인 필요") return False def perform_calibration(): """캘리브레이션 수행""" global is_calibrated, offset_value if is_calibrated: return print() print("-" * 50) print(">> 최초 캘리브레이션 진행") print("-" * 50) print("로드셀 위에 아무것도 올리지 마세요!") print("2초 후 영점 조정을 시작합니다...") time.sleep(2) print("영점 조정 중...") # 10번 읽어서 평균값을 오프셋으로 사용 readings = [] for _ in range(10): readings.append(hx.read()) time.sleep(0.1) offset_value = sum(readings) / len(readings) print(">> 캘리브레이션 완료!") print(f"현재 오프셋 값: {offset_value:.2f}") print() is_calibrated = True def tare(): """영점 조정 함수""" global offset_value print("\n>> 영점 조정 중...") print(" 로드셀 위에 아무것도 올리지 마세요") time.sleep(1) readings = [] for _ in range(10): readings.append(hx.read()) time.sleep(0.1) offset_value = sum(readings) / len(readings) print(">> 영점 조정 완료!\n") def get_weight(): """무게 측정 함수""" raw_value = hx.read() # (RAW 값 - 오프셋) / 캘리브레이션 팩터 = 무게 weight_g = (raw_value - offset_value) / CALIBRATION_FACTOR weight_g = max(0, weight_g) # 음수 값 방지 # 밀도 적용 (부피 계산) volume_ml = weight_g / density return weight_g, volume_ml def main(): if not init_hx711(): return perform_calibration() print("무게 측정 테스트 (10회):") print("-" * 50) for i in range(10): weight_g, volume_ml = get_weight() print(f" [{i+1:2d}] {weight_g:.1f}g / {volume_ml:.1f}ml") time.sleep(measure_delay) print("-" * 50) print("테스트 완료") if __name__ == "__main__": main()