Dernière mise à jour :
03/10/2009
Présentation
Cette sirène, capable de produire une dizaine de types de son,
est
réalisée à partir d'un PIC de type 12F675, le
passage d'un son à un autre se faisant au moyen d'un simple
bouton poussoir.
Elle
dispose même d'une LED synchronisée sur les cycles de variation... c'est pour dire !
Avertissement
Je n'ai pas cherché ici à reproduire le son de sirènes
célèbres (pour le pin-pon du SAMU, voir page
Sirène 007b). Le but principal de cette réalisation
est de montrer une méthode, et j'espère bien que vous
allez trifouiller les entrailles du logiciel du PIC pour lui faire
sortir des sons qui vous appartiennent. J'ai déjà inclu
quelques "sous-programmes" qui servent de points de départ, à
vous de modifier la valeur de quelques variables pour voir l'impact
sonore produit. Et si vous ne vous vous sentez pas l'âme d'un
bricoleur sonore, et bien ma foi, contentez-vous de flasher le fichier
binaire fourni tout fait, dans un PIC vièrge ou de
récupération, et offrez le tout à un de vos
enfants ou à une cousine, vous ferez un heureux de plus !
Schéma
La partie matérielle du circuit
d'origine était tellement simple (trois composants en comptant le bouton poussoir) que j'ai du ajouter une led
clignotant au rythme des variations, pour faire plus sérieux. Allez donc savoir si j'ai réussi...
Ici, point de circuit modulant, et point de circuit modulé...
tout du moins sous forme matériellement visible. Tout se fait au
travers d'un logiciel somme toute assez simple, qui se contente de
faire travailler une sortie alternativement à l'état haut
et à l'état bas. Car le miracle du son se fait ainsi, qui
n'est qu'une suite de variations électriques transmises à
un transducteur (haut-parler ou buzzer par exemple) qui à son tour les transforme
en variations accoustiques audibles.
Principe de base
Enoncé dans les lignes qui
précèdent, on ne
devrait pas être trop perturbé à la lecture des
lignes de code qui suivent. Pour simplifier, un seul des programmes
sonores implémentés est représenté. Pour
voir tout, se reporter au code source complet mis à disposition.
program electronique_sirene_007;
var
i, iProg, iDelay, iPeriod: integer;
bBtnPressed: boolean;
InProg: sbit at GPIO.0;
OutAudio: sbit at GPIO.1;
OutLed: sBit at GPIO.2;
const
iProgMax = 2;
procedure Init;
begin
CMCON := %00000111; // comparators OFF
TRISIO.0 := 1;
TRISIO.1 := 0;
TRISIO.1 := 0;
ANSEL.ANS0 := 0; // set as digital I/O
ANSEL.ANS1 := 0; // set as digital I/O
ANSEL.ANS2 := 0; // set as digital I/O
end;
procedure Play_Prg_00;
begin
for iDelay := 1 to 100 do
begin
for iPeriod := 0 to 5 do
begin
OutAudio := OutAudio xor 1;
for i := 0 to iDelay do
delay_us(1);
end;
end;
end;
// ...
// autres programmes sonores
// ...
// main program
begin
Init;
iProg := 0;
while true do
begin
// program change ?
if Button(GPIO, 0, 100, 0) and (not bBtnPressed) then
begin
bBtnPressed := true;
if iProg < iProgMax then
inc(iProg)
else
iProg := 0;
end;
// program to play ?
if GPIO.0 = 1 then bBtnPressed := false;
case iProg of
0 : Play_Prg_00;
1 : Play_Prg_01;
2 : begin
Play_Prg_00;
Play_Prg_01;
end;
end;
// synchro led on / off
OutLed := OutLed xor 1;
end;
end.
Voir aussi page
Programmation PIC - Bases - MP - Production sonore.
Passage d'un type de son à un autre
Il suffit d'appuyer sur le bouton poussoir SW1, ce qui au niveau du
logiciel du PIC ordonne l'exécution du sous-programme
adéquat (un sous-programme par type de son). Un petit
inconvénient à la méthode employée ici : le
bouton poussoir n'est lu qu'à la fin d'un cycle, ce qui impose
de laisser le doigt dessus jusqu'à ce qu'un cycle soit fini,
pour que la demande de changement de son soit bien prise en compte.
Avantage : le passage d'un type de son à un autre se fait sans
heurt. Bien entendu, il est possible de faire en sorte que l'appui sur
le poussoir soit pris en compte aussitôt, via usage d'une
interruption par exemple. C'est une question de choix ;-)
Transducteur de sortie
J'ai mis un petit transducteur piezo-électrique (buzzer passif)
mais vous pouvez aussi mettre un petit haut-parleur de 8 à 50
ohms, en série avec un condensateur de liaison de 220 uF
à 1000 uF. Si le HP ne fait que 8 à 16 ohms, il faut
mettre une résistance en série pour limiter le courant de
sortie du PIC à une valeur non destructive (une 47 ohms ira
bien). Cette résistance atténuera forcement la puissance
disponible en sortie, mais l'usage premier de cet objet n'est pas de
concurencer la sirène du premier mercredi du mois...
Logiciel du PIC
Les fichiers de code source
(MikroPascal V2.50 Pro) et binaire compilé (*.hex) sont disponibles
dans l'archive dont le lien suit.
Sirène 007 - PIC 12F675 - 03/10/2009
Si
vous souhaitez recevoir par la poste un PIC préprogrammé
et prêt à utiliser, merci de consulter la page
PIC - Sources.
Circuit imprimé
Réalisé en simple face.
Oui, j'en conviens, un petit bout de
plaque d'expérimentation à bandes ou à pastilles conviendra fort bien !
Historique
21/01/2015
-
03/10/2009
- Première mise à disposition.