Problema al cargar los parametros de red en Arduino UNO

Hola a todos/as

Estoy desarrollando un sistema que cuenta con un arduino UNO, un ethernet shield y un modulo rele.

El arduino y el shield estan alimentados por una fuente de 9v 1amp y el modulo rele con una fuente de 5v 500ma.

El tema es el siguiente, estoy teniendo problemas con los parametros de red. Si le doy energia por el puerto USB a la placa, todo funciona de diez y la placa levanta los parametros de red bien y se puede comunicar sin problemas. Si en cambio lo alimento con la fuente de 9v que les decia, desconectando el cable usb, no carga los parametros de red excepto que aprete el boton de reinicio fisico, si apreto el boton, el equipo se reincia y levanta los parametros de red todo bien y permite comunicacion perfecta.

A alguien se le ocurre que esta pasando?

Los parametros de red se los doy antes del setup() como variables globales, y el servidor lo inicio en el setup.

por si sirve para que se entienda mejor dejo parte del codigo....

/* Main.ino file generated by New Project wizard
*
* Created:   mar feb 28 2017
* Processor: ATmega328P
* Compiler:  Arduino AVR
*/
#define rele1 2
#define rele2 3
#define rele3 5
#define rele4 6


#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>

File Archivo;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac address
byte ip[]  = { 10, 0, 0, 35 }; // ip 
byte gateway[] = { 10, 0, 0, 2 }; // IP de nuestro router
byte subnet[] = { 255, 255, 0, 0 }; //máscara de subred
byte address[4];
byte address_sub[4];
byte address_gt[4];
int port = 80;

EthernetServer server(port); //puerto de escucha
EthernetClient client;


String readString;
String estadoR1="Activado";   
String estadoR2="Activado";   
String estadoR3="Activado";   
String estadoR4="Activado";   

void setup()
{ // put your setup code here, to run once:
  Serial.begin(9600);
  SD.begin(4);
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);
  pinMode(rele4, OUTPUT);
  pinMode(10, OUTPUT);
  if(SD.exists("ip.txt")){
   Serial.println("Entro al if");
   port = contArch("port.txt").toInt();
   server = EthernetServer(port);
   recortar((contArch("ip.txt")),ip);
   recortar((contArch("subnet.txt")),subnet);
   recortar((contArch("gw.txt")),gateway);
   Ethernet.begin(mac, ip, gateway, subnet);
   server.begin();
   
  }else{
   Serial.println("Entro al else");
   EthernetServer server(port);
   Ethernet.begin(mac, ip, gateway, subnet);
   server.begin();
  }

Intente agregar delays en distintas partes del codigo para ver si era una cuestino de tiempo en levantar los datos, pero no hubo caso.

Desde ya muchas gracias.

Te diste cuenta que solo muestras el setup()

Si muestras el setup() y tu código esta ahi significa que solo cuando reinicies eso se ejecuta una sola vez
El código debe estar en el loop

Asi que deja en el setup la configuracion de inicialización y el resto en el loop.

NOTA: te envié un privado para que edites tu post según las normas del foro. Presta atención y hazlo cuanto antes!!

surbyte:
Te diste cuenta que solo muestras el setup()

Si muestras el setup() y tu código esta ahi significa que solo cuando reinicies eso se ejecuta una sola vez
El código debe estar en el loop

Asi que deja en el setup la configuracion de inicialización y el resto en el loop.

NOTA: te envié un privado para que edites tu post según las normas del foro. Presta atención y hazlo cuanto antes!!

Hola Antes que nada gracias por la respuesta y enseguida me pondre a leer las normas del foro.

Cuando el arduino levanta por primera vez no lee el setup() tambien?

Yo tengo entendido que si, lo puse alli porque solo quiero que lo levante una vez, solo al inicio. Con otras pruebas que estoy haciendo, me doy cuenta que el problema aparece cuando apago y prendo a la vez el router y el arduino. Si por otro lado el router esta prendido y apago y prendo el arduino anda todo bien. Cuando no anda prende la luz de rx pero no la de tx.

gracias!

Por lo que relatas funciona perfecto.
No veo cual es el problema.
Tu te preguntas porque al alimentarlo no toma los datos, será porque no hace el reset debido, algo que cuando lo presionas lo hace bien.
Y cuando le pones el USB se resetea bien y toma los datos.

Porque no le agregas un delay en el arranque para darle tiempo a las cosas para que se establezcan y funcionen.

surbyte:
Por lo que relatas funciona perfecto.
No veo cual es el problema.

Si, lo se, es raro. Con el usb funciona perfecto. Si apago el router y el arduino a la vez y los vuelvo a prender a ambos, ahi es cuando deja de funcionar (si esta el arduino alimentado por fuente externa, si esta por usb, no presenta ese problema)

surbyte:
Tu te preguntas porque al alimentarlo no toma los datos, será porque no hace el reset debido, algo que cuando lo presionas lo hace bien.
Y cuando le pones el USB se resetea bien y toma los datos.

Porque no le agregas un delay en el arranque para darle tiempo a las cosas para que se establezcan y funcionen.

Agregue delays en varias partes del codigo, pense (asumo que) lo mismo que vos, que habia que esperar algun otro dispositivo (el router probablemente), pero le llegue a agregar un delay de (60000), o sea un minuto y asi y todo no levanta bien apagando los dos equipos y volviendolos a prender a la vez.

Para mi esto es importante, dado que si desarrollo el dispositivo, y hay un corte de luz, dejará de funcionar hasta que se lo reinicie fisicamente.

Gracias!

Hola a tod@s!

Actualizo con algunos datos de pruebas que fui haciendo.

Alimentado el Arduino y el ethernet shield mediante fuente externa de 9v 0.6a

  1. Si tengo el arduino y el router apagados y los prendo al mismo tiempo, no levanta los parámetros de red y no permite comunicación.

  2. Si tengo el arduino apagado y el router prendido, al prender el arduino, no levanta los parámetros de red y no permite comunicación.

  3. Si tengo el router apagado y el arduino prendido, al prender el router, SI levanta los parámetros de red y permite comunicación.

Alimentado el arduino y el ethernet shield mediante el puerto USB

1)Si tengo el arduino y el router apagados y los prendo al mismo tiempo, SI levanta los parámetros de red y permite comunicación.

2)Si tengo el arduino apagado y el router prendido, al prender el arduino, SI levanta los parámetros de red y permite comunicación.

3)Si tengo el router apagado y el arduino prendido, al prender el router, SI levanta los parámetros de red y permite comunicación.

Espero que a alguien le sirve estas pruebas para ver si ven algo de luz donde yo por ahora veo oscuridad, desde ya y como siempre muchas gracias.

  1. Si tengo el arduino y el router apagados y los prendo al mismo tiempo, no levanta los parámetros de red y no permite comunicación.

El router puede tardar 1 o 2 minutos en conectarse. Arduino lo hace mucha mas rápido que eso.
Si podrias poner algo para que se quede esperando la conexión.

  1. Si tengo el arduino apagado y el router prendido, al prender el arduino, no levanta los parámetros de red y no permite comunicación.

Esta si que no la esperaba. se supone que debería conectarse bien.

  1. Si tengo el router apagado y el arduino prendido, al prender el router, SI levanta los parámetros de red y permite comunicación.

Esto no se como ocurre porque tienes el arduino prendido y debería haber pasado el setup a menos que se quede esperando.

Ahhhhhhhhhh ya veo tu problema.

Alimentado el arduino y el ethernet shield mediante el puerto USB

La ethernet Shield mas el arduino debe estar alimentada por una fuente de como mínimo 1A. A mi me pasó lo mismo.

Tu fuente es pobre.

Muchas gracias por la respuesta!!

