Go Down

Topic: Problema Con Modulo Rele (Read 1 time) previous topic - next topic

daviten

Estoy haciendo un proyecto para mi casa Domotica, tengo 2 arduino 1 mega como master y un uno como esclavo comunicados entre si por Wire, los alimentos de la siguiente manera, al mega con una fuenta de 7.5v de 1.5 a, y al uno con una fuente de 9v 1a, probe con varias fuentes de varias formas pero sigo teniendo el problema , detallo un poco mas en arduino uno solo tengo conectado un sensor ultrasonio jnst04, y en el mega un modulo rele de 16 canales , mas 1 sensor de humedad y temperatura dht22, mas un sensor de movimientos infrarojo. Manejo todo por Socket TCP , Server Chat, tengo una app en C# para Windows una app para Android con app inventor y otra app en c# para raspberry con una pantalla.

El problema es que al estar encendido al rato de estar todo funcionando los rele cada tanto se vuelven locos o se prenden 2 rele siempre solos, siempre son los mismos. Probe subiendo un codigo limpio al arduino y no hace falla, sera el codigo o problemas de ruido o corriente? Gracias.

Naruto128

Proba con una fuente externa paea alimentar a los rele.

surbyte

El módulo de RELES consume 65mA x RELE activado, asi que si tienes los 8 al mimos tiempo estas en 8x65=520mA que supera los 350mA máximos que puede entregar el Arduino via su pin de 5V

Asi que sigue la recomendación de Naruto.

daviten

Si me olvide de aclarar que los tengo con una fuente externa de 5v 5a, probe tmb con fuentes de 5v 2a, probe de todo, puse gnd de la fuente al gnd de arduino despues saque el gnd y puse el positivo de arduino a vcc de la parte de los pines aparte de la fuente externa.

surbyte

Postea tu código, ahora si me suena a problema de código.

Lee las normas y postealo como ellas lo piden o sea usando etiquetas (tags).

daviten

#5
Aug 22, 2017, 04:50 pm Last Edit: Aug 22, 2017, 07:47 pm by surbyte
Llego a casa y te paso el codigo.


daviten

bueno vuelvo al tema que mencione , compre una super fuente de 5v de 40a, para alimentar todo el proyecto, pero sigo teniendo problemas lo que vi es que cuelga el ethernet shield cuando mando muy rapido prender y apagar un rele.

daviten

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <Wire.h>
#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
int medida = 0;
int temp = 0;
int hum = 0;
int distancia = 0;
char dis[10];
char mensaje1;
char mess[15];
char tem[10];
int estadopin3 = 0;
int estadopin4 = 0;
int estadopin5 = 0;
int estadopin8 = 0;
int estadopin31 = 0;
int estadopin33 = 0;
int estadopin35 = 0;
int alarma = 0;
int estadoalarma = 0;
int voz = 0;
int estadovoz = 0;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 200);
IPAddress myDns(192,168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetServer server(23);
EthernetClient client;
void setup() {

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(22, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(35, OUTPUT);
  Ethernet.begin(mac, ip, myDns, gateway, subnet);
  server.begin();
  dht.begin(); 
  Wire.begin(1);
  Wire.onReceive(reciboEvent);
}
void loop() {   
  if(digitalRead(37) == HIGH && alarma == 1)
  {
      server.print("ala");
      alarma = 0;   
  }     
EthernetClient client = server.available();
      int h = dht.readHumidity();
      int t = dht.readTemperature();     
  if (client) {
    if (client.available() > 0) {
      char c = client.read();
      //Mandar estados al iniciar app
      if(c == '*'){
      sprintf(mess,"pin%i%i%i%i%i%i%i%i%i",digitalRead(3),digitalRead(4),digitalRead(5),digitalRead(8),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35));       
      server.print(mess);
      sprintf(dis,"tin%i  ",115 - medida);
      server.print(dis);
      sprintf(tem,"tem%i  %i  ",t,h);
      server.print(tem);
      }
      //PIN3
      if(c == '1')
      digitalWrite(3, HIGH);
      if(c == '2')
      digitalWrite(3, LOW);
      //PIN4
      if(c == '3')
      digitalWrite(4, HIGH);
      if(c == '4')
      digitalWrite(4, LOW);
      //PIN5
      if(c == '5')
      digitalWrite(5, HIGH);
      if(c == '6')
      digitalWrite(5, LOW);
      //PIN8
      if(c == '7')
      digitalWrite(8, HIGH);
      if(c == '8')
      digitalWrite(8, LOW);
      //PIN31
      if(c == '9')
      digitalWrite(31, HIGH);
      if(c == 'm')
      digitalWrite(31, LOW);
      //PIN33
      if(c == 'n')
      digitalWrite(33, HIGH);
      if(c == 'b')
      digitalWrite(33, LOW);
      if(c == 'q')
      alarma = 1;
      if(c == 'w')
      alarma = 0;
      if(c == 'c')
      voz = 1;
      if(c == 'v')
      voz = 0;
      if(c == 'z')
      digitalWrite(35, HIGH);
      if(c == 'x')
      digitalWrite(35, LOW);
    }
 
  }     
//Cambio de estado de pin3 me manda el aviso

      if(estadopin3 != digitalRead(3) || estadopin4 != digitalRead(4) || estadopin5 != digitalRead(5) || estadopin8 != digitalRead(8) || estadopin31 != digitalRead(31) || estadopin33 != digitalRead(33) || alarma != estadoalarma || voz != estadovoz || estadopin35 != digitalRead(35))
      {
      sprintf(mess,"pin%i%i%i%i%i%i%i%i%i",digitalRead(3),digitalRead(4),digitalRead(5),digitalRead(8),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35));       
      server.print(mess);
      estadopin3 = digitalRead(3);
      estadopin4 = digitalRead(4);
      estadopin5 = digitalRead(5);
      estadopin8 = digitalRead(8);
      estadopin31 = digitalRead(31);
      estadopin33 = digitalRead(33);
      estadoalarma = alarma;
      estadovoz = voz;
      estadopin35 = digitalRead(35);
      }
//Mando cambio de distancia tanque sensor
      if(distancia != medida)
      {
      sprintf(dis,"tin%i  ",115 - medida);
      server.print(dis);
      distancia = medida;
      }
//Mando cambio de temperatura
      if(temp != t || hum != h)
      {
      sprintf(tem,"tem%i  %i  ",t,h);
      server.print(tem);
      temp = t;
      hum = h;
      }
//Fin Loop
}
void reciboEvent(int howMany)
{
   while (Wire.available()) { // slave may send less than requested
     int c = Wire.read();
     if(medida != c)
     {
     medida = c;
     }
  }
}

surbyte

#8
Sep 21, 2017, 01:20 am Last Edit: Sep 21, 2017, 01:21 am by surbyte
Quote
compre una super fuente de 5v de 40a, para alimentar todo el proyecto
Pero no me vas a decir que le has puesto una fuente de 5V 40A a que? Al módulo RELE, al Arduino.
Nosotros no podemos imaginar lo que estas haciendo asi que si no lo explicas estaremos dando vueltas.

Mira el tiempo que llevas desde tu pregunta inicial, esperaba un esquema pero voy a imaginarme la situación.

No se donde tienes el Ethernet Shield.
Supongamos que lo has conectado al MEGA, entonces te digo que lo que uses para alimentar el MEGA mas el SHield ya no da para mas. O sea.. de los 5V de salida de ese MEGA no cargues nada porque no tolera mas carga. Esa es mi experiencia con el Ethernet Shield que es para mi una placa dinosaurio.. o sea del pasado.

Por otro lado, el UNO parece que lo usas con la placa modulo de 8 reles. Esa placa debe alimentarse con 5V externos... no uses el UNO para alimentar el modulo.

Asi que tendras fuente para el UNO, fuente para los reles
Fuente para el MEGA + Ethernet Shield.

Todas mejor que 500mA y para los reles supongamos que todos activos a 65*8 = 520mA una fuente que entregue mas que eso.

Espero te sirva.

daviten

