Arexx SUPERHEROS : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Vert|Test des capteurs }})
Ligne 167 : Ligne 167 :
  
 
<source lang=c>
 
<source lang=c>
char * pos[4] = {
+
for (char i = 0; i < 4; i++)
  "cote gauche", "milieu gauche", "milieu droit", "cote droit"};
+
  {
 
+
    unsigned int u2=0;
void setup(){
+
    char an[] = {
  for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
+
      A0, A1, A2, A3                };
  Serial.begin(9600);
+
    digitalWrite(ledCNY[i], HIGH);
   Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
+
    unsigned int u1 = analogRead(A4);
}
+
    for (int j = 0; j < 4; j++)
 
+
    {
void OK()
+
      u2 += analogRead(an[j]);
 +
    }
 +
    u2 /= 4;
 +
    digitalWrite(ledCNY[i], LOW);
 +
    if( u1 < (0.75 *(413 + (-20/307) * u2)))
 +
    {
 +
      Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
 +
      Serial.println(pos[i]);
 +
      led_HS[i] = HIGH;
 +
      err=true;
 +
    }
 +
    if( u1 > (1.25 *(413 + (-20/307) * u2)))
 +
    {
 +
      Serial.print("Il y a un court-circuit sur la LED du capteur ");
 +
      Serial.println(pos[i]);
 +
      led_HS[i] = HIGH;
 +
      err=true;
 +
    }
 +
  }
 +
   Serial.println("");
 +
}          
 +
//////////
 +
void test_capt()
 
{
 
{
  char r;
 
  do {
 
    while (Serial.available() == 0);
 
    r = Serial.read();
 
  }
 
  while ( r != 0x0d);
 
}
 
 
void tcapteur(){
 
  char led[4]={
 
    4,3,2,5        };
 
  char capt[4]={
 
    A2,A3,A1,A0        };
 
 
   int i;
 
   int i;
 
   Serial.println("Poser la carte sur une surface clair");
 
   Serial.println("Poser la carte sur une surface clair");
 
   Serial.println("Puis taper sur ok");
 
   Serial.println("Puis taper sur ok");
 
   OK();
 
   OK();
  analogReference(DEFAULT);
+
   for(i=0;i<4;i++)
   for(i=0;i<4;i++){
+
  {
     digitalWrite(led[i],0);
+
     if(led_HS[i]==0)
     //Serial.print(pos[i]);
+
     {
    //Serial.print(" sans led= ");
+
      digitalWrite(ledCNY[i],0);
    int mes=analogRead(capt[i]);
+
      int mes=analogRead(capt[i]);
    //Serial.print(mes);
+
      digitalWrite(ledCNY[i],1);
    digitalWrite(led[i],1);
+
      delay(5);
    delay(5);
+
      int mea=analogRead(capt[i]);
    //Serial.print("    ");
+
      digitalWrite(ledCNY[i],0);
    //Serial.print(pos[i]);
+
      if(mea>(mes*0.95)){
    //Serial.print(" avec led= ");
+
        Serial.print("Il y a un probleme sur le circuit du capteur ");
    int mea=analogRead(capt[i]);
+
        Serial.print(pos[i]);
    //Serial.println(mea);
+
        Serial.println(" est HS");
    if(mea>(mes*0.95)){
+
        err=true;
      Serial.print("le capteur ");
+
       }
      Serial.print(pos[i]);
 
      Serial.println(" est HS");
 
    }
 
    else{
 
      Serial.print("le capteur ");
 
       Serial.print(pos[i]);
 
      Serial.println(" fonctionne");
 
 
     }
 
     }
    delay(1000);   
 
 
   }
 
   }
 
}
 
}
  
void loop(){
+
 
tcapteur();
 
  OK();
 
}
 
 
</source>
 
</source>
  
Ligne 233 : Ligne 231 :
 
♠Si la LED du capteur ne fonctionne pas  
 
♠Si la LED du capteur ne fonctionne pas  
 
<source lang=c>
 
<source lang=c>
   char * pos[4] = {"cote gauche", "milieu gauche", "milieu droit", "cote droit"};
+
   char void test_capt_led_HS() {
  void setup() {
+
   char led[4] = {
  for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
+
    4, 3, 2, 5
  Serial.begin(9600);
+
  };
  Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
+
   char capt[4] = {
  }
+
    A2, A3, A1, A0
  void OK()
+
  };
  {
 
  char r;
 
    do {
 
    while (Serial.available() == 0);
 
    r = Serial.read();
 
  }
 
  while ( r != 0x0d);
 
  }
 
  void test_capt_led_HS() {
 
   char led[4] = {4, 3, 2, 5};
 
   char capt[4] = {A2, A3, A1, A0 };
 
 
   int i;
 
   int i;
 
   int mes[4], mea[4];
 
   int mes[4], mea[4];
Ligne 257 : Ligne 244 :
 
   OK();
 
   OK();
 
   for (i = 0; i < 4; i++) {
 
   for (i = 0; i < 4; i++) {
  //if(led_HS[i]==1)
+
 
     //  {
+
    if(led_HS[i]==1)
  mes[i] = analogRead(capt[i]);
+
     {
     // }
+
 
 +
      mes[i] = analogRead(capt[i]);
 +
 
 +
     }
 
   }
 
   }
   Serial.println("exposez la carte a une lumiere forte");
+
   Serial.println("Exposez la carte a une lumiere forte");
 
   Serial.println("Puis taper sur ok");
 
   Serial.println("Puis taper sur ok");
 
   OK();
 
   OK();
 
   for (i = 0; i < 4; i++) {
 
   for (i = 0; i < 4; i++) {
  //if(led_HS[i]==1)
+
 
     //  {
+
    if(led_HS[i]==1)
  mea[i] = analogRead(capt[i]);
+
     {
    if (mea[i] > (mes[i]*0.98 )) {
+
      mea[i] = analogRead(capt[i]);
      Serial.print("le capteur ");
+
 
      Serial.print(pos[i]);
+
 
      Serial.println(" est HS");
+
      if (mea[i] > (mes[i]*0.98 )) {
 +
        Serial.print("Le capteur ");
 +
        Serial.print(pos[i]);
 +
        Serial.println(" est HS");
 +
        err=true;
 +
      }
 
     }
 
     }
    else {
+
  }
      Serial.print("le capteur ");
+
}
      Serial.print(pos[i]);
+
 
      Serial.println(" fonctionne");
 
    }
 
    }
 
    //}
 
  }
 
  void loop() {
 
  test_capt_led_HS();
 
  OK();
 
  }
 
 
</source>
 
</source>
  

Version du 19 juin 2015 à 10:19


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.

Présentation du cahier des charges

♦Créer deux algorithmes permettant de tester le bon fonctionnement des capteurs et des LEDs.

♦Possibilité de modification de la carte d'adaptation.

♦Fabrication de la carte gestion.

♦ Réalisation des programmes permettant le fonctionnement de la carte gestion.

♣ Suite à des imprévus, nous avons dû abandonner la fabrication de la carte gestion et des programmes correspondant.

Planning

Planning prévisionnel

Taches image.JPG

Gantt image.JPG

Planning de la semaine d’inter-semestre

Gantt2.JPG


Planning2.JPG

Carte capteur

Procédure des tests

Procédure manuelle

Les tests ont été fait avec les programmes du projet inter-semestre précédent , en testant le bon fonctionnement des capteurs et des LEDs .

Procédure optimisée

Les courts-circuits , les LEDs et les capteurs ont été testés avec les programmes ci dessous réalisés lors de notre projet tutorés de ce semestre .

Modification de la carte d'adaptation-Choix de la résistance

Resistancebakir.png Si Vd=2V U=((5V-Vd)*R)/R+R1 = 3R/R+680 = (3*120)/800 = 360/800= 0.45V I=U/R = 0.45/120=3.75mA


Nous avons modifié la carte d'adaptation en mettant une résistance de 120ohm

Capture22.png
Capture11.png























































Sous-programme

Test des courts-circuits

Ce test permet de détecter les courts-circuits entre le Vcc et la masse .


 
  void test_cc(){
  int val = analogRead(A4);
  if(val>512)
  {
    Serial.print("court-circuit entre VCC et la masse!!!");
    while(1);
   }
  }

Test des LEDs

Ce test permet de détecter un problème ente 2 bornes de la LED , ou si une piste est coupée sur le circuit alimentant la LED .

   char * pos[] = {"cote gauche", "milieu gauche", "milieu droit", "cote droit"};
  char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
  char ledCNY[4]={ 4,3,2,5 };
  char capt[4]={ A2,A3,A1,A0};
  char led[] = {6, 7, 9, 8 };

  void test_led()
  {
    Serial.println("Poser la carte sur une surface noire");
    Serial.println("Puis appuyez sur une touche");
    OK();
  
    //partie LED presence ligne
    for (char i = 0; i < 4; i++)
    {
      digitalWrite(led[i], HIGH);
      int val = analogRead(A4);
      digitalWrite(led[i], LOW);
      if (val < 92 * 0.75) 
      {
        Serial.print("Il y a une piste coupée sur le circuit de la LED ");
        Serial.println(pos[i]);
        err=true;
      }
      if(val > 92 * 1.25)
      {
        Serial.print("Il y a un court-circuit sur la LED ");
        Serial.println(pos[i]);
        err=true;
      }
    }
    Serial.println("");
    
    //partie LED CNY
    
    for (char i = 0; i < 4; i++)
    {
      unsigned int u2=0;
      char an[] = {
        A0, A1, A2, A3                };
      digitalWrite(ledCNY[i], HIGH);
      unsigned int u1 = analogRead(A4);
      for (int j = 0; j < 4; j++)
      {
        u2 += analogRead(an[j]);
      }
      u2 /= 4;
      digitalWrite(ledCNY[i], LOW);
      if( u1 < (0.75 *(413 + (-20/307) * u2)))
      {
        Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
        Serial.println(pos[i]);
        led_HS[i] = HIGH;
        err=true;
      }
      if( u1 > (1.25 *(413 + (-20/307) * u2)))
      {
        Serial.print("Il y a un court-circuit sur la LED du capteur ");
        Serial.println(pos[i]);
        led_HS[i] = HIGH;
        err=true;
      }
    }
    Serial.println("");
  }

Test des capteurs

Permet de détecter un problème dans les capteurs


♠Si la LED du capteur fonctionne

for (char i = 0; i < 4; i++)
  {
    unsigned int u2=0;
    char an[] = {
      A0, A1, A2, A3                };
    digitalWrite(ledCNY[i], HIGH);
    unsigned int u1 = analogRead(A4);
    for (int j = 0; j < 4; j++)
    {
      u2 += analogRead(an[j]);
    }
    u2 /= 4;
    digitalWrite(ledCNY[i], LOW);
    if( u1 < (0.75 *(413 + (-20/307) * u2)))
    {
      Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
      Serial.println(pos[i]);
      led_HS[i] = HIGH;
      err=true;
    }
    if( u1 > (1.25 *(413 + (-20/307) * u2)))
    {
      Serial.print("Il y a un court-circuit sur la LED du capteur ");
      Serial.println(pos[i]);
      led_HS[i] = HIGH;
      err=true;
    }
  }
  Serial.println("");
}           
//////////
void test_capt()
{
  int i;
  Serial.println("Poser la carte sur une surface clair");
  Serial.println("Puis taper sur ok");
  OK();
  for(i=0;i<4;i++)
  {
    if(led_HS[i]==0)
    {
      digitalWrite(ledCNY[i],0);
      int mes=analogRead(capt[i]);
      digitalWrite(ledCNY[i],1);
      delay(5);
      int mea=analogRead(capt[i]);
      digitalWrite(ledCNY[i],0);
      if(mea>(mes*0.95)){
        Serial.print("Il y a un probleme sur le circuit du capteur ");
        Serial.print(pos[i]);
        Serial.println(" est HS");
        err=true;
      }
    }
  }
}


♠Si la LED du capteur ne fonctionne pas

   char void test_capt_led_HS() {
  char led[4] = {
    4, 3, 2, 5
  };
  char capt[4] = {
    A2, A3, A1, A0
  };
  int i;
  int mes[4], mea[4];
  Serial.println("Poser la carte sur une surface sombre");
  Serial.println("Puis taper sur ok");
  OK();
  for (i = 0; i < 4; i++) {

    if(led_HS[i]==1)
    {

      mes[i] = analogRead(capt[i]);

    }
  }
  Serial.println("Exposez la carte a une lumiere forte");
  Serial.println("Puis taper sur ok");
  OK();
  for (i = 0; i < 4; i++) {

    if(led_HS[i]==1)
    {
      mea[i] = analogRead(capt[i]);


      if (mea[i] > (mes[i]*0.98 )) {
        Serial.print("Le capteur ");
        Serial.print(pos[i]);
        Serial.println(" est HS");
        err=true;
      }
    }
  }
}

Programme final

char * pos[] = {
  "cote gauche", "milieu gauche", "milieu droit", "cote droit"};
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
char ledCNY[4]={4,3,2,5};
char capt[4]={A2,A3,A1,A0};
char led[] = {6, 7, 9, 8 };

boolean err=false;
void setup() {
  for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
  Serial.begin(9600);
  Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
  test_cc();
}

void loop() {
  test_led();
  test_capt();
  if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3])) test_capt_led_HS();

  Serial.println(" ");
  if(err==false) Serial.println("Aucun probleme");
  err==false;
  Serial.println("Test termine");
  Serial.println("Taper sur entrer pour recommencer");
  Serial.println(" ");
  Serial.println(" ");
  OK();
}

//////////
void OK()
{
  char r;
  do {
    while (Serial.available() == 0);
    r = Serial.read();
  } 
  while ( r != 0x0d);
}
//////////
void test_cc(){
  Serial.println("Poser la carte sur une surface noire");
  Serial.println("Puis appuyez sur une touche");
  OK();
  int val = analogRead(A4);
  if(val>512)
  {
    Serial.print("Court-circuit entre VCC et la masse!!!");
    while(1);
  }
}
//////////
void test_led()
{
  Serial.println("Poser la carte sur une surface noire");
  Serial.println("Puis appuyez sur une touche");
  OK();

  //partie LED presence ligne
  for (char i = 0; i < 4; i++)
  {
    digitalWrite(led[i], HIGH);
    int val = analogRead(A4);
    digitalWrite(led[i], LOW);
    if (val < 92 * 0.75) 
    {
      Serial.print("Il y a une piste coupée sur le circuit de la LED ");
      Serial.println(pos[i]);
      err=true;
    }
    if(val > 92 * 1.25)
    {
      Serial.print("Il y a un court-circuit sur la LED ");
      Serial.println(pos[i]);
      err=true;
    }
  }
  Serial.println("");

  //partie LED CNY

  for (char i = 0; i < 4; i++)
  {
    unsigned int u2=0;
    char an[] = {
      A0, A1, A2, A3                };
    digitalWrite(ledCNY[i], HIGH);
    unsigned int u1 = analogRead(A4);
    for (int j = 0; j < 4; j++)
    {
      u2 += analogRead(an[j]);
    }
    u2 /= 4;
    digitalWrite(ledCNY[i], LOW);
    if( u1 < (0.75 *(413 + (-20/307) * u2)))
    {
      Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
      Serial.println(pos[i]);
      led_HS[i] = HIGH;
      err=true;
    }
    if( u1 > (1.25 *(413 + (-20/307) * u2)))
    {
      Serial.print("Il y a un court-circuit sur la LED du capteur ");
      Serial.println(pos[i]);
      led_HS[i] = HIGH;
      err=true;
    }
  }
  Serial.println("");
}           
//////////
void test_capt()
{
  int i;
  Serial.println("Poser la carte sur une surface clair");
  Serial.println("Puis taper sur ok");
  OK();
  for(i=0;i<4;i++)
  {
    if(led_HS[i]==0)
    {
      digitalWrite(ledCNY[i],0);
      int mes=analogRead(capt[i]);
      digitalWrite(ledCNY[i],1);
      delay(5);
      int mea=analogRead(capt[i]);
      digitalWrite(ledCNY[i],0);
      if(mea>(mes*0.95)){
        Serial.print("Il y a un probleme sur le circuit du capteur ");
        Serial.print(pos[i]);
        Serial.println(" est HS");
        err=true;
      }
    }
  }
}
//////////
void test_capt_led_HS() {
  char led[4] = {
    4, 3, 2, 5
  };
  char capt[4] = {
    A2, A3, A1, A0
  };
  int i;
  int mes[4], mea[4];
  Serial.println("Poser la carte sur une surface sombre");
  Serial.println("Puis taper sur ok");
  OK();
  for (i = 0; i < 4; i++) {

    if(led_HS[i]==1)
    {

      mes[i] = analogRead(capt[i]);

    }
  }
  Serial.println("Exposez la carte a une lumiere forte");
  Serial.println("Puis taper sur ok");
  OK();
  for (i = 0; i < 4; i++) {

    if(led_HS[i]==1)
    {
      mea[i] = analogRead(capt[i]);


      if (mea[i] > (mes[i]*0.98 )) {
        Serial.print("Le capteur ");
        Serial.print(pos[i]);
        Serial.println(" est HS");
        err=true;
      }
    }
  }
}

Amélioration du programme de la procédure optimisée