Electronique > RéalisationsProduction sonore > Sirènes > Sirène 007

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.

sirene_007_pcb_3d_a

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...

sirene_007

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.

sirene_007_pcb_composants

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.