IMA3/IMA4 2021/2023 P7 : Différence entre versions

De Wiki de Projets IMA
(ALGORITHME)
(ALGORITHME)
Ligne 126 : Ligne 126 :
 
[[Fichier:Organigramme_code.png|700px|thumb|center|Organigramme de l'algorithme fondamental de notre projet]]
 
[[Fichier:Organigramme_code.png|700px|thumb|center|Organigramme de l'algorithme fondamental de notre projet]]
  
Le fonctionnement est assez simple. Globalement le programme va comparer la fréquence reçue par le microphoneà la fréquence de référence de la corde et en fonction du résultat, faire tourner le moteur dans le sens horaire ou anti-horaire.  
+
Le fonctionnement est assez simple. Globalement le programme va comparer la fréquence reçue par le microphone à la fréquence de référence de la corde et en fonction du résultat, faire tourner le moteur dans le sens horaire ou anti-horaire.  
  
 
De plus, nous avons mis en place une vitesse et un temps de fonctionnement variables, lorsque le moteur doit modifier la tension d’une corde, en fonction de l’écart entre la fréquence voulue et la fréquence mesurée. En effet, si la fréquence mesurée est loin de la fréquence voulue, le moteur aura une vitesse plus élevée et tournera pendant un temps plus long que si l’écart entre ces deux fréquences est faible. Cette méthode nous permet d’atteindre plus rapidement la fréquence voulue.  
 
De plus, nous avons mis en place une vitesse et un temps de fonctionnement variables, lorsque le moteur doit modifier la tension d’une corde, en fonction de l’écart entre la fréquence voulue et la fréquence mesurée. En effet, si la fréquence mesurée est loin de la fréquence voulue, le moteur aura une vitesse plus élevée et tournera pendant un temps plus long que si l’écart entre ces deux fréquences est faible. Cette méthode nous permet d’atteindre plus rapidement la fréquence voulue.  

Version du 18 mai 2023 à 16:15

Résumé

Bienvenue sur cette page qui résume notre projet d'élève ingénieur en systèmes embarqués. Notre but était 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. Ce projet a été réalisé par ROUILLE Quentin, GRONDIN Louis et BULTEL Laurine, élève de SE4-SA.

Photo de l'équipe

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

D'un point de vue conception, notre objet serait 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 support fixe 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
Schéma de notre solution

Solutions matérielles

Voici la liste du matériel que nous avons utilisé afin de réaliser ce projet :

Matériel Image Lien
Motoréducteur
Moteur choisi
https://www.robotshop.com/eu/fr/pololu-motoreducteur-75-1-metal-25dx54l-mm-hp-6v.html
Microphone KY037
Microphone choisi
https://www.az-delivery.de/fr/products/mikrofon-modul-gross
Microcontrôleur Arduino ATMega2560
Microcontrôleur choisi
disponible directement dans le kit Arduino
Ecran LCD
Ecran choisi
https://www.az-delivery.de/fr/products/1-3zoll-i2c-oled-display



Développement Technique

Structure

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.


La pince qui viendra tourner la mécanique


SON

  • Acquisition du signal avec le microphone

Malgré l’inconvénient des bruits parasites qui peuvent gêner l’acquisition, le microphone reste la solution la plus simple et efficace pour notre projet. Sur celui que nous avons choisi, le KY03, un petit potentiomètre permet de régler la sensibilité. Nous avons fait de nombreux tests afin de déterminer le meilleur réglage possible. En effet, avec trop de sensibilité, le microphone captait plus les bruits environnants, mais avec trop peu, il ne captait pas suffisamment la note jouée à la guitare. Nous avons donc essayé de trouver un juste milieu.

Nous avons ensuite réfléchi à une question assez importante : où placer le microphone lorsque l’on gratte une corde de la guitare ? Après s’être renseignés, nous avons décidé de le placer à l’intérieur de la caisse de résonance, en le glissant dans la rosace de l’instrument. Cet endroit est idéal pour capturer le son car la cavité creuse permet d’amplifier le son produit par les cordes.

Montage de l'Arduino pour les test du micro


  • Traitement du signal

Une fois la note acquise, il est nécessaire de terminer sa fréquence afin de la comparer à la fréquence de référence de la corde. Pour se faire, Après de multiples tests, nous avons décidé d’utiliser la bibliothèque Arduino “arduinoFFT”, de Enrique Condes. Cette bibliothèque contient une fonction s’appelant MajorPeak, qui nous donne directement la fréquence du pic maximal observé dans la FFT du signal perçu. Nous avons échantillonné avec 256 échantillons et une fréquence d’échantillonnage de 5000 Hz.

La fonction Major Peak nous donne la fréquence de la note
tPremière simulation de l'accordage








ALIMENTATION

Un objectif très important pour nous était d'avoir un système complétement transportable, il n’était donc pas envisageable de devoir brancher notre système à une source d’énergie fixe. Après quelques recherches nous avons conclu que l’utilisation d’une pile 9V était le plus optimale pour l’alimentation d’une carte arduino qui accepte (via une source d’alimentation externe) des tensions comprises entre 7V et 12V. Au-delà et en deçà de ces tensions on risque dans un sens, une sous alimentation du processeur et dans l’autre une surtension au niveau du régulateur qui viendra tout simplement après la surchauffe couper l’alimentation de la carte.

En intégrant une pile, il fallait que le système puisse être mis en marche de façon simple, nous avons donc rajouté un interrupteur va-et-vient dans notre montage. Pour repasser à la corde 1, il suffit de redémarrer le système.

Au niveau de la motorisation, nous devions également utiliser cette source d'énergie externe afin d'alimenter le driver moteur. Nous avons tout simplement créé une dérivation juste après l’interrupteur. Un câble viendra donc alimenter la carte via son port Vin et l’autre ira directement vers l’entrée d’alimentation du driver, la masse étant quant à elle commune à l’ensemble du circuit. L’écran et le microphone, pour leur part, sont alimentés par les ports de sortie de la carte arduino.

En ajoutant notre propre source de tension il a fallu porter une attention particulière à la protection de la carte. Dans un souci de sécurité nous avons ajouté une diode au niveau du port Vin, cette diode aura pour effet de laisser passer le courant uniquement s’il est dans le bon sens. Avec cette protection il n’est donc plus possible d’endommager la carte si l’on branche la pile dans le mauvais sens. En toute logique, il aurait fallu ajouter un transformateur 9V vers 6V afin de ne pas suralimenter le moteur. Etant donné qu’il ne fonctionne pas de manière continue, ce problème est négligeable, nous avons donc gardé cette configuration.


Schéma de l'alimentation


MOTORISATION

Nous nous sommes ensuite dédié à la motorisation du projet, afin de tourner les mécaniques de la guitare. Après quelques recherches, nous avons appris qu'il fallait un couple d'environ 0,2 Nm pour pourvoir tourner les mécaniques. Finalement le moteur choisi possède un couple d’environ 1.3 Nm pour une vitesse de rotation de 130 tr/min à vide. En raison de son prix (35 €) et de son poids (100 g) il n’était pas envisageable de créer une structure pouvant accueillir 6 moteurs de la sorte que ce soit en termes de poids, d’encombrement ou de prix. C’est donc principalement pour cela que nous avons décidé d’accorder une corde à la fois. Afin de pouvoir commander ce moteur avec une tension d’alimentation supérieure à celle de l’arduino et dans les deux sens de rotation, nous avons dû utiliser un driver moteur qui n’est autre qu’un hacheur commandé qui permet de faire passer une tension directement au moteur tout en étant piloté par l’intermédiaire de l’arduino. Grâce à cela il nous est donc possible d’alimenter le moteur à la même tension que la pile, soit 9 V, mais aussi de faire tourner le moteur dans le sens horaire et antihoraire.

Le driver est donc d’une part alimenté par la batterie et connecté au moteur d’autre part. Les interrupteurs sont quant à eux connectés à la carte arduino au niveau de ses sorties analogiques, sur lesquels nous agirons à travers le programme afin de pouvoir tourner les mécaniques. Les masses sont encore une fois toutes communes entre elles. L’utilisation d’un driver permet de modifier la vitesse de rotation du moteur (en modifiant la valeur que l’on envoie sur les pins de sortie).

Schéma du câblage de la motorisation


ALGORITHME

Le programme qui nous permet d’accorder les cordes a été réalisé en langage Arduino. Il nous permet de contrôler le moteur via son driver en fonction des informations obtenues par le microphone et le traitement du signal. Le code s’appuie sur l'organigramme ci-dessous.

Organigramme de l'algorithme fondamental de notre projet

Le fonctionnement est assez simple. Globalement le programme va comparer la fréquence reçue par le microphone à la fréquence de référence de la corde et en fonction du résultat, faire tourner le moteur dans le sens horaire ou anti-horaire.

De plus, nous avons mis en place une vitesse et un temps de fonctionnement variables, lorsque le moteur doit modifier la tension d’une corde, en fonction de l’écart entre la fréquence voulue et la fréquence mesurée. En effet, si la fréquence mesurée est loin de la fréquence voulue, le moteur aura une vitesse plus élevée et tournera pendant un temps plus long que si l’écart entre ces deux fréquences est faible. Cette méthode nous permet d’atteindre plus rapidement la fréquence voulue. Nous avons également décidé que les fréquences mesurées avec un écart supérieur à plus ou moins 100 Hz de la fréquence voulue ne serait pas prise en compte afin de réduire les erreurs d’acquisitions et donc de tendre ou détendre la corde pour rien.

AFFICHAGE

Nous avons décidé d'améliorer notre système à l'aide d'un affichage. Pour cela nous avons utilisé un écran LCD AZDelivery I2C trouvé sur Amazon : https://www.amazon.fr/AZDelivery-128x64-Arduino-Raspberry-microcontr%C3%B4leur/dp/B074N9VLZX/ref=asc_df_B074N9VLZX/?tag=googshopfr-21&linkCode=df0&hvadid=228090165499&hvpos=&hvnetw=g&hvrand=9301138594553928519&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9055767&hvtargid=pla-435201366413&psc=1


|
Principe de notre 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

Notre 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 : CodeFFT.png

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.


01 mars CR de la séance : Fichier:COMPTE-RENDU DU 01 03.pdf

08 mars