Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: 1 [2] 3   Go Down
Author Topic: Arduino Uno + Placa Reles 12vdc - 220Vac + C#, rompe la comunicación serial  (Read 8048 times)
0 Members and 1 Guest are viewing this topic.
Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

trabaje en sistemas, y armador de placas en una empresa de automatismos industrial, y usabamos esa configuración, y te aseguro que era inmune al ruido, lo malo de arduino que no tiene los capacitores de desacople como debiera.
Soldale un capacitor de 100nf entre vdd y vss del micro lo mas cercano posible.
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
como conecto la resistencia y el capacitador igual que el varistor? los tres en paralelo con la fase?

Muchas gracias
Saludos.
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vuelve a ver el plano. No estas leyendo, van en paralelo a los contactos NA del rele
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si disculpa lo volví a mirar bien y lo entendí perfectamente, igualmente de momento solo he puesto los varistores y he separado la potencia del arduino unos 10-15cm, y la primera prueba de 10 horas, ha sido satisfactoria tendré que probar a mas largo plazo pero las ultimas pruebas antes de poner los varistores me petaba la conexión serial cada hora o cada hora y media.

Esta noche volveré a ponerlo en marcha en su sitio y lo dejaré en marcha indefinidamente a ver que pasa, os voy contando.

Muchas gracias Maxid y a los demás que han leído el post o han aportado lo que sabían.
Saludos.

Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno me alegro que resulte, si ya está solucionado recuerda marcar el mensaje como solucionado para cerrar el tema.
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Bueno en principio no se solucionó el problema del todo, lo voy a explicar. Lo primero que hice fue conectar los varistores y medio blindé la parte de media tensión con la de baja tensión como me indicó el amigo Maxid, el resultado fue bueno pero no perfecto. Ya no se perdía la comunicación por serie pero el ruido en algún momento dado modificaba el valor de los sensores y estos llegaban con un formato incorrecto a mi aplicación C#.

Lo que hice y recomiendo fue como me dijo el buen amigo Maxid, separar completamente la parte de media tensión y baja tensión, no he posteado antes por eso porque me costo lo suyo separar el arduino de la placa de relés. Lo separé todo en dos cajas y hecho de momento llevo 72 horas sin interrupción por lo que el problema parece estar solucionado y si no lo esta del todo y dentro de unos días me falla de nuevo será porque sigue llegando demasiado ruido y puedo asegurar que el problema es ese porque jamas había durado tanto tiempo sin fallar.

He aprendido una buena lección, doy las gracias y reconozco que la distribución de mi proyecto era una gran chapuza, ahora esta limpio, bien cableado y bien separado y el resultado se ha notado enseguida.

No pongo el título como solucionado todavía porque prefiero esperar una semana entera en funcionamiento y asegurar que el problema está 100% resuelto.

Muchas Gracias.
Saludos.
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ahora yo iría por el lado del PC, no se como tenes configurado tu programa para que lea el puerto, pero aveces parece que está colgado, pero es un problema de sincronismo, cuando se lee permanentemente el puerto si perdes un bit , se queda esperando el stop y ya no recibis nada.
Te comento como solucioné este inconveniente, primero tu pc deberia enviar un caracter llamemoslo 'a' para solicitar datos al arduino. Si arduino recibe 'a', envía la trama de datos, digo trama porque debes tener un encabezado + bloque de datos + checksum, si los datos recibidos tienen el checksum correcto lo tomas sino vuelves a pedir los datos.
A todo esto lo debes hacer cada cierta cantidad de segundos, si en ese periodo no llegan los datos, o no terminan de llegar la cantidad de bytes esperados, descartas el paquete o reinicias la librería de comunicaciones. Es como un watchdog del lado del pc. Ten cuidado de solapar llamadas, no pidas un nuevo dato si no terminó de llegar el anterior, eso puede ocasionar tu falta de recepcion.
En muchas oportunidades según el método de conexión al puerto es necesario hacer flush para limpiar el buffer y no quede basura.

Bueno, espero no te asuste todo lo que te menciono. jijijiji
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

No gracias esta es la parte que mas controlo, como decía soy mas bien programador y de electrónica... pues 0,1 por no decir 0 aunque ya le voy pillando un poco la idea.

Tengo un objeto (clase, método... como queráis llamarle) que comprueba cada uno de los valores que recibo si no recibo bien, hago un serial flush, espero un segundo y vuelvo a pedir los datos de momento llevo 80 y pico horas si un solo error ni en datos de sensores ni en la comunicación serial, ni tampoco con el encendido o apagado de hardware (a traves de los reles)

Pero igualmente me ha gustado tu planteamiento y voy a modificar mi validador para basarlo en el checksum de cada sensor.

Es importante validar el formato de los datos que recibimos del sensor porque a veces el cheksum devuelve correcto pero por ejemplo el DHT11 se descalibra fácil y da valores desorbitados como p.e 235% de humedad... y eso puede joderlo todo....


muchas de nuevo Maxid
Saludos.
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

no quiero ser pesado, te doy otro consejo.
Usa valores puros, no los calcules en el arduino, envia directamente lo que te da el conversor y juegas en la pc con la resolucion. Tambien puedes enviar valores decimales como enteros, esto te ayuda al envio de datos, por ejemplo enviar 154,34 lo pasas como 15434 y lo divides en 100 en la pc.
Ahorras byte un entero son pueden ser 2 bytes y un float entre 4 y 6.
Y usa velocidades bajas si son pocos datos con 9600 baudios sobra.
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
pues justamente eso hago, envío el numero sin decimal y en mi programa del pc lo divido, también utilizo ese rate de baudios porque he probado con mas velocidades pero como mas fino va es con 9600

por cierto si esto es ser pesado... sigue siendo todo lo pesado que quieras jaja

A ver si pulo todo y os muestro el proyecto entero porque esta bastante chulo la verdad, lo controlo todo desde una aplicación de escritorio con c# como ya sabéis, por interfaz web todo hecho con php, ajax y jquery, y desde smartphone (con app nativa en java)
Tanto para leer los datos de los sensores, como para interactuar con los reles.

así que a ver si voy puliendo y en breve os enseño en el foro adecuado mi proyecto.

Gracias de nuevo Maxid.
Saludos.
Logged

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, bueno pues sigo igual con el mismo problema, me he decidido a hacerle el circuito RC a cada relé y ya tengo todo, porque con los varistores y separando la baja tensión de la red conseguí alargar el error.

Lo único que no entiendo muy bien es en el esquema que me has pasado Maxid, veo que la resistencia esta en serie con el capacitador y el varistor ¿es correcto? ¿o debería ir en paralelo?, una patilla de la resistencia a la entrada de tensión antes del relé y otra a la salida de tensión después del relé?


Muchas Gracias.
Saludos.
Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

es un circuito RC serie. sirve para absorber energia. No es un filtro paso bajo-alto.
http://es.wikipedia.org/wiki/Circuitos_de_primer_orden_RL_y_RC

Van en paralelo a los contactos del rele, te hago un dibujo.
Puedes tener ruido en la fuente de alimentación, arduino tiene filtros minimos, deberias poner un capacitor de 1000uf en la fuente y de desacople de 100nf. Esto puede traerte falso reset, y el micro no se inicializa correctamente.
Pero creo que el problema ya no viene por los reles, se me hace que es de soft, porque si no tenes demasiadas repeticiones no deberia colgarse. Fijate los bucles, y que no pidas memoria que no tenes.
Yo pondria un led testigo para saber si realmente esta colgado, en cada bucle activas y desactivas el led. Porque aveces parece estar colgado pero no lo es.
Tu soft sigue pidiendo datos y los leds de la cumincacion parpadea almenos la recepcion? en el uno la comunicacion la lleva otro micro.


