Raspberry Pi + Arduino : Systeme de Surveillance Camera

0

📷 Raspberry Pi + Arduino : Système de Surveillance par Caméra avec Détection de Mouvement

Combinez la puissance du Raspberry Pi (caméra + Python) avec l’Arduino (capteur PIR) pour créer un système de surveillance intelligent ! L’Arduino détecte le mouvement et alerte le Pi qui capture automatiquement des photos. Ce tutoriel de didactico.tn vous montre comment faire communiquer ces deux plateformes via le port série.

🧰 Matériel Nécessaire

Raspberry Pi Zero

Mini ordinateur avec port caméra CSI

Voir sur didactico.tn →

Caméra 5MP pour Pi Zero

Module caméra OV5647 avec nappe flexible

Voir sur didactico.tn →

Carte Arduino Uno R3

Microcontrôleur pour les capteurs PIR

Voir sur didactico.tn →

Autres composants

  • Capteur PIR HC-SR501
  • Câble USB type B (Arduino → Pi)
  • Carte MicroSD 16Go+ avec Raspberry Pi OS
  • Alimentation 5V 2.5A pour le Pi
  • LED + résistance 220Ω (optionnel)

🔌 Architecture du Système

📐 DIAGRAMME DU SYSTÈME DE SURVEILLANCE
  ┌─────────────────────────────────────────────────────────────┐
  │                    SYSTÈME DE SURVEILLANCE                   │
  └─────────────────────────────────────────────────────────────┘

  ┌───────────────────┐    USB Série     ┌────────────────────┐
  │   ARDUINO UNO     │ ══════════════>  │  RASPBERRY PI ZERO │
  │                   │   (9600 bauds)   │                    │
  │  Capteur PIR ─→ D2│                  │  ┌──────────────┐  │
  │  LED alarme ←─ D13│  "MOUVEMENT"     │  │  Caméra 5MP  │  │
  │                   │  ─────────────→  │  │  (CSI port)  │  │
  │  Détecte les      │                  │  └──────────────┘  │
  │  mouvements et    │  "OK"            │                    │
  │  envoie l'alerte  │  <─────────────  │  Python :          │
  │                   │                  │  - picamera2       │
  │                   │                  │  - pyserial        │
  │                   │                  │  - datetime        │
  └───────────────────┘                  └────────────────────┘
          │                                       │
          │  Capteur PIR HC-SR501                  │ Caméra CSI
          │  ┌─────────────┐                      │ ┌──────┐
          └──│  ◉ PIR      │                      └─│ 📷   │
             │  détection  │                        │      │
             │  5m portée  │                        └──────┘
             └─────────────┘

  Flux :
  1. PIR détecte un mouvement → Arduino envoie "MOUVEMENTn"
  2. Pi reçoit via série → Python capture une photo horodatée
  3. Photo sauvegardée dans /home/pi/surveillance/
  4. Pi renvoie "OKn" → Arduino éteint la LED après 5s

🔌 Câblage Arduino + PIR

📐 CÂBLAGE PIR HC-SR501 → ARDUINO UNO
    Capteur PIR HC-SR501              Arduino Uno R3
   ┌──────────────────┐            ┌─────────────────┐
   │  ┌────────────┐  │            │                 │
   │  │  ◉ Lentille│  │            │                 │
   │  │  Fresnel   │  │            │                 │
   │  └────────────┘  │            │                 │
   │                  │            │                 │
   │  VCC  OUT  GND   │            │                 │
   └──┼────┼────┼─────┘            │                 │
      │    │    │                  │                 │
      │    │    └─────────────────→│ GND             │
      │    └──────────────────────→│ D2 (interrupt)  │
      └───────────────────────────→│ 5V              │
                                   │                 │
                                   │ D13 ──[220Ω]──→ LED
                                   │                 │
                                   │ USB ════════════│═→ Raspberry Pi
                                   └─────────────────┘

💻 Code Arduino — Détecteur de Mouvement PIR

📄 surveillance_arduino.ino
// =============================================
// Système de Surveillance — Arduino (Capteurs)
// Communication série avec Raspberry Pi
// Tutoriel didactico.tn
// =============================================

const int brochePIR = 2;     // Sortie du capteur PIR
const int brocheLED = 13;    // LED d'alarme

bool mouvementDetecte = false;
unsigned long dernierMouvement = 0;
const unsigned long DELAI_RELANCE = 5000;  // 5s entre 2 alertes
int compteurAlertes = 0;

