Skip to main content

Práctica Final: Arduino + Pure Data: convertimos el color en sonido

180 mins

Este último proyecto va a consistir en que conectes el sensor de color con Pure Data para poder generar diferentes sonidos dependiendo de los valores que lea el sensor.

Vamos a proporcionaros alguna herramienta más para que podáis trabajar con más comodidad y versatilidad con los datos que envies desde Arduino a Pure data y que vais a utilizar para controlar parámetros de vuestro patch:

Etiquetas en el Serial:

¿Os acordáis de que en la Práctica 8: OSC. Open ... | Librería CATEDU recibíamos valores desde varios actuadores diferentes (botón1, botón2, slider1, pulsador3 ...) y que cada uno de ellos tenía su etiqueta para que supiéramos su procedencia? En Arduino si queremos enviar a traves del Serial, valores de diferentes parámetros de un sensor o de varios sensores, como por ejemplo el sensor de color que os da tal tal tal tal y tal parámetros, tendremos que enviar junto con cada valor su etiqueta correspondiente.

¿Y cómo vamos a hacer esto?

Vamos a crear las etiquetas en Arduino que imprimiremos por el serial junto con los valores y cuando llegue a Pure data las vamos a clasificar utilizando el objeto "route"


Para empaquetar cada valor con su etiqueta en Arduino vamos a utilizar el salto de línea:

image-1669653644486.PNG

Serial.print() y Serial.println()


Mapear valores:

¿Qué es mapear?

Para nostros mapear valores va a ser ajustar la escala de rango de datos a otra escala diferente. Vamos a ver un ejemplo:

El sensor TCS34725 con el que estáis trabajando, registra el color utilizando parámetros RGB. En la codificación RGB encontraremos tres valores que nos permitirán definir un color: rojo (r), verde (g), azul (b). El rango de cada uno de estos tres valores es de 0-255. Supongamos que queremos regular el volumen de uno de nuestros instrumentos en función de la cantidad de rojo que tenga un objeto. Como bien sabéis, en pure data controlamos el volumen modificando la amplitud de las ondas y nuestro rango de volumen ha de estar siempre entre 0 y 1. 

Para poder controlar el volumen (0-1) con el parámetro que mide el color rojo (0-255) vamos a tener que adaptar los valores del rojo a los valores del volumen, siendo 0=0 y 255=1. Con esta conversión si el valor del parámetro rojo fuera 127,5 el valor de nuestro volumen sera 0,5.

Para realizar esta conversion vamos a utilizar el objeto "scale". Abrir el patch mapear-scale.pd para ver cómo funciona.

  • En su primer inlet recibirá los valores a mapear, en nuestro caso los valores del color rojo del objeto que se está evaluando.
  • En el segundo inlet enviaremos el valor menor del rango de los valores de entrada, que en nuestro caso es el 0.
  • En el tercer inlet enviaremos el valor mayor del rango de los valores de entrada, que en nuestro caso es el 255. 
  • En el cuarto inlet enviaremos el valor menor del rango de los valores de salida, que en nuestro caso es el 0.
  • En el quinto inlet enviaremos el valor mayor del rango de los valores de salida, que en nuestro caso es el 1.

image-1669652458636.PNGFigura X. patch mapear-scale.pd


Ahora que conocéis el objeto "scale" podréis controlar cualquier parámetro de vuestro patch con los valores que capten los sensores Arduino!!!

Nos os olvidéis de enviar los mensajes al objeto "scale". Que los mensajes no se envían ellos solos 


Como ves, el enunciado es bastante sencillo, pero para poder hacerlo, es necesario que hayas seguido todos los pasos y actividades que hemos realizado a lo largo del curso, si no no va a ser muy fácil...

El resultado final tendrá que ser algo parecido a esto:

(video de Julia aquí)


¿Qué tendremos que entregar?

La entrega tendrá dos partes.

PARTE 1: ARCHIVOS
Esto será una carpeta comprimida en .zip que contenga:
1. Documento de texto con: Nombre completo, explicación de los valores del sensor utilizados, dificultades encontradas.
2. Sketch de Arduino
3. Patch de Pure Data

El nombre de la carpeta será vuestro Nombre_PrimerApellido_SegundoApellido

PARTE 2: GIF
Será necesario un video o gif de menos de 1 minuto en el que se vea el funcionamiento.