Renesas a récemment sorti un nouveau capteur I2C qui a attiré notre attention: un minuscule capteur miniature pour mesurer la vitesse d'un flux d'air. C'est une mesure qui nous intéresse, car de nombreux processus industriels ont besoin d'une ventilation bien régulée pour fonctionner de manière reproductible, et l'encrassement progressif des filtres peut affecter de manière significative les capacités de ventilation. Voyons donc ce que vaut ce capteur...
Le capteur en question est le Renesas FS3000. Il existe en deux variantes, le FS3000-1005 qui peut mesurer un flux d'air jusqu'à 7.2 m/sec, et le FS3000-1015 qui peut aller jusqu'à 15 m/sec. Nous avons testé la version FS3000-1015, à l'aide du petit Breakout board de SparkFun pour le FS3000
Le breakout board de Sparkfun
La lecture des mesures utilise une interface digitale I2C. Nous allons donc faire nos expériences avec un Yocto-I2C.
Lecture du capteur par I2C
Ce capteur est l'un des plus simples à utiliser que nous ayons vu. Il travaille en 3.3V et n'a besoin d'aucune commande de configuration. Il suffit de lire directement 3 octets sur l'interface I2C: le premier octet reçu est un checksum, et les deux suivants contiennent la valeur mesurée, en big-endian. Si l'on utilise un Yocto-I2C, on peut donc l'interroger avec la commande suivante:
{S}51xxxxxx{P}
Et voici le résultat:
Interrogation manuelle du capteur de vitesse de l'air FS3000
La première valeur retournée est 0x0195, soit 405 en décimal, qui correspond à la valeur attendue lorsque l'air ne circule pas dans le capteur.
La deuxième valeur, retournée alors qu'on souffle sur le capteur est 0x06F7, soit 1783 en décimal: d'après la spécification, cela correspondrait à 4.6 m/s, ce qui semble raisonnable. La lecture du capteur fonctionne donc correctement.
Interrogation automatique et conversion en m/s
La conversion en m/s de la valeur retournée par le RS3000-1015 n'est pas triviale, car la sortie n'est pas linéaire. Voici le diagramme fourni par Renesas dans la datasheet:
Interprétation de la valeur retournée par le FS3000-1015, d'après la datasheet
Plutôt que faire une interpolation entre ces points pour chaque mesure, nous avons calculé un polynôme du 4e degré qui interpole bien ces points de références. Le voici:
Polynôme pour obtenir la vitesse de l'air en m/s d'après les points fournis par la datasheet du FS3000-1015
On peut donc définir dans le Yocto-I2C le job suivant pour obtenir automatiquement en temps réel la valeur brute du FS3000 dans genericSensor1, la conversion en [m/s] dans genericSensor2 et la valeur en [km/h] dans genericSensor3:
{"writeLine": "{S}51xxxxxx{P}"},
{"expect" : "28:{A}(BYTE)($val:WORDB).*"},
{"compute" : "$x = $val / 1000"},
{"compute" : "$v = 0.1984*pow($x,4) - 1.283*pow($x,3) + 3.382*$x*$x - 0.966*$x - 0.065"},
{"compute" : "$1 = $val"},
{"compute" : "$2 = $v"},
{"compute" : "$3 = $v * 3.6"}
]}}
Test en situation réelle
Sur la datasheet, Renesas annonce une précision typique de 5% de la plage de mesure. Un document séparé précise tous les paramètres extérieurs qui pourraient affecter la précision des mesures: la température, l'humidité, la densité du gaz si ce n'est pas de l'air, les turbulences, etc. Voyons ce que cela donne sur quelques expériences concrètes.
Notre premier test a consisté à mettre le capteur au milieu du tuyau d'aspiration d'un four à refusion, celui que nous utilisons pour souder les plaques de modules Yoctopuce. C'est un cas typique où nous sommes intéressés à garantir un environnement bien contrôlé, pour que le profil de température du four ne varie pas d'une production à l'autre. Nous avons comparé la mesure avec un capteur de référence Amprobe TMA10A.
Notre anémomètre de référence Amprobe TMA10A
Malheureusement, le résultat s'est avéré un peu décevant: il y avait presque un facteur 2 entre la mesure retournée par les deux capteurs, malgré différents essais de positionnement. Les différents paramètre environnementaux listés dans le document complémentaire de Renesas ne permettant pas d'expliquer une telle différence, nous avons enlevé le connecteur que nous avions soudé à l'arrière du capteur (sur les pads prévus par SparkFun), et cela améliore déjà un peu la mesure: clairement, ce n'est pas du tout un bonne idée de mettre un connecteur dans l'alignement du capteur de flux d'air. Mais même avec des câbles soudés en surface sous le module, la mesure reste assez insatisfaisante.
Nous avons ensuite fait quelques tests devant un ventilateur à vitesse variable. La proportionnalité des mesures semble assez bonne, mais il reste toujours un facteur d'erreur important sur l'interprétation en m/s entre le capteur Renesas et notre anémomètre de référence.
Finalement, pour tester sur une plage un peu plus large et avec une autre mesure de référence, nous avons mesuré la vitesse du vent relatif à 75cm de distance (sur le côté) d'une voiture qui roule différentes vitesses, entre 25km/h et 50km/h. Là, nous avons eu la surprise de voir que notre anémomètre de référence indiquait une vitesse largement supérieure à celle de la voiture, alors que le capteur Renesas indiquait toujours une vitesse inférieure. L'explication la plus probable est que le flux d'air autour de la voiture est plus turbulent que ce que nous anticipions, avec pour effet d'amplifier la mesure sur l'anémomètre à hélice que nous utilisons comme référence. Le capteur Renesas, étant tout petit et très directionnel, semble au contraire sous-estimer la vitesse moyenne lorsque le flux d'air n'est pas parfaitement laminaire et longiligne avec l'alignement du capteur.
Conclusion
Ce petit capteur Renesas FS3000 nous parait une solution intéressante, par sa petite taille et son prix raisonnable, pour s'assurer de la stabilité dans le temps d'une ventilation. Par contre, à moins d'être raisonnablement connaisseur en dynamique des fluides - ce que nous ne sommes pas - il est vraisemblablement difficile d'obtenir avec ce type de capteur une mesure quantifiée crédible.