Introduction: Noisy Sticks

Bonjour !


Si vous êtes sur cette page, c'est que vous êtes intéressés par notre projet : Noisy Stick.

Avant de commencer, on tient à se présenter. Nous sommes des élèves ingénieurs en 4 ème année à POlytech Paris UPMC.

Nous avons eu cette année un projet à réaliser, ayant comme seul
condition : faire un instrument de musique ayant comme entrée des fréquences. Avec beaucoup d'imagination et de travail, nous avons aujourd'hui notre instrument Noisy Stick (presque..) parfait !

Mais qu'est ce que les Noisy Stick ?

C'est tout d'abord un instrument de musique du futur !! Mais plus sérieusement, les Noisy Stick sont comme indique son nomn des batons qu'on agitent afin de créer du son ( plus ou moins mélodieux) à partir de la vitesse de ces derniers. En gros, on récupère une fréquence afin de produire un son.

Pas de panique ! Tout sera expliqué ;)

Nous allons décomposé ce tuto en 2 grande parties : Partie éléctronique , Partie numérique.

Avant de commencer quoi que ce soit, voyons d'abord ce qu'il nous faut.

Liste de matériels :

Raspberry Pi 3 batterie fils électriques (dont 4 de 1m)ADC MCP 3008Amplificateur TL081Résistances (dont 3 de 10 Kohm)Référence 2.5Vune baguette en boisgaine thermorétractableEcouteurs/enceinteAccéléromètre Logiciels à pré-installer :

ALTIUM OrCAD Captur / PSPICE Sublime Text.


Mais comment ça marche ?

Fonctionnement global : On agite l’accelero → production de deux signaux → circuit sommateur → numérisation → étude du signal numérisé (extraction de la fréquence principale) → émission d’un son en fonction de cette fréquence.

Il vous suffit donc juste d’agiter la baguette. Des sons sortiront en fonction de la vitesse d'agitation et ainsi que le sens d'agitation ( horizontalement ou verticalement ).

Step 1: Partie Analogique

Rappel du fonctionnement des Noisy Sticks :
Le principe de notre instrument est d’agiter l’extrémité de nos baguettes. Un son sera ensuite émis en fonction de la fréquence d’agitation. Nous allons dans cette partie nous attarder sur la génération du signal qui sera ensuite numérisé.

Design et explication du circuit (choix des composants)

Tout d’abord, nous voulons mesurer la fréquence due à un mouvement. Le composant correspondant le plus pratique, qui réagit à un mouvement, est un accéléromètre (adxl335 ici).

Les entrées/sorties utiles de l’accéléromètre sont Vcc, GND, X, Y.

Ainsi, l’accéléromètre sort trois signaux : un signal pour la contribution de chacun des trois axes X, Y et Z du mouvement. Nous n’utilisons ici que les sorties X et Y, mais nous pourrions ajouter la contribution en Z (il suffira de reproduire les mêmes étapes que pour X et Y).

Le but de notre circuit est de sommer ces signaux pour n’avoir qu’un signal en sortie (ce signal comprend alors les informations des composantes du mouvement).

Prise en main d’Altium

Notre circuit final a pour but d’être contenu sur un PCB (circuit imprimé).

Nous avons réalisé notre PCB sur Altium, le but est d’obtenir 4 fichiers qui décrivent notre PCB. Ces derniers vous sont fournis ici, mais nous allons tout de même vous décrire comment les obtenir :

Ouvrez Altium, créez un nouveau projet et redessiner le circuit électronique vu précédemment (des importations de bibliothèques de composants peuvent être nécessaires). Compilez votre projet (“Project” -> “Compile”) et gérer les éventuelles erreurs (si les importations ont bien été faites, il n’y aura aucune erreur). Attention : Vous devrez choisir le bon footprint pour chaque composant. Ce choix se fait en fonction des composant dont vous disposez (se référer aux fichiers joints pour ne pas commettre d’erreur).Exporter votre circuit vers un fichier PCB (“Design” -> “Update PCB Document PCB.PcbDoc”). Vous serez alors redirigé vers l’éditeur PCB de votre circuit. Disposez ensuite vos composants comme vous le souhaitez et créez vos routes (ou effectuez un auto-routage dans “Auto Route” -> “All” -> “Route all”). Il est ensuite nécessaire d'optimiser votre PCB selon vos connaissances du logiciel, le but étant de vous faciliter la vie pour la partie soudage.La dernière étape consiste à récupérer les 4 fichiers décrivant votre PCB. Tout ceci est décrit dans le fichier “ “ joint ci-après.Enfin, vous devrez utiliser une découpeuse de PCB en lui envoyant les 4 fichiers demandés (voir avec une personne qualifiée).

Votre circuit une fois imprimé, vous devrez souder tous vos composants en les plaçant de la même façon que sur le PCB.

Ceci va vous demander de l'expérience et de la patience..

Attention toutefois : pour des soucis pratiques, nous vous conseillons de souder tout d’abord les connecteurs AOP/MCP et de les souder des deux côtés de la plaque.

Il ne reste alors qu’à relier des fils assez long (au moins 1 mètre) entre les pins correspondant sur le pcb et l’accéléromètre (voir schéma).

Votre PCB est maintenant prêt !
Il suffira ensuite de le plugger (délicatement) sur la RaspBe.

Step 2: Partie Numérique

Maintenant que le hardware est monté, il reste la partie logicielle.

I) Installation

D'abord, il faut installer plusieurs bibliothèques pour que notre programme fonctionne.

On va avoir besoin de :

Python3 : sudo apt-get update python3 Numpy-lib : sudo pip install numpy (pour faire la fft) Psonic-lib : sudo pip install psonic (pour jouer des sons depuis python) Spidev : sudo pip install spidev OU depuis le site de gordon project (pour utiliser facilement le bus SPI)

Après il suffit de mettre le programme sur la raspberry et d'utiliser crontab pour mettre en place le démarrage automatique.

Commande « sudo crontab –e »

Puis insérer « @reboot python3 V2.py et @reboot sonic-pi »

Pour héberger le site, il suffit d’installer apache et de placer le site dans le repertoire var/html/www/ avec pour nom index.html.

Pour trouver le site se connecter au même réseau que la raspberry, et saisir son adresse IP dans un navigateur.

II)Fonctionnement

En tout, on dénombre 3 threads, et un timer posix.

Au démarrage, le timer est initialisé sur la période d’échantillonnage et toutes les périodes, il va envoyer un SGVALARM au programme.

Le catch de l’interruption est fait par la fonction sendping() qui débloque un sémaphore pour le thread de lecture du bus spi.

Le thread de lecture du bus spi fonctionne sur une boucle infinie qui a besoin d’acquérir un sémaphore a chaque tour. Ainsi à chaque interruption on a une lecture du bus spi qui est stocké.

Toutes les 100 lectures, on libère un autre sémaphore pour le thread d’analyse. Il va récupérer le tampon, faire un fft et supprimer le tiers des valeurs les plus anciennes. Une fois son travail fin, il va déterminera note à jouer et l’envoyer au troisième thread, chargé de produire du son.

On fournit les codes sources, vous avez juste à lancer V2.py