Aller au contenu


Projet Terminale STI2D [SIN] - Cartographie pollution urbaine

arduino cartographie SIN

  • Vous ne pouvez pas répondre à ce sujet
2 replies to this topic

#1 ractamard

ractamard

    Touriste Martien

  • Zimien
  • PipPipPipPipPip
  • 213 Messages :
  • Gender:Male

Posté 02 août 2015 - 13:34

Hello,

Cette année je viens de passer mon bac STI2D spécialité SIN (système d'information et numérique). J'avais envie de partager avec vous mon projet de fin d'année car sur le net on retrouve pas mal de demande d'aide sur les projets mais rien de finis ou de concret.

 

NB : Je ne savais pas trop où placer le sujet, et vu qu'il y avait un sujet sur Raspberry et Arduino je pense que c'est sa place.

NB2 : L'orthographe n'est pas vraiment mon point fort, donc je vais faire de mon mieux mais n'hésitez pas à me faire remarquer les fautes ;)

 

En quoi consiste ce bac ?

 

C'est un bac technologique orienté sur une spécialité. Son niveau de difficulté est juste en dessous d'un bac S. Il y a 4 spécialités : SIN (système d'information et numérique), ITEC (innovation technologique et écoconception), EE (énergies et environnement) et AC (architecture et construction). 

 

La spécialité est importante car nous devons faire un projet qui comptera coefficient 12 pour notre bac (un coeff 6 donnée par notre prof pour le travail que l'on effectue sur le projet et un coeff 6 le jour de l'oral où l'on présente le projet devant un jury). Autant dire qu'il ne faut pas se louper !

 

Autre point important, l'ETT regroupe toutes les spécialités donc vous devrez voir les choses importantes de chaque spécialité et c'est un coeff 8. C'est une matière qui n'est pas du tout aimé et que l'on compense avec la spécialité.

 

Mon projet : Cartographie de pollution urbaine

 

Enjeu : Créer une cartographie de la pollution urbaine pour améliorer la qualité de vie des citadins ou des usagers3

Problématique : Permettre à l'utilisateur d'avoir des informations sur le niveau de la pollution en un lieu, afin d'envisager des solutions pour en réduire le niveau.

Charge horaire : 74 - 77 heures

 

Avis aux STI2D qui ont le même projet que moi : Les diagrammes, photo sont de ma propriété, vous ne pouvez pas les réutiliser dans vos diaporama. Ils sont le fruit de mes recherches personnelles pour arriver à faire fonctionner ce système ! 

 

Le projet  est découpé en 3 parties :

 

 

Personnellement, je trouve que la phase 1 et 2 sont largement trop grande comparé à la phase 3 ! Je trouve également que la répartition des tâches et le planning devraient être faits en phase 2 (difficile de faire ceci sans solution de conception).

 

repartion.png

 

Je vais vous présenter mon projet dans l'ordre auquel j'y ai réfléchi et non en fonction des phases.

 

Idées de réalisations & Solution de conception :

 

Il n'y a pas eu de multiple idées, à vrai dire je savais comment j'allais faire et je n'en n'avais qu'une seule mais pour mon orale j'ai trouvé 2 idées : - Création d'un système mobile avec afficheur LCD. La cartographie se fait sur une image préalablement charger par le module LCD et programmé en fonction de cette image.

 

-Création d'un système fixe + cartographie à l'ide de l'api Google map. ==> C'est cette solution qui a été choisi. Elle a également évolué, désormais le système peut être mobile, dispose de plusieurs api de cartographies, d'une intelligence artificiel pour prédire les pics de pollutions. Bref un système assez complet !

 

Notre système a pour but de mesurer le taux de microparticules dans l'air.

 

Planning :

Recherche sur le projet, matériel nécessaire,  planning : 1 semaine
Programmation du shield GSM : 1 semaine
Codage du capteur de PM : 2 semaines
Codage du capteur GPS : 2 semaines
Codage du site : 3 semaines
Bugs et imprévu : 1 semaine

 

Programmation du capteur GPS : Aurélien
Programmation du capteur de PM : Romain
Programmation du Shield GSM : Aurélien
Montage de l’installation : Aurélien.
Création du site : Romain
Programmation de la communication serveur, carte Arduino Uno : Romain

 

Matériel nécessaire :

Un Shield GPS € ?
SHIELD Lecteur carte SD v4 12.70
Un Shield GSM-GRPS arduino 87,60€
Une base Shield Grove 8.50€
Une carte Arduino Uno 23.90€
Un Shield capteur de particule Grove (PM) 16,50 €
Un nom de domaine : 10€
Un accès à un hébergeur (PHP + HTML + CSS + BDD) : 20€
Une batterie : Soit pile de 9 V avec adaptateur ou :

Accu Li-Ion 3,7 V 6000mA 24.50€ + Cellule solaire 3 Watts 5.5V19.90€ + Cordon adapté 3€+ Lipo pro 15.90€ = 63.3

Cout total : entre 200 & 263.3

 

Le jour le chargeur solaire fournit l’énergie et recharge la batterie et la nuit la batterie fournit l’électricité. La carte Lipo pro s’occupe de changer de source d’énergie automatiquement.

 

En réalité j'ai opté pour un hébergeur de qualité qui coute beaucoup plus cher que 30. J'ai choisi PlanetHoster et je le recommande, à une semaine de la fin j'ai supprimé tous les fichiers du serveur. Un assistant est venu me dépanner et ma réinstaller le tout en moins d'une heure alors que l'on était le dimanche soir. Bref je ne regrette pas d'avoir investi sur cette hébergeur comparé aux gratuit.

 

 

Ce que doit faire le programme :

 

  1. Initialisation :

Au premier démarrage, l’application relève ses coordonnées GPS et les envois sur le serveur. Le serveur enregistre les coordonnées dans une BDD et les affichent sur une carte. Le programme télécharge un fichier de paramètre permettant de configurer le montage.

  1. Lecture du fichier de paramètre :
    Le programme lit et enregistre dans sa mémoire vive les paramètres.
  2. Temps d’attente :
    Le programme se met en pause le temps qui lui est indiqué dans le fichier paramètre.
  3. Mesure :
    Le programme mesure le taux de pollution.
  4. Envois & récupération des ordres :
    Le programme envois les données au site, et récupère un nouveau fichier paramètre avec  de nouveaux ordres.

diagramme fonctionnement.png

 

Fonctionnement du capteur de PM (vue ouverte du capteur) :

 

Image1.png

 

Je ne poste pas les code du capteur des exemples existent sur internet. Le fonctionnement est très simple, la résistance chauffe, crée un appel d'air qui remonte (flèche verte) embarquant les PM avec elle. Ces dernières vont couper un faisceau de lumière infra-rouge. Le détecteur détecte cette coupure et compte le nombre de fois que sa se produit. Sa nous donnes le nombre de PM présent dans l'air.

 

Les problèmes rencontrés sur ce capteur sont :

 

Valeurs incohérentes : -mauvaise circulation de l’air : mettre le capteur à la verticale

-résistance pas assez chaude : laisser chauffer la résistance 3 minutes avant utilisation pour qu'elle puisse crée un flux d'air

 

Donnée récolté n’est pas en ug/m^3 : Solution : nombre de particules*3531.5*0.0000000589 (=masse d’une PM)

 

Image2.jpg

 

Concernant le GPS, nous utilisons un GPS Grove : http://www.seeedstud...iki/Grove_-_GPS

 

On peut le faire fonctionner manuellement mais il faut créer un parser pour sortir uniquement les données qui nous intéressent. On a donc pris une librairie qui fait cela à notre place. On utilise TinyGPS++ (TinyGPS fonctionne aussi mais est plus lente).

 

Je vais passer à la partie la plus importante pour moi la cartographie et toute la prise en charge qui va avec :

 

Site web : cahier des charges

 

Le site web a été conçu pour répondre à un besoin pour un utilisateur lambda qui veut juste connaitre ou avoir accès à une cartographie et un mode professionnel d'où l'on peut gérer ses capteurs. Beaucoup plus poussé c'est celui qui m'a pris le plus de temps.

Capture3.PNG

 

Site web : Solution de conception du site

 

Capture.PNG

 

 

J'ai choisi la solution utilisant le Template car cela me donne une base de design responsive et je peux directement m'attaquer aux fonctionnalités du site. Le site est dispo ici :  (l'URL du site sera redonnée ultérieurement)

 

Le mode lambda est activé quand vous cliquer sur le gros bouton rouge, pour le mode professionnel il faut que vous vous inscrivez. Tous les mots de passes (utilisateur ou celui du capteur sont chiffrés avec SHA256 et dispose de 2 sels de sécurité chacun différent).

 

Désormais je ne parlerais que du mode professionnel. Ce mode dispose : Accès aux cartographies, à un espace membre, gérer ses capteurs, statistiques avancées : moyenne – pic de pollution – prédiction de données, panneau de commande rapide, ajout/ suppression de capteurs :

 

Image4.png

 

 

Le panneau d'accès rapide vous est utile lorsque vous avez par exemple 50 capteurs et ne voulez voir que ceux qui ont  un problème, vous taper rouge/orange/vert et le trie s'effectue. Ce panneau n'est pas relié à la BDD, je voulais montrer le fonctionnement lors de mon orale.

 

Image5.png

 

D'ici on peut ajouter/supprimer un capteur :

Image6.png

 

Le site dispose de 3 types de cartographies. Une avec l'api de Google qui nous donne une moyenne sur les villes, une avec un emplacement précis de chaque capteur et une avec une IA. Elle nous montre le lieu le plus pollué.

Image7.png

 

Comment ça marche ?

 

On peut zoomer précisément sur chaque type de cartographie. La troisième photo utilise l'api de Google map. Concrètement pour réaliser ces cartes je liste les données enregistrées de la BDD dans un tableau que j'encode en Json en PHP. C'est donc désormais une chaine de caractère PHP, je la transforme en Java Script (langage utilisé par l'api Google map). Je vais dans mon code Java Script et je décode la chaine de caractère et la parse pour la mettre dans un tableau Java Script pour faire fonctionner cette cartographie.

 

Il n'est pas possible de directement convertir un tableau PHP en tableau Java Script on doit obligatoirement utiliser cette technique. Les deux autres cartes (IA et cartographie précise) utilisent le jQuery et la méthode ci-dessus ne fonctionne pas. Je n'ai pas trouvé de solution correcte. Je ne fais que crée un fichier sur le serveur avec un nom aléatoire et inscrit ma page en dur. Je redirige l'utilisateur ensuite.

 

Image8.png

 

 

Pour communiquer à travers le site (envoi des données depuis l'Arduino vers la BDD). Connexion des utilisateurs, données échangées à travers le site je procède de cette façon :

Image9.png

 

J'inclus des variables dans l'url. J'ai mis quelque sécurité en place, je vérifie toujours si les variables existent, si elles ne sont pas vides, sinon je redirige vers une page d'erreur. Pour la gestion de l'espace membre/professionnel, je crée une variable Super_Global qui autorise l'accès à certaine parti. Je n'utilise que les variables Super_Global et la communication par url.

 

Du point de vue de la sécurité, c'est bien géré et on est automatiquement redirigé si on n'en a pas l'accès. Seul bémol, je n'ai pas protégé le site sur les attaques par injections.

 

Je pense avoir tout expliqué. Il faut savoir que faire ce projet sous Arduino est assez facile, tous les shields ont leur code d'exemple et il n'y a aucune difficulté. Il y a diverse amélioration possible, par exemple la prédiction des données pour les pics de pollutions, il suffirait de prendre un capteur de pression, si la pression augmente il va faire beau, la pollution augmente. Si la pression baisse, il pleut et la pluie est le seule moyen de piégé la PM, donc la pollution baisse.

 

Sur ce projet je n'ai pas pu aller au bout de ce que je voulais, trop d'imprévu ont été rencontrés. Carte Arduino Uno trop petite en mémoire pour faire fonctionner le parser, le Shield GSM, le GPS, la librairie de carte SD, etc. Il a fallu rajouter une carte Arduino qui communiquait avec la première par le bus SPI de mémoire. On se rend  compte que Arduino c'est bien pour les petits projets mais pas super pour les gros. Il faut savoir également qu'une Arduino Uno sa consomme beaucoup et que rien qu'avec le shield GSM/GRPS le montage n'aurait tenu que 18/22h donc pas terrible.

 

J'avais réussi à programmer la carte pour la mettre en veille et réduire sa consommation de moitié. En reprogrammant le boot de la carte et en jouant sur la vitesse du processeur on arrive à une consommation égale à une LED ce qui est vraiment intéressant.

 

Voici le code que j'avais :

#include <avr/sleep.h>
#include <avr/wdt.h>


int compteur = 0;
void flash ()
{
  Serial.println(compteur);
  ++compteur;
  delay(5);

}  // end of flash

// watchdog interrupt
ISR (WDT_vect) 
{
  wdt_disable();  // disable watchdog
}  // end of WDT_vect

void setup () {

  Serial.begin(9600);
}

void init_capteur()
{


}
void loop () 
{

  flash ();
  init_capteur();
  // on met à l'état bas toute les sorties
  for (byte i = 0; i <= A5; i++)
  {
    pinMode (i, OUTPUT);    // changed as per below
    digitalWrite (i, LOW);  //     ditto
  }
  // disable ADC
  ADCSRA = 0;  
  // clear various "reset" flags
  MCUSR = 0;     
  // allow changes, disable reset
  WDTCSR = bit (WDCE) | bit (WDE);
  // set interrupt mode and an interval 
  WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0);    // set WDIE, and 8 seconds delay
  wdt_reset();  // pat the dog

  set_sleep_mode (SLEEP_MODE_PWR_DOWN);  
  noInterrupts ();           // timed sequence follows
  sleep_enable();

  // turn off brown-out enable in software
  MCUCR = bit (BODS) | bit (BODSE);
  MCUCR = bit (BODS); 
  interrupts ();             // guarantees next instruction executed
  sleep_cpu ();  

  // cancel sleep as a precaution
  sleep_disable();

} // end of loop




Je vous mets également en pièce jointe un carnet de bord. Et quelque photo de la BDD :

Ici la gestion des entrées pour la pollution : 2015-03-02 21_53_53-.png

 

Ici la gestion de l'inscription/suppression des capteurs, on peut voir que le mot de passe est bien chiffré et que chaque capteur à un ID unique.2015-03-02 21_53_36-.png

 

Et pour terminer la gestion des utilisateurs, là encore on peut voir que le mot de passe est bien chiffré :

 

2015-03-02 21_54_13-.png

 

 

Si vous avez des questions n'hésitez pas, d'écrire un projet bac de cette ampleur est assez compliqué.. Pour info j'ai eu 16/20 alors que mon projet n'était pas fini. J'imagine si j'aurais pu aller au bout de mes idées ;)

 

Le site est dispo ici : (l'URL du site sera redonnée ultérieurement)


Ce message a été modifié par noisette - 04 juillet 2016 - 12:28 .

Image IPB

#2 noisette

noisette

    Webmarster

  • Admin
  • PipPipPipPipPipPipPipPipPip
  • 21 167 Messages :
  • Gender:Male

Posté 03 août 2015 - 08:35

Bonjour,


et merci d'avoir pris le temps de nous raconter cette histoire,

c'était un beau projet, et bravo ! (pour la note comme pour le contenu)


Simplement, tu écris:
 

 

J'imagine si j'aurais pu aller au bout de mes idées

 

Le projet en reste là ?



#3 ractamard

ractamard

    Touriste Martien

  • Zimien
  • PipPipPipPipPip
  • 213 Messages :
  • Gender:Male

Posté 04 août 2015 - 11:31

Hello,

Oui le projet en reste là.. si une personne voudrait l'utiliser pour faire ses cartographies il pourrait, il lui faut juste coaitre l'url de communication et les variables utilisées pour communiquer. De plus le sytème n'est pas bridé à de l'arduino. Il suffit que le système puisse se connecter à internet et cela marchera.

 

Je pense commencer un nouveau projet. J'ai toujours Tool_Controler que je dois continuer de programmer mais je pense m'orienter plus sur un projet contenant de l'embarquer comme une serre automatiser. Sinon programmation d'une librairie permettant de crée des bouton sous arduino. Pour le moment si on prend un écran tactile on doit dessiner le bouton à la main et regarder où est-ce que l'utilisateur appui, c'est pas tip top et c'est surtout long à coder.


Image IPB



0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)