Système d'alarme pour sac à dos avec Arduino et boussole LSM303
Composants et fournitures
| Composant | Quantité | Note |
|---|---|---|
| Arduino UNO | 1 | |
| Adafruit LSM303 – Accéléromètre + Magnétomètre (Boussole) triple axe | 1 | |
| Buzzer piézo fort SparkFun – 3kHz | 1 | |
| Batterie 9V (standard) | 1 | |
| Jack femelle 6.35mm (commuté) | 1 | Optionnel |
| Fiche audio 6.35mm | 1 | Optionnel |
| Fils de connexion Male/Female | 1 | |
| Connecteur 9V vers jack barrel | 1 |
Applications et services en ligne
| Outil |
|---|
| Arduino IDE |
À propos de ce projet
Avez-vous déjà ressenti le besoin d'une alarme pour votre sac à dos ? Vous êtes-vous déjà assis dans un lieu public avec votre sac, craignant qu'on ne le vole ? Si oui, ce projet est pour vous !
En utilisant la boussole/accéléromètre LSM303, ce projet déclenche une alarme quand le sac a été déplacé. Il surveille l'orientation via le magnétomètre, et si un mouvement de plus de 10° est détecté, l'alarme retentit.
Étape 1 : Câbler l'Arduino
Connectez la carte LSM303 à l'Arduino :
- SDA → SDA (A4 sur Uno)
- SCL → SCL (A5 sur Uno)
- VIN → 5V
- GND → GND
Pour plus de détails, consultez le guide Adafruit.
Connectez le buzzer piézo :
- + → Broche 13
- - → GND
Étape 2 : Installer les bibliothèques
- Téléchargez les bibliothèques
Adafruit_LSM303DLHCetAdafruit_Sensorau format ZIP. - Ouvrez l'Arduino IDE (téléchargeable ici si besoin).
- Croquis → Inclure une bibliothèque → Ajouter bibliothèque .ZIP…
- Sélectionnez les fichiers .ZIP téléchargés.
Étape 3 : Programmer l'Arduino
Ouvrez l'IDE Arduino, nouveau fichier, effacez tout, collez le code ci-dessous :
// Inclusion des bibliothèques
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_LSM303.h>
// Sensibilité (seuil en degrés)
const int sens = 10;
// ID unique pour le capteur
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345);
void setup(void) {
// Pour débogage (décommenter si besoin)
// Serial.begin(9600);
// Serial.println("Démarrage...");
// Configuration broche 13 (buzzer)
pinMode(13, OUTPUT);
// Initialisation du capteur
if(!mag.begin()) {
// Problème détection LSM303 – vérifiez connexions
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
while(1); // Boucle infinie
}
// Attente 5 secondes pour positionner le sac
delay(5000);
// Signal de démarrage
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
}
// Fonction lecture capteur (retourne cap 0-359°)
int getDeg(void) {
sensors_event_t event;
mag.getEvent(&event);
float Pi = 3.14159;
// Calcul angle vecteur (y, x)
float heading = int((atan2(event.magnetic.y, event.magnetic.x) * 180) / Pi);
// Normalisation 0-360
if (heading < 0) heading = 360 + heading;
return heading;
}
void loop(void) {
// Lecture orientation initiale
int oldDeg = getDeg();
delay(1000);
// Lecture orientation après 1s
int newDeg = getDeg();
// Détection mouvement > seuil
if (newDeg < (oldDeg - sens) && oldDeg != 0 && newDeg != 0) {
digitalWrite(13, HIGH); // Alarme ON
// Serial.println("Déclenché");
}
else if (newDeg > (oldDeg + sens) && oldDeg != 0 && newDeg != 0) {
digitalWrite(13, HIGH); // Alarme ON
// Serial.println("Déclenché");
}
// Débogage (décommenter si besoin)
// Serial.print("Nouveau:"); Serial.println(newDeg);
// Serial.print("Ancien:"); Serial.println(oldDeg);
// Serial.println();
}
Branchez l'Arduino, compilez et téléversez.
Étape 4 : Test
Si tout est correct, après reset : quelques bips, 3s silence, puis un bip long. Si vous bougez le LSM303, l'alarme se déclenche.
- Trop sensible ? Augmentez
sens(ex: 15-20). - Pas assez sensible ? Diminuez
sens(ex: 5).
Si 2 bips longs avant le délai de 3s : problème de câblage. Vérifiez toutes les connexions.
Si ça ne marche pas :
- Bibliothèques mal nommées ? Supprimez les
#includedu début, puis Croquis → Inclure une bibliothèque → sélectionnezWire,Adafruit LSM303DLHC,Adafruit Unified Sensor. - Champs magnétiques parasites ? Changez de pièce ou sortez.
- Assurez-vous que la carte est à peu près horizontale et parallèle au sol.
Étape 5 : Ajouter une clé d'activation
Le projet fonctionne : branchez une pile 9V sur le jack barrel, installez dans le sac. Mais débrancher/rebrancher pour armer/désarmer est fastidieux. Solution : le jack 6.35mm.
Pourquoi 6.35mm et pas 3.5mm (standard casque) ? Sécurité accrue – moins de risque qu'un passant ait la fiche adaptée. Mais vous pouvez utiliser un interrupteur à clé, un contacteur reed + aimant, RFID, appli smartphone…
Câblez l'interrupteur/clé entre la pile et le jack barrel :
Si vous avez un connecteur barrel à bornier : coupez un fil, rallongez si besoin, insérez l'interrupteur. Moi j'ai mis un simple toggle (peu soucieux de sécurité max), mais soyez créatif !
Étape 6 : Installation dans le sac
Bravo ! Alarme fonctionnelle avec clé. Il ne reste qu'à l'installer :
- Percez un trou pour le buzzer (sortie son non obstruée)
- Percez un trou pour la clé/interrupteur
- Fixez avec colliers de serrage (ou solution plus permanente)
- Assurez-vous que le capteur est ~horizontal et parallèle au sol
Aller plus loin
Cette alarme ne se limite pas aux sacs à dos. Adaptez-la pour une porte, un bocal à cookies, le frigo, ou tout objet à protéger. Les possibilités sont infinies !
Code
Code (Arduino)
Code Arduino complet :
// Inclusion des bibliothèques
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_LSM303.h>
// Sensibilité
const int sens = 10;
// ID unique capteur
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345);
void setup(void) {
// Serial.begin(9600);
// Serial.println("Starting...");
pinMode(13, OUTPUT);
if(!mag.begin()) {
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
while(1);
}
delay(5000);
digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW);
}
int getDeg(void) {
sensors_event_t event;
mag.getEvent(&event);
float Pi = 3.14159;
float heading = int((atan2(event.magnetic.y, event.magnetic.x) * 180) / Pi);
if (heading < 0) heading = 360 + heading;
return heading;
}
void loop(void) {
int oldDeg = getDeg();
delay(1000);
int newDeg = getDeg();
if (newDeg < (oldDeg - sens) && oldDeg != 0 && newDeg != 0) {
digitalWrite(13, HIGH);
// Serial.println("Triggered");
}
else if (newDeg > (oldDeg + sens) && oldDeg != 0 && newDeg != 0) {
digitalWrite(13, HIGH);
// Serial.println("Triggered");
}
// Serial.print("New:"); Serial.println(newDeg);
// Serial.print("Old:"); Serial.println(oldDeg);
// Serial.println();
}
Schématiques
Vers la boussole :
Bleu – SDA
Jaune – SCL
Noir – GND
Rouge – VIN
Processus de fabrication
- Conception de systèmes de commande à sécurité intrinsèque (fail-safe) pour la sûreté et la fiabilité
- Surveillance domestique sécurisée avec Home Assistant sur Raspberry Pi : Mouvement, Alarme et Capture Vidéo
- Construire une alarme à eau headless Raspberry Pi 2 avec Adafruit T‑Cobbler Plus
- Système d'alarme détection mouvement avec Java et Reactive Blocks – Déploiement sur Raspberry Pi et envoi SMS
- Robot réveil roulant : Système mobile intelligent piloté par Raspberry Pi et Google Calendar
- Alerte Soif Plante Intelligente – Capteur DIY pour une Hydratation Optimale
- SERENA : Système d'Alarme Arduino Mega 2560 Personnalisé avec Écran Tactile TFT LCD
- Évaluer la sécurité d'un système d'alarme avec Arduino et modules RF 433 MHz
- Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO