Go Down

Topic: Problema Con Modulo Rele (Read 12207 times) previous topic - next topic

surbyte

Quote
1)Pude haber dañado algo de arduino metiende 6v por el pin 5v?
claro que si.

Quote
2)Ahora con los nuevos Arduinos puedo alimentarlos por el pin 5v?
Yo no estoy de acuerdo con alimentarlos por 5V. Para ello tienes jack externo y VIn. Porque no usarlos?
PEro bueno es el debate de siempre, tengo una fuente no quiero poner dos fuentes. Ok.. no respondas.

Yo te respondo lo que yo hago. No conecto nada por 5V.

Quote
3)En que voltaje ajusto la fuente para alimentar todo ? (los 2 Arduinos y los sensores)
A esta altura preguntar a que valor ajustas? 6.5V es lo minimo.
Pero los sensores requieren 5V siempre o a menos que sean de 3.3V pero estoy hablando en el aire porque no se de que sensores hablas. Ya he perdido el hilo en su conjunto.

Quote
Ejemplo: Si la fuente la regulo en 5.20v, en la protoboard me tira 4.99v 5.00v , y en la salidas digitales un poquito menos 4.88 4.90 , varia...
la fuente 5.20 okay.
Luego cables hasta el protoboard de que diametro? los cables si son finos tienen gran resistencia por metro y al alimentar todo, se siente esa caida de tensión. Tienes algo de 0.20V de caída.
Las salidas digitales nada tienen que ver con lo que mencionas porque de nuevo, se debe a cuanto saturan los mosfet Canal P de dichas salidas.
Son cosas diferentes.

Quote
4)Que rangos tengo que ajustar, la salida de la fuente que no supere los 5v? o que lleguen 5v a la salidas digitales? lo mismo con los sensores.
No entiendo la pregunta

daviten

Claro, pero si alimento por puerto jack tiene que ser una fuente superior a los 6.5v, y la fuente que tengo tira hasta 6v, por eso alimento por los 5v de arduino, los cables que uso de la fuente a la protoboard son de 0.25mm ,  lo mismo uso para encender las lamparas de 220vac (lamparas led de 15wats) que las tengo combinadas (interuptor y rele), todo con cable de 0.25mm, despues la cuarta pregunta te preguntaba si con 5.20 que tire la fuente estaba bien, o lo baja un poco o la subo, para ajustar el voltaje en la protoboard, a eso me referia, si subo la tension hasta llegar a los 5v en la protoboard, los sensores que uso son un ultrasonido JSNSR04 , un DHT22 de temperatura y humedad y un PIR de movimientos, nada mas.

daviten

Que me recomendas de estos items?

1)Alimentar ArduinoMega con EthernetShield Con una fuente 9v-1a, o Una fuente de 7.5v-1.5a, y Arduino Uno con otra fuente de las mismas caracteristicas, todo por jack. y Los sensores con la fuente esta que te dije antes que tiene para ajustar el voltaje.

2)Con una de las 2 fuentes que te mencione unir 2 fichas jack para alimentar los 2 arduinos? y Los sensores con la fuente esta que te dije antes que tiene para ajustar el voltaje.

Vuelvo aclarar el modulo de 16 rele lo sigo alimentando con una fuente de 12v-2a, y tengo el gnd que sale de los pines INO al Gnd de Arduino MEGA. Funciona pero el mismo problema de siempre se resetea Arduino aveces al encender y apagar reles, Para mi esta roto el ethernet shield o el mega, hoy voy a probar todo con los Arduinos Nuevos que compre y te cuento. Aconsejame cual de los 2 metodos que te mencione uso.

surbyte

Quote
1)Alimentar ArduinoMega con EthernetShield Con una fuente 9v-1a, o Una fuente de 7.5v-1.5a, y Arduino Uno con otra fuente de las mismas caracteristicas, todo por jack. y Los sensores con la fuente esta que te dije antes que tiene para ajustar el voltaje.
Yo uso siempre 7.5 sea por Vin o por jack externo.
Los sensores los alimento por 5V del arduino. Son poca carga (consumo).

Quote
2)Con una de las 2 fuentes que te mencione unir 2 fichas jack para alimentar los 2 arduinos? y Los sensores con la fuente esta que te dije antes que tiene para ajustar el voltaje.
Tmb es posible pero los sensores de nuevo los alimentaría con arduino.



daviten

Vos me habias dicho que donde tengo ethernet shield no ponga nada en la salida de 5v. Por eso te preguntaba.

daviten

LLego a mi casa en 2 horas, voy a conectar los nuevos arduinos, con la fuente 7.5v-1.5a, poniendo 2 fichas jack, una para cada arduino, El Arduino Uno , y el Arduino Mega + Ethernet Shield, y los sensores los voy alimentar con la salida 5v del Arduino Uno. Conecto todo y te cuento como me fue...

