Nouveau produit: le Yocto-3D

Nouveau produit: le Yocto-3D

Avez-vous déjà eu envie de mesurer par USB l'inclinaison d'un objet ? De détecter la mise en mouvement d'un objet, ou une chute d'objet ? De mesurer la position d'un aimant à proximité ? De déterminer l'orientation dans l'espace d'un véhicule ? Le nouveau Yocto-3D peut faire tout cela, et plus encore. Première rencontre avec ce nouveau module...


Physiquement, le Yocto-3D est un petit capteur semblable à la plupart de nos modules. Il comporte deux senseurs inertiels MEMS: un accéléromètre 3D (pour mesurer les accélérations rectilignes) et un gyroscope 3D (pour mesurer les rotations). L'accéléromètre comporte en prime un magnétomètre 3D (pour mesurer les champs magnétiques dans l'espace). Les capteurs MEMS sont situés sur une section détachable du module, de 2cm par 2cm, qui peut facilement être fixée sur une pièce mécanique mobile en évitant l'encombrement d'un câble USB.

Le Yocto-3D
Le Yocto-3D


Voyons maintenant quelques utilisations typiques.

Inclinomètre (niveau à bulle électronique)

Lorsqu'il est au repos, l'accéléromètre du Yocto-3D mesure indirectement l'accélération terrestre. Vous pouvez imaginer le fonctionnement de l'accéléromètre comme si il s'agissait d'un poids en suspension entre des ressorts. En chute libre, le poids reste au centre. Mais lorsqu'on pousse le système dans une sens, ou lorsqu'il est posé au sol, le poids se déplace dans la direction inverse de la force appliquée à l'enveloppe du système. En mesurant ce déplacement, on peut déterminer l'accélération subie.

Fonctionnement schématique d'un accéléromètre basé sur la technologie MEMS
Fonctionnement schématique d'un accéléromètre basé sur la technologie MEMS


Ainsi, le Yocto-3D peut mesurer avec quelle force le sol le repousse contre la gravitation terrestre. En calculant l'angle de cette force, on peut déterminer précisément l'inclinaison par rapport à la surface de la terre, à un ou deux dixièmes de degrés prêt. C'est donc un niveau à bulle électronique. Comme le capteur fonctionne en 3D, on peut obtenir séparément l'inclinaison sur les deux axes de roulis (tilt1) et de tangage (tilt2).


YTilt roll = YTilt.FindTilt("myYocto3D.tilt1");
YTilt pitch = YTilt.FindTilt("myYocto3D.tilt2");
Console.WriteLine("Roll: " + roll.get_currentValue() + " deg");
Console.WriteLine("Pitch: " + pitch.get_currentValue() + " deg");
 


Boussole électronique

Le magnétomètre du Yocto-3D est naturellement destiné à servir de boussole. Mais contrairement à une simple boussole, qui ne fonctionne qu'à l'horizontale, cette boussole peut fonctionner même lorsque le module est penché: en s'appuyant sur la mesure de l'inclinomètre, le module calcule automatiquement le projection horizontale du vecteur de champ magnétique pour calculer l'orientation par rapport au nord magnétique (boussole compensée en inclinaison).


YCompass compass = YCompass.FindCompass("myYocto3D.compass");
Console.WriteLine("Heading: " + compass.get_currentValue() + " deg");
 


Magnétomètre

Vous pouvez aussi détecter la présence d'un aimant à proximité du module en mesurant la valeur du champ magnétique. Le champ magnétique terrestre est d'environ 0,5 gauss, et une valeur supérieure indique la présence d'un champ magnétique externe. A titre d'exemple, les aimants de nos boîtiers produisent un champ d'environ 1 gauss à une distance de 50mm.


YMagnetometer mag = YMagnetometer.FirstMagnetometer();
Console.WriteLine("Magnetic field: " + mag.get_currentValue() + " gauss");
 


Accéléromètre et gyroscope

Si vous voulez détecter la mise en mouvement d'une porte ou d'une pièce mobile, vous pouvez utiliser directement l'accéléromètre (pour l'accélération rectiligne) et le gyroscope (pour la vitesse angulaire):


