fbpixel
Etiquetas: ,

Existem sensores de força bastante simples de usar e compatíveis com microcontroladores como o Arduino. Eles consistem numa célula de carga e um módulo de conversão. A célula de carga é um extensômetro (ou strain gauge) que mede a força em uma única direção no espaço. Geralmente é acompanhado por um módulo HX711 capaz de amplificar a medição das forças aplicadas à célula de carga.

load-cell-amplifier-HX711 Medição de força com o Arduino e um módulo HX711

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Macho/B Macho
  • Módulo HX711
  • Célula de carga

Princípio de funcionamento

O módulo HX711 é composto de um amplificador e um conversor analógico-digital HX711. Ele amplifica o sinal enviado por uma célula de carga. O sensor de força usa uma ponte de Weahstone para converter a força que lhe é aplicada num sinal analógico.

loadcell-wheatstone-bridge Medição de força com o Arduino e um módulo HX711
load-cell-amplifier-HX711-pinout Medição de força com o Arduino e um módulo HX711

Esquema

O módulo HX711 comunica com o microcontrolador usando dois pinos digitais (SCK e DOUT) e é alimentado por 5V. Ele é ligado à célula de carga por 4 fios, que têm cores padrão nas pontes de Wheastone:

  • Excitation+ (E+) ou VCC VERMELHO
  • Excitation- (E-) ou GND PRETO ou AMARELO
  • Output+ (O+), Signal+ (S+), ou Amplifier+ (A+) BRANCO
  • O-, S-, ou A- VERDE ou AZUL
load-cell-amplifier-hx711-arduino_bb Medição de força com o Arduino e um módulo HX711

Código

Para obter um valor de força do sensor, este deve ser calibrado. Para calibrá-lo, é necessário executar o código com duas massas conhecidas diferentes para calcular o ganho e o offset do sensor.

//Libraries
#include <HX711.h>//https://github.com/bogde/HX711

//Parameters
const long LOADCELL_OFFSET = 340884;
const float LOADCELL_DIVIDER = 262.5F;
const int numberOfReadings = 10;
const int doutPin = 2;
const int sckPin = 4;

//Variables
HX711 scale = ;
float weight = 0;
float initWeight = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  scale.begin(doutPin, sckPin);
  scale.set_scale(); //remove scale divider
  scale.tare();      // reset the scale to 0

  //find
  Serial.println("Put a known wait and send command");
  while (Serial.available() == 0) {}
  Serial.print("Compute average on 10...");
  Serial.println(scale.get_units(10), 1); //repeat with two different weight to find DIVIDER and OFFSET
  //WEIGHT= (val-OFFSET)/DIVIDER
  scale.set_scale(LOADCELL_DIVIDER);
  scale.tare();
  //scale.set_offset(LOADCELL_OFFSET);
  delay(200);
  initWeight = scale.get_units(numberOfReadings * 10), 10;
}

void loop() {
  readScale();
}

void readScale() { /* function readScale */
  //// Read button states from keypad
  if (scale.is_ready()) {
    weight = scale.get_units(numberOfReadings), 10;
    Serial.print("weight : ");
    Serial.println(weight);
  } else {
    Serial.println("HX711 not found.");
  }
}


Resultado

Depois de calibrado, o sensor devolve o valor em g ou kg (ou mesmo em N), dependendo da unidade escolhida ao calcular os seus parâmetros. É possível suavizar a medição sobre vários valores colocando o número de leituras desejado na função get_units(numberOfReadings). Isto permite ter uma medição mais estável e precisa da força.

Aplicações

  • Criar uma balança conectada
  • Ativar um mecanismo de acordo com o peso de um objeto

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie