Componentes Eletronicos

Balança Digital com Arduino e Célula Strain Gauge

Eletrogate 11 de novembro de 201710 min

Introdução

Hoje vamos falar de um sensor muito útil e prático de ser integrado com aplicações com Arduino. As células de carga baseadas em Strain Gauges, são os elementos sensores utilizados em balanças digitais de vários tipos. A célula do modelo que vamos usar é capaz de medir até 50Kg. Para balanças com maior capacidade pode-se utilizar um número maior de sensores. Neste artigo vamos explicar o que são os sensores Strain Gauges e vamos usar uma célula de carga para medir peso de objetos de até 50Kg e apresentar o resultado em um display LCD.

O sensor de carga que vamos usar é um strain Gauge, um dos vários tipos de sensores que podem ser usados para medir peso. É possível utilizar vários sensores de carga simultaneamente para aumentar a capacidade. A nossa célula de carga é um sensor de meia ponte, ou seja, utiliza uma meia-ponte de Wheatstone com uma resistência de referência e um elemento sensor cuja resistência varia conforme a pressão aplicada. Veja a imagem abaixo.

Em geral, são usadas pelo menos duas células de carga, uma para medir compressão e outra para medir tensão (forças aplicadas em direções diferentes). Com duas células de carga, tem-se uma ponte de Wheatstone completa. Para usar apenas uma célula de carga, é necessário completar a ponte com outros dois resistores.

Como funciona um sensor Strain Gauge

O princípio de funcionamento de um Strain Gauge é a mudança na resistência elétrica do sensor proporcional a uma determinada pressão ou força aplicada a ele(daí o nome “Strain”). O sensor Strain Gauge mais comum é feito com fios muito pequenos organizados em um determinado padrão(geralmente em forma de uma ponte de resistência) de forma que quando é aplicado uma força em uma determinada direção, causando uma deformação na disposição dos fios, a resistência varia proporcionalmente.

A sensibilidade de cada sensor e modelo é bem diferente, e geralmente é expressa pelo chamado Gauge Factor(GF). Este é definido como a razão entre uma mudança na resistência elétrica em relação a uma mudança no comprimento(dimensões físicas) provocada por uma força externa.

A grande dificuldade desses sensores é que as deformações provocadas pela aplicação de uma força ou pressão externa são muito pequenas, provocando variações na escala de décimos de ohms. Devido à essas variações de ordem muito pequena, é necessário usar um segundo componente, que é um amplificador de sinais. Existem modelos comerciais específicos para trabalhar com Strain Gauges. Neste artigo vamos usar o amplificador HX711 (mais informações na próxima sessão).

Além dos sensores baseados em strain Gauges, existem também sensores de carga pneumáticos e hidráulicos. Para trabalhar com Arduino e pequenos projetos eletrônicos, o sensor Strain Gauge, que é baseado na variação da resistência elétrica é o mais indicado. Para conhecer um pouco sobre os demais tipos de sensores, veja esse excelente artigo. Para uma rápida introdução em vídeo(em inglês), acesse este link.

A célula de carga que vamos usar possui as seguintes especificações:

  • Dimensões (mm): 28 * 28 * 8;
  • Capacidade (Kg): 50;
  • Margem de erro: 0.2%;
  • Tensão de excitação (V): 5 ~ 10;

Trata-se de um sensor ativo, ou seja, ele é alimentado com um sinal de excitação externo. A saída do sensor é em Volts. Como você deve imaginar, devido á pequena variação na resistência do elemento sensor, a variação na tensão de saída também é muito pequena. Esse sinal de tensão de saída é o que vamos conectar ao amplificador HX711.

Conversor HX711

O Módulo conversor e amplificador HX711 de 24 bits é utilizado para amplificar o sinal de dispositivos como as células de carga, fazendo a interligação entre essas células e o microcontrolador. Recomendamos a leitura do datasheet.

Especificações:

  • Tensão de operação: 4,8 à 5,5V DC;
  • Corrente de operação: 1,6mA;
  • Temperatura de operação: -20 à 85°C;
  • Interface SPI;
  • Dimensões: 29 x 17 x 4mm (sem os pinos)

O módulo é mostrado na imagem abaixo:

Amplificador para célula de carga

Amplificador para célula de carga

O módulo é fabricado pela Avia Semiconductors e seu conversor AD tem precisão de 24 bits. O módulo foi desenhado para interfacear diretamente com sensores em ponte para aplicações de medição de carga. O multiplexador de entrada seleciona entre dois canais diferenciais A e B. Cada canal diferencial pode ser ligado em até duas células de carga(A+ e A- e B+ e B-, cada qual ligado na saída de uma célula de carga em meia ponte).


Aplicações

Células de carga são usadas em aplicações comerciais e industriais para medição de peso/carga em geral.

  • Balanças digitais;
  • Identificação de limites de carga;
  • Pesagem de objetos;
  • Qualquer aplicação para a qual seja necessário fazer medição de carga;

Descrição do projeto

Nosso projeto de exemplo será o seguinte:

Usar duas células de carga para fazer a pesagem de objetos e mostrar na porta serial.


Aspectos de Hardware

Importante ressaltar o padrão de cores usados nessa célula. Como indicado na imagem, o fio vermelho, que usualmente é usado para VCC, é na verdade o sinal de saída (ligado ao pino A- do HX711). E o fio no qual o VCC deve ser ligado é o fio branco. Recomendamos que você faça a medição das resistências entre os fios da célula para saber qual é qual. Os fios que derem uma leitura de 2K são os que devem ser conectados à E+ e E- (geralmente, o fio branco(E+) e preto(E-) ). O fio no qual você obter leituras de 1K é o que deve ser conectado ao A+ (geralmente é o fio vermelho). Assim, o pino A+ d HX711 será ligado ao ponto comum entre os dois resistores de 1K.

As células de carga geralmente são usadas em grupos de quatro, em que cada célula é colocada em uma parte da balança. Podem ser usadas em grupos de dois também, em que cada célula é um dos “braços” da ponte de Wheatstone (é o caso em questão). Há também exemplos em que uma das células é substituída por dois resistores de 1k(nesse caso tem que ser resistores de precisão). Outra opção para fazer medições com apenas uma célula de carga é completar a ponte de Wheatstone com um resistor de 1K mais um trimpot. É importante que as resistências sejam o mais próximo possível, de forma que resistores tradicionais com 5% de tolerância não são uma boa ideia. Usar um trimpot multivoltas ou resistores de matafilm de 1% de tolerância é mais adequado.

Nas referências ao final do artigo deixamos algumas dessas montagens como indicação.

A montagem fica mais clara na montagem abaixo:

Circuito com células de carga

Circuito com células de carga. Fonte: Connect HX711 to a three wire load cell

Na imagem acima vemos uma ponte de resistência completa. De cada lado usaremos uma célula de carga. Cada célula possui resistência ativa(elemento sensor). Vale notar que, para fins práticos, basta conectar o fio preto de uma célula no fio branco da outra, e cada fio vermelho fica sendo os sinais A+ e A-.

Para facilitar a montagem em Protoboard, pinos podem ser  soldados nas extremidades dos fios das células de carga. Veja que o ponto de apoio da superfície da balança deve ser na seta preta (parte superior da célula). A parte inferior da célula deve estar sobre  uma base plana também.

Célula de Carga 50 Kg – Foto Gustavo Murta                                

A parte inferior da célula deve ser suspendida , pois senão os pinos que prendem o transdutor impedirão a flexão do sensor. Nesse caso, usei velcros adesivos recortados para prender na parte inferior.

Base com suspensão – Foto Gustavo Murta

Materiais necessários para o projeto Balança Digital com Arduino e Célula Strain Gauge

cta_cart

A ligação com o HX711 e o Arduino é mostrada abaixo:

Celula de carga com Arduino

Célula de carga com Arduino

Recomendamos que utilizem principalmente o diagrama de circuito como referência, por ele explicitar as resistências internas das células e ser um desenho mais limpo.


Aspectos de Software (revisado por Gustavo Murta)

Para nossos Sketches vamos usar a biblioteca HX711.h, que pode ser baixada neste link.

Primeiro passo é a calibração das células de carga. Usando a montagem com as duas células de 50 Kg, rode o programa de calibração abaixo. Na minha montagem , o fator de calibração foi de 42130 (para pesagem em kilogramas). Por isso, esse valor foi inserido no programa. Após a calibração, anote o valor aferido do Fator de Calibração para  ser inserido nos seus programas de Balança com o HX711.

Passos para Calibração :

  1. Remova qualquer peso sobre as células de carga,
  2. Após a balança for zerada pelo programa, coloque um peso conhecido sobre a célula de carga,
  3. Pressione as teclas a,s,d,f para aumentar o Fator de Calibração por 10,100,1000,10000 respectivamente ou
  4. Pressione as teclas z,x,c,v para diminuir Fator de Calibração por 10,100,1000,10000 respectivamente,
  5. Pressione ENTER após digitar a letra,
  6. Repita os passos 3 a 5, até o peso medido corresponder ao peso conhecido,
  7. Remova o peso novamente, e zere a Balança (digite t + ENTER para zerar),
  8. Coloque o  peso novamente e repita os passos 3 até 6 para refazer a calibração.

Cada célula de carga poderá ter um valor diferente para o fator de calibração . Se algum peso medido estiver dando valor negativo, inverta os fios dos pinos A+ e A-.

Se a sua balança permite o uso das duas células ao mesmo tempo, faça o procedimento de calibração com as duas células montadas por baixo da base da balança.

Quando a balança estiver com uma precisão adequada, pare o procedimento e anote o valor do Fator de Calibração. Refaça o processo de calibração com outros pesos conhecidos, se achar necessário.

/* Programa para Calibração do HX711
  Blog Eletrogate - https://blog.eletrogate.com/balanca-digital-com-arduino-aprenda-a-usar-a-celula-de-carga
  Arduino UNO - IDE 1.8.5 - Modulo HX711 - celulas de Carga 50 Kg
  Gustavo Murta   17/abril/2019
  Biblioteca https://github.com/bogde/HX711
  Baseado em https://www.hackster.io/MOHAN_CHANDALURU/hx711-load-cell-amplifier-interface-with-arduino-fa47f3
*/

#include "HX711.h"                    // Biblioteca HX711 

#define DOUT  A0                      // HX711 DATA OUT = pino A0 do Arduino 
#define CLK  A1                       // HX711 SCK IN = pino A1 do Arduino 

HX711 balanca;          // define instancia balança HX711

float calibration_factor = 42130;     // fator de calibração para teste inicial

void setup()
{
  Serial.begin(9600);            // monitor serial 9600 Bps
  balanca.begin(DOUT, CLK);      // inicializa a balança
  Serial.println();              // salta uma linha
  Serial.println("HX711 - Calibracao da Balança");                 // imprime no monitor serial
  Serial.println("Remova o peso da balanca");
  Serial.println("Depois que as leituras começarem, coloque um peso conhecido sobre a Balança");
  Serial.println("Pressione a,s,d,f para aumentar Fator de Calibração por 10,100,1000,10000 respectivamente");
  Serial.println("Pressione z,x,c,v para diminuir Fator de Calibração por 10,100,1000,10000 respectivamente");
  Serial.println("Após leitura correta do peso, pressione t para TARA(zerar) ");

  balanca.set_scale();                                             // configura a escala da Balança
  zeraBalanca ();                                                  // zera a Balança
}

void zeraBalanca ()
{
  Serial.println();                                               // salta uma linha
  balanca.tare();                                                 // zera a Balança
  Serial.println("Balança Zerada ");
}

void loop()
{
  balanca.set_scale(calibration_factor);                     // ajusta fator de calibração
  Serial.print("Peso: ");                                    // imprime no monitor serial
  Serial.print(balanca.get_units(), 3);                      // imprime peso da balança com 3 casas decimais
  Serial.print(" kg");
  Serial.print("      Fator de Calibração: ");               // imprime no monitor serial
  Serial.println(calibration_factor);                        // imprime fator de calibração
  delay(500) ;                                               // atraso de 0,5 segundo

  if (Serial.available())                                    // reconhece letra para ajuste do fator de calibração
  {
    char temp = Serial.read();
    if (temp == '+' || temp == 'a')                // a = aumenta 10
      calibration_factor += 10;
    else if (temp == '-' || temp == 'z')           // z = diminui 10
      calibration_factor -= 10;
    else if (temp == 's')                          // s = aumenta 100
      calibration_factor += 100;
    else if (temp == 'x')                          // x = diminui 100
      calibration_factor -= 100;
    else if (temp == 'd')                          // d = aumenta 1000
      calibration_factor += 1000;
    else if (temp == 'c')                          // c = diminui 1000
      calibration_factor -= 1000;
    else if (temp == 'f')                          // f = aumenta 10000
      calibration_factor += 10000;
    else if (temp == 'v')                          // v = dimuni 10000
      calibration_factor -= 10000;
    else if (temp == 't') zeraBalanca ();          // t = zera a Balança
  }
}

