Introduction: Tige Musicale
Dans le cadre de nos études, il nous a été demandé de réaliser un projet de A à Z utilisant un montage électronique, une Raspberry Pi 2 et possédant une interface modélisé par un site web.
L'intitulé est le suivant : il s'agit d'émettre différents sons en fonctions de différentes fréquences que l'on devra capter selon la manière que l'on souhaite. C'est le même principe que pour un instrument de musique, la seule différence est que le nôtre sera électronique.
De cette consigne nous ai venu l'idée suivante :
Obtenir différentes fréquences en faisant vibrer une tige en plastique dont on fera varier la longueur.
Pour ce faire nous avons choisi d'utiliser un capteur de flexion dont la résistance augemente lorsqu'on le replie sur lui même. Ce capteur, une fois fixer à la tige, sera capable de détecter les oscillations de la tige.
En sortie du montage électronique sur lequel on aura connecté le capteur, nous observerons des variations de tension qui représenterons un signal de fréquence donnée.
A l'aide d'un programme informatique (écrit en language C) nous allons acquérir les fréquences sur la Raspberry Pi 2.
Enfin avec un autre programme nous associerons ces fréquences à différents sons que nous émettrons directement depuis la carte.
A l'instar "d'Instructables", nous créerons ensuite un site qui expliquera comment marche notre instrument et comment le fabriquer.
Step 1: Création Du Montage Analogique
Un instrument de musique "éléctronique" nécessite forcément un circuit éléctronique. C'est la base de ce projet et c'est pourquoi la première étape consistera à réaliser le montage du circuit analogique.
Notre montage, une fois connecté à la Raspberry Pi 2, aura pour but de générer différentes tensions. Les variations de tension correspondront aux différentes fréquences qui nous permettront de choisir quels sons émettre.
Pour ce faire, nous aurons besoin :
- D'un capteur de flexion, qui agit comme une résistance variable. La valeur de sa résistance varie lorsqu'on lui applique une déformation. /Ref : FS7954/
- D'un CAN (Convertisseur Analogique Numérique), qui comme son nom l'indique, va servir à numériser les valeurs de tension obtenues en sortie du montage afin de les rendre exploitables par la Raspberry Pi. /Réf : MCP3008/
- De 3 AOP (Amplificateur Opérationnel), qui vont nous permettre d'amplifier la tension en sortie du capteur qui possède une valeur assez faible. /Réf : LM358/
- D'un régulateur de tension 5V, afin de maintenir une tension constante sur tout notre circuit qui sera alimenté par des piles. /Réf : Pololu U1V11F5/
- D'un connecteur 40 Pins, pour relier le circuit à la Raspberry Pi 2.
- 13 résistances et 1 condensateur.
Tout d'abord, il faut équilibrer le pont de wheastone. C'est à dire que la sortie du pont doit être de 0V lorsque le capteur est à son état initiale. Pour celail faut choisir les résistances de manière à respeter la relation RX/RE = R2/R1. Dans notre cas nous avons : Re = 30 kΩ, Rx = 86 kΩ, R1 = 15 kΩ, R2 = 30 kΩ. Cependant ces valeurs sont succeptibles de varier selon le capteur. En pratique les valeurs trouvées avec la relation ci-dessus peuvent être ajusté afin d'équilibré le pont de wheatstone.
Il faut maintenant réaliser notre amplificateur différentiel auquel on ajoutera un offset de 2,5V(grace a un diviseur de tenison) afin de centrer notre signal autour de 2,5V. en sortie. En premier il faut connaitre le gain à appliquer à notre ampli. Nous avons choisi un gain G = 5. R5 = ,R4 = 127kΩ, Rg =Ω, R3 =Ω,RG =Ω
A la sortie du filtre il faudra ajouter un filtre passe-bas afin de garder seulement les données à traiter, et supprimer les HF. on a utilisé un filtre RC avec fc = 106Hz. R = 15Ω et C = 100 uF
Maintenant que le schéma est complet il faut réaliser un PCB qui nous servira de circuit. Il est possible de réaliser le montage sur Labdec, mais en pratique il est plus ergonomique et fiable d'utiliser un PCB.
Step 2: Acquisition Des Données
Maintenant que nous avons la donnée en sortie du montage il faut l'acquérir afin de pouvoir la traiter sur la Raspberry Pi et par la suite produire un son.
Tout d'abord, il faut récupérer la datasheet du MCP3008 qui va nous servir de CAN pour récupérer les données sur la Raspberry Pi. On le connectera de la façon montrée sur le schéma de la partie précédente.
Il faut maintenant configurer la Raspberry pour activer ses ports SPI. Il existe plusieurs templates de code d'acquisition pour le MCP3008.
Voici en pièce jointe l'un d'entre eux. Son exécution neccessite d'avoir installé au préalabe la bibliothèque Wiring Pi. A la compilation il faudra donc rajouter l'option -lwiringPi. La commande pour exécuter le programme est la suivante : $ sudo ./ 1 (lorsque que l'on branche le signal à convertir au port CH0 du CAN).
Une fois cette étape terminé, il faudra récupérer la fréquence.
Attachments
Step 3: Récupération De La Fréquence
Nous allons effectuer une FFT (Fast Fourier Tranform) afin de récupérer la fréquence mesurée.
On va maintenant déterminer les paramètres de la FFT. Il faut tout d'abord étudier l'interval de fréquences produite [20 Hz - 100 Hz]. A partir de celle-ci, on obtient notre fréquence d'échantillonnage (Fe = 200Hz), ainsi que le nombre de points sur lequel on appliquera le calcul (N = 256 points). Ce nombre de points déterminera la précision de la FFT (1Hz). Il existe aussi des templates pour le code de la FFT, il faudra modifier celui-ci pour obtenir uniquement la fréquence avec l'amplitude maximale qui servira pour produire un son. La bibliothèque GSL permet de faire fonctionner le code mit en pièce jointe. Il faudra utiliser les options -lgs -lgslcblas lors de la compilation.
Afin d'effectuer l'acquisition et le calcul en temps réel, il est nécessaire de les effectuer en parallèle. Nous utilisons donc, une fonction d'interruption pour acquérir les données dans un tableau de 256 cases, et un thread pour effectuer le calcul de la FFT, prenant en paramètre le tableau de données (utilisation de la bibliothèque Pthread).
L'interruption s'effectue selon la fréquence d'échantillonnage Fe (toute les 5 ms).
Step 4: Génération D'un Son
Nous sommes maintenant capables d'observer sur la Raspberry Pi les différentes fréquences que l'on peut produire en faisant vibrer la tige. Il ne reste plus maintenant qu'à émettre des sons.
Il faut d'abord installer sur la Raspberry Pi la bibliothèque ASLA. Le code est fourni. Il faudra que la fonction récupère la fréquence renvoyé par la FFT, et selon cette valeur, émettre un son différent.
On placera cette fonction dans un 2eme thread pour paralléliser toutes les fonctions.
Une fois cette étape terminée, on peut enfin assembler tout le système.
Attachments
Step 5: Assemblage Final
Afin de rendre plus agréable l’utilisation de notre instrument nous avons créé un support en bois. Nous avons découpé une planche rectangulaire de dimension 30x23x2 afin de placer :
- La Raspberry Pi
- Le PCB
- Le bloc de pile
- La tige
Ces différents composants sont reliés entre eux. Il faut faire attention au placement de ces composants, en effet les pins de la Raspberry Pi sont reliés avec une nappe aux ports du PCB. Il en est de même pour le bloc de pile qui est relié à la masse et à l’alimentation du PCB. D’où, dans notre cas la nécessité de placer la Raspberry Pi, le PCB et le bloc de pile dans cette ordre. On fixe la tige à l'aide d'un etaux en face du PCB, car le capteur de flexion placé sur la tige est relié au PCB.