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