Vous êtes sur la page 1sur 3

1

Dise
no de un Instrumento Musical con Raspberry Pi

A. Guerrero Llorente

17 de febrero de 2016

1.

Introducci
on

El objetivo de este proyecto ha sido la construccion de un instrumento musical que


produjese una determinada nota dependiendo de la distancia medida por un sensor de
ultrasonidos. Ademas, tambien se han introducido botones que, al ser pulsados, ejecutan
un sonido de batera y una matriz de LEDs que se ilumina al ritmo de la m
usica.

2.

5
6
7

10
11
12
13
14

15
16
17
18
19
20
21
22

23
24
25

26
27
28
29
30

Formas de emitir sonido


Usar la librera softTone: esta librera usa wiringPi para producir una se
nal
PWM software en el pin y frecuencia que elijamos. Para escuchar el sonido se conecta un piezoelectrico o altavoz al pin escogido. Este metodo tiene como principal
inconveniente que la frecuencia que escuchamos no es estable. Tambien ocurre que
no podemos seleccionar el volumen ni el timbre.
Crear una librera hardTone: otra opcion sera crear una libreria equivalente
softTone pero usando un PWM hardware, de esta forma se solventara el problema
con la estabilidad de la frecuencia. El problema es que el pin disponible para al
generacion del PWM hardware es compartido con la salida de audio. A priori,
puede parecer que no es un problema, pero nuestro objetivo es usar la salida de
audio para reproducir sonidos de batera y este metodo lo impide. Tambien sucede
que si conectamos un altavoz para escuchar la se
nal PWM hardware el sonido que
produce tiene un volumen ensordecedor.
Usar la librera SDL: esta opcion nos permite usar sonidos pregrabados y
emitirlos por el altavoz, por lo que podemos elegir el timbre y el volumen. Concretamente la librera utilizada es SDL Mixer.

La opcion utilizada para la reproduccion de sonidos ha sido la librera SDL. Se han


generado archivos .wav usando Matlab, para seis formas de onda distintas y para cada
onda doce notas. Cada sonido tiene una duracion de 30s, cuando se produce un cambio
de nota (se mide una distancia distinta) se corta y se reproduce el nuevo sonido. Con un
pulsador cambiamos el timbre.

31

3.

Elementos utilizados

32

Raspberry Pi

33

HC-SR04, sensor de ultrasonidos para medir distancia

34

Altavoz

35

Matriz de 8x8 LEDs

36

HT16K33, chip para controlar la matriz por I2C

37

4.

38

4.1.

Descripci
on de funcionamiento
Seleccionando el sonido

42

Se mide distancia con el sensor de ultrasonidos y dependiendo de la medida se selecciona una nota. Hay un pulsador que cada vez que es pulsado se produce una interrupcion
y la variable TIMBRE se incrementa y produce un cambio de timbre. Con las variables
NOTA y TIMBRE se selecciona el sonido a ejecutar. Este proceso se realiza en el main().

43

4.2.

39
40
41

Emitiendo el sonido

46

Cada vez que la NOTA cambia se para la que estuviese sonando y se ejecuta el nuevo
sonido. Todos los sonidos estan cargados en una matriz, por lo que solamente hay que
seleccionar el elemento deseado y reproducirlo. Existe un hilo dedicado ha realizar esto.

47

4.3.

44
45

Batera

51

Existen tres pulsadores que cada vez que son pulsados se produce un sonido de batera.
Cuando se pulsa uno de ellos se produce una interrupcion que asigna valor a una variable
y seg
un su valor se reproduce un sonido u otro. Se ha creado un hilo que realiza esta
funcion y el encendido de la matriz de LEDs.

52

4.4.

48
49
50

LEDs

55

Cada vez que se produce una nota diferente a la anterior se ilumina un n


umero
determinado de LEDs, dependiendo de que nota sea. Si se toca la batera se ilumina
toda la matriz durante 100ms.

56

4.5.

53
54

57
58
59

Apagado del instrumento

Cuando se esta reproduciendo un sonido no se puede abortar la ejecucion con Ctrl+c


por lo que hay un pulsador que cuando se pulsa hace un break en el bucle infinito del
main().

60

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

5.

Problemas y soluci
on

Durante la elaboracion de este proyecto hubo tres problemas principales que hubo
que resolver: la produccion del sonido, reducir el n
umero de variable globales y medicion
correcta de distancias.
El mayor problema de la produccion de sonido fue descubrir por que cuando se generaba un PWM hardware se escuchaba por el altavoz. Se intento descubrir como hacer
que esto no sucediese hasta que se descubrio que no era posible. La solucion final fue
usar SDL, que ademas permitio el uso de distintas ondas.
Se escribio la mayor parte el codigo del tiron, sin preocupacion de si estaba quedando
legible, por lo que se escribieron algunas partes de forma poco elegante y creando un
n
umero excesivo de variables globales. Para resolver este problema se leyo el codigo por
completo comentando todas las cosas que sera conveniente cambiar. Se creo una matriz
de sonidos, tipo Mix_Chunk, y se creo un hilo u
nico para la batera y los LEDs.
Una cosa extra
na que suceda al medir distancias es que en algunas ocasiones no reciba el ultrasonido reflejado en el objeto. Se introdujo un tiempo lmite que se poda
estar esperando dicho reflejo, sin embargo esto no resolvio el problema por completo.
Finalmente se descubrio que depende del objeto en el que tenga que reflejarse el ultrasonido, si se mide la distancia sensor-mano a veces falla pero no es as si se mide la
distancia respecto de la pared y se mueve el sensor para tener distintas notas.