SRS - Tachymètre

=  Introduction=

Objectif du projet

 * L’objectif du projet est de prendre en main les outils de la plateforme Cohorte pour développer un application web qui affiche l’historique des mesures effectuées par un capteur de présence et stockées sur un serveur.
 * Le cœur du projet est d’arriver à transmettre et à traiter l’information des mesures sur le capteur jusqu’à l’affichage des données élaborées sur l’interface utilisateur. Cela comprend toutes les étapes de traitement des données comme le passage d’une mesure de fréquence à une mesure de vitesse (effet Doppler), ainsi que les étapes d’analyse des données comme l’extraction des mesures utiles parmi le bruit fréquentiel.

Visée du produit

 * L’implémentation du capteur sur le Raspberry Pi et le traitement de ces mesures peuvent être intégrés à n’importe quelle autre application nécessitant la détection de mouvements ou de passages devant le capteur. Ces étapes de traitement et d’envoi ou de stockage doivent être autonomes pour qu’un nombre quelconque de capteurs puissent faire partie de l’application.
 * Le stockage sur le serveur et l’interface doivent être conçus pour être évolutifs. En effet, lors de notre projet nous ne disposons que d’un capteur, mais l’application à développer doit pouvoir interroger et afficher les données de plusieurs capteurs, qui seront reconnus par un identifiant unique, un nom, un propriétaire, des coordonnées GPS, etc… De plus, une interface doit être implémentée sur le Raspberry pour que le propriétaire puisse définir ces attributs sur le capteur pour qu’il soit recensé avec clarté sur l’interface utilisateur.
 * De cette façon, le système aura la possibilité d’être utilisé par des clients ou d’autres entreprises.

Définitions, acronymes et abréviations

 * Raspberry Pi : Ordinateur monocarte (processeur ARM) à taille réduite, compatible avec de nombreux périphériques (clavier, souris, …). Le Raspberry Pi peut héberger un programme, offrant ainsi de nombreuses possibilité d’utilisation. Pour notre projet, le Raspberry nous sert de support pour le capteur. De plus, il héberge le code qui va traiter les mesures et les envoyer au serveur.


 * Arduino : Carte comportant un microcontrôleur programmable pour produire et analyser des signaux électriques. Pour notre projet, l'Arduino nous sert pour obtenir les mesures du capteur HB100. Une fois les valeurs de tension et de fréquences transformées en distance et vitesse, l'Arduino envoie les données au Raspberry par liaison série.


 * Processeur ARM : processeurs à faible consommation, dotés d'une architecture plus simple que les autres familles de processeurs. Les processeurs ARM sont dominants dans le domaine de l'informatique embarquée comme les téléphones mobiles.


 * HB100 : Capteur de proximité qui renvoie une mesure de tension et une mesure de fréquence. La mesure de tension permet d'obtenir la distance entre le mobile et le capteur, tandis que la fréquence permet de calculer la vitesse du mobile grâce à l'effet Doppler (voir ci-dessous). La courbe de distance permet d'obtenir le sens de circulation du mobile, selon si la variation est croissante ou décroissante.


 * Cohorte : plate-forme de développement développé par Isandlatech qui fournit des outils pour créer des applications réparties sur plusieurs systèmes indépendants, y compris au niveau du langage de programmation. Il s’agit d’outils orientés composant et services, ce qui permet une importante flexibilité et une application dont les différents isolats sont indépendants.


 * SQLite : Moteur de base de données relationnelles développé en C. Cette bibliothèque permet l'interrogation des tables via des requêtes dans le langage SQL. L'interêt pour ce projet est que notre base de données ne contient qu'une table, et que SQLite suffit amplement pour l'interrogation du serveur par l'application web.


 * Effet Doppler : Phénomène physique qui consiste en un décalage de le fréquence des ondes entre l'émetteur et le récepteur lorsque la distance entre ces deux points varie dans le temps. Ce phénomène permet de calculer la vitesse de déplacement d'un mobile grâce à une relation mathématique entre la fréquence mesurée et l'angle entre l'axe de mesure du capteur et le déplacement du mobile.


 * Données brutes : données acquises par le capteur sur le Raspberry Pi. Il s'agit de la tension, de la fréquence, et du timestamp de l'échantillon.


 * Données élaborées : données obtenues par le traitement des données brutes. Ce traitement consiste en l'obtention de la vitesse et du sens de déplacement de l'objet. Il s'agit d'une mesure contenant la vitesse, le sens, et la date.


 * Données synthétiques : données représentant une analyse des données élaborées. Il peut s'agir d'une répartition du nombre de passage dans le mois ou dans une plage d'horaires, ou bien de statistiques sur les vitesses (vitesse maximum, moyenne par jour) par plage horaire.


 * Timestamp : date, heure minute et seconde à laquelle la mesure est faite.