1) Los cables de 0.25mm estan bien para el proyecto?
2) El GND del Modulo Rele, es lo mismo que una el GND de 12v, o saco el GND del GND que esta al lado de los pines de entrada?
3) Tiene algo que ver que para los rele estoy usando los pines del 3 al 7, que esos pasan por el ethernet shield, le afecta algo? Puede que haga ruido eso? o no tiene nada que ver? sino los conecto en los pines del Mega. Sin pasar por los del Ethernet.

daviten

Bueno, llegue a casa y cargue los sketch en los Arduinos nuevos puse todo nuevo, alimento los 2 arduinos con la fuente de 7.5v-1,5a , le puse 2 fichas jacks, y desde el Arduino uno en la salida de 5v alimento los sensores, me sigue pasando lo mismo, al encender y apagar reles cada tanto se renicia el ethernet o el mega no se, y ahi me queda colgada la app, cuando vuelven a encender los led del ethernet ahi sigue funcionando....

ya no se que mas probar...

daviten

Cuando me levante a la madrugada tenia 2 reles prendidos , por ahi se vuelven locos...

surbyte

Ok. vamos a parar la rotativa Daviten.

Dejame reveer lo conversado porque realmente me he perdido en el seguimiento de idas y vueltas de este problema.

Seguramente te recomenderá algo simple e iremos viendo.

daviten

bueno, esta funcionando ahora... pero cada tanto se apagan las luces del ethernet todas solo queda la roja , y vuelven a encender mientras esten apagadas deja de funcionar la conexion con las app que uso para controlar el arduino. Cuando mando mandar y prender los rele suele pasar eso, como que por ahi queda congelado y trabaja con delay los rele, y ahora lo que noto que por ahi se ponen en high los pines de salida que manejan los rele, pero no se si es problema de alguna app , y de energia.

surbyte

Y a todo esto, verificaste alguna vez el cable Ethernet o lo cambiaste por otro?

daviten

Si lo cambie, no es ese el problema.

daviten

Mira estoy aca sentado y recien, escuchew como que se volvio loco el modulo rele, y se encendieron 3 reles, en realidad no se si es el modulo el arduino que pone en alto los pines...

daviten

#43
Oct 19, 2017, 03:59 am Last Edit: Oct 19, 2017, 04:03 am by daviten
Dejo mi codigo como quedo ahora con el Bounce, y dejo 2 fotos de la instalacion del proyecto, llevo semanas horas y horas tratando de hacerlo funcionar sin errores, pero siemnpre el mismo problema se resetea el ethernet o el mega nose cual de los 2, y se me quedan colgadas las app, no vuelven a conectarse sino reseteo arduino.

CODIGO:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <Wire.h>
#include <Bounce2.h>
#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Bounce debouncer = Bounce();
int medida = 0;
int temp = 0;
int hum = 0;
int distancia = 0;
char dis[10];
char mess[15];
char tem[10];
int estadopin3 = 0;
int estadopin4 = 0;
int estadopin5 = 0;
int estadopin6 = 0;
int estadopin7 = 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(28);
EthernetClient client;
void setup() {
  pinMode(9, INPUT_PULLUP);
  debouncer.attach(9);
  debouncer.interval(100); // interval in ms
  pinMode(8, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, 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() {  
int t = dht.readTemperature();
int h = dht.readHumidity();
int value1 = debouncer.read();  
debouncer.update();    
EthernetClient client = server.available();        
  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%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));        
      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')
      {
      if(digitalRead(3) == LOW && value1 == 1)
      digitalWrite(3, HIGH);
      else if(digitalRead(3) == HIGH && value1 == 1)
      digitalWrite(3, LOW);
      }
      if(c == '2')
      {
      if(digitalRead(3) == LOW && value1 == 0)
      digitalWrite(3, HIGH);
      else if(digitalRead(3) == HIGH && value1 == 0)
      digitalWrite(3, LOW);
      }
      //PIN4
      if(c == '3')
      digitalWrite(4, HIGH);
      if(c == '4')
      digitalWrite(4, LOW);
      //PIN5
      if(c == '5')
      digitalWrite(6, HIGH);
      if(c == '6')
      digitalWrite(6, LOW);
      //PIN8
      if(c == '7')
      digitalWrite(33, HIGH);
      if(c == '8')
      digitalWrite(33, LOW);
      //PIN31
      if(c == '9')
      digitalWrite(5, HIGH);
      if(c == 'm')
      digitalWrite(5, LOW);
      //PIN33
      if(c == 'n')
      digitalWrite(7, HIGH);
      if(c == 'b')
      digitalWrite(7, 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 != value1 || estadopin4 != digitalRead(4) || estadopin5 != digitalRead(5) || estadopin6 != digitalRead(6) || estadopin7 != digitalRead(7) || 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%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));        
      server.print(mess);
      estadopin3 = value1;
      estadopin4 = digitalRead(4);
      estadopin5 = digitalRead(5);
      estadopin6 = digitalRead(6);
      estadopin7 = digitalRead(7);
      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;
      }
  if(digitalRead(8) == HIGH && alarma == 1)
  {
      server.print("ala");
      alarma = 0;  
  }        
