Fake Live Audio (avec ou sans) DJI FPV System

Et oui, ça y est, je passe à la HD, ca sera le sujet d’un prochain article.

Un truc qui me faisait hésiter à passer sur le DJI FPV System, c’est l’absence de Live Audio, malgré les demandes des utilisateurs. Pour le moment, DJI semble privilégier la qualité du flux vidéo, pourtant de l’audio en très faible qualité ne consommerait pratiquement rien en bande passante et serait largement suffisant.

Avant d’entrer en détails sur le choix de la solution pour contourner ce problème et son implémentation, voici une courte vidéo :

En attendant de recevoir tout le matos pour le build, je me suis attaqué à ce problème. J’ai imaginé plusieurs d’approches différentes (VTX analogique, mini talkie-walkie désassemblé et autres détournements…), finalement, j’ai écarté toutes les options qui impliquaient un signal RF, ne voulant pas perturber le signal de la radio ou du DJI FPV System, et tendre un fil entre le quad et mon oreille n’était pas une option non plus xD

J’ai opté pour une autre approche : reproduire le bruit des moteurs à partir de la position du throttle sur la radio. Le port série de la radio ne permet que de récupérer une version « miroir » de la télémétrie. Il va donc falloir taper directement sur l’électronique. On va perdre la possibilité d’entendre les problème sur le quad, par contre, on ne perdra pas le son quand ça commence à glitcher, comme c’est le cas avec une liaison analogique classique.

Autre point : sur le masque DJI, la sortie casque est aussi l’entrée AV. Donc même si un jour le live audio est supporté par DJI, si on utilise un module analogique, on ne pourra de toute façon pas avoir le son. Cette solution permet donc d’avoir une émulation du régime moteur en toute circonstance, puisqu’il sera généré par la radio.

L’idée générale

On utilisera un petit Arduino Nano pour mesurer la tension au niveau de l’axe du throttle (qui varie en fonction de la position du stick) et générer une tonalité : plus la valeur de throttle est élevée, plus le son sera aigu.
Pour que ça ne soit pas désagréable, après qques essais, j’ai opté pour un range de 150 à 700 Hz, c’est un bon compromis.

Où se greffer ?

La première galère a été de trouver le moyen de récupérer l’alimentation pour le Arduino, sachant qu’il prend de 7 à 12V en entrée et que je ne veux pas me brancher en direct sur la batterie (sinon l’Arduino va vider la batterie quand la radio sera éteinte). La solution la plus simple a été de profiter du port série de la X9D qui propose un GND et un VBAT (switché). Par chance, la tension de la batterie de la X9D est dans le range de ce qu’attend l’Arduino 🙂

Ensuite, il faut récupérer la position du stick du throttle, j’ai constaté que sur ce pin (cf. photo), la tension variait de 0.32V à 2.75V en fonction de la position du throttle. Ca tombe bien, un Arduino peut lire directement une tension comprise entre 0 et 5V.

Le circuit

C’est vraiment tout con finalement. Sachant que je suis une quiche en électronique, y a certainement de meilleure façon de faire, je suis allé au plus simple pour mon niveau. Voici le schéma :

Quelques détails à prendre en compte :

  • Un pin Arduino peut fournir 20 mA par pin en 5V (40 mA en pic, mais on va rester sur les valeurs recommandées). Donc pour protéger l’Arduino, il nous faudra à minima une résistance de
    R = 5 / 0.02 = 250 Ohms
    A noter également que les écouteurs ont une résistance (ou plutôt impédance), en général aux alentours de 32 Ohms (valeurs vérifiée sur 3 paires que j’avais sous la main). Une résistance de 220 Ohms fera donc l’affaire.
  • Si on branche les écouteurs direct, ça gueule, il faut limiter le volume des écouteurs avec une autre résistance. C’est pas facile de trouver des infos, donc j’ai testé plusieurs valeurs jusqu’à trouver quelque chose de correct ==> 30-40 KOhm. Du coup j’ai mis un potentiomètre de 50 KOhm pour pouvoir faire varier le volume sur une plage assez large. J’ai ajouté un petit switch pour pouvoir couper l’Arduino Nano sans devoir ouvrir la radio.

Intégration

J’ai essayé de faire en sorte que le mod soit le moins intrusif possible :

  • L’alim est récupérée sur le connecteur série
  • Le switch et le potentiomètre pour le volume sont intégrés dans l’espace dispo sur la gauche de la batterie, sur un petit support en impression 3D.
  • J’ai remplacé un switch que je n’utilisais pas par le connecteur jack. Là j’ai dû un peu limer la case pour pouvoir bloquer le connecteur avec son écrou, mais c’est infime et invisible.

Vue d’ensemble du montage:

Le programme

Lui aussi il est tout con. On lit la tension sur le capteur à effet hall, on map cette valeur sur la plage de fréquences choisie et voilà ! Il est disponible ici : https://github.com/LordGG/PoCs/blob/master/FakeLiveAudio/FakeLiveAudio.ino

Deux petites subtilités :

  • Plutôt que de mettre en dur les valeurs min et max de l’axe du throttle, j’ai opté pour faire une calibration au démarrage : il suffit de bouger un coup le stick au min et au max. Si on oublie, ça se fera en vol de toute façon.
  • Quand il y a moins de 3% de gaz, on coupe le son
    A noter : plus on monte le throttle, plus la tension mesurée est faible, et inversement.

Evolutions possibles

  • J’utilise du matos ultra basic, en montant un peut en gamme, on pourrait carrément générer un bruit de moteur réaliste, plutôt qu’une simple fréquence.
  • Au début j’avais imaginé détourner un des 2 connecteurs jack déjà présent à l’arrière de la radio, j’ai lâché l’affaire parce qu’ils sont soudés sur le PCB de la radio. A voir si y a moyen de les utiliser quand même.
  • Adapter cette solution à d’autres radios/capteurs de gimbal. Le principe restera le même.

Laisser un commentaire

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