Problema con attachinterrupt

Buenas foro! Tengo un problema con arduino uno a la hora de usar las Interrupciones. Os explico a continuación el problema.

Quiero usar mi arduino para detectar pulsos enviados a través de un monedero multimoneda para analizarlos y según lo que reciba mostrsr el resultado en un display de 7 segmentos. (este proyecto es para incluirlo en una máquina Arcade)

La manera de analizar los pulsos es usando:

attachInterrupt(digitalPinToInterrupt(interrupcion), función, RISING);

Los pulsos se detectan bien pero el problema es que detecta de más..., me explico. Al apagar o encender la luz de casa (interruptor de la luz de mi habitación) también lo recupera el arduino como si le llegarán pulsos...

He hecho pruebas con cables finos(típicos para arduino) y he comprobado que si este cable es corto no detecta esa morralla pero si le empiezo a empalmar cables pasa lo descrito antes, empieza a detectar como pulsos enviados por el monedero. Para esta prueba he conectado directamente el arduino al portátil y los cables conectados en el pin2 y sin conectar al arduino.

La conclusión que he sacado es que es por culpa de los cables pero no estoy seguro. ¿Debo usar cables a pantallados para interrupciones?¿Como puedo hacer para quitar ese ruido que recibe el arduino?

Muchísimas gracias de antemano!!!

¿Interconectaste la masa entre los dos dispositivos?

Aún con esas me pasa. :frowning:

Ya te digo que hace do la prueba del mínimos me pasa:

Conecto el arduino al pc, el pc sin conecta e a la luz de casa(funcionando con batería), le conecto un cable corto, apago y enciendo la luz y no pasa nada.
Hago la misma prueba con un cable más largo conectando varios cables pequeños y entonces cuando apago y enciendo la luz detecta que son pulsos.

El problema de la tierra podría darse y me lo anoto para hacerlo pero en la prueba que hago no uso el monedero

No se si tendría que usar algún cable apantallando o algo para que no afecte el ruido que provoca la Red eléctrica de mi casa en el pin2 de arduino... :confused:

El problema de la tierra podría darse y me lo anoto para hacerlo pero en la prueba que hago no uso el monedero

Si tienes un cable suelto, forzosamente tendrás falsos positivos, prueba lo mismo pero colocando una resistencia de varios kohms conectada a masa.
Y si no conectaste la masa cuando hiciste la prueba del monedero, seguro que ahí esta la causa del error. Siempre que se interconetan dispositivos ( a menos que sean de contacto seco ) hay que interconectar las masas.

me refiero a la masa ( GND) de los dispositivos, no la puesta a tierra que suelen ser dos cosas diferentes.

Muchas gracias por tu respuesta!, haré la prueba de lo que me comentas y te contestaré más adelante! :slight_smile:

Algunas veces un condensador de 10nF en paralelo con el "interruptor" hace milagros!!!

Hi,
El problema cuando usas un switche para generar un interrupt es que los switches normalmente producen ruidos de rebote de los contactos y esto te caus lo que estas esperimentando. Pregunta porque usar el interrupt cuando solamente usas el arduino para leer las monedas. Creo que puedes tratar de usar un puerto como entrada y usas la routina de de-bouncer que tiene el arduino. Trata como victorjam te aconsejo de usar un condesador en parallelo a los contactos de .1uf. Yo simpre que uso switches le anado el condesador en parallelo a los contactos. Este minimiza los ruidos. Otra cosa es de si el cable es largo debes de usar cable blindado. Otra cosa es de trenzar los cables para filtrar los ruidos.

Buenas!, aun no he podido probar lo que me habeis comentado pero en breves lo hare!, Hace muy poco pude hacerme con un cable apantallado y lo probe pero el problema seguia estando.

En cuanto pueda(estoy justo de examenes xD) haré tanto lo de la GND y lo de el condensador en paralelo, voya ver si los pido por aliexpress y en cuanto lo pruebe os digo que tal ha funcionado!,

Muchisimas gracias!

Enséñanos el diagrama como está conectado todo.

Pues aqui os dejo el diagrama.

Acabo de probar justo lo que veis ahora(Cable Coin apantallado y GND tanto al monedero como a el arduino) y sigue fallando. Me faltaria probar lo del condensador que por ahora no lo he probado porque aun tengo que pedirlos.

El porque de usar attachInterrupt es basicamente porque buscando por internet, he visto que gente con proyectos parecidos al mio (juntar un arduino con un monedero multimoneda y tratar cada moneda de diferente forma) han usado interrupciones, ya que el monedero mandara los "pulsos" que programemos para que el arduino reconozca estos pulsos. El Arduino interpretará los pulsos viendo el lapso de tiempo que pasa entre los pulsos para saber que moneda ha entrado. No se si es la manera mas efectiva pero es la unica que he encontrado.. :confused:

Por cierto, tambien he probado lo que hacen en este video (poner una resistencia de 10K entre el pin de coin y conectarlo tambien a 5v del arduino) y tampoco funciona bien, sigue recibiendo esos pulsos falsos cuando apago y enciendo la luz

Específicamente ¿cual es el modelo del monedero? y si tienes el enlace al manual.

Hi,
Pregunta : Que contacto estas usando del switche. Algunos tiene el que es normalmente abierto y el que esta norlmalmente cerrado. Aqui te esta olvidando que los switches de contactos al cerrar y abrir van al principio producir brincos y esto te va producir varios pulsos. Por eso si vaz a usarlo como interruptor necesitas limpiar estos pulsos.Por eso se te esta sugeriendo que lo uses como una entrada digital. Asi prodras usar la routina de "debouncer" para limpiar los pulsos.

El monedero es justo este:

Y sobre lo que me comentas de las lecturas digitales creo sinceramente que es lo que debo hacer.. porque creo que todo viene de usar el attachinterrupt de manera incorrecta..
Y tambien añadir que estuve justo probado lo que me comentas de NO NC y creo que lo tengo NO porque de la otra manera no me funcionaba... Lo tendria que mirar(luego lo veo y os digo).

Lo que no entiendo es como a la gente de internete en varios tutoriales les funciona pero bueno...
Haré lo que me comentas e investigaré lo del debouncer y ver como hacerlo bien.

A ver si puedo apañar un código para hacerlo asi y ya os digo algo.

Muchisimas gracias por toda la ayuda. Os hago saber en probar!!

Hi,

Adjunto un link que esplica como filtrar los ruidos que se producen al cerre y abrir un contacto. pruebalo para ver si te trabaja usando el interrup. No pierdes nada antes de tirar la toalla.

https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019Mo5SAE

Okay!! Lo probaré y os digo también! Gracias!!!

Por cierto…lo del condensador, ¿os referís a hacer lo siguiente? :

¿Me valdrian estos?:

Imagino que debo hacerlo como indican en esta web cuando se refieren a Debounce por Hardware:

En cuanto me digais si esos condensadores son buenos probaré a comprarlos y os digo algo!

Muchisimas gracias de verdad por adelantado!

Me encanta aliexpress: bolsa de 1000 unidades de 100nF en la foto, y luego el lote es de 100 unidades a elegir.
Pero si, ceramicos, y probaria varios valores.

Y si, ese es el circuito, quizás la resistencia sobre o no. Hay que probar.

Solo encontre este ¿manual? No dice en ningún lado que tenga tensiones TTL. Al parecer es universal y la salida es NPN 12V (no puedo afirmarlo). Deberías armarte con un multimetro digital y comprobarlo.

Hi,
Yo lo intalaria usando el circuito adjunto. El voltaje debe de venir del Arduino. La resistencia R1 y R2 con el condesador forman un delay cuando cierras/abres el contacto y esto hace que filtre los ruidos que se generan de los contactos.interrupt-filtro.pdf (17.4 KB)

interrupt-filtro.pdf (17.4 KB)