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

Buenos días comunidad! Lo primero un gran saludo a todos, llevo mucho tiempo leyendo por aquí y al final hoy me dedico a postear, me llamo Lucas y soy de Valencia(España). Tengo que decir que el apoyo que se brinda por aquí a la gente que realiza sus proyectos es increíble, así que he decidido dejar a un lado el ego (prefiero invertir más tiempo leyendo que en pedir ayuda a la primera de cambio) y pedir auxilio, ya que cuando uno va solo va más rápido, pero cuando va con gente llega más lejos.

Después del tostón de mi presentación (perdón sino iba aquí, he leído las normas y no he visto nada de ubicar las presentaciones, igual se me ha escapado) procedo a plantear mi duda.

Tengo 2 arduino nano, un máster y un slave.

El máster tiene:
Módulo nrf24l01 de alta potencia (el de la antena)
Pantalla lcd 20x4
4 baterías 18650
1 módulo sim800l
2 LM2596 (1 para el nrf y otro para el sim800l)
2 pulsadores (1 lectura de datos y otro para subir datos a inet)
2 Cargador de batería 7,4v 18650
2 placas solar

El slave
2 baterías 18650
Modulo nrf24l01 con antena
Sensor de humedad
Sensor de temp
1 lm2596
Cargador bat 7,4 18650
1 placa solar

Una vez expuesto el material, el proyecto consiste en que el máster solicite al slave la info y este se la devuelva al máster y depende del botón que pulsemos, la podamos visualizar en la pantalla o subirla a thingspeak a través del sim800l.

Como todas los proyectos de batería, el problema son los consumos...y el máster es es una auténtica feria...
En el slave lo he bajado a 30mA dormido, el nano se queda frito hasta que Le llega la interrupción por el pin del nrf24l01 y ahí ya empieza a funcionar, pero el máster... Ahí se me escapa y no se que hacer, he tenido varias ideas pero todas con resultados negativos, ya que tanto el nrf24l01 como el sim800l son exigentes con la alimentación...

-activar la alimentación de la antena y del módulo sim con transistores e incluso relés con resultado negativo
-activar la alimentación de los LM2596 a través de relés..
(esta es la que más me gusta, porque te ahorras también el LM2596 mientras no funcione)

Pero todas fallidas, el módulo sim800l, es muuuuuy guerrero, mete unos picos de 100mA que me salta la lagrimilla cuando lo veo.. Y nrf24l01 con antena también es caprichoso...

Entonces, mi duda, una vez el sketch se inicia y se pone a dormir, cualquier botón pulsado lo saca del letargo, así que mi idea es que se active un relé o un transistor y enchufe el LM2596 que controla el módulo nrf o el módulo sim, peeeero una vez hace esto, tengo que reiniciar el arduino físicamente para que funcione, conclusión si una vez se ha encendido el nano, conecto el módulo nrf24l01, no funciona, o no logro que funcione..

Con lo cual, pregunta concreta, se os ocurre algo para poder enchufar los LM2596 con el nrf24l01 solo cuando sea necesario?? Sabiendo que si lo conecto una vez encendido hay que reiniciarlo físicamente...

Y por supuesto, cualquier duda, sugerencia o critica, la recibire encantado!

Gracias a todos!!Espero haberlo posteado en la sección adecuada y haber cumplido las normativa, que hay que empezar con buen pie!

PD. No posteo código porque estoy hablando desde el móvil, pero el siguiente mensaje lo subiré con fotos!

Si has leido este foro, supongo que has leído lo que siempre recomiendo. Separa tareas y/o problemas.

  1. Problema al encender el nRF24L01 con antena.
  2. Problema al encender el SIM800L

Resolución. Tomo uno, lo acciono, le doy un tiempo para que se estabilice y veo como se comporta.. Luego repito la tarea bajando ese tiempo para que consuma menos.
Veamos.. todo dispositivo tiene sus tiempos de arranque. Si me dices que el nRF24 le cuesta arrancar es porque lo hace pero se comunica y de algun modo todo arrancando te genera probelmas de consumo.
Entonces establece una secuencia por prioridades. Y ve viendo que seguncia asegura un buen funcionamiento.

Eso haría yo. Mi respuesta es entonces es probar, observar y seguir probando hasta encontrar un equilibrio que garantice que todo funcione.

Buenas noches, lo primero perdón por haberlo metido en software....lo segundo siempre intento aplicar la recomendación de separar y luego juntar..

Sigo teniendo problemas con, lo que creo que es la alimentación del SIM800L, es un módulo quisquilloso, lo tengo directo a 2 18650 en paralelo, alguna sugerencia? (condensadores tal vez)

Como es tan especial con la alimentación, hay algún módulo sim más estable que recomendéis?

Sobre la alimentación de los nrf24l01 ya lo tengo claro y solucionado, resulta que de normal colocamos (al menos yo) la iniciación de los módulos en el setup, así que se "enciende" por software pero realmente aún no le hemos dado corriente con el LM2596, esto produce una contradicción y nunca jamás me ha ido a no ser que haya reiniciado...
Solucion introducirlo en la interrupción del botón y que desde esa función se enciendan los módulos, así puede estar apagado mientras esta dormido sin problema....

PD. Sigo pendiente de publicar mis avances y las fotos del proceso! Que tengáis buena noche y a ver si alguien me puede asesorar sobre un módulo SIM que consuma poco y sea estable! Gracias!!!

A ver.. no repitamos cosas. El módulo SIM800L ha sido tratado muchas veces. A si que ve a la LUPA (buscador de este foro) coloca SIM800L y lee todo lo que hay al respecto. Básicamente alimentación y tensión adecuada.
No juegues con ese módulo o lo vas a quemar. Te lo simplifico en 2 lineas. Nada de diodo o pavadas asi. Usa un Step down o lee algun hilo donde se hizo bien por gente que sabe lo que hace (no digo que tu no sepas pero aprovecha la experiencia de otros).

Hi,
Pregunta: Como alimentas el systema con las baterias y el panel solar? Alimentas con el panel solar las baterias y las baterias al LM2596 y este al micro.

Hola! Gracias por contestar, se agradece que gente de vuestro nivel pierda el tiempo conmigo!!! No pretendo repetir cosas, la verdad es que me he quemado los ojos leyendo sobre el sim800l (perdón, parece que se ha publicado sólo un trozo...) y ya he tostado 3..pero bueno, lo alimento con un step down Como bien dices... Pero sigue sin convencerme la estabilidad de la alimentación ni la estabilidad... Por eso preguntaba por si alguien tenía experiencia en estos módulos y me decía, utiliza el sim900 y manda a freír por ejemplo...

Pero bueno, sobre la alimentación es la placa solar de 250mA y va a un cargador doble de 18650.. Luego de ahí a los pines Vin y ground y a funcionar

Hi,
Si lees las especificaciones del sim800 este tiene que alimentarlo con un voltaje de 3.8 a 4.2 ni mas ni menos.Tambien tienes que tener una fuente de energia que supla por lo menos 2.5 amperios.
Aqui tienes las especificaciones del sim.

Supply voltage: 3.8V - 4.2V <<<<<<<<<< voltaje de trabajo
Recommended supply voltage: 4V <<<<<<<<<< recomendado el voltaje trabajo
Power consumption:

GSM transmission (avg) : 350 mA
GSM transmission (peek): 2000mA <<<<<<<<< corriente maxima

Interface: UART (max. 2.8V) and AT commands <<<<<<<<< el voltaje debe de ser 2.8v maximo o lo danas

Ok, muchas gracias por los apuntes, igual es problema de que no me he fijado demasiado en la tensión empleada.

Voy a lanzar una pregunta concreta... si tuvierais que generar un sistema que envíe los datos a través de gms, que módulo usaríais para subir los datos a thingspeak??

Seguiremos probando, observando y a ver si consigo estabilizar el módulo del demonio este. Muchas gracias a ambos, que tengáis buena noche!!!

Ese modulo, el SIM800L ha dado problemas a gente incluso con experiencia, de modo que no es para subestimarlo porque pasa como te ha sucedido.. solo es un problema tras otro y como dice el dicho: lo barato sale caro.

Y cuando hablo de caro me refiero al tiempo en horas de trabajo y dolores de cabeza y eso si logras hacer que funcione.

Todos usamos el modulo sea SIM900 (casi descontinuado) o el SIM800 en versiones que ya te mostraré con una foto.
No dan problemas y ademiten tensiónes de de 5 a 20 V 2A incluso puedes alimentarlo

Este modulo SIM900 tiene tutoriales x todos lados 9.92 euros

Yo tengo este que es un SIM808 (GPS/GSM/GRPS) x 12 euros aprox

Anda perfecto, y como dije tiene alimentación de 5 a 20V 2A. Le pones una fuente y 0 problemas.

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) ...