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