Alarme de maison avec un raspberry pi

raspberry-ban

J’ai un ami qui souhaite vérifier que personne n’entre chez lui quand il n’est pas là. Ceci peut être intéressant pour Dexter mais aussi en cas de propriétaire invasif. Afin de contrôler les allers et venues dans son appartement, nous avons eu l’idée de prendre en photo avec une webcam toutes les personnes qui passent la porte. Les photos pourront ensuite être envoyées par mail ou bien sur une interface web.

Mise en place d’un système de sécurité

Un système de sécurité est composé de capteurs. L’ensemble des capteurs permet de détecter une présence. On va retrouver des capteurs sur les portes et fenêtres qui permettent de savoir si celles ci sont ouvertes. On peut aussi trouver des capteurs de mouvement. Dans notre cas, nous souhaitons utiliser un capteur permettant de détecter l’ouverture d’une porte. Celui ci a été récupéré dans le vieux carton d’un projet de technologie réalisé en 4ième.

capteur

Ce capteur va alors être relié à un GPIO du raspberry pi. Il faudra ensuite prendre une photographie en direction de la porte d’entrée sur laquelle le capteur sera placé. On aurait tout aussi bien pu activer un buzzer.

Partie hardware

le capteur fonctionne avec un commun et une sortie normalement ouvert et normalement fermé. L’idée est de relier ce capteur à un GPIO du raspberry pi afin que l’on détecte sur le GPIO :

  • Un état haut (3.3V) si la porte est fermé
  • Un état bas (0V) si la porte est ouverte

Nous obtenons le câblage suivant :

cablage

Afin de s’assurer que la sortie est à l’état bas lorsque la porte est ouverte nous utiliserons une résistance de pulldown.
pour réaliser ce montage nous utilisons un connecteur au pas de 2.54 ainsi qu’un petit domino et nous obtenons le montage suivant, qui se fixe simplement sur le raspberry pi :

pontRasp

Il faut maintenant détecter le niveau de la pin GPIO22. Pour cela nous allons utiliser, une librairie C conçue pour piloter nos GPIO.

Librairie C pour le BCM 2835

La librairie que nous utilisons est disponible ici : librairie

Sur le raspberry pi, ouvrez un shell :

$ wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.17.tar.gz
$ tar zxvf bcm2835-1.17.tar.gz
$ cd bcm2835-1.17
$ ./configure
$ make
$ sudo make check
$ sudo make install

La librairie est maintenant installée.
Les noms des GPIO sont ceux décrit en orange dans l’image ci dessus. Il sont nommés de RPI_GPIO_P1_01 à RPI_GPIO_P1_26. Et ils correspondent aux 26 broches de sorties. Cependant, ils ne correspondent pas aux sorties que vous pouvez utiliser via le système de fichier. Le GPIO22 que nous allons utiliser est ainsi appelé RPI_GPIO_P1_15.

Sur le site de la librairie nous trouvons directement un exemple que nous allons réutiliser dans notre projet. Si vous souhaitez repartir de la source originale, elle se trouve ici : source
Pour détecter le niveau de sortie du GPIO22, nous utilisons le code C suivant:

//input.c
#include <bcm2835.h>
#include <stdio.h>
// Input sur le GPIO22 qui est nommé 15 dans le système de la librairie
#define PIN RPI_GPIO_P1_15
 
int main(int argc, char ** argv) {
    if (!bcm2835_init()) {
        return 1;
   }
    // Fixe le GPIO en entrée
    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);
    //  avec une résistance de pull down
    bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_DOWN);
 
    while (1) {
        // lecture du niveau d'entrée
        uint8_t value = bcm2835_gpio_lev(PIN);
        printf("lecture GPIO22: %d\n", value);
 
        // attendre 2s
        delay(2000);
    }
    //Un brin de toilette
    bcm2835_close();
    return 0;
}

Compilons et lançons le programme et amusons nous à déplacer le capteur (équivalent à ouvrir et fermer la porte) :

$ gcc input.c -l rt -l bcm2835 -o input
$ sudo ./input
lecture GPIO22: 1
lecture GPIO22: 1
lecture GPIO22: 0
lecture GPIO22: 0
lecture GPIO22: 1

Photographie avec la webcam

Afin de photographier l’entrée, nous allons réutiliser la librairie openCV. Celle ci avez déjà été utilisé à Halloween pour réaliser un capteur de mouvement avec une webcam. Je vous invite à lire l’article suivant pour l’installation et la programmation : Halloween project

Pour ce qui est de l’installation, elle est faite directement depuis les dépôts.

$ sudo apt-get install libcv-dev libcvaux-dev libhighgui-dev

Le code complet est disponible en annexe.

Envoi par mail et interface graphique

L’envoi par mail et l’interface graphique sont codés en php. Les appels entre les deux langages se font soit via la commande system, soit via des pipes nommées.

Et l’interface web donne:

screenShot

Conclusion

Vous pouvez remplacer le capteur par un détecteur de mouvement. N’hésitez pas à nous contacter si vous souhaitez en savoir d’avantage ou avez d’autres idées saugrenues.

It’s oversimple isn’t it?