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

Dernière mise à jour : 21/06/2015

Présentation

J'ai réalisé cette sirène de pompier pour équiper une petite voiture à pédale d'un neveu. L'idée de départ était de faire délivrer le son de la sirène pendant une trentaine de secondes à partir du moment où on pressait un (gros) bouton-poussoir fixé sur le tableau de bord.

sirene_008_pcb_3d_a 

Mais comme chacun le sait, les enfants n'ont pas forcément le réflexe de chercher un interrupteur on/off. Aussi, le circuit devait s'auto-désalimenter au terme de la temporisation. Objectif tenu.

Schéma

Le schéma repose sur un PIC à 8 broches de type 12F675 (on pourrait aussi utiliser un 12F629).

sirene_008

Une fois mis en route en pressant le bouton-poussoir SW1, le montage délivre de façon alternée deux tonalités fixes de 262 Hz (Do3) et 294 Hz (Ré3), chaque tonalité dure une seconde. La sortie GP0 pourrait attaquer directement un transducteur piezo, mais j'ai préféré utiliser un petit haut-parleur de 8 ohms avec un transistor en renfort pour disposer d'un courant suffisant. Le circuit fonctionne avec une tension de 4,5 V (trois piles de 1,5 V).

Auto-alimentation
Au moment où SW1 est pressé, le PIC est alimenté car les deux bornes plus et moins du set de piles (BAT1) arrivent directement aux deux broches d'alimentation (pins 1 et 8 du PIC). Seulement voilà, si on relâche SW1, le PIC n'est plus alimenté. Pour contourner cette situation ô combien ennuyeuse, le transistor Q2 fait office d'interrupteur "secondaire". Au moment de l'initialisation du PIC, la broche GP1 (configurée en sortie) est portée à l'état logique haut et le transistor Q1 qui est câblé en émetteur commun se met à conduire. La base de Q2 est de ce fait porté à une tension faible, de l'ordre de 0,2 V, ce qui le pousse à conduire à son tour (Q2 est un PNP alors que Q1 est un NPN). On dispose ainsi sur le collecteur de Q2 d'une tension d'alimentation qui reste présente même quand SW1 est relâché, car le PIC reste alimenté. Au terme d'une temporisation de 30 secondes, la sortie GP1 du PIC passe à l'état logique bas, le transistor Q1 se bloque et Q2 fait de même car sa base se trouve portée à un potentiel positif via la résistance R7. Le PIC n'est plus alimenté et n'a d'autre solution que de faire le mort. J'ai poussé le vice à le mettre en état de veille (commande SLEEP) juste après coupure de GP1/Q1/Q2. Etape inutile ? Je l'ai tout de même fait car le logiciel était trop simple et il fallait le compliquer. Le PIC se réveille toujours au moment où on le ré-alimente. Mais peut-on vraiment parler de réveil ? La question est ouverte.
Remarque : on observe une légère chute de puissance audio au moment où on relâche le bouton-poussoir SW1, mais je ne trouve pas cela gênant. Bien sûr, dans une application professionnelle je tiendrais un autre discours.

Son et lumières
Je me suis rapidement rendu compte que je me grattais la tête après avoir mise sous tension la première maquette. Il manquait quelque chose. Et en effet, il y avait du son, mais pas de lumière ! Qu'à cela ne tienne, petite modification du logiciel pour faire clignoter alternativement deux LED. Des LED bleues, bien entendu.

Principe de fonctionnement
Les deux timers Timer0 et Timer1 sont mis à contribution :
- Timer0 (TMR0) pour élaborer les signaux sonores
- Timer1 (TMR1) pour faire la bascule toutes les secondes entre les deux fréquences de 262 Hz (Do3) et 294 Hz (Ré3). Comme la périodicité du timer1 est de 10 ms, une variable intermédiaire iT1 est régulièrement incrémentée et quand sa valeur atteint 100 (100 x 10 ms = 1 seconde), on change la fréquence du son.

program electronique_sirene_008_12f675;

const
cTMR0_262Hz = 20; // 262 Hz
cTMR0_294Hz = 46; // 294 Hz
cTMR1H = $D8;
cTMR1L = $F0;

var
iT1: byte;
iShutdown: byte;
bF1: boolean;
Out_Audio: sbit at GPIO.0;
Out_PowerOn: sbit at GPIO.1;
Out_LED1: sbit at GPIO.4;
Out_LED2: sbit at GPIO.5;

procedure CPU_Init;
begin
CMCON := %00000111; // comparators OFF
TRISIO := %00000100;
ANSEL := $00;
OPTION_REG := $00;
OPTION_REG.PSA := 0;
OPTION_REG.PS2 := 0;
OPTION_REG.PS1 := 1;
OPTION_REG.PS0 := 0;
INTCON := $00;
INTCON.T0IE := 1;
INTCON.T0IF := 0;
TMR0 := cTMR0_294Hz;
T1CON := $00;
T1CON.TMR1ON := 1;
PIR1.TMR1IF := 0;
PIE1.TMR1IE := 1;
IOC := %00000100;
WPU := $00;
iT1 := 0;
INTCON.GIE := 1;
bF1 := false;
Out_PowerOn := 1;
iShutdown := 0;
end;

procedure Interrupt;
begin
// Timer0 - use to produce sound
if INTCON.T0IF then
begin
INTCON.T0IF := 0;
if bF1 then
TMR0 := cTMR0_262Hz
else
TMR0 := cTMR0_294Hz;
Out_Audio := Out_Audio xor 1;
end;
// Timer1 - use to change sound freq
if PIR1.TMR1IF then
begin
PIR1.TMR1IF := 0;
TMR1H := cTMR1H;
TMR1L := cTMR1L;
if inc(iT1) > 100 then
begin
bF1 := bF1 xor 1;
Out_LED1 := bF1;
Out_LED2 := Out_LED1 xor 1;
iT1 := 0;
inc(iShutdown);
end;
end;
end;

// main program
begin
CPU_Init;
while true do
begin
if iShutdown > 30 then // 30 secondes
begin
Out_PowerOn := 0;
Out_LED1 := 0;
Out_LED2 := 0;
sleep;
end;
end;
end.


Voir aussi page Programmation PIC - Bases - MP - Production sonore.

Stabilité des fréquences
La stabilité des deux tonalités et de l'intervale de temps qui sépare les changements de ton dépend de l'oscillateur utilisé pour le PIC. Dans le mode le plus simple, on utilise l'oscillateur interne 4 MHz dont la fréquence peut varier un peu en fonction de la température ambiante et de la tension d'alimentation. Comme ici l'application est ludique, cela n'est nullement ennuyeux !

Prototype

Réalisé dans un premier temps sur plaque sans soudure, et ensuite sur plaque prépercée à pastilles.

sirene_008_proto_001a sirene_008_proto_001b  sirene_008_proto_002a sirene_008_proto_002b sirene_008_proto_002c

Essai avec deux HP, un de 8 ohms et l'autre de 50 ohms, dans les deux cas avec résistance de limitation de courant en série (33 ohms). Il faut bien protéger le HP, le PIC et les oreilles des parents.

Logiciel du PIC

Les fichiers de code source (MikroPascal V6.5 Pro) et binaires compilés (*.hex) sont disponibles dans l'archive dont le lien suit.
Sirène 008 - PIC 12F675 - 14/06/2015
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_008_pcb_composants

Typons aux formats PDF et Bitmap 600 dpi

Historique

21/06/2015
- Ajout photos prototypes.
- Amélioration du circuit d'auto-extinction, le précédent fonctionnait mal. Schéma et typon mis à jour.
14/06/2015
- Première mise à disposition.