Tengo un problema, busqué bastante por Internet, pero no encuentro una solución clara a mi fallo. Tengo dos PCB con relés, una normal con un diodo y otra con un optoacoplador (esta en concreto http://www.ebay.es/itm/221269107618?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649).
El relé está conectado a un motor (a la red de 230 V) el cual tiene un imán que gira.
El relé sin estar conectado al motor (en vacío) funciona correctamente y el monitor serial también. Pero con el motor conectado se me congela la comunicación serie (llegando incluso a colgarse Java en el PC).
Dicho problema me pasa con ambos relés, el normal y el optoacoplado.
También probé a conectar el relé normal a una fuente de alimentación externa (5 V y 1000 mA) para liberar al Arduino UNO, pero al tener que conectar el pin digital que envía la intensidad de cierre o apertura además del GND, me falla en lo mismo.
Os pongo también el código sencillo con el que hago las pruebas, me envía la primera lectura, pero una vez que gira el motor ya no envía nada por serial. De todas formas el Arduino sigue ejecutando el código, sólo que no envía más los datos por el USB hasta que lo desconecto y lo vuelvo a enchufar (aunque vuelve a fallar una vez que gira el motor de nuevo).
Un saludo.
int rele = 8;
void setup()
{
Serial.begin(9600);
pinMode(rele, OUTPUT);
}
void loop()
{
String valores = "";
for (int analogPin = 0; analogPin < 5; analogPin++)
{
int sensor = analogRead(analogPin);
valores += String(sensor);
if (analogPin < 4)
{
valores += " ";
}
}
Serial.println(valores);
delay(3000);
digitalWrite(rele, HIGH); //Enciende el motor
delay(10000);
digitalWrite(rele, LOW); //Apaga el motor
delay(3000);
}
Dudo que ese código de algo. Valores después de salir.del for no existe.
por otro lado haces un recorrid hasta pero si es menor a 4 lo vacías.
RevIsa el código
maxid:
Dudo que ese código de algo. Valores después de salir.del for no existe.
por otro lado haces un recorrid hasta pero si es menor a 4 lo vacías.
RevIsa el código
Hola,
Ante todo, gracias por contestar.
Si abres el IDE de Arduino, vas a Archivo > Ejemplos > SD > Datalogger, podrás observar que mi código de prueba es una variante de ese
El código funciona perfectamente.
Una prueba:
El problema no es el código, ya que hice este código para hacer primero la prueba y luego llevarlo a otro sistema, pero no me funciona.
Me da la espina de que tengo problemas de interferencias que entran por el relé y van al Arduino haciendo que falle el serial.
Mañana voy a probar con un par de filtros de ferrita que tengo en casa, a ver si así se soluciona el problema, postearé algo en cuanto haga las pruebas.
Como el hueco de los filtros son más anchos que el cable, enrollaré este al filtro.
Bueno, pues ya está solucionado, o eso parece.
Resulta que fallaba porque el motor tiene un imán que gira. Los imanes al girar crean un campo magnético, el motor si lo colocaba lejos (5 m) a baja rotación no me fallaba la comunicación serial, pero si lo acercaba al Arduino y PC sí. Si le daba más velocidad al motor (a 5 m de distancia) también me fallaba.
La solución fue poner un cable USB (Arduino-PC) con filtros de ferrita en cada extremo, parece que así no falla. Aunque mañana haré una prueba larga (20-30 minutos seguidos girando) para ver si falla de nuevo o no. Lo comentaré.
Pues en principio está solucionado, era por el cable USB sin filtros de ferrita. Hice una prueba de 30 min, con el motor y el imán girando al tope de revoluciones a escasos 10 cm y todo funciona perfectamente.
Adicionalmente también voy a proteger con más filtros de ferrita individuales otras cablerías, por si acaso más que nada jejeje