Détecteurs infrarouge du miniQ 2WD

Analyse du détecteur

Le robot mini-Q est équipé de cinq couples leds/photo-transistors (infra-rouge) dirigés vers le bas. Ils sont destinés à mesurer la réflexion du support sur lequel roule le robot.

Sur le schéma structurel de la carte entourer la partie concernant les 5 détecteurs infrarouges.

Quel est la référence de ces détecteur ?

D'après la documentation technique la structure interne du capteur est la suivante :

Reproduire ci-dessous le schéma d'une cellule :

Quel est l'état du photo-transistor lorsqu'il ne reçoit pas de lumière (Noir) ?

Même question lorsque la lumière infra-rouge est réfléchie (Blanc) ?

Rechercher dans la documentation technique son temps de monté et son temps de descente :

Si vous prenez un support blanc et que vous fixez un scotch noir vous arriverez à détecter le support noir qui n'a pas la même réflectance infra-rouge que le support blanc.

Les sensibilités des capteurs ne sont pas identiques, un calibrage de chacun des capteurs peut se faire par le programme simple :

1
int data[5]={0};// Valeur des 5 capeurs
2
void setup(){
3
    Serial.begin(9600);
4
}
5
void Read_IRLine(void){ // Lecture des capteurs de ligne
6
7
    data[0]=analogRead(A0); // gauche
8
    data[1]=analogRead(A1);
9
    data[2]=analogRead(A2); // milieu
10
    data[3]=analogRead(A3);
11
    data[4]=analogRead(A4); // droite
12
}
13
14
void loop(){
15
    Read_IRLine();
16
    for (char i=0;i<5;i++){
17
        Serial.print(data[i]);
18
        Serial.print(" ");
19
    }
20
    Serial.println(" ");
21
    delay(1000);
22
}
23

Remplir le tableau suivant :

Noir

Blanc

Seuil de détection

data[0]

data[1]

data[2]

data[3]

data[4]

Suiveur de ligne.

Dans cette partie vous devez utiliser la fonction Motor_Control de l'activité précédente et la fonction Read_IRLine() ci dessous pour réaliser un programme permettant au robot de suivre une ligne :

Une première étape ci-dessous sans la partie commande moteur à tester :

1
/* Suiveur de ligne sans Commande moteur : 
2
3
La commande des moteurs est simulee par une sortie au terminal serie.
4
5
*/ 
6
int data[5]={0};// Valeur des 5 capeurs
7
8
/* Les seuils calculés avec les valeurs de calibration prises sur la
9
   piste.
10
11
 */
12
const int SEUIL0 = (290 + 986)/2;
13
const int SEUIL1 = (270 + 988)/2;
14
const int SEUIL2 = (384 + 988)/2;
15
const int SEUIL3 = (448 + 990)/2;
16
const int SEUIL4 = (388 + 990)/2;
17
18
19
void setup(){
20
    Serial.begin(9600);
21
}
22
23
void Read_IRLine(void){ // Lecture des capteurs de ligne
24
25
    data[0]=analogRead(A0); // gauche
26
    data[1]=analogRead(A1);
27
    data[2]=analogRead(A2); // milieu
28
    data[3]=analogRead(A3);
29
    data[4]=analogRead(A4); // droite
30
}
31
32
void loop(){
33
    Read_IRLine();
34
    for (char i=0;i<5;i++){
35
        Serial.print(data[i]);
36
        Serial.print(" ");
37
    }
38
    Serial.println(" ");
39
    if(data[1]< SEUIL1 && data[3] > SEUIL3)// SI ligne noir a gauche 
40
    {
41
      Serial.println("Tourner a gauche");
42
    }
43
    else if(data[1] > SEUIL1 && data[3] < SEUIL3) // SI ligne noir a droite
44
    {
45
      Serial.println("Tourner a droite");
46
    }
47
    else if (data[1] > SEUIL1 && data[2] < SEUIL2 && data[3] > SEUIL3)
48
    {
49
      Serial.println("Avancer ");
50
    }
51
    else 
52
    {
53
      Serial.println("Doucement ..");
54
    }
55
    delay(1000);
56
}
57

Réaliser la fusion entre la partie commande moteur et le programme ci-dessus afin de répondre à l'algorithme de suivi de ligne.