Problema cuando conecto la carga al modulo rele

Hola buenos días.

Tengo un motor de 220 V que funciona como carro de desplazamiento a lo largo de una carril.

Este carril cuenta con finales de carrera que que mandan señales al arduino para que este se detenga dependiendo de la posición seleccionada en una botonera.

El codigo es el siguiente

int contador= 1;
const int dirIzquierda = 52;
const int dirDerecha = 53;
const int sensorA = 4;
const int sensorB = 5;
const int sensorC = 6;
const int sensorD = 7;
const int sensorE = 8;
const int sensorF = 9;

const int botonA = 17;
const int botonB = 18;
const int botonC = 19;
const int botonD = 20;
const int botonE = 3;
const int botonF = 22;

const int luzA = 30;
const int luzB = 31;
const int luzC = 32;
const int luzD = 33;
const int luzE = 34;
const int luzF = 35;

const int botonder = 48;
const int botonizq = 49;


void setup() {
  pinMode(dirIzquierda, OUTPUT);
  pinMode(dirDerecha, OUTPUT);

  pinMode(luzA, OUTPUT);
  pinMode(luzB, OUTPUT);
  pinMode(luzC, OUTPUT);
  pinMode(luzD, OUTPUT);
  pinMode(luzE, OUTPUT);
  pinMode(luzF, OUTPUT);

  pinMode(sensorA, INPUT);
  pinMode(sensorB, INPUT);
  pinMode(sensorC, INPUT);
  pinMode(sensorD, INPUT);
  pinMode(sensorE, INPUT);
  pinMode(sensorF, INPUT);

  pinMode(botonA, INPUT_PULLUP);
  pinMode(botonB, INPUT_PULLUP);
  pinMode(botonC, INPUT_PULLUP);
  pinMode(botonD, INPUT_PULLUP);
  pinMode(botonE, INPUT_PULLUP);
  pinMode(botonF, INPUT_PULLUP);

  pinMode(botonder, INPUT_PULLUP);
  pinMode(botonizq, INPUT_PULLUP);

 
}

// POSICION A
// Establecer direccion de A

