Domotizacion de finca.

Buenas noches.

Para mejorar la comunicación e ir haciendo pruebas he comprado un Shield ethernet que le conecto al arduino uno que es el receptor y el emisor es un mega.
cada arduino tiene un transreceptor nlf24.
Se comunican perfectamente, pero he querido añadir un shield ethernet al receptor para cablear la salida de datos hacia un swich.
La cosa es que después de muchas pruebas y ver que el Nlf24 con va con el Shield w5100 he investigado y veo que no es compatible el shield y el nlf24 porque el shield emplea el bus SPI, el mismo que el ethernet.

Al fin y al cabo el módulo nlf24 me da igual porque es un medio de hacer pruebas inalámbricas, pero tengo pendiente recibir un LoRA SX1278 y veo que se comunica con el bus SPI , por lo tanto me veo restringido por culpa del Shiel ethernet.
alguna idea de como usar el Shield ethernet y el bus spi para otros dispositivos a la vez?

Un saludo

Bueno, me contesto a mi mismo, por si alguien que llega hasta aqui leyendo se encuentra con el mismo problema.

Segun parece, es posible cambiar el uso de los pines asignados al bus SPI mediante software aunque parece que relentiza el flujo de datos.

Aqui adjunto la fuente.

Tambien he visto dispositivos Lora que utilizan el bus I2C por lo tanto usando esta opcion, no existe conflicto ni relentizacion.

Un saludo.

un saludo,

Lo mismo que se hace con el I2C se puede hacer con el SPI. Solo hay una pega, es que se necesita un pin CS (chip select) o SS para cada esclavo del bus.

El arduino ofrece un control hardware sobre el pin que actua de CS, que generalmente usan las librerias que de varios dispositivos.

En el shield ethernet no tengo ni idea, pero la libreria del NRF24 si la he usado y te digo que trae la opción de elegir tu propio pin CS. Así que en teoria si podrías usar ambos modulos en el mismo bus.

No se ralentiza en tanto y en cuanto en tu código no uses delay().
No hay razón para que algo demore salvo los tiempos de algunos sensores pero hoy encuentras librerias llamadas non-blocking que ni eso resulta una limitante.

Para dar un ejemplo concreto: el DHT22 es un sensor de temperatura y humedad muy usado pero su consulta demora 2 segundos en la gran mayoría de las librerías salvo 1 o 2 que son NON-BLOCKING o sea no frenan el flujo del programa.

Respecto al tema de la adquisicion de datos, estoy a punto de descartar el medidor ultrasonico por las siguientes razones:

1-Es un sistema que tiene que ser un ultrasonico fiable y con un angulo de apertura correcto y proporcional al diametro del deposito y altura para que la onda ultrasonica solo rebote por el fondo y no por las paredes.

2.- Las olas del flujo de entrada salida pueden afectar a la lectura.

Por todo ello he pensado que voy a usar un trasductor de presion. Aportan un señal fiable y sin oscilaciones. Dan una señal en voltaje proporcional a la altura.

1m.c.a (1 metro de columna de agua ) aprox igual 1 Kg/cm2; 10.2 mca= 1 bar..

Ojo con el diamerto de salida, porque si se acelera mucho la velocidad baja la presion y falsifica la medida. y habria que medir cuando no hay demanda de agua, o corregir la medida o tomar la señal en un punto del fondo del deposito que no se afecte por el flujo de salida.

Por lo tanto en la salida de un deposito se pone un collarin y un transductor de presion, del rango de presion correcto y listo y sin tantas correcciones.
Para un deposito de 6 m de altura se debe emplear un trasductor de 10 PSI aproximandamente.
Lo que desconozco es el comportamiento a largo plazo del transducto con las calcificaciones. Supongo que si esta relleno de silicona o gliceria ayudaran. Tambien ayudara la calidad de los materiales, pero he visto sensores economicos y mas fiables que a traves de ultrasonico.

Cuando tenga decidido uno y lo pruebe pongo el enlace y os cuento.

Saludos.

Tienes que usar un sensor de presión diferencial.
Una boca mira la atmósfera y la otra conectada donde has dicho. Asi es como muchos medimos el nivel de tanque. El Ultrasónico funciona cuando es de buena calidad. Mi hermano tiene un sensor Massa M-300 que anda muy bien. Yo tmb lo tengo y lo he hecho funcionar aprovechando su salida analógica pero no le he puesto tiempo para medir su salida RS485 que mejora notablemente las lecturas.
Puedes corregir muchas cosas pero como dije es un sensor semi-industrial. Gama media digamos.

Buenas.
Aquí vuelvo para pedir ayuda y comentar algunos avances. Para saber la altura del deposito en vez un ultrasonido, voy a usar un transductor de presión que da una señal 0-5 v en función de la altura del agua. Se conecta a la parte baja del deposito. La presión oscila entre 0 bar y 0.5 bar y el sensor llega a 0.6 bar asi que perfecto. Aqui articulo

