/*
* 엘레파츠 전자저울 예제 프로그램 - loadcell + HX711
* 사용 라이브러리 : https://github.com/bogde/HX711
*
* 아두이노 GPIO 연결
* loadcell / HX711 board
* Dout PIN : D2
* SCK PIN : D3
*/
#include "HX711.h"
// HX711 circuit wiring
#define LOADCELL_DOUT_PIN 2
#define LOADCELL_SCK_PIN 3
// scale - 10Kg loadcell : 226 / 5kg loadcell : 372
// ADC 모듈에서 측정된 결과값을 (loadcellValue)값 당 1g으로 변환해 줌
float loadcellValue = 372.0;
HX711 scale;
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#define NUMPIXELS 16
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
pixels.begin();
// put your setup code here, to run once:
Serial.begin(115200);
// 로드셀 HX711 보드 pin 설정
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
// 부팅 후 잠시 대기 (2초)
delay(2000);
// 측정값 1회 읽어오기
Serial.print("read: \t\t\t");
Serial.println(scale.read());
delay(1000);
// 스케일 설정
scale.set_scale(loadcellValue);
// 오프셋 설정(10회 측정 후 평균값 적용) - 저울 위에 아무것도 없는 상태를 0g으로 정하는 기준점 설정(저울 위에 아무것도 올려두지 않은 상태여야 합니다.)
}
void loop() {
pixels.clear();
// put your main code here, to run repeatedly:
scale.tare(10);
// 설정된 오프셋 및 스케일 값 확인
Serial.print("Offset value :\t\t");
Serial.println(scale.get_offset());
Serial.print("Scale value :\t\t");
Serial.println(scale.get_scale());
// (read - offset) 값 확인 (scale 미적용)
Serial.print("(read - offset) value: \t");
Serial.println(scale.get_value());
delay(2000);
// 오프셋 및 스케일이 적용된 측정값 출력 (5회 측정 평균값)
Serial.print("value :\t");
Serial.print(scale.get_units(5), 2); // 5회 측정 평균값, 소수점 아래 2자리 출력
Serial.println(" g");
if (scale.is_ready()) {
long reading = scale.read();
Serial.print("HX711 reading: ");
Serial.println(reading);
} else {
Serial.println("HX711 not found.");
}
if (reading > 0.01) {
pixels.setPixelColor(6, pixels.Color(250, 240, 220));
pixels.show();
delay(DELAYVAL);
}
// 1초 대기
delay(1000);
}