Hackeando una báscula de baño para obtener más resolución [INFO]

@curro92, antes del ADC es necesario montar un amplificador porque los niveles de tensión son muy bajos a la salida de la celula de carga. Puedes usar por ejemplo un ina125p o un operacional de baja figura de ruido como un op71

Tambien existen ADC con amplificador integrado, como el CS5532

Asi seria un amplificador de celula de carga con un CS5532, lo vi en una bascula y me llamo la atención que no usaran operacionales.

Gracias por vuestra ayuda.
Creo que voy a decidirme por el INA125, me interesa también para otras cosas, he visto en ebay cuatro por 15€

Alguien me puede comentar como hacer el ajuste a cero usando el cs5532 o el INA125? quiero hacer un sistema de pesado en bascula que la mismaestructura cuelga de la celulas/celdas de carga y la exita por lo que el peso en Cero lo tengo que ajustar para empezar a medir.

maxid:
Alguien me puede comentar como hacer el ajuste a cero usando el cs5532 o el INA125? quiero hacer un sistema de pesado en bascula que la mismaestructura cuelga de la celulas/celdas de carga y la exita por lo que el peso en Cero lo tengo que ajustar para empezar a medir.

La salida del INA125P la llevas a una entrada analógica del ADC que vas a usar, luego lees 10-20 veces la entrada y haces la media, asi sera mas fiable la medida. Luego coges un peso que conoces por ejemplo 1 kilo y luego con un poco de matematicas .... voila

1 kg ---------------------2,542V
x Kg ---------------------lectura analogica

También puedes usar la función map
http://arduino.cc/es/Reference/Map

Eso si lo entiendo, lo que no se en la parte electronica como hago para calibrar el 0 (cero), me explico mejor.
Tengo 2 celdas que soportan una mezcladora, donde van a ir cayendo los materiales a mezclar, esta estructura puede pesar 200kg, si la celda es de 1000kg ya tengo una exitacion del 20%, para que en mi salida del amplificador tenga cero(0) voltios, tengo que hacer un ajuste en el ofsset o como se llame,sino mi resolucion se reduce en 20%, y de esta forma tengo mi pesaje entre 0 y 5v.
Con el cs5532, imagino que toman el valor del momento y lo restan a la lectura, pero imagino que se puede agregar un preset para calibrar a mano esto.

Aqui ya me pierdo, las pocas basculas que he visto la tension de excitacion era fija. 5 o 15V. El rango era 15Kg.

Hola,
realmente yo no conseguí un reset perfecto, siempre me quedó un valor residual en vacío, en detrimento de la resolución final (usaba INA125). Y el caso es que la báscula de baño funcionaba bien cuando la compré. Pero las células (half-bridges) tenían una pequeña diferencia de resistencia interna de 1 o 2 ohmios. Seguramente estarían conectadas astutamente por los chinos de suerte que las diferencias se compensaran. Pero al desmontar, no me fijé en el orden.
Busqué expresiones como "bridge balancing" en Google y encontré esto
http://soliton.ae.gatech.edu/people/jcraig/classes/ae3145/Lab2/strain-gages.pdf
Intenté con la fórmula (d)General de la página 17. NO tenía a mano las resistencias adecuadas, y el asunto quedó para más tarde. Este otoño retomaré el tema.
La conclusión que saqué es que no es tan sencillo conseguir el offset.

Es que una célula de carga es cosa fina. Una vez vi en un documental como se fabricaban y me quede alucinado. Con un microscopio alineaban las galgas extensiometricas con las marcas.

Bueno finalmente ayer me llegaron mustras de cs5534 en 24bits y cs5523 en 16 bits, lo malo es que son muy peueños en ssop24, asique no me queda otra que hacer un pcb.
Encontre entre las notas de aplicacion un faq que explica mucho incluso del calibrado. Y el modulo de evaluacion estan los planos para ver como conectar correctamente el AD para no tener perdidas.
Los INA125 me resultan utiles y como son DIP los puedo probar mas rapido, asique contare en breve sino abro un hilo nuevo.
Agrego una pregunta para los mas entendidos que yo, en la imagen que adjunto explicam como hacer el ajuste de offset pero no encuentro el ref200 aca en argentina y no se como se puede reemplazar por otro circuito. ¿Alguien me explica que se puede usar?

ref200.png

Hola,
Me interesa el tema del offset para el INA125: alguien podría resumir qué es el REF200, y si se puede sustituir por otro componente? El precio ronda los 8-10€

en texas dice Dual Current Source/Current Sink, busque por todos lados como reemplazarlo pero no encuentro, lo unico que se me ocurre es usar un LM317 y LM337 como generador de corriente, pero no creo que pueda manejar tan poca corriente, porque se la consumiria el mismo.
Alguien mas estudiado en la materia nos daria una mano?

En ti.com envian muestras

Hola chicos, a ver si me pueden ayudar.

Compre una balanza de baño por 5€ en un mercadillo y la balanza funcionaba bien. Le quite las células de carga y tras recibir el INA125P estoy tratando de obtener los resultados y no veo luz. Queria ver si me podían ayudar.

