Capteur de reflectivité Pololu qtr 8rc

Bonjour, est ce que quelqu'un connait/possede ce capteur de lire ?
J'aurai besoin d'aide pour comprendre le code.

#include <PololuQTRSensors.h>

PololuQTRSensorsRC qtr((unsigned char[]) {3,4}, 2);
//  qtr ((uc[]) {pin}, nombre capteur) ;
void setup()
{
  Serial.begin(9600);
   //**********************************************//

}

void loop()
{
  unsigned int sensor[*****];
  unsigned int sensor2[*****];
  qtr.read(sensor);
  qtr.read(sensor2);
 
  Serial.println(sensor[*****]);
   Serial.println(sensor2[*****]);
  delay(100);
}

Voila, j'ai mis des etoile a ce qui me pose probleme.

Merci.

Jesis:
Bonjour, est ce que quelqu'un connait/possede ce capteur de lire ?
J'aurai besoin d'aide pour comprendre le code.

Voila, j'ai mis des etoile a ce qui me pose probleme.

Le code que tu as posté est incorrecte, un Serial.println() avec un tableau n'est pas possible.
Il manque aussi pas mal de petite chose, dans setup() il faut calibrer les capteurs et dans loop() les lire avec une boucle.

Regarde le sketch d'exemple fourni par pololu (+ commentaires), il est relativement complet :

#include <PololuQTRSensors.h>

#define NUM_SENSORS   8     // Nombre de capteurs
#define TIMEOUT       2500   // Temps avant d'ignoré la mesure et passé à la suivante
#define EMITTER_PIN   2      // Broche sur laquelle est câble l'émetteur du capteur

// Broche sur lesquels sont câblé les récepteurs IR
PololuQTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN); 

// Tableau d'entier dans lequel sera stocké le résultat des mesures de chaque capteur
unsigned int sensorValues[NUM_SENSORS];

// Variable d'itération pour les boucles
unsigned int i;

void setup()
{
  delay(500); // Temps d'attente pour laisser les capteurs se stabiliser

  for (i = 0; i < 400; i++)  // Calibration de chaque capteurs (~10sec)
    qtrrc.calibrate();      

  // Initialise le port série
  Serial.begin(9600);

  // Affiche les données de calibration minimum
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMinimumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  
  // Affiche les données de calibration maximum
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMaximumOn[i]);
    Serial.print(' ');
  }
  Serial.println();

  // Attente avant de démarrer la prise de mesure
  Serial.println();
  delay(1000);
}


void loop()
{
  // Lit tout les capteurs en une fois
  unsigned int position = qtrrc.readLine(sensorValues);

  // Autre version ne retournant pas de valeurs (plus simple)
  //qtrrc.read(sensorValues);

  // Affiche les valeurs mesurées par chaque capteurs
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(sensorValues[i] * 10 / 1001); // Calcul pour un affichage plus propre et lisible de la mesure
    Serial.print(' ');
  }
  Serial.print("    ");
  Serial.println(position);
  
  // Evite de "flooder" le port série
  delay(250);
}

Merci beaucoup ! je vais tester. Ou l'a tu trouver ? et en francais en plus !

Jesis:
Ou l'a tu trouver ? et en francais en plus !

librairies -> PololuQTRSensors -> exemples -> PololuQTRRCExample :wink:

Pour les commentaires en français c'est moi :slight_smile:

merci;

j'ai uploader le code dans le µc, mais le serial monitor n'affiche rien du tout .

Jesis:
j'ai uploader le code dans le µc, mais le serial monitor n'affiche rien du tout .

Tu as bien câblé ton capteur ? Tu as attendu ~15sec (temps de calibration) ?
Essaye avec l'exemple brute de la librairie "PololuQTRSensors" voir si ça fait pareil.

Tu as bien câblé ton capteur ?

je pense, j'ai fait en fonction du code, j'ai verifier si les led etait allumer. j'ai attendu .....
je ne trouve pas d'example similaire dans les exemple de lib .
Mais je pense que ca vient du code, car meme si aucun capteur ne serai connecter, le Serial m. renverrai quand mele une valeur. (non ?)

Jesis:
je pense, j'ai fait en fonction du code, j'ai verifier si les led etait allumer. j'ai attendu .....
je ne trouve pas d'exemple similaire dans les exemple de lib .
Mais je pense que ca vient du code, car meme si aucun capteur ne serai connecter, le Serial m. renverrai quand mele une valeur. (non ?)

Tu n'as pas un dossier example/PololuQTRRCExample dans la lib pololu ?

Sinon pour le bug du port série j'avais fait une petite erreur en copiant le code :

// Variable d'itération pour les boucles
unsigned int i;

c'est un int et non un char.

PS: lors de la phase de calibration il faut mettre un morceau de papier blanc à ~1.5cm du capteurs sinon il renverra toujours 0 :wink:

Merci, ca marche. Cepandant, j'ai des doute sur l'efficaciter. je met un papier blanc avec un trés fait au marqueur, mais la valeur ne change pas. je test.

Je vais faire un vrais cablage et je re aisserai.

Jesis:
Merci, ca marche. Cepandant, j'ai des doute sur l'efficaciter. je met un papier blanc avec un trés fait au marqueur, mais la valeur ne change pas. je test.

