Arexx SUPERHEROS : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Bleu|Amélioration du programme de la procédure optimisée }})
 
(23 révisions intermédiaires par un autre utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
<br />
 
<br />
 
[[Catégorie:Projets Tutorés S2]]
 
[[Catégorie:Projets Tutorés S2]]
 
+
<!--
 
={{Rouge|Introduction-Présentation du projet}}=
 
={{Rouge|Introduction-Présentation du projet}}=
  
Au cours du précédent semestre, nous avons eu à concevoir un robot suiveur de ligne sur un châssis Arexx constitué d'une carte capteur et d'une carte gestion. Nous avons également dû réaliser une carte d’adaptation afin de relier directement la carte capteur à une carte ARDUINO. Nous avons aussi écrit des programmes pour tester les capteurs et les LEDs, suite à cela notre projet actuel consiste à écrire un programme permettant de détecter les pannes sur la carte capteur du robot Arexx et une possibilité de modifier la carte d’adaptation.
+
Au cours du précédent semestre, nous avons eu à concevoir un robot suiveur de ligne sur un châssis Arexx constitué d'une carte capteur et d'une carte gestion. Nous avons également dû réaliser une carte d’adaptation afin de relier directement la carte capteur à une carte ARDUINO. Nous avons aussi écrit des programmes pour tester les capteurs et les LEDs, suite à cela notre projet actuel consiste à écrire un programme permettant de détecter les pannes sur la carte capteur du robot Arexx.
  
 
={{Rouge|Présentation du cahier des charges}}=
 
={{Rouge|Présentation du cahier des charges}}=
Ligne 153 : Ligne 153 :
 
=={{Vert|Procédure optimisée }}==
 
=={{Vert|Procédure optimisée }}==
  
Avec cette procedure, les courts-circuits sont détéctés, les LEDs et les capteurs sont testés de façon semi-automatique par le programmes ci dessous réalisés lors de notre projet tutorés de ce semestre. l'utilisateur doit seulement deplacer la carte sur différentes surface afin de diminuer ou augmenter l'impact des capteur sur les mesure suivant les besoins.
+
Avec cette procédure, les courts-circuits sont détectés, les LEDs et les capteurs sont testés de façon semi-automatique par le programmes ci dessous réalisés lors de notre projet tutorés de ce semestre. l'utilisateur doit seulement déplacer la carte sur différentes surfaces afin de diminuer ou augmenter l'impact des capteurs sur les mesures suivant les besoins.
  
  
Ligne 172 : Ligne 172 :
  
  
Nous avons modifié la carte d'adaptation en mettant une résistance de 120ohm
+
Nous avons modifié la carte d'adaptation en mettant une résistance de 120ohm entre la masse de la carte capteur et la masse de la carte arduino, nous mesurons la tension aux bornes de cette résistance avec l'entrée analogique A4.
  
[[Image:Capture22.png|cadre|gauche]]
+
[[Image:Capture22.png|cadre|gauche|carte d'adaptation]]
  
[[Image:Capture11.png|cadre|gauche]]
+
[[Image:Capture21.png|cadre|gauche|schéma de la carte d'adaptation]]
  
  
Ligne 182 : Ligne 182 :
  
  
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
+
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
  
==={{Bleu|Sous-programme }}===
+
==={{Bleu|Sous-programmes }}===
  
 
===={{Vert|Test des courts-circuits }}====
 
===={{Vert|Test des courts-circuits }}====
Ce test permet de détecter les courts-circuits entre le Vcc et la masse.
+
Ce test permet de détecter les courts-circuits entre Vcc et la masse.
  
Si aucune LED n'est allumée et que les capteurs ne sont pas exposés à la lumière, aucun courant ne circule, donc il n'y a aucune tension aux bornes de la résistance de test, si il y a une tension imprtante, cela signifie qu'il y a un court-circuit entre la masse et l'alimentation.
+
Si aucune LED n'est allumée et que les capteurs ne sont pas exposés à la lumière, aucun courant ne circule, donc il n'y a aucune tension aux bornes de la résistance de test, si il y a une tension importante, cela signifie qu'il y a un court-circuit entre la masse et l'alimentation.
  
  
Ligne 211 : Ligne 211 :
 
Après la conversion analogique, 0.45V donne la valeur 92.
 
Après la conversion analogique, 0.45V donne la valeur 92.
  
Pour  les LEDs infrarouges des capteurs : les recepteurs des capteurs créent une tension lorsqu'on allume les LEDs donc la tension aux bornes dépend aussi de la tension aux bornes des phototransistors. Nous avons observé les variations des 2 tensions en faisant varier la luminosité, afin de trouver une équation linéaire approximant le fonctionnement des capteurs.
+
Pour  les LEDs infrarouges des capteurs : les récepteurs des capteurs créent une tension lorsqu'on allume les LEDs donc la tension aux bornes dépend aussi de la tension aux bornes des photo-transistors. Nous avons observé les variations des 2 tensions en faisant varier la luminosité, afin de trouver une équation linéaire approximant le fonctionnement des capteurs.
 
Nous obtenons : U=413 -(20/307) * u2    avec u2 la tension moyenne des capteurs.
 
Nous obtenons : U=413 -(20/307) * u2    avec u2 la tension moyenne des capteurs.
  
 
Pour limiter l'impact des tensions des capteurs dans les mesures nous placerons les capteurs sur une surface sombre.
 
Pour limiter l'impact des tensions des capteurs dans les mesures nous placerons les capteurs sur une surface sombre.
Nous prenons une marge de 25 % dans nos calculs afin d'eviter les problèmes de variations de tensions.
+
Nous prenons une marge de 25 % dans nos calculs afin d’éviter les problèmes de variations de tensions.
  
 
<source lang=c>
 
<source lang=c>
Ligne 292 : Ligne 292 :
 
♠Si la LED du capteur fonctionne
 
♠Si la LED du capteur fonctionne
  
Si la LED fonctionne, nous pouvons vérifier le fonctionnement en éffectuant une mesure avec la LED allumée et une avec la LED éteinte. Si la mesure avec la LED allumée est supérieure à celle de la LED éteinte, cela signifie que le récepteur fonctionne.
+
Si la LED fonctionne, nous pouvons vérifier le fonctionnement en effectuant une mesure avec la LED allumée et une avec la LED éteinte. Si la mesure avec la LED allumée est supérieure à celle de la LED éteinte, cela signifie que le récepteur fonctionne.
  
 
<source lang=c>
 
<source lang=c>
Ligne 325 : Ligne 325 :
 
</source>
 
</source>
  
Si la LED ne fonctionne pas, nous remplaçons la LED allumée par un eclairage fort, pour la LED éteinte, nous plaçons les capteurs sur une surface sombre.
+
Si la LED ne fonctionne pas, nous remplaçons la LED allumée par un éclairage fort, pour la LED éteinte, nous plaçons les capteurs sur une surface sombre.
  
 
♠Si la LED du capteur ne fonctionne pas  
 
♠Si la LED du capteur ne fonctionne pas  
Ligne 378 : Ligne 378 :
 
   "cote gauche", "milieu gauche", "milieu droit", "cote droit"};
 
   "cote gauche", "milieu gauche", "milieu droit", "cote droit"};
 
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
 
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
char ledCNY[4]={4,3,2,5};
+
char ledCNY[4]={4,3,2,5}; //adresse des leds des capteurs de gauche à droite
char capt[4]={A2,A3,A1,A0};
+
char capt[4]={A2,A3,A1,A0}; //adresse des capteurs de gauche à droite
char led[] = {6, 7, 9, 8 };
+
char led[] = {6, 7, 9, 8 }; //adresse des leds de gauche à droite
 +
 
 +
boolean err=false; //flag passant à l’état vrai si il y'a un disfonctionnement
  
boolean err=false;
 
 
void setup() {
 
void setup() {
 
   for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
 
   for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
 
   Serial.begin(9600);
 
   Serial.begin(9600);
 
   Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
 
   Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
   test_cc();
+
   test_cc(); //test court-circuit
 
}
 
}
  
 
void loop() {
 
void loop() {
 
   test_led();
 
   test_led();
   test_capt();
+
   test_capt();  
   if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3])) test_capt_led_HS();
+
   if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3])) test_capt_led_HS(); //si au moins une led de capteur ne fonctionne pas on utilise  cette fonction
  
 
   Serial.println(" ");
 
   Serial.println(" ");
Ligne 406 : Ligne 407 :
  
 
//////////
 
//////////
void OK()
+
void OK() //fonction attendant le caractère retour chariot comme confirmation que l'utilisateur à compris la consigne
 
{
 
{
 
   char r;
 
   char r;
Ligne 563 : Ligne 564 :
  
  
  Partie Arduino
+
  Partie Arduino
  
 
Pour faciliter la communication, le texte envoyé à la liaison série est remplacé par un nombre.
 
Pour faciliter la communication, le texte envoyé à la liaison série est remplacé par un nombre.
  
 
<source lang=c>
 
<source lang=c>
 
  
 
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
 
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
Ligne 575 : Ligne 575 :
 
char led[] = { 6, 7, 9, 8};
 
char led[] = { 6, 7, 9, 8};
  
 +
boolean err=false;
  
 
void setup() {
 
void setup() {
Ligne 589 : Ligne 590 :
 
   if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3]))  test_capt_led_HS();
 
   if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3]))  test_capt_led_HS();
  
 +
  if(err==false) Serial.println(26);
 +
  err=false;
 +
 
 
   Serial.println(25);
 
   Serial.println(25);
//  Serial.println(" ");
 
 
   OK();
 
   OK();
 
}
 
}
Ligne 632 : Ligne 635 :
 
       Serial.print("0");
 
       Serial.print("0");
 
       Serial.println(i+3);
 
       Serial.println(i+3);
 +
      err=true;
 
       delay(2000);
 
       delay(2000);
 +
      OK();
 
     }
 
     }
 
     if(val > 92 * 1.25)
 
     if(val > 92 * 1.25)
