Hobby, Impressão 3D, Instrumentação, Microcontroladores, Projetos, Sensores, Tutorial

Balança com módulo HX711 e Arduino

Este é o projeto de uma balança com o módulo HX711 e um Arduino, para medir filamentos usados na impressão 3D.

Sensor de peso

sensor da balança

Este é um sensor de peso ou célula de carga, cujo material geralmente é feito de alumínio, aço carbono ou aço inoxidável, sofre uma pequena deformação quando recebe uma força mecânica. Consequentemente, ocorre uma pequena variação na resistência elétrica do sensor, cujo nome é strain gauge ou extensômetro.

O sensor usado para este projeto possui uma capacidade máxima de 1kg, o que é o suficiente para medir rolos de filamento FDM para impressão 3D.

Especificações do sensor

  • Material: liga de alumínio.
  • Faixa recomendada de tensão de operação: entre 3 e 12V.
  • Tensão de operação máxima: 15V.
  • Faixa de temperatura de operação: entre 20ºC e 60ºC.
  • Potência nominal de saída: 1,0 mV/V ± 0,15 mV/V.
  • Repetibilidade: 0,03% F.S.

Por quê a potência está em mV/V? Esta é a divisão da tensão de saída em milivolts(mV) pela tensão de alimentação, quando a célula de carga recebe um objeto com a massa nominal. Por exemplo, neste sensor alimentado por 5V, terá uma tensão na saída de 5mV, quando estiver medindo 1kg, que é a sua capacidade máxima. Repetibilidade é a variação na medição quando mede-se várias vezes um mesmo objeto. 

O módulo HX711

O sinal na saída da célula de carga ainda é muito fraco, por volta de milivolts, é necessário amplificar este sinal para que o microcontrolador possa lê-lo. É aí que entra o HX711, este módulo é um amplificador e um conversor analógico-digital de 24 bits.

Diagrama de blocos do circuito interno do HX711. Fonte: ResearchGate.

Para usar no Arduino, clique neste link para abaixar a biblioteca ‘HX711.h’. Para instalar esta biblioteca no Arduino IDE, clique em ‘Sketch’ -> ‘Include Library’ -> ‘Add .ZIP Library…’. E depois clique no arquivo da biblioteca em .zip.

A balança com Arduino

Primeiramente, deve-se fazer as ligações. Os fios preto e vermelho da célula de carga devem estar ligados aos pinos E- e E+, respectivamente. Enquanto os fios branco e verde são ligados ao A- e A+, respectivamente. No outro lado do módulo HX711, os pinos VCC e GND devem ser conectados aos pinos 5V e GND da placa Arduino, respectivamente. Enquanto os pinos DT e SCK devem ser ligados aos terminais A1 e A0 do Arduino.

Calibrando a balança

Com a finalidade de encontrar o valor de calibração, é necessário carregar este algoritmo de calibração no Arduino.

#include <HX711.h>  //Inclusão da biblioteca.

#define DT A1   //Definição dos pinos DT e SCK.
#define SCK A0

HX711 scale;   //Instanciar o objeto.

float measure=0;//Declarando variável.

void setup() {
  Serial.begin(9600); //Iniciar a tela Serial.
  scale.begin(DT,SCK);
  scale.set_scale(); //Limpando o valor da escala//Onde colocá-se o valor de //calibração
  scale.tare(); //Zerando a balança para desconsiderar a massa da estrutura.
}

void loop() {
  measure=scale.get_units(5);//Salvando na variável o valor da média de 5 medidas.
  Serial.println(measure,3);//Enviando para o monitor serial a medida com 3 casas //decimais.
  delay(1000);//esperar 1 segundo.
}

Após a execução do código, sem colocar nada no sensor de peso, você deve ver uma série de números aleatórios.

Coloque na balança um peso que você conhece, como por exemplo, um recipiente com 500ml de água, cujo peso é de 500g. Com um peso conhecido na balança, você deve ver uma sequência de números mais coerente, no meu caso, apareceu esta sequência.

Estime a média desta sequência, no meu caso, a média estimada foi 630500, mas cada sensor mostrará números diferentes, portanto, fornecerão uma média diferente. Este resultado deve ser dividido pelo peso conhecido do objeto para a calibração.

Em seguida, deve-se colocar o valor de calibração calculado entre parênteses na função ‘set.scale()’. Abaixo, está o mesmo algoritmo de calibração, mas agora com o valor de calibração.

#include <HX711.h>  //Inclusão da biblioteca.

#define DT A1   //Definição dos pinos DT e SCK.
#define SCK A0

HX711 scale;   //Instanciar o objeto.

float measure=0;//Declarando variável.

void setup() {
  Serial.begin(9600); //Iniciar a tela Serial.
  scale.begin(DT,SCK);
  scale.set_scale(1261000); //Limpando o valor da escala. É onde deve colocar o //valor de calibração.
  scale.tare(); //Zerando a balança para desconsiderar a massa da estrutura.
}

void loop() {
  measure=scale.get_units(5);//Salvando na variável o valor da média de 5 medidas.
  Serial.println(measure,3);//Enviando para o monitor Serial a medida com 3 casas //decimais.
  delay(1000);//Esperar 1 segundo.
}

A versão final da balança

Lista completa de materiais:

  • Célula de carga de 1kg.
  • Módulo HX711.
  • Arduino Uno.
  • Fios.
  • Display LCD.
  • Chave de botão sem trava.
  • Resistores: 2 de 10kΩ e 1 de 1,8kΩ.

O display LCD mostra a massa do objeto. Com o propósito de desconsiderar o rolo na hora de medir o filamento, há um botão, que ao pressioná-lo, a leitura passa a ser zero.

Post sobre como usar o LCD no ArduinoClique aqui

esquemático da balança
O esquemático da parte elétrica. Clique na imagem para ampliá-la.

O algoritmo da balança.

#include <HX711.h>  //Incluir bibliotecas.
#include <LiquidCrystal.h>

#define DT A1   //Definir os pinos DT e SCK.
#define SCK A0

HX711 scale;   //Instanciar o objeto.
LiquidCrystal lcd(12,11,5,4,3,2);  

const int button=8;  //Declarar variáveis para a botão.
int buttonstate=0;

float measure;

void setup() {
  pinMode(button,INPUT);
  lcd.begin(16,2);
  Serial.begin(57600);
  scale.begin(DT,SCK);  //Configurando os pinos da balança.
  scale.set_scale(1261000);//Colocando o número de calibração entre parênteses.
  scale.tare();  //Serve para zerar a balança para desconsiderar o peso da //estrutura.
  lcd.clear();
}

void loop() {
  buttonstate=digitalRead(button);
  lcd.setCursor(0,0);
  measure=scale.get_units(5);//Salvando na variável o valor da média de 5 medidas.
  Serial.println(measure,3);
  lcd.print(measure,3);

  lcd.setCursor(5,0);
  lcd.print("kg");


  delay(200);

  if(buttonstate==LOW){
    scale.tare();
  }

}
balança completa
O circuito completo em uma base de madeira.

Vídeo de demonstração

About Pedro Ney Stroski

Deixe um comentário

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