Lectura analogica de la carga que le queda a una pila

Bueno tengo in codigo que supuestamente tiene que leer el nivel de la pila, es una pila lipo de 3.7V
lo cual esta tomando como referencia los 3.3 v que me da Arduino me codigo es el siguiente pero noto quue en igual de bajar , sube el nivel de bacteria quisiera saber que estoy hacienda mal :frowning:

este es el codigo

float batt_lvl = 11.8; //[analog value from 0 to 1023]

float get_battery_level()
{
  float operatingVoltage = analogRead(REFERENCE_3V3);

  float rawVoltage = analogRead(BATT);

  operatingVoltage = 3.30 / operatingVoltage; //The reference voltage is 3.3V

  rawVoltage = operatingVoltage * rawVoltage; //Convert the 0 to 1023 int to actual voltage on BATT pin

  rawVoltage *= 4.90; //(3.9k+1k)/1k - multiple BATT voltage by the voltage divider to get actual system voltage

  return(rawVoltage);
}

Asumiendo que:

  • El voltaje de referencia del ADC es de 5v exactos.
  • La bater√≠a est√° a 3.7v exactos.
  • La entrada REFERENCE_3V3 recibe 3.3v exactos.
  • La precisi√≥n es de 7 decimales.

Los resultados teóricos deberían ser los siguientes:

float get_battery_level()
{
  float operatingVoltage = analogRead(REFERENCE_3V3); // 675

  float rawVoltage = analogRead(BATT); // 757

  operatingVoltage = 3.30 / operatingVoltage; // 0.0048889

  rawVoltage = operatingVoltage * rawVoltage; // 3.7009951; hasta que parece estar bien.

  rawVoltage *= 4.90; // 18.1348760; esto para qué?

  return(rawVoltage); // 18.1348760; no es lo que esperabas verdad?

}

Esto aclara tu duda?

Asumiendo todo lo que te ha dicho Lucario, debes pensar qu le solo estar√°s mirando el voltaje que tendr√°s en tu pila, pero no sabr√°s su carga, o el estado de la propia pila, valores que, seg√ļn mi experiencia son casi m√°s importantes que el voltaje

A ver si entendí bien el planteo.
Tienes una batería de 3.7V
Conectas la referencia del AD a los 3.3V de una fuente que no es de referencia porque se trata de la salida del FTDI (muy muy mal). Usa la referencia de 1.1V que esa si es precisa.
Pero sigamos dejando de lado el error cometido.

si 3.3V ser√° tu m√°ximo del ADC o sea 1023 y debes leer 3.7V con ese divisor resistivo.
Ahora usas un divisor resistivo formado por 1k y 3.9K => Vout = Vin*3.9/4.9
despejando… y simplificando para aliviar trabajo al pobre arduino.

void setup() {
	// lo que corresponda a tu setup
	analogReference(EXTERNAL);  // Donde ADREF esta conectado a 3.3V 
}

void loop() {
	// tu código
}

float get_battery_level() {
  float rawVoltage;
  //rawVoltage = 4.9 * 3.3 * analogRead(A0)/ (3.9*1023.0); // En lugar de A0 usa el pin que corresponda
  rawVoltage = 0.004053 * analogRead(A0); // máximo 4.14 Voltios para 1023
  return rawVoltage; 
}

hola buenos dias para dejarles mejor explicado
REFERENCE 3.3 es la entrada analogica A3
estoy usando una tarjeta la cual tiene puentiado de los 3.3V a la entrada analogica de 3.3V
mi bateria la estoy leyendo por el A2, que igual esta definido por la tarjeta
esto quiere decir que en cualquier lugar que yo conecte mi bateria la tarjeta ya tiene definida las pistas para llegar a hacer ese tipo de lectura, y enefecto tiene un divisor de voltajee en la entrada A2,

pero como les digo lo que yo eh notado en la lectura es que aumenta y no disminuye :frowning:

bueno este es el shield que estoy usando

el datasheet seria este o esquematico

la tarjeta fue dise√Īada para un arduino UNO, pero ya he hecho modificaciones para adaptarla a la MEGA
porque? porque mi codigo no lo soportaba el arduino uno, aparte porque ocupaba mas puertos seriales para otros dispositivos.

las entradas analogicas y ese rollo no lo e movido
una entrada analogica A3, le entra la referencia de 3.3v de la placa arduino
una entrada analogica A2, es donde esta el divisor de voltaje y supuestamente donde me hace mi lectura de carga de bateria

cefere0:
Asumiendo todo lo que te ha dicho Lucario, debes pensar qu le solo estar√°s mirando el voltaje que tendr√°s en tu pila, pero no sabr√°s su carga, o el estado de la propia pila, valores que, seg√ļn mi experiencia son casi m√°s importantes que el voltaje

que tal men y podrias aportar como saber el valor de su carga?

Y esto lo has visto?
https://github.com/sparkfun/Weather_Shield/tree/master/firmware/Weather_Shield_Weather_Station

Ahora comprendo todo, el código esta sugerido por Sparkfun.

Bueno tengo in codigo que supuestamente tiene que leer el nivel de la pila, es una pila lipo de 3.7V lo cual esta tomando como referencia los 3.3 v que me da Arduino me codigo es el siguiente pero noto quue en igual de bajar , sube el nivel de bacteria quisiera saber que estoy hacienda mal

Yo no se porqué no empiezan poniendo el enlace en el post#1 para evitar estas cosas.
Si todo esta bien y tu sistema se esta cargando es posible que la tensión suba y no baje.
Porque no clarificas mejor en que circunstancia aseveras que debe bajar y en cambio sube.
Supongo que solo alimentado con la LIPO y sin cargador mediante? Ya se que esun comentario obvio pero siempre hay que establecer donde estamos parados.

ok mira ya hice pruebas.
solamente con la pila tiende a subir, con la pila y el cargador con su panel solar tiende a subir
y esta bien, pero porque me sube cunado esta solo la pila? eso no puede ser posible, se supone que tiene que tender a bajar el voltaje de la bateria

y si ya vi ese archivo.ino y como te digo yo lo modifique le tengo modificado en distintas partes, pero lo de la bateria lo tenog exactamente igual

Estas muy equivocado. Si esta con el cargador, el cargador hace subir la bateria.
Debe caer si no tienes cargador, y solo estas con la batería.

ok pero porque no me explicas, solo me dices que es lo que hace.

mi logica dice que si el cargador no esta funcionando no tiene porque hacer subir la pila, ya que de NOCHE no estaria cargando nada por ausencia de SOL!, creo estar en lo correcto no?

ahora bien si tu tienes la razon , si es vdd que aunque no exista el sol mi pila sube, porque que puedo hacer?

Mira.. creo que lo mejor es que preguntes a Sparkfun, mientras pensamos en algo coherente con lo que te ocurre.