void setup() {
  Serial.begin(9600);
  pinMode(brochePIR, INPUT);
  pinMode(brocheLED, OUTPUT);

  Serial.println("SURVEILLANCE_ARDUINO_PRET");

  // Le PIR a besoin de 30-60s pour se calibrer
  Serial.println("CALIBRATION_PIR");
  delay(30000);  // Attendre 30 secondes
  Serial.println("SYSTEME_ACTIF");

void loop() {
  int etatPIR = digitalRead(brochePIR);
  unsigned long maintenant = millis();

  // --- Mouvement détecté ---
  if (etatPIR == HIGH && (maintenant - dernierMouvement > DELAI_RELANCE)) {
    dernierMouvement = maintenant;
    compteurAlertes++;

    // Allumer la LED d'alarme
    digitalWrite(brocheLED, HIGH);

    // Envoyer l'alerte au Raspberry Pi via série
    Serial.print("MOUVEMENT:");
    Serial.println(compteurAlertes);

  // --- Vérifier les commandes du Pi ---
  if (Serial.available()) {
    String commande = Serial.readStringUntil('n');
    commande.trim();

    if (commande == "PHOTO_OK") {
      // Le Pi a pris la photo, éteindre la LED
      digitalWrite(brocheLED, LOW);

    else if (commande == "STATUS") {
      // Le Pi demande l'état
      Serial.print("ALERTES:");
      Serial.print(compteurAlertes);
      Serial.print(":PIR:");
      Serial.println(etatPIR);

delay(100);  // Petit délai pour stabilité

💻 Code Python — Raspberry Pi (Caméra + Série)

📄 surveillance_pi.py — À exécuter sur le Raspberry Pi
#!/usr/bin/env python3
# =============================================
# Système de Surveillance — Raspberry Pi
# Caméra + communication série avec Arduino
# Tutoriel didactico.tn
# =============================================

import serial
import time
import os
from datetime import datetime

# Essayer picamera2 (Raspberry Pi OS Bookworm+)
try:
    from picamera2 import Picamera2
    PICAMERA2 = True
except ImportError:
    print("[AVERTISSEMENT] picamera2 non disponible.")
    print("Installer : sudo apt install python3-picamera2")
    PICAMERA2 = False

# --- Configuration ---
PORT_SERIE = "/dev/ttyACM0"    # Port USB de l'Arduino (ou /dev/ttyUSB0)
VITESSE = 9600                 # Même vitesse que l'Arduino
DOSSIER_PHOTOS = "/home/pi/surveillance"

# Créer le dossier de stockage des photos
os.makedirs(DOSSIER_PHOTOS, exist_ok=True)

def initialiser_camera():
    """Initialiser la caméra Pi avec picamera2."""
    if not PICAMERA2:
        return None

    camera = Picamera2()

    # Configuration pour les captures photo
    config = camera.create_still_configuration(
        main={"size": (2592, 1944)},  # Résolution max 5MP
        lores={"size": (640, 480)},
        display="lores"
    )
    camera.configure(config)
    camera.start()
    time.sleep(2)  # Laisser la caméra s'ajuster

    print("[OK] Caméra 5MP initialisée")
    return camera

def capturer_photo(camera, numero_alerte):
    """Capturer une photo horodatée."""
    horodatage = datetime.now().strftime("%Y%m%d_%H%M%S")
    nom_fichier = f"alerte_{numero_alerte:04d}_{horodatage}.jpg"
    chemin = os.path.join(DOSSIER_PHOTOS, nom_fichier)

    if camera:
        camera.capture_file(chemin)
        taille = os.path.getsize(chemin) // 1024
        print(f"[PHOTO] {nom_fichier} ({taille} Ko)")
    else:
        # Mode simulation sans caméra
        with open(chemin, "w") as f:
            f.write("simulation")
        print(f"[SIMULATION] {nom_fichier}")

    return chemin

def main():
    print("╔═══════════════════════════════════════════╗")
    print("║  Surveillance Pi + Arduino — didactico.tn ║")
    print("╚═══════════════════════════════════════════╝")

    # --- Initialiser la caméra ---
    camera = initialiser_camera()

    # --- Connexion série vers Arduino ---
    print(f"[...] Connexion série : {PORT_SERIE}")
    try:
        arduino = serial.Serial(PORT_SERIE, VITESSE, timeout=1)
        time.sleep(2)  # Attendre le reset Arduino
        print("[OK] Arduino connecté")
    except serial.SerialException as e:
        print(f"[ERREUR] Port série : {e}")
        print("Vérifier : ls /dev/ttyACM* /dev/ttyUSB*")
        return

    print(f"[OK] Photos → {DOSSIER_PHOTOS}")
    print("[...] En attente de mouvements...n")

    photos_total = 0

    try:
        while True:
            # --- Lire les messages de l'Arduino ---
            if arduino.in_waiting > 0:
                ligne = arduino.readline().decode("utf-8").strip()

                if ligne.startswith("MOUVEMENT:"):
                    # Extraire le numéro d'alerte
                    num = ligne.split(":")[1]
                    heure = datetime.now().strftime("%H:%M:%S")

                    print(f"⚠️  [{heure}] MOUVEMENT détecté ! (alerte #{num})")

                    # Capturer la photo
                    chemin = capturer_photo(camera, int(num))
                    photos_total += 1

                    # Confirmer à l'Arduino
                    arduino.write(b"PHOTO_OKn")
                    print(f"    Total photos : {photos_total}n")

                elif ligne.startswith("CALIBRATION"):
                    print("[...] Calibration du capteur PIR (30s)...")

                elif ligne.startswith("SYSTEME_ACTIF"):
                    print("[OK] Système de surveillance ACTIF !n")

                else:
                    print(f"[Arduino] {ligne}")

            time.sleep(0.1)

    except KeyboardInterrupt:
        print(f"n[FIN] Surveillance arrêtée. {photos_total} photos capturées.")
    finally:
        if camera:
            camera.stop()
        arduino.close()

if __name__ == "__main__":
    main()

📦 Installation des dépendances sur le Pi
sudo apt update
sudo apt install python3-picamera2 python3-serial
# Activer la caméra : sudo raspi-config → Interface → Camera → Enable
# Lancer : python3 surveillance_pi.py

📋 Résultat Attendu

📟 TERMINAL RASPBERRY PI
╔═══════════════════════════════════════════╗
║  Surveillance Pi + Arduino — didactico.tn ║
╚═══════════════════════════════════════════╝
[OK] Caméra 5MP initialisée
[...] Connexion série : /dev/ttyACM0
[OK] Arduino connecté
[OK] Photos → /home/pi/surveillance
[...] Calibration du capteur PIR (30s)...
[OK] Système de surveillance ACTIF !

[...] En attente de mouvements...

⚠️  [14:23:15] MOUVEMENT détecté ! (alerte #1)
[PHOTO] alerte_0001_20260405_142315.jpg (1842 Ko)
    Total photos : 1

⚠️  [14:23:47] MOUVEMENT détecté ! (alerte #2)
[PHOTO] alerte_0002_20260405_142347.jpg (1756 Ko)
    Total photos : 2

🔧 Dépannage

Problème Cause probable Solution
Port série non trouvé Mauvais nom de port ou permissions Lister les ports : ls /dev/ttyACM* /dev/ttyUSB*. Ajouter l’utilisateur au groupe dialout : sudo usermod -a -G dialout pi
Caméra non détectée Nappe mal branchée ou caméra non activée Vérifier la nappe (côté bleu vers le connecteur). Activer via sudo raspi-config → Interface → Camera
PIR déclenche sans cesse Sensibilité trop haute ou chaleur ambiante Régler le potentiomètre de sensibilité du HC-SR501 (tourner vers la gauche). Éloigner des sources de chaleur
Photos noires ou floues Caméra pas le temps de s’ajuster ou éclairage faible Augmenter le délai après camera.start(). Ajouter un éclairage LED infrarouge pour la nuit
Arduino se reset quand Pi connecte Le signal DTR de pyserial reset l’Arduino Ajouter arduino.setDTR(False) après l’ouverture du port, ou mettre un condensateur 10µF entre RESET et GND

🚀 Pour Aller Plus Loin

1. Notification Telegram

Envoyez la photo par Telegram dès qu’un mouvement est détecté pour une alerte en temps réel.

Raspberry Pi Zero →

2. Détection IA avec TensorFlow Lite

Ajoutez la reconnaissance d’objets (personne/animal/véhicule) avec un modèle TFLite sur le Pi.

Raspberry Pi Zero →

3. Surveillance Multi-Caméras

Ajoutez plusieurs Arduino/PIR en réseau pour couvrir une maison entière avec un seul Pi central.

Arduino Uno R3 →

❓ Questions Fréquentes

Où acheter un Raspberry Pi avec caméra en Tunisie ?

Le Raspberry Pi Zero et la caméra 5MP sont disponibles sur didactico.tn avec livraison en Tunisie. C’est la combinaison idéale pour les projets de surveillance DIY à petit budget.

Peut-on utiliser ce système de surveillance la nuit en Tunisie ?

Le capteur PIR fonctionne jour et nuit car il détecte la chaleur infrarouge. Pour les photos nocturnes, vous pouvez ajouter des LEDs infrarouges 850nm (invisibles) ou utiliser la caméra NoIR du Raspberry Pi disponible sur didactico.tn.

Quel est le meilleur projet de surveillance Arduino pour les étudiants en Tunisie ?

Ce projet combinant Raspberry Pi + Arduino est idéal pour les PFE et concours en Tunisie. Il couvre la communication série, le traitement d’images, les capteurs PIR et peut être étendu avec du WiFi, de l’IA ou des notifications. Tous les composants sont sur didactico.tn.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *