La librería CapacitiveSensor de Arduino se basa en un concepto electrónico sencillo pero que puede resultar a veces problemático en según que aplicaciones.
Un ejemplo básico y sencillo para su uso, es la creación de un teclado que ejecuta un sonido en el momento que se presiona un trozo de papel albal; incluso con un papel y con un lápiz se puede generar un circuito sencillo para conectar estos elementos y crear música con Arduino.
El caso concreto de este método se basa en el tiempo de carga de un condensador en un circuito RC. Un circuito RC no es nada más que un circuito con una resistencia y una capacitancia o condensador.
Cuando existe un condensador en un circuito lo que hace es cargarse a un nivel de voltaje con mayor o menor rapidez en función del valor del mismo.
Este tiempo de carga viene definido por una constante τ = R*C
donde R es el valor de la resistencia en ohmnios Ω y el valor C de la capacitancia.
En la imagen adjunta se puede ver como evoluciona el tiempo de respuesta cuando este valor de la constante tau es igual a la unidad. τ =1
La tensión del condensador evoluciona al 95 % de la señal de entrada cuando t = 3*τ y al 99% cuando t = 5*τ.
Es decir, que si a un extremo del circuito lo ponemos a 10 voltios, el extremo del condensador; que no está conectado a tierra; se irá acercando a ese voltaje. 9,5 voltios después de 3 segundos y 9,9 voltios a los 5 segundos.
La idea se basa en que el valor del condensador puede ser variable si acercamos más o menos un lado del dieléctrico con el otro. Así que lo que hace la librería CapacitiveSensor en nuestra placa es enviar una señal y esperar hasta que el pin de recepción o de entrada se acerca a este valor de salida y medir la diferencia de tiempo.
Por lo que deberemos de minimizar estos valores. Como no sabemos que valor tendrá el condensador que habremos montado, solo podremos confiar en que con una resistencia pequeña se minimize esta constante.
De esta manera, recibimos valores equivalentes a la proximidad entre los dos dieléctricos. Pero los problemas asociados a este esquema son varios:
- Para empezar, se ha de escoger una resistemcia adecuada con la que calibrar o controlar de alguna manera la rapidez con la que se carga la capacitancia. Imaginemos que tenemos varios capacitores y cada uno nos mide un valor totalmente dispar con respecto al resto. Y lo que nos gustaría sería tener una manera de programar todos de la misma manera y que nos proporcionen valores similares. Esto se puede solucionar cambiando las resistencias con potenciómetros para variar el valor de esa resistencia intermedia y calibrar en un paso estas señales.
- Por otro lado, si tenemos la parte del dieléctrico conectada a tierra muy alejado del que se dispone en alto, tendremos un circuito abierto o un valor muy alto de C. Esto hace que la placa se ponga a esperar durante mucho tiempo, ya que la constante de tiempo sería muy alta y en el caso de hacer un control para el manejo de unos motores estaríamos introduciendo unos retrasos o delays poco operativos. Para solucionar este caso se habría de introducir un condensador en paralelo de un valor pequeño (Cpin = 100pf, un valor pequeño) para tener una vía de carga y no bloquear el programa.
- En el caso que expondremos a continuación, también hay que asegurar que el condensador vuelve a su estado original. Esto es, que cuando se deja de presionar el capacitor , los dieléctricos se han de mantener a una posición para volver a su modo de operación básico y esto se arregla añadiendo espuma antiestática dentro de los mismos que actua como muelle de separación entre ambos.
Finalmente el resultado se puede ver en el siguiente video para un brazo de un InMoov. Los sensores se disponen en la punta de sus dedos con este sistema y en este caso; el dedo detecta presión y vuelve a su posición original.
La parte difícil de este diseño es que el manejo de 5 servomotores de forma independiente requiere de muchas lecturas dentro del loop para cada sensor y el movimiento de los servos tienen un bucle for que establece su vuelta a su estado original si se lee un valor concreto de su sensor asociado.
Cada sensor introduce un retardo o delay debido a la configuración de los circuitos que se han de minimizar lo máximo posible y que su acumulación bloquea la ejecución del movimiento de los otros dedos.
Por último, hay que añadir que si requerimos de un sensor de presión para medir la fuerza que ejecuta cada dedo, tampoco es una de las mejores soluciones. Por un lado, el intervalo de valores es demasiado pequeño para establecer un control fino y al final obtenemos el funcionamiento de un sensor digital en lugar de un sensor analógico para medir la presión. Por otro lado, el par de los servomotores con este sistema del InMoov es tan bajo que puede que los sensores ni se inmuten. Así que habrá que comprar motores con un par mayor capaces de efectuar un esfuerzo sobre los sensores antes de que se bloqueen.
QTC Pills
Otra opción para realizar este control es el uso de QTC (Quantum Tunnneling Composite) Pills. Este material es una solución que evita todo este problema de control y retardos que se basa en la modificación de su resistividad en función de la presión aplicada sobre él.
La respuesta no es lineal, pero cumple suficiente para nuestros objetivos, evitando estos bloqueos y solo deberemos de leer un valor analógico de resistencia como si de un potenciometro se tratara.