ANTECEDENTES
En muchas situaciones de la vida real queremos medir el voltaje. De vez en cuando, no es la tensión en sí lo que nos importa , sino algúna otra magnitud física que se ha convertido a tensión por algún tipo de sensor o transductor. Tal vez el ejemplo más simple es un potenciómetro : cuando está conectado de una manera determinada , que presentará los diferentes posibles ángulos de rotación del eje como diferentes voltajes en una de sus patas. Pero esto es sólo un ejemplo sencillo de una amplia variedad de sensores para la medición de casi cada cantidad física imaginable, y muchos de ellos informan de sus medidas en forma de tensión .
MIOIO tiene 16 pines , comúnmente conocidas como "Entradas analógicas" , que son capaces de medir los niveles de voltaje entre 0V - 3.3V , con una precisión de alrededor de 3 mV . Debes asegurarte de no suministrar los niveles de tensión fuera de este rango en los pins , o podrías dañar potencialmente su hardware. En algunos casos en los que la entrada para medir se encuentra fuera de este rango, un simple resistencia puede reducir la amplitud del voltaje, mientras que en otros casos se necesitará un circuito amplificador .
Internamente, tan pronto como se abre una entrada analógica, el MIOIO comienza el muestreo de la tensión a intervalos regulares , y envía las muestras al dispositivo Android. Al leerlos, tienes la opción de leer el valor más reciente capturado , o leer las en un almacenamiento de muestras.
Los pines analógicos son el 31, 32, 33, 34 ,35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 y 46. Son los que quedan en el lado opuesto al conector USB.
COMO USARLO
Para utilizar los pines MIOIO como entradas analógicas se realiza a través de la interfaz AnalogInput
. Una instancia de esta interfaz se corresponde con un pin físico de la tarjeta, configurado para trabajar en modo de entrada analógica. Para indicar que queremos que un pin se comporte como AnalogInput
entrada analógica debemos usar:
AnalogInput in = ioio.openAnalogInput(pinNum);
Esto abre en número de pin pinNum para la entrada analógica.
Una vez que se obtiene una instancia deAnalogInput
, el valor del PIN puede ser leído por:
float value = in.read();
devolviendo un valor entre 0 y 1, que cubre toda la gama de tensión admisible. Este método podría bloquear durante unos pocos milisegundos si se llama inmediatamente después de que el pasador está abierto.Si es más apropiada una medida absoluta en voltios, utilice:
float volts = in.getVoltage();
Cuando haya terminado de usar el pin, liberaló usando:
in.close();
con el fin de devolver el pin a un estado "flotante" y, posiblemente, ser capaz de volver a abrirlo en el mismo o en un modo diferente. El pinse vuelve inútil después de esta llamada - no se puede hacer nada con ella.
LECTURA DEL BUFFER
En el uso anterior, siempre estamos interesados en el valor más reciente de la señal. Sin embargo, a veces es importante para obtener datos que han sido muestreados cada cierto tiempo(por ejemplo, para gráficos que se representan, o para la medición de la tasa de cambio de una señal). En este caso, no podemos permitir que las muestras se pierdan si estamos leyendo con demasiada lentitud y no podemos permitir que una muestra vaya a ser leída dos veces si estamos leyendo demasiado rápido. A menudo, es posible que también está dispuesto a poner en peligro la latencia con el fin de relajar los requisitos acerca de la frecuencia con la que tenemos que sondear. Para ello se ha introducido el buffer de lecturas. Con el fin de empezar a utilizar el buffer de lectura, una vez que un pin se ha abierto como AnalogInput
, debería habilitar el almacenamiento en búfer usando:
in.setBuffer(capacity);
El argumento capacity
determina el número de muestras sin leer que el buffer puede almacenar antes de que comience a desbordarse. Un búfer menor utiliza menos memoria, pero te obliga a leer con más frecuencia con el fin de evitar que se desborde. Cuando se produce un desbordamiento, se quitarán las muestras más antiguas de la memoria intermedia, los (menos recientes).
Con el fin de leer las muestras de la memoria intermedia (Buffer), utilizar:
float sample = in.readBuffered();
o
float volts = in.getVoltageBuffered();
Estos métodos se bloquearán hasta que al menos una muestra esté disponible en el búfer y, a continuación, devuelven esa muestra. Si el bloqueo no es deseable, primero puedes usar:
int samples = in.available();
que le dirá cuántas muestras ya están disponibles en el búfer. Si se produce un desbordamiento, se puede determinar el número de muestras se han perdido ya que la inicialización del búfer llamando in.getOverflowCount()
. Por último, se puede consultar mediante programación la frecuencia de muestreo (en la actualidad constante, pero puede cambiar) usando in.getSampleRate()
.
Una nota sobre la tasa de ancho de banda/muestra: Actualmente los pines de entrada analógica se muestrean 1000 veces por segundo (1 kHz). Para algunas aplicaciones (tales como mediciones de la señal de audio) esto es inaceptable. Esta frecuencia de muestreo no es una limitación física de la MIOIO (de hecho, la limitación física es 500 KHz para todos los canales abiertos combinados) y se puede aumentar en el futuro.