Ligne 638 : Ligne 643 :
 
       Serial.print("0");
 
       Serial.print("0");
 
       Serial.println(i+7);
 
       Serial.println(i+7);
 +
      err=true;
 
       delay(2000);
 
       delay(2000);
 +
      OK();
 
     }
 
     }
 
   }
 
   }
Ligne 661 : Ligne 668 :
 
       Serial.println(i+11);
 
       Serial.println(i+11);
 
       led_HS[i] = HIGH;
 
       led_HS[i] = HIGH;
 +
      err=true;
 
       delay(2000);
 
       delay(2000);
 +
      OK();
 
     }
 
     }
 
     if( u1 > (1.25 *(413 + (-20/307) * u2)))
 
     if( u1 > (1.25 *(413 + (-20/307) * u2)))
Ligne 667 : Ligne 676 :
 
       Serial.println(i+15);
 
       Serial.println(i+15);
 
       led_HS[i] = HIGH;
 
       led_HS[i] = HIGH;
 +
      err=true;
 
       delay(2000);
 
       delay(2000);
 +
      OK();
 
     }
 
     }
 
   }
 
   }
Ligne 689 : Ligne 700 :
 
       if(mea>(mes*0.95)){
 
       if(mea>(mes*0.95)){
 
         Serial.println(i+19);
 
         Serial.println(i+19);
 +
        err=true;
 
         delay(2000);
 
         delay(2000);
 +
        OK();
 
       }
 
       }
 
     }
 
     }
Ligne 719 : Ligne 732 :
 
       if (mea[i] > (mes[i]*0.98 )) {
 
       if (mea[i] > (mes[i]*0.98 )) {
 
         Serial.println(i+19);
 
         Serial.println(i+19);
 +
        err=true;
 
         delay(2000);
 
         delay(2000);
 +
        OK();
 
       }
 
       }
 
     }
 
     }
Ligne 727 : Ligne 742 :
 
</source>
 
</source>
  
  Partie Procesing
+
  Partie Processing
  
<source lang=java>
+
<source lang=c>
  
 
import processing.serial.*;
 
import processing.serial.*;
Ligne 751 : Ligne 766 :
 
volatile int lecture;
 
volatile int lecture;
 
volatile int i;
 
volatile int i;
volatile boolean Sel=true;
+
volatile boolean Sel=true; //flag autorisant le mode de fonctionnement sélection du port série
volatile boolean Init=false;
+
volatile boolean Init=false; //flag autorisant le mode de fonctionnement initialisation du port série
boolean fct=false;
+
boolean fct=false; //flag autorisant le mode de fonctionnement normal
boolean fin=false;
+
boolean fin=false; //flag indiquant la fin du test
  
  
 
