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.
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.
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
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

