SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

Criando uma Balança com o Arduino



Introdução

Balanças estão presentes em diversas ocasiões em nosso dia, seja para comprar pão com uma regulação fina para medir até mesmo miligramas (mg), ou até mesmo para a pesagem de caminhões que ficam na beira das estradas, com uma variação bem mais robusta para a pesagem de toneladas. Elas nos informam o quanto devemos pagar por produtos, quantos quilos nossos corpos pesam, ou até mesmo para a aplicação da lei, impedindo que caminhões com sobrecarga rodem nas rodovias federais, por exemplo.

Embora uma balança seja muito utilizada, e em alguns casos indispensável, seu custo é elevado por uma série de fatores, seja pela precisão, pela calibragem, ou até mesmo pelo peso máximo suportado. Neste tutorial você vai aprender em poucos passos como fazer uma balança capaz de suportar até 50 kg, além de entender como é feita a calibragem por software.

Lista de Materiais

Conceitos Teóricos

Amplificador Operacional

O módulo HX711 utilizado neste tutorial é um conversor analógico-digital e amplificador operacional de 24 bits. Ele é usado para amplificar o sinal da célula de carga de 50 kg, além de realizar a conversão do sinal analógico para um sinal digital. Isso é necessário, pois o sinal de saída da célula está na escala de milivolts (mV). Portanto para que seja um sinal que possa ser lido pelo microcontrolador, ele precisa ser amplificado para o nível adequado da placa utilizada.

Um amplificador operacional geralmente possui uma entrada variável e uma entrada constante, e então ele retorna como saída a diferença das tensões, de acordo com o ganho do amplificador. Essa matemática pode ser expressa através de Vout = A * [ (V+) - (V-) ], onde o ganho "A" costuma ser fornecido como um valor fixo pelo fabricante para o desenvolvimento do circuito.

amplificador operacional
Amplificador Operacional
Fonte: Wikipedia

Os pinos "Vs+" e "Vs-" são responsáveis pela alimentação positiva e negativa, respectivamente, do amplificador.

Funcionamento da Célula de Carga

Células de carga possuem um funcionamento parecido, em relação à variação de resistência, com potenciômetros, pois elas possuem extensômetros que se deformam de acordo com a carga aplicada sobre sua área de contato. Essa deformação faz com que sua resistência aumente. Entretanto existem alguns fatores que podem influenciar na variação ôhmica do extensômetro, como pode ser visto abaixo.

curva deformacao carga
Curva da Deformação pela Carga
Fonte: Portal Célula de Carga

Em um mundo ideal, o gráfico da diferença de potencial em relação à carga aplicada em uma célula de carga seria uma reta. A linearidade é um erro representado pela diferença entre a curva real de resposta da célula quando aplicado um peso sobre sua área de contato, quando comparado com a curva ideal de expectativa teórica. A histerese também é um fenômeno comum quando testamos relações teóricas na prática. Como é possível ver na imagem acima, a curva desta relação acaba se deslocando para cima ou para baixo durante a aplicação ou a remoção de peso na célula. Ou seja, ao aplicar um peso de um quilo à célula sem carga, por exemplo, teríamos como resposta um valor diferente do que se removermos um quilo da mesma célula já carregada com dois quilos. A repetibilidade é a capacidade da célula de carga em retornar o mesmo valor quando aplicado o exato mesmo peso sobre o sensor, portanto ela deve ser levada em conta na hora de escolha do sensor adequado para realizar uma certa aplicação. A fluência é a perda de característica de transdutor (componente que transforma uma grandeza física, neste caso o peso em um sinal elétrico) do material, causando uma variação inesperada no sinal elétrico de saída. O erro combinado da curva acima é um erro calculado a partir de dois ou mais erros citados anteriormente. Todos esses fatores de distúrbio do componente devem ser levados em conta durante a calibração.

Ponte de Wheatstone

A ponte de Wheatstone é, se não o único, o método mais utilizado para realizar medições sobre a variação da célula de carga. Com ela é possível identificar valores de resistência ôhmica desconhecida. Ela é utilizada para determinar resistências muito pequenas, podendo ser utilizada para medir uma escala de mili-ohms. O circuito da ponte nada mais é do que duas disposições série-paralelo de dois resistores, preferencialmente de mesmo valor. Com o valor igualado em todos os resistores da ponte, a diferença de potencial no centro da ponte quando medido entre as disposições de resistores deve ser igual a zero. A imagem abaixo mostra um exemplo do circuito da ponte de Wheatstone.

ponte de wheatstone
Ponte de Wheatstone
Fonte: Electronics Tutorials

Para a ponte de Wheatstone, a fórmula matemática para calcular as resistências necessárias para o valor Vout ser igual a zero é Vout = Vc - Vd = [ R2 / ( R1 + R2 ) ] * Vin - [ R4 / ( R3 + R4 ) ] * Vin. Nessa condição, pode-se usar a relação entre os resistores R1 / R2 = R3 / R4. Assim é possível calibrar manualmente a tensão de saída da ponte, já que ao variar uma das resistências, o valor será alterado. Para realizar uma calibragem de hardware através das resistência, é necessário substituir um dos resistores de cada lado da ponte, por exemplo R1 e R3, então alimentar a ponte com 5 V e GND nos pontos "A" e "B", respectivamente, como pode ser visto na imagem acima. Então, com um multímetro, variar os potenciômetros para que o valor lido entre os pontos "C" e "D" seja igual a zero.

Calibração Via Software

Circuito

O circuito a seguir utiliza o módulo HX711 para realizar a comparação entre as tensões de entrada do circuito (excitações), com os pinos "E+" e "E-", e a tensão de entrada do amplificador operacional, com os pinos "A-" e "A+". Observe a montagem na imagem abaixo.

calibracao-software
Circuito Calibração via Software

A calibração será feita por um fator que será calculado com o valor retornado pelo módulo HX711, para converter o valor lido para uma unidade de peso (neste caso, utilizaremos a medida em quilogramas).

Código

Para esse tutorial, você precisa instalar a biblioteca criada por "bogde" para o módulo HX711. Para instalar uma biblioteca, siga o tutorial Adicionando Bibliotecas na IDE Arduino. Com o circuito acima montado, carregue o código a seguir para a sua placa para realizar a calibração via software.

Este código foi desenvolvido para que, durante as leituras de peso do circuito, o fator de calibração possa ser alterado para obter um ajuste fino sobre um peso já conhecido. Ou seja, é recomendado utilizar uma balança digital já funcionando para obter o peso do objeto a ser pesado, para que, com os comandos, o fator seja alterado de modo a obter com perfeição o peso através da calibração. Infelizmente a resolução desta célula de carga é de 100 g, portanto o valor variável dessa célula será informado de 100 em 100 g, tendo esse valor como leitura mínima.

Entendendo o Código

O código é criado a partir da biblioteca disponibilizada pelo usuário do GitHub "bogde", portanto os comandos que serão explicados são os comandos específicos da biblioteca. O comando escala.begin(PINO_DT, PINO_SCK) inicia a definição dos pinos PINO_DT e PINO_SCK como portas que serão utilizadas pelo objeto escala, definida em função da biblioteca HX711 no comando HX711 escala.

A função escala.read_average() realiza uma média em função de dez leituras, e utilizamos esse comando para imprimir no monitor serial uma média de leituras em valores brutos, sem a conversão para a unidade de quilogramas. Na linha em que a função está sendo usada, o valor retornado equivale à tensão para a célula sem carga, ou seja, no zero de uma balança. escala.tare() zera a escala utilizada pela biblioteca para leitura de peso em função de dez leituras, da mesma maneira que restaurantes por quilo zeram a balança com um prato em cima para não influenciar no peso da comida, que é proporcional ao quanto será pago.

O fator de calibração é relacionado ao código com o comando escala.set_scale(fator_calibracao). Com ele, a escala é regulada de acordo com o fator de calibração que poderá ser alterado com o bloco de comandos switch - case. Neste código estamos utilizando oito casos com oito ações diferentes para a alteração do valor do fator de calibração. Para realizar essa alteração, basta, com o monitor serial aberto, enviar um dos seguintes comandos: "x","c", "v", "b","n" e "m". Eles representam, respectivamente, uma alteração de "-100", "+100", "-10", "+10", "-1" e "+1" ao fator de calibração. Outro método de alterar o fator de calibração é digitando um valor conhecido para fator_calibracao antes de carregar o programa para a placa. Esse valor de calibração será utilizado para o projeto final, portanto é importante guardar o valor desse fator para não ter que repetir o processo de calibração via software novamente. Da mesma maneira que a calibração manual é díficil de se acertar com precisão, a calibração via software também tende a ser bem complicada e pode levar um certo tempo para chegar ao resultado desejado. Porém não é impossível, então não desista e continue tentando.

Projeto Balança Digital

Circuito

Aproveitando o circuito utilizado para a calibração via software, iremos acrescentar um display LCD, com um módulo I2C para facilitar a prototipagem e diminuir o número de portas utilizadas, para mostrar o peso que está sendo aplicado na área de contato da célula de carga. O circuito completo pode ser visto na imagem abaixo.

balanca digital
Circuito Balança Digital

Como é possível observar na imagem acima, mantivemos o circuito utilizado anteriormente para realizar a calibração via software, porém incluímos o display LCD com módulo I2C para simular uma balança digital. Neste exemplo será possível apresentar pelo display o peso medido pela célula em quilogramas.

Código

Com o circuito acima montado, copie e cole o código abaixo para a Arduino IDE e carregue ele para a placa. Vale lembrar que o valor do fator de calibração encontrado durante a calibração via software deve ser alterado.

Diferentemente do código de calibração, este código possui menos comandos relacionados à biblioteca "HX711", porém utiliza comandos da biblioteca LiquidCrystal I2C. Este código utiliza as leituras da célula de carga para mostrar o peso lido no display LCD.

Indo Além

A maioria das balanças não utiliza apenas uma célula de carga para realizar medição de peso, e sim duas a mais células, podendo chegar a até quatro células de carga. Já pensou como seria o circuito da ponte de Wheatstone para esse projeto? Parece ser difícil, não é mesmo? Por incrível que pareça, utilizar mais de uma célula de carga não só facilita a montagem do circuito, como facilita a calibração, já que se trata da mesma variação em todas os componentes, não tendo uma resistência fixa em um dos lados do circuito como utilizamos neste tutorial. Caso você queira dar uma olhada sobre como fazer essa projeto com o mesmo módulo HX-711, você pode acessar esse tutorial criado por um usuário do Instructables.

Além disso, já pensou como é realizada a calibração manual de circuitos de células de cargas? É possível entender o conceito de uma calibração utilizando leituras das porta analógicas de uma BlackBoard UNO. Embora, devido à resolução de leituras analógicas da plataforma Arduino, não seja um método eficiente para realizar a calibração manual do circuito, é o suficiente para se entender o conceito.

Avatar


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


gabriel_get
date Enviado: 2021-06-10 17:08:09
Boa tarde, estou implementando uma balança com 4 sensores, utilizei o esquema que vi em todos locais, porém as minhas medições variam muito, por exemplo, se vou medir 2Kg, faço a calibração, quando coloco na balança tenho os 2 Kg, porem depois disto ela se perde indo para outros valores. Saberia o que pode ser?

Giovanni5
date Enviado: 2021-06-10 17:22:46
gabriel_get
Provavelmente a calibração por software não é o suficiente para o seu projeto, e você terá que fazer uma calibração fina no seu circuito. Uma opção é utilizar trimpots para igualar a resistência de todas as células, e reduzir ao máximo o tamanho dos fios no circuito, para que as suas resistências também não influenciem na calibração do circuito.

gabriel_get
date Enviado: 2021-06-10 18:49:13
gabriel_get
Esqueci de mencionar que estou utilizando o ESP32, sabe me dizer se isso pode influenciar?

Giovanni5
date Enviado: 2021-06-11 08:05:39
gabriel_get
O uso de um ESP32 não deveria influenciar no funcionamento do projeto, apenas certifique-se que o módulo HX711 e a ponte de Wheatstone estão sendo alimentados pela saída de 3,3V do ESP32, caso contrário haverá uma diferença de nível lógico no projeto, que influenciará no funcionamento do projeto.

ti.adolfo
date Enviado: 2021-05-28 03:42:44
Giovani posso implementar o mesmo em sistema de células de carga de 10.000, 20.000 kg?

Giovanni5
date Enviado: 2021-05-28 08:23:00
ti.adolfo
A princípio sim, já que o módulo HX711 deve ser capaz de trabalhar com qualquer célula de carga que esteja dentro dos limites elétricos, ou seja, que possua uma tensão operacional de 5 V, e se encaixe nas especificações de entrada do CI. Você pode observar mais informações técnicas do CI através do datasheet do mesmo (https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/887/Datasheet_HX711.pdf).