void setup() {
 
void setup() {
 +
 
 
   size(1000, 800);
 
   size(1000, 800);
 
   background(100);
 
   background(100);
Ligne 765 : Ligne 781 :
 
   text("indiquez le port de la carte", 10, 150);
 
   text("indiquez le port de la carte", 10, 150);
  
   board=loadImage("imgboard.png");
+
   board=loadImage("imgboard.png");// sélection et chargement des images
 
   cc=loadImage("cc.png");
 
   cc=loadImage("cc.png");
 
   ledcg=loadImage("ledcg.png");
 
   ledcg=loadImage("ledcg.png");
Ligne 788 : Ligne 804 :
 
{
 
{
 
   fill(0);
 
   fill(0);
   rect(0, 600, 1000, 200);
+
   rect(0, 600, 1000, 200);//efface le précédent texte
 
   fill(255);
 
   fill(255);
 
   switch(lecture) {
 
   switch(lecture) {
 +
  //affichage des informations correspondant au code transmis par Arduino
 
   case 1:
 
   case 1:
 
     text("Placez la carte sur une surface sombre, puis appuyez sur une touche", 50, 650, 950, 800);
 
     text("Placez la carte sur une surface sombre, puis appuyez sur une touche", 50, 650, 950, 800);
Ligne 882 : Ligne 899 :
 
     break;
 
     break;
 
   case 24:
 
   case 24:
     text("exposez la carte à une  lumiere forte puis appuyez sur une touche", 50, 650, 950, 800);
+
     text("exposez la carte à une  lumière forte puis appuyez sur une touche", 50, 650, 950, 800);
 
     break;
 
     break;
 
   case 25:
 
   case 25:
 
     text("Test terminé\n appuyer sur une touche pour recommencer", 50, 650, 950, 800);
 
     text("Test terminé\n appuyer sur une touche pour recommencer", 50, 650, 950, 800);
 
     fin=true;
 
     fin=true;
 +
    break;
 +
  case 26:
 +
    text("Aucun problème",150 ,550, 950, 800);
 
     break;
 
     break;
 
   default:
 
   default:
Ligne 894 : Ligne 914 :
  
 
void draw() {
 
void draw() {
 
+
  //partie initialisation du port série
 
   if (Init==true)  
 
   if (Init==true)  
 
   {
 
   {
 
     char nom[]=new char[i];
 
     char nom[]=new char[i];
     for (char j=0; j<i; j++) nom[j]=data[j];
+
     for (char j=0; j<i; j++) nom[j]=data[j];//stockage des caractères choisi par l'utilisateur dans un tableau
     String name = new String(nom);
+
     String name = new String(nom);//création d'une chaîne de caractère à partir du tableau
     myPort = new Serial(this, name, 9600);
+
     myPort = new Serial(this, name, 9600);//initialisation du port série
 
     myPort.bufferUntil('\n');
 
     myPort.bufferUntil('\n');
 
     background(0);
 
     background(0);
Ligne 912 : Ligne 932 :
 
void keyPressed() {
 
void keyPressed() {
  
 
+
  //partie utilisée seulement en mode sélection du port série
 
   if (Sel==true) {
 
   if (Sel==true) {
     if ((key==ENTER)||(key==RETURN))
+
     if ((key==ENTER)||(key==RETURN)) //validation du choix du port série
 
     {
 
     {
 
       Init=true;
 
       Init=true;
Ligne 920 : Ligne 940 :
 
     } else
 
     } else
 
     {
 
     {
       if (key==BACKSPACE)  
+
       if (key==BACKSPACE) //efface un caractère
 
       {
 
       {
 
         data[i]=0;
 
         data[i]=0;
Ligne 935 : Ligne 955 :
 
     }
 
     }
 
   }
 
   }
 
+
 +
  //partie utilisée seulement en fonctionnement normal
 
   if (fct==true)
 
   if (fct==true)
 
   {
 
   {
     myPort.write(0x0d);
+
     myPort.write(0x0d); //envoie confirmation à Arduino si on appui sur une touche
     if (fin==true)
+
     if (fin==true)       //si le test est fini, efface l'écran avant de recommencer
 
     {
 
     {
 
       image(board, 0, 0, 1000, 600);
 
       image(board, 0, 0, 1000, 600);
Ligne 956 : Ligne 977 :
 
   fill(255);
 
   fill(255);
 
   byte l[]=myPort.readBytesUntil('\n');
 
   byte l[]=myPort.readBytesUntil('\n');
   lecture=(l[0]-48)*10+(l[1]-48);
+
   lecture=(l[0]-48)*10+(l[1]-48); //conversion de la chaîne de caractère envoyé en un nombre de 2 chiffre
 
   text(lecture, 50, 50);
 
   text(lecture, 50, 50);
 
}
 
}
Ligne 962 : Ligne 983 :
  
 
</source>
 
</source>
 +
 +
Pour l'affichage dans l'interface, nous utilisons les images ci-dessous que nous superposons afin d'indiquer toutes les pistes qui nécessitent une vérification d'après le test.
 +
 +
{| class="wikitable"
 +
|-
 +
|  || [[Fichier:imgboard.png|200px|thumb|left|imgboard.png]] || [[Fichier:court-circuit.png|200px|thumb|left|cc.png]] ||
 +
|-
 +
| [[Fichier:captcg.png|200px|thumb|left|captcg.png]] || [[Fichier:captmg.png|200px|thumb|left|captmg.png]] || [[Fichier:captmd.png|200px|thumb|left|captmd.png]] || [[Fichier:captcd.png|200px|thumb|left|captcd.png]]
 +
|-
 +
| [[Fichier:CNYcg.png|200px|thumb|left|CNYcg.png]] || [[Fichier:CNYmg.png|200px|thumb|left|CNYmg.png]] || [[Fichier:CNYmd.png|200px|thumb|left|CNYmd.png]] || [[Fichier:CNYcd.png|200px|thumb|left|CNYcd.png]]
 +
|-
 +
| [[Fichier:ledcg.png|200px|thumb|left|ledcg.png]] || [[Fichier:ledmg.png|200px|thumb|left|ledmg.png]] || [[Fichier:ledmd.png|200px|thumb|left|ledmd.png]] || [[Fichier:ledcd.png|200px|thumb|left|ledcd.png]]
 +
|}
 +
-->

Version actuelle datée du 23 décembre 2015 à 22:41