De acuerdo, déjame sumergirme en esto en breve (para mí, así que no más de una o dos horas ;-) ).
Como primera respuesta, que se me ocurrió cuando empecé a teclear lo de lamer abajo:
Los sobrinos de tres años tienen cuerpos muy pequeños y les queda mucho desarrollo del sistema nervioso, por lo que, en última instancia, es importante que te asegures de que sólo adquieres piezas RoHS y, preferiblemente, RoHS/REACH, ya que el plomo y otros metales pesados no son buenos para los sistemas nerviosos diminutos (ni para los adultos, pero podemos soportar cantidades menores durante períodos de tiempo más largos). Así que no busques cables o cajas en los contenedores de ofertas, sino que comprueba los puntos de venta decentes, para saber que han sido calificados. Utilice también soldadura sin plomo. Para los trabajos de hobby, a menudo no me preocupo por ello con la gente y, de hecho, yo mismo utilizo mucho plomo en la creación de prototipos, pero cuando se trata de niños en desarrollo, es algo diferente.
Sobre la respuesta con la que empecé:
En primer lugar, como dejé claro en los comentarios, no hay manera de que hacer una arquitectura elaborada alrededor de un número reducido de pines de E/S vaya a ser más barato o más eficiente en tiempo que simplemente comprar la plataforma MCU con suficientes pines de E/S, pero ya que dices que estarías interesado en esos trucos de todos modos:
Imaginemos que vivimos en los tiempos en que una plataforma de procesador con algo de E/S cuesta entre 100 y $130 (yes that change of type is intentional) of equivalent now-day-money and the one you'd need for full software solution with "Whoaaaa-many" I/O pins would cost you €300 to $ 350. En ese caso, el engaño puede ser muy útil:
Hay muchas maneras, tanto analógicas como digitales con la inclusión de cableado extra, diodos, resistencias y/o condensadores para detectar rutas combinatorias hasta la totalidad de sus opciones completas 140152 con menos de 12 pines.
Por cierto, acabo de copiar esa cifra, porque ahora mismo estoy demasiado ocupado para comprobar tus cálculos.
Así que también, como un aviso: Los siguientes métodos no están totalmente pensados, como normalmente haría (y perdería medio día o más), sino ideas ligeramente explicadas.
Necesitan comprobaciones de viabilidad y estimaciones de costes, así como más cálculos matemáticos, que estoy omitiendo por falta de tiempo.
Así que trata esto como "una forma de ver algunas opciones que consigo presentar antes de que tenga que volver a ser útil", en lugar de una guía de diseño completa con componentes y esquemas exactos.
Sus opciones (las ecuaciones suponen vías analógicas y/o digitales perfectas):
- Escanea 12 pines, como tú mismo señalas.
- Utiliza los trucos del ADC para conseguir (granularidad del ADC)^n = 140152 niveles de detección.
- Utilice los trucos del temporizador+ADC para lograr (n-1)x(Granularidad del temporizador)x(Granularidad del ADC) = 140152+ niveles de detección. (las matemáticas aquí son un poco dudosas alrededor del valor n)
- Utiliza trucos de temporizador+Comperador para conseguir (Granularidad del temporizador)^n = 140152 niveles de detección.
- Haz mierdas raras con filtrado tonal usando RLC (tu opción 3) para lograr niveles de 140152+ usando aproximadamente (estimando mucho) 2 pines PWM independientes y 1 o 2 pines ADC.
- Introducir diodos en el sistema y Charlieplex (esto es probablemente lo más fácil).
Donde todas las opciones tienen n como el número de pines que necesitarías mínimamente y la granularidad es sólo un lenguaje elegante para el "número de niveles diferentes que este objeto puede expresar medido en bits menos significativos", o lo que también me refiero como "niveles" cuando está precedido por un número (a menudo el número 140152).
Opción 1: Escanear
Ya hemos hablado de ello en los comentarios y en otras respuestas. No para aquí.
Opción 2: Trucos de ADC solos
Calcula los pines... Así que... Tu ADC es probablemente de 1024 niveles, así que para conseguir el número con puros trucos de ADC necesitarías sólo 2 pines de ADC, pero también algunas partes analógicas de muy alto grado para poder amplificar 1/1024 de una respuesta a escala completa con sólo 10 LSB de error. Por cierto, también puedes conseguir un ADC de audio de 24 bits, probablemente más fácil de conseguir ese nivel de granularidad.
Utilizando redes resistivas cuidadosamente elegidas, posiblemente incluyendo algunas capacitancias para asegurarse de que la malla de cables y resistencias superiores no se convierta en una antena resonante para sus emisiones de radio locales, se puede detectar la "desaparición" de cada unión en un cambio en la señal analógica medida a través de una parte de esa red. Las soluciones más comunes son la serie "R-2R" y la serie "R-2R-4R-8R-.....". No tengo tiempo para resolverlo exactamente, pero existen varios caminos para ello.
Usando un op-amp de bajo offset de entrada (JFET) esa señal puede ser amortiguada para permitirte acercarte a una precisión de 19 bits más o menos, pero necesitarás una caja de metal y una conexión a tierra adecuada, así como algunas consideraciones de cableado. Y cuando tu sobrino lame los contactos, todo tipo de luces y sonidos podrían empezar a sonar, porque lamer es muy ruidoso, eléctricamente hablando.
Entonces necesitarías un ADC lo suficientemente bueno (>19 bits de resolución, buena linealidad diferencial e integral, etc) para capturar eso, o crear un ADC interno de 20 bits con una división de voltaje de 1 a 1024 y una amplificación de 1024 factores en la respuesta inferior. Sin embargo, este último bit es bastante complicado de conseguir por encima del ruido y los efectos térmicos, pero tal vez si se sobremuestrea se pueden obtener de 19 a 21 bits de precisión en un intento afortunado. Sin embargo, es complicado.
3. Trucos de temporizador + ADC:
Este requiere más post-matemáticas que texto completo, pero es bastante divertido. Aquí se crea una forma de onda en un pin. Puede ser un pulso o una onda cuadrada o incluso PWM, todo depende de la persona que hace las matemáticas.
Lo alimentas a través de una matriz o red de condensadores que se puentean mediante cables conectados con una resistencia conocida. Al elegir de nuevo con decisión las capacitancias, como en la red de resistencias, puedes obtener una imagen completa de los huecos y cortocircuitos en ella. Todos los condensadores deben tener una tensión nominal superior a la tensión máxima (5V, o 12V, o 3,3V, lo que sea que su unidad digital pueda generar y su sistema analógico pueda medir).
Si utilizas un temporizador de 8 bits para crear un ancho de pulso variable, un ADC de 10 bits para medir el voltaje resultante en un intervalo cambiante utilizando otro temporizador de 8 bits, me sorprendería que no pudieras conseguir cerca de un millón de niveles de rango de medición del condensador. Cambia el generador de señales por un temporizador de 16 bits y fácilmente serán decenas o cientos de millones.
Utilizando grandes capacitancias puede necesitar un buffer de salida, para forzar más fuertemente la señal y obtener resultados fiables. Es probable que haya algún chip controlador/amortiguador por debajo de 1€ que conduzca 100mA o más en capacitancias grandes, pero normalmente a los pines de la MCU no les gustan y empiezan a generar más una salida triangular o sinusoidal, en lugar de una onda cuadrada, haciendo que las matemáticas sean discutibles.
Opción 4: Utilizar trucos de temporizador y comperador
Esto es básicamente lo mismo que lo anterior, pero en lugar de medir el nivel en un intervalo, se establece un comperador para medir (muchos Atmels, y como tal 'duino's, tienen comperadores internos) un umbral preciso y conocido a través del condensador que se carga después de poner un pin de salida en alto. Midiendo el tiempo que tarda en llegar ahí, puedes usar la respuesta de carga/descarga de un condensador para desarrollar las matemáticas para calcular el tamaño del condensador, basado en el tiempo que tarda en cargarse. Usando un temporizador de 16 bits y un poco de sintonía R/C puedes conseguir hasta más de 30000 niveles de detección de condensadores.
Añade un temporizador de 8 bits (software o hardware) que incremente uno cada vez que el de 16 bits se desborde y podrás obtener más de 15 millones de niveles de detección de condensadores.
Normalmente el comperador es más estable que el ADC, por lo que el tiempo y el valor serán más estables, pero la resolución de detección con el mismo número de bits del temporizador será bastante menor. Aparte de eso, el truco del comperador es mucho más fácil de escribir código, ya que no incluye todo tipo de efectos de moiré en los dos temporizadores.
Opción 5: Trucos RLC con generación de tonos
Este necesita bastante lápiz y papel para ser realmente universal, así que se quedará aún más conceptual (espero - ya sin tiempo en este punto).
Los tonos PWM pueden ser posiblemente un segundo (y tercer) canal de audio, si esa biblioteca funciona lo suficientemente limpia.
Puede generar un tono, que luego pasa por varias etapas de filtros que pueden apilarse y acortarse dependiendo de las conexiones. Dependiendo del tono que hagas también obtendrás sobretonos, ya que crearás el tono digitalmente, a menos que introduzcas DACs de audio. Para corrientes pequeñas, los filtros RLC necesarios para dejar pasar o filtrar un solo tono pueden ser relativamente pequeños, incluso en los rangos más bajos de la frecuencia de audio.
Si cada conector tiene un filtro de banda en el conector y otro filtro de banda desde el conector a tierra, creo que hay una manera de hacer esto con un número muy limitado de generadores de tono y ADCs, pero me falta el tiempo para trabajar adecuadamente. Solo hay que hacer un pequeño detector de picos con un diodo, un condensador y una resistencia de descarga para convertir el tono en una señal de CC.
Opción 6: "Introducir diodos y charlieplex:
Aquí puedes añadir diodos a través de algunos de los pines de señal y anillos de tierra de los conectores. Algunos en una dirección, otros en la otra. De nuevo, el tiempo se acaba, así que esto tendrá que mantenerse en el nivel de la teoría superior. Es posible que también necesite algunas resistencias para que funcione correctamente, pero entonces puede simplificar la técnica de accionamiento y detección digital, incluso puede ser capaz de utilizar un ADC más eficazmente utilizando diodos y salidas charlieplexed con resistencias.
Pero para ver si eso funciona y cómo lo hace puede que tengas que tomarlo desde aquí. Mi pensamiento era básicamente: Si tienes un diodo en una dirección y otro en la otra, se combinan y se convierten en un corto a tierra para ambas direcciones. Si se combinan dos en la misma dirección son cortocircuitos en una sola dirección. Agrega algunas resistencias y posiblemente algunas redes de diodos más y puedes terminar con una forma puramente digital de 6 o 7 E/S para detectar todas tus posibles combinaciones.
Aquí me detengo.
0 votos
¿Por qué no tu primera idea? Incluso para un modesto chip Atmel (no tengo ni idea de qué tipos exactos ponen en los Arduino, ya que no es realmente un recurso profesional, así que no puedo responder oficialmente a ese respecto) 12 pines en uso es casi nada. La mayoría de los Atmels que tengo en stock tienen 14+ pines de E/S y sólo muy, muy pocos tienen menos de 12. Estoy asumiendo que la "Biblioteca Mozzi" utiliza uno o dos bloques PWM y/o pines para "audio". Me sorprendería que una placa "duino" en la vecindad de los 10 euros no pueda soportarlo todo.
0 votos
Tienes razón, no hay ninguna razón para que la solución 1 no funcione, y probablemente acabaré siguiendo ese camino. En este momento lo veo más como un interesante rompecabezas electrónico, porque siento que debe haber alguna solución circuital muy elegante, que se me escapa.
0 votos
Hay un montón de diferentes rutas de pulso y multiplexación que puede limitar el número de pines de diferentes maneras, pero la circuitería tendría que ir a alguna parte y probablemente el costo, en un pequeño pedido de proveedor local, lo mismo que todo un Arduino extra conectado por serie, I2C o SPI, por lo que supongo, empezar con un 'duino, comprar un segundo si se queda sin después de todo a ser una solución más eficaz. Por supuesto, si usted quiere teorizar más sobre trucos avanzados en lugar de "¿cuál es la mejor opción aquí", voy a estar de vuelta en enero para una pregunta más dirigida ;-).
0 votos
¡Maldito sea, señor! Confío en que se haya inspirado en este . Una tarde y dos docenas de sobres de vuelta, para no volver a usarlos. Los 12RCAs encajan bien en un CharliePlex de 4 líneas, y como son de 2 polos, podrías aislar los escudos y usar eso como un grado extra de libertad, en contra de la sugerencia de Olin. Todavía no se me ocurre nada mejor que 12 pines y pasar por la detección exhaustivamente, según tu opción 1.
0 votos
Me viene a la mente el Charlieplexing: electronics.stackexchange.com/a/37362/8627
0 votos
¿Por qué no enciendes el televisor y le dejas ver la televisión de los niños para que se olvide de todo lo peligroso que hay detrás del televisor? Lo digo en serio, no es algo seguro para un niño jugar con este tipo de cosas y no creo que debas fomentarlo. Prueba con un poco de Bob Esponja Pantalones Cuadrados.
0 votos
Andy, me esperaba este tipo de comentarios. Un poco sobreprotector, ¿no crees? Un conector RCA nunca ha matado a nadie. Por lo general, sacamos una vieja videograbadora o pletina del ático para que juegue con ella. Un arduino a pilas no va a hacer ningún daño. Este niño está mostrando signos de curiosidad técnica (¡que debe ser alentada!), ¿y dices que debería estar viendo Bob Esponja en su lugar? No podría estar más en desacuerdo...
0 votos
@Asmyldof - Sí, voy a seguir la ruta de 12 IO, pero a estas alturas ya no se trata de "la mejor opción"... Sólo estoy interesado en otras técnicas
0 votos
@user44635 - Sí, en realidad me he empollado a mí mismo (como hago a menudo..) He mirado en charlieplexing, y veo cómo se puede utilizar para detectar estados de conmutación, pero no estoy viendo cómo se extiende a los nodos emparejados detectados...
0 votos
@Jesuis En realidad, un TapeDack viejo puede hacer más daño del que esperas, a largo plazo. Mira mi primera respuesta en la contestación que me hiciste después de todo: Lamer de los que no son RoHS no siempre es bueno para los niños de 2 años. Por lo demás, creo que tienes mucha razón en no poner un arenero 1x1 con juguetes predefinidos alrededor del niño. La sociedad del helicóptero que se está desarrollando hará eso todos sus años de escolarización. #TodoPorElPensamientoIndependiente :-P