Janela do monitor serial da Arduino IDE , com o procedimento de Calibração :

Após a Calibração das células de Carga, agora poderá rodar o programa da Balança.

Altere o valor do Fator de calibração no Programa Arduino HX711 Balança (insira o valor encontrado no procedimento de Calibração).

float calibration_factor = 42130; // fator de calibração aferido na Calibraçao

Remova qualquer peso sobre as células de carga, e pressione T para zerar a Balança.
Insira o peso na Balança e verifique o peso.

/* Programa para Balança com o HX711
  Blog Eletrogate - https://blog.eletrogate.com/balanca-digital-com-arduino-aprenda-a-usar-a-celula-de-carga
  Arduino UNO - IDE 1.8.5 - Modulo HX711 - celulas de Carga 50 Kg
  Gustavo Murta   17/abril/2019
  Biblioteca https://github.com/bogde/HX711
  Baseado em https://www.hackster.io/MOHAN_CHANDALURU/hx711-load-cell-amplifier-interface-with-arduino-fa47f3
*/

#include "HX711.h"                    // Biblioteca HX711 

#define DOUT  A0                      // HX711 DATA OUT = pino A0 do Arduino 
#define CLK  A1                       // HX711 SCK IN = pino A1 do Arduino 

HX711 balanca;                        // define instancia balança HX711

float calibration_factor = 42130;     // fator de calibração aferido na Calibraçao 

void setup()
{
  Serial.begin(9600);
  balanca.begin(DOUT, CLK);                          // inicializa a balança
  Serial.println("Balança com HX711 - celula de carga 50 Kg");            
  Serial.println("Pressione t para Tara");           // imprime no monitor serial
  balanca.set_scale(calibration_factor);             // ajusta fator de calibração
  balanca.tare();                                    // zera a Balança
}

void loop()
{
  Serial.print("Peso: ");                            // imprime no monitor serial
  Serial.print(balanca.get_units(), 3);              // imprime peso na balança com 3 casas decimais 
  Serial.println(" kg");                             // imprime no monitor serial 
  delay(500) ;                                       // atraso de 0,5 segundos 
  if (Serial.available())                            // se a serial estiver disponivel
  {
    char temp = Serial.read();                       // le carcter da serial 
    if (temp == 't' || temp == 'T')                  // se pressionar t ou T
    {
      balanca.tare();                                // zera a balança
      Serial.println(" Balança zerada");             // imprime no monitor serial
    }
  }
}

Janela do monitor serial da Arduino IDE , com o programa da Balança HX711  ( peso = 1,250 Kg) :

Um acréscimo interessante de ser feito é substituir a porta serial por um display LCD. Assim, as leituras da balança serão apresentadas diretamente no LCD, dispensando o uso do computador para usar o monitor serial. Para incluir a interface com o display LCD, leia esse artigo aqui no Blog e aprenda a integrar displays LCD em seus projetos com Arduino.

Devido a ruídos nas ligações com protoboard e da célula de carga, algumas leituras podem apresentar variações fora da curva. No entanto, as medições tendem a se manter em torno de um valor de referência. Um ponto importante  para a qualidade das medições é a forma como as células de carga são montadas  na balança.

O ideal é usar uma superfície plana sobre as células de carga de forma aplicar o peso todo nas células. A estrutura mecânica que você utilizar para acomodar os pesos pode fazer as leituras variarem um pouco. Fique atento a esse ponto.

Com o circuito montado, basta rodar no PC. Não faça fios muito grandes para conectar as células de carga para diminuir as interferências.

Células de carga montadas com Arduino

Células de carga montadas com Arduino


Considerações finais

Nossa recomendação final é que você utilize pelo menos duas células de carga e faça a ponte de wheatstone completa. Muitos exemplos encontrados que utilizam apenas uma célula de carga tiveram muitas dificuldades até conseguir leituras que façam sentido. Reforçamos a sugestão para visitar o post sobre display LCD e incorporar esse elemento ao seu projeto de balança.

Qualquer dúvida, correção ou sugestão, deixe um comentário!


Sobre o Autor


Vitor Vidal

Engenheiro eletricista, mestrando em eng. elétrica e apaixonado por eletrônica, literatura, tecnologia e ciência. Divide o tempo entre pesquisas na área de sistemas de controle, desenvolvimento de projetos eletrônicos e sua estante de livros.


Eletrogate

11 de novembro de 2017

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!