Table des matières:

Benewake TFmini - LiDAR bon marché avec Teensy 3.5 : 3 étapes
Benewake TFmini - LiDAR bon marché avec Teensy 3.5 : 3 étapes

Vidéo: Benewake TFmini - LiDAR bon marché avec Teensy 3.5 : 3 étapes

Vidéo: Benewake TFmini - LiDAR bon marché avec Teensy 3.5 : 3 étapes
Vidéo: DIY Laser Scanner with TfMini and Raspberry Pi | ROS Tutorial for beginners #7 2024, Novembre
Anonim
Benewake TFmini - LiDAR bon marché avec Teensy 3.5
Benewake TFmini - LiDAR bon marché avec Teensy 3.5

L'unité LiDAR Benewake TFmini est un petit capteur LiDAR très léger pour environ 50 $ canadiens. La documentation était bonne, mais incomplète. Il a fourni des détails sur la réception des données du capteur, mais a oublié de mentionner le signal nécessaire pour mettre le capteur en mode par défaut afin qu'il envoie réellement les données. Heureusement, c'était dans le document de débogage.

C'est donc ce qui a fonctionné pour moi, et c'est vraiment un appareil facile à utiliser.

J'ai choisi d'utiliser un Teensy 3.5 car il possède plusieurs ports série HW, il est plus que suffisamment rapide pour recevoir des données et les traiter sans laisser les données s'accumuler. Juste pour le plaisir, j'ai utilisé la bibliothèque Teensy Threading pour séparer l'obtention des données du reste du code.

Étape 1: connexion de TFmini à Teensy 3.5 (similaire à Arduino Mega)

Connexion de TFmini à Teensy 3.5 (similaire à Arduino Mega)
Connexion de TFmini à Teensy 3.5 (similaire à Arduino Mega)

Cet exemple nécessite deux connexions série: une vers le TFmini et une pour afficher les résultats sur votre ordinateur. Pour cette raison, et pour autant que je sache, cette raison seulement, cet exemple particulier ne fonctionnera sur rien en dessous d'un Arduino Mega ou Teensy 3.x.

Cela étant dit, pour les applications ne nécessitant pas de sortie série pour imprimer sur un écran d'ordinateur, le même projet doit être adaptable.

Utilisation du faisceau de câbles inclus:

1) connectez le fil noir à Teensy GND (si vous utilisez une source de différence VDC, assurez-vous que la terre va également à GND sur Teensy)

2) connectez le fil rouge à Teensy Vin (ou source 5VDC)

3) connectez le fil blanc (TFmini RX) à la broche 1 sur Teensy (Serial1 TX)

4) connectez le fil vert (TFmini TX) à la broche 0 sur Teensy (Serial RX)

Le faisceau de câbles inclus était trop petit pour que je puisse travailler avec une planche à pain, j'ai donc coupé l'extrémité opposée au TFmini et soudé les fils à une planche à pain, ajouté un connecteur JST au panneau de rupture et fait un cavalier JST vers mâle faisceau de câbles.

Étape 2: Codez pour l'exécuter

Utilisez le code suivant (pour Teensy 3.5) ou téléchargez le fichier joint:

Pour Arduino Mega, le threading ne fonctionnera probablement pas. Déplacez le code de la fonction readLiDAR vers la boucle principale et supprimez tout ce qui concerne le threading.

#include #include "TeensyThreads.h"

// Utilisation du câble fourni:

// - Noir = GND (connecté à GND) // - Rouge = 5V (4,5 - 6,0V) (connecté à Vin sur Teensy 3.5, ou 5V sur Arduino) // - Blanc = TFmini RX (alias connecter au microcontrôleur TX, pin1 sur Teensy 3.5) // - Vert = TFmini TX (alias connecter au microcontrôleur RX, pin0 sur Teensy 3.5) // REMARQUE: pour ce croquis, vous avez besoin d'un microcontrôleur avec des ports série supplémentaires au-delà de celui connecté au câble USB / / Cela inclut Arduino MEGA (utilisez Serial1), Teensy (3.x) (utilisez l'une des connexions série HW disponibles)

int volatile liDARval = 0;

void readLiDAR(){

// Format de données pour Benewake TFmini // =============================== // 9 octets au total par message: // 1) 0x59 // 2) 0x59 // 3) Dist_L (bas 8 bits) // 4) Dist_H (haut 8 bits) // 5) Strength_L (bas 8 bits) // 6) Strength_H (haut 8 bits) // 7) Octets réservés // 8) Degré de qualité du signal d'origine // 9) Bit de parité de somme de contrôle (faible 8 bits), somme de contrôle = octet1 + octet2 +…+octet8. Ce n'est qu'un faible 8 bits cependant while(1){ // Continuez pour toujours while(Serial1.available()>=9) // Lorsqu'au moins 9 octets de données sont disponibles (nombre d'octets attendu pour 1 signal), alors read { if((0x59 == Serial1.read()) && (0x59 == Serial1.read())) // octet 1 et octet 2 { unsigned int t1 = Serial1.read(); // octet 3 = Dist_L unsigned int t2 = Serial1.read(); // octet 4 = Dist_H t2 <<= 8; t2 += t1; liDARval = t2; t1 = Serial1.read(); // octet 5 = Strength_L t2 = Serial1.read(); // octet 6 = Strength_H t2 <<= 8; t2 += t1; for(int i=0; i<3; i++)Serial1.read(); // les octets 7, 8, 9 sont ignorés } } } }

void setup()

{ Serial1.begin(115200); // HW Serial pour TFmini Serial.begin (115200); // Sortie série via USB vers délai d'ordinateur (100); // Donnez un peu de temps pour que les choses démarrent // Réglez sur le mode de sortie standard Serial1.write(0x42); Serial1.write (0x57); Serial1.write(0x02); Serial1.write(0x00); Serial1.write(0x00); Serial1.write(0x00); Serial1.write(0x01); Serial1.write(0x06); // Configuration du thread pour lire l'entrée série de TFmini threads.addThread(readLiDAR); }

boucle vide()

{ délai(10); // Je ne veux pas lire trop souvent des échantillons TFmini à 100 Hz Serial.println(liDARval); }

Étape 3: Utilisation d'Arduino IDE Afficher les résultats dans le traceur série

Utilisation d'Arduino IDE Afficher les résultats dans le traceur série
Utilisation d'Arduino IDE Afficher les résultats dans le traceur série

Vous pouvez utiliser la méthode de votre choix, mais l'IDE d'Arduino tracera bien les résultats.

Connectez-vous au Teensy et ouvrez Serial Monitor. Assurez-vous que le débit en bauds est défini sur 115 200.

Conseillé: