How to Integrate SFA2000B Laser Rangefinder Module into Drone Flight Controllers via ArduPilot (AP) Firmware

Comment intégrer le module de télémètre laser SFA2000B dans les contrôleurs de vol de drone via le micrologiciel ArduPilot (AP)

Pour les passionnés de drones, les ingénieurs et les opérateurs de drones commerciaux, l'intégration d'un télémètre haute performance comme le SFA2000B L'intégration de la SFA2000B dans le système de vol de votre drone est essentielle pour des tâches telles que l'atterrissage de précision, l'évitement d'obstacles et le maintien de l'altitude. Le SFA2000B, avec sa portée maximale de 2000m (de nuit), son alimentation 3.3V-5V et sa communication série TTL, offre une utilité exceptionnelle, mais il nécessite des étapes spécifiques pour fonctionner avec le SFA2000B. Firmware ArduPilot (AP) (le logiciel libre le plus populaire pour les drones).
 
Dans ce guide, nous décomposons le processus en configuration du matériel, adaptation du protocole, configuration du micrologiciel de l'AP et validation-Avec des étapes concrètes, des diagrammes et des conseils de dépannage pour assurer une intégration en douceur. Que vous soyez un amateur utilisant un contrôleur de vol Pixhawk ou un professionnel construisant un drone commercial, cet article vous aidera à relier la SFA2000B au cerveau de votre drone.

Préparatifs essentiels avant l'intégration

Avant de vous lancer dans le câblage et le codage, vérifiez que vous disposez de tous les outils et composants nécessaires. Sauter cette étape conduit souvent à des erreurs évitables (par exemple, des modules grillés ou aucune transmission de données).

1.1 Composants requis

Composant Spécifications et objectifs
Télémètre laser
Interface série TTL (3,3V), connecteur 0,8WTB-6Y-2, portée minimale de 3m, vitesse de transmission par défaut de 115200bps
Contrôleur de vol compatible AP
Pixhawk 2.4.8/4/6 (le plus courant), avec au moins un port UART libre (par ex. TELEM2, GPS2)
Adaptateur USB-TTL (CH340)
Pour tester la communication série du CDF2000B avant de le connecter au contrôleur de vol.
Fils blindés Dupont
Réduire les interférences électromagnétiques (EMI) provenant des moteurs/ESC du drone.
Module d'alimentation externe 3,3V/1A (en option)
Si le port 3.3V du contrôleur de vol ne peut pas fournir 500mA (le courant de démarrage maximum du SFA2000B)

1.2 Outils logiciels

  • Planificateur de mission: La station sol officielle pour ArduPilot (télécharger) ici). Permet de configurer les paramètres du contrôleur de vol et de valider les données.
  • SSCOM/SecureCRT: Outils de débogage série pour tester le protocole du CDF2000B (envoi de commandes, vérification des données de distance).
  • Code source ArduPilot (optionnel): Pour les utilisateurs avancés qui ont besoin de compiler un micrologiciel personnalisé (par exemple, une portée continue de 10 Hz).
Étape 1 : Test du protocole série du SFA2000B (critique !)

