Problema con Arduino UNO

Hola a todos, estoy hace un tiempo trabajando con arduino UNO, la estoy utilizando para automatizar un cúpula de un telescopio.

La arduino UNO maneja la rotación de la cúpula (para esto esta conectada a relés), controla unas luces y a su vez se conecta con un arduino NANO por rf.

El problema que tengo es que la arduino UNO deja de funcionar transcurrido algún tiempo (puede ser una hora como una semana), y tengo que abrir el monitor serial (esto reinicia el arduino) para que vuelva a funcionar. Pense en usar el wdt pero para ello tengo que comprar una placa que cargue un nuevo bootloader.

Esto se encuentra en un lugar alejado de mi trabajo, por lo que no voy seguido. Mientras voy probando cosas con dos arduinos NANO que tengo a mano, pruebo los modulos de rf y funcionan bien, el problema es con las que están el las cúpulas. Les digo esto porque eso me llevó a pensar que podía ser esa Arduino la que ande mal, o que es un problema con algun ruido que me generan los relés y me traban el arduino.

Probé dejar todo andando menos los módulos rf y ahí funciona bien, por lo que creo que el problema tiene que ver con eso. La Arduino UNO manda un 1, 2, 3 o 4 a la NANO. en los tres primeros casos abre, para o cierra una ventana, mientras que si manda un 4 la NANO le devuelve tres valores correspondientes a humedad, temperatura, y tensión de una bateria.

Espero me puedan ayudar.

Saludos!
 
Bienvenido a los foros de electrónica, manustarck

Cuidado con los relés... podrían estar consumiendo mucha corriente y dejar colgado el Arduino. A ser posible, tienes que aislarlos de la alimentación del resto del sistema.

Como no sabes qué es lo que está pasando, puedes intentar grabar en la EEPROM lo que va haciendo el sistema, paso a paso. De esa manera, en el momento del cuelgue, sabrás qué es lo último que estaba haciendo.

Si el Arduino está en un sitio con mucho ruido eléctrico, también podría ser debido a eso, pero dices que funciona bien solo si quitas los relés, así que en principio ellos son los principales sospechosos.
 
Joaquin muchas gracias! voy a probar lo que me decís de la EEPROM, eso me puede decir que es lo que está fallando.

Tenía dudas con los relés, porque había leído que pueden generar ruido que produzca erroren en la arduino. Pero si Saco quel código la comunicación RF la arduino UNO anda bien, y sigo manejando motores con los relés. Por lo que el problema creo que está en los módulos de RF.

Te cuento algo mas que me pasó. Cada 5 segundo por medio del TIMER la arduino UNO manda un "4" por RF a la arduino NANO, cuando la arduino NANO recibe ese valor devuelve a la Arduino UNO tres valores (humedad, temperatura y voltaje), de esta forma es como está funcionando ahora (que es la forma que se me traba el arduino). Probé que en vez de que la arduino UNO mande un "4" para que la NANO devuelva el valor, que la NANO mande directamente esos valores a la UNO cada 5 segundos. En ese caso se trabó la Arduino NANO.

Los módulos de RF son los NRF24L01 y la libreria es la Mirf.
 
Podría ser... un fallo de programación... que el programa entrase en algún bucle en el que está esperando algo, y no ocurre.

O desbordamiento de pila. Si el envío del '4' se hace desde la interrupción del temporizador, si tarda mucho en resolverse, podrían acumularse nuevas peticiones de interrupción.
 
Saludos, se que mi consulta no esta muy relacionada con el tema, pero alguno podria colgar el software de arduino, la estoy tratando de descargar de la pagina de Arduino y en este momento me piden una contribucion que no puedo hacer ya que no tengo tarjeta de credito se los agradeceria, de antemano gracias.
 
saludos comunidad Electrónica.
Mi inconveniente es que al momento de ejecutar el siguiente algoritmo no me realiza la secuencia en el orden de salida del código binario que utilizo para excitar las salidas de los puertos B y D, con las instrucciones DDR"x" y PORT"x" donde el primero es para declarar puertos como salida pero usando en mi caso binario.
PHP:
int ayud1=0;
void setup(){
  DDRB= B111111; //salidas del 13 al 8
  DDRD= B11000000; //salidas de 7al 6
}
void loop(){
delayMicroseconds (3500);
for(ayud1=0;ayud1<500;ayud1++){  
secuencia1();
PORTB=B000000;
PORTD=B00000000;
delayMicroseconds (35000);
}
}

void secuencia1(){
PORTB= B011011; 
PORTD= B10000000;
T1();
PORTB= B100100; 
PORTD= B01000000;
T1();
PORTB= B100100; 
PORTD= B01000000;
T1();
PORTB= B100100; 
PORTD= B01000000;
T1();    //en la targeta de arduino uno r3 en la practica se me duplica este tienpo
PORTB= B111111; 
PORTD= B11000000;
T1();
PORTB= B000000; 
PORTD= B00000000;
T1();
}

void T1(){
  delay(9000); 
}
 
Última edición por un moderador:
Hola.

He comprobado el programa y te confirmo que funciona perfecto: todas las salidas se ponen a uno a los 36 segundos de que arranque secuencia1().

Otra cosa es que sea eso lo que quieres que pase ;)

Lo que podría estar pasando es que la alimentación no pueda activar los 8 actuadores que tengas conectados. En ese caso, hablamos de un problema de alimentación.
 
Joaquin gracias por tus consejos! Me esta ocurriendo exactamente lo que dices en este post:
"Cuidado con los relés... podrían estar consumiendo mucha corriente y dejar colgado el Arduino. A ser posible, tienes que aislarlos de la alimentación del resto del sistema."

Quisiera saber como puedo aislarlo si para mi proyecto solo cuento con 1 fuente regulada de 12v. para el arduino y para activar un solenoide con un rele...?
Saludos.
 
Atrás
Arriba