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

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 incorporado 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:

O valor impresso na serial pelo sketch é o 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 sketch 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 para obter o ratio:

ratio = (w - offset) / 1000

E preencha os valores obtidos no sketch abaixo:

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 retardo. É 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.

Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *