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.