Olá pessoal. Estou tentando construir uma balança que registre o peso ao longo do tempo, mas como sou bem iniciante na área de eletrônica e arduino, me deparei com algumas dúvidas sobre o funcionamento do módulo HX711 e os resultados lidos pela porta serial. 

Tentei representar a ligação que fiz na figura abaixo. 

Utilizei a biblioteca HX711 library for Arduino e com a função get_values(10) obtive a média de 10 leituras das células de carga e convertido pra peso pelo fator "calibration" e "offset". Esses parâmetros eu tinha pensado em tirar da curva de calibração, curva montada colocando e retirando pesos conhecidos e seu respectivo sinal elétrico. Eu tinha feito 5 ciclos de carga e descarga, na qual os sinais medidos estão plotados no gráfico a seguir. A ideia de realizar os ciclos seria para ter uma melhor calibração e também de verificar possíveis erros da célula de carga batem com as especificações da mesma (especificações das células de carga). 

Usando a média desses sinais elétricos divididos pela amplificação (células 1 a 3 liguei no canal A x128 e célula 4 no canal B x32 pois estava tendo muita flutuação de valor ao ligar a 4a célula no canal A) e  os pesos que geraram esses sinais, montei o seguinte gráfico. Utilizei a média  dos sinais (divididos pela amplificação). 

Em princípio estou conseguindo obter resultados razoáveis com a calibração feita, mas queria ter mais certeza sobre o que estou fazendo e as unidades obtidos nas leituras. 

Muito obrigado pela atenção e ajuda dada!

Exibições: 1114

Responder esta

Respostas a este tópico

Segue o sketch utilizado (além do offset ser 0, percebo que poderia ter utilizado a função "read_average()" ao invés do "get_units()" por não ter os parâmetros scale e offset). 

---------------------------

#include "HX711.h"

const int LC1_DOUT_PIN = 8;
const int LC1_SCK_PIN = 9;

const int LC2_DOUT_PIN = 6;
const int LC2_SCK_PIN = 7;

const int LC3_DOUT_PIN = 4;
const int LC3_SCK_PIN = 5;

const int LC4_DOUT_PIN = 2;
const int LC4_SCK_PIN = 3;


float calibration = 1;
float offset = 1;

HX711 balanca1;
HX711 balanca2;
HX711 balanca3;
HX711 balanca4;

unsigned long ult_tempo = 0;
unsigned long tempo = 0;

void setup() {
Serial.begin(38400);
Serial.println("Teste HX711");
Serial.println("Iniciando a balanca");
balanca1.begin(LC1_DOUT_PIN, LC1_SCK_PIN, 128);   
balanca1.set_scale (calibration);
balanca1.set_offset (offset);

balanca2.begin(LC2_DOUT_PIN, LC2_SCK_PIN, 128); 
balanca2.set_scale (calibration);
balanca2.set_offset (offset);

balanca3.begin(LC3_DOUT_PIN, LC3_SCK_PIN, 128);   
balanca3.set_scale (calibration);
balanca3.set_offset (offset);

balanca4.begin(LC4_DOUT_PIN, LC4_SCK_PIN, 32); 
balanca4.set_scale (calibration);
balanca4.set_offset (offset);
}

void loop() {
tempo = millis();
if(tempo - ult_tempo >= 2000){ 
  Serial.print("balanca1: ");
  Serial.println(balanca1.get_units(10));
  Serial.print(balanca2.get_units(10));
  Serial.print(" balanca3: ");
  Serial.print(balanca3.get_units(10));
  Serial.print(" balanca4: ");
  Serial.println(balanca4.get_units(10));
 ult_tempo = tempo;
}

}

Boa noite,

1) Você usa um módulo para cada HX711? Quais são as especificações de cada célula?

2) Como esão montadas essas céluas de carga? Numa mesma base?

3) Porque fez ligações diferentes (amplificação) para algumas células? Elas são diferentes? 

4) Você fez o ajuste de tara da balança? (zerar a balança) 

https://blog.eletrogate.com/balanca-digital-com-arduino-aprenda-a-u...

Boa noite, Sr. José Murta. Muito obrigado pela atenção!

Desculpa por não ter deixado claro isso no post. Vou responder os pontos que faltaram.

1- Estou utilizando um módulo para cada célula. Tinha adquirido dois módulos HX711 verdes e dois vermelhos (que em principio teriam blindagem e com isso entendi que deixariam os resultados menos suscetíveis a interferências). As células de carga são do tipo barra, com capacidade de até 50kg cada uma delas. O datasheet dele está neste link

2- As células estão montadas em uma base. Vou anexar uma foto da montagem.

3- Na verdade, como este é meu primeiro contato com arduino e componentes eletrônicos, acho que no 1o teste danifiquei o canal A+ e A- da 4a célula (tinha ligado o SCK e DT desse HX711 e percebi que fiz algo de errado quando a porta serial demorou em realizar o serial.print). Depois disso, mesmo com as ligações certas, colocando um peso, o valor lido não variava com os pesos colocados sobre a plataforma (ficava flutuando em torno de um valor). Resolvi usar os pinos B+ e B- dessa placa e a flutuação de valor parou.

4- Não fiz o ajuste nem do tara, nem do fator de calibração. Na verdade coloquei 1 em ambos e pretendia encontrar o peso em sinal elétrico e converter pra peso pela curva de calibração y = 0.0844x + 1477,2.  Só depois que percebi que podia usar a função read_average() para isso. E me parece que a tentativa de converter em mV apenas dividindo pelo ganho não está muito correto. 

No caso, achei um post do senhor (https://labdegaragem.com/forum/topics/medi-o-de-tens-o-em-milivolts...). Nesse post tem uma parte que explicas que o bit menos significativo (preciso entender isso ainda haha) é 305,175 nV. E que com um sinal de 1mV, amplificado por 128x e dividido pelo bit menos significativo, dá o "valor absoluto da medição do ADC". O valor que obtive nas leituras seria isso? 

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço