Dans le post précédent nous avons obtenu la distance parcourue, il ne "reste" plus qu'à calculer la vitesse et réaliser les affichages.
Calcul de la vitesse :A partir de la distance parcourue, la vitesse s’obtient par dérivation. Si D
n est la distance actuelle, est D
n-1 la distance calculée au pas précédent, la vitesse V peut se calculer par (D
n- D
n-1)/(t
n-t
n-1). Ici t
n-t
n-1 = 0,002 s. La différence est très sensible aux erreurs et il convient de filtrer le résultat.
Pour calculer une vitesse filtrée, j’ai utilisé un filtre du 2
nd ordre constitué d’un filtre du 1
er ordre rebouclé via un gain et un intégrateur. Pour implémenter ce filtre, j’ai utilisé deux variables d’état X1 et X2 (voir le synoptique en fichier joint).
w
n est la pulsation propre du filtre (2pi·f
c)
Ksi est le facteur d’amortissement du filtre
X1
n = X1
n-1 + (t
n – t
n-1) · (E – X2
n-1 - 2·Ksi·X1
n-1)
S = w
n · X1
n-1X2
n = X2
n-1 + (t
n – t
n-1) ·S
Le filtre du 2
nd ordre ayant un gain de 1, la variable X2 est l’image filtrée de l’entrée E. La sortie S étant prise en amont de l’intégrateur de X2, S sera l’image de la dérivée de X2 qui est l’image de l’entrée filtrée, S est donc la dérivée filtrée de l’entrée E.
Si E est la distance parcourue, S est la vitesse filtrée du wagon.
Processeur et périphériques :Le processeur utilisé est un Arduino Nano qui pilote :
• un écran SSD1306 pour afficher les données mesurées
• un module Bluetooth HC06 pour transmettre, sans fil, les mesures, via la liaison série, vers un équipement portable.
• les LEDs des feux de fin de convoi.
L'utilisation d'une émulation logicielle de la liaison série (soft serial) pour communiquer avec le module Bluetooth HC06 pour conserver la liaison série pour le débug avec le PC consomme trop de temps CPU. Par contre le périphérique série (UART) travaille en parallèle à la CPU sans consommer de temps CPU. Pour garder de la marge, on utilise la liaison série standard du processeur connectée au module HC06. Mais, comme cette liaison sert également au téléchargement du logiciel, pour ne pas perturber le téléchargement, il faut déconnecter le module HC06 pendant le télé-versement du code dans le microcontrôleur.
Implantation de l’afficheur :Afin de diminuer le nombre de fils de câblage, j’ai utilisé un afficheur OLED avec un bus I2C. Voulant avoir des caractères suffisamment lisibles, j’ai choisi un écran de de 0,96ˮ.
https://www.ebay.fr/itm/0-96inch-IIC-I2C-Serial-White-OLED-Display-Module-128X64-SSD1306-12864-For-STM32/253761819458La hauteur utile de l’afficheur correspond assez bien à la hauteur du wagon, mais son encombrement mécanique total oblige à fraiser le plancher du wagon pour loger la partie inférieure de l’afficheur
Module Bluetooth HC06 :La liaison série de l’Arduino est relié à un module Bluetooth de type HC06. Le module HC06 est paramétrable (nom, vitesse …) via des commandes AT (voir les nombreux tutoriels).
https://www.ebay.fr/itm/Wireless-Serial-4-Pin-Bluetooth-RF-Transceiver-Module-HC-06-RS232-With-backplane/200924726178Attention, les données échangées par le HC06 sont en 3,3V alors que l’Arduino est en 5V. Il faut prévoir un pont diviseur entre la sortie Tx de l’Arduino et l’entrée Rx du HC06. Par contre, le HC06 accepte une alimentation de 3,3V à 6V.
Feux de fin de convoi :Deux LEDs rouges de 3mm sont collées dans des perçages à l’arrière du wagon. Deux petits manchons de laiton de 3mm intérieur viennent compléter la décoration. Les LEDs sont alimentées par une sortie de l’Arduino et commandées par la liaison série.
A suivre ....