surbyte:
El router puede tardar 1 o 2 minutos en conectarse. Arduino lo hace mucha mas rápido que eso.
Si podrias poner algo para que se quede esperando la conexión.

Como comentaba mas arriba he puesto varios delays en distintas partes por si la espera resolviese, hasta puse 1 minuto de delay, sin buenos resultados, le tome el tiempo al router, tarda 28 segundos en levantar.

surbyte:
La ethernet Shield mas el arduino debe estar alimentada por una fuente de como mínimo 1A. A mi me pasó lo mismo.

Tu fuente es pobre.

Ahora que reviso, la fuente es de 9v 0,6 a. Yo estaba publicando que era de un amp, me confundi, ojala ese sea el problema. Tengo una de 12v 1amp, te parece que esa podria ser un buen reemplazo? o tendre que buscar una de 9v 1,5 o 2 amp?

Muchas gracias Surbyte

Probe con la fuente de 12 v 1amp y sigue sucediendo lo mismo :frowning:

Por si las dudas le agregue un delay(70000); pero sin exito.

Sera que necesito mas amperes?

Gracias!

No.. con 1A debería andar bien.

Probé con otra fuente de 12 v 1amp por si la anterior no me daba buen amperaje, pero nada, el mismo problema, le agregue el delay al principio y tampoco soluciona.

Yo me pregunto, si fuese un problema de alimentación, ¿por que cuando no toma los parámetros, si apreto
el botón de reset físico si los empieza a tomar y levanta todo bien?

Si fuera un tema de pobreza de fuente, ¿tendría que no levantar lo mismo por mas que lo reinicie con el botón o no?

Una cosa que no se si aporta en algo, pero la comento, cuando no carga los parámetros de red y el ping me dice que es inalcanzable, el arduino prende las luces de rx pero no la de tx, o sea recibe señal del router pero es incapaz de transmitir.

gracias.

:slight_smile: :slight_smile: :slight_smile: Pues creo que acabo de encontrar la solución :slight_smile: :slight_smile: :slight_smile:

Parece ser que el arduino se queda tonto o tildado si sufre un corte de energia y una rapida vuelta.

Por las pruebas que estuve haciendo, si el arduino se apaga (corte de energia) y se prende antes de los 20 seg, no carga los parametros y hay que reiniciarlo fisicamente o cortarle la energia y volver a darle luego de pasado por lo menos 20 segundos.

Debe ser que le queda algo de energia dentro y tarda 20 segundos en disiparse.

No hay necesidad de poner delays ni nada, toma los parametros aunque se apague y prenda junto al router, eso si pasando por lo menos 20 segundos sin energia.

Por otro lado, hice las mismas pruebas con la fuente de 9v 0.6 amp y no funciona, por lo que asumo que lo que me decias Surbyte de que la fuente era pobre, pues estabas en lo cierto.

Creo que se podria dar por cerrado y solucionado este post.

PD: Surbyte tengo una duda mas y no se si deberia abrir otro post por eso o lo podria poner en el mismo. tu diras.....

La cuestion es que con la fuente de 12 v la placa se calienta mucho, he leido que entre 7 y 15 v la placa deberia andar bien, pero bueno, me surge esa duda, que se caliente es normal o deberia conseguir una fuente de 9v 1 amp.

PD2: Muchas gracias Surbyte por toda tu ayuda y apoyo.

Mejor que lo preguntes aca..
El que se calienta es el regulador porque mira que ocurre con 12 y eso si son realmente 12 que a veces son 13.

12-5 son 7V a supongamos 0.5A tienes 3.5Watts que disispar y como no tiene disipador se calienta.
Pero si el sistema dice que funciona con 15 no te hagas drama.

Si es aconsejable que baje, y si tienes otra de 8 o 9V mejor.

Respecto de la corriente de la fuente, lo suscribo porque me ocurrió a mi. No me funcionaba con el USB (a diferencia tuya) y si con la fuente.

Conseguire una de 9v 1amp para estar mas tranquilo.

muchas gracias!