=  Description du projet=

Perspective du produit

 * Le produit a pour but d’être un détecteur de présence dont les mesures sont sauvegardées dans le but d’une interrogation par une interface utilisateur. On peut alors imaginer de nombreuses utilisations comme de la surveillance domestique (radar lié avec une alarme), ou tout simplement un appareil de mesure de trafic. Les données pouvant être triées et analysées (moyennes, histogramme), il y a une possibilité d’étude poussée de tronçon routier.
 * Dans une version plus aboutie du produit, on pourrait introduire un système d’authentification. Cela permettrait d’implémenter des groupes d’utilisateurs avec des permissions d’accès différentes selon les groupes.

Fonctionnalités

 * Le capteur permet d’avoir une mesure de proximité et de vitesse. Le but est donc de mesurer la vitesse des objets passant devant le capteur (piétons, cyclistes, voiture, …) et de dater cette mesure. Les données sont stockées sur un serveur qui va permettre l’utilisation d’une interface graphique. Cette interface utilisateur affiche l’historique des mesures, avec diverses actions comme la sélection d’une plage de dates pour un affichage plus ciblé, ou encore la présentation des données sous la forme de graphiques pour permettre une analyse plus pointue du trafic.

Contraintes générales

 * Les contraintes de ce projet sont l’utilisation de Cohorte et du Raspberry Pi comme support pour le capteur.
 * Il n’y a pas de contraintes pour le langage de programmation, car grâce à Cohorte, les différents composants peuvent être développés dans différents langage : Python ou Java pour le Raspberry, Java et SQLite pour le stockage sur le serveur, et HTML/CSS/Javascript pour l’interface web.

Assumptions and dependencies
=  Specific requirements, covering functional, non-functional and interface requirements=

Exigences fonctionnelles
Fonction d’acquisitions des données
 * Récupération des valeurs physiques : Vitesse et proximité Isolation et interprétation des mesures : Seuil (prévoir un buffer si le traitement est trop long).
 * Propagation des données par consommation d’un service fourni par un composant distant.

Fonction d’agrégation
 * Stockage de la donnée (service write).

