Problema de Arduino con comunicación USB y Motores de Vending Machine

Hola a todos, como dice el topic, tengo problemas con un proyecto que estoy realizando con un Arduino Uno, primero les explicare en que consiste. Estoy realizando un prototipo de Vending Machine el cual entrega ciertos productos cuando por medio de una comunicación USB (serial) se manda cierta instrucción. Ademas cuenta con un sensor infrarrojo el cual manda una señal cuando el objeto o producto cae (se entrega) para que el motor se detenga. El proyecto funciona bien pero al parecer de tanto activar y desactivar los motores llega el momento donde el Arduino deja de comunicarse por el puerto serie con el PC de manera que se bloquea y la única forma es desconectando y conectando de nuevo el puerto USB, pero la falla sigue ocurriendo con el transcurso de diferentes activaciones.

En la siguiente imagen pueden ver como esta el sistema conectado, tengo las alimentaciones por aparte y solo tengo puenteado la señal de 5V del Arduino al Modulo de Reles para poderlo referenciar, sin embargo este modulo esta alimentado de manera indepentiende a su vez los motores son a 24V dc y para eso tengo una Fuente Externa de 24 V dc solo para encenderlos y apagarlos, ya que el sensor infrarrojo a pesar que es también de 24 V dc decidí colocarle una alimentación diferente y referenciar la tierra al Arduino para que trabaje correctamente. Por favor si alguien me puede ayudar le agradecería pues ya he mirado que puede ser y solo se que es un ruido que se genera cuando se activan los motores pues si pruebo sin carga (sin los motores) esta falla no ocurre o almenos no hasta ahora. Muchas gracias de antemano.

Como no puedo ver la imagen (mira el privado para que edites tu post inicial) no se si tienes o no diodos en antiparalelo en los motores y electroválvulas involucrados en la máquina.

Listo ya lo edite, muchas gracias, con respecto a tu pregunta pues los motores son de vending machine es decir ya vienen solo con los bornes para conectarlos y alimentarlos, ahí en la imagen puedes ver como esta todo conectado. Gracias

Bueno si no interpreto mal tu esquema el arduino esta alimentando los RELES y si es el caso eso es lo que esta generando el problema.
El módulo de reles consume mucha corriente. Debes alimentarlo con fuente externa de 5V y de la corriente adecuada (como 60 mA x rele) si cuento 16x60mA= 960mA entonces una fuente de 1 o 1.5A estará bine.
Comparte GND con Arduino y listo.

De todos modos... que tengas los contactos nada me dice sobre el tema que te mencioné respecto del ruido que genera una válvula o motor DC.

Tenlo presente o bien, otra alternativa es usar MOV del valor adecuado.

Yo haría una simple prueba con alguna de las válvulas/motores.
Pondría un tester/multímetro y medir en un sentido y otro la resistencia del bobinado. En ambos sentidos debería dar igual. Si hay un diodo, en un sentido habrá diferencia

EDITO: Dudo ahora que lo pienso mejor que tenga un diodo. Considera agregarlos. Un simple 1N4002 será suficiente en cada válvula o motor. Siempre que el motor no cambie de sentido. Si gira en uno u otro sentido, olvidate. Y ahi debes usar MOV.

El arduino no esta alimentando a los reles si miras ahi en el dibujo se ven los reles alimentados por un adaptador de 12 V, solo que toca ponerle el vcc del arduino como referencia para poderlos controlar ya que estan alimentados por fuentes diferentes. En cuanto al MOV o Diodo pues como los motores son de vending machine tienen un cubrimiento en plastico que no me deja ver como estan por dentro pero si probe colocando un diodo 1n4001 en la salida de la fuente de 24 V de los motores pues todos estan puenteados no se si ese sea mi error, tu me diras. Muchas gracias

Tome medida con un tester midiendo la resistencia entre los dos bornes del motor y efectivamente cuando coloco las puntas de manera correcta me mide un valor de resistencia y cuando invierto los bornes no me lee nada.

