Juin2006 – ESEO - P1C 1 Remerciements ------------------------Nous souhaitons remercier diverses personnes pour leur aide et leurs conseils tout au long de notre TIPE. Tout d’abord Monsieur GESLIN Dominique, professeur de Sciences Physiques en première année de cycle préparatoire à l’ESEO, pour nous avoir fourni le matériel requis et les conseils nécessaires à sa bonne utilisation. Nous le remercions également pour nous avoir aidés à accorder les cordes de la guitare. Nous remercions également Monsieur CURILLA Jean-Luc, professeur en Sciences de l’Ingénieur en première année de cycle préparatoire à l’ESEO, pour nous avoir donné des conseils sur la conception du circuit utilisé, ainsi que les différents professeurs du cycle ingénieur sollicités par ce dernier. 2 Sommaire -------------------Introduction p4 - Idée - Objectif I - Physique : Vibration d’une corde de guitare 1 - Le principe des ondes stationnaires 2 - L’application à la musique 3 - Le montage nécessaire p5 p5àp6 p6àp7 II - Electronique : Provoquer l’ouverture et la fermeture d’un circuit 1 - Schéma de montage et fonctionnement 2 - Difficultés rencontrées 3 - Résolution des problèmes p 8 à p 10 p 10 p 11 III - Informatique : Commander l’ouverture et la fermeture d’un circuit 1 - Les choix de programmation 2 - L’utilisation des ports parallèles 3 - Le programme en langage C p 12 à p 13 p 13 à p 15 p 15 à p 19 Conclusion p 20 Lexique p 21 à p 22 Matériel p 23 Bibliographie p 24 3 Introduction ----------------------L’idée originale de ce TIPE nous est venue d’un TP de spécialité physique de terminale ; le but de ce TP étant de déterminer la fréquence propre d’une corde de guitare vibrant en oscillations forcées par une étude sur un oscilloscope à mémoire. L’étude et le contrôle des vibrations des cordes d’un instrument tel que la guitare nous ont tout de suite parus intéressants. Nous avons ici tenté de contrôler la vibration de deux cordes de guitare par ordinateur ; la commande s’effectuant par l’intermédiaire d’un circuit imprimé relié aux ports parallèles de cet ordinateur. Les domaines abordés par notre TIPE sont assez diversifiés car il nous permet d’étudier des phénomènes physiques mais également des montages en électronique et de plus il possède un programme informatique créé spécialement pour notre montage. Nous avons tout d’abord étudié le principe physique concerné et son application à notre projet, puis nous avons étudié les montages électroniques possibles permettant d’atteindre cet objectif. Enfin, la réalisation du programme commandant le tout a finalisé le travail effectué. 4 I - Physique Vibration d’une corde de guitare -----------------------1 - Le principe des ondes stationnaires Si l’on crée une perturbation sur une corde tendue entre deux points fixes, on observe que l’onde sinusoïdale incidente se réfléchit. A certaines fréquences, ces deux ondes entrent en résonance et se superposent. Ce phénomène est alors un phénomène d’ondes stationnaires, c'est-à-dire d’ondes sans propagation. La corde parait alors immobile à l’œil nu, partagée entre des ventres et des nœuds de vibrations. On peut également créer ce type d’ondes sur une corde métallique tendue entre deux points fixes en y appliquant une tension sinusoïdale de fréquence proche de sa fréquence propre f 0 ou de ses harmoniques f n (déterminées à l’aide de la relation f n n f 0 ). La fréquence propre d’une corde correspond à la fréquence pour laquelle elle ne forme qu’un fuseau et deux nœuds : ses points d’attache. Pour chaque fréquence f n n f 0 , (n supérieur ou égal à 1) on observe n fuseaux sur la corde. La fréquence propre d’une corde dépend de sa longueur et de sa masse ainsi que de sa tension en newton : 1 F 2L µ Avec L la longueur en mètres de la corde F sa tension en newton µ sa masse linéique en kg/m f0 2- L’application à la musique Un instrument à cordes tel que la guitare (car c’est ici l’exemple qui nous intéresse) est constitué de cordes tendues entre deux points fixes vibrant audessus d’une caisse de résonance qui amplifie ces vibrations. Les vibrations sont alors audibles clairement par l’oreille humaine (leur intensité est grandement augmentée par la caisse de résonance). Chaque son produit par un instrument est constitué du mode fondamental ( f 0 ) enrichi par ses harmoniques ( f n ). C’est ce qui différencie le son de différents instruments jouant la même note. On observe que dans son utilisation « normale », la corde d’une guitare ne forme qu’un fuseau visible, elle vibre, dans l’ensemble, dans son mode fondamental. On en déduit donc qu’il est aisé d’appliquer le principe des ondes stationnaires en excitant électriquement une des cordes métalliques de la guitare afin de créer un son durable. Pour que ce son soit audible facilement, il faut que la tension parcourant la corde soit d’amplitude assez forte (de l’ordre de 24V) et surtout, il faut amplifier le signal en plaçant un aimant en U à cheval au milieu 5 d’un ventre de vibration, soit au milieu de la corde si elle vibre selon son mode fondamental. La présence de l’aimant en U augmente l’amplitude des vibrations. Cette augmentation est de plus de plus en plus importante lorsqu’on rapproche les branches de l’aimant artificiellement par des pièces de fer pour enserrer plus étroitement la corde. Une tension induite supplémentaire (légère) est créée par le mouvement de la corde conductrice dans le champ magnétique de l’aimant et vient s’ajouter à l’amplitude de la tension dans la corde. Un fort champ magnétique, et donc des branches plus rapprochées de l’aimant permet une amplitude plus forte des oscillations de la corde et un son au final plus audible. 3- Le montage nécessaire Ici, le but étant de réaliser une mélodie, il nous fallait au minimum deux cordes. Notre choix étant limité aux cordes métalliques, nous avons choisi les notes « la » et « mi » grave (la fréquence propre des cordes étant respectivement pour un « la3 » de 220 Hz et pour un « mi3 » de 165 Hz. Mettre plus de cordes aurait posé le problème de l’espace nécessaire au montage et du nombre d’aimants disponibles. De plus, le Générateur Basses Fréquences (GBF) choisi se devait de fournir une tension assez forte afin de rendre plus audible la vibration. Le choix de ce matériel était donc crucial pour notre TIPE. La fréquence devait également pouvoir se régler facilement grâce à une sensibilité forte de la molette du GBF. Tous ces paramètres ont été pris en compte lors du choix du GBF, notre choix s’étant arrêté sur le GX 245 METRIX. 6 Le montage ici décrit est celui qui a été utilisé pour les tests et les réglages. On constate la simplicité de l’ensemble qui nous a permis de nous concentrer sur l’écriture du programme et la réalisation du circuit. Nous avons mis en application ici tous les moyens pour augmenter le volume sonore émis par la corde vibrante : Aimant à entrefer réduit au strict minimum, forte tension délivrée par le générateur et micro placé au-dessus de la corde. 7 II - Electronique Provoquer l’ouverture et la fermeture d’un circuit ---------------------------------1 - Schéma de montage et fonctionnement Le principe du montage électronique utilisé ici est de permettre la commutation de la partie du circuit comprenant le GBF et la corde de guitare. Pour ce faire, nous avons choisi d’utiliser un relais statique*, qui permet d’isoler la partie commande de la partie opérative. Ce relais, dirigé par le port parallèle*, permet d’interrompre le passage du courant dans le circuit avec la corde de guitare afin de contrôler la durée des vibrations ainsi que celle du silence. 8 Les entrées 2 et 3 sont reliées au port parallèle de l’ordinateur qui commande l’allumage ou non de la bobine par échelon de tension. Cet échelon fait passer la tension dans la bobine de 0 à 4.4V environ, le courant parcourant le tout étant de l’ordre de 2.5mA. La commutation peut ainsi être contrôlée par un programme informatique qui agira sur l’état des ports parallèles. La partie du circuit comprenant le GBF et la corde de guitare est reliée aux bornes 5 et 8 du relais. Ainsi, lorsque le relais est alimenté, le circuit l’est également, ce qui correspond mieux à nos attentes que l’inverse c'est-à-dire que lorsque le relais est alimenté, via les ports parallèles, la corde de guitare vibre à la fréquence donnée par le GBF. Nous allons maintenant nous préoccuper du port parallèle et de ses branchements dans le circuit. Tout d’abord, il est composé de 8 broches de données directement utilisables et ne nécessitant pas de circuits d’interfaces supplémentaires pour réaliser des taches simples d’où son utilisation dans notre montage. De plus, comme nous le verrons plus loin, la programmation de ce port est très aisée et ce, à partir de nombreux langages. Pour comprendre son fonctionnement voici quelques explications : Le port parallèle se présente sous la forme d'un connecteur SUBD femelle à 25 broches. Seules 17 broches sont utilisables, les 8 broches restantes sont interconnectées à la masse du PC. Le schéma ci-dessous montre le brochage de ce port. Broche Nom 1 /STROBE 2-9 D0-D7 10 /ACK 11 BUSY 12 PE (Paper End) 13 SELECT 14 /AUTOFEED 15 /ERROR 16 /INIT 17 /SELECT IN 18-25 Masse Sens entrée/sortie entrée/sortie (si EPP) entrée entrée entrée entrée entrée/sortie entrée entrée/sortie entrée/sortie - -Strobe : Cette ligne active basse (donc à 0V) indique à l’appareil auquel il est relié que des données sont présentes sur les lignes D0 à D7 et qu'il faut les prendre en compte. -D0 à D7 : C'est le bus de données sur lequel est véhiculée la valeur du caractère à imprimer. 9 -ACK, Busy, PE, Select, Autofeed, Error, Init, Select in: Ces différentes broches sont uniquement utilisées pour l’imprimante, c'est-à-dire pour indiquer si l’imprimante est sous tension, s’il y a une erreur… -Masse : C'est la masse du PC. Il existe trois types de broches : -Les premières sont des broches de sortie qui sont soit branchées au +5Volts de l’alimentation interne de l’ordinateur, soit branchées à la Terre. -Les secondes sont des broches d’entrées et grâce à elles l’ordinateur (ou le logiciel) est capable de savoir de quelle façon on a raccordé ces broches. Si on en relie une à la Terre, l’ordinateur nous rapportera un « zéro » lorsqu’on lui demandera de lire le port et si on la relie au +5Volts l’ordinateur rapportera un « un ». -Le dernier type est celui des broches de mise à la Terre. Elles correspondent au « - » de la batterie interne de l’ordinateur et sont toutes reliées ensemble dans l’ordinateur. 2 - Difficultés rencontrées L’utilisation d’un optocoupleur* avait été envisagée pour protéger l’ordinateur d’une éventuelle surchauffe ou d’un court-circuit mais après renseignement son utilisation s’est avérée superflue car le principe de fonctionnement d’un relais garantit une isolation suffisante des circuits de l’ordinateur. L’utilisation d’une résistance de protection s’est également avérée inutile car la résistance interne de l’ordinateur utilisé avoisine les 4000 ohms. Ces détails de mise au point furent autant d’écueils qui nous firent perdre du temps mais qui permirent la mise au point d’un circuit fonctionnel avec le moins de matériel possible afin d’éviter les erreurs de branchements ou de compatibilité. De plus, le choix du relais statique, seul élément restant de notre circuit d’origine s’avérait désormais crucial car il fallait qu’il assure la liaison entre les deux circuits (qui sont à des tensions différentes et parcourus par des courants différents) sans intermédiaire ; c’est pourquoi son choix fut délicat. Nous avons donc cherché des informations sur ce type de matériel sur Internet afin de savoir quel type nous conviendrait le mieux. Enfin des problèmes de livraison nous ont obligé à nous renseigner de nouveau sur le matériel reçu et sa compatibilité avec le reste du circuit déjà mis en place car le relais reçu n’était pas exactement celui demandé. 10 3 - Résolution des problèmes Afin de connaître le principe de fonctionnement de ce nouveau relais statique, commandé en tension comme souhaité, il nous a fallu imaginer une façon de savoir de quelle manière il commutait. Pour cela, nous avons mis en place le montage suivant dans le but de déterminer de quel côté se trouvait la bobine élément crucial et fondamental pour utiliser un relais : Avant de réaliser ce circuit et afin de réduire les possibilités de branchement et d’empêcher un court-circuit, nous avions mesuré la résistance entre les bornes 2-3 et 6-7 afin de connaître l’emplacement de la bobine (emplacement vérifié et complété grâce au circuit et à ses différentes manières de le câbler). Nous avions trouvé respectivement 220 Ohms et pour l’autre 0 Ohm c'est-à-dire que la bobine se trouvait entre les bornes 2-3 et le fil entre les bornes 6-7. Afin de savoir comment faire commuter le relais d’une manière pratique pour la suite du montage nous avons remarqué qu’en branchant les bornes A et B sur 2 et 3 puis les bornes C et D sur les bornes 5 et 8 nous pouvions alimenter le circuit en même temps que le relais c'est-à-dire que quand le relais est alimenté (les ports sont ouverts) la corde de guitare vibre. Ce choix nous a paru plus judicieux que de faire l’inverse et de brancher C et D sur 1 et 4 (ce qui aurait également permis au relais de commuter). Cette étude approfondie de notre relais s’est avérée très efficace et riche en informations car elle nous a permis de brancher le relais correctement dès le premier essai et de le faire commuter comme souhaité. Afin de vérifier l’exactitude de tout notre travail nous avons essayé le relais dans le circuit sans utilisation des ports parallèles afin de ne pas endommager le circuit s’il y avait une erreur de branchement. Cependant nous avons pu constater que notre circuit fonctionnait correctement et que la corde vibrait lorsqu’on le désirait. Le circuit effectué est le même que celui montré audessus en changeant la Light Emitting Diod (LED) par la corde de guitare et en ajoutant bien sûr l’aimant et ses entrefers sur la corde afin d’avoir un son audible au niveau de la caisse de résonance. 11 III - Informatique Commander l’ouverture et la fermeture d’un circuit -----------------------------1 - Les choix de programmation A - Le langage Pour commander l’ouverture des ports parallèles, plusieurs choix étaient possibles : le premier étant d’utiliser des logiciels existants demandant quels ports étaient à activer ou à désactiver. L’inconvénient de cette solution est qu’elle était très restreinte, jouer un morceau de musique régulier était notamment impossible, les logiciels ne pouvant être modifiés. La seconde solution était donc de réaliser un programme nous même pour activer les ports ; ce que nous avons fait mais là encore plusieurs choix étaient à déterminer : le langage et le mode de visualisation recherchés par exemple. Pour le langage : Visual Basic, BASIC et langage C permettaient assez facilement l’ouverture des ports parallèles mais nous avons opté pour le langage C car il permet entre autres d’avoir une visualisation graphique qui nous a notamment permis de faire une interface agréable et intuitive ; c’est pour cela que le mode « console » a été banni. B - Les librairies Pour avoir un rendu graphique en C, l’utilisation d’une librairie était indispensable, une interface 2D nous étant suffisante. La librairie SDL* permettant l’utilisation d’images et gérant parfaitement l’utilisation de la souris et du clavier était le meilleur rapport simplicité/performance et c’est pour cela que nous l’avons choisie. Pour la gestion du rendu sonore, la librairie FMOD* a été utilisée, de même que SDL car elle est libre et multi plateforme. La librairie SDL incrémente également une option SDL_AUDIO mais celle-ci était beaucoup plus complexe à mettre en œuvre d’où l’utilisation de FMOD. C - Le compilateur Pour le compilateur notre choix s’est tourné vers Dev-C++ qui est gratuit et qui permet la compilation d’environnement « fenêtre » ou « console », il est disponible sur le site http://www.bloodshed.net/. L’utilisation des librairies en est assez aisée puisqu’il suffit pour une compilation correcte d’ajouter dans l’éditeur de liens (option du projet) : -lmingw32 -lSDLmain -lSDL (pour la SDL) 12 -lfmod (pour FMOD) Il est également nécessaire de rajouter au projet les .dll correspondantes. 2 - L’utilisation des ports parallèles A - Le choix de transmission vers la carte électronique Pour piloter à partir de l’ordinateur l’ouverture des contacteurs, il nous fallait utiliser un port de sortie de données sur le PC ; les principaux ports envisageables sont le port parallèle, le port série et le port USB, les plus courants sur ordinateur actuellement. Nous avons opté pour la liaison à l’aide du port parallèle car celui-ci dispose de 8 sorties séparées alors que les ports série et USB envoient les données les unes à la suite des autres sur une seule et unique sortie. Ce qui ne correspondait pas à notre attente. B - La commande du port LPT en C Pour gérer l’ouverture et la fermeture des ports parallèles, nous avions plusieurs choix de programmation en C : -Tout d’abord utiliser la fonction native du C : outportb(port,valeur); 13 Cependant l’apparition de messages d’erreur tels celui-ci nous ont contraints à utiliser une librairie car cette fonction était malheureusement incompatible sous Windows XP. -Le second choix fut la librairie Inpout32 qui semble tout à fait nous convenir car elle passe les restrictions de commande des ports dans Windows XP et est compatible pour tous les systèmes d’exploitation. De plus cette librairie simple ne comporte que deux fonctions utiles : une pour la lecture du port LPT et l’autre pour l’écriture. Outp32(port,Valeur); Inp32(port,Valeur); Cette librairie est disponible sur http://www.logix4u.net/inpout32.htm. C - L’utilisation d’inpout32 et fonction complémentaire Pour initialiser son utilisation, une déclaration de la librairie et des fonctions nécessaire est utile : typedef short _stdcall (*inpfuncPtr)(short portaddr); typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); HINSTANCE hLib; inpfuncPtr inp32; oupfuncPtr oup32; Cette précédente initialisation est tirée d’un exemple sur le site de cette librairie. La seule différence effectuée par rapport à l’exemple est que cette première partie a dû être placée avant la fonction main() car elle sert dans différentes fonctions. Au-delà de cette différence, un module supplémentaire a été ajouté permettant d’automatiser la commande vers le port parallèle à l’aide de notre interface graphique. Nous avons dû pour cela créer une fonction convertisseur binaire/hexadécimal. En effet, sur le port parallèle, les 8 ports de sorties sont commandés à l’aide d’une seule valeur hexadécimale, par exemple 0xFF : 0x indiquant que c’est de l’hexadécimal et FF étant la valeur des 8 ports. Cette valeur maximale FF correspond à 255 en décimal et 11111111 en binaire ce qui signifie ici que tous les ports seront ouverts ; chaque valeur de bit binaire indiquant son ouverture ou sa fermeture. Si l’on veut simplement les ports 2, 5 et 7 d’ouvert, c'est-à-dire le 3ème, le 6ème et le dernier, on convertit 10100100 en hexadécimal. Le principe de cette fonction est simple : il sépare les 4 premiers chiffres et les 4 derniers, il effectue ensuite une conversion décimale classique : 14 1010 en binaire → 0×20 + 1×21 + 0×22 + 1×23 → 10 en décimal → A en hexadécimal. L’opération est également effectuée pour 0100 et l’on obtient ici par exemple une valeur hexadécimale 0xA4. Pour la lecture de partition la même chose est effectuée sauf que dans ce cas là, une temporisation est ajoutée en fonction du type de la note et les ports sont ainsi ouverts successivement. 3 - Le programme en langage C A - L’interface Notre choix de proposer une interface graphique nous a permis notamment de faire une interface plus agréable c’est à dire utilisable avec la souris mais possédant également des menus plus concrets pour l’utilisateur souhaitant voir jouer sa guitare comme il le voit sur l’image ou sur une partition créée. Cette interface comporte 3 parties principales : - l’ouverture directe des ports - un menu pour faire jouer la guitare en temps réel - un créateur de partition avec aperçu sonore Les autres parties plus secondaires servant à donner les instructions pour prendre en main le programme malgré une interface assez intuitive, les crédits, ainsi qu’une option pour quitter le programme proprement. La première partie gère directement l’ouverture des ports. En effet, suivant les ports que l’on souhaite activer, la conversion binaire/hexadécimal s’effectue automatiquement et les ports s’ouvrent ou se ferment simplement. Les options « tout activer » et « tout désactiver » permettent encore de simplifier la tâche et d’augmenter la rapidité d’exécution. Les 8 ports peuvent ainsi être ouverts ; même si pour notre TIPE il ne peut y avoir que 6 cordes maximum sur la guitare : donc 6 ports seulement sont nécessaires. Cependant pour que le son soit plus audible et les réglages plus simples, nous n’avons mis en place que 2 cordes même si nous avons souhaité faire le programme complet pour plus de lisibilité. La deuxième partie du programme s’occupe alors de rendre intuitive l’utilisation de la guitare à l’aide de l’ordinateur. Lorsque que l’on clique sur une corde celle-ci vibre et donc joue une note le temps cliqué sur la corde. Cette partie permet également de voir quelle note est jouée. La troisième partie est une amélioration de la seconde qui consistait à jouer soi-même en temps réel. Cette nouvelle partie permet donc d’automatiser la vibration des cordes avec un temps de vibration déterminé, des pauses précises et quelle corde doit vibrer. L’utilisation d’une partition pour simplifier tous ces paramètres nous a paru être le meilleur choix car les partitions sont 15 compréhensibles par tous les musiciens. Le mode aperçu permet de voir le résultat de la création rapidement avec des notes préenregistrées à vide d’une guitare. B - La structure du programme Le programme est structuré en plusieurs fonctions : -La fonction principale main() correspond à l’initialisation de la librairie SDL, la déclaration des surfaces, des images, des sons, de l’icône de la fenêtre et de son titre, puis la gestion des événements c'est-à-dire souris et clavier. A tout moment, le programme attend qu’un évènement se produise et lorsque celui-ci survient, il lance une autre fonction puis affiche le nouveau résultat. -La fonction affichage() est la fonction générale pour réactualiser l’affichage à chaque action de l’utilisateur. Suivant les options sélectionnées par l’utilisateur elle lance les fonctions d’affichage correspondant à chaque partie du programme. Les fonctions d’affichage sont toutes structurées de la même façon dans ce programme. Tout d’abord elles affichent l’image de fond, qui peut varier suivant les options sélectionnées. Ensuite, par exemple dans la première partie, est enregistrée dans un tableau la position de la flèche de sélection des ports (ou les ports actifs), les images s’incrustant alors sur le fond après avoir retiré les contours blancs pour dissimuler la superposition. -On trouve également dans le programme des fonctions de gestion de la souris et nous avons dû créer une fonction très utile : void selectionSouris(int poshx, int poshy, int posbx, int posby, int lignes, int colonnes, int boutonfixe) Cette fonction sert lors d’un mouvement de la souris à déterminer si la sélection se situe dans le cadre prédéterminé par les variables (x,y) de deux coins opposés. Cette zone est alors séparée en un nombre de lignes ou de colonnes (6 lignes par exemple pour le menu) et chaque petite zone renvoie une variable unique ce qui permet ensuite un affichage interactif des boutons pour toutes les sélections par souris. La dernière variable prise en compte boutonfixe indique si l’on enlève ou non la sélection lorsque la souris n’est plus dans la zone : par exemple pour la note choisie pour la partition, une note au moins doit rester sélectionnée ; contrairement aux boutons « ajouter une note » par exemple. 16 C - Le code Dans cette partie sur le code, nous ne montrerons que les parties délicates qui ont pu nous poser problème ; le code complet étant trop long. Il est cependant disponible dans le cd joint dans le fichier main.c pour comprendre la structure du programme, ou à l’aide du fichier Projet1.de où le projet peut être ouvert et compilé dans son entier avec dev-C++ (accompagné des librairies SDL et FMOD). Tout d’abord, il faut lancer le moteur de gestion 2D (notre librairie SDL), dont voici l’initialisation : // Initialisation de SDL if (SDL_Init (SDL_INIT_VIDEO) < 0) { fprintf (stderr, "Erreur d'initialisation de SDL: %s\n", SDL_GetError ()); return 1; } atexit (SDL_Quit); // Pour quitter proprement // Initialisation de SDL_Video Screen = SDL_SetVideoMode (800, 600, 32, SDL_SWSURFACE|SDL_DOUBLEBUF); if (Screen == NULL) { fprintf (stderr, "Erreur d'init du mode video: %s\n", SDL_GetError ()); return 2; } Ensuite l’initialisation du moteur audio FMOD doit être effectuée: // Initialisation de FMod FSOUND_Init(44100, 7, 0); // Chargement des sons son[0] = FSOUND_NORMAL, 0, … FSOUND_Sample_Load(FSOUND_FREE, FSOUND_LOADMEMORY); "son/son0.wav", // Réglage du volume FSOUND_SetVolume(0, 150); … Pour attendre une action de l’utilisateur, que ce soit clavier ou souris, il faut faire une boucle infinie mais qui attend pour éviter un usage trop important du processeur : // Traitement des commandes while(SDL_WaitEvent(&event)) { 17 // Type d'évènement switch(event.type) { case SDL_KEYDOWN: // Si on presse une touche switch(event.key.keysym.sym) { case SDLK_ESCAPE: // Actions pour ECHAP if (*ptpage != 1 && *ptpage != 0) { *ptpage = 1; affichage(); }else{ SDL_FreeSurface(ptm1); SDL_FreeSurface(ptrect); … return 0; } break; … Le code étant ici incomplet mais il montre bien la structure de la boucle et du « switch » qui répertorie toute les touches et actions possibles. La fonction présentée plus haut dans la partie B correspondant à la gestion de la souris est semblable à des boucles de vérification par rapport à la position de la souris : // Objet de gestion SDL_Event event; // déterminer la position de la souris void getMousePosition(void) { SDL_PumpEvents(); iMouseX = event.motion.x; iMouseY = event.motion.y; return; } void selectionSouris(int poshx, int poshy, int posbx, int posby, int lignes, int colonnes, int boutonfixe) { getMousePosition(); int i = 1; int j = 1; int lgcasex = ((posbx-poshx)/colonnes); int lgcasey = ((posby-poshy)/lignes); 18 if ((boutonfixe == 0) && ((iMouseX < poshx) || (iMouseY < poshy) || (iMouseX > posbx) || (iMouseY > posby))) { *ptaffiche1 = 0; *ptaffiche2 = 0; }else{ for(i=1;i<=colonnes;i=i+1) { for(j=1;j<=lignes;j=j+1) { if ((iMouseX >= (poshx+lgcasex*(i-1))) && (iMouseY >= (poshy+lgcasey*(j-1))) && (iMouseX <= (poshx+lgcasex*i)) && (iMouseY <= (poshy+lgcasey*j))) { if (lignes == 1 && colonnes == 1) { *ptaffiche1 = 1; }else if (lignes == 1) { *ptaffiche1 = i; }else if (colonnes == 1) { *ptaffiche1 = j; }else if (lignes != 1 && colonnes != 1) { *ptaffiche1 = i; *ptaffiche2 = j; } } } } } } 19 Conclusion --------------------Nous avons réussi à réaliser un montage permettant de faire vibrer 2 cordes de guitare à l’aide d’un programme informatique. Il est alors possible de régler les temps de vibration afin de moduler le son entendu en agissant sur l’ordinateur. La partie la plus délicate à traiter dans notre TIPE a bien entendu été le programme en C++ car il se devait de contrôler le reste du circuit tout en restant intuitif à utiliser et agréable à regarder, mais après plusieurs essais infructueux il s’est avéré fonctionnel. Afin de garantir la validité de notre TIPE et de notre montage celui-ci se devait d’être clair avec un relais statique approprié afin de faire commuter le circuit comprenant la corde de guitare et de l’entendre vibrer à la fréquence souhaitée. On pourrait également voir d’autres applications à notre TIPE autres que la corde de guitare afin d’exploiter toutes les ressources du programme créé. En effet le programme pourrait être utilisé sur un petit piano car il possède une partie partition permettant alors de jouer une mélodie complète mais permettant également de commander les 8 ports et pas seulement les deux utilisés ici. 20 Lexique ------------------Relais statique : C’est un préactionneur assimilable à un interrupteur électronique, qui s’ouvre et se ferme, au rythme de l’alimentation de son circuit de commande. Un relais peut commuter selon deux modes de fonctionnement : -synchrone : la commutation à l’état passant s’effectue au zéro de tension et le blocage s’effectue au zéro de courant. -asynchrone : la commutation à l’état passant s’effectue instantanément et le blocage s’effectue au zéro de courant. Lorsque l'on achète un relais, il faut faire attention à cinq paramètres: - Le type de relais: 1RT, 2RT, 3RT etc... - La tension maximale qui peut se trouver aux bornes de la bobine est également un aspect important. - La tension maximale qui peut se trouver aux bornes de l'interrupteur (Tension de coupure). Lorsqu'un courant arrive dans la bobine, il se produit un champ magnétique qui attire le contact: celui-ci se ferme. On dit que le relais est en position Travail. Lorsqu’aucun courant ne parvient à la bobine, un petit ressort fait remonter le contact. On dit alors que le relais est en position Repos). Schéma simplifié : -Optocoupleur : C’est un dispositif optoélectronique qui isole électriquement l'entrée de la sortie donc prévient des perturbations de fonctionnement des équipements et matériels. 21 Il est aussi appelé photocoupleur et une autre utilisation pourrait consister à faire passer un courant assez important avec un autre courant relativement faible : c'est-à-dire faire une "adaptation de tension". -Port parallèle : Les ports d'entrée-sortie sont des éléments matériels de l'ordinateur, permettant au système de communiquer avec des éléments extérieurs, c'est-à-dire d'échanger des données, d'où l'appellation d'interface d'entrée-sortie. La transmission de données en parallèle consiste à envoyer des données simultanément sur plusieurs canaux (fils). Les ports parallèles présents sur les ordinateurs personnels permettent d'envoyer simultanément 8 bits (un octet) par l'intermédiaire de 8 fils. Les ports parallèles sont, comme les ports série, intégrés à la carte mère. Les connecteurs DB25 permettent de connecter un élément extérieur (une imprimante par exemple). -Librairie SDL : C’est une librairie libre de droit (licence GNU LGPL version 2) et multi plateforme (Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX). E Elle est disponible sur le site http://www.libsdl.org/. -Librairie FMOD : Elle est libre et multi plateforme (Windows 32bit, Windows 64bit (AMD64), Linux, Linux 64bit (AMD64), Macintosh (os8/9/10/x86), Windows CE (PC/Smart phone), Playstation 2, Xbox, GameCube, Xbox 360, Playstation Portable, PLAYSTATION®3, Wii). Elle est disponible sur le site http://www.fmod.org/. 22 Matériel --------------------Un ordinateur avec un programme spécifique pour commander les relais. -Un câble pour sortie port parallèle. -Un circuit imprimé. -2 relais statiques. -4 fiches « banane ». -2 GBF de la marque GX 245 METRIX pour fournir une alimentation au circuit comprenant la guitare. -4 pinces « crocodile ». -2 aimants en U puissants. Il vaut mieux réduire la taille de l’entrefer pour augmenter encore le champ. On y parvient en y plaçant des pièces en fer. -Une guitare avec 2 cordes métalliques. -Des fils de branchement. 23 Bibliographie ------------------------Sites pour le programme informatique : http://www.fmod.org/ http://www.libsdl.org/ http://www.logix4u.net/inpout32.htm http://www.bloodshed.net/ -Sites pour le relais statique : http://www.srcdevices.com/cgi-bin/crosssearch.pl?part=prma&mfg C’est le PRMA1C05 pour la datasheet www.conrad.fr http://www.selectronic.fr/cgv.asp http://pourtous.eu/html/principal/index.shtml#Fenetre -Sites pour la partie sur les aimants : www.al.lu/physics/Downloads/Deuxième/Cours%202004/18%20Champ% 20magnetique.pdf http://www.discip.ac-caen.fr/phch/lycee/terminale/ter_div_acc.htm -Sites sur les ports parallèles : http://www.commentcamarche.net/pc/serie.php3?imprim=1 http://www.progzone.free.fr/basniveau/portp/portp.htm http://nicolas.marchildon.net/electro/parallele/index.html 24