Как откалибровать тензодатчик?
Я работаю с тензодатчиком и HX711. На датчике не было веса, но я продолжал получать странные значения, я думал, что он сломан или что-то в этом роде, поэтому я использовал свой второй тензодатчик, но то же самое произошло снова. Мне интересно, что в этом плохого? Если кто-то работал с этим или у вас есть идеи, как с этим работать, пожалуйста, не стесняйтесь высказывать свое мнение.
#include "HX711.h"
#include <Wire.h>
#define DOUT A0
#define CLK A1
#define DEC_POINT 2
#define STABLE 1
float offset=0;
float calibration_factor = 1;
//float real_weight = 1.560;//kg
float real_weight = 0.5;//kg
HX711 scale(DOUT, CLK);
unsigned char state=0;
long FindZeroFactor();
float get_units_kg();
void ReadWeight();
void FindCalibrationFactor();
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("Auto Calibrate Program");
Serial.println("Send 'a' to Find Zero Factor (Please Remove all weight from scale)");
Serial.println("Send 'b' to Find Calibration Factor (Please insert know the weight on the scales)");
Serial.println("Send 'c' Show weight on the scales");
}
void loop()
{
if(Serial.available())
{
char temp = Serial.read();
if(temp=='a')
state=1;
if(temp=='b')
state=2;
if(temp=='c')
state=3;
}
switch(state)
{
case 0:
break;
case 1:
FindZeroFactor();
// ReadWeight();
state=0;
break;
case 2:
FindCalibrationFactor();
state=0;
break;
case 3:
ReadWeight();
delay(200);
break;
case 4:
break;
}
}
long FindZeroFactor()
{
Serial.println("Find Zero Factor");
Serial.println("Please wait .....");
scale.set_scale();
scale.tare();
long zero_factor = scale.read_average(20);
Serial.print("Zero factor: ");
Serial.println(zero_factor);
return(zero_factor);
}
void FindCalibrationFactor()
{
unsigned char flag_stable=0;
unsigned int decpoint=1;
for(unsigned char i=0;i<DEC_POINT+1;i++ )
decpoint = decpoint*10;
while(1)
{
scale.set_scale(calibration_factor); //Adjust to this calibration factor
Serial.print("Reading: ");
float read_weight = get_units_kg();
String data = String(read_weight, DEC_POINT);
Serial.print(data);
Serial.print(" kg");
Serial.print(" calibration_factor: ");
Serial.print(calibration_factor);
Serial.println();
long r_weight = (real_weight*decpoint);
long int_read_weight = read_weight*decpoint;
Serial.print(r_weight);
Serial.print(" , ");
Serial.println(int_read_weight);
long x;
if(r_weight == int_read_weight)
{
flag_stable++;
if(flag_stable>=STABLE)
{
Serial.print("Calibration Factor is = ");
Serial.println(calibration_factor);
break;
}
}
if(r_weight > int_read_weight)
{
x = r_weight - int_read_weight;
if(x > 100)
calibration_factor -= 1000;
else if(x > 100)
calibration_factor -= 10;
else
calibration_factor -= 1;
flag_stable=0;
}
if(r_weight < int_read_weight)
{
x = int_read_weight-r_weight;
if(x > 100)
calibration_factor += 1000;
else if(x > 10)
calibration_factor += 10;
else
calibration_factor += 1;
flag_stable=0;
}
}
}
float get_units_kg()
{
return(scale.get_units()*0.453592);
}
void ReadWeight()
{
scale.set_scale(calibration_factor); //Adjust to this calibration factor
Serial.print("Reading: ");
String data = String(get_units_kg()+offset, DEC_POINT);
Serial.print(data);
Serial.println(" kg");
}
@geniusme, 👍1
2 ответа
scale.set_scale(calibration_factor);
необходимо изменить на:
scale.set_scale(calibration_factor/[the reference weight you have used]);
Первое, что всегда приходит мне на ум в отношении тензодатчиков, это схема, которая усиливает сигнал тензодатчика. Обычно сигнал тензодатчика изменяется в диапазоне низких мВ, поэтому вам приходится размещать схему с высоким коэффициентом усиления на пути сигнала, которая усиливает сигнал и ШУМ. Для этой цели вам придется использовать инструментальный усилитель, иначе ваш сигнал станет очень шумным.
И попробуйте также реализовать цифровой фильтр нижних частот, он должен компенсировать колебания и даст вам более плавный сигнал.
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Получение BPM из данного кода
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
- Как подключить более 10 датчиков к Arduino uno r3
- Как использовать два ультразвуковых датчика для управления двигателем 5 Вольт?
- Чтение датчика давления от 4 до 20 мА с использованием uno
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?