Introduction: Pianolytech: an Electronical Instrument

English:

This project was realized by Charles MOUEN, Johann MOMNOUGUI, Yassine BEN RHOUMA and Melaine SIAKO.

As part of our studies in embedded systems at Polytech 'Paris UPMC, we realized during the first semester of the 4th year an electronic musical instrument. It generates sound from the observation of a physical magnitude; this instrument is autonomous, self-taught, and autotune.

The designed instrument named "Pianolytech" produces piano sound from the measurement of the speed of rotation of four toothed wheels. This speed measurement is made by means of optical sensors (LEDs + photodiodes); as a function of the rotation speed of the wheels, the sensors produce signals which vary in frequency. The sound produced varies according to these frequencies.

This project was realized in 3 stages: a mechanical design, an analog part, and a digital part.

Français:

Ce projet a été réalisé par : Charles MOUEN, Johann MOMNOUGU,Yassine BEN RHOUMA,et SIAKO Melaine. Dans le cadre de nos études en systèmes embarqués à Polytech' Paris UPMC, nous avons réalisé au cours du premier semestre de la 4ème année, un instrument de musique électronique. Celui-ci génère du son à partir de l’observation d’une grandeur physique ; cet instrument est autonome, autodidacte, et autotune.

L'instrument conçu nommé "Pianolytech" produit du son de piano à partir de la mesure de la vitesse de rotation de quatre roues dentées. Cette mesure de vitesse se fait au moyen de capteurs optiques (LEDs + photodiodes) ; en fonction de la vitesse de rotation des roues, les capteurs produisent des signaux qui varient en fréquences. Le son produit varie en fonction de ces fréquences.

Ce projet a été réalisé en 3 étapes: une conception mécanique, une partie analogique, et une partie numérique.

Step 1: Mechanical Part - Conception Mécanique

English:

Mechanically speaking the instrument consists of the following parts:

- 4 toothed wheels (diameter: 11cm, thickness: 1cm)

- 4 ball bearings

- A cylindrical tube (length 32 cm, radius 1 cm)

- Two hollow pavers (length 17cm)

- A square support.

The wheels and the hollow pavers were modeled under SolidWorks. Polystyrene was placed on the four corners of the support to balance the instrument. The rest of the material was provided by the school.

As you can see from the picture, the wheels are threaded on the cylindrical tube; Then the tube is held horizontally by means of the hollow blocks; which are themselves in vertical positon on the square support. In addition to the elements listed above, we can also observe a PCB and a Raspberry Pi on which we will come back later.

Français:

Mécaniquement parlant l’instrument est constitué des pièces suivantes:

- 4 roues dentées (diamètre : 11cm, épaisseur :1cm)

- 4 roulements à billes

- Un tube cylindrique (longueur 32 cm, rayon 1cm)

- Deux pavés creux (longueur 17cm)

- Un support carré. Les roues ont été modélisées sous SolidWorks , ainsi que les deux pavés. Du polystyrène a été mis sur les quatre coins du support afin d'équilibrer l'instrument.Le reste du matériel a été fourni par l’école.

Comme vous pouvez le voir sur la photo, les roues sont enfilées sur le tube cylindrique; ensuite le tube est maintenu horizontalement grâce aux pavés creux; qui sont eux-même en positon verticale sur le suport carré. En plus des éléments listés précédemment, on peut aussi observer un PCB et une Raspberry Pi surlesquels on reviendra plus tard.

Step 2: Analog Part : Sensors - Partie Analogique : Capteurs

English:

In this part, we concentrate on the observation and the exploitation of the rotation speeds of the wheels. This therefore mainly concerns the sensors and the PCB (Printed Circuit Board). The sensors are used to record the rotational speed of the wheels as an analogue signal and the PCB contains all the electronic microcomponents needed to process these signals.

Sensors:

The four sensors were each designed with a photodiode (receiver) and an infrared (emitter) LED in series with a resistance of 32 KΩ. The principle is the following: the photodiode generates an electric current proportional to the intensity of the perceived light; The LED emits light in the direction of the photodiode; The wheel teeth are located on the "transmit-receive" axis of the two components as shown in the figure above. By varying the speed of rotation of a wheel, the intensity of the light perceived by the photodiode is varied, which varies the electric current that it delivers. Thus the signal obtained at the output of the sensor is proportional to the rotation speed of the wheels.