Fonction interface utilisateur
 * Composants de récupération et de présentation des données (voir cas d'usage).

Exigences non-fonctionnelles
Qualité du réseau
 * Une solution de stockage des mesures dans le cache du Raspberry permet de prévenir la perte des données en cas d'indisponibilité du réseau.

Environnement du capteur
 * Il est nécessaire de traiter les mesures pour ne pas tenir compte du bruit dû à l'environnement.

Exigences de l’interface
Ergonomie
 * Compatibilité multi-support (différents navigateurs, version mobile).
 * Interactions (sélection de plage de dates, affichage de graphiques, …).
 * Nécessité de transparence pour l'utilisateur.

= Cas d'usage =

Interaction de l’utilisateur avec l’interface web

 * - L’utilisateur entre sur le site web et s’authentifie avec un login et un mot de passe
 * - L’utilisateur peut choisir de cliquer sur “tout” pour afficher l’ensemble des données de tous les capteurs (triées par date décroissante)
 * -la date / vitesse moyenne / sens / capteur


 * - L’utilisateur choisit un capteur parmi la liste des capteurs installés (vert : connecté, rouge : déconnecté) :
 * -onglet données élaborées :
 * -le système affiche les données élaborées dans un tableau (triées par date décroissante)
 * - la date (Heure / Minute / Jour / Mois / Année) / vitesse moyenne (km/h) / sens (sens du capteur, contresens du capteur)
 * - L’utilisateur peut cliquer sur les liens de pagination pour naviguer dans les données élaborées
 * - L’utilisateur peut filtrer les données affichées en fonction des paramètres suivants :
 * - entre deux dates d1 et d2
 * - une vitesse max / min.
 * - onglet données synthétisées :
 * - L'utilisateur peut obtenir des analyses paramétrées des données élaborées en choisissant l'option "historique" en fontion de :
 * - un type de donnée :
 * - le nombre de passages
 * - la vitesse moyenne (km/h)
 * - la vitesse maximum (km/h)
 * - une plage de date :
 * - une date de début (JJ/MM/AAAA)
 * - une date de fin (JJ/MM/AAAA)
 * - une plage horaire :
 * - heure de début (HH/MM)
 * - heure de fin (HH/MM)
 * - L'utilisateur peut également obtenir une répartition des vitesses de passage en choisissant l'option "répartition" en fonction de :
 * - onglet administrateur :
 * - le système affiche un tableau des événements relatifs au capteur sélectionné (trié par date décroissante) :
 * - une plage de date :
 * - une date de début (JJ/MM/AAAA)
 * - une date de fin (JJ/MM/AAAA)
 * - une plage horaire :
 * - heure de début (HH/MM)
 * - heure de fin (HH/MM)
 * - la date (Heure / Minute / Jour / Mois / Année)
 * - l’état (connecté, déconnecté)
 * - L’utilisateur peut se déconnecter

Interaction du technicien avec le capteur

 * - Le technicien branche le capteur au réseau internet du client
 * - Le technicien démarre le capteur

Interaction du technicien avec l’interface d’administration du capteur

 * - Le technicien ouvre la page d’administration du capteur
 * - Le technicien remplit un formulaire :
 * - L’identifiant du capteur
 * - Coordonnées GPS du capteur (longitude latitude, altitude (décimales))

= Annexes = Read first:
 * http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Presentations/PPTX/Ch4.pptx
 * http://en.wikipedia.org/wiki/Software_requirements_specification
 * IEEE Recommended Practice for Software Requirements Specifications IEEE Std 830-1998

Cohorte
 * cohorte.github.io

Microwave Motion Sensor
 * https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/HB100_Microwave_Sensor_Module_Datasheet.pdf
 * https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/HB100_Microwave_Sensor_Application_Note.pdf

Making the electronics for $7 USD doppler motion sensor
 * http://ch.linkedin.com/in/mathieustephan
 * http://www.limpkin.fr/index.php?post/2013/08/09/Making-the-electronics-for-a-%247-USD-doppler-motion-sensor
 * https://docs.google.com/document/d/1CVdH3UVTROaJ4_Bgsx_-hyg5_LvoNxYiB13pPRN9gzU/edit

Raspberry Frequency measurment
 * http://raspberrypi.stackexchange.com/questions/26166/count-rpm-frequency-pulses-on-gpio-ports-maximum
 * http://blog.durablescope.com/2015/03/build-speed-camera-and-traffic-logger.html
 * http://abyz.co.uk/rpi/pigpio/examples.html#C_code
 * https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=97795
 * http://raspberrypi.stackexchange.com/questions/24812/measuring-frequency-via-gpio
 * http://hacker.instanet.net/forums/viewtopic.php?f=4&t=104