Existen transductores de fuerza bastante sencillos de utilizar y compatibles con microcontroladores como Arduino. Constan de una célula de fuerza y un módulo de conversión. La célula de carga es un sensor de galgas extensométricas que mide la fuerza en una dirección del espacio. Suele ir acompañado de un módulo HX711 capaz de amplificar la medición de las fuerzas aplicadas a la célula de fuerza.
Material
- Ordenador
- Arduino UNO
- Cable USB A Macho/B Macho
- Módulo HX711
- célula de carga
Principio de funcionamiento
El módulo HX711 está compuesto por un amplificador y un convertidor analógico-digital HX711. Permite la amplificación de una señal enviada por una célula de carga. El sensor de fuerza utiliza un puente de Weahstone para convertir la fuerza que se le aplica en una señal analógica.
Esquema
El módulo HX711 se comunica con el microcontrolador mediante dos pines digitales (SCK y DOUT) y se alimenta de 5V. Está conectado a la célula de fuerza por 4 hilos cuyo color sigue siendo el estándar en los puentes Wheastone:
- Excitación+ (E+) o VCC ROJO
- Excitación- (E-) o GND NEGRO o AMARILLO
- Salida+ (O+), Señal+ (S+) o Amplificador+ (A+) BLANCO
- O-, S-, o A- VERDE o AZUL
Código
Para obtener un valor de fuerza del sensor, hay que calibrarlo. Para realizar la calibración, tendrá que ejecutar el código con dos masas conocidas diferentes para calcular la ganancia y el desplazamiento del 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
Cuando el sensor está calibrado, devuelve el valor en g o en kg (o incluso en N) según la unidad que haya elegido al calcular los parámetros del sensor. Es posible suavizar la medición sobre varios valores colocando el número de lecturas deseado en la función get_units(numberOfReadings). Esto permite tener una medición más estable y precisa del esfuerzo.
Aplicaciones
- Crear una escala conectada
- Activar un mecanismo en función del peso de un objeto
Fuentes
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie