El sistema implementa una comunicación serial bidireccional entre una plataforma de microcontrolador Arduino (se demuestra con un Uno y un Mega) y el entorno de desarrollo TouchDesigner. La configuración del hardware en una protoboard consiste en tres circuitos principales: una salida digital, una entrada analógica por divisor de voltaje y una entrada analógica directa.
- **Circuito de Salida (LED):** El ánodo (pata larga) de un diodo emisor de luz (LED) se conecta al pin digital 12 del Arduino. El cátodo (pata corta) se conecta en serie con una resistencia de 330Ω a la línea de tierra (GND) para limitar la corriente.
- **Circuito de Fotorresistencia (LDR):** Se construye un divisor de voltaje para medir la iluminancia. Una terminal de la fotorresistencia (LDR) se conecta a 5V. La otra terminal se conecta tanto al pin de entrada analógica A0 como a una terminal de una resistencia de 10kΩ. La segunda terminal de la resistencia de 10kΩ se conecta a GND. La lectura en A0 es proporcional a la resistencia del LDR, que varía inversamente a la luz incidente.
- **Circuito de Potenciómetro:** Las dos terminales externas del potenciómetro se conectan a 5V y GND, respectivamente. La terminal central (wiper) se conecta al pin de entrada analógica A1, proporcionando un voltaje variable de 0 a 5V.
La programación del microcontrolador se realiza a través del IDE de Arduino. Se carga un sketch que inicializa la comunicación serial a un baud rate de 9600 (`Serial.begin(9600)`), lee los valores de los pines analógicos A0 y A1, y los transmite a través del puerto serie USB en un formato de string ASCII formateado (ej. `A1=valor_A1`, `A2=valor_A2`). El sketch también implementa un listener en el puerto serie para recibir datos desde TouchDesigner y controlar el estado del pin digital 12 (`digitalWrite()`), actuando sobre el LED.
En TouchDesigner, la ingesta de datos se gestiona con un operador **Serial DAT**. Sus parámetros se configuran para coincidir con el puerto COM del Arduino (identificado mediante el Administrador de Dispositivos de Windows) y el baud rate de 9600. La cadena de procesamiento de datos (DAT pipeline) para el parsing de la información entrante es la siguiente:
- **Serial DAT:** Captura el stream de datos ASCII, donde cada mensaje del Arduino ocupa una nueva fila.
- **Select DAT:** Aísla la fila más reciente (la última entrada en el buffer del Serial DAT) para su procesamiento en tiempo real.
- **Convert DAT (1):** Realiza una tokenización del string utilizando el carácter de espacio como delimitador (`Split Cells At`), separando el identificador del sensor y su valor en dos columnas.
- **Transpose DAT:** Transpone la matriz de datos, convirtiendo las dos columnas en dos filas para facilitar el procesamiento subsiguiente.
- **Convert DAT (2):** Ejecuta una segunda tokenización, esta vez utilizando el signo igual (`=`) como delimitador, para aislar los valores numéricos de sus etiquetas de texto (A1, A2).
- **Select DAT:** Se utiliza para seleccionar únicamente la columna que contiene los valores numéricos ya parseados.
- **DAT to CHOP:** Convierte los datos tabulares (DAT) en canales de operador de canal (CHOP). La primera columna del DAT de entrada se utiliza para los nombres de los canales y la segunda para sus valores, resultando en dos canales discretos.
Estos canales son posteriormente procesados con operadores **Select CHOP** para separarlos y **Math CHOP** para remapear sus rangos de valores nativos (0-1023) a rangos funcionales para el control de parámetros. El valor de la fotorresistencia se vincula a la amplitud (`Amplitude`) de un operador **Noise TOP** que deforma una **Sphere SOP** (con tipo de primitiva poligonal para alta resolución). El valor del potenciómetro se utiliza para controlar la velocidad de la animación del Noise, típicamente modulando el componente de traslación en el tiempo (`absTime.seconds`).
La salida de datos desde TouchDesigner hacia el Arduino se realiza mediante un botón en la interfaz de usuario, cuyo estado se envía al operador **Serial DAT** para ser transmitido por el puerto serie. El Arduino interpreta este dato y conmuta el estado del LED. Adicionalmente, se menciona el protocolo **Firmata** como un método alternativo de comunicación, que permite un control de pines más directo desde TouchDesigner utilizando su componente de paleta dedicado, sin necesidad de escribir código custom en el Arduino IDE más allá de cargar el sketch estándar de Firmata.