Giovanni5
date Enviado: 2021-05-28 08:23:39
ti.adolfo
Além disso, vale lembrar que para trabalhar com células de cargas é necessário utilizar uma ponte de Wheatstone (https://pt.wikipedia.org/wiki/Ponte_de_Wheatstone) que seja compatível com as dimensões do projeto, portanto serão necessárias algumas adaptações no circuito.

bruna6
date Enviado: 2021-05-19 09:29:35
Tem alguma maneira de eu pesar um produto e essa informação ser enviada para um outro sistema?

Giovanni5
date Enviado: 2021-05-19 09:58:14
bruna6
Existem diversas maneiras de se fazer isso, e depende diretamente do tipo de integração necessária para esse outro sistema. Você pode por exemplo, realizar uma comunicação serial com este sistema (usando a conexão USB da placa para enviar dados para um computador, ou usar as comunicações UART, SPI e I2C para se comunicar com outra placa microcontrolada), ou até mesmo fazer uma comunicação sem fio (conectando o projeto por Bluetooth à um aplicativo de um celular que armazena esses dados, ou compartilhando informações em um servidor por Wi-Fi,).

andersoniftm
date Enviado: 2021-05-12 21:25:29
Ola Giovanni, sou estudante e estou tentando desenvolver um projeto para quatro células, e cada uma pesar a cada 24 horas, porém tem algumas outras variáveis a serem inclusas, poderia me ajudar ?

Giovanni5
date Enviado: 2021-05-13 08:00:35
andersoniftm
Se quiser, você pode encaminhar suas dúvidas/dificuldades para o e-mail suporte@robocore.net com alguns detalhes do seu projeto, mas lembre-se que infelizmente não trabalhamos com consultoria para projetos.

chicodorea
date Enviado: 2021-03-05 06:09:06
A figura do circuito da balança que contem o LCD mostra um curto circuito entre o fio GND e o fio VCC. o fio que sai da placa vermelha está na mesma linha do fio vermelho (oriundo do pino VCC da placa do arduino).

Giovanni5
date Enviado: 2021-03-05 07:17:33
chicodorea
Agradecemos pela observação, já corrigimos a imagem.

paulaapsilvaete
date Enviado: 2021-02-25 15:36:32
Olá! Você montou esse circuito na prática e realmente funcionou?  É que vi várias pessoas dizendo ser impossível fazer uma balança com apenas uma célula de carga, por isso fiquei em dúvida.

Giovanni5
date Enviado: 2021-02-25 15:59:42
paulaapsilvaete
Sim, este tutorial foi testado na prática e funcionou corretamente. Inclusive todos os tutoriais que disponibilizamos no site são testados na práticas antes de serem publicados. Embora a grande maioria das balanças comerciais utilizem pelo menos um par de células de carga, é sim possível criar uma balança com uma única célula de carga para aplicações mais simples. Entretanto, por conta da simplicidade do sistema, é necessário ter uma atenção maior à alguns fatores, como a calibração do sistema, e a distribuição de peso do local em que o objeto será pesado, por exemplo.

willamebox
date Enviado: 2020-11-11 20:43:09
Ola Como eu faço para controlar uma esteira usando uma balança como medidor do peso de forma que se o peso for baixo eu levo para um reenvase e se for correto prossegue na esteira 

Francois
date Enviado: 2020-11-12 12:01:02
willamebox
Se você pretende usar o módulo HX711, você pode usar esse tutorial como base para fazer a leitura da célula de carga. Em seguida você deve criar uma lógica para medir o peso quando houver um objeto sobre a base (com outro sensor ou por detecção de variação de peso) e atuar em função da leitura. Além disso, pode ser interessante usar um filtro de software, como uma média, para validar a leitura da carga.

wollaceps
date Enviado: 2020-09-27 19:22:39
Qual o resistores você utilizou nesse projeto?

Giovanni5
date Enviado: 2020-09-28 08:42:12
wollaceps
Para este projeto foram utilizados dois resistores de 10 k Ohms na ponte de Wheatstone do circuito.

cicerorosendo
date Enviado: 2020-08-24 14:23:09
como poço manda a informação do lcd para Smartphone via Bluetooth

Giovanni5
date Enviado: 2020-08-24 15:15:53
cicerorosendo
Você pode mandar as leituras do módulo pelo uso do comando "escala.get_units()", que é o mesmo comando usado para exibir o peso na display.

jacksonbansen
date Enviado: 2020-08-06 01:01:24
Olá. Tentei montar o circuito, mas tenho um prolema. O valor da forca vai ficando negativo gradativamente con o tempo,.por exemplo, depois de algumas horas ligado. A forca estava em -500g. O q pode ser?

Giovanni5
date Enviado: 2020-08-06 08:50:10
jacksonbansen
O sensor está em algum ambiente que se aqueça ou se esfrie? Este problema deve estar relacionado à calibração do sensor, que se altera de acordo com a interferência externa. Você tentar minimizar a interferência externa na célula de carga, ou desenvolver uma lógica que altera o fator de calibração do sensor quando há uma resposta negativa no sistema, por exemplo.