Projet IMA3 P4, 2016/2017, TD1

De Wiki d'activités IMA
Révision datée du 28 mars 2017 à 08:04 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. Il sera également donné à l'utilisateur la possibilité de mettre en pause la vidéo, sans pour autant interrompre le flux de données.

Pour l'instant il n'est pas encore possible d'afficher en streaming notre vidéo. HTML offre un large choix de méthodes permettant d'afficher du contenu vidéo, celles ci dépendant de la source mais aussi du type d'action souhaité. Notre affichage devra donc être adapté au format envoyé par la caméra.


Nos boutons ne sont pas encore reliés aux moteurs contrôlant la caméra, mais une future implantation de cette fonctionnalité est prévue.

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

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

Réseau et développement web

Durant cette séance notre interface web a été réorganisée afin d'optimiser le contrôle de la caméra. En effet dans notre version précédente les boutons étaient placés autour de la vidéo, ce qui ne permettait pas de cliquer de l'un à l'autre très rapidement. Ils ont donc été rassemblés sur la droite de l'écran, afin de répondre à ce soucis de dynamisme.

Séance 3

Partie électronique

Partie informatique

Séance supplémentaire 1

Partie électronique

Partie informatique

Conclusion