Medir cierres a 50m

3

Odio decirlo, pero soy un noob de electrónica. Bueno, he tenido algunos éxitos, así que probablemente sé lo suficiente para que haya muchas cosas que no sé.

Estoy teniendo problemas con, creo, ruido.

Tengo un teclado en mi puerta que me gustaría usar para abrir la puerta para las personas que tienen un PIN válido. Elemental.

Hay una pequeña y ingeniosa biblioteca de Arduino que maneja un teclado PIN, y funcionó bajo circunstancias controladas: conecté un teclado PIN de prueba directamente en el arduino, y todo funcionó como se esperaba. La documentación está aquí: enlace

Sin embargo, cuando conecto el teclado de la compuerta al Arduino a través de un cable Ethernet de 50 m, las cosas no funcionan como esperaba. El Arduino detecta cierres en el cable. Docenas, en el espacio de unos segundos (creo que el mecanismo de rebote de las bibliotecas puede actuar como un limitador de velocidad).

Los cierres dan como resultado lecturas de la siguiente manera:

222222222222112222221 222222222112222212222 212222222221222222222 221321222222222212222 222132222222222221322

Entonces, en general, la columna central de claves, con algunos cierres desde la primera y última columna. Si quito el conector de la primera fila, se repite un patrón similar, aparentemente aleatorio, pero esta vez reflejando los cierres en la segunda fila:

556565555555555555555 555555555555555555555 565555556555555555555 555655555555555565555 556555555555555555554

Concluyo que el Arduino está detectando cierres aleatorios (y que la biblioteca escanea la primera fila antes de escanear la segunda). Lo que es interesante, ya que entendí que la resistencia de pullup en el Arduino debería haber solucionado esto ("No necesitará resistencias o diodos externos porque la biblioteca usa las resistencias de pullup internas y además asegura que todos los pines de columna que no se utilizan son de alta impedancia") .

El teclado está a unos 50 m del Arduino y las conexiones se realizan a través de Ethernet, un cable de par trenzado (que no lleva corriente). El cable pasa por una bomba de piscina y un enrejado para (aunque en un conducto separado) la alimentación eléctrica a esa bomba de piscina. Alguien colocó una amoladora angular a través del cable Ethernet y, en consecuencia, el teclado está conectado al cable Ethernet en una caja de conexiones que también incluye un pequeño transformador de CC de 240 V a 1 A, y un montón de otros cables.

Si pruebo metódicamente todos los cierres desde el teclado a lo largo de los 50m ethernet, mis pruebas son positivas porque veo que la resistencia cae casi a cero cada vez que se presiona un botón en el teclado.

El software es mi juego. Entonces, en teoría, podría apilarme en la biblioteca y dedicarme a mejorarla. Pero, siento que el problema es un problema electrónico.

Realmente valoraría cualquier entrada en cuanto a cómo corregir esta situación (sin mover el Arduino al teclado). Si es posible medir de forma fiable un cierre a 50 m.

    
pregunta renen

2 respuestas

3

En cuanto a esa biblioteca, utiliza los controles internos del AVR que son bastante débiles. Podría valer la pena agregar algunas resistencias de pull-up de 1K en las filas y ver cómo eso hace que las líneas sean más duras. También mire el código y vea cuánto tiempo transcurre entre la conducción de la fila y la lectura de la columna, podría valer la pena agregar un retraso en caso de que la capacitancia a lo largo de la longitud del cable esté en juego.

Una solución más robusta sería usar un microcontrolador en el extremo del teclado y transmitir los datos de vuelta utilizando algo como RS 485 estándar que se basa en una línea equilibrada diferencial. Se podría hacer a un costo muy bajo, pero implicaría un poco de investigación / esfuerzo adicional.

    
respondido por el PeterJ
2

Sin tener un circuito al que ir, puedo imaginar el lado eléctrico de las cosas que funcionan así: -

3 controladores de columna y 4 entradas de fila. Cada columna se activa, a su vez, con un pulso corto y las entradas de 4 filas se "leen" para ver si el pulso de la columna se ha transferido a alguna de las filas debido al cierre de un botón.

OK hasta ahora? Podría haber una sutileza en esto cuando hay 4 controladores de fila y 3 entradas de columna, pero el problema y la solución serían los mismos.

Con cables largos que tienen inter-capacitancia, el pulso transmitido por un controlador de columna se conectará de forma cautiva a todas las entradas de la fila. ¿Cuánta capacitancia del cable? Alrededor de 50pF por metro para CAT5.

50m significa 2.5nF y esto seguramente será un problema porque un impulso de columna estará fuertemente acoplado a los otros 4 cables utilizados como entradas.

La solución es probar y disminuir la impedancia en las 4 entradas y esto puede resultar exitoso. Usted dice que la MCU proporciona pull-ups débiles, estos deben reducirse a valores más pequeños para que esto funcione y, como sugiere PeterJ, tal vez intente 1kohms.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas