Bonjour tout le monde
Premier post, alors je commence par un grand merci à tous les contributeurs et un énorme merci aux locomotives de ce site. En partant de zéro, arduino et C++, c'était mon cas il y a un an, Locoduino est une bénédiction.
Aujourd'hui j'ai peut-être à mon tour une contribution à apporter.
De lien en lien, je suis tombé un jour sur un détecteur
I2C encore jamais évoqué ici semble-il, peut-être pas parce qu'il est généralement vendu comme détecteur de luminosité : le
CJMCU-3216.
Mais c'est aussi un DETECTEUR DE PROXIMITE. Long long délai d'attente (chine + premier envoi perdu...) mais la patience valait la peine, je crois qu'il n'a que des avantages !
- Il est MINUSCULE, au point de se glisser sous la voie entre deux traverse MÊME en échelle N ;
- il détecte parfaitement UN ATTELAGE, CONVOI A L’ARRÊT OU NON ;
- il semble indifférent aux conditions de luminosité (ou pas) ambiante ;
- et il coûte presque rien.
Seul petit inconvénient (peut-être), il fonctionne au maximum sous 3,5V.
Voici la merveille. Qui va remplacer les barrières infra-rouge encombrantes, inesthétiques et parfois gaffeuses (petites gaffes mais gros bazar).
(Ça n'est encore qu'un circuit d'expérimentations. Faute de ballast, la planche est décaissée de 2mm pour loger le composant)
Ce détecteur est paramétrable.
A minima il faut le déclarer comme "détecteur de proximité en continu" (paramètre PS). Et ça suffit pour qu'il marche très bien. Je n'ai pas assez testé l'intérêt des autres paramètres sauf celui de la SENSIBILITÉ qui, en la réglant sur 4 plutôt que 2 (réglage par défaut), m'a permis la détection à tout coup des attelages (attention, Je parle pour le N... doute pour le HO).
Exemple pour "n" détecteurs. Le " tcaselect(i)" se rapporte à l'indispensable multiplexeur vu que le composant n'est pas adressable, ce qui est normal vu sa taille. Puis il faut un proxSensor.init(); par détecteur et donc le déclarer "PS" ; le reste est facultatif.
for (byte i(0); i<n; i++)
{ tcaselect(i) ;
proxSensor.init();
proxSensor.setMode(PS); // PS: proximity sensor continous
proxSensor.setPSGain(4); // Choose between 4 gain values: 1, 2(default), 4, 8 : higher gain increases sensitivity as well as noise - 2 is good.
proxSensor.setNumberOfLEDPulses(2); // Choose between 1(default),2,3,4 pulses of LED IR for proximity : more pulses increase (slightly) the max. distance
proxSensor.setPSMeanTime(PS_MEAN_TIME_50); // Meantime (milliseconds) for proximity measurement : _50, _37_5, _25 or _12_5 ; longer meantime provides less spreaded values
proxSensor.setPSIntegrationTime(8); // This function helps to increase the max distance. Choose value between 1 and 16.
}
Bien sûr , on peut préférer un paramétrage individuel, en fonction d'exigences de détection différenciées.
En sortant un peu du sujet mais pas complètement et pour ceux qui auraient des problèmes de lenteur en I2C : je signale qu'avant de réussir à faire fonctionner ce senseur sur mon bus I2C déjà sollicité (transmission de données d'un MEGA vers un NANO + affichage sur OLED) j'ai eu de gros soucis liés à la library ADAFRUIT des écrans SSD1306. Il y a des références sur le net à des problèmes de lenteur ces afficheurs ; c'est ce que j'ai connu dès le deuxième écran, le MEGA qui faisait "tout" tourner, pourtant pas grand chose, a paru d'un coup très fatigué. D'où le NANO, dédié à l'affichage... faute de bien avoir bien analysé le problème. En tous cas pb réglé... jusqu'à ce que j'ajoute un CJMCU3216 sur le bus (sur un autre multiplexeur TCA9548A avec bien sûr son adresse propre).
Impossible de faire cohabiter le tout. Des conflits sur le bus créaient un proportion importante (+- 20%) de données aberrantes, tant sur les écrans que que les CJMCU.
Avec de plus le problème toujours présent d'un rafraichissement extrêmement lent des afficheurs : 180ms par OLED, soit 360ms pour deux, à l'extrême limite de l'acceptable.
Jusqu'à trouver cette autre library ; SSD1306AsciiWire : (
https://github.com/greiman/SSD1306Ascii - de 360ms m'a loop est passée à 70... puis 40 avec un peu d'optimisation ;
- plus aucun conflit ;
- en prime, disparition de menus problèmes dont des artefacts sur les écrans.
Pour tester de détecteur, voici par exemple où je l'ai commandé :
https://fr.aliexpress.com/item/32817340841.html?spm=a2g0s.9042311.0.0.2df16c37QV8oNxPour ma part, l'essayer fut l'adopter.