Projet IMA3 P4, 2016/2017, TD1

De Wiki d'activités IMA
Révision datée du 26 mars 2017 à 08:35 par Qboens (discussion | contributions) (Réseau et développement web)

Projet IMA3-SC 2016/2017 : Caméra connectée

Cahier des charges

Description du système

Le système envisagé est une caméra de bureau connectée. Cette caméra aura deux modes de fonctionnement :

  • actif : le flux vidéo est transmis en direct sur l'application web. Un pilotage de la caméra est envisagé, deux servomoteurs permettraient d'orienter la caméra selon deux axes depuis l'application web.
  • passif/sécurité : le flux vidéo n'est plus transmis, mais une fonction de détection de mouvement est activée qui permet le retour au mode actif en notifiant la détection sur l'application web.

Une LED sera ajoutée pour signaler le mode de fonctionnement en cours.

Le matériel

Une caméra (voir si des pilotes sont nécessaires)

Deux servomoteurs

Un support reliant les moteurs à la caméra

Une LED

Séance 1

Partie électronique

La première étape dans la réalisation de notre projet fut le contrôle des servomoteurs. Pour cela, nous avons commencé par analyser le signal type envoyé aux servomoteurs afin de pouvoir reproduire celui-ci à partir d'un FPGA.

Afin de capter ce signal, nous avons commandé le servomoteur à l'aide d'une Arduino. Puis nous avons relié le pin de sortie de l'Arduino à un oscilloscope.

Nous avons visualisé le signal suivant:

  • image oscillo et montage *

On remarque que la période ne change pas (20ms), cependant, l'intervalle de temps ΔT durant lequel le signal reste à l'état haut (5V) change par rapport à la commande d'angle du moteur.

ΔT =

  • 0.6ms pour 0°
  • 1.5ms pour 90°

On a ensuite cherché à recréer le signal avec la NanoBoard, commandé via Altium. Afin de créer un rapport cyclique dans le signal de commande du moteur, nous avons décidé d'utiliser le principe de la MLI intersective (PWM en anglais).

La MLI consiste à restreindre la durée ΔT via la comparaison entre un mot de 8 bits (donné par l'utilisateur), et un autre mot de 8 bits, sortant d'un compteur relié à une horloge interne de la NanoBoard.

  • image schéma Altium *

La prochaine séance consistera à fixer le pas du moteur, et à adapter la fréquence et la taille des mots du circuit Altium en conséquence.


Partie informatique

La partie informatique se découpe grossièrement en deux parties :

  • Une partie réseau et développement web
  • Une partie acquisition et analyse d'image et communication Raspberry/Arduino

Réseau et développement web

L'objectif de cette première séance était de rechercher les fonctions HTML, qui nous permettrait d'afficher en streaming les images de notre caméra, mais aussi de contrôler la direction de celle ci.

Voici un aperçu de ce à quoi pourrait ressembler notre interface :

Fichier:C/Utilisateurs/qboens/Documents/Capture1.jpg

Acquisition et communication

Lors de cette séance, le gros du travail effectué a été réalisé sur Raspberry.
Il a d'abord fallu réinstaller raspibian, puisque la version installée de base sur la carte était assez modifiée par rapport à l'originale. (Programmes et bibliothèques nombreuses à manquer).
Grâce à l'utilitaire NOOB pré-installé sur la carte cela a été facilement réalisé.

Ensuite, il a fallu rechercher un programme ou une bibliothèque permettant l'acquisition des images.
Notre caméra étant une PiCaméra, il a d'abord semblé logique de choisir la bibliothèque PiCamera, que nous aurions pu utiliser en Python.
Mais après des recherches plus approfondies, le choix de Motion s'est imposé, puisque ses nombreuses fonctionnalités correspondent à nos attentes. (stream et détection de mouvement par cadran)

Cependant il s'est avéré que la dernière version de Motion ne permet pas d'utiliser la PiCamera, qui n'est pas recconue comme /dev/video0. Il a donc fallu rechercher une solution pour contourner le problème.
L'utilitaire motion-mmal permet d'utiliser motion avec la PiCamera, il a donc été installé sur le Raspberry.
Ensuite il a fallu modifier le fichier de configuration de motion-mmal pour l'adapter à nos besoins. (/etc/motion.conf pour motion-mmal et non /etc/motion/motion.conf pour la version d'origine de motion)
Nous avons pu obtenir en fin de séance un stream accessible sur le réseau local à l'addresse locale du raspberry, sur le port 8081.

L'objectif pour la séance prochaine sera de faire communiquer l'arduino et le raspberry Pi.

--Thubert 23 mars 2017 à 22:40 (CET)

Séance 2

Partie électronique

Partie informatique

Séance 3

Partie électronique

Partie informatique

Séance supplémentaire 1

Partie électronique

Partie informatique

Conclusion