YAccelerometer acc = YAccelerometer.FirstAccelerometer();
YGyro gyro = YGyro.FirstGyro();
Console.WriteLine("Acceleration: " + acc.get_currentValue() + " g");
Console.WriteLine("Rotation: " + gyro.get_currentValue() + " deg/s");
 


Orientation spatiale en temps réel

La fonction la plus avancée du Yocto-3D est sa capacité à estimer en temps réel son orientation spatiale par la fusion des données fournies par tous ses capteurs. En effet, l'intégration des mesures gyroscopique permet une estimation très réactive (près de 100 estimations par seconde) de l'orientation du module même en mouvement, qui complémente avantageusement les mesures d'inclinaison et d'orientation magnétiques, qui sont elles absolues mais plus lentes et plus bruitées. Le Yocto-3D effectue lui-même cette combinaison mathématique sophistiquée, et fournit directement l'orientation estimée sous forme d'un quaternion. La librairie Yoctopuce permet d'obtenir directement les angles aéronautiques correspondants, par polling ou par callback.

A titre d'exemple, nous allons transformer un Yocto-3D en manette de jeu. Nous allons reprendre un exemple illustrant l'api Javascript de Google Earth appelé "Mini Flight Sim", et voir les modifications à y apporter pour remplacer le contrôle clavier par une manette 3D.

Le Mini Flight Sim piloté par un Yocto-3D
Le Mini Flight Sim piloté par un Yocto-3D



Un Yocto-3D comme manette de jeu HTML

Pour commencer, on ajoute à la page HTML l'accès au Yocto-3D. Il suffit d'inclure les fichiers de la librairie Yoctopuce, et d'installer la fonction de callback qui sera appelée à chaque mouvement du module:


<script type="text/javascript" src="yocto_api.js"></script>
<script type="text/javascript" src="yocto_gyro.js"></script>
 



YAPI.RegisterHub("127.0.0.1");
var gyro = YGyro.FirstGyro();
if(gyro) {
    gyro.registerAnglesCallback(gyroCallback);
    handleGyro();
}
 


La fonction handleGyro fournit un point d'entrée asynchrone à la librairie Yoctopuce pour gérer les événements produits par le module:


function handleGyro()
{ YAPI.SetTimeout(handleGyro, 1000); }
 


La callback lui-même ne fait que stocker l'orientation estimée du module dans une variable globale.


var yoctoSteerAngle = 0;
var yoctoPitchAngle = 0;

function gyroCallback(gyro, roll, pitch, heading)
{
    yoctoSteerAngle = -roll;
    yoctoPitchAngle = pitch;
}
 


Les calculs de physique du simulateur sont faits dans la méthode Truck.prototype.tick (ne vous étonnez pas du nom, ce simulateur de vol est une variation de l'exemple "Monster Milk Truck" de Google). La direction de l'avion est gérée par la variable steerAngle, qui est mise à jour en fonction des touches pressées. On remplace tous ces calculs directement par la valeur fournie par le Yocto-3D:


steerAngle = yoctoSteerAngle * dt * Math.PI / 180.0;
 


De même, on peut rajouter une gestion de la montée et de la descente, qui n'est pas prévue dans le code d'exemple. On rajoute une propriété pitch à l'objet truck, que l'on met à jour en intégrant l'angle de la manette de jeu:


me.pitch += yoctoPitchAngle * dt;
if(me.pitch > 30) me.pitch = 30;
if(me.pitch < -70) me.pitch = -70;
 


Il suffit alors de calculer la vitesse verticale à l'aide de l'assiette calculée, et de mettre à jour l'orientation de l'avion en conséquence:


me.vel[2] = 25 * absSpeed * Math.sin(me.pitch * Math.PI/180.0) * dt;
me.orientation.set(newhtr[0], newhtr[1]-me.pitch, absRoll);
 


Vous trouverez le code complet de cet exemple en suivant ce lien :

  


Commenter aucun commentaire
Retour au blog












Yoctopuce, get your stuff connected.