Como nada? Debería leer igual.
Tiene indicada polaridad?

@surbyte Si claro los bornes del motor que vez en la imagen estan marcados con + y -. Si con el tester mido de manera correcta en una escala de 20Mohm me marca como 3.88Mohm y si invierto las puntas no me dice un valor, es como si estuviera un diodo en inversa es decir un numero de resistencia muy alto. Como te muestro en las imagenes:


Today at 16:11:41 Last Edit: Today at 16:17:59 by Aler26
Si con el tester mido de manera correcta en una escala de 20Mohm me marca como 3.88Mohm y si invierto las puntas no me dice un valor

3.88Mohms es un valor que no hubiera imaginado, pero que en el sentido opuesto te de supuestamente abierto no se corresponde con un diodo.
Si claro que deberías hacerlo nuevamente y poner el multimétro en lectura de diodos y repite las lecturas.

Ya hice las pruebas midiendo y me da 0.595 de manera directa y en invertida me marca como si estuviera abierto.

Hi,
Pregunta donde esta el ground del arduino a la caja de los relays. Veo que tiene los +5 pero no veo que tenga ground. Solamente los cables de los pines que van hacia los relays. Otra cosa que es una buena practica es trenzar los cable por ejemplos los cables de la caja de relays a los motores. Cuando uno trenza los cable se cancelan los ruidos de corriente alterna. Esto no quiere decir que va arreglar el problema pero es una buena practica de trenzar los cables.

Bien, eso es correcto, entonces si tiene diodo.
Ahora nos entendemos.
Bueno entonces no hay que preocuparse por esa parte.

El proyecto funciona bien pero al parecer de tanto activar y desactivar los motores llega el momento donde el Arduino deja de comunicarse por el puerto serie con el PC de manera que se bloquea y la única forma es desconectando y conectando de nuevo el puerto USB, pero la falla sigue ocurriendo con el transcurso de diferentes activaciones.

Retomando el problema y aunque no encontramos la causa, que tal activar el watchdog para que se autoresetee y siga funcionando?

Pregunta donde esta el ground del arduino a la caja de los relays. Veo que tiene los +5 pero no veo que tenga ground.

Si no estuviera te aseguro que los relays no se activarian.
Estoy de acuerdo conque no se ve, por eso no me gustan esos esquemas, me cuesta entenderlos.

Gracias por responder, pues los motores son DC y tienen su fuente de 24V separada de la de control y de la de los reles, ahora con respecto a el cable GND del arduino no va debido a que se referencia solo con el voltaje Vcc, debido a que si pongo la tierra estaria uniendo las tierras del arduino con las de los reles a pesar de que tienen fuentes diferentes y notaba que esto hacia que los reles se empezaran a disparar asi no tuviera el arduino conectado. Es decir antes tenian un comportamiento extraño, buscando en foros me di cuenta que la gente cuando usa diferentes fuentes en el caso del arduino y los reles solo referencian con Vcc.

NOOO!!! <=== ME EQUIVOQUE

Jamas referencies por VCC quien te ha dicho semejante barbaridad?

EDITO: Ya se que has hecho..
Comandas el diodo del opto de cada rele entre VCC y el pin. De ese modo el RELE actua en logica directa y no inversa como siempre estamos advirtiendo.

Me corrijo. Esta bien.

Te coloco los hilos donde solucionaban unos problemas haciendo eso, debido a que cuando lo use por GND pasaba el problema que cuando el arduino se apagaba los reles tomaban los pines I/O del Arduino como en Bajo y activaban los reles:

https://forum.arduino.cc/index.php?topic=367425.0

@surbyte Por cierto amigo como puedo activar el Watchdog que me dijiste para que se reinicie solo y siga con la comunicación?

Hi,
Si no es molestia podrias dejarnos saber el modelo de los relays.

Claro amigo:

Hi,
Pregunta el usb y los +12 ambos estan conectados?

No el usb solo se conecta al PC para establecer comunicacion serial para eso lo tengo conectado a un adaptador de voltaje para alimentarlo de manera externa.