Français:

Dans cette partie, on se concentre sur l'observation et l'exploitation des vitesses de rotation des roues. Cette partie porte donc essentiellement sur les capteurs et le PCB (Printed Circuit Board). Les capteurs servent à retranscrire sous forme de signal analogique la vitesse de rotation des roues et le PCB comporte tous les micro-composants électroniques nécessaires au traitement de ces signaux.

Les capteurs:

Les 4 capteurs ont été conçus chacun à base d’une photodiode (réceptrice) et d’une LED infrarouge (émettrice) en série avec une résistance de 32 KΩ. Le principe est le suivant :la photodiode génère un courant proportionnel à l'intensité de la lumière perçue ; la LED émet de la lumière en direction de la photodiode ; les dents de roues se trouvent sur l’axe « émission- réception » des deux composants comme sur la figure ci-dessus. En faisant varier la vitesse de rotation d’une roue, on fait varier l'intensité de la lumière perçue par la photodiode, ce qui varier le courant qu'elle délivre. Ainsi Le signal obtenu à la sortie du capteur est proportionnel à la vitesse de rotation des roues.

Step 3: Analog Part : PCB - Partie Analogique : PCB

English:
The PCB is a printed circuit board to electrically connect several components in order to produce a more or less complex electronic circuit. The design of the PCB was done on the Altium software.

The circuit realize the following functions:

* Acquisition of analog signals.

* Filtering and amplification.

* Analog to digital conversion.

- The acquisition function is carried out by the sensors defined above.

-The amplification and filtering function: here we want tof filter and amplify the signals corresponding to the wheels speeds. This function is achieved by a first-order active filter assembly consisting of an LM358N amplifier, a capacity of 103 nF and a resistor of 105 Ohm. The amplifier is necessary because the signals coming from the sensors are very low ( mV).

-Analog to digital conversion: the aim here is to obtain numerical values from the previous analog signals. This function is realized by the MCP3008 which is an ADC (Analog to Digital Converter). It is powered under 5V via a voltage regulator with a voltage reference Vref of 5V. This component measures the voltage variation it receives at the input and converts it to binary on 10 bits. The outputs of the 4 sensors are connected to the first 4 analog inputs of the MCP.

The MCP3008 is connected to a Raspberry using GPIO ports as digital input / output ports. The following link helped us to connect the MCP3008 to the Raspberry: http://www.shaunsbenett.com/

The circuit of the PCB therefore allows us to obtain numerical values representative of the rotational speeds.

Français:

Le PCB « Printed Circuit Board » est une carte électronique imprimée permettant de relier électriquement plusieurs composants afin de réaliser un circuit électronique plus ou moins complexe. La conception du PCB s'est faite sur le logiciel Altium.

Le circuit réalise les fonctions suivantes :

*Acquisition des signaux analogiques.

* Filtrage et amplification.

*Conversion analogique - numérique.

- La fonction acquisition est réalisée par les capteurs définis précédemment.

- La fonction d’amplification et de filtrage: il s'agit de filtrer et d'amplifier les signaux correspondant aux vitesses des roues. Cette fonction est réalisée par un montage de filtre actif de premier ordre constitué d'un amplificateur LM358N, d’une capacité de 103 KF, et d’une résistance de 105 Ohm. L'amplificateur est nécessaire car les signaux provenant des capteurs sont très faibles (de l’ordre de quelques mV).

- La conversion analogique - numérique: on cherche ici à obtenir des valuers numériques à partir des signaux analogiques précédents. Cette fonction est réalisée par le MCP3008 qui est un ADC (Analog to Digital Converter). Il est alimenté sous 5V via un régulateur de tension avec une référence de tension Vréf de 5V. Ce composant mesure la variation de tension qu'il perçoit en entrée et la convertie en binaire sur 10 bits. On connecte les sorties des 4 capteurs sur les 4 premières entrées analogiques du MCP.

Le MCP3008 est connecté à une Raspberry au moyen de ports GPIO servant de ports d'entrées/sorties numériques. Le lien suivant nous a aidé à connecter le MCP3008 à la Raspberry: http://www.shaunsbenett.com/

Le circuit du PCB nous permet donc d’obtenir des valeurs numériques représentatives des vitesses de rotation.

Step 4: Digital Part - Partie Numérique

English:

In the previous section, we have seen how to exploit the rotation speeds of the wheels in order to extract numerical values; values transmitted to the Raspberry PI. In this part, we deal with the numerical processing of these values. The challenge here is to extract frequency values, and to establish a process of sound generation.

Frequency Acquisition
Thanks to a C-language algorithm using POSIX-timers, POSIX-threads and functions of the GSL library, we were able to apply a Fast Fourier Transform (FFT) to the numerical values provided by the MCP to extract the associated frequencies. At the end of this step, it was possible to continuously acquire the frequencies related to the rotation of the wheels, the frequencies used for the sound generation. Here is the link to install and use GSL on the Raspberry card: https://doc.ubuntu-fr.org/gslf

Sound generation

To generate sounds, we chose to use recordings of piano notes of the 4th octave. For this we have used the softwares Piano Virtual Midi and StreamingAudio Recorder. With streaming audio recorder we save in WAV files the sounds played on the computer with the software Virtual Piano Midi. We insert in our program the call to the program "aplay" of the library ALSA which makes it possible to read WAV files.
We use 3 wheels to play 8 different sounds according to the following principle: the speed of a wheel is defined in 2 states, a weak state and a high state; the thresholds of speed being the same for the three wheels. The sound produced is a function of a 3-bit binary variable; Where each bit corresponds to the speed state of a wheel. If the bit is 0 then the wheel is in a low-speed state; if it is 1 , it is a high speed. Thus 001 for example means that the wheels 1 and 2 have a low speed and the wheel 3 has a high speed. Each binary combination is associated with a sound.

000 => Do; 001 => Re; 010 => Mi; 011 => Fa; 100 => Soil; 101 => La; 110 => Si; 111 => Do #.

In this way, by agile turning the 3 wheels, it is possible to play a precise sound.

The final code and the Wav files are given in appendix.

Français

Dans la partie précédente, on a vu comment exploiter les vitesses de rotation des roues pour en extraire des valeurs numériques de tensions; valeurs communiquées à la Raspberry PI. Dans cette partie, on s’occupe du traitement numérique de ces valeurs. L’enjeu ici est d’extraire des valeurs de fréquences, et d’établir un processus de génération du son.

Acquisition de fréquence

Grace à un algorithme en langage C utilisant des POSIX-timers, des POSIX-threads et des fonctions de la librairie GSL, nous avons pu appliquer une FFT (Fast Fourier Transform) aux valeurs numériques fournies par le MCP pour en extraire les fréquences associées. On a ainsi pu à l’issue de cette étape acquérir de façon continue les fréquences liées à la rotation des roues, fréquences utilisées pour la génération du son. Voici le lien pour pouvoir installer et utiliser GSL sur la carte Raspberry : https://doc.ubuntu-fr.org/gslf

Génération du son

Pour générer des sons, nous avons choisi d’utiliser des enregistrements de notes de piano de la 4ème octave. Pour celà nous avons utilisé les logiciels Piano Virtuel Midi et Streaming Audio Recorder. Avec streaming audio recorder on enregistre en fichier WAV les sons joués sur l'ordinateur avec le logiciel Piano Virtuel Midi. Une fois les fichiers sons obtenus, on insère dans notre code C l’appel au programme « aplay » de la librairie ALSA qui permet de lire des fichiers WAV.

Nous utilisons 3 roues pour jouer 8 sons différents selon le principe suivant: la vitesse d'une roue se définit en 2 états , un état faible et un état élevé; les seuils de vitesse étant les mêmes pour les trois roues. Le son produit est ainsi fonction d'une variable binaire à 3 bits; où chaque bit correspond à l'état de vitesse d'une roue. Si le bit vaut 0 alors on est dans un état de faible vitesse; s'il faut 1 il s'agit d'une vitesse élevée. Ainsi 001 par exemple signifie que les roues 1 et 2 ont une faible vitesse et que la roue 3 a une grande vitesse. Chaque combinaison binaire est associé à un son.

000 => Do ; 001 => Ré ; 010 => Mi ; 011 => Fa ; 100 => Sol ; 101 => La ; 110 => Si; 111 => Do#.

De cette façon en tournant de façon agile les 3 roues, il est possible de jouer un son précis.

Le code final a été donné en annexe ainsi que les fichiers WAV utilisés.