Balise de suivi de polluant

De Wiki d'activités IMA
Révision datée du 22 février 2015 à 18:36 par Mmorisse (discussion | contributions) (Suivi de l'avancement du Projet)


Cahier des charges

Présentation générale du projet

Contexte

Le suivi des polluants dans les milieux naturels (notamment eaux de surface) est nécessaire afin d'informer les populations et pour aider à la gestion des eaux.

Objectif du projet

Ce projet propose le développement d'une balise autonome permettant le suivi des polluants dans les milieux naturels, en l’occurrence l'eau de surface.

Description du projet

Le suivi de la qualité des eaux de surface (notamment leur teneur en métaux) se fait actuellement soit par prélèvement et analyse en laboratoire (spectroscopie ICP, méthode sensible mais couteuse), soit par prélèvement et analyse par voltammétrie. Cette dernière technique est moins sensible mais nettement plus abordable et simple à mettre en œuvre. Actuellement, l'électrode utilisée est une électrode à base de mercure, ce qui impose des contraintes fortes.

A l'IRCICA, en collaboration avec le LASIR, nous développons des électrodes à base d'or permettant le suivi in situ des polluants.

Ce projet propose de développer une station mobile à faible coût permettant de mettre en œuvre ces électrodes. La balise de suivi sera constituée d'un galvanostat (carte déjà disponible sur Internet) et d'une carte électronique à développer pour gérer le galvanostat, enregistrer les données et les transmettre. Une interface web sera développée afin d’accéder aux données.

En cas de succès, la balise sera déployée dans le lac du Héron pour le suivi des polluants.

Choix techniques : matériel et logiciel

Matériel choisi :

Module Arduino équipé de

  • Shield GSM Arduino [fourni le 28/01/15]
  • Shield GPS Arduino [fourni le 11/02/15]
  • Arduino UNO [fourni le 28/01/15]
  • Galvanostat type "Ardustat" crée par nous-mêmes : [voir avec Alexandre Boé]
    • Convertisseur Numérique Analogique : MAX5250
    • Potentiomètre : MCP4261
    • Relai : R561D.56 NTE
    • Résistances : Deux de 100\Omega et deux de 10k\Omega
    • une LED
    • 40 pins broches mâle/mâle (Digikey Parts : A26509-40-ND), découpé par la suite en 8-8-6-4
  • Circuit d'alimentation autonome : cellule photovoltaique [2 cellules fournies le 04/02/15].
  • Circuit d'alimentation autonome : batterie [disponible dans le casier au 18/2/2015]

Pour le reste le développement de la partie logicielle s'oriente vers :

  • Module de supervision permettant de déclencher les mesures, stocker les données, transmettre les données
    • Il faudrait, dans les requêtes émises, un bit affirmant la bonne réception des données envoyées, auquel cas on peut supprimer les données sur l'Arduino
  • une interface de consultation des données à distance (DB SQL + Web PHP), utilisation de PostgreSQL 9.4
  • Le code devrait principalement être réalisé sous VIM en C.
  • On pourra, une fois arrivé là, étudier la transmission sans fil via balises GSM. La table crée dans la base de données contient déjà un élément à cet effet.

Etapes du projet

Etape 1

☐ Mise en oeuvre des schémas de fonctionnements, indiquant les différents modules, des dessins valent plus que des mots
☑ Récupération et/ou commande des composants utiles à la réalisation du projet
☑ Réflexion sur les différents fichiers de code à écrire
☑ Réflexion sur le système de base de données à implémenter
☑ Création d'une base de données test en local
☑ Création d'un site web de supervision sur weppes

Etape 2

☐ Création d'un compte utilisateur Polytech pour le projet
☑ Création de la base de données sur ce compte et des différentes tables à insérer
☐ Montage électrique de la carte

Etape 3

☐ Récupération des données du galvanostat sur l'Arduino
☐ Réalisation du code du module de supervision sur l'Arduino
☐ Insertion des données dans la DB
☑ Création des pages web permettant la consultation des données
☐ (Optionnel) Création d'une interface terminal pour dump les données de l'Arduino sur un système Unix

Etape 4

☐ Etude de la méthode de transfert GSM des données enregistrées par l'Arduino
☐ Implémentation de ce transfert et tests d'insertion dans la DB sans fil


TBC

Balise de suivi de polluants : développement détaillé

Le développement de la balise de suivi de polluants s'est très vite orienté vers l'utilisation d'une plateforme Arduino, sur laquelle nous nous sentions relativement à l'aise avec les TP et tutorats que nous avions déjà eu avec, par son côté open, et par sa grande modularité.

Le cahier des charges très vite détaillé, nous avons pu établir le schéma de conception suivant qui permet d'y voir un peu plus clair concernant l'implémentation à réaliser :

Schéma de conception initialle du projet



La base de données, dont le nom est tteneur, est stockée sur le serveur Cambraisis (cambraisis.escaut.net). Elle contient une table nommé data qui va nous servir à stocker les données de la balise, à savoir la date de la mesure, la position GPS, et bien entendu, la mesure. Au niveau des types, nous avons choisi DATETIME pour la date. En effet, cela permet d'avoir l'heure et le jour de la mesure à la seconde près. Pour la position GPS, deux colonnes DECIMAL(7,3) nous permettent de stocker la longitude et la latitude de la balise à l'instant de la mesure, avec une précision de 4 à 5 chiffres après la virgule. La mesure est quant à elle stockée en type DOUBLE ce qui nous autorise une très grande précision.

Représentation de la table de données



Nous avons ensuite récupéré et adapté un code C open source pour Arduino, nous permettant via notre Shield GSM d'effectuer une requête GET par protocole HTTP. Cette requête à l'allure suivante :

GET /savedb.php?meastime=meastime&lat=lat&lon=lon&measure=measure HTTP/1.1
Host:teneur.polytech-lille.net
User-Agent: MyArduino

Concrètement, ce code est implanté de la manière suivante en C :

  // if you get a connection, report back via serial:
 if (client.connect(server, port))
 {
   Serial.println("connected");
   // Make a HTTP request:
   Serial.println("Executing HTTP Request...");
   client.print("GET /savedb.php?meastime=");
   client.print(meastime);
   client.print("&lat=");
   client.print(lat);
   client.print("&lon=");
   client.print(lon);
   client.print("&measure=");
   client.print(measure);
   client.println(" HTTP/1.1");
   client.println("Host: teneur.polytech-lille.net");
   client.println("User-Agent: MyArduino");
   Serial.println("Done with HTTP Request!");
 }
 else
 {
   // if you didn't get a connection to the server:
   Serial.println("connection failed");
 }

Ceci nous permet donc d'effectuer notre requête sur la page savedb.php... mais que fait celle-ci ? Voici son code :

<?php
 error_reporting(E_ALL);
 require_once('connexion.php'); //récupération des identifiants de connexion pour accéder à la DB
 $meastime=$_GET["meastime"];   //récupération de la date et heure via l'URL
 $lat=$_GET["lat"];             //récupération de la latitude via l'URL
 $long=$_GET["lon"];            //récupération de la longitude via l'URL
 $measure=$_GET["measure"];     //récupération de la mesure via l'URL
 $query="INSERT INTO `tteneur`.`data` ( //requête INSERT INTO pour insérer les valeurs dans la DB 
 `meastime` ,
 `lat` ,
 `long` ,
 `measure`
 )
 VALUES (
 '$meastime', '$lat', '$long', '$measure'
 );";
 echo 'Date de la mesure : ' . $meastime . "
