Problema con consumos nrf24l01, optimizar baterias a través de energía solar

Muchas gracias por esta info tan buena! Eso es lo que necesito, la verdad es que si que ha sido barato y caro a la vez, es un mareo constante, pero bueno, lección aprendida, me cogeré uno de estos que recomiendas, muchas gracias por las sugerencias!!! Por mi parte cierro el tema si queréis y mi proyecto lo subiré en proyectos! Muchas gracias a todos de nuevo!

Sigue acá porque tu proyecto ya comenzó y va resolviendo problemas y encontrando soluciones.
Si veo que merece estar en proyectos yo mismo lo pasaré.

Hola por aquí, adjunto el código de mi "master", por favor.. con paciencia y no os pongais mucho las manos a la cabeza, apenas llevo 5 meses en el mundo arduino y nunca había programado, para mí este un proyecto ambicioso y no se como va a salir...he llegado de viaje y me he puesto a "limpiar" el codigo un poco para hacerlo un pelín mas presentable (he hecho lo que he podido), esto estara lleno de errores y probablemente de cosas que se puedan hacer mucho más simplemente o con menos rodeos de como lo he hecho yo...pero os aseguro que me ha costado mil quebraderos de cabeza el hacerlo...sobre todo el que haya más de un "slave" ya que si o si hay que morir a la comunicación bidireccional, sino hay una fiesta de solapamientos de señales..

El próximo día adjuntare el de los slaves, ya que creo que esto puede venir muy bien a la gente, porque como he dicho antes.. aquí ha habido mil quebraderos de cabeza y mil y un problemas que he ido superado (los tengo todos documentados para no tropezar 2 veces con la misma piedra) pero claro, al no haber tocado NUNCA la programación resulta un poco infernal y la capacidad de asimilación de uno es mil veces más lenta de otro de lo que sabe que estas hablando...

En fin no quiero montar el drama :D, jejej lo paso y si a alguno le viene bien que lo disfrute y si a alguien le interesa hechar un ojo y sugerir propuestas, os aseguro que soy todo oidos..

Mis actuales problemas son con la alimentación, hace poco solvente el de el NRF consumiento todo el rato colocando que se ejecute cuando le doy al botón y que lo active un relé o un transistor (aun falta de colocar esto en el código)

El siguiente sera el del módulo SIM900 recomendado por surbyte (ya esta pedido) que me imagino que te consumirá el alma si puede... xDD pero leyendo sobre el por lo visto con una soldadura se activa y desactiva el mismo via software (aunque no me ha quedado claro si solo es el GPRS o todo el módulo en si...) ya que si solo es el GPRS sigue consumiendome y al ir por baterías hay que ahorrar...

En fin lo dicho...poco tiempo programando..buenas intenciones..acepto sugerencias a tope en todo ,sobre todo en comandos AT..y no os deis con el canto de una mesa que lo he intentado hacer lo mejor posible!! :smiley:

Saludos y que tengaís buena noche!

adjunto el código porque porque no me deja ponerlo ya que es muy grande...(ayyy simulacro de programador....:smiley: si que te sale el código grande cuando no hace falta tanto...)

emisor_duplex_CON_pantalla.ino (13.6 KB)

Bueno, iré marcando cosas que no son correctas.

  1. Te faltan llaves en este if else
if ( timeout )
          Serial.println("No hay conexion con la sonda datos");
          lcd.setCursor(0,1);
          lcd.print("No signal in area 1" );
          delay (2000);
          lcd.clear();
      else  { // lectura de mensaje recibido

Bueno, al ver el resto del código me doy cuenta que estas reinventando la rueda.

Tienes dos opciones, Tmrh20 hizo 3 librerías fantásticas para el manejo nRF24
tu usas la primera pero existen dos mas, Network y Mesh.
Network es lo que tu intentas hacer, o sea crear una red de radios que se comuniquen con el master.
Entonces para que hacer lo que ya esta hecho?

Mesh es una red como la anterior donde los nodos tienen la capacidad de actuar como puentes si otro nodo quiere usarlo para llegar al master. Eso te permite aumentar la cobertura.

Network y Mesh

  1. Algo que veo que repites es el uso de delay() pero aunque sabes que lo remarco hay situaciones en las que se aplica y otras donde no.
    Por ejemplo
    radio.openReadingPipe(1,addresses[1]); 
    radio.openReadingPipe(2,addresses[3]);
    radio.openReadingPipe(3,addresses[5]);
    delay (5000);

Que cambia esperar 5 segundos ahi?

  1. float hum=(datos[0]);

los paréntesis que significan? no hacen falta.

float hum= datos[0];
  1. Otra repetición por una programación no adecuada basada en el uso de delay()
    mySerial.println("AT");
    delay(1000);
    ShowSerialData();

Envias un comando y debes esperar su respuesta.
sabes que hay una librería llamada GSM que hace eso esperando la respuesta del SIM800/900?

  1. Este es un error estético
 { 
      mySerial.println("AT+CIPSEND");//begin send data to remote server
      delay(4000);
      ShowSerialData();

      String str="GET https://api.thingspeak.com/update?api_key=SJ0376CZSHUF3I83&field4="+String(temp1);
      mySerial.println(str);//begin send data to remote server
      delay(4000);
      ShowSerialData();
    }

para que la llave que empieza y termina si no esta asociada a ningun comando de programación? No lo entiendo y lo repites varias veces.

Muy buenas surbyte, bueno, lo primero agradecerte que hayas repasado el código, la verdad que es un privilegio que sea repasado por alguien de tu nivel.

Respecto a los fallos que me has dicho, te voy respondiendo.

Las llaves del if fue al dejar más bonito el código que se me fue la cabeza (corregido)

Sobre los delays, ya se que todo el mundo recomienda su uso limitado, pero con mis capacidades limitadas es lo que me sale,ya que leí que Millis "no se llevaba bien" con el modo sleep, y que me parecía que era lo adecuado después de abrir los canales para que "coja aire" unos segundos el procesador, (aunque siguiendo tu recomendación lo reducire)

Sobre el delay de los comandos At..ufff...aqui entra a jugar el amigo Sim800l si los bajaba mucho, se me "rallaba", así que Le daba un segundete para que coja aire...pero aquí te hago dos preguntas rápidas :

-Entiendo que son necesarios los delay después de los at, no es así?

-Sobre la sucesión de comandos At que he puesto, agregarías alguna mejora?

Y miraré también la librería gsm que dices, esta semana la busco sin falta!

Ahora... Sobre reinventar la rueda....
Las 2 librerías que dices tanto mesh como network, lo he intentado por activa, por pasiva y de todo lo que he podido, pero respecto a lo que hay por Internet que no es mucho (o no he sabido buscar, ni en castellano ni inglés) me supera con creces..
Pero me supera muchísimo, y llegue a usar los ejemplos de la mesh, tiene mucho potencial, pero no soy capaz de mandar las float.. Mis conocimientos de programación son autodidactas 100% de hace 5 meses si llega, así que voy viendo ejemplos, y por ensayo error voy creando algo... Pero la comunicación bidireccional me costó mucho y lo hice porque se me solapaban los datos y te leí diciendo que lo tenias en casa y que era el máster el que preguntaba, no que los esclavos mandaran todo el rato información.. Asi que intente usar las ruedas de coche, pero me tocó quedarme con las de bici..jejeje

Lo dicho, gracias de nuevo por echarle un ojo! Normal que seas capitán!

Un saludo!

Sobre el delay de los comandos At..ufff...aqui entra a jugar el amigo Sim800l si los bajaba mucho, se me "rallaba", así que Le daba un segundete para que coja aire...pero aquí te hago dos preguntas rápidas :

Si claro pero tienes otra forma de hacerlo si estas de acuerdo con intentarlo.
Cada comando al SIM recibirá una respuesta. Hay librerías que envian el comando y esperan la respuesta y solo cuando la reciben te devuelven el control. Es como un delay sin usarlo.

Pero bueno hasta ahi no cambiaríamos nada. Pero ya lo verás igualmente no es significativo cuando usas el SIM, porque esa tarea involucra mucho tiempo y solo te impota enviar datos y punto.

-Sobre la sucesión de comandos At que he puesto, agregarías alguna mejora?

Hay que ver cada caso. La suceción suele ser necesaria porque no pones nada de mas, ya que supongo has tomado nota de alguna sketch. Yo hago lo mismo. Asi que supongamos que esta bien.

Las 2 librerías que dices tanto mesh como network, lo he intentado por activa, por pasiva y de todo lo que he podido, pero respecto a lo que hay por Internet que no es mucho (o no he sabido buscar, ni en castellano ni inglés) me supera con creces..

Bien entonces plantealo de otro modo.
Cuentanos que quieres enviar.. habla de al topología de tus nodos y el master

El master le envia que a que nodo, y estos responden con qué
Toda esa secuencia.. y cuando recibes algo, envias por SIM los datos o lo haces periódicamente?

Muy buenas de nuevo, como siempre agradezco tu implicación, la verdad que es un placer tener a alguien que te eche una mano!

Si claro pero tienes otra forma de hacerlo si estas de acuerdo con intentarlo.

Por supuesto que si! Mañana le doy a la busqueda de la libreria gsm adecuada,voy a buscar genéricas o hay alguna que te guste y que la recomiendes?

Bien entonces plantealo de otro modo.
Cuentanos que quieres enviar.. habla de al topología de tus nodos y el master

El master le envia que a que nodo, y estos responden con qué
Toda esa secuencia.. y cuando recibes algo, envias por SIM los datos o lo haces periódicamente?

Pues mira, era un master que "pregunta" a los nodos y estos le contestan con 3 float, temperatura, humedad y voltaje

Los nodos están siempre a la escucha, y el master se dormirá 4 horas y despertará automáticamente para pedir la info a los 3 nodos y acto seguirlo subirlo a internet...A no ser que se pulse uno de los 2 botones antes de las 4h , que entonces lo sacará del sueño y depende del botón que pulses, o lo saca del sueño, simplemente lee las variables y se vuelve a dormir, o si pulsas el otro, lo saca del sueño lee las variables y las sube a internet..

No se si me he explicado bien , pero hace la sintesis de las cosas que hace son estas:

-Pulsador 1 = leer variables de los 3 nodos y mostrarlas en pantalla
-Pulsador 2= leer variables de los 3 nodos , mostrarlas en pantalla y subirlo a inet
-Automáticamente cada 4h= leer variables de los 3 nodos y subirlo a inet

Como he dicho lo tengo en Sleep mientras no haga esto, y a las 4 horas se despierta y sube los datos solo, pero claro... que pasa si yo interrumpo para una simple lectura en la pantalla a las 3h? Pues que hasta las 4h siguientes no lo subira solo.. que eso me parece que sin un RTC no se puede gestionar, pero lo asumo totalmente!

Para no variar , aprovecho y lanzo una pregunta...porque si hago un sleep de más de 4h con el bucle for , no me responden las interrupciones adecuadamente? pero en cambio si lo pongo en sleep_forever me responde perfecto... creo que no las he programado bien porque me parece que he hecho una "ñapa" con eso .. pero me funcionan bien...

Como siempre cualquier duda o sugerencia será super bien recibida! Muchas gracias por la ayuda!!

Bueno tienes un master y 4 nodos que reportan que?

Pues mira, era un master que "pregunta" a los nodos y estos le contestan con 3 float, temperatura, humedad y voltaje

Lo he intentado explicar.. :frowning:

Cuando " la centralita" (el máster) solicita a los demás información de los nodos, y estos Le transmiten al máster 3 variables cada nodo, que son temperatura, humedad, y tensión...

No se si me he explicado bien...

En otro post, te había preguntado la corriente para saber si se puede medir lo que consume en mA cuando está conectado por usb.. Estaba bien preguntado, porque lo que quiero medir son los amperios para así calcular mejor los consumos... Pero cuando lo tengo alimentado por usb, al ser este el que Le da la corriente no puedo colocar el multimetro en serie.. A no ser que haya algún truquito que no sepa... Por eso preguntaba...

Pero cualquier duda me dices! Gracias de nuevo por echarle un ojo!!!

Hi,
Sugerencia para medir la corriente puedes usar el vin y en el cable del ground le anade una resistencia de como 1 ohmio y lo conecta al Vin. Con un voltimetro lee el voltaje atraves de la reistencia y divide el voltaje por la resistencia y te dara la corriente. Amperios = Voltaje/resistencia.

Muy buenas Tauro! Muy amable por contestar!! Aunque otra que se ma ha ocurrido es utilizar un medidor de consumo de usb, los típicos que llevan su pantalla, ya que tenía uno por casa... Pero me imagino que al conectarlo entre el puerto usb del pc y el arduino, perderé la comunicación Serial, ya que es lo que me interesaba mantener mientras media el conusmo...

El objetivo es la medición de mA mientras está conectado por usb para no perder la comunicación Serial.. (lo pongo así por si a alguien se Le ocurre otro sistema)

En el esquema que me has puesto, no lo llego a entender... Hay una batería con el voltimetro como en serie? Se me escapa un poco tu idea... Pero por si no me había explicado bien, la idea era medir los mA mientras estuviera conectado al usb... Y sino me equivoco, el vin te la tensión que entra por el mismo usb...
Es un poco lio lo que intento hacer, ni siquiera se si se podría pero por preguntar que no quede (en inet no he averiguado nada sobre esto) ...

Bueno ahora o mas tarde te hago una versión que transmita tus datos de temperatura presion y tensión
En realidad te hago el master y un nodo, ese nodo le cambias el id y ya lo tienes para los demás casos.

Hi,
Bueno si quieres tener una idea del consumo de corriente lo puedes hacer como ya te indique. Pues en la forma que te indique lo que haces es medir la corriente con usas usando el Vin como prueba. S i quires hacerlo por usb necesitas conectores que te permmitan poner la resistencia en el ground del USB. Mi esquematico como trabaja es que elvoltaje que entren por pin + y retorna por el nagativo que es el ground. En cable de ground le conectas la resistencia y de ahi al ground de power supply. Entonces con el voltimetro lees el voltaje atarves de la resistencia y usas la equacion y te va dar la corriente que usa el arduino. Eso ed todo. Esto var dar mas o menos la misma corriente que si lo hicieras por el USB.
Otra cosa es que si conectas un la resistencia antes del ground la puedes leer usando un analog input y puedes minitoria la corriente.

Bueno Tauro, de nuevo, muy amable por la respuesta! La verdad es que es otro sistema para el cálculo de corriente interesante, aunque claro, cuando quiero calcular consumos con el pin Vin, lo conecto a una batería, amperímetro en serie, y ya de ahí lo veo directo, aunque como dices, es otro sistema para calcularlo con el voltimetro.. Me ha gustado más lo de tener el usb y hacerle un apaño para sacar el positivo y ya de ahí calcular... Veré a ver que puedo hacer...

En realidad te hago el master y un nodo, ese nodo le cambias el id y ya lo tienes para los demás casos.

A ver, agradezco mil lo que me ofreces, es un privilegio la verdad, si lo quieres hacer porque TE APETECE enseñarme como se hace, perfecto, me parecería estupendo, pero de verdad que no te sientas forzado ni obligado, ni siquiera es necesario, ya te digo, si lo haces eso estupendisimo, los reestructuro y los modifico con lo que me digas, aprendo los conocimientos que no tuve coj**** a averiguar por mi cuenta y mejor, pero si no, los tengo funcionando al 100%, y sinceramente me sabria fatal hacerte perder el tiempo...

En fin, muchísimas gracias a los 2, da gusto tratar con vosotros!! Un placer!!!

Para medir los mA tienes ahora un dispositivo fantástico que se llama INA219 te dejo link de Adafruity tmb este que habla de la exactitud pero se equivoca porque el INA tiene una forma de calibración.

Creo que resuelve perfectamente tu problema. Mide los mA y tensión y la postencia consumida.

Ahora veré el tema nRF24L01

Bueno bueno, menudo inventillo el INA 219... tiene muy buena pinta...para cuando vuelva a hacer un proyecto a baterías me lo pillo seguro! Me parece una buena inversión para testear los consumos mientras lo tienes conectado al serial ( repito que no hace falta que te marees con el código hombre, se agradece muchisimo ,pero cuando te apetezca hombre , que ya te indiqué que me sabía mal!!) ...

Pero mientras tanto , me adaptaré con lo que tengo ahora y cuando saque consumos lo haré con baterías..

De momento tengo un nodo que no me gusta nada como está respondiendo...me llegaron ayer los cargadores de baterías 18650 y lo coloqué con una placa solar para hacer unas pruebas desde el balcón de mi casa... quiero creer que es porque no da el sol suficiente.. porque el sistema me ha perdido 1 Voltio en 1 día... y otras alternativas que se me ocurran para optimizar es quitar los led's integrados (hay 4), intenté quitar uno de un sensor de humedad que lleva una placa de control con 2.. y casi me lo cargo... Intenté buscar ejemplos en internet de si se podía apagar el led integrado del arduino... y lo único que me salía era el ejemplo del blink...

En fin.. no pasa nada.. algo se me ocurrirá.. aprovecho y lanzo 2 preguntas...

-Consumen mucho los led's integrados? porque he visto desde 15mA (como los normales, hasta 1mA, que me parece muuuy poco)

-Cual es la mejor manera para quitar esos led's? He leido que con cuchilla..jejeje,mi pericia hace que casi me corte el dedo... y con un soldador no he tenido gracia...(pero también me dio un poco de cosilla quitarlo, así que tampoco insistí mucho...

A vuestra disposición!!! y gracias por todo!!!!

Pero no se si viste que que el INA219 tolera tensiones altas como la de tus paneles solares y medir corriente con un Resistor Shunt de 1 ohms esta bien pero para derminados consumos provoca una caida de tensión importante que para una alimentación de 9V no es relevante pero si en 5V.
Por eso el INA219 usa un resistor shunt de 250 mOhms (mili Ohms) o sea 0.25 ohms.

porque el sistema me ha perdido 1 Voltio en 1 día

Quieres decir que el consumo de tu sistema le ha quitado 1 Voltiio a la batería 18650?
Y porque esta el sistema funcionando a FULL? Debes ponerlo a dormir y con eso resuelves gran parte del problema.

Lo que es una faenilla es que cueste nada más y nada menos que 10€, pero para futuros proyectos lo amortizare.

Pues si... Se ve que ha estado nublado, pero me parece que la he liado con el cargador de 18650...

Los paneles son de 5v, y las características del cargador son estas..

La tensión que tiene que debería de marcar entiendo que tiene que ser 8,4v en el + y en el - pero me marca sobre 5v ( más o menos lo que me suministra la placa...

En el nodo, ya tengo estabilizado el consumo.. 20mA y si se me enciende led del sensor 1mA, (entiendo que todos consumirán eso aprox..)

Si te importaría decirme si esta placa es buena para cargar las 2 18650 con la placa solar de 5v?

Muchisimas gracias!!!

Bueno, no alcanzo a ver nada de la placa. Su código, o bien puedes poner un enlace.

La imagen que pusiste debe visualizarse y para eso (lee de nuevo como hacerlo en las normas).

Perdón, vuelvo a revisar las normas, aun me estoy familiarizando con foro!!

Adjunto link:.

Gracias!!!