Quantcast
Channel: AUTOMALABS
Viewing all articles
Browse latest Browse all 63

Módulo para leitura de células de carga HX711

$
0
0

modulo_hx711_DSC03192_640_automalabs.com.br

Datasheet do CI HX711

Se você precisa medir peso com o Arduino esse é o módulo geralmente requerido. Permite conectar até dois conjuntos de células de carga (duas balanças).

Trata-se essencialmente de um amplificador de instrumentação de duas entradas multiplexadas ligado a um conversor A/D de 24 bits o que permite uma resolução muito superior à que seria obtida ligando um amplificador de instrumentação diretamente a uma entrada analógica do Arduino, cujo conversor A/D é de 10 bits.

  • Alimentação de 2.7 a 5.5V;
  • Saída digital a dois fios;
  • Duas entradas multiplexadas. Você pode usar apenas a entrada A, se quiser;
  • Taxa de amostragem selecionável de 10 ou 80 amostras por segundo;
  • Ganho selecionável de 32, 64 e 128.

Este é o o diagrama / esquema do módulo:

hx711_module_diagram_2

É quase a mesma coisa que o diagrama típico apresentado no datasheet, com o acréscimo de C4, C5, C6, R8 e R9.

Note que existem duas referências de terra: GND e AGND

Como fazer a leitura

O valor do registrador de 24bits com o resultado da medição é lido serialmente dando 24 pulsos no pino SCK e coletando os bits no pino DT. Isso é realmente simples de fazer mesmo sem uma biblioteca, mas como elas existem vamos usá-las até porque torna o código mais fácil de entender.

A biblioteca de uso mais simples que conheço é a do chinês aguegu. Você precisa fornecer à biblioteca quatro informações:

  • qual o pino de clock;
  • qual o pino de dados;
  • o valor de offset;
  • o valor do ratio.

Você pode usar dois pinos quaisquer. A biblioteca usa nos exemplos os pinos A0 e A1 mas estes são usados no modo digital. Pinos analógicos não são requeridos.

O valor de offset é o valor que o HX711 fornece quando a balança está em repouso (seria o “zero” da balança). Para obtê-lo deixe a balança sem peso e rode o seguinte sketch:

#include "hx711.h"

Hx711 scale(A1, A0); //A1 = dout e A0=sclk

void setup() {

  Serial.begin(9600);

}

void loop() {

  Serial.print(scale.averageValue(1));
  delay(200);
}

Este é o valor do offset. É normal que seja um valor grande como 8447426. Note que esse valor é aproximadamente metade de 16777215 (o maior valor possível com 24 bits). Isso é esperado porque o hx711 também lê valores negativos. Agora coloque um peso conhecido na balança, como 1kg (1000g), e execute novamente o comando acima para obter o que a balança vê agora. Esse valor deve ser maior que o valor obtido de offset. Se não for, experimente inverter os fios S+ com S- e repita. Vamos chamar esse novo valor de “w”. Agora faça a seguinte conta:

ratio = (w - offset) / 1000

Agora preencha os valores obtidos no sketch abaixo:

#include "hx711.h"

Hx711 scale(A1, A0); //<- edite aqui

void setup() {
  Serial.begin(9600);
  scale.setOffset(offset); //<- edite aqui
  scale.setScale(ratio); //<- edite aqui
}

void loop() {
Serial.print(scale.averageValue(1));
Serial.print(" : "); &nbsp;
Serial.print(scale.getGram());
Serial.println('g');
  delay(200);
}

O programa de exemplo acima deverá agora dar o valor aproximado de qualquer peso medido, em gramas.

Nota: a biblioteca tem um bug que faz a execução ser muito lenta. Para corrigir, abra hx711.cpp e os exemplos e mude todas as referências a averageValue() para averageValue(1). Isso na prática anula a função averageValue, mas elimina o delay. É melhor você tirar sua própria média dos valores lidos no loop (sugiro uma média móvel) para evitar paradas desnecessárias na execução do programa.


Viewing all articles
Browse latest Browse all 63