void movAizq (){
  while (digitalRead(sensorA)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=1;
return;
}

void movAder (){
while (digitalRead(sensorA)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=1;
return;
}

// POSICION B
void movBizq (){
  while (digitalRead(sensorB)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=2;
return;
}

void movBder (){
while (digitalRead(sensorB)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=2;
return;
}


// POSICION C
void movCizq (){
  while (digitalRead(sensorC)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=3;
return;
}

void movCder (){
while (digitalRead(sensorC)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=3;
return;
}

// POSICION D
void movDizq (){
  while (digitalRead(sensorD)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=4;
return;
}

void movDder (){
while (digitalRead(sensorD)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=4;
return;
}


// POSICION E
void movEizq (){
  while (digitalRead(sensorE)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=5;
return;
}

void movEder (){
while (digitalRead(sensorE)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=5;
return;
}

// POSICION F
void movFizq (){
  while (digitalRead(sensorF)!=LOW){
  digitalWrite (dirIzquierda,HIGH);
  digitalWrite (dirDerecha,LOW);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=6;
return;
}

void movFder (){
while (digitalRead(sensorF)!=LOW){
  digitalWrite (dirIzquierda,LOW);
  digitalWrite (dirDerecha,HIGH);
}
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
contador=6;
return;
}



void loop () {

digitalWrite (luzA,LOW); 
digitalWrite (luzB,LOW);
digitalWrite (luzC,LOW); 
digitalWrite (luzD,LOW);
digitalWrite (luzE,LOW); 
digitalWrite (luzF,LOW);
digitalWrite (dirDerecha,LOW);
digitalWrite (dirIzquierda,LOW);


// Se pulsa el boton A
while (digitalRead (botonder) == HIGH){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,HIGH);  
}

while (digitalRead (botonizq) == HIGH){
digitalWrite (dirIzquierda,HIGH);
digitalWrite (dirDerecha,LOW);  
}


// Se pulsa el boton A
if (digitalRead (botonA) == HIGH){

  digitalWrite (luzA,HIGH);  

  if (contador>1){
  movAizq ();
    }     
  if (contador<1){
  movAder ();
}
if (contador==1){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);  
}
}

// Se pulsa el boton B
if (digitalRead (botonB) == HIGH){

digitalWrite (luzB,HIGH);  

  if (contador>2){
  movBizq ();
    }     
  if (contador<2){
  movBder ();
}
if (contador==2){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}


// Se pulsa el boton C
if (digitalRead (botonC) == HIGH){

digitalWrite (luzC,HIGH);  

  if (contador>3){
  movCizq ();
    }     
  if (contador<3){
  movCder ();
}
if (contador==3){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}


// Se pulsa el boton D
if (digitalRead (botonD) == HIGH){

digitalWrite (luzD,HIGH);  

  if (contador>4){
  movDizq ();
    }     
  if (contador<4){
  movDder ();
}
if (contador==4){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}

// Se pulsa el boton E
if (digitalRead (botonE) == HIGH){

digitalWrite (luzE,HIGH);   

  if (contador>5){ 
  movEizq ();
    }     
  if (contador<5){
  movEder ();
}
if (contador==5){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}


// Se pulsa el boton F
if (digitalRead (botonF) == HIGH){

digitalWrite (luzF,HIGH);  

  if (contador>6){
  movFizq ();
    }     
  if (contador<6){
  movFder ();
}
if (contador==6){
digitalWrite (dirIzquierda,LOW);
digitalWrite (dirDerecha,LOW);
}
}

}

Funciona muy bien cuando no tengo el motor conectado al modulo relé, pero una vez lo conecto, el Arduino en ocasiones se reinicia o realiza funciones aleatorias.

Tengo alimentación independiente:
Una fuente de 9v para el Arduino
Una fuente de 5v para los sensores, botones y luces
Una fuente de 5v para el modulo relé

Seguramente la causa es de origen eléctrico.

Por favor comparte el diagrama de conexiones. Puede ser dibujado a mano.

El accionamiento del motor de 220VAC siempre es un problema cuando usas un rele porqué? Por que no sabes en que momento le dices que se ponga en marcha. En qué momento de la señal sinusoidal.
Entonces si en lugar de un relé usas un SSR un rele de estado solido con cruce por cero, la conmutación a ponerse en marcha se hará sin perturbaciones para la línea.
En la mayoría de los casos usar un SSR resuelve los problemas.
Ejemplos.. para poca corriente
image
para mas corriente

image

y lo usas del mismo modo observa esto

1 Like

Muchas gracias Surbyte, en cuanto lo pruebe te comentare como funciona

Ten en cuenta que en el mercado hay muchas falsificaciones de los relevadores de estado sólido (SSR) Fotek. En este ejemplo, uno de muchos, la capacidad real del dispositivo es la mitad de lo que indica su etiqueta.

No sabia que era FAKE.. buen dato.
Lo unico que hice fue buscar una imagen y mira con lo que termino recomendando.
Va a la carpeta de documentación donde abrí un hilo de fakes comprobados.

Hi,
Aqui se le recomendo a mateojaimes23 de usar un SSR pero se trajo a colacion por mancera1979 que hay que tener cuidado cuando se compran los FOTEK SSR ya que los hay "FAKE" segun el link que explica como detectar cuando el FOTEK SSR relay es "FAKE". Adjunto una foto de un FOTEK SSR relay que es real segun las explicaciones dadas en el link de mancera1979. Despues de hacer varias busquedas en EBAY y Google encontre que uno de los vendedores de EBAY vende los relays que son "REALALES" y tambien encontre algunos que eran "FAKE". Les aconsejo que vayan donde esta el link ya que esto es critico cuando se desarolla un projecto ya que estos componentes que son "FAKE"puden hacer fracazar el projecto.

Y para colmo de males, parece que ni podemos guiarnos de los detalles que marcan en el link, a juzgar por la foto de la página de Fotek de los ssr montados en los disipadores

Yo estuve utilizando un relevador electromecánico convencional para controlar una fuente de alimentación de de 48V, del lado de 110V (México), que consume solamente unos cuantos amperes. Algunos relevadores se quedaban pegados con el uso (mala calidad también). Entonces cambié al SSR-DA-25, que “debe tener” capacidad de sobra. Claro que al principio todos eran copias (fake), pero no me dieron problemas. Lean los comentarios de la publicación referenciada en el Post #5. En aplicaciones críticas esto puede causar una catástrofe.

Según las especificaciones, el dispositivo se activa con 4V y se desactiva con <3.5V. Esto puede quedar cerca del límite de los voltajes de salida de un pin de Arduino. En la práctica se activan a menor voltaje.

Puedes descargar la hoja de datos en https://www.fotek.com.tw/en-gb/download/61. Este documento contiene algunas recomendaciones para su uso con cargas inductivas (motores y transformadores) que considero importante tomar en cuenta.


Este es mi SSR falsificado de 40A. Solo lo he usado para pruebas de laboratorio con muy baja corriente. Lo que es muy evidente es que no se dispara en cruce por cero.

En compras en línea solamente nos enviaban falsificaciones.


Localizamos un distribuidor de Fotek y ya no hemos tenido problemas.

Este es original.
La foto de la caja es anterior a que cambiaran el logo.

Hi,
Mirando las senales para mi el esta disparando cuando el voltaje de la senal que energiza el relay esta cerca de los 2.7 voltios cuando el relay se energiza. Ahora hay que ver si el ssr es zero crossing ya que vienen de ambas forma. Vienen de cruze de zero y los que no son de cruzen de zero por lo tanto hay que cerciorarse cual de los dos vaz comprar.

Efectivamente, se dispara a un nivel de voltaje muy inferior a 4V.

Y gracias por la aclaración, yo creía que todos eran de control cruce por cero.

Aparentemente, según https://fotekmex.com/productos/relevadores/monofasico?serie=SSR la nomenclatura de esta unidad indica que debería de cruce por cero. Pero al no ser original no puedo comentar más. Cuando tenga una original a mi alcance lo podré confirmar.

Hi,
Yo uso este que esta en el link adjunto y se puede comprar ambos tipo de zero cruze. El problema es el precio ya que cuesta 26 dolares pero estas pagando por calidad. Yo tengo uno que esta en servicio por lo menos 9 años sin problemas.

https://www.mouser.com/datasheet/2/307/g3ne_ds_e_4_1_csm166-1221231.pdf

Tan malo no es, seguramente es un modelo que corta en el cruce por cero. :stuck_out_tongue_winking_eye:

Sí, lo hicieron al revés :rofl:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.