Compte Rendu Word (886ko)

publicité
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
Téléchargement