Manual

do

Maker

.

com

Como fazer uma balança com Arduino ou ESP32...

Como fazer uma balança com Arduino ou ESP32...

...ou com qualquer outra coisa. Fazer uma balança é algo fácil do ponto de vista de software, afinal, temos uma bela biblioteca pronta para isso. O grande problema é o conceito envolvido, dependendo do tipo de balança. Aqui veremos como fazer uma balança com célula de carga.

Já escrevi um artigo a respeito, mas tenho certeza que não ficou bom o suficiente, por causa das dúvidas que surgiram, então resolvi aprimorar.

Células de carga

A célula de carga é comumente utilizada para fazer uma balança qualquer, mas existem outras possibilidades, inclusive para dispositivos que receberão esforço constante, onde a célula de carga não é ideal.

O componente principal da célula de carga é chamado transdutor eletromecânico. Ele recebe uma deformação ou flexão e, a partir dessa ação física, ele gera uma saída de tensão ou corrente.

O material que recebe a deformação pode ser feito de diversos metais diferentes,  como aço inox, alumínio etc. Nesses corpos metálicos são posicionados de forma calculada o transdutor, que pode ter precisão centesimal.

As células de carga trabalham bem ainda que com variação de temperatura e umidade e podem medir de gramas à toneladas. Alguns tipos de sensores (como de pressão) utilizam um dispositivo piezoresistivo, que convertem a pressão aplicada por uma coluna em sinal elétrico.

Elas também são chamadas de strain gauge, traduzido como "medidor de pressão". Considerando a tradução, eu diria que está mais para o piezo do que para a célula de carga, mas é opinião pessoal, não a tome como uma verdade.

No caso de sensores de pressão, os extensômetros de filme espesso serigrafados tem alta sensibilidade e baixo custo, enquanto os extensômetros de geometria zig-zag são mais sensíveis a ruídos do que os de geometria retangular. O problema pode estar em como saber de que material o componente que estamos comprando é feito, uma vez que como consumidor final podemos, por vezes, ter o mínimo de informação técnica.

As células de carga de baixo custo tem como características:

  • 3 fios (equivalente a meia ponte - veremos mais adiante).
  • 1 resistor variável e 1 fixo.
  • facilmente encontradas.
  • 1 fio vermelho, 1 preto, 1 branco (não vi de outras cores)

Tipos de strain gauges

Os tipos principais são o semicondutorfolha metálicafilme espesso. O semicondutor  e filme espesso são piezoresistivos.

A folha metálica tem um processo diferente, sendo linhas metálicas em um material como papel ou plástico e sua sensibilidade é diretamente relacionada ao efeito geométrico do material base onde a célula é aplicada.

Ponte de Wheatstone

Uma ponte de Wheatstone é uma ponte resistiva utilizada para mensurar uma determinada resistência, feita com quatro resistores. Dois deles possuem resistência conhecida, um deles com resistência variável e o último, resistência desconhecida.

Ela é utilizada em diversos meios, como balanças e sensores de pressão, anteriormente citados - e por essa razão discorro sobre essa ponte agora.

A variação da resistência é realmente mínima, de modo que não conseguimos ler esses valores adequadamente conectando uma célula de carga a uma MCU.

Amplificador de instrumentação HX711

O valor aproximado de saída é de 1mV/kg. Desse modo, precisamos utilizar um amplificador de sinal, semelhante a um ampop. O mais comum utilizado é o HX711, que possui um conversor AD de 24 bits! Para ter uma ideia do quão representativa é essa resolução, o conversor AD de um Arduino é de 10 bits, equivalente a 1024 valores possíveis (0 à 1023). Com 24 bits temos uma resolução de 16.777.216 valores possíveis!

Ligação das células de carga

Apesar de provarmos o conceito da balança com Arduino, outros dois também foram testados, que são o ESP32 e o Raspberry. Na parte de conexão das células de carga com o HX711 não muda nada.

Para termos uma ponte completa, precisamos de 2 células de carga. Mas o projeto descrito aqui serve para balança de banheiro ou para mensurar cargas em carrinhos de mercado, ou saber quando uma pessoa está sentada em um banco de um ônibus de viagem, informando ao motorista a ocupação dos assentos, ou qualquer coisa que sua imaginação possa contemplar. Por isso, estou utilizando 4 células de carga.

A ligação não é das mais simples de explicar, portanto vamos por partes.

No HX711 temos os pinos E+E-A-A+. Vamos utilizar "apenas" esses quatro. Os fios que serão conectados ao HX711 são os fios vermelhos das células de carga.

Se possível, faça a conexão das células de carga sem utilizar jumpers. Os jumpers tem uma resistência variável e injetarão ruído no sinal.

  • Conecte o fio vermelho da célula 1 ao E-.
  • Conecte o fio vermelho da célula 2 ao A-.
  • Conecte o fio vermelho da célula 3 ao A+.
  • Conecte o fio vermelho da célula 4 ao E+.

celula_de_carga-fio_vermelho-300x169.webp

Parece meio "burro" definir o que é célula 1 ou célula N nesse momento, mas com certeza evitará enganos nas conexões. Agora vamos ao fio branco.

  • Conecte o fio branco da célula 1 ao fio branco da célula 2.
  • Conecte o fio branco da célula 3 ao fio branco da célula 4.

celula_de_carga-fio_branco.webp

Agora resta apenas o fio preto.

  • Conecte o fio preto da célula 1 ao fio preto da célula 3.
  • Conecte o fio preto da célula 2 ao fio preto da célula 4.

celula_de_carga-fio_preto.webp

Posição da célula de carga

A superfície (ou bandeja) à qual ficarão conectadas as células de carga deverão ter espaço livre para a flexão da parte central dessa célula. Isto é, não deve ser colocado sob um retângulo de madeira sólido, porque nesse caso a superfície será o limitador da flexão da célula de carga. Em suma: Faça um buraco na madeira para dar liberdade à parte central da célula de carga, caso deseje prendê-la diretamente à bandeja.

Como usar o HX711 para balança com Arduino

Concluímos a conexão das células de carga. Agora basta escolher a MCU pretendida e fazer as conexões conforme adequado. A começar pelo Arduino:

Do lado oposto aos fios advindos da célula de carga, temos no HX711 outros 4 pinos. Essas conexões com o Arduino UNO podem ser por exemplo:

HX711Arduino
GNDGND
DTD3
SCKD2
VCC5V

Biblioteca para HX711

Pelo gerenciador de bibliotecas do Arduino, procure por HX711 e instale-a.

Sketches para balança com Arduino

Não podemos fazer diretamente a leitura da balança com Arduino se não aferirmos a leitura primeiro, certo? Comece tirando o valor de offset da balança com Arduino, com o seguinte sketch:

#include "HX711.h"
#define DT_PIN 3
#define SCK_PIN 2
HX711 scale;
 
void setup() {
  scale.begin(DT_PIN,SCK_PIN);
  delay(1000);
  Serial.begin(9600);
}
 
void loop() {
  Serial.println(scale.read_average(1));
  delay(1000);
}

O valor resultante da medição será o offset. Não interprete como "tara da balança", porque a tara pode ser tirada com um elemento sobre a balança, como um pote receptor de grãos, por exemplo.

tare_sample.webp

Esse valor realmente deve ser grande; aproximadamente a metade da resolução total. Isso significa que podemos ler também valores negativos.

Poderíamos pegar o offset de forma automática, incluindo a função de tarear no setup. Após, coloque algo que tenha a massa confiável de 1kg e veja o resultado:

#include "hx711.h"
#define DT_PIN 3
#define SCK_PIN 2

int offset = 0;

Hx711 scale;
 
void setup() {
  scale.begin(DT_PIN,SCK_PIN);
  Serial.begin(9600);
  offset = scale.read_average(3);
}
 
void loop() {
  int kg = 0;
  kg     = scale.read_average(1) - offset;
  kg    /= 1000;
  Serial.println(kg);
  delay(1000);
}

Apenas para finalizar, qualquer uma das células de carga que passarem por flexão deve dar alguma alteração no resultado acima. Podemos testar apertando duas células de carga com os dedos, por exemplo (isso reduz o esforço físico, já que a carga será distribuída).

Como usar o HX711 com ESP32

datasheet do HX711 diz que ele opera entre 2.6 e 5.5V, portanto podemos utilizar tranquilamente o nível lógico do ESP32, que é 3v3.

Se estiver utilizando a API da IDE do Arduino, será transparente, bastando definir os pinos DTCLK.

Como usar o HX711 com Raspberry

Com Raspberry é um pouco diferente, mas chega a ser mais simples, pois o programa é feito em Python.

Wiring do HX711 com Raspberry

O wiring pode ser assim:

raspberry_and_hx711.webp

O lado da célula de carga permanece inalterado.

Programa para célula de carga no Raspberry

Primeiramente, clone o repositório do programa no Raspberry (fiz um fork):

git clone https://github.com/DjamesSuhanko/hx711py.git

Se não tiver o programa git instalado, faça-o:

sudo su
apt-get update && apt-get install -y git
exit

Agora entramos no diretório clonado:

python setup.py install

Para concluir a parte de configuração, preciso citar que configurando o ganho para 128 ou 64 o canal A da célula será utilizado. Usando 32 no ganho o canal B será selecionado.

Na biblioteca do Raspberry isso pode ser ajustado com set_gain(X), onde X é o valor. As funções para o respectivo canal procedem de sua identificação. Por exemplo, tare_Bget_value_B().

Eu gostaria de disponibilizar também o programa para pegar o valor graficamente, mas vou deixar para o próximo artigo porque esse já está demasiadamente longo.

Onde comprar células de carga e HX711?

Essas células de carga são absurdamente baratas, mas na Curto Circuito está por menos ainda; BEM menos. Menos que a metade da média, então aproveite correndo clicando nesse link.

Não na mesma proporção, mas também bem mais barato, você encontrará o HX711. Esse é um pouco mais moderno, o resistores já são menores, então é um modelo que vale a pena pegar, através desse link.

Vídeo

Não fiz vídeo porque nesse caso não teria muita graça, mas o próximo artigo disponibilizo um programa em Qt (que roda em Windows e Linux X86, além do Raspberry). Aí já gravo o vídeo, mostrando como ficou.

Vou usar o mesmo projeto da comparação de temperatura entre  RPi3 e RPi4, desse outro vídeo, mas adaptado para peso invés de temperatura.

Aproveite e se inscreva no canal, caso não seja inscrito. E seu like vale ouro!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.