Outils pour utilisateurs

Outils du site


wiki:projets:open-air:home:journal:decembre

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:projets:open-air:home:journal:decembre [2016/03/31 09:21]
sguillie [Code V1]
wiki:projets:open-air:home:journal:decembre [2016/09/11 11:17] (Version actuelle)
Ligne 490: Ligne 490:
  Serial.println (" s ");  Serial.println (" s ");
  
 +}
 +</code>
 +
 +==== Capteurs de Gaz ====
 +Un capteur de gaz est un élément constitué de différentes couches de semi conducteurs sensible à la présence de certains composés gazeux. De manière générale l'objectif est de mesurer la valeur de la résistance interne du capteur qui va varier selon le taux de gaz présent dans l'air. En réalisant un pont diviseur de tension il est possible d'obtenir la valeur de cette résistance sensible. Il est aussi possible de noter la présence d'une résistance de chauffage qui aura pour but de placer le capteur dans les conditions optimal pour les mesures.
 +
 +{{  :wiki:projets:open-air:home:gazsensor.png?nolink&516x222  }}
 +
 +Pour chacun des capteurs à  tester on aura une connectique légèrement différente, la logique restera néanmoins toujours la même. Les données seront récupérée via une carte Arduino uno et stockée sur carte SD. Il faut donc désormais définir le code à utiliser.
 +
 +==== Code V1 ====
 +
 +Le code qui suit correspond à  la première version utilisée pour nos tests.
 +
 +<code =cpp>
 +#include <SPI.h>
 +
 +#include <SD.h>
 +
 +int sd_cs=4; // carte sd commande
 +int sd_mosi=11;
 +int sd_miso=12;
 +int sck_sd=13;
 +int capteur;
 +int capteurmax= 19;
 +
 +unsigned long debut=0;// temps depuis le démarrage de la dernière mesure
 +unsigned long temps=0; //temps depuis le début du test
 +unsigned long tempsmesure=300000; //temps de moyennage avant affichage
 +unsigned long totalduration=0; //durée de la mesure
 +float mesure[6]={0.0,0.0,0.0,0.0,0.0};
 +float tension[6]={0.0,0.0,0.0,0.0,0.0}; // tension mesurée par chacun des capteurs
 +float totaltension[6]={0.0,0.0,0.0,0.0,0.0}; // moyenne des mesures
 +float tauxgazs[6]={0.0,0.0,0.0,0.0,0.0}; // concentration en particules
 +float in_max=1023.0;
 +float in_min=0;
 +float out_max=100.0;
 +float out_min=0;
 +
 +int jour=0;
 +int heure=0;
 +int minute=0;
 +int seconde=0;
 +int compteur=0
 +File fichier;
 +
 +void setup() {
 +
 +  //ouverture connection série
 +Serial.begin(9600);
 +
 + //initialisation de la carte sd
 + Serial.print("Initialisation de la carte SD...");
 +  if (!SD.begin(sd_cs)) {
 +    Serial.println("Carte non reconnue");
 +    return;
 +  }
 +  Serial.println("OK!");
 +delay(1000);
 +if (SD.exists("data.txt")==true){
 +  Serial.println("Supression des anciennes données...");
 +SD.remove("data.txt");
 +Serial.println("Fichier supprimé");
 +delay(1000);
 +}
 +
 +//Serial.println("Saisir le nombre de capteur:");
 +//while (capteurmax>6){
 +//  if (Serial.available()> 0) {
 +//capteurmax=Serial.read();
 +//capteurmax=capteurmax-'0';
 +//Serial.println(capteurmax);
 +//  }
 +//}
 +//  capteurmax=capteurmax+14;
 +
 +   //définition de la PIN comme entrée
 +for (capteur=14;capteur<=capteurmax; capteur++){
 +pinMode (capteur, INPUT);
 +delay(100);
 +fichier=SD.open("data.txt", FILE_WRITE);
 +    if (fichier) {
 +       if (capteur<19){
 +         fichier.print("Capteur");
 +      fichier.print(capteur);
 +      fichier.print(";");
 +      }
 +      else{
 +        fichier.print("Capteur");
 +      fichier.println(capteur);
 +      }
 +      fichier.close();
 +    }
 +
 +}
 +debut=millis();
 +Serial.print("Debut mesure: ");
 +date();
 +
 +}
 +
 +void loop() {
 +compteur++
 +  //boucle sur chaque capteur
 +  for (capteur=0;capteur<=capteurmax-14; capteur++){
 +
 +  // Mesure la tension du capteur
 +  mesure[capteur]=analogRead(capteur);
 + // conversion des données
 +  tension[capteur]= conversion(mesure[capteur],in_min,in_max,out_min,out_max);
 +
 +   //mesure de la durée total de l'état bas
 +  totaltension[capteur]=(totaltension[capteur]+tension[capteur]/compteur);
 +
 +  totalduration=millis()-debut;
 +
 +  //affichage du taux de gaz
 +  if (totalduration>= tempsmesure){
 +    date();
 +    fichier=SD.open("data.txt", FILE_WRITE);
 +    fichier.print ("Jour ");
 + fichier.print (jour);
 + fichier.print (";");
 + fichier.print (heure);
 + fichier.print (":");
 +  fichier.print (minute);
 + fichier.print (":");
 + fichier.print (seconde);
 + fichier.print (";");
 + fichier.close();
 +    for (capteur=0;capteur<=capteurmax-14; capteur++){
 +      Serial.print("Capteur ");
 +      Serial.println(capteur);
 +      Serial.println (tension[capteur]);
 +    //faire conversion selon le capteur
 +//...
 +
 +    fichier=SD.open("data.txt", FILE_WRITE);
 +    if (fichier) {
 +      Serial.print("Enregistrement sur carte SD...");
 +      if (capteur<5){
 +      fichier.print(tension[capteur]);
 +      fichier.print(";");
 +      }
 +      else{
 +      fichier.println(tension[capteur]);
 +      }
 +      fichier.close();
 +
 +      Serial.println("Enregistrement terminé");
 +    }
 +    else {
 +      Serial.println ("erreur à l'ouverture");
 +    }
 +
 +    duration[capteur]=0;
 +    debut=millis();
 +  }
 + }
 +    }
 +
 +}
 +// affichage de la date sur le port série
 +void date ()
 +{
 +  temps=millis();
 +  if (temps> 86400000){
 +  jour= temps/86400000;
 +  temps=temps†400000;
 +  }
 +
 +  if (temps> 3600000){
 +  heure= temps/3600000;
 +  temps=temps600000;
 +  }
 +
 +  if (temps> 60000){
 +  minute= temps/60000;
 +  temps=temps`000;
 +  }
 +
 +  seconde= temps/1000;
 +   Serial.print ("Jour ");
 + Serial.print (jour);
 + Serial.print (" ");
 + Serial.print (heure);
 + Serial.print (" h ");
 +  Serial.print (minute);
 + Serial.print (" min ");
 + Serial.print (seconde);
 + Serial.println (" s ");
 +
 +}
 + //fonction conversion des données brutes
 +float conversion (int in, float x_min, float x_max, float y_min, float y_max)
 +{
 +  float out=0;
 +  out = (in-x_max)*((y_max-y_min)/(x_max-x_min))+y_max;
 +  return out;
 } }
 </code> </code>
Ligne 497: Ligne 696:
 Pour cette manipulation seul les composant de type SHARP ont été testés. Trois d'entre eux utilisent les nappes de connexion de type S6-BR-ZR-SM4A-TF et deux sont reliés à  la carte Arduino avec des fils simplement étanés sur le PCB. Pour cette manipulation seul les composant de type SHARP ont été testés. Trois d'entre eux utilisent les nappes de connexion de type S6-BR-ZR-SM4A-TF et deux sont reliés à  la carte Arduino avec des fils simplement étanés sur le PCB.
  
-L'enceinte de test est constitué d'une boite contenant les capteurs Ã  tester mais aussi l'instrument de mesure OSIRIS. Un couvercle couvrira partiellement le contenant de manière Ã  laisser passer l'air.+L'enceinte de test est constituée d'une boite contenant les capteurs à  tester mais aussi l'instrument de mesure OSIRIS. Un couvercle couvrira partiellement le contenant de manière à  laisser passer l'air.
  
 L'expérience durera 24 h en grande partie sous aire ambiant mais avec ajout de fumés à des instants donnés. L'expérience durera 24 h en grande partie sous aire ambiant mais avec ajout de fumés à des instants donnés.
  
-Le but ici n'est pas tant d'obtenir des résultats que de vérifier si la procédure de test est satisfaisante.+Le but ici n'est pas tant d'obtenir des résultats que de vérifier si la procédure de test est satisfaisante.
  
 {{  :wiki:projets:open-air:home:testcapteurs:09-12-2015.png?nolink&603x453  }} {{  :wiki:projets:open-air:home:testcapteurs:09-12-2015.png?nolink&603x453  }}
wiki/projets/open-air/home/journal/decembre.1459416062.txt.gz · Dernière modification: 2016/09/11 11:17 (modification externe)