Précédente Accueil Suivante

 

Accueil
Le projet IRBOT
Chassis roues
Servomoteur
Modif servos
Test servos
Le radar IR
Premiers pas robot
Détection collision
Télécommander
Test RC5
IRBOT et RC5
Mémo parcours
Mise en veille
Vers PIC16F628
Borne recharge
Compilateur CCS
Modif matérielle
Recharge du robot
Bip Bip ...
En musique
Vidéos
Téléchargements
Carte développ.
Liens Affiliation

Bip bip

Vous l'avez deviné. IRBOT va pouvoir émettre des sons.

On commence par des bips. C'est un bon moyen de signalisation.

Pour émettre un bip, rien de mieux qu'un bon vieux buzzer. Mais pas n'importe quel buzzer, un buzzer piezzo-électrique svp.
Vous me direz, pourquoi pas un buzzer standard qu'on alimente en continu et qui émet une tonalité unique ?
Ben justement, c'est la tonalité unique qui m'embête. Je préfères émettre la tonalité qui me plait, et de plus ça nous arrangera bien pour la prochaine étape qui est "jouer de la musique".

Bon, c'est quoi un buzzer piezzo-électrique ?

C'est un composant électronique qui ressemble à ça.



Une petite capsule qui émet un son lorsqu'on l'alimente avec une tension alternative. La tonalité est fonction de la fréquence du signal. Ca marche bien dans une plage de 1000 à 5000 Hz.

Le défi à relever est donc de générer le signal pour le buzzer à partir du microcontrôleur PIC16F628.
C'est quoi un bip ? C'est un signal d'une fréquence bien audible pendant un temps court.
Je choisis la fréquence de 2093 Hz qui correpond au Do de la quatrième octave. Vous me corrigez si je me trompe. On émet ce signal pendant environ 200ms. Ca fera un beau bip.

Comment générer ce bip ?

Et bien, on va utiliser le module générateur PWM qui équipe le PIC16F628.
C'est quoi cette bête ? Comme son nom l'indique c'est un générateur Pulse Wide Modulation. En français, modulation de largeur d'impulsion.
En d'autres termes c'est un générateur de fréquence dont on peut faire varier la largeur d'impulsion. Pour notre cas, on ne va pas faire varier la largeur de l'impulsion. Ce qu'il nous faut c'est une fréquence stable et précise en sortie.
Le générateur PWM est très intéressant car il travaille en arrière-plan, c'est à dire qu'il est indépendant du prog qui tourne dans le pic. Il suffit de le mettre en route et il génère en permanence un signal alternatif sur la pin CCP1 (ou encore RB3). On branchera notre buzzer sur cette pin.
Donc pour générer notre bip on va :


configurer le générateur PWM pour émettre une fréquence de 2093 Hz
mettre le générateur en route
et l'arrêter au bout de 200ms


Dans la pratique, ça donne ceci.

On crée un fonction son(val, duree)


int1 son(int val, int duree) {

if (TONE) return 1;

TONE=1;
CPT_TONE=duree;

setup_ccp1(CCP_PWM); // Configure CCP1 en PWM
setup_timer_2(T2_DIV_BY_16, val, 1); // définie la période
set_pwm1_duty(25);

}


val correspond à la valeur d'initialisation du générateur. Elle est en relation avec la fréquence.
durée correspond à la durée d'émission du son ( en multiple de 20ms)

Le générateur PWM utilise le TIMER2 pour définir la durée de la période du signal.
Pour connaître la valeur de val en fonction de la fréquence souhaitée on applique dans notre cas la formule suivante (ça dépend de la fréquence de l'oscillateur et du multiplicateur du TIMER2) :

val = 5000000 / (frequence * 16)


Ce qui donne pour une fréquence de 2093 Hz

val = 5000000 / (2093 * 16) = 149

Pour la duree, une autre formule

duree = temps / 20ms

Pour un temps soutaité de 200ms

duree = 200 / 20 = 10

Voilà, l'appel de fonction son(149,10) met donc le générateur en route.
Comment l'arrêter ? Tout simplement dans la routine d'interruption qui est exécutée toutes les 20ms.
On décompte CPT_TONE toutes les 20ms. Lorsque CPT_TONE arrive à 0, on arrête le générateur PWM.

Voici le bout de prog qui se trouve dans la routine d'interruption


if (TONE) { // si BIP en cours
if (!CPT_TONE--) {
TONE=0;
setup_ccp1(CCP_OFF); // Fin du BIP
}
}




On peut ainsi générer un bip n'importe ou dans le programme. Par exemple, à chaque fois que l'on appui sur une touche de la télécommande, lorque IRBOT change de direction etc ...

Pour simplifier encore l'émission d'un bip, je crée une macro. Cela m'évite de taper à chaque fois : son (149,10). Il suffit de simplement taper : bip;

La macro :

#define bip son (149, 10);

Une vidéo de démonstration du bip

http://pro.wanadoo.fr/yves.heilig/Forum/IRBOT/Videos/irbot_bip.avi

Le raccordement du buzzer au PIC



Prochain post : jouer de la musique

 

Précédente Accueil Suivante