medidor de bateria

hola
hace unos meses que empeze a trastear con arduino pero como no se programación estoi lellendo un libro de programación de C. el caso que aun estoi un poco verde en el tema

ahora tengo que hacer un inventillo que consiste en poner una bomba de agua en un pozo conectado a una batería pero se tiene que poner en marcha si tiene suficiente carga porque si se come la carga de la batería no podre enchufar un un motor que tengo diesel
en la batería hay una placa solar que va cargando durante el dia
yo quería poner la placa arduino que se alimentara de la batería de 12v y que midiese la carga si hay poca carga que me cerrase un rele y si la batería esta cargada pos el rele en marcha

estoi un poquito verde en la programación pero si me orientáis un poco aver si puedo hacer el inventillo

adiós

Hola saidi. Tengo la costumbre de responder otra cosa pero como lo has planteado con tanta honestidad intentaré darte una mano con el proyecto.

Vamos a enfocarnos primero en los datos técnicos para saber si lo que tienes podrá cumplir con la tarea:

Necesitamos saber:

Datos de la bomba, Tensión supongo que 12VDC pero me falta la corriente de trabajo. Cuantos amperes consume en funcionamiento.

Panel solar: Tensión de salida y potencia si es que aún conservas esa información.

Batería: sabemos que es 12V pero cuantos Ah dice poder almacenar.

Con estos tres datos veremos si tu sistema eléctrico es capaz de funcionar por su cuenta.
Luego pensaremos en arduino y su programa y que te hace falta para leer la corriente: Te adelanto, un ACS712-5 o 10 o tal vez de mayor corriente.

Un consejo. Lee un libro de arduino, en vez de uno de programación C. El lenguaje de arduino está basado en C, pero tiene cosas muy específicas, que un libro de arduino explica, y uno de C no.

Yo siempre aconsejo este:

Yo empecé con este. Es muy bueno.

hola surbyte
gracias por responder tan rápido

te esplico la instalación que tengo
la batería son dos una de 90 amperios y otra de 75 amperios y están conectadas en serie son para arrancar una motobomba de riego de 70 caballos hay una placa solar de 20 watios(muy pequeña) que es para el manteniento de la batería ya que cuando riega el motor el alternador ya carga la batería

el problema esta en que el pantano que alimenta la motobomba pierde un poco y e echo un pozo para recoger el agua y quiero poner una bomba sumergida para que me la bombee dentro del pantano otra vez
la bomba sumergida ya la tengo y me consume 250 watios por hora y me sube unos 5000 litros hora aun no se los litros que pierde el pantano por lo que no se las horas que debe funcionar la bomba

lo que quería hacer con arduino es que me controle el nivel de carga de las baterías y si están cargadas que me funcione la bomba y si hay poca carga que no se enchufe
yo creo que no tendre problema porque el motor riega casi toda la noche y la batería me las cargara pero necesito poner ese medidor por si acaso

e de decir que quiero poner un inversor de corriente para pasar los 12v a 220v porque la bomba que tengo es de 220v
yo creo que lo que me hace falta es la idea de como hacer el programa para leer la batería por alguna entrada analógica y bueno sobre lo que lea abra o cierre un rele asi de simple no hace falta ni lcd ni teclado (creo yo)

bueno no se que mas explicar
he de decir que tengo 42 años y no se si conseguiré aprender a programar bien con arduino ya soi un poco durillo para estos temas

hola carmeloco me lei el libor de oscar torrente artero y bueno aprendi cosas pero lo del tema de programación lo tengo verde me e leído un libro de C y estoi por el segundo que habla también de C++ y bueno voi entendiendo muy poco a poco ten encuenta que no me esplica nadie na y con mi EGB que en su dia aprobé con suficiente (jeje) abanzo muy poco pero bueno aver si llega el dia de lanzarme a por un proyecto mas completito (tengo en mente dos)

adios

Bien, parece que tu sistema electrico funciona y el régimen de carga de tu panel es suficiente para sostener el sistema de modo que vamos a sugerirte un doble sistema de medición de tensión y no se para que podría servir la corriente... la verdad no se que pueda aportar.

Con medir la tensión sabremos si estamos bien o mal.
pero tengo algunas dudas que surgen de tu explicación.

  1. dices que la bomba de riego es de 70CV y esta alimentada con estas baterías? Las cuentas no me dan.
    70CV son 51Kw y tu potencia instalada en baterias no llega a 2Kw.
    Que parte no estoy viendo o esta mal mi calculo

  2. Hablas que las baterías estan en serie o sea... tendrás 24VDC 75Amper porque nos quedamos con la bateria de menor capacidad la que no podrá entregar 90 jamás.
    Diferente sería tenerlas en paralelo con una tensión de 12V y 90 + 75A = 165A que dan los casi 2Kw

  3. Si las tienes en serie luego debes extraer 12V para el inversor... de nuevo una carga en una batería conectado en serie la desequilibra mas aún. No es aconsejable.

No se si te estoy entendiendo bien.

Porque no haces un dibujo de como estan conectados todos los elementos, dibujalo en bloques..

Bateria 1 (B1)
Bateria 2 (B2)
Panel Solar
Cargador de baterías
Bomba de riego
INversor
Bomba sumergible.

hola
mil perdones por no esplicar bien la instalacion
las baterias no estan en serie estan en paralelo asi que saco 12V y unos 165 amperios
la motobomba no es electrica es diesel y las baterias son para el arranque
la placa solar es para cuando esta mucho tiempo sin funcionar el motor que la bateria puede perder la carga y asi se mantiene cargada a tope siempre (pero esa placa es muy pequeña si hay algun consumo de la bateria)

la instalacion es sencilla
la placa solar va a un regulador del que salen los cables para la bateria
el inversor lo conectare a la bateria y de hay ala bomba y bueno si pongo el arduino cuando la bateria este baja que corte la alimentacion que va de la bateria al inversor y listo

si me puedieseis recomendar algun libro de programacion exclusivo para arduino me iria de maravilla (para ir bien en español jeje)

adios

Ve a Documentación, el sub Foro, hay muchas recomendaciones de libros ahi.

hola
me darias una idea alguna idea de como plantear el programa para:-)el medidor de baterias?

Si.. claro es muy facil.
Mira los ejemplos del IDE relativos a analogRead que será tu instrucción fundamental.
Como se trata de tensión contínua (12VDC) debes usar un divisor resistivo.
Algo que lleve los 12 o mas volts, nunca debes considerar 12.. yo pensaría en 14 o 15 V para tener margen.
En realidad depende del cargador, si ves que el cargador es preciso, fijas la tensión que leas.

Supongamos entonces 13.8V y no es casual este valor.
Esos 13.8V debes bajarlos a 5V que es lo que puede leer el arduino en sus entradas analógicas

un divisor resistivo son dos Resistencias. R1 y R2 asi dispuestas

Este grafico esta perfecto, para que lo veas. Vin son esos 13.8 por ejemplo y Vout será para 13.8V los 5V

aquí las cuentas que tomé de otra página

Asi que reemplazas y tendras 5 = 13.8 R2/(R1 +R2)

Acá lo que se hace es asignar un valor a R2, supongamos 10K y despejar R1

5/13.8 = 10/(R1 +10) => R1+10 = 13.8/5 => R1 = 10*13.8/5 -10 = 17.6k o aprox 18k

O sea R1 = 18k y R2 = 10k Tomo 18 porque 17.6 solo lo consigues con un potenciometro o preset.

Bien ahi tienes tu circuito. R1 = 18k conectada a la batería, el punto comun de R1 y R2 a la entrada del arduino. Y el otro extremo de R2 a mada o negativo.

Luego leerlo en el programa es facil simplemente modificar el ejemplo

en algun punto del ejemplo tendrás si lees con la entrada A0

valor = analogRead(A0) * 5.0/1023;

Pero nuestros 5V deben estar afectados por esta relación R1/R2 = 18K/10k o 1.8

finalmente

valor = analogRead(A0) * 9/1023;

Bien 9 = 5 * 1.8 que es el factor de conversión del divisor resisitivo

Esas lecturas darán en valor 13.8 cuando vea 1023 cuentas y 0 cuando lea 0.

El planteamiento del divisor de tensión es correcto, aunque yo lo calcularía 1V por encima del máximo, para no llegar nunca a fondo de escala de medición, pero veo un problema en el analogRead.

Si usas

valor = analogRead(A0) * 9/1023;

El valor máximo que leerá, será una lectura errónea de 9V. Yo lo plantearía de otra forma. Primero, miro el voltaje teórico-real, que me dará el divisor de tensión, cuando la tensión sea de 13,8, ya que una de las resistencias, ha variado según los cálculos, para usar una de valor normalizado.

Entonces, si la resistencia total son 28k

I=13,8/28K=492,9uA

Teniendo el consumo total, a 13,8V es fácil calcular el valor de salida

V=492,9uA*10K=4,9V

Si para 5V, tenemos un valor de 1023 en la lectura analógica del arduino, para 4,9V tendremos:

(1023*4,9)/5=1008

Entoces, ¿qué tensión tendríamos con un valor de 1023?

(1023*13,8)/1008=14

Con estos valores, deberíamos hacer la medición así:

valor=float (analogRead(A0))*14/1023;

Habiendo definido previamente la variable valor como float. También tenemos que convertir la lectura del analogRead a float, porque si no tenemos un error de cast y no nos muestra los decimales.

Yo he probado que esto funciona así:

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

void loop() {
  valor=float (analogRead(A0))*14/1023;
  Serial.println (valor);
}

También he hecho la prueba, usando un potenciómetro de 10K como divisor de tensión. Lo he ajustado a la tensión de salida correcta y también funciona muy bien.

Tienes razón, todo el planteo esta bien pero esa expresión final para leer la tensión de la bateria para mi cálculo hubiera quedado como analogRead(A0)*13.8/1023

Usar 14 es aún mas conservador pero como cité anteriormente creo que es a titulo de ejemplo porque no se que salida da el cargador solar.

Ahora comprendo donde cometí el error.
Como R1 = 18k y R2 = 10k yo hice R1/R2 = 1.8 y use ese factor para multiplicar a 5V y claro, lo hice mal porque en realidad el factor es (R1+R2)/R2 = (28k)/10K = 2.8 y 2.8 * 5 = 14 y dio 14 porque tomo 18k y no 17.6k como calculé

Hola
Perdonar mi tardanza por contestar pero he tenido hace 5 meses dos nenes y no me dejan ni un minuto libre (jeje)
En primer lugar un divisor de tensión es imprescindible para bajar los 13.8V a 5V de la entrada analógica del arduino pero tengo dudas de cómo se calculan las resistencias. En el ejemplo que habéis comentado R2 le habéis asignado 10K una vez sabemos eso con una pequeña formula calculamos R1 pero no sé si da igual el valor de R2 o no supongo que debe tener alguna referencia al consumo que pueda tener el circuito (pero no se )
He mirado la salida del regulador de la placa solar y da 13.8V así que esa es la tensión máxima que llegara al divisor si ponemos R1 a 18k y R2 a 10K y 13.8v el cálculo que me da es sobre 4.9V que llegaran al arduino (como puede leer máximo 5v creo que de sobras)de momento hasta aquí la parte electrónica echa
Con lo del soft más o menos he entendido lo siguiente:
La entrada puede recibir de 0V a 5V y el arduino lee en una escala de 0 a 1023(o sea 1024 posiciones) con una regla de 3 calculamos
5V-----1023
4.9V----X
Eso nos da 4.91023/5=1002
Así si el arduino nos manda por el serial 1002 la batería está a tope
Yo calculo que a 11.5V la batería esta descargada(más o menos)
Hacemos la siguiente regla de 3
13.8V----4.9V
11.5V-----X
11.5
4.9/13.8=4V
Cuando nos entre por la entrada analógica 4V la batería esta descargada
Hacemos otra regla de 3
5-----1023
4-----X
4*1023/5=818
Y por fin sabemos el valor que debe recibir el arduino para apagar el relé que es 818 (aproximadamente creo)
Creo que los cálculos que he hecho son correctos si no están bien me explicáis los fallos
Veo que ponéis la expresión :
analogRead(A0)*13.8/1023
no la acabo de entender digamos que hace un cálculo directo por lo que he calculado en vez de poner analogRead(A0)*13.8/1023 pondría analogRead(A0)13.8/1002 si ponemos los 81813.8/1002=11.26v parece que se va mucho de los 11.5V supongo que debe ser por los decimales
lo de que de un valor float es para que ser más preciso?

Pongo un esquema (el primero que he encontrado en google) de como conectar el relé
Donde pone IN lo conecto al pin digital Nº13

La entrada pongo el divisor que me habéis propuesto

Con la entrada en la batería(13.8V) y la salida Vout en la entrada analógica A0 y el código quedaría algo así

int relé = 13; // pin al que se conecta el relé
int entrada=A0; //pin de entrada analógica
int valor=0; // variable que almacena la lectura

void setup()

{
pinMode(rele,OUTPUT);
}

void loop()
valor=(anologRead(entrada))*14/1002

if(valor>818)
{
digitalWrite(rele,HIGH); // Activamos el relé
delay(1000); // esperamos 1 segundo
}
Else
{
digitalWrite(rele,LOW); // Desactivamos el relé

while (valor<1002){ // esperamos a que este cargada la batería
delay(600000); // esperamos 1 minuto
valor=(anologRead(entrada))*14/1002; // leemos el valor
}
}