Je vais faire un vrais cablage et je re aisserai.

Faut utiliser un papier bien blanc pour la calibration, après pour le test il faut utiliser du ruban scotch noir d'électricien, du feutre noir c'est pas suffisant (ça renvoi quand même la lumière IR du capteur)

C'est bon, ca marche. J'ai fait un vrai cablage. Oui, apparrement, ca fonctionne uniqement avec du noir. Je crois que j'ai un capteur malade il renvoie toujours 0, ou peut etre non initialisé, je verai bien. Je vait faire des tests pour lire les capteur un par un et faire reagir une led en consequence (ou 8).
Merci, encore.

But, comment on fait pour lire un seul capteur ?

Ca y est, j'ai trouver. J'arrive a le faire reagir avec une led, Plus qu'a l'implanter sur le bot, Encore merci.

""Plus qu'a implanter dans le bot""........

Salut,

Voila, le meme code sur ma mega ne marche pas (seul les n° de pin change). Sur la UNO, il n'y a pas de souci.
Si quelqu'un a une idée...
Merci d'avance

Voila, le meme code sur ma mega ne marche pas (seul les n° de pin change). Sur la UNO, il n'y a pas de souci.

La librairie de pololu est complétement réalisé en utilisant l'api arduino, donc elle doit marcher de la même manière sur n'importe quelle carte arduino et les numéro de pin doivent être identique.

Et tu sur de ton calage ? Il n'y aucune raison que cela ne marche que sur une UNO.

mon, cablage est juste, il est fait avec une nappe, je peux pas me trompé.

J'ai essayé sur la Mega avec le meme code et sur les memes pin que la UNO, mais y a pas moyen.

Jesis:
mon, cablage est juste, il est fait avec une nappe, je peux pas me trompé.

J'ai essayé sur la Mega avec le meme code et sur les memes pin que la UNO, mais y a pas moyen.

humm bizarre, je vais ressortir ma mega pour tester.

Edit: Je viens de tester avec ma mega2560 et le code que j'ai posté avant (+ petite modif), ça marche sans probléme chez moi.
Hardware : Mega2560 + Arduino 0023 + lib pololu (derniére version)

Histoire d'être sur :

#include <PololuQTRSensors.h>

#define NUM_SENSORS   8     // Nombre de capteurs
#define TIMEOUT       2500   // Temps avant d'ignoré la mesure et passé à la suivante
#define EMITTER_PIN   2      // Broche sur laquelle est câble l'émetteur du capteur

// Broche sur lesquels sont câblé les récepteurs IR
PololuQTRSensorsRC qtrrc((unsigned char[]) {3, 4, 5, 6, 7, 8, 9, 10}, NUM_SENSORS, TIMEOUT, EMITTER_PIN); 

// Tableau d'entier dans lequel sera stocké le résultat des mesures de chaque capteur
unsigned int sensorValues[NUM_SENSORS];

// Variable d'itération pour les boucles
unsigned int i;

void setup()
{
  delay(500); // Temps d'attente pour laisser les capteurs se stabiliser
  
  pinMode(EMITTER_PIN, OUTPUT);

  for (i = 0; i < 400; i++)  // Calibration de chaque capteurs (~10sec)
    qtrrc.calibrate();      

  // Initialise le port série
  Serial.begin(9600);

  // Affiche les données de calibration minimum
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMinimumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  
  // Affiche les données de calibration maximum
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(qtrrc.calibratedMaximumOn[i]);
    Serial.print(' ');
  }
  Serial.println();

  // Attente avant de démarrer la prise de mesure
  Serial.println();
  delay(1000);
}


void loop()
{
  // Lit tout les capteurs en une fois
  unsigned int position = qtrrc.readLine(sensorValues);

  // Autre version ne retournant pas de valeurs (plus simple)
  //qtrrc.read(sensorValues);

  // Affiche les valeurs mesurées par chaque capteurs
  for (i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(sensorValues[i] * 10 / 1001); // Calcul pour un affichage plus propre et lisible de la mesure
    Serial.print(' ');
  }
  Serial.print("    ");
  Serial.println(position);
  
  // Evite de "flooder" le port série
  delay(250);
}

QTr -> Arduino
VCC -> 5V
GND -> GND
Vled -> D2
Q1 -> D3
Q2 -> D4
Q3 -> D5
Q4 -> D6
Q5 -> D7
Q6 -> D8
Q7 -> D9
Q8 -> D10

Merci beaucoup pour ton aide ! C'est une Mega 2560 (dfr)...

Ah.. je vien de voir le edit !
Merci, j'utilise arduino 21. La meme lib que toi et le meme code ( a la difference d'une ligne).
Ca me fait pareil avec mon capteur US, il marche sur la uno mais pas sur la mega....

Jesis:
Merci, j'utilise arduino 21. La meme lib que toi et le meme code ( a la difference d'une ligne).
Ca me fait pareil avec mon capteur US, il marche sur la uno mais pas sur la mega....

Peut être un défaut matériel alors ? Si le même probléme est présent avec un autre type de capteur.
Vu que c'est pas une arduino mega2560 officiel ça peut aussi venir du câblage de la carte, de la qualité des composants, ...