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)
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?
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...
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.
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!,
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..
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
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.
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!!
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.
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)