Mestro, si es asi como decis, solo una cosa al modulo de 16 rele lo manejo con el mega que tiene el shield y tengo un sensor ultrasonido al mega tmb y un sensor dht22 de temperatura estos 2 los alimentos con los 5v de el mega, voy a probar alimentarlos con el uno. otra cosa compre la fuente de 40a para alimentar todo tiene 3 salidas con borneras, entonces podria usar una salida para el mega y el shield, otra para el modulo rele, y otra para el 1, lo que pasa es que es 5v la fuente si lo conecta por el puerto jack el regulador me saca un poco no?¿ lo puedo poner directo a la salida 5v de los arduinos? Sino la otra opcion es regular la fuente 1v mas tiene un regulador para disminuir o aumentar los v -1 o 1+ , y lo conecto por el jack.

daviten

Anoche lo deje funcionando al sistema, hoy me levanto para ir a trabajar y cuando quiero mandar una orden , pum shield colgado o arduino nose cual de los 2 se cuelga, tengo que reniciarlo y a veces no levante con un reset, tengo que sacarle el cqble utp del shield volver a reniciar y vuelve a levantar.

surbyte

El shield es bobo no hace nada sin el procesador que lo comanda, así que el colgado es el MEGA.
Estas usando una fuente de 7.5V 1.5A para el mega y el shield. Eso debería ser suficiente.

Dos sugerencias, no se si sirvan:

1.
Code: [Select]
if (digitalRead(37) == HIGH && alarma == 1)  {
    server.print("ala");
    alarma = 0;   
}     
    int h = dht.readHumidity();
    int t = dht.readTemperature();     
  EthernetClient client = server.available();
  if (client) {


Cambia esto o sea, EthernetClient luego de que lea el sensor DHT que demora 2 segundos en responder si mal recuerdo.

2. Me preocupa (no se si está fundamentada) la interrupción I2C reciboEvent para leer datos enviados por el UNO.
Prueba no usarlo para ver la estabilidad del sistema sin I2C y luego vemos si tiene o no responsabilidad.

daviten

#12
Sep 21, 2017, 04:46 pm Last Edit: Sep 21, 2017, 06:11 pm by surbyte Reason: No hace falta el reply de algo que se lee arriba
Cuando llego a casa lo pruebo, el problema en el codigo no lo veo, por que poniendo un simple codigo de ejemplo chatserver, desconectando todo, se tilda igual el ethernet shield, osea que lo veo mas por el lado de la corriente , cuando mando muy rapido datos al arduino por ehternet como que cuelga y hayu que resetearlo, tengo el cable de red que pasa por el mismo caño de los cables de 220, estaria haciendo ruido ahi? o no afecta? por las dudas pruebo poniendo otro cable de red directo al router por fuera de la instalacion, y el tema de las fuentes probe con un monton, de 5v 40a, 7.5v 1.5a , 5v 5a, 12v 2.5a, lo unico que tmb puedo pensar es que esta jodido el mega o el ethernet shield... nose.

surbyte

#13
Sep 21, 2017, 06:15 pm Last Edit: Sep 22, 2017, 03:12 am by surbyte
Me llama la atención que la placa ethernet falle.
Yo tuve ese problema hasta que alimenté externamente, es decir, me pasaba cuando lo tenía alimentado por USB.
Luego use fuente externa y reprogramaba por USB sin problemas.
Igualmente como tengo un MEGA clon, nunca se portó muy bien que digamos el MEGA. Muchas fallas de comunicación USB al punto que por un tiempo lo di por muerto y un dia revivió solo, lo que me hace pensar que la actualización de nuestros drivers muchas veces no juegan mal.

En tu caso no se que decirte pero coincido en retirar los cables de la proximidad de los de energía.
Aunque en el peor de los casos tendería a pensar que por un lado los cables trenzados estan por algo, y por otro, debería aumentar la tasa de error pero no colgar al dispositivo.

Prueba con el cable directo al Router y veamos.
Si no tienes estabilidad ahí... difícil seguir.

daviten

Bueno ahora llego a casa y sigo testeando...

Go Up