Introduction

Ce projet consiste à concevoir une sirène d’alarme à l’aide d’une carte Arduino, d’un capteur de son et d’un buzzer. L’objectif principal est de détecter un bruit dépassant un certain seuil et de déclencher automatiquement une alarme sonore afin de signaler un événement anormal, comme un choc, un claquement ou une intrusion.

Le capteur de son est utilisé pour capter les vibrations acoustiques présentes dans l’environnement. Il transforme les ondes sonores en un signal électrique que l’Arduino peut analyser. Lorsque le niveau sonore détecté dépasse un seuil prédéfini, cela signifie qu’un bruit important a été perçu. L’Arduino traite alors cette information et active le buzzer.

Le buzzer joue le rôle de sirène d’alarme. Une fois déclenché, il émet un signal sonore fort et continu (ou intermittent selon le programme), permettant d’alerter les personnes à proximité. Ce système est simple à mettre en œuvre, peu coûteux et efficace pour des applications de base en sécurité ou en détection de bruit.

Ce projet permet de mieux comprendre le fonctionnement des entrées et sorties de l’Arduino, l’utilisation d’un capteur analogique, ainsi que la gestion de conditions dans un programme. Il constitue une bonne introduction aux systèmes d’alarme et aux projets de détection automatisée, tout en mettant en pratique les notions fondamentales de l’électronique et de la programmation embarquée.

Schéma du circuit

Programme du circuit

Ce programme permet de réaliser un système d’alarme basé sur un capteur de mouvement PIR. Lorsqu’un mouvement est détecté, une alarme sonore se déclenche à l’aide d’un buzzer, et des messages sont affichés sur le moniteur série. Une LED est également utilisée comme indicateur visuel.

const byte yBroPIR = 7;
const byte yBroLED = 13;
const byte yTempsKalib = 10; // Max 30 secondes
const byte yBroSON = 8; // AJOUT
unsigned long gDebutChrono;
unsigned long gPause = 100; // Max 5000
boolean bOKDetect = true;
boolean bRedemarrerKrono;


void setup(){
Serial.begin(9600);
pinMode(yBroPIR, INPUT);
pinMode(yBroLED, OUTPUT);
pinMode(yBroSON, OUTPUT); // AJOUT
digitalWrite(yBroPIR, LOW);
Serial.println("** Projet GARDIEN. Calibrage du senseur.");
Serial.print("** Que personne ne bouge. On patiente. ");

for(int i = 0; i < yTempsKalib; i++) {
delay(1000);
Serial.print(".");
tone(yBroSON, 440, 200); // AJOUT
}
Serial.println("C'est parti ! ");
delay(50);
}

void loop(){
if(digitalRead(yBroPIR) == LOW) {
if(bRedemarrerKrono) {
gDebutChrono = millis();
bRedemarrerKrono = false;
}
if(!bOKDetect && ( (millis() -
gDebutChrono) > gPause) ) {
bOKDetect = true;
delay(50);
bavarder(1);
}
}
if(digitalRead(yBroPIR) == HIGH) {
if(bOKDetect) {
bavarder(0);
Serial.println("Alarme ! Alarme ! Alarme ! ");
alarmer();
// AJOUT
delay(50);
bOKDetect = false;
}
bRedemarrerKrono = true;
}
}

void bavarder(byte bType) {
if (bType == 0) {
Serial.println("---");
Serial.print("Quelque chose bouge. Instant : ");
Serial.print(millis()/1000);
Serial.println(" secondes");
}
if (bType == 1) {
Serial.print("Le calme est revenu. Instant : ");
Serial.print((millis() - gPause)/1000);
Serial.println(" secondes");
}
}
//// NOUVEAU
void alarmer() {
const int iBasse = 440;
const int iHaute = 2000;
for (int i = iBasse; i < iHaute; i++) {
tone(yBroSON, i);
delay(1);
}
for (int i = iHaute; i > iBasse; i--) {
tone(yBroSON, i);
delay(1);
}
noTone(yBroSON);
}

Explication du programme

const byte yBroPIR = 7;
const byte yBroLED = 13;
const byte yTempsKalib = 10;
const byte yBroSON = 8;
  • yBroPIR : broche reliée au capteur de mouvement PIR.

  • yBroLED : broche de la LED intégrée de l’Arduino.

  • yTempsKalib : durée de calibration du capteur PIR (en secondes).

  • yBroSON : broche utilisée pour le buzzer.

unsigned long gDebutChrono;
unsigned long gPause = 100;
  • gDebutChrono : mémorise le temps de départ pour mesurer une pause.
  • gPause : durée minimale (en millisecondes) avant de réautoriser une nouvelle détection.
boolean bOKDetect = true;
boolean bRedemarrerKrono;
  • bOKDetect : autorise ou bloque une nouvelle détection.

  • bRedemarrerKrono : indique si le chronomètre doit être relancé.

void bavarder(byte bType)
  • Cette fonction affiche des messages sur le moniteur série :

    • bType = 0 : indique qu’un mouvement a été détecté.

    • bType = 1 : indique que le calme est revenu après un certain temps.

    Les messages incluent l’instant (en secondes) depuis le démarrage du programme.

void alarmer()
  • Cette fonction génère une sirène sonore avec le buzzer :

    • la fréquence augmente progressivement de 440 Hz à 2000 Hz,

    • puis redescend à 440 Hz,

    • ce balayage de fréquences crée un effet de sirène,

    • le son s’arrête ensuite avec noTone().