"; //debug visuel de la page echo 'Latitude : '.$lat . "\n"; echo 'Longitude : '.$long . "
"; echo 'Mesure (A) : '.$measure . "
"; echo "

" . 'Insertion dans la base donn&eacutees...' . "

"; echo 'Requete : ' . $query . "

"; $result = mysql_query($query) or die("Erreur SQL !
$query
".mysql_error()) ; if (!$result) { die('Impossible d\'exécuter la requête :' . mysql_error()); } echo 'Requete effectu&eacute avec succ&egraves !'; ?>

Suivi de l'avancement du Projet

Semaine 1 (26/01/2015)

Nous avons tout d'abord consulté les enseignants afin de récupérer les éléments physiques nécessaires à la réalisation de la balise, à savoir à ce jour l'Arduino UNO monté d'un shield GSM. En outre, la liste des composants utiles à la réalisation de la carte d'acquisition de mesures (galvanostat) a été dressée et nous sommes désormais en attente de leur réception pour pouvoir développer la partie mesure.

Côté logiciel, la base de donnée a été crée sous le nom db_balise sur le serveur weppes.studserv.deule.net.

Le site web a démarré son développement. Il est pour l'instant accessible via weppes.studserv.deule.net/~tteneur/. Les pages index.html, connexion.php, data.php, control.php, et database_params.php y ont été créees.

Pour l'instant, seule la page index.html est remplie.

Semaine 2 (02/02/2015)

Nous avons récupéré le code du Shield GSM qui est Open Source et nous avons commencé à le convertir en language C.
Absence de Timothée Teneur lors de la séance de projet du mercredi (enterrement d'un membre de la famille).

Semaine 3 (09/02/2015)

  • Migration vers MySQL depuis PostgreSQL.
  • Migration de la base de données (désormais sur Cambraisis) : La base de données tteneur contient une table data.
  • Changement d'adresse du site (URL en bas de cette page).
  • Finalisation de la partie affichage des mesures par web.
  • Changement du type de données pour les coordonnées GPS : On passe du type point à deux colonnes DECIMAL(7,3) contenant respectivement la latitude et la longitude.
  • Création d'une page php savedb.php qui récupère les variables passées en paramètre dans l'URL et les insère dans la base de données.
  • Rédaction du code C permettant d'envoyer via un AP GPRS une requête GET via protocole HTTP. Conjointement à la page php ci-dessus, cela permet d'insérer les données dans la base de données directement depuis l'Arduino.

Semaine 4 (16/02/2015)

  • La réalisation se fera entièrement avec l'IDE de l'Arduino et sera converti en C si il nous reste du temps.
  • Étude des caractéristiques du panneau solaire.
  • Réflexion sur les composants permettant de transmettre le courant du panneau solaire à la batterie.

Semaine 5 (23/02/2015)

Semaine 6 (09/03/2015)

Semaine 7 (16/03/2015)

Semaine 8 (23/03/2015)

Semaine 9 (30/03/2015)

Semaine 10 (06/04/2015)

Semaine 11 (13/04/2015)

Semaine 12 (20/04/2015)

Fichiers Rendus

Site web : URL | Download (.tar)

Code Arduino : View | Download (.tar)

Archive complète du projet : Download (.tar)