Aller au contenu


Photo
- - - - -

Test du TF Mini Plus

TF Mini Plus Benewake télémètre Uart Machine à état switch case

  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 29 septembre 2019 - 02:35

Dans le cadre de ce projet : Exemple montrant comment préparer une voiture de course pour la toulouse robot race 

 

Parmi les différents capteurs de distances qu'on peut trouver, j'ai utilisé le capteur TF Mini plus
telemetre-tf-mini-plus-de-benewake.jpg

Il s'agit d'un capteur de distance résistant à l'eau, compact, léger, très robuste et économe en énergie, capable de mesurer jusqu'à 12m, Bref il est parfaitement adapté pour une activité en extérieur comme la toulouse robot race.

 

Ce module est alimenté en 5V mais communique avec un microcontrôleur type Arduino ou compatible via une liaison UART avec un niveau logique de 3.3V. Pour le faire fonctionner avec mon arduino méga fonctionnant en niveau logique 5V, j'ai utilisé  un convertisseur de niveaux logique .

 

Fils pour les connexion : 

Rouge V+ connecté au 5V de l'arduino
Noir GND connecté au GND de l'arduino
Bleu/Vert TFMINI plus TX connecté au RX1 de l'arduino 
Blanc TFMINI plus RX connecté au TX1 de l'arduino (optionnel )

 

Note : Il devrait être possible de connecter directement le TX du TF Mini plus sur le RX1 de l'arduino mega sans passer par le convertisseur de niveau logique, le 3.3V devant être suffisant pour être considérer comme un 1 logique sur un niveau logique 5V mais la moindre erreur pourrait endommager votre capteur... Donc la prudence est de mise...

Le projet du code de test utilisé : 

 

 

 

Ce projet vous montre un exemple de code pour lire les distance avec le capteur TF Mini Plus et de manière plus générale, comment faire un décodage de trame uart avec une machine à état via un switch case=)

En espérant que cela vous soit utile :) N'hésitez pas à poser des questions ou faire des remarques. 

 

 

Copie de sauvegarde au cas où l'accès à arduino cc ne serait pas disponible :  

/** 
 * 
 * Simple sketch to test the TF Mini PLUS from Benewake
 * TF Mini plus is connected to serial 1, 
 * Computer display received value using Serial
 * Code made by Mike118 from Robot Maker 
 * Note : Delay are used only for display convenience in tests sketch
 * => do not use delay functions in real project
 * 
 **/

uint16_t count = 0;
uint16_t error = 0;

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {
  uint16_t distance = readTFMini1();
  Serial.print(F("Time : "));
  Serial.println(millis());
  Serial.print(F("Count : "));
  Serial.println(count);
  Serial.print(F("Error : "));
  Serial.println(error);
  Serial.print(F("Distance : "));
  Serial.println(distance);
  Serial.println("");

  delay(1000);
}

uint16_t readTFMini1() {
 uint8_t current;
 static uint8_t n = 0;
 static uint8_t sum = 0;
 static uint16_t distance = 0;
 static uint16_t distanceOut = 0;
 
 while(Serial1.available()) {
  current = Serial1.read();

  switch(n) {

   case 0:
    if(current == 0x59) {
     sum += current;
     n++;
    }
    break;

   case 1:
    if(current == 0x59) {
     sum += current;
     n++;
    } else
     n = 0;
    break;

   case 2:
    distance = current;
    sum += current;
    n++;
    break;

   case 3:
    distance += current << 8;
    sum += current;
    n++;
    break;

   case 4:
    sum += current;
    n++;
    break;

   case 5:
    sum += current;
    n++;
    break;

   case 6:
    sum += current;
    n++;
    break;

   case 7:
    sum += current;
    n++;
    break;

   case 8:
    if(sum == current) {
     if(distance != 65535) {
      distanceOut = distance;
      // We get a new measure chose what you want to do here 
      count++; // I choose to increment a global value ... 
     }
    } else {
     // Error occured, choose what you want to do here ... 
      error++; // I choose to increment a global value ... 
    }
    sum = 0;
    n = 0;
    break;

  }
 }
 return distanceOut;  // Allways return the latest good value 
}


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 04 octobre 2019 - 01:42

Note : 

 

Le TF Mini Plus est un capteur très bavard dès l'allumage, par conséquent si vous le branchez sur le serial 0 de votre arduino il y a de fortes chance qu'en envoyant des données sur RX il mette l'arduino en mode bootloader . 

Voir un sujet anglais qui traite du même problème avec un module RFID 

Dans ce cas il vous faut soit brancher le RX que quand l'arduino est bien démarrée soit allumer l'alimentation du capteur avec votre arduino ( quand elle allumera l'alimentation du capteur c'est à fortiori qu'elle sera bien démarrée. ) 

 

De même il vous faudra débrancher le capteurs quand vous souhaitrez programmer votre carte arduino car impossible de programmer la carte arduino quand un capteur est branché sur les pins RX et TX de votre arduino, car ces pins qui servent aussi à programmer la carte arduino sont " parasité " par le capteur qui est branché dessus. 

 

 

Pour ma part afin de régler le problème dans le cadre du projet de robot voiture de course j'ai décidé de brancher uniquement le pin TX du TF mini plus sur le pin RX de l'arduino en passant par un interrupteur. Il me faut donc d'abord allumer le robot puis une fois qu'il est bien allumé basculer l'interrupteur pour connecter le TF Mini plus à l'arduino.  De même pour programmer l'arduino il me suffit d'appuyer sur cet interrupteur pour déconnecter le TF mini plus. 

 

Vous pouvez aussi simplement faire le choix de complètement contourner le problème en le branchant sur un autre Serial si un autre port série est disponible ou bien d'utiliser du Soft Serial avec deux autre pins...


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#3 Frenchmonster

Frenchmonster

    Nouveau membre

  • Membres
  • 3 messages

Posté 10 mai 2021 - 12:36

Bonjour, je suis actuellement en cpge et j'ai vu que ce capteur vous a été utile pour la conception d'une voiture télécommandé, serait-il possible de prendre contact afin que vous m'aidiez à optimiser mon travail sur l'étude de ce capteur dans le cadre de mon TIPE.

Merci de votre réponse.

Mekidiche 



#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 10 mai 2021 - 02:27

Vous pouvez poser des questions spécifiquement sur ce capteur dans ce sujet du forum. 
Pour de l'aide spécifique à votre TIPE il y a un espace dédié ou vous pouvez créer un sujet : https://www.robot-ma...ojets-scolaire/


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#5 Frenchmonster

Frenchmonster

    Nouveau membre

  • Membres
  • 3 messages

Posté 12 mai 2021 - 01:19

bonjour, merci de votre réponse. concernant votre code, je ne comprends pas la différence entre les différents "case" car il me semble qu'ils sont identiques.

Merci de votre réponse et bonne journée.

Mekidiche



#6 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 952 messages
  • Gender:Male

Posté 12 mai 2021 - 04:38

Bonjour,

il y a en effet des case qui sont identiques.

ça vient du fait qu'on ne regarde qu'une partie de la frame, qui est constituée comme suit (cf https://github.com/T...duct Manual.pdf, section 5.3) :
0 -> 0x59 (vérifié par Mike)
1 -> 0x59 (vérifié par Mike)

2 -> distL : bits de poids faible de la distance : lu par Mike

3 -> distH : bits de poids fort de la distance : lu par Mike

4 et 5 -> force du signal (ignoré par Mike, sauf pour le contrôle du checksum)

6 et 7 -> température interne (ignoré par Mike sauf pour le contrôle du checksum)

8 -> checksum : Mike vérifie qu'elle est correcte

 

Vu que Mike ignore la force du signal et la température, c'est normal que le code est le même pour les case 4 à 7 : il consiste simplement à prendre en compte l'octet dans la checksum et à passer à l'octet suivant. Si jamais tu t'intéresse à la force du signal ou à la température du signal, alors il faudra modifier les case correspondants sur l'exemple des case 2 et 3 (distance)



#7 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 246 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 13 mai 2021 - 02:30

Sandro a parfaitement résumé ce que je fais,

J'ai fais le choix de proposer un case où tous les cas sont défini pour facilement pouvoir modifié le code si c'était souhaité mais j'aurais aussi pu faire un truc du genre : 


uint16_t readTFMini1() {
 uint8_t current;
 static uint8_t n = 0;
 static uint8_t sum = 0;
 static uint16_t distance = 0;
 static uint16_t distanceOut = 0;
 
 while(Serial1.available()) {
  current = Serial1.read();

  switch(n) {

   case 0:
    if(current == 0x59) {
     sum += current;
     n++;
    }
    break;

   case 1:
    if(current == 0x59) {
     sum += current;
     n++;
    } else
     n = 0;
    break;

   case 2:
    distance = current;
    sum += current;
    n++;
    break;

   case 3:
    distance += current << 8;
    sum += current;
    n++;
    break;

   case 8:
    if(sum == current) {
     if(distance != 65535) {
      distanceOut = distance;
      // We get a new measure chose what you want to do here 
      count++; // I choose to increment a global value ... 
     }
    } else {
     // Error occured, choose what you want to do here ... 
      error++; // I choose to increment a global value ... 
    }
    sum = 0;
    n = 0;
    break;
   default :  // Case 4 5 6 and 7
    sum += current; // ignoring the data, just storing it for the checksum
    n++;
    break;

  }
 }
 return distanceOut;  // Allways return the latest good value 
}

Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#8 Frenchmonster

Frenchmonster

    Nouveau membre

  • Membres
  • 3 messages

Posté 18 mai 2021 - 03:57

d'accord je comprends mieux. Merci à vous pour votre aide.

M.Mekidiche







Aussi étiqueté avec au moins un de ces mots-clés : TF Mini Plus, Benewake, télémètre, Uart, Machine à état, switch case

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users