He hecho este código un poco rápido no sé si hay algún fallo
He puesto que active el relé si baja del valor de 818 y si es así que espere a que la batería este cargada y que lea cada minuto la carga
Corregidme si el planteamiento está bien

Otra parte de la electrónica que falta es la alimentación del arduino yo quería hacer otro divisor de tensión pero que me de unos 8V así si baja la batería que el arduino este siempre alimentado no sé si vale un divisor como el que hemos puesto para la entrada analógica (variando R1) o se tienen que variar las dos resistencias

Y por último el relé que le pondré no sé si vale cualquiera porque quiero poner un inversor de 1000W aunque solo usara 250W la bomba de agua (yo creo que funcionara sin problema pero os lo pregunto para estar más tranquilo
Y bueno creo que nada más que el post ya es mu largo
adiós

Todo tu análisis bastante bien pero solo una cosa.
En lugar de trabajar en formato Arduino o en cuentas del AD usa los valores en Volts asi será más facil para ti entender que ocurre, sino siempre estarás haciendo reglas de 3.

Entonces la tensión se lee como 14*analogRead(A0)/1023; y tendras valores entre 0 y 13.8V y cuando compares compara contra 11.5 de tensión de batería descargada.
Todo lo demás que quieras saber lo haces en formato entendible o sea en VOLTS.

Veamos tu sketc y de paso usa tags [.code]código o sketch acá[./code] cuando o uses, hazlo sin el punto decimal.

Tu código reformado:

int relé      = 13; // pin al que se conecta el relé
int entrada   = A0; //pin de entrada analógica
float valor   = 0.0; // variable que almacena la lectura


void setup()
{
  pinMode(rele, OUTPUT);
}

void loop()

  valor= 14.0 * analogRead(entrada)/1023;

  if (valor > 11.26)   {
     digitalWrite(rele,HIGH);  // Activamos el relé 
     delay(1000);              //  esperamos 1 segundo
  } 
  else {  
    digitalWrite(rele,LOW);   // Desactivamos el relé 
  }

  if (valor < 8.0) {  // cambia este valor al que desees
    Serial.println("Bateria descargada");   
    delay(60000);   // espera 1 minuto y repite todo
  }

  Serial.println("Bateria = ");
  Serial.print(valor);
  delay(1000);
}

Es similar al tuyo. Tenias un error te faltaba un ';' al final del primero valor =... y Else no puede escribirse con mayúsculas.

Lo demás bien.
Prueba a ver y lo seguimos mejorando.

Por último el cálculo para 8V de entra y un segundo divisor resistivo.

Acá lo que se hace es asignar un valor a R2, supongamos 10K y despejar R1

5/8 = 10K/(R1 +10K) => R1+10K = 8/5 => R1 = 10*8/5 -10 = 6k

Otro valor no comercial. Lo mas cercano es 5.6k o bien usas una de 4k7 y una de 1.2K = 4.9K
Otra solucion es 5.6k y una de 330 ohms total 5.93K muy cercano a 6K
Si consiguieras una de 5k le sumas una de 1k y ya lo tienes o como digo la mas facil 6 de 1K.

Bien.. a veces los valoes calculados son dificiles de encontrar.
Otra solución es que busques un preset multivuelta de 22K por ejemplo y conectas entre extremos la fuene de 8V y por el cursor contra el extremo que esta a mas, mides que de 5V y asunto solucionado.

hola
tienes razón mejor trabajar con voltios directamente es mas comodo de echo el sketc esta mal porque ponía if(valor>818) y tenia que ser if(valor>13.8)
en el sketc que as puesto tu e visto que as añadido que salgan los voltios por el puerto serie pero no as iniciado el puerto con Serial.begin(9600);
lo del sketc esta escrito tal cual porque lo escrivi en formato Word porque lo escrivi aquí y al enviar no se que paso y se me borro y no veas pa volverlo a escribir
el tema del divisor para alimentar el arduino no hay problema porque el arduino se gradua solo el voltaje si le meto 7 , 8 o 9V ya se lo regula yo tenia la duda si poner el R2 del divisor una resistencia como la otra de 10K si vale la misma ya calculare yo el R1 y si no hay resistencia esacta pondré dos o mas resistencias en serie

otra cosa que no me acorde de preguntar es que arduino puedo poner para el invento porque va a ser un arduino que hay se va quedar alo mejor una versión mas pequeña o mas sencilla me valdría asi guardare el arduino uno para futuros proyectos
no se si iria bien añadir algo mas al sketc lo básico ya esta

aver si tengo un rato y lo monto todo y lo pruevo

gracias por tu ayuda
adios