Respecto a el sensor barométrico voy a usar este:
BME280 Aqui articulo que mide humedad , presion y temperatura. He probado y son bastante estables en la lectura.

Respecto a pluviómetro es este articulo : Aqui
Tiene un pequeño cubeto de 0.27 ml. cuando se llena genera un pulso. Contando y sumando los pulsos,podemos saber cuanto ha llovido.

Para comunicar 1 de los Arduinos que estará alejado, he probado a usar un modulo LoRa Sx1278. y
aqui entro en mi problema. Aqui articulo por si interesa a alguien.

Resulta que hace muchos años que estudie C++ y he perdido practica y conceptos. No quiero usar punteros. Resulta que con las pruebas iniciales que hice con el modulo nRF24L01, las funciones ya escritas de las librerías permiten enviar de un módulo a otro un Array del tipo que sea por ejemplo Float.
En este proyecto va a haber varios Arduinos, calculo que 3 enviado datos y uno recibiendo los datos y subiéndolos a Internet

La idea es que cada Arduino envíe un Array de números. El primer numero del Array sera el identificador del emisor, así el receptor sabrá quien envía y donde almacenar esos datos.
El caso es que los números a enviar son números flotantes con coma y las librerías que he visto en Internet y he buscado eh......, solo admiten como mucho Arrays de Bytes, por lo que pierdo mucha información.
Una opción es olvidar la parte de la coma y redondear lo que me parece una chapuza.

Para mandar caracteres no hay problema. se puede enviar un Char sin problema, pero no puedo enviar un Array de Float.
He mirado en la librería <RadioLib.h> en <RadioHead.h> y en <LoRa.h>

En ninguna librería he visto alguna función para transmitir un Array Float.

También he visto vídeos en Internet y he leído algunos artículos pero me pierdo en alguno que por ejemplo usa un puntero para convertir Float con varios Bytes.
Quizás el tema este aquí, en usar varios Bytes para enviar un Float, pero no sabría como sin que la operación sea muy compleja.

¿Me podéis echar una mano?

Un saludo.

Dejame verlo y te digo como resolverlo.

Buenas,
Ya lo tengo mas o menos encarrilado.
La librería Radiolib.h, permite enviar un array de bytes.
El truco que estoy utilizando en esta librería es enviar el numero en distintos bytes. Parte entera en un byte, parte decimal en otro byte y signo en otro byte. Al final se recompone el numero en el receptor.

Esta libreria no la estoy utilizando porque al final la mas empleada es lora.h. Casi todos los ejemplos de internet la utilizan.

La librería lora.h, permite enviar un Char. El Char es un array. En esta librería el modo que empleo es redondear a 2 decimales primero , después multiplicar por 100 el numero, así lo tengo entero y le sumo una parte decimal que corresponde a la identificación de la estación. Ejemplo:
Quiero transmitir el número 1120.45 ,que es un dato de presión atmosférica y corresponde a la estación 02, que es como por ejemplo lo identifico. Multiplicamos por 100 el número y tenemos 112045 y le sumamos el 0.02, tenemos entonces 112045.02. Como tal lo trasmitimos como char.
En el receptor recibimos el número, convertimos el char en float, y hacemos la operación inversa. Es cuestión de cacharrear con números.

Ya tengo un emisor y un receptor funcionando y subiendo datos a thingspeak.

Ahora mi problema es depurar el programa, optimizarlo.
La verdad que aquí no se por dónde empezar. A ver si me podéis aconsejar.
También he empleado unos módulos basados en Esp32 que traen Oled integrado wifi y lora.
tipo TTGO ESP 32 Lora.

Funcionan, pero se cuelgan al tiempo. No se la causa segura de este cuelgue, mientras que los módulos Arduino aunque menos vistosos y potentes no se han colgado.

Estoy empleando como emisor un Arduino uno, y como receptor uno similar a uno con Ethernet integrado.
Este receptor al cargar el programa dice que la memoria está por encima del 65 %, sin embargo no se cuelga .
Usando un Mega va mucho más sobrado de memoria se queda en un 15 %.
En ambos casos no se cuelga el sistema como pasa con los módulos ESP32 chinos.
No sé si es el código o cual es el motivo.

He estado moviéndome con coche por el entorno del emisor con receptores ESP a una cierta distancia 1000 m o más y he observado que el cuelgue tiene relación con la falta de calidad de señal o bien una interferencia.

Aquí estoy algo perdido, no sé qué podría hacer para evitar que una interferencia cuelgue el receptor, aunque en Arduino aún no he visto cuelgues y en el modulo Esp aunque pegado al emisor he visto cuelgues aleatorios al tiempo.
Para visualizar lo que se recibe utilizo el serial.print. Muy de vez en cuando recibo una interferencia se llena toda la pantalla de caracteres ASCII. Es decir, en ese momento, el chart que recibe el dato, se llena y pienso que se desborda. Creo que esa puede ser una causa de cuelgue.
El modo de funcionar es que el receptor recibe todos los paquetes, se identifica la estación receptora y en función de esa identificación se ejecuta una acción determinada con el numero recibido.

He pensado en que cuando se recibe el char, si el dato no corresponde a ninguna estación conocida es un ruido y por tanto limpiarlo, haciendo : char="";
No sé si esto servirá.
Darme consejos por favor.

Un saludo,

Sigo aumentando el número de preguntas.
Una vez probado el prototipo, me han surgido una serie de inconvenientes. como no podía ser de otra manera, me refiero a la señal. Sé que con la señal Lora en cambio abierto no voy a tener problemas, pero para evitar perdida de paquetes, tengo intentar que exista visión directa más o menos. Eso implica poner la antena en un lugar elevado. He pensado poner el modulo Lora Sx1278 Ra-2 en una caja estanca en un mástil y el Arduino en el interior en un lugar donde no esté al exterior. sería un cable de unos 9 hilos, y apantallado para evitar interferencias. Es un dispositivo SPI, que es como se comunica. Os quería preguntar por vuestra experiencia. Sé que con la alimentación no va a ser un problema porque es un consumo muy bajo. el problema es la interferencia entre los cables de datos.
La distancia máxima serán unos 15 metros.

También os quería preguntar otra cosa. El recepto que subirá los datos a la nube, será un Arduino Mega con un Shield ethernet que me da menos problemas que una wifi y un esp32.
La pregunta es que para que quede bien montado voy a usar un Terminal Block Shield. El Terminal se monta sobre el Arduino y sobre el terminal ira un Shield Ethernet. Las placas terminal no suelen traer el conector ICSP, pero el Shield RJ45 si lo trae.
Me refiero al conector central que va en medio del Arduino y es de 6 pines macho. El modulo Lora ira conectado encima de todo.
El Terminal no tiene ese conector, y el Shield si se conecta.
La pregunta es. Si suprimimos ese conector pasa algo?
Dejara de funcionar el Shield ethetnet o el bus SPI?

Un saludo

Bueno ahora ya no tengo preguntas de hardware, sino de la programación.
Necesito ayuda con una parte concreta.

Resulta que recibo un paquete de datos en un string, "LoRaData"

Por lo tanto, si el valor recibido en strin vale por ejemplo "41902", corresponde a 4.19 es el valor del numero y la estacion es la 2.

Pues bien, en este caso la operación de conversión se hace mal, y me dice que es la estacion 1, cuando es la 2. Se que es un problema con el tipo de variables y redondeos.
A continuación os enseño el tipo de variables que uso y el metodo para convertir y separar las partes.

String LoRaData;  // datos que recibe de módem. 

int estacion;        //  numero de estación que me manda un dato.


LoRaData = LoRa.readString();   //hacemos igual el string a la cadena recibida. Recibimos el string.

float dato = LoRaData.toInt();  // esta funcion  redondea el string en un int y después convierte en un float el valor recibido 

int round (estacion= ((dato/100) - int(dato/100))*100);// esta parte resta la parte entera del numero a el numero entero con decimal. en el ejemplo se supone que debe restar a 419 el 419.02 para quedarnos con el 0.02 y despues multiplicarlo por 100 para llegar a 2.


if (dato>=0){estacion=estacion*1;}  // para que siempre sea positivo en numero de estación.
if (dato<0){estacion=-estacion;}      //  para que siempre sea positivo en numero de estación.

float valor=dato/10000;    //Aqui tenemos el valor recibido. En esta parte no hay problema.  El problema esta en la parte de la estacion, y es por el redondeo de los decimales, pero no consigo resolverlo.

Pido disculpas si no es el modo correcto de enviar el codigo, pero he querido explicar las cosas para que me podais indicar.

Por cierto, respecto a la pregunta del bus ICSP, que hice, os digo que si la shield no la lleva, mal asunto. No va a funcionar la Shield. Debe tenerlo.

Un saludo,

Qué es 4.19? qué magnitud? Nunca puede ser 41.9?
Explicado como lo estas explicando solo lo entiendes tu. Y se supones que le cuentas a todos.
Ademas tu forma de resolverlo para 4.19 vale si luego cambia a 10.34? digo porque haces operaciones exclusivas para 3 caracteres enviados como enteros.

Feliz año nuevo a todo@s antes de otra cosa.

Ya tengo el sistema funcionando y subiendo datos a ThingSpeak. Os pongo el código para que me aconsejéis sobre posibles problemas en el código o en el hardware.
Estoy en fase de pruebas. Algunas veces el sistema ha dejado de mostrar datos por el puerto serie y por tanto de subir datos a la nube, pero los leds de la Shield parpadeaban y respondía al ping, por lo que no es que estuviera colgado sino algo diferente.
El monitor serie está muy presente en el código para visualizar el funcionamiento y depurar errores, pero en el futuro cuando este en mitad del monte no será necesario.
Si cerraba el monitor serie y lo volvía a abrir, los datos de paquetes recibidos empezaban a recibirse, por lo que he pensado que quizás es alguna interferencia en el monitor serie con el pc y he hecho // Serial.begin(); y ya no inicializo el puerto serie, y así lo he vuelto a compilar. Lleva ya varias horas, a ver si no hay funcionamiento errático.

Explico el modo de funcionar:
Habrá 5 Arduinos en total. 4 enviando datos en distintas partes y 1 recibiendo.
Los emisores a falta de cambio serán.
• 1 Arduino uno emisor con 2 sensores de temperatura (1 BME 280y 1 BME 280,) que me indicaran temperatura y humedad de una caseta de bombeo y del cuadro eléctrico, 1 Emisor Lora 433 Mhz sx1278- Ra2 con antena exterior, 1 transductor de presión nivel de señal 0-5 v en función de la presión (altura del depósito), 1 sensor de humedad de suelo capacitivo, también un relé externo que abrirá o cerrara el paso de corriente en función de si el motor donde se aloja está o no en marcha. Este emisor esta funcional y enviando datos (en casa) a falta del sensor de humedad que aún no me ha llegado.

• 1 Arduino uno emisor en una caseta de un pozo, con un sensor BME 280 para saber humedad y temperatura de la caseta de bombeo, relé para saber estado del motor, un transductor de presión para saber la profundidad del acuífero, 1 electroválvula neumática y 1 relé de estado sólido para arrancar un compresor. Esto funcionara de la siguiente manera. En el fondo del pozo hay un tubo de plástico fino 4mm, 6 mm, algo así, que llega hasta la parte más profunda del pozo. Si metemos aire por el tubo, llegara un momento que el aire empujara el agua que hay dentro del tubo hasta que haya salido todo el agua y el aire empiece a salir también. En ese momento si cortamos el paso de aire el agua intenta entrar dentro del tubo, pero la presión de aire se lo impide. En se momento, la presión dentro del tubo es igual al de la columna de agua que tiene encima. Si manualmente miramos con un manómetro veremos una presión. Esa presión es la altura de la columna de agua o la altura de agua que tiene el pozo. El Arduino ha de arrancar el compresor cada 12 horas durante 4 minutos de modo que se cargue de aire el calderin, después abrirá la electroválvula durante 1 minuto, para asegurarme que ha desplazado toda el agua de dentro del tubo. Después cerrara la válvula y tomara la presión de ese circuito neumático. Esa presión es la altura de agua. También tomara cada 5 min el dato de si el motor está en marcha o no y la humedad del suelo cercado con sensor capacitivo. Este Arduino no está aún implementado ni el código.
• 2 NodenCu, es un TTGO con lora 433 MHz integrado, pantalla .96 oled, Esp86. Emisor, conectado un sensor de humedad de suelo y un transductor de presión para saber la altura de un deposito. Aquí mi duda es sobre los niveles. Trabaja a 3,3 voltios, pero el transductor de presión trabaja a 0-5 voltios, por lo que aún no se cómo resolver este problema. Quizás al final ponga un Arduino uno. Creo que los Arduinos son más estables que los NodemCu, pero es solo una sensación. He observado varios cuelgues en el Nodemcu, configurado tanto en emisor, como al principio que lo probé como receptor. He optado por configurarlo como emisor y he observado un cuelgue también, por lo que he desactivado el monitor serie en el código por si acaso, a ver qué pasa si es esa la causa. El emisor que tengo funcionando con un Uno no se ha colgado nunca, por eso creo que al final pasare de los NodemCu.
• Un receptor que es un Arduino Mega de Elegoo. Lleva una Shield ethernet W5500 marca Keyestudio, un módulo BME 280, un anemómetro señal 0-5 voltios, un pluviómetro de pulsos, una veleta de dirección de viento y un módulo sx1278-ra2 con antena externa. También para facilitar el conexionado se montará en una segunda Shield que lleva terminales de tornillos para conectar más fácilmente los sensores. Aquí hay varios retos uno de ellos es saber cuánto puedo alejar un módulo del Arduino. Por ejemplo, el sensor de temperatura ira fuera de la caja estanca. Se comunica por I2C. No se la distancia máxima que puedo alejar el sensor del Arduino. Las señales que son digitales son las que me preocupan. También me gustaría alejar el módulo Sx1278 del Arduino para buscar más altura y ganar señal, pero no sé qué tal se comportará. En el caso de este módulo hablamos de 9 cables. Es más complicado. La función del receptor es recibir las señales de los otros Arduinos, así como las variables meteorológicas ambientales y subirlas a la nube, mediante un conector RJ45 que ira conectado a un router GSM movistar ya que no hay civilización en kilómetros. El receptor funciona y sube datos a internet tal y como he dicho antes, pero me gustaría consejos y ayuda para optimizarlo.
A continuación, explicó un poco el modo de funcionar una vez descrito el hardware. Cada variable tiene un código único, de modo que por ejemplo el deposito principal es el número 1.
El emisor cada cierto tiempo, toma el dato de presión del transductor de presión y lo convierte en altura. Pensar que la altura del depósito deposito es 4.19 m. A continuación, toma el dato y lo multiplica por 1000 de modo que tenemos 4190 es nuestra parte de datos de altura. Para que el receptor sepa que hacer hemos de decirle a continuación el número de estación. En este caso se le suma la parte decima. La estación 1 sería la .01 ya que uso 2 dígitos. Entonces paso el número se convierte en String y se le suma la cadena.01, así mi String completo seria 4190.01 (4190 numero) y (.01 estación correspondiente a deposito principal)
En el receptor hacemos el paso inverso.
Una vez recibido el String hago 2 operaciones, lo paso a número y desprecio la parte decimal, así me quedo con el 4190.
Respecto a la estación, hago una búsqueda el lugar donde está el punto (.) a partir de ahí extraigo el valor. Del string extraigo el valor a partir de ahí convierto este número en entero y multiplico así ya tengo el número de estación. Comparo el número de estación y en función de la estación, muestro los resultados y los subo a la nube.
También decir por si antes no me he explicado bien, que este Arduino se encargara de recoger los valores meteorológicos ambientales de lluvia, viento, temperatura, presión humedad, etc.
Para el pluviómetro se utiliza una interrupción.

Quiero implementar un Watch dog timer, pero no se si mi arduino soporta el boot, no se donde se mira eso. Son modernos y unos chinos que aun no me han llegado.

Respecto a la tarjeta de red me gustaria saber si puedo hacer esto: en el loop:

if (Ethernet.begin(mac) == 0) {
    Serial.println(F("Failed to configure Ethernet using DHCP"));
    // no point in carrying on, so do nothing forevermore:
    for (;;)
    ;
  }

Eso seria si se pierde la conexión por un tiempo y no vuelve a conectar, para forzar volver a conectar.

Respecto a que se quede como sin recibir datos y subir datos a la nube, podría ser del lora. He leído algo en Internet. Igual que con el Shiel, si por ejemplo no recibo datos en 10 min, podría volver a inicializar el lora en midad del loop asi: ?

if (!LoRa.begin(BAND)) {
    Serial.println(F("Starting LoRa failed!"));
    while (1);

En este modo se inicial el modulo, por si no responde en un tiempo volver a despertarlo o forzarlo a despertar.

Un saludo, espero consejos.

Adjunto el código del receptor que es el mas gordo y el de uno de los emisores que manda mas datos.
algunas funciones en el receptor no están completas como por ejemplo la de la dirección del viento.

receptor.ino (38.7 KB)

emisor_1.ino (26.1 KB)

Aquí mi duda es sobre los niveles. Trabaja a 3,3 voltios, pero el transductor de presión trabaja a 0-5 voltios, por lo que aún no se cómo resolver este problema.

El sensor debe alimentarse con 5V que puedes obtener de como alimentas al nodemcu, pero el AD del nodemcu si mal recuerdo no puedo leer mas de 1V asi que tendras que poner un divisor resisitvo para que mida los 0-5 como 0-1V

uiero implementar un Watch dog timer, pero no se si mi arduino soporta el boot, no se donde se mira eso.

Todos los arduinos tienen la posiblidad de usar Watch dog. Busca Arduino Watchdog y listo.. google proporciona las respuestas.

Respecto a las preguntas de software, luego te respondo.

Como int EthernetClass::begin()
Devuelve 1 si fue exitoso y 0 si no lo fue, lo que propones esta bien.

Respecto del LoRA ese comando es el que inicia la comunicación.

Asi que creo que funcionará tmb

Buenas.
Gracias por todas las respuestas, ayudan a encarrilar el asunto.
Ayer después de 6 horas subiendo datos a la nube, el receptor dejo de subir datos. He de decir que esta alimentado por USB a través del USB 3.0 del ordenador. A la hora de irme a la cama y apagar el PC fue cuando dejo de enviar, como si hubiera algún tipo de pico de tensión que a través del USB me desestabiliza el Arduino.
He medido por cierto la tensión con un polímetro en la salida de +5 del Arduino y es de entre 4 y 4, 5 voltios en lugar de 5 voltios, no sé si esta es la causa, de fallos de algunos componentes, que está al límite de tensión.
Si lo alimento a través de la entrada normal sube algo más.
Ahora sin embargo lleva funcionado perfectamente más de 16 horas y no ha dejado de funcionar. Creo que es un problema de tensión.
En cualquier caso, en el campo pienso ponerle una mini fuente conmutada MeanWell de 12 v y un convertidor de tensión Step-Down, espero que con esto la tensión sea estable.
La duda del Watch dog timer no es sobre que es, sino sobre el boot de mi Arduino. El gestor de arranque.
Todos son compatibles grabando un nuevo gestor de arranque , pero lo que quiero saber el gestor de arranque que tiene un Arduino instalado para ver si es compatible directamente o hace falta grabarle uno nuevo.
He visto que es un follón para saber si es compatible. Aquí por ejemplo lo explican: enlace,
por eso quería saber si hay un método más rápido o alguien me puede decir que ahora, en 2020 (este tutorial es de 2012) hay un método para saber si mi Arduino es compatible con Whatch Dog mediante un programa que se conecta por USB u otro método más rápido.
He visto un modo de auto Reset, que de hecho esta implementado en el código que subi, pero que no he explicado. Un cable conectado del pin digital al reset de Arduino. Cada 24 horas, lo resetea con un “1” lógico. La idea es resetear, para prevenir fallos o cuelgues, asi reinicio millis() ; también. Con posterioridad he observado que el reset se hace con un “0” lógico aunque el código está hecho para un “1” y también he leído que el arduino al reiniciar pone todos los pines a 0, por lo tanto entraría en un bucle de reset continuo. ¿Correcto? Si es así, necesito una idea, no me apetece empezar a trastear con un timer 555, he visto circuitos para hacer el reset, pero me apetece algo más simple.

Todos son compatibles grabando un nuevo gestor de arranque , pero lo que quiero saber el gestor de arranque que tiene un Arduino instalado para ver si es compatible directamente o hace falta grabarle uno nuevo.

Gestor de arranque, supongo que sera bootloader, si así llámalo de este modo que es como todo el mundo lo hace pero bueno si lo confirmas igual te entenderé, es la primera vez que leo que alguien lo llama así.

Jamás me he metido con el tema. Saber si algo es o no compatible con el bootloader. Todo lo que uso lo es.
Cuando grabas un bootloader lo haces con versiones conocidas de modo que de nuevo, serán UNO, NANO, MEGA de modo que siguen siendo compatibles. No se si entiendo a que apuntas.

A la hora de irme a la cama y apagar el PC fue cuando dejo de enviar, como si hubiera algún tipo de pico de tensión que a través del USB me desestabiliza el Arduino.

A la hora de apagar la PC... si apagas la PC no pretenderás que siga funcionado tu Arduino alimentado por USB no ? De nuevo, no se si te comprendo bien, para mi es obvio y si, usaría una fuente externa y ya que tu prueba te ha dado varias horas sin problemas creo que tienes la respuesta.

He visto un modo de auto Reset, que de hecho esta implementado en el código que subi, pero que no he explicado.

Las fallas que presente tu sistema las tendrás que ir resolviendo paso a paso.

Usas sistemas de comunicación diferentes terminan teniendo problemas y soluciones distintas.
No es lo que te sugerí pero es lo que adoptaste por las características de tu finca.

Estas en este momento buscando el ajuste de todo el sistema y creo que vas muy bien.

Para mi el Reset debe hacerse con elementos propios no con elementos externos. Los micros tienen su watchdog, si algo no funciona y esta colgado,la rutina de watchdog genera un autoreset.
Para qué usar un 555? Me parece algo Cromañón junto a un LoRA por ejemplo.
El que decide eres tu. Yo no lo haría y es mas.. lo usaría como ultimo recurso.

surbyte:
Gestor de arranque, supongo que sera bootloader, si así llámalo de este modo que es como todo el mundo lo hace pero bueno si lo confirmas igual te entenderé, es la primera vez que leo que alguien lo llama así.

Jamás me he metido con el tema. Saber si algo es o no compatible con el bootloader. Todo lo que uso lo es.
Cuando grabas un bootloader lo haces con versiones conocidas de modo que de nuevo, serán UNO, NANO, MEGA de modo que siguen siendo compatibles. No se si entiendo a que apuntas.
A la hora de apagar la PC... si apagas la PC no pretenderás que siga funcionado tu Arduino alimentado por USB no ? De nuevo, no se si te comprendo bien, para mi es obvio y si, usaría una fuente externa y ya que tu prueba te ha dado varias horas sin problemas creo que tienes la respuesta.

si me refiero a esto. En definitiva el "BOOTLOADER" de los primeros Arduinos no era compatible con el WDT y al implementarlo en el Sketch, se colgaba, por eso mi pregunta.
Mis Arduinos son actuales, y algunos son Chinos..... por eso no se si traerán grabados una versión nueva o antigua de "BOOTLOADER", y por eso preguntaba si alguien sabe alguna manera sencilla de averiguarlo.

surbyte:
A la hora de apagar la PC... si apagas la PC no pretenderás que siga funcionado tu Arduino alimentado por USB no ? De nuevo, no se si te comprendo bien, para mi es obvio y si, usaría una fuente externa y ya que tu prueba te ha dado varias horas sin problemas creo que tienes la respuesta.

Mi USB del PC da energía siempre, encendido y parado.

Hoy después de 18 horas a las 02:10 de la madrugada se ha parado sin motivo.
Me he aburrido de los módulos Sx1278 chinos de Amazon.
Creo que ahí puede estar el fallo. He comprado 4 de los cuales, 1, parece que envía, bien , es el emisor que tengo con un Arduino uno original (Quizas ahi esta la diferencia, el original), el segundo lo probé en el receptor y unos de los bytes que recibia, mostraba caracteres aleatorios, osea no iba bien, un tercero es el que tengo puesto ahora en el Arduino Mega y esta bajo sospecha y un cuarto que no recibe bien los paquetes si no esta justo al lado del emisor. Diria que mi experiencia con el modulo SX1278, clonico ha sido nefasta.

este es el anuncio: SX1278 Lora 433Mhz Vendedor TECNOIOT

Así que me he calentado y me he pedido un Dragino Shield Lora, que aun seguro que es chino, pero es original, y es una solución integrada y bien acabada.
A ver que tal.

Draguino 433

El único inconveniente es que utiliza otra librería distinta y las funciones son distintas así que mirare a ver y ya os contare.

si es estable, que debe serlo, creo que sera la solución definitiva, así que por ahora el Sketch que he subido al menos en la parte de librerías y a falta de lo que me digáis que veis no es definitivo ni mucho menos.

Un saludo

Mi USB del PC da energía siempre, encendido y parado.

Eso es lo que piensas pero tu mismo dices que cuando apagaste la pc falló de manera que algo pasa y no funciona como crees.
Tal vez tenga que ver con que espera estar cargando algo y como el arduino no se carga como una batería de algun modo puede ser que lo desconecte. Recuerda que hay cierta inteligencia en las cosas. Se espera un determinado comportamiento, no algo pasivo que solo consume. Sino algo mas activo que cambia su estado de carga conforme justamente alcanza el potencial deseado.

En definitiva el "BOOTLOADER" de los primeros Arduinos no era compatible con el WDT y al implementarlo en el Sketch, se colgaba, por eso mi pregunta.
Mis Arduinos son actuales, y algunos son Chinos..... por eso no se si traerán grabados una versión nueva o antigua de "BOOTLOADER", y por eso preguntaba si alguien sabe alguna manera sencilla de averiguarlo.

Yo tengo todos los arduinos chinos, y jamás me falló un bootloader cuando lo usé. El único posible problema reside en poner los drivers correctos, sea CH341x o CH3102 etc.
Asi que no puedo darte una respuesta segura, pero como dije: he usado WDT solo cuando no tengo mas alternativa porque prefiero ponerle tiempo al sketch asegurándome que funciona bien. Estoy de acuerdo que cuando algo se cuelga a los 5 dias es todo un tema encontrar la falla. Asi que ahi estoy contigo y si me aburro y se me acaba el tiempo le pongo WDT.

Respecto de los LoRA no puedo decirte nada pero realmente es increíble lo que comentas. 2 LoRA chinos cuestas la mitad de 1 original. Asi que te has comprado 4 de los que no sabes si alguno funciona. Tremendo!!
Seguiré tu experiencia de cerca, pq yo aún no la he hecho, tengo un proyecto en fase presupuesto que no ha sido aprobado pero con tu comentario ya que que elegir.

Buenos días,

Ya he implementado el Watch dog y funciona perfectamente, va como un reloj y reinicia como estaba previsto la tarjeta ethernet y el Lora, por lo que ha llegado para quedarse.
Estoy muy contento con el rendimiento del Shield Lora Dragino 433 mhz. Va de maravilla. No he visto comportamientos extraños.
Simplemente hay una cosa que no me gusta, pero es fácil de resolver. Para seleccionar el CS en otro pin diferente al de serie (Pin 10), hay que cambiar una resistencia SMD para por ejemplo cambiar al pin 5. EL tema es que no es una resistencia es un puente, ya que se trata de una resistencia de “ 0 Ohm” y realmente no se a que viene a estas alturas andar soldando en una placa que además puedes anular la garantía o estropear algo, cuando esto se podía haber resuelto con jumpers o micro DIPWITCH. Por lo demás ha funcionado a la primera y con las librerias de Lora.H, por lo que sigo trabajando igual con la misma librería que ya tenía. Creo que, aunque salga mas caro, me voy a quedar con estos módulos. Merecen la pena.

Últimamente estoy teniendo problemas con la conexión de internet. Anoche me quede sin internet y esta mañana el Arduino no había mandado datos, aunque la conexión había vuelto.
La asignación de IP se hace al principio el el void Setup. He pensado 2 cosas en el caso de falta de conexión o bien reiniciar el Arduino ahora que ya puedo, o bien volver a iniciar la tarjeta ethetnet, cosa que prefiero, puesto que de este modo no borro los valores que he ido recibiendo. Entonces el problema se resume en poder detectar si hay o no internet.

¿Alguna idea de como detectar intenet?. He pensado en lo siguiente.

Int internet= ThingSpeak.writeFields(myChannelNumber1, myWriteAPIKey1);

He mirado cuando el envio es exitoso en valor de Int internet=200 y cuando desconecto el cable de red la variable int internet= -310 o algo asi.

¿Estoy en lo cierto que siempre que el envió es satisfactorio el valor de la variable int>0 y si es menor que cero entonces hay fallos en el envío?
Si esto es cierto, puedo establecer una comprobación y en caso de que el valor sea negativo, reinicio la ethernet. ¿Es correcto? ¿Se puede hacer de otro modo?
Ya he implementado también el pluviómetro y la veleta.
Os aconsejo comprobar ambos instrumentos. La veleta funciona por resistencias y en función de una dirección del viento muestra un valor. El tema es que os aconsejo girar la veleta y leer y anotar el valor analógico del puerto ya que no se corresponde con lo que dice el fabricante.
Es muy sencillo por ejemplo se gira a “0 º” y el valor del puerto obtenido se anota. A continuación, se gira 22.5 ºc más y se anota el valor. Así hasta llegar a los 360º.
El pluviómetro es de pulsos, va bien, pero el valor que dice el chino no se corresponde con la realidad. En mi caso el chino decía que una pulsación equivale a 0.3 l/m2, lo cual es una porquería de resolución. Una vez hechas varias pruebas el valor mas correcto es de 1 pulsación es 0.38 l/ m2 de todos modos, creo que el pluviómetro es poco exacto y con el tiempo lo cambiare si quiero tener una medición mas exacta. Creo que le afecta también la velocidad de caída del agua. Es decir a veces cuenta menos pulsos de los que debería. Creo que es porque pierde agua entre las transiciones de los pulsos. Si además a esto le sumamos la poca resolución, lo voy a devolver. Este es el articulo.

Pluviometro Amazon , no recomiendo nada su compra.

Respecto a la veleta le fallan resistencias. Hay algunos ángulos que no los pilla, no es crítico, pero me estoy pensando también cambiarlo y pillar una veleta mejor.

Veleta amazon

Aqui por ejemplo, por poco mas, tenemos un pluviometro con mejor pinta:

pluviometro mejor.

Y aqui uno para mastil de marca conocida:

Pluviometro Davis instruments.

Esto con lo que me dijo surbyte al pincipio de este post cuando preguntaba por la calidad de los sensores. Si compras cosas baratas obtienes resultados mediocres.
Si quieres cosas precisas entonces hay que gastar mas dinero..
Gran verdad, si señor.
Lo bueno de Amazon Prime es que me permite devolver cosas si el resultado no es bueno.

En aliexpress no se como hacer para devolver.
Ya no me fio de los productos marca blanca de los chinos. Me fio de los productos fabricados en China y fabricados por fabricantes reconocidos.
Creo que me he precipitado encargando cosas y encima tardan una eternidad para el mal resultado y encima el nulo servicio postventa.
Sabeis trucos para devolver en aliexpress?. Aun no he recibido algunos articulos.

Este anemometro es el que he pedido:

Anemometro Aliexpress

Ojala hubiera tenido las cosas claras al principio.

Me temo lo peor para el sensor capacitivo de humedad de Aliexpress que he pedido.

Sensor de humedad capativo Aliexpress

Este me gusta mas, en algo debe ir el precio.No creo que sea solo fabricante.

Sensor de humedad "EC-5"

Veremos a ver....... el transductor de presion que he comprado. Viendo lo visto 15 o 20 € me parece muy barato para que funcione bien.
Si al final no va bien al menos es de Amazon y tengo 2 años de garantia en España.

Una vez que tenga todos los componentes definitivos montados y el sistema funcionando, pondre una lista.

Un saludo,

He mirado cuando el envio es exitoso en valor de Int internet=200 y cuando desconecto el cable de red la variable int internet= -310 o algo asi.

¿Estoy en lo cierto que siempre que el envió es satisfactorio el valor de la variable int>0 y si es menor que cero entonces hay fallos en el envío?

Eso que planteas es válido para ThingSpeak. Yo no lo uso asi que no puedo responderte pero si has visto ese comportamiento creo que vas en el camino correcto.

Si compras cosas baratas obtienes resultados mediocres.
Si quieres cosas precisas entonces hay que gastar mas dinero..

Te ocurre lo que nos pasa a todos.
Todos hacemos un poco de prueba error.
Hace mucho he aprendido a no comprar barato.
No compro ropa barata, no compro sensores baratos y siempre investigo todo antes de comprar.
Hay información en Internet de todo. Por supuesto que de las cosas nuevas la información no abundará pero para esto tmb esta la información o feedback de los compradores en aliexpress o banggood. Yo miro gente que tenga 200 o mas ventas y si no, no le compro.
Los dos primeros pluviómetro y Veleta me parecen baratijas y además caras, 25 euros por dios!!!.

Pluviometro Davis instruments luce mejor pero 105 euros, me sorprenden los valores.

El sensor capacitivo de suelo de 8 euros no me gusta, el que le sigue claro que esta bueno pero 153 euros.
En fin, veo que los valores de las buenas cosas superan los 100 euros siempre.
El tema es si necesitas varios?