Para obtener los datos de todos los sensores 'simultáneamente', debe leerlos todos en el tiempo de muestreo requerido para obtener el ancho de banda que desea. Por ejemplo, para obtener un ancho de banda de 100Hz, debe leer cada sensor al menos 200 veces por segundo, lo que equivale a 6,000 lecturas analógicas por segundo (200 * 3 lecturas por sensor * 10 sensores). El Arduino puede leer sus entradas analógicas a una velocidad máxima de aproximadamente 10,000 muestras por segundo, lo que debería ser lo suficientemente rápido, siempre que las demás sobrecargas sean pequeñas. Si el requisito de ancho de banda es menor, será más fácil.
Dependiendo de qué Arduino lo tengas puede tener 6, 8 o 16 entradas analógicas. Puede expandir esto a 30 o más utilizando multiplexores analógicos externos, pero se requerirán algunos pines digitales para controlar los multiplexores. El 74HC4067 es un multiplexor de 16 canales con 4 entradas de selección de canal. Puede usar uno de estos chips para cada canal de acelerómetro, con las entradas digitales de los 3 multiplexores unidos por lo que solo se necesitarán 4 pines digitales Arduino. En funcionamiento, Arduino emitiría el código digital de 4 bits requerido para seleccionar un sensor, leería las 3 entradas analógicas (usando su propio multiplexor interno para alternar entre ellas) almacenará los resultados y luego cambiará al siguiente sensor.
Por supuesto, el Arduino también necesita enviar los resultados al Pi. Para evitar demoras, necesita un enlace que pueda transferir al menos 12,000 bytes por segundo (6,000 * 2 bytes por muestra) con una sobrecarga mínima. El Arduino tiene puertos seriales de hardware que pueden transmitir mientras hace otras cosas, por lo que podría enviar los datos para cada canal inmediatamente después de leerlos, y confiar en un búfer de entrada en la Pi para manejar los retrasos en el procesamiento de los resultados. La velocidad de bits mínima requerida es aproximadamente 10 veces la velocidad de bytes, es decir. 120,000 bits / s para leer 10 sensores a 200Hz. El UART del Pi solo es bueno para 115,000 bits / s, lo que equivale a unos 190Hz. Si esto no es lo suficientemente rápido, entonces tendrá que empaquetar los datos en menos bits, o usar I2C (configurado a, por ejemplo, 400 kHz) o SPI.
Para sincronizar el flujo de datos en serie, el Pi necesita alguna forma de indicar qué muestra se relaciona con qué sensor. Las lecturas analógicas de Arduino oscilan entre 0 y 1023, dejando libres los 7 bits superiores de cada palabra de 16 bits. Entonces, puede comenzar cada cuadro de transmisión con una secuencia de bytes única que no puede ocurrir en la muestra (por ejemplo, 0xFF, 0x7F), entonces el Pi solo tiene que esperar esta secuencia y sabe que los siguientes 2 bytes son la primera muestra.
Si tuvieras sensores I2C o SPI, podrías acoplarlos directamente al Pi, pero usar un Arduino aún tiene ciertas ventajas.
-
Puede ubicarse de forma remota para hacer que el cableado del sensor sea más corto, más ordenado y menos propenso a las interferencias. También se puede operar desde una fuente de alimentación separada para evitar bucles a tierra, etc., o se puede aislar galvánicamente de la Pi mediante optoacopladores o inalámbricos.
-
El Arduino puede leer todos los sensores en un circuito cerrado sin tener que preocuparse de que otros procesos interfieran con él. Entonces sabrá que incluso si el Pi no puede recibir y procesar todas las muestras 'al mismo tiempo' al menos se grabaron simultáneamente. Esto es particularmente importante si está interesado en los valores instantáneos de las lecturas relativas entre sí (su "sincronicidad") en lugar del tiempo absoluto de recepción.