//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

Hice unos cambios menores, fundamentalmente las variables relacionadas con DHT deben ser float y no int.

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#include <Wire.h>
#include <Bounce2.h>

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Bounce debouncer = Bounce();

int medida    = 0;
float temp    = 0.0;
float hum     = 0.0;
int distancia = 0;
char dis[10];
char mess[15];
char tem[10];

const byteestadopin3 = 0;
const byteestadopin4 = 0;
const byteestadopin5 = 0;
const byteestadopin6 = 0;
const byteestadopin7 = 0;
const byteestadopin31 = 0;
const byteestadopin33 = 0;
const byteestadopin35 = 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(28);
EthernetClient client;

void setup() {
  pinMode(9, INPUT_PULLUP);
  debouncer.attach(9);
  debouncer.interval(100); // interval in ms
  pinMode(8, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, 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() {
    float t = dht.readTemperature();
    float h = dht.readHumidity();

    debouncer.update();     
   
    bool value1 = debouncer.read();   
    EthernetClient client = server.available();       
   
    if (client) {
        if (client.available() > 0) {
            char c = client.read();
            //Mandar estados al iniciar app
            switch(c) {
               case '*':  sprintf(mess,"pin%i%i%i%i%i%i%i%i%i%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));       
                          server.print(mess);
                          sprintf(dis,"tin%i  ",115 - medida);
                          server.print(dis);
                          sprintf(tem,"tem%i  %i  ",t,h);
                          server.print(tem);
                          break;
               case '1': //PIN3
                          if (value1 == 1)
                              if (!digitalRead(3))
                                  digitalWrite(3, HIGH);
                              else
                                  digitalWrite(3, LOW);
                          break;
               case '2':
                          if (value1 == 0)
                              if (!digitalRead(3))
                                  digitalWrite(3, HIGH);
                              else
                                  digitalWrite(3, LOW);
                          break;       
               case '3':  //PIN4
                          digitalWrite(4, HIGH);
                          break;
               case '4':
                          digitalWrite(4, LOW);
                          break;
               case '5':  // PIN5
                          digitalWrite(6, HIGH);
                          break;
               case '6':
                          digitalWrite(6, LOW);
                          break;
               case '7':  // PIN8
                          digitalWrite(33, HIGH);
                          break;
               case '8':  digitalWrite(33, LOW);
                          break;
                          //PIN31
               case '9':  digitalWrite(5, HIGH);
                          break;
               case 'm':  digitalWrite(5, LOW);
                          break;
                          //PIN33
               case 'n':  digitalWrite(7, HIGH);
                          break;
               case 'b':  digitalWrite(7, LOW);
                          break;
               case 'q':  alarma = 1;
                          break;
               case 'w':  alarma = 0;
                          break;
               case 'c':  voz = 1;
                          break;
               case 'v':  voz = 0;
                          break;
               case 'z':
                          digitalWrite(35, HIGH);
                          break;
               case 'x':
                          digitalWrite(35, LOW);
                          break;
          }

    }     
    //Cambio de estado de pin3 me manda el aviso

    if (estadopin3 != value1 || estadopin4 != digitalRead(4) || estadopin5 != digitalRead(5) || estadopin6 != digitalRead(6) || estadopin7 != digitalRead(7) || 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%i",value1,digitalRead(4),digitalRead(5),digitalRead(7),digitalRead(31),digitalRead(33),alarma,voz,digitalRead(35),digitalRead(6));       
        server.print(mess);
        estadopin3    = value1;
        estadopin4    = digitalRead(4);
        estadopin5    = digitalRead(5);
        estadopin6    = digitalRead(6);
        estadopin7    = digitalRead(7);
        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;
    }

    if (digitalRead(8) == HIGH && alarma == 1) {
        server.print("ala");
        alarma = 0;   
    }         
} //Fin Loop


void reciboEvent(int howMany)    {
    while (Wire.available()) { // slave may send less than requested
          int c = Wire.read();
          if (medida != c) {
              medida = c;
          }
    }
}

Go Up