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.
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 :
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 :
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:
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?
Bonjour,bonsoir,
Je suis super intéressé par votre projet.
Mais j’ai quand même trois petites questions
1.je comprend pas trop le but de résistance de pulldown.
2.j’ai un soucis quand je compil mon programme sous geany il me dit « compilé avec succès » alors que je ne sais pas l’ouvrir.
et comme jamais deux sans trois, quel programme utilisez vous pour programmer en c?
merci d’avance
Tom
Bonsoir,
1. La resistance de pulldown sert à rerouter le signal vers la masse. En clair, si elle n’était pas présente et qu’on applique un niveau logique 1 (3V) alors au moment ou l’on débrancherai le circuit le niveau resterai à l’état logique 1 (3V). Avec une resistance de pulldown, le niveau logique déscend à 0 puisque le courant peut partir à la masse.
2. Pour compilé sur un raspberry PI le plus simple et d’envoyer le code source dessus et de le compiler en utilisant gcc directement sur le raspberry pi en utilisant une session distante. Une fois cela effectué, il ne reste plus qu’à le lancer avec ./nom_du_programme
3. Personellement j’utilise VIM, il est posssible de l’installer directement sur le raspberry pi avec un :
$ sudo apt-get install vim
Pour raspian et pour arch linux il y a l’équivalent avec yaourt.
Wouaawww merci pour les réponses si rapide et précise 🙂
bonne soirée
hello 🙂
j’ai un détecteur de mouvement (pir) qui provient d’une alarme je ne l’ai jamais utilisé. pensé vous que c’est possible de le raccorder ? si oui savez vous comment dois je le connecter ?
merci
Bonsoir,
Il est en effet possible de le connecter. Si celui provient d’une alarme, peut être que le niveau de tension est différent de 3V. Si il supporte le 3V, il est alors possible de l’utiliser directement en le raccordant aux GPIO du raspberry pi.
Généralement ce genre de capteur à :
– Une entrée d’alimentation à relier au 3V du raspberry
– Une masse à relier à la masse du raspberry
– Une sortie, à relier à un GPIO, cette sortie est à l’état bas (0V) s’il n’y a pas de mouvement, et à l’état haut s’il y a mouvement (3V)
donc si je vous comprend bien le raccordement est le même excepté le raccordement a la masse en supplément. et du coup question programmation ca reste identique 🙂
merci de me confirmer cela 🙂
merci d’avance
Bonjour,
Si on regarde celui ci :
Capteur PIR
On voit qu’il y a une masse un V+ (l’alimentation) et une sortie O/P, qui est la sortie indiquant le déclanchement du capteur.
Du point de vue de la programmation, le code est équivalent à celui proposé dans cette article.
Cependant, dans le modèle proposé ici, c’est une alimentation 5V, il faut donc pour celui ci raccorder l’alimentation à une sortie 5V du raspberry et prévoir de baisser la tension. Pour cela, un simple diviseur de tension suffit : Pont diviseur de tension
Bonjour,
Je cherches a mettre en place un système de surveillance mais pour une maison entière, je voulais savoir si vous aviez étudier le nombre limite de capteur par rapspberry.
Merci d’avance
Le nombre limite est une question très vaste.
De manière simpliste, on peut répondre qu’il est égal au nombre de GPIO disponnibles en entrée (15).
Cependant, avec des montages hardwares il est possible d’augmenter ce nombre à l’infini.
On pourrait faire un montage qui couperai le courant, dès qu’une porte s’ouvre, ou qu’un capteur PIR détecte un mouvement.
Il n’y aurait alors besoins que d’un seul GPIO pour autant de capteur que l’on souhaite. Avec un montage comme celui l’information sur la provenance de l’intrusion serait perdu.
Bonjour,
Niveau hardware tu as pris quoi comme capteur, depuis un moment je cherche à faire la même chose que toi mais je bloque au niveau du hardware du capteur.
Bonjour,
C’est un capteur que nous avions récupéré sur un projet école. Sinon j’ai trouvé ça sur la toile qui devrait le faire : http://www.eclats-antivols.fr/contact-magnetique-capteur-nf-saillie_SC10N_itm_french.html.
Dans le pire des cas, si tu as un revendeur d’électronique préféré il doit avoir ça dans ses stocks.
Bonjour,
Comment peut on faire pour qu’en cas d’ouverture de la porte on reçoive un sms sur téléphone portable ?
Merci
Pour envoyer un SMS il faut une connexion GSM. Le moyen le plus simple est d’avoir une carte SIM avec dongle GSM et de suivre ce tutorial : RaspianSMS
Hello,
Savez-vous s’il est possible d’utiliser des capteur volumétriques avec cette solution ?
Merci
Bien sur, nous avons réaliser une installation similaire en utilisant un capteur PIR comme celui ci.
Les branchements sont similaires.
Bonjour à tous, je rencontre un problème avec mon capteur. Il génère toujours des alarmes. Prière de m’aider à résoudre ce problème.
Il est difficile de répondre à la question sans avoir d’avantage de détails. Ce genre d’erreurs provient généralement d’un capteur défectueux ou d’un fil mal branché.
Bonjour
étant nul en électronique,pouvez vous me dire ou brancher la résistance et quel doit étre sa valeur?Aije bien compris?
N’ayant jamais programmer en c,j’édite un fichier que je nomme input.c,je colle le texte ,j’enregistre je quitte et je compile en lançant la commande:
gcc input.c -l rt -l bcm2835 -o input
C’est bien ça?
Faut il rendre le fichier exécutable comme on le ferais avec un script en basch avec par exemple un chmod?
Ensuite si je veux lancer une action en fonction de l’etat du capteur,je dois recréer un script en bash ou continuer en c?
je sais c’est des questions un peu bébéte,mais je voudrais etre sur avant de me lancer
D’avance merci.
Bonjour,
c’est la ligne suivante qui branche la résistance :
// avec une résistance de pull down
bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_DOWN);
Celle ci est intégrée dans les Rpi, il n’y a donc rien de particlier à faire.
Pour lancer une action en C, regarde du côté de la fonction system().
Excellent tuto tout est claire sauf la partie de L’envoi par mail et l’interface graphique je souhaite plus de détaille la dessous
merci d’avance
Salut !
J’ai trouver, un projet similaire au tien, mais sans la résistance pull up : https://www.richlynch.com/2013/07/27/pi_garage_alert_1/ d’après mes recherches, il existe déjà ce genre de résistance mais dans le raspberry.. suffit donc de l’activer? en tous cas, dit moi quoi, car j’y connais rien et je suis bloquer :k
Bonjour,
En effet, la résistance est déjà présente dans le raspberry. Il faut cependant lui indiqué de la branché. C’est ce qui est fait avec la ligne de code suivante :
// avec une résistance de pull down
bcm2835_gpio_set_pud(PIN, BCM2835_GPIO_PUD_DOWN);
Bonjour
Super le tuto !!!!!!
Par contre pouvez vous nous expliquer sur l’interface web svp?
Merci par avance
C’est une simple interface qui permet d’afficher les photos d’un dossier. Vous pouvez même faire plus simple avec un simple serveur web et un fichier .htaccess.
Salut je voudrais commencer le projet mais j’ai quelque questions.
Sur les photo je vois un petit truc mais c’est quoi ? Il le faut obligatoirement ? Ou il suffit de relier directement les 2 fils du contacteur magnétique ?
Merci
Bonjour,
Il s’agit simplement d’un domino pour pouvoir monter/démonter le capteur. Vous pouvez en effet relier directement les 2 fils du contacteurs.