C’est en discutant un jour avec les voisins que l’idée est venue. Le petit fils (3 ans) avait un camion de pompier mais il n’avait pas de « pin-pon » et pour Noël ils avaient regardé mais pas trouvé ce qu’ils cherchaient. Dans ces cas là, le sang du #maker ne fait qu’un tour et je leur ai proposé de réaliser le gyrophare bleu avec la sirène.
Au sommaire :
Une sirène de pompier et un gyrophare avec un Arduino Nano
La dimension de la boîte est fixée par le diamètre des godets à l’endroit où je les ai coupés. Une grille permet au son de sortir. Le bouton poussoir, fixé par la suite sur une plaquette collée dans le camion, permet de lancer la séquence sirène + gyrophare. J’ai prévu 8 cycles son+lumière.
Le schéma
La réflexion pour trouver le cœur du montage n’a pas duré longtemps, j’avais rentré des Arduino Nano pour le projet de rotonde de train électrique et il m’en restait…
Comme d’habitude (pour moi) tout commence par des gribouillis sur des feuilles de papier. Cela permet de poser les idées, d’avoir un aperçu de ce qui sera réalisé…
Après pour cet article j’ai mis au propre comme ci-dessous.
Tension d’alimentation : Au départ j’avais envisagé d’utiliser 3 piles AA de 1,5 volts en série (4,5v) mais les modules MosFET sont donnés pour fonctionner de 5v à 36v. Pour ne pas prendre de risque je suis passé à 4 piles AA pour avoir du 6v (avec piles neuves).
Diodes LED : Le gyrophare comporte 3 LEDs bleues de chaque côté. Pour réduire la consommation (on utilise des piles) les LEDs ne sont pas allumées/éteintes en permanence, (comme un clignotant). J’ai choisi de les faire « flasher » brièvement pour économiser l’énergie. Les LEDs sont également commandées par un module MosFET. Les sorties D11 et D10 de l’Arduino attaque l’entrée du module. Le module reçoit la tension des piles à l’entré et l’envoie sur les LEDs quand la sortie D11/D10 passe à 1. Attention, avec ces modules, le +6v est direct, c’est la masse (GND) qui est commutée.
Les LEDs sont cachées dans des godets récupérés sur une quelconque maker faire ou maker campus (bin oui fô bien mettre la bière dans un récipient 😀 ). Ce sont des godets en plastique translucide qui diffusent bien la lumière des LEDs. Je les ai coupés à 5,5 cm, et c’est le diamètre des godets après découpe qui a défini les dimensions de la boîte…
La LED interne à l’Arduino en Pin 13 clignote en même temps
Bouton poussoir : Un bouton poussoir commande la mise en route de la sirène et des LEDs. Il est connecté à D12 qui est en entrée PULL-UP (avec une résistance interne au V+). Je n’ai pas utilisé de système matériel ou logiciel pour éliminer les rebonds car on ne fait pas du comptage et ça n’aurait pas beaucoup de sens ici.
Sirène : L’Arduino Nano génère un son qu’il a fallu trouver (voir ci dessous : Notes des sirènes). Un ampli « rustique » constitué d’un module MosFET largement surdimensionné (mais pas cher ! ~2€) se charge d’alimenter les haut-parleurs. La sortie D3 de l’Arduino produit un signal qui fait déplacer la membrane des haut-parleurs. Il y a en fait 2 haut-parleurs montés en phase et en série pour augmenter la puissance sonore. Comme j’en avais commandé un lot de 2, je les ai mis tous les deux.
Commutateurs : Un commutateur A/M coupe le +6v des piles pour isoler le montage. En cas d’oubli, toutes les 10 minutes la sirène fait du bruit pour rappeler qu’elle fonctionne, pour éviter de vider les piles. Un autre commutateur met une résistance de 30Ω en parallèle sur la 100Ω qui alimente les haut-parleurs. Cela augmente le volume sonore fourni par la sirène. Mais ça reste raisonnable, je rassure les parents qui se lanceraient dans le montage. Et puis il suffit de ne pas monter ce commutateur pour que le son reste à un volume faible.
Régime de fonctionnement :
Chaque note est jouée 1 seconde, ce qui donne 30 cycles Si/La par seconde. Au cours de chaque note les diodes s’allument deux fois 25ms avec des intervalles de 75 et 375ms. L’effet est assez réaliste. Au lieu d’allumer toutes les LEDs en même temps, on peut faire clignoter alternativement les LEDs gauches, puis droites pour économiser encore l’énergie des piles. C’est ce que fait le programme.
Notes des sirènes
Le site 12volts.eu donne des informations pour les véhicules prioritaires (2 tons) et non prioritaires (3 tons) :
Sirènes des véhicules prioritaires
Même si cela peut varier d’un pays à un autre, un véhicule d’intérêt général prioritaire en Europe dispose souvent d’une sirène dite deux-tons. Deux éléments vont alors déterminer cette tonalité : la fréquence de chaque son et la cadence (nombre de cycles par minute).
Par exemple en France, le 1er ton est toujours de 435 +/- 2/100 Hz, proche du La.
Le deuxième ton dépend alors du service de secours.
Pour la police, il s’agit de 580 Hz, proche du Ré.
Pour la gendarmerie, il s’agit de 732 Hz, proche du Fa.
Pour les pompiers, il s’agit de 488 Hz, proche du Si.
Pour le SAMU, il s’agit de 651+/- 2/100 Hz, proche du Mi.
Tous ont une cadence de 50 à 60 cycles par minute, sauf les pompiers (25 à 30 cycles / minute). J’ai opté pour 30 cycles par minute.
Sirènes des véhicules non prioritaires
Les autres véhicules d’intervention urgente disposent de 3 tons.
Cela permet d’entendre qu’ils ne sont pas prioritaires.
Par exemple pour une ambulance en France :
– 1er ton de 420 Hz , proche du Sol
– 2ème ton de 516 Hz, proche du Do
– 3ème ton de 420 Hz, proche du Sol
– 4ème ton : silence de 1 seconde et demi
Programme
Pour ce qui est du programme, j’ai mis des commentaires pour dire ce que ça fait. Après comme je le dis toujours, c’est du programme de maker. Si ça fonctionne ça me va bien ! Ici le programme alterne l’allumage des LEDs, vous pouvez bien entendu faire tout allumer ensemble, modifier les temps etc.
Le programme utilise les « millis » (millisecondes) qui ne sont pas bloquantes contrairement à delay().
Le programme est « linéaire », pas de boucle, et ça déroule. Pour ce genre d’application ce n’est pas gênant. Le but n’était pas de faire le programme le plus concis possible ! Mais si ça vous amuse de réécrire le programme pour qu’il tienne en 10 lignes, je me ferai un plaisir de le publier 😉
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
const int SIREN_PIN = 3; // La sirène est connectée à la broche D3 const int NOTE_SI = 488; // Fréquence de la note Si (en Hz) const int NOTE_LA = 435; // Fréquence de la note La (en Hz) const int BIP = 1000 ; // Note du bip (en Hz) const int BIP2 = 800 ; // Note du bip (en Hz) // On définit le numéro de pin de la LED const int ledPin = 13; const int ledDroite = 11; const int ledGauche = 10; unsigned long currentTime=0; unsigned long previousTime=0; // On définit le numéro de pin du bouton const int buttonPin = 12; int etat; // état du bouton poussoir int boucle; // compteur de boucle void setup() { // Initialise la broche de la sirène en sortie pinMode(SIREN_PIN, OUTPUT); // On définit la pin de la LED comme étant une pin en sortie pinMode(ledPin, OUTPUT); // On définit la pin de la LED comme étant une pin en sortie pinMode(ledDroite, OUTPUT); pinMode(ledGauche, OUTPUT); // On définit la pin du BP avec une résistance pull-up pinMode(buttonPin, INPUT_PULLUP); // on active la résistance de pull-up en mettant la broche à l'état haut // (mais cela reste toujours une entrée) digitalWrite(buttonPin, HIGH); // Eteint la LED sur l'Arduino digitalWrite(ledPin, LOW); //Lire heure actuelle en millis secondes previousTime = millis(); } void loop() { etat = digitalRead(buttonPin); // Lire heure en milli secondes currentTime=millis(); // Est-ce que le temps est > 10 minutes (600 000 millisecondes) // Faire un rappel pour penser à éteindre et économiser les piles if((currentTime-previousTime)>600000){ // Remettre le temps au temps actuel previousTime=currentTime; // faire clignoter les LEDs + bip tone(SIREN_PIN, BIP); // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, HIGH); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, HIGH); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(200); // Laisse jouer la note pendant 200 ms noTone(SIREN_PIN); //========================================================= tone(SIREN_PIN, BIP2); // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, HIGH); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, HIGH); delay(50); // Laisse jouer la note pendant 50 ms digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(200); // Laisse jouer la note pendant 200 ms noTone(SIREN_PIN); } if(etat == LOW) { previousTime=currentTime; for (boucle=0; boucle<6; boucle++) { // Fait jouer la note Si en utilisant la fonction tone() tone(SIREN_PIN, NOTE_SI); // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, LOW); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(75); // Laisse jouer la note pendant 75 ms // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, LOW); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(375); // Laisse jouer la note pendant 375 ms // =============================================================== // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, HIGH); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(75); // Laisse jouer la note pendant 75 ms // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, HIGH); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(375); // Laisse jouer la note pendant 375 ms // =============================================================== // Fait jouer la note La en utilisant la fonction tone() tone(SIREN_PIN, NOTE_LA); // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, LOW); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(75); // Laisse jouer la note pendant 75 ms // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, HIGH); digitalWrite(ledGauche, LOW); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(375); // Laisse jouer la note pendant 375 ms // =============================================================== // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, HIGH); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(75); // Laisse jouer la note pendant 75 ms // On allume la LED digitalWrite(ledPin, HIGH); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, HIGH); delay(25); // Laisse jouer la note pendant 25 ms // On éteint la LED digitalWrite(ledPin, LOW); digitalWrite(ledDroite, LOW); digitalWrite(ledGauche, LOW); delay(375); // Laisse jouer la note pendant 375 ms } noTone(SIREN_PIN); // Eteint la LED sur l'Arduino digitalWrite(ledPin, LOW); } } |
Les fichiers 3D
La conception a été faite sur Fusion 360. Je vous mets les STL en téléchargement. Si vous voulez les fichiers Fusion pour les modifier, demandez…
Le boîtier de la sirène. C’est le diamètre des gobelets qui fixe les dimensions des côtés. Les gobelets sont collés à l’araldite. La grille d’origine a été détériorée au démontage des supports d’impression, j’ai dessiné une autre grille qui vient se coller par dessus.
Les différents éléments : Le bornier de l’Arduino se visse sur les 2 supports (gris), les 3 MosFET sont collés à l’Araldite sur un support (blanc), les deux plaquettes de LEDs sont collées à l’araldite dans 2 supports (bleu). Une plaque porte sur le dessus le porte piles (vis+écrou) et les 2 HP sur le dessous collés à l’araldite. Une plaque supérieure (noir) ferme le tout.
Quelques photos
Au fond le bornier à vis et l’Arduino, un des modules MosFET est collé sur son support à droite de l’Arduino. Les plaquettes avec les LEDs sont en place mais pas encore collées dans le logement prévu.
Sous la plaque du porte piles les deux HP sont collés à l’araldite. Le module MosFET qui pilote les HP est à gauche des HP. J’ai utilisé de la gaine thermorétractable pour sécuriser les soudures, les résistances…
A l’arrière de la boîte, on trouve les deux commutateurs, A/M en haut et Volume en bas. Le gobelet est collé dans son support à l’araldite.
La boîte prête à être fermée. Les piles sont en place, les derniers tests sont bons !
Et sur la camion de pompiers
Le bouton poussoir et son support imprimé en 3D
Conclusion
Un projet sympa à réaliser, en plus pour un gamin ravi d’avoir une sirène de pompier ET un gyrophare. C’est aussi une petite application de l’Arduino Nano qui peut permettre de se lancer sur une réalisation pas trop complexe. La boîte peut très bien être une boîte de récup ou un boîtier en bois trouvé dans un magasin de décoration pas cher…
Matériel
Les liens sont affiliés
- Arduino Nano + bornier à vis
- 3 modules MOSFET PWM
- 2 haut-parleurs 8Ω/2W
- 6 LEDs Bleues
- Résistances de 100 Ω
- 2 inverseurs à glissière
Bonjour François,
C’est toujours avec autant de plaisir que je lis ce genre de réalisation à la fois didactique et amusante.
En voyant ce genre de réalisation, je me demande si ça ne vous intéresserai pas de publier des articles de temps à autre dans le magazine Hackable. Ce genre d’article rentrant parfaitement dans la philosophie du magazine.
Bonjour
merci pour le retour
oh pourquoi pas, je publie de temps en temps dans Programmez et MagPi français 😉
A l’occasion je proposerai ce genre d’article à Denis Bodor
cdt
francois
Merci pour le schémas… c’est un bon mini projet et le résultat est beau.
=> lien publicitaire supprimé <=
Bonjour
Sur le boîtier sirène il manque les pattes pour fixer le couvercle supérieur
Bonjour
oups désolé le fichier avec les pattes est ici : https://www.framboise314.fr/wp-content/uploads/2022/12/Boitier-Sirene.zip
merci pour l info
si vous voulez les fichiers fusion 360 dites moi
cdt
francois
Bjr
Pour les fichiers Fusion 360 oui avec plaisir
Merci
Bonjour,
merci pour ce beau projet. 🙂
Serait-il possible d’avoir les fichiers fusion360 svp, si vous les avez encore en votre possession ?
Je vous remercie
Simon
Bonjour Simon
je vous les ai envoyés en direct
cdt
francois