로드셀 센서 재 질문
페이지 정보
작성자 나보라 작성일18-12-19 15:02 조회5,573회 댓글1건본문
안녕하세요. 지식in으로 시작하여 여기까지 재 질문을 남기게되었습니다.
처음 문제는 시간이 지남에 따라(대략1시간) 영점 조절을 한 로드셀 값이 점점 상승한다는것이었습니다. (0g -> 400g)
지식in에서 알려주신 코딩을 바탕으로 수정한 부분도 있지만 여전히 시간이 지남에 따라 (대략 1시간, 0g -> 200g) 영점이 계속 변하고 있습니다.
외부전원 12v/1A짜리도 넣어서 해봤습니다! 아두이노 우노+로드셀+hx711로 실험중이며, 결과값은 LCD로 확인합니다.
* 로드셀 센서에 적어도 6시간 동안은 전원을 넣고 (ON) 3,000ml의 물통에서 물이 빠져나가는 양을 실시간으로 측정하고싶습니다.
제가 사용중인 코드는 다음과 같습니다. 어느 부분을 수정할게 있을까요?
답변 항상 감사합니다!!
-----------------------------------------------------------------------------------------
#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define DOUT1 3
#define CLK1 2
HX711 scale1(DOUT1,CLK1);
#define DOUT2 7
#define CLK2 6
HX711 scale2(DOUT2,CLK2);
#define DOUT3 10
#define CLK3 9
HX711 scale3(DOUT3,CLK3);
//--------------------------------------------------------------------------
#define K -7050.0 // calibration_factor
//--------------------------------------------------------------------------
unsigned int cnt1=0,cnt2=0,cnt3=0;
float zero1=0,zero2=0,zero3=0;
float g1,sum1,buf1;
float g2,sum2,buf2;
float g3,sum3,buf3;
unsigned char SumCnt1=0,SumCnt2=0,SumCnt3=0;
//--------------------------------------------------------------------------
void setup()
{
Serial.begin(9600);
scale1.set_scale(K); scale2.set_scale(K); scale3.set_scale(K);
scale1.tare(); scale2.tare(); scale3.tare();
lcd.init(); // initialize the lcd
lcd.backlight(); // 라이트함수
lcd.begin(16,2);
}
//--------------------------------------------------------------------------
void loop(){
delay(100);//
buf1=scale1.get_units()*500;
sum1=buf1;// raw data 누적
if(++SumCnt1>=10)
{
cnt1=0; zero1=0;
g1= sum1/SumCnt1;
SumCnt1=0; sum1=0;
if((g1 <= 15) && (g1 >= -15))
{
if(++cnt1>=10)
{
cnt1=0;
zero1 =g1;
}
}
else
{
cnt1=0;
}
}
if(g1 >= zero1) g1=g1-zero1;
else g1 =zero1-g1;
//--------------------------------------------------------------------------
buf2 = scale2.get_units()*500;
sum2 = buf2;
if(++SumCnt2>=10)
{
cnt2=0; zero2=0;
g2= sum2/SumCnt2;
SumCnt2=0; sum2=0;
if((g2 <= 15) && (g2 >= -15))
{
if(++cnt2>=10)
{
cnt2 =0; zero2 =g2;
}
}
else{
cnt2=0;
}
}
if(g2 >= zero2) g2=g2-zero2;
else g2 =zero2-g2;
//---------------------------------------------
buf3=scale3.get_units()*500;
sum3=buf3;
if(++SumCnt3>=10)
{
cnt3=0; zero3=0;
g3= sum3/SumCnt3;
SumCnt3=0; sum3=0;
if((g3 <= 15) && (g3 >= -15))
{
if(++cnt3>=10)
cnt3=0;
zero3 =g3;
}
}
else
{
cnt3=0;
}
}
if(g3 >= zero3) g3=g3-zero3;
else g3 =zero3-g3;
//---------------------------------------------
float sum=g1+g2+g3;
//---------------------------------------------
lcd.clear();
lcd.setCursor(2,0);
lcd.print("keyes-scale");
lcd.setCursor(5, 1);
lcd.print(sum,0);
lcd.print("g");
}
댓글 : 1
조회수 : 5,573
master님의 댓글
master 작성일
체크 포인트를 알려드리죠
//
1.
온도계로 로드셀 주변 공기의 온도를 측정해보세요
온도에 따라서 값이 변할 수 있습니다.
2.
로드셀 인가전압이 변하는지 측정해보세요
3.
비접촉 온도계를 사용해서
로드셀 및 앰프 관련 부품에서 열이 발생하는지 측정해보세요
//
로드셀 측정값과 위 3가지(온도 및 전압) 측정값을 함께 적어서 표를 만들면 원인을 찾기 쉬워집니다.