Conecciones: 1) y 2) a 5V, 3) a GND, 4) a 15), 5) a GND, 6) cable rojo de célula #1, 7) cable rojo de célula #2, 8) y 9) conectados a través de una resistencia de 1K, 10) y 11) conectados a A3, 12) a GND, 13) 14) y 16) N.C. (libres).

Parecido al de este abajo, pero en vez de usar una celda de 4 cables, uso 2 de tres cables. los cables blancos van a 5V y los negros van a GND

Estoy probando este código:

// Arduino as load cell amplifier
// by Christian Liljedahl 
// christian.liljedahl.dk

// Load cells are linear. So once you have established two data pairs, you can interpolate the rest.

// Step 1: Upload this sketch to your arduino board

// You need two loads of well know weight. In this example A = 10 kg. B = 30 kg
// Put on load A 
// read the analog value showing (this is analogvalA)
// put on load B
// read the analog value B

// Enter you own analog values here
float loadA = 0; // kg
int analogvalA = 70; // analog reading taken with load A on the load cell

float loadB = 10; // kg 
int analogvalB = 600; // analog reading taken with load B on the load cell

// Upload the sketch again, and confirm, that the kilo-reading from the serial output now is correct, using your known loads

float analogValueAverage = 0;

// How often do we do readings?
long time = 0; // 
int timeBetweenReadings = 200; // We want a reading every 200 ms;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int analogValue = analogRead(0);

  // running average - We smooth the readings a little bit
  analogValueAverage = 0.99*analogValueAverage + 0.01*analogValue;

  // Is it time to print? 
  if(millis() > time + timeBetweenReadings){
    float load = analogToLoad(analogValueAverage);

    Serial.print("analogValue: ");Serial.println(analogValueAverage);
    Serial.print("             load: ");Serial.println(load,5);
    time = millis();
  }
}

float analogToLoad(float analogval){

  // using a custom map-function, because the standard arduino map function only uses int
  float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
  return load;
}

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Resultados:

analogValue: 73.83
             load: 0.07219
analogValue: 78.28
             load: 0.15627
analogValue: 80.07
             load: 0.19009

Tengo varias dudas, la primera es si tengo bien conectado el circuito. (estoy siguiendo lo visto aqui: http://cerulean.dk/words/?page_id=42). Después, si bien entiendo como funciona la función MAP y sé que al principio tengo declaradas dos variables que se deben ajustar para calibrar la balanza, cómo puedo asegurarme que la léctura tiene sentido?

Gracias de antemano!!!

antes de meter mano al codigo, revisa que funcione el circuito.
Pon un multimetro a la salida del ina125 y haz presion en las celdas, deberia variar de 0 a 5v. en una escala de milivolt haz lo mismo sobre las celdas para ver que esten debidamente exitadas y haya variacion.

Es bastante errática la lectura, pero efectivamente funciona el circuito. Lo único que me pareció un poco extraño es que en reposo (es decir, sin aplicarle carga a la célula) la salida indica 5V y según voy aplicando fuerza, baja hasta cero... (aplicando mucha fuerza).

Por esta misma razón, no puedo leer en miliV las celdas, porque en reposo una está en 2.5 y la otra en -2.5
Estoy conectando mal el circuito?

Ya ví el error, cambie los cables rojos, el que estaba en 6) lo puse en 7) y viceversa y listo, el voltaje parte ahora desde 0 cuando no hay excitación!
Ahora al código, jajaja

exacto estan polarizados alrevez.
Recuerda hacer almenos de 3 a 10 lecturas para hacer un promedio de lecturas para que sea mas estable, o si no es muy rapida las lecturas que necesites agrega un capacitor de tantalio de 1uf a 10uf en la entrada analogica.
Esto de quita el ruido de la lectura.

Chicos, otra duda. Antes estaba usando dos celdas de 3 cables cada una de una báscula de baño (para evitar errores), ahora, cambié esas celdas, por una de 4 cables de 5km de báscula de cocina. La verdad es que funciona bastante bien, pero tengo unas dudas:

  • Aunque leo 2.5V en cada salida de la celda (una azul y otra blanca), la salida del amplificador está entre 0.12V y 2,70V (con una resistencia de 100 Ohm), si vario la resistencia, logro lo siguente (0.23V -a-2.70V con 4,7ohm -y-0.08V -a- 2.02V) ... nunca llega a los 5V. Por qué pierdo casi la midad de mi rango? cómo puedo aumentar hasta un máximo de 5V?

  • Considerando que lo máximo de voltaje que tengo es 2.7V; intenté aplicar el código del otro día y al medir unos datos conocidos (p.e.: 1Kg de harina - 518 analógico; lata de atún, 370g - 307), con esto en mente... todos los valores entre estos dos números o cercanos a ellos pintan bien, PERO al quitar todo el peso, la lectura es Analog(29) -y- MAP(-470) y un sobre con 90g de semillas es Analog (88), MAP (-285). Debería poner rangos y hacer un switch/caso o varios if concatenados o estoy interpretando mal la fórmula?

No olvides que es un divisor resistivo, a la salida tenes la mitad de la exitacion.
Creo que deberias tener aRef con una tension de referencia de 2,5 para que tengas la escala completa, corrijanme si me equivoco.