Le SFA2000B utilise un protocole hexadécimal personnalisé (et non MAVLink, la langue maternelle d'ArduPilot). Tout d'abord, confirmez que le module fonctionne de manière autonome afin d'exclure tout défaut matériel.

1.1 Connecter le SFA2000B à un adaptateur USB-TTL

Connectez le module à votre ordinateur à l'aide d'un adaptateur USB-TTL. Suivez le brochage de la fiche technique du SFA2000B :

Broche de l'adaptateur USB-TTL SFA2000B Broche Description
3.3V
Broche 5 (VCC)
Alimenter le module (ne jamais utiliser 5V - risque de brûlure !)
GND
Broche 6 (GND)
Terrain d'entente (essentiel pour une communication stable)
TXD
Broche 2 (RXD)
L'ordinateur envoie des commandes au CDF2000B
RXD
Broche 3 (TXD)
Le SFA2000B envoie les données de distance à l'ordinateur
Wiring diagram showing SFA2000B laser rangefinder connected to a CH340 USB-TTL adapter, with pin labels for 3.3V, GND, TXD, and RXD.
1.2 Envoi de commandes et vérification des données
Ouvrez SSCOM et configurez le port série :
 
  • Vitesse de transmission : 115200bps
  • Bits de données : 8, bits d'arrêt : 1, Parité : Aucune
  • Cochez les cases “Envoi d'hexagones” et “Affichage d'hexagones”

Essai 1 : Commande de télémétrie unique

Envoyer le commande à un coup (extrait de la fiche technique du SFA2000B) :
				
					55 AA 88 FF FF FF FF 84
				
			

Le module renvoie une réponse du type

				
					55 AA 88 01 FF 4E 23 C8
				
			
  • 55 AA: En-tête de la trame (confirme la validité des données)
  • 01: Statut (1 = succès, 0 = échec)
  • 4E 23: Données relatives à la distance (hex → décimal = 20003 → diviser par 10 → 2000.3m)
  • C8: Somme de contrôle (validation : additionner les octets 1-7, prendre les 8 derniers bits)

Si la réponse indique une distance valide (correspondant à la distance réelle de la cible), le module fonctionne. Si ce n'est pas le cas, vérifiez le câblage ou contactez le fabricant (le SFA2000B bénéficie d'une garantie d'un an).

Étape 2 : Câbler le SFA2000B au contrôleur de vol

Connectez maintenant le module au port UART libre du contrôleur de vol (nous utiliserons TELEM2 pour cet exemple).

2.1 Schéma de câblage (Pixhawk 4 + SFA2000B)
Pixhawk 4 TELEM2 Pin SFA2000B Broche Description
3.3V
Broche 5 (VCC)
Alimentation (utiliser un port externe 3,3V/1A si le port 3,3V n'est pas assez puissant)
GND
Broche 6 (GND)
Terrain d'entente
TX (Envoi du contrôleur de vol)
Broche 2 (RXD)
Le contrôleur de vol envoie des commandes de télémétrie au module
RX (réception du contrôleur de vol)
Broche 3 (TXD)
Le contrôleur de vol reçoit les données de distance du module
Wiring diagram of SFA2000B laser rangefinder connected to Pixhawk 4 flight controller’s TELEM2 port, with labels for power, ground, TX, and RX.
2.2 Conseils essentiels en matière de câblage
  • Fils blindés: Utilisez des câbles blindés pour TX/RX afin de réduire les interférences électromagnétiques provenant des moteurs (les câbles non blindés entraînent une altération des données).
  • Isolation de la puissance: Si le port 3.3V du contrôleur de vol ne peut pas fournir 500mA, connectez un module externe 3.3V/1A (par exemple, un régulateur abaisseur 3.3V Pololu) pour éviter les baisses de tension.
  • Protection des broches: Recouvrez les broches non utilisées (par exemple, Pin 1 : Power-EN) avec du ruban adhésif pour éviter les courts-circuits.
Étape 3 : Configuration des paramètres du micrologiciel ArduPilot (AP)

ArduPilot ne supporte pas nativement le protocole du SFA2000B, nous utiliserons donc le protocole Capteur sériel personnalisé (AP 4.3.0+) pour transmettre les données du module au contrôleur de vol.

3.1 Connecter le planificateur de missions au contrôleur de vol
  1. Alimentez le contrôleur de vol et connectez-le à votre ordinateur via USB.
  2. Ouvrez le planificateur de missions → Sélectionnez le port COM correct → Cliquez sur “Connecter”.
  3. Aller à la page Config/Tuning → Arbre de paramètres complet (c'est là que nous modifierons tous les paramètres).
3.2 Configuration du port UART (TELEM2)

Tout d'abord, configurez le port TELEM2 du contrôleur de vol pour qu'il communique avec le CDF2000B :

Paramètres Valeur Description
SERIAL2_BAUD
115200
Correspondre à la vitesse de transmission par défaut du CDF2000B
PROTOCOLE_SÉRIE2
23
Activer le mode “Custom Sensor” (critique !)
SERIAL2_OPTIONS
Pas d'options spéciales (régler à 1024 si l'EMI est un problème)
3.3 Configuration du télémètre (RangeFinder1)

Ensuite, indiquez à ArduPilot de traiter le SFA2000B comme un télémètre :

Paramètres Valeur Description
RNGFND1_TYPE
32
Sélectionner “Custom Serial” (pour les protocoles personnalisés)
RNGFND1_MIN_CM
300
Portée minimale (3m = 300cm, correspond à la zone aveugle du SFA2000B)
RNGFND1_MAX_CM
200000
Portée maximale (2000m = 200000cm)
RNGFND1_SCALE
0.1
Convertir les données du module (diviser par 10 : 20003 → 2000.3m)
RNGFND1_ORIENT
25
Orientation du montage (25 = vers le bas, pour le maintien de l'altitude ; 0 = vers l'avant pour l'évitement des obstacles)
3.4 Définir le format des données du CDF2000B

Enfin, apprenez à ArduPilot à analyser la réponse hexadécimale du SFA2000B (frame : 55 AA 88 01 FF XX XX YY):

Paramètres Valeur Description
CUST_SENSOR_TYPE
1
Type de capteur = Télémètre
CUST_SERIAL_PORT
2
Utiliser TELEM2 (port 2) pour la communication
CUST_DATA_LEN
8
La réponse du SFA2000B est longue de 8 octets
CUST_HEADER1
0x55
Premier octet de l'en-tête de la trame
CUST_HEADER2
0xAA
Deuxième octet de l'en-tête de la trame
CUST_DATA_OFFSET
5
Les données relatives à la distance commencent à l'octet 5 (XX dans la trame)
CUST_DATA_BYTES
2
Les données de distance sont de 2 octets (16 bits)
CUST_ENDIAN
Little-endian (vérifiez avec votre module - la plupart des unités SFA2000B utilisent little-endian)
Screenshot of Mission Planner’s Full Parameter Tree showing custom sensor parameters (CUST_HEADER1, CUST_DATA_OFFSET) configured for the SFA2000B rangefinder.
Étape 4 : Envoi de commandes de télémétrie à partir du contrôleur de vol

Le CDF2000B n'enverra pas de données s'il ne reçoit pas de commande. Nous utiliserons la commande ArduPilot Script Lua pour que le contrôleur de vol envoie des commandes automatiquement.

4.1 Créer un script Lua
  1. Dans le planificateur de missions, allez à Config/Tuning → Scripts Lua.
  2. Cliquez sur “Nouveau script” et collez le code ci-dessous (envoie une seule commande de télémétrie toutes les 1 secondes) :
				
					-- Script de commande de télémétrie de l'AFA2000B (1Hz)
local serial_port = serial.open(2, 115200) -- Port 2 = TELEM2, 115200bps
local single_range_cmd = string.char(0x55, 0xAA, 0x88, 0xFF, 0xFF, 0xFF, 0xFF, 0x84) -- Commande de télémétrie unique

-- Envoi de la commande toutes les 1000ms (1Hz)
function send_command()
    serial_port:write(single_range_cmd)
    gcs:send_text(6, "SFA2000B : Command Sent (1Hz)") -- Enregistrement vers la station au sol
    return send_command, 1000 -- Répétition toutes les 1 secondes
fin

-- Démarre la boucle
return send_command()
				
			
  1. Enregistrer le script sous sfa2000b_cmd.lua et cliquez sur “Load Script” (le contrôleur de vol le lancera au démarrage).
4.2 Pour la recherche continue (5Hz/10Hz)

Pour utiliser le mode continu du SFA2000B (par exemple, 10Hz pour les drones se déplaçant rapidement), remplacez le bouton single_range_cmd avec une commande continue :

  • Commande 5Hz : 55 AA B9 FF FF FF FF D4 (somme de contrôle = 0x55+0xAA+0xB9+0xFF*4 = 0xD4)
  • Commande 10Hz : 55 AA C9 FF FF FF FF C4 (somme de contrôle = 0x55+0xAA+0xC9+0xFF*4 = 0xC4)
Étape 5 : Valider l'intégration

Une fois tous les paramètres sauvegardés, redémarrez le contrôleur de vol et vérifiez que les données circulent correctement.

5.1 Vérifier les données en temps réel dans le planificateur de missions
  1. Aller à la page Statut onglet → Recherchez la valeur “RangeFinder1”.
    • Elle doit correspondre à la distance réelle de la cible (par exemple, 5,2 m si le drone se trouve à 5,2 m au-dessus du sol).
    • S'il affiche “0” ou “NaN”, revérifiez votre câblage et vos paramètres.
  2. Pour une confirmation visuelle, rendez-vous sur le site Données de vol onglet → Sélectionnez “Proximité” dans la liste déroulante.
    • Si le module est monté vers le bas (RNGFND1_ORIENT=25), vous verrez la distance “Down” se mettre à jour en temps réel.
5.2 Essai sur le terrain (essentiel !)
Avant le vol :
  1. Placez le drone à 5 m au-dessus d'une surface plane (par exemple, un sol en béton).
  2. Confirmer que la valeur du RangeFinder1 est de ~5,0m (erreur ≤ ±0,5m, selon les spécifications du SFA2000B).
  3. Déplacez le drone vers le haut/bas lentement - assurez-vous que la distance est mise à jour en douceur (pas de sauts >1m).

FAQ : Problèmes courants et solutions

Q1 : Le contrôleur de vol n'affiche aucune donnée du RangeFinder, mais le SFA2000B fonctionne avec l'adaptateur USB-TTL.
A1: Il s'agit probablement d'une erreur de câblage ou de paramétrage :
 
  • Vérifier si TX/RX sont inversés (contrôleur de vol TX → SFA2000B RXD ; contrôleur de vol RX → SFA2000B TXD).
  • Vérifier SERIAL2_PROTOCOL=23 (pas 1 pour MAVLink) et CUST_HEADER1=0x55CUST_HEADER2=0xAA.
  • Assurez-vous que le script Lua est chargé (vérifiez l'onglet “Messages” du planificateur de mission pour “SFA2000B : Command Sent”).
Q2 : Les données relatives à la distance sont irrégulières (par exemple, 5m → 12m → 3m).
A2: EMI ou problèmes d'alimentation :
 
  • Remplacer les fils non blindés par des fils blindés (relier le blindage à la masse du contrôleur de vol).
  • Utilisez un module d'alimentation externe de 3,3V/1A (le port 3,3V du contrôleur de vol peut être instable sous charge).
  • Nettoyez la fenêtre optique du CDF2000B à l'aide d'un chiffon à lentilles (la poussière provoque des erreurs de réflexion).
Q3 : Le CDF2000B renvoie un état de 0 (échec) : 55 AA 88 00 FF FF FF YY).
A3: Les conditions de portée ne sont pas valides :
 
  • La cible se trouve dans la zone aveugle du module (≤3m)-éloignez le drone.
  • La cible a une faible réflectivité (par exemple, les arbres, l'eau) - tester avec un mur en béton.
  • La lumière du soleil est directement exposée au récepteur du module - protégez la lentille ou testez à l'ombre.
Q4 : Puis-je utiliser le SFA2000B pour l'évitement d'obstacles (et pas seulement pour le maintien de l'altitude) ?
A4: Oui ! Modifier l'orientation du montage :
 
  • Set (jeu de mots) RNGFND1_ORIENT=0 (Avant) ou 1 (vers l'arrière) dans les paramètres.
  • Utilisez une commande de télémétrie continue (5Hz/10Hz) dans le script Lua pour des mises à jour plus rapides.
  • Associer avec la fonction “Obstacle Avoidance” d'ArduPilot (activer la fonction "Obstacle Avoidance") AVOID_ENABLE=1).

Notes finales

Le SFA2000B est un télémètre puissant pour les drones, mais son protocole personnalisé nécessite une configuration précise pour fonctionner avec ArduPilot. En suivant ce guide - tester d'abord le module, le câbler soigneusement et configurer les paramètres étape par étape - vous obtiendrez des données de distance fiables pour le maintien de l'altitude, l'évitement des obstacles ou la cartographie.

Si vous rencontrez des problèmes persistants, contactez-nous :

Communauté ArduPilotForums (aide d'un expert pour le firmware/les paramètres).

Partagez votre amour

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *