Texte à méditer :  
Dernière mise à jour : 1 juillet 2016     .
Corrections mineures orthographiques.

Création de l'article sur la fonction PWMOUT
Mise à jour de l'article PICAXE n° 13     
.
Logos/picaxe2.pngPICAXE pour débutants - 13 - Générer des sons (partie 2)

 

 

Troisième programme : sirène d'ambulance utilisant les instructions "son"

Tout d'abord, une fois n'est pas coutume, voici directement le programme.

 

Programme_test_SONS_3.png

 

Pour générer les trois tons de la sirène on utilise trois fois la fonction [Son].

Chacune des 3 fonctions est paramétrée pour générer la tonalité adéquate pendant 160 ms sur la sortie C2 :

  • note A4 pour le premier et le troisième son,
  • note C5 pour le deuxième son.

 

 

Quésaco "A4", "C5" etc. ?

Pourquoi pas la notation latine "Do,Ré, Mi..." comme nous l'avons apprise  il y a bien longtemps déjà ?

Tout simplement parce que LOGICATOR utilise la notation musicale Grégorienne chère à nos voisins anglais et allemands.

 

 

 

Notation musicale grégorienne

 

Tableau des correspondances entre les notations
latine et grégorienne ou anglo-allemande, et leurs fréquences :

 

N° touche piano Notation latine Notation grégorienne Fréquence (Hz)
53 Do4dièse Cdièse5 ou Dbémol5 554,365
52 Do4 C5 523,251
51 Si3 B4 493,883
50 La3dièse Adièse4 ou Bbémol4 466,164
49 La3 A4 440
48 Sol3dièse Gdièse4 ou Abémol4 415,305
47 Sol3 G4 391,995
46 Fa3dièse Fdièse4 ou Gbémol4 369,994
45 Fa3 F4 349,228
44 Mi3 E4 329,628
43 Ré3dièse Ddièse4 ou Ebémol4 311,127
42 Ré3 D4 293,665
41 Do3dièse Cdièse4 ou Dbémol4 277,183
40 Do3 C4 (en) 261,626
39 Si2 B3 246,942
38 La2dièse Adièse3 ou Bbémol3 233,082
37 La2 A3 220

 

Le tableau complet est ICI.

 

 

 

Tableau récapitulatif des tonalités françaises normalisées
pour les véhicules de pompiers, police, ambulances, SAMU et gendarmerie

 

Ce tableau nous a été communiqué par notre camarade José.

 

Ce document est disponible en téléchargement ICI.

Ce tableau comporte aussi des liens internet qui permettent d'écouter les différentes sirènes.

Il donne les caractéristiques de 5 sirènes : police, gendarmerie, SAMU, pompiers, ambulances.

 

Petit extrait : sirène d'ambulance

 

Tonalités telles que les définit la réglementation

Descriptif

Tonalité

AMBULANCE

1er ton

420 Hz ± 2/100

2ème ton

516 Hz ± 2/100

3ème ton

420 Hz ± 2/100

4ème ton

silence 1,5 secondes

Cadence

50 à 60 cycles/ minute.

Niveau sonore

Jour

Nuit

en dB

110

70 à 90

 

Les notes les plus proches des fréquences préconisées sont donc A4 (440 Hz au lieu de 420) et C5 (523 Hz au lieu de 516).

N.B. Dans le programme ci-dessus les notes ont été choisies toutes les deux par excès de la fréquence, pour conserver à peu près le même rapport entre les tonalités.

 

 

 

 

Limitations des instructions [SON] de LOGICATOR

 

Comme on peut le constater sur le tableau de la notation musicale grégorienne, la gamme s'étend sur 7 octaves plus 3 notes (87 demi-tons), de [A0] à [C8] soit de 27,5 Hz à 4185 Hz.

(Il s'agit de la gamme courante des fréquences musicales fondamentales d'un piano, mais pas de la totalité du spectre sonore).

 

Aïe !!!

 

LOGICATOR n'autorise que la gamme [C1] à [C5] soit une plage de fréquences de 32,7 Hz à 523 Hz.

 

C'est sympa mais très insuffisant pour permettre de programmer les sirènes de police, gendarmerie, et SAMU :

  • police : premier ton = 435 Hz ; deuxième ton = 580 Hz,
  • gendarmerie : premier ton = 435 Hz ; deuxième ton = 732 Hz,
  • SAMU : premier ton = 435 Hz ; deuxième ton = 651 Hz,

 

Sommes-nous en présence d'une impossibilité ?

 

Que nenni !

 

Pas de panique !

 

LOGICATOR a plus d'un tour dans son sac : il s'agit de l'instruction [Code en BASIC] qui va nous permettre de contourner les limitations précédentes.

 

 

 

Quatrième programme et premières instructions en BASIC : sirène d'ambulance

Le document fourni pas José va nous aider.

En effet, à la fin du document on trouve les morceaux de codes qui correspondent aux différentes sirènes.

La sirène d'ambulance est composée de 3 tons : 420 Hz / 516 Hz / 420 Hz.

 

Pour obtenir ces tons on utilise la fonction BASIC :

PWMOUT,PWMDIV16, broche, période, rapport_cyclique

La documentation de cette fonction dans le manuel français est assez... obscure.
Un article détaillé est disponible ICI.
 

Résumé des formules utiles issues de cet article

 période = 1 000 000 / fréquence PWM (1) 

1 000 000 = 1/4 de la fréquence d'horloge du PICAXE.
fréquence PWM est exprimée en Hertz

 (rapport_cyclique) = 4 x période x (rapport_cyclique_vrai) (2) 

(rapport_cyclique_vrai) est exprimé sous forme décimale. Il est compris entre 0 et 1.
(période), le paramètre, est compris entre 0 et 255.
(rapport_cyclique), le paramètre, est compris entre 0 et 1023.

Dans tous les cas (qu'on utilise pwmdiv-- ou pas) :

 fréquence PWM = 1 / période_PWM (3) 

fréquence PWM en Hz,
période_PWM en secondes.

 

 
 

Cette fonction génère un signal en créneaux (PWM) sur la sortie C.2 du 08M2.

Ce signal pourra être perçu comme un son si sa fréquence est située entre 30 et 8000 Hz et si, bien entendu, on a branché un transducteur sur la sortie C2 du PICAXE.

 

On utilise la boite [Code en BASIC] que l'on nome "Ambulance", et on y entre le code BASIC ci-dessous :

 

Programme_test_SON_AMBULANCE.png

 

En quelque sorte, grâce à cette possibilité, nous venons de créer une fonction supplémentaire et personnelle.

 

 

Analyse du paramétrage de l'instruction pwmout pwmdiv16, 2, 148, 298

Les formules ci-dessus, appliquées aux 3 tons normalisés 420 Hz,  516 Hz et 420 Hz, permettent le paramétrage de la fonction pwmout.

Remarque : avec l'utilisation de pwmdiv16

période = 1 000 000 / fréquence PWM devient : période = 62500 / fréquence PWM

 

  • Pour le ton à 420 Hz

période = 62500 / 420  soit : période = 148,9
(l'auteur a choisi la valeur 148 ! )

Pour un rapport_cyclique_vrai de 50% (0,5) on calcule le paramètre "rapport_cyclique" :

(rapport_cyclique) = 4 x 149 x 0,5 soit : (rapport_cyclique) = 298

  • Pour le ton à 516 Hz

période = 62500 / 516  soit : période = 121,12
(l'auteur a choisi la valeur 120 ! )

Pour un rapport_cyclique_vrai de 50% (0,5) on calcule le paramètre "rapport_cyclique" :

(rapport_cyclique) = 4 x 121,12 x 0,5 soit : (rapport_cyclique) = 242

 

 

Analyse rapide du programme

La sirène d'ambulance est composée de 3 tons consécutifs d'une durée de 166 millisecondes chacun, suivis d'un temps d'arrêt de 1,5 secondes.

Le petit programme BASIC comporte donc 3 groupes d'instructions du genre :

pwmout pwmdiv16, 2, 148, 298

pause 166

  • la valeur "2" représente la sortie C2, (broche 4) du 08M2, utilisée pour la diffusion du son ;
  • la valeur "148" représente la période totale du signal ;
  • la valeur "298" représente la période de "travail" du signal (duty cycles).

  • pause 166 correspond à l'émission du ton pendant 166 ms.
    (C'est la fonction [Attendre] bien connue dans LOGICATOR).
  • l'instruction pause 1500 correspond à un temps d'attente de 1500 ms (soit 1,5 seconde) avant de redémarrer un nouveau cycle de 3 tons.

  • l'instruction pwmout 2, off bloque la sortie "son" pendant l'attente de 1,5 s.
  • l'instruction du début, setfreq m4, impose au 08M2 de fonctionner à 4 méga-Hertz.
    (c'est en fait le réglage "naturel" du 08M2 et donc on pourrait se passer de cette instruction).

    Si le 08M2 était réglé à 8 mHz par exemple (setfreq m8), tous les sons seraient générés une octave plus haute et les temps d'attente divisés par deux.

 

 

Essais comparés des deux programmes "ambulance"

  • le programme n°3 avec les instructions "son" ;
  • le programme n°4 avec les instructions PWM en BASIC.

 

Note : à la place du buzzer je vous recommande de brancher un petit haut-parleur en série avec une résistance de 47 Ohms / 1/4 Watt. Le son ne sera pas très fort mais de bien meilleure qualité.

Si en plus le petit HP est logé dans une petite boite qui lui sert d'enceinte acoustique, alors là... !

Dans la partie n°3 (article n°14) nous verrons comment obtenir un son plus fort, de façon très simple.

 

Télécharger successivement l'un puis l'autre programme et comparer la qualité sonore :

  • entre chaque son généré par le programme n°3 on entend un petit claquement assez gênant et si on tend l'oreille on constate que le son contient un petit grésillement. Pas très bon tout ça !
     
  • le son généré par le petit programme en BASIC est d'une bien meilleure qualité.
    Pas de grésillement.
    Pas de claquement entre chaque note et un timbre plus agréable à l'oreille et plus proche du réel.

 

D'autre part, grâce au paramétrage des instructions pwmout pwmdiv16, 2, x, y on respecte mieux les fréquences "officielles".

 

 

Pour les bidouilleurs :

 

Dans l'instruction pwmout pwmdiv16, 2, 148, 298 le paramètre 298 correspond au rapport travail / repos du signal sonore PWM.

Amusez-vous à le modifier, entre 50 et 500 par exemple (soit un rapport_cyclique_vrai d'environ 8% à environ 84%) : la fréquence du son va rester la même mais le timbre  va changer. Plus "rond", plus "sec", plus "métal" suivant la valeur du paramètre.

Essayez. Ça vaut la peine.

En quelque sorte, et dans une faible mesure, ce paramètre permet un filtrage du son en faisant varier sa composition en fréquences harmoniques.
 

 

POLICE, GENDARMERIE, SAMU, POMPIERS

 

Extraits du document "Tableau récapitulatif des tonalités françaises", voici les 6 bouts de programmes que vous pouvez copier/coller dans la boite de paramétrage de la fonction [Code en BASIC] :

 

Sirène d'ambulance (exemple traité dans cet article)

setfreq m4
pwmout pwmdiv16, 2, 148, 298
pause 166
pwmout pwmdiv16, 2, 120, 242
pause 166

pwmout pwmdiv16, 2, 148, 298
pause 166
pwmout 2, off
pause 1500

Sirène de police

setfreq m4
pwmout pwmdiv16, 2, 143, 287
pause 545
pwmout pwmdiv16, 2, 127, 256
pause 545

 

Sirène de gendarmerie

setfreq m4
pwmout pwmdiv16, 2, 143, 287
pause 545
pwmout pwmdiv16, 2, 84, 171
pause 545

 

 

Sirène du SAMU

setfreq m4
pwmout pwmdiv16, 2, 143, 286
pause 545
pwmout pwmdiv16, 2, 95, 190
pause 545

 

Sirène de pompiers

setfreq m4
pwmout pwmdiv16, 2, 143, 287
pause 1070
pwmout pwmdiv16, 2, 127, 256
pause 1070

 

Sirène de pompiers américains

setfreq m4
b2=205
w9=b2*2
b4=65
b5=205
do
random w10                          'w10= (b21, b20)
w10=5*b20 +400                   'w10 aléatoire de 0 à 765
do
dec b2                                  'glissement fréquence
w9=b2*2                               'rapp cyclique 50%
pwmout pwmdiv16, 2, b2, w9
pause 30
loop while b2>b4                    'b4=65 -->940 Hz
pause w10
random w10                           '(b21,b20)
w10=4*b20                            'B20 = 0 à 255 --> w10= 0 à 765
b21=b21//4                            'b21=0,1,2
b5=51*b21+100                     'b5 aléatoire
do
inc b2 w9=b2*2
pwmout pwmdiv16, 2, b2, w9
pause 50
loop while b2<b5                    'b5=205-->303Hz; 253-->246Hz
loop

 

N.B. tous ces programmes ont été testés et fonctionnent correctement.

 

 

Conclusion

 

En dehors du programme "Sirène de pompiers américains", les autres programmes BASIC sont très simples.

Simples à comprendre mais aussi très simples à modifier.

Il ne faut pas se priver de les adapter pour d'autres besoins.

 

 

Et surtout, ne vous privez plus de contourner les limitations de LOGICATOR (ou de BLOCKLY) en créant vos propres bouts de programmes en BASIC.

 

 

 

 

 

 

 


Date de création : 20/08/2013 - 18:48
Dernière modification : 15/06/2016 - 11:08
Catégorie : PICAXE pour débutants
Page lue 2615 fois

Imprimer l'article Imprimer l'article

react.gifRéactions à cet article

Personne n'a encore laissé de commentaire.
Soyez donc le premier !

^ Haut ^