IMA3/IMA4 2021/2023 P7 : Différence entre versions
(→Semestre 8) |
(→Réalisation et résultats) |
||
Ligne 108 : | Ligne 108 : | ||
<br> | <br> | ||
− | + | ==Affichage== | |
Version du 8 mars 2023 à 11:24
Sommaire
Résumé
Notre but est de concevoir et modéliser un accordeur de guitare automatique. Ce dernier rendrait l'accordage d'une guitare 100% automatique, du grattage des cordes à la rotation des mécaniques.
Présentation générale
Contexte
La guitare est l’un des instruments de musique les plus populaires depuis le XIIIe siècle. Elle accompagne de nombreux genres musicaux tel que le jazz, le blues, la pop, le rock, etc. Mais comme tout instrument, la guitare se désaccorde avec le temps… Cet accordage peut se faire à l’oreille pour ceux qui ont l’oreille absolue, au diapason, ou à l’aide d’un accordeur. En effet les accordeurs de guitare manuels et semi-automatiques existent déjà, mais présentent quelques problèmes : imaginez un artiste voulant accorder en vitesse sa guitare avant de monter sur scène. Le bruit de la foule qui l’acclame déjà empêche son accordeur d’entendre correctement les notes jouées et de l’aider à accorder son instrument. C’est pourquoi nous avons décidé de développer un accordeur de guitare 100% automatique : du traitement du signal sonore à la robotisation des gestes d’accordages.
Objectif
Notre objectif est donc de savoir gratter une corde, acquérir la fréquence qui en est émise à l'aide de notre capteur (microphone ou capteur de vibration), puis grâce à notre algorithme, si la fréquence émise est supérieure à la fréquence de référence, le moteur tourne d'un sens pour tourner la mécanique, si la fréquence est inférieure, le moteur tourne dans l'autre sens. Nous devons donc travailler sur l'acquisition de la fréquence et le traitement du signal, et sur la modélisation 3D pour le boîtier, le rail et la pince.
Description
Notre objet sera donc séparé en 3 parties :
- un boîtier contenant un moteur et une pince, placé sur les mécaniques de la guitare afin de pouvoir les tourner et régler ainsi la tension des cordes et donc, la fréquence émise
- un rail et une tige, placé au dessus de la caisse de résonnance, permettant de gratter les cordes unes à unes.
- une partie centrale qui contiendrait l'alimentation et le microcontrôleur
Equipements
Equipements nécessaires
Voici le matériel que nous avons dû acheté pour le projet
Matériel | Image | Lien |
---|---|---|
Motoréducteur | https://www.robotshop.com/eu/fr/pololu-motoreducteur-75-1-metal-25dx54l-mm-hp-6v.html | |
Capteur piezo | https://www.robotshop.com/eu/fr/capteur-vibration-piezo.html |
Voici le matériel, à notre disposition, dont nous avons besoin :
- Kit Arduino, nous créerons donc nos codes sur l'IDE Arduino.
- Microphone KY037, qui était fourni dans le kit Arduino.
Réalisation et résultats
Structure
Notre structure suit 3 parties :
- une partie basse qui permet de gratter les cordes
- une partie haute qui permet de tourner les mécaniques
- une partie principale qui contient le micro, la carte arduino et l'alimentation.
Modélisation sous SolidWorks: Pour faire les modélisations 3D, nous sommes passés par le logiciel de conception SolidWorks. Notre but ensuite est d'imprimer ces différentes pièces à l'aide d'une imprimante 3D.
Traitement du signal
- Acquisition du signal avec le Microphone
Le microphone possède déjà un montage amplificateur inclus sur sa carte. On peut modifier sa sensibilité à l'aide du potentiomètre. Mais avec l'acquisition Arduino, nous n’avions aucune information sur l’échelle de temps du signal acquis. Nous avons décidé d'échantillonner nous même le signal et de le mettre dans un tableau afin de faire ensuite une FFT avec une échelle de temps que nous connaissions.
- Acquisition du signal avec le capteur piézo-électrique
Nous avons fait des tests pour comprendre quel type de signal sort du capteur en fonction de la fréquence émise. De même, nous avons commencer à chercher et tester comment amplifier le signal obtenu qui semble être sinusoïdal.
- Obtenir la fréquence avec les signaux acquis
La première solution que nous avons choisi a été d’essayer d’utiliser du code python sur notre carte arduino puisque nous avions déjà réalisé une acquisition de fréquence par la transformée de Fourier avec la bibliothèque Numpy de Python. Pour cela, nous avons choisi d’utiliser la bibliothèque Firmata qui nous permet de programmer la carte arduino en Python via une autre interfaces comme par exemple Spyder ou EduPython. Mais peu importe l’interface nous ne sommes jamais parvenu à utiliser du code python sur notre carte arduino Mega. De plus, cela nous oblige à utiliser Python pour tout le projet alors que le code Arduino est plus adapté pour les autres étapes.
Nous avons donc dû choisir une autre solution. De là, nous avons essayé de créer un programme Arduino pour trouver la fréquence de ce signal à l’aide de la FFT mais nous n’avons pas réussi à obtenir de résultat concluant. Nous avons donc décidé d’utiliser des bibliothèques Arduino en libre droit sur internet, comme par exemple :
- Adafruit Zero FFT Library
- arduinoFFT
- fix_fft
- Audio Frequency Meter
Mais nous avions de nombreux messages d’erreurs pendant la compilation. Malheureusement l’amplificateur du microphone a été court-circuité lors de nos essais. Nous avons commandé trois nouveaux microphones qui arriveront bientôt pour continuer nos essais.
SOLUTION RETENUE
Finalement, nous avons réussi à acquérir la fréquence à l'aide de la bibliothèque arduinoFFT, écrite paré Enrique Condes, implémentée directement dans Arduino. Cette bibliothèque contient une fonction s'appelant MajorPeak, qui donne la fréquence du pic maximal dans la FFT du signal observé, à savoir la fréquence de ce signal. Nous avons échantillonné avec 128 échantillons (il faut une puissance de 2 pour la FFT) et une fréquence d'échantillonnage de 8000Hz.
Affichage
Bilan
Pour conclure, durant ce semestre nous avons :
- modéliser la structure mécanique de notre accordeur sur SolidWorks
- débuter le code de la rotation du moteur
- débuter le code de l'acquisition de la fréquence sur Arduino
Gestion de projet
Diagramme de Gantt
Chronologie des séances
Semestre 6
1 mars
- Découverte du sujet
- Premières réflexions sur l'étude fonctionnelle
8 mars
- Etude de la concurrence et de l'existant
- Etude poussée de l'accordage d'une guitare
15 mars
- Réflexion sur comment gratter les cordes
- Etude de marché
- Diagramme de Gantt
22 mars
- Diagramme à bête de corne
- Début du cahier des charges fonctionnels fonction par fonction
29 mars
- Analyse des risques
- Rédaction de l'organigramme de l'architecture logicielle
5 avril
- Conclusion sur l'étude de marché
- Petite présentation à M. Lahkal
26 avril
- Analyse technique (diagramme pieuvre, liste du matériel)
- Passage au club Instru pour étudier une vraie guitare
3 mai
- Recherche sur l'acquisition du son
- Recherche sur la détection de corde précise
10 mai
- Rédaction du rapport
- Rédaction du pitch pour la vidéo de communication
Semestre 7
10 octobre
- Ajustement du diagramme de Gantt
21 octobre
- Finalisation de la liste d'équipements
- Renseignement sur les logiciels de conception
28 octobre
- Récupération du kit Arduino
- Simulation avec le capteur de vibration
18 novembre
- Modélisation 3D des 2 parties du systèmes sur SolidWorks
- Simulation du capteur de vibration sur le logiciel Tinkercad
21 novembre
- Travail de l'acquisition de fréquence avec le microphone KY037
25 novembre
- Travail de l'acquisition de fréquence avec le microphone KY037
28 novembre
- Réception de la commande du motoréducteur et des capteurs piézo
8 décembre
- Recherche d'un programme faisant l'autocorrélation et la densité spectrale de puissance du signal
15 décembre
- Manipulation d'un oscilloscope, un haut-parleur et du capteur de vibration afin de mieux comprendre le signal qu'on reçoit
- Début de rédaction du rapport du S7
Semestre 8
18 janvier
Durant ces 4 heures, afin de rattraper notre retard sur l’acquisition de fréquence, nous ne nous sommes dédiés qu’à cela.
A l’aide d’une bibliothèque Arduino nommée “arduinoFFT”, par Enrique Condes, nous avons pu récupérer la fréquence d’un son joué en face du micro. La fonction principale qui nous permet cela est FFT.MajorPeak qui donne la fréquence du pic principal détecté lors de la FFT.
Nous avons joint ce programme à celui que nous avions déjà créé au S7 qui détecte s’il faut tendre ou détendre la corde, comme on peut le voir ci-dessous :
On détend la corde car fréquence réelle > fréquence idéale
La prochaine fois, nous essayerons de faire le branchement avec le moteur pour le faire tourner dans le sens horaire ou anti-horaire selon s’il faut tendre ou détendre la corde.
1/03 CR de la séance : Fichier:COMPTE-RENDU DU 01 03.pdf