* filtrorele.png (12.66 KB, 578x448 - viewed 61 times.)
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
los únicos datos que arduino me da son los datos de 9 sensores (2356~2020~3000~2300~800~400~200~820~960~) cada 15 segundos... luego lo único que hago es enviar caracteres sueltos, "b" enciende rele1 "c" apaga rele1
y es todo programable por minutos, osea que no se hacen muchos envíos de datos a arduino. Envío carácter a arduino como unas 3 o 4 veces por hora.

ademas lo he comprobado sin conectar la tensión de red a los relés y funcionó durante 5 días sin ningún problema.

No había hecho el circuito RC solo había probado con los varistores en paralelo y separando arduino y la placa de relés en dos cajas.

He probado con fuentes diferentes y pasa lo mismo.

Mira este es el cricuito rc que he hecho a ver si te parece correcto, por detrás el circuito es exactamente igual al esquema.

PD: el tornillo del medio del conector es nulo.
PD2: Los leds dejan de parpadear cuando se cuelga y solo lo salva desconectar y conectar el usb, si reinicio desde el botón sigue la comunicación serial caída.




Gracias.
Saludos.
« Last Edit: June 13, 2013, 11:49:30 am by espadarrota » Logged

Cordoba
Offline Offline
God Member
*****
Karma: 41
Posts: 766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mmm, proque no evitas el usb? usa un adaptador usb-ttl y usas los pines tx rx del arduino, y salteas el traspaso de micro a micro.
el filtro está bien.

ejemplo del aparatito. http://www.ebay.com/itm/USB-2-0-to-TTL-UART-6PIN-Module-Serial-Converter-CP2102-/290803061413?pt=US_Drive_Cables_dapters&hash=item43b53692a5

Si no te molesta postea el codigo y vemos entre todos que puede tener el codigo. Puede estar colgada la comunicacion y no el micro. Por eso te digo de poner un led dentro del loop()

Otro problema puede ser que el pc ahorre energia en el puerto, puedes deshabilitar el ahorro de energia en los puertos.
No alimentes el sistema desde el usb.
Logged

El que pregunta aprende, el que responde aprende a responder.

Spain
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Be Duino
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Mira he visto este adaptado USB to TTL cp2102 bastante mas barato:

http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=121109966311#ht_4168wt_1388

¿Es lo mismo no?

¿La fuente de alimentación si utilizo una de Pc? ¿se supone que son muy buenas no?

Es muy posible que el micro no se cuelgue y solo la comunicación serial porque, solo con desconectar el usb y reconectarlo es suficiente, no me hace falta ni reiniciar el arduino ni desconectarlo de la fuente externa ni nada.

De hecho ni eso simplemente me meto en el administrador de dispositivos, deshabilito arduino y lo vuelvo a habilitar (que es lo equivalente a desconectar y conectar el usb físicamente)

Pero me hace dudar que sea por tema de programación porque como te dije solo pasa cuando hay tensión 220V en los contactos de los relés si no hay tensión en los reles no se cuelga.

Yo creo que es por el ruido que genera la red a 220v. No he podido probarlo todavía con el circuito rc, pero yo creo que lo suyo sería probar este fin de semana con los circuitos rc conectados a cada relé y a ver que pasa.

Cuando llegue el adaptador usb to ttl lo cambiaré directamente.

Ahora mismo estan los reles y los enchufes a 220v separados en una caja distribuidora, y el arduino con los sensores en otra caja. Las dos cajas están conectadas entre si por los cables que activan los relés desde arduino.
¿
Esto ya no debería dejar pasar ruido? ¿o puede seguir colándose?

lo reconozco soy muy chapuzas, mas que nada porque no conozco ni el 50% de las posibilidades que hay en electrónica, entonces esto reduce la optimización de mis análisis electrónicos.
a ver si me da tiempo hoy a hacer todos los circuitos rc bien hechos.

Maxid, lo de siempre... muchas gracias.
Saludos.
Logged

Pages: 1 [2] 3   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: