Capteur de Distance laser

Bonjour à tous,

J’ai acheté un capteur de distance laser (qui s’utilise par la voie série) que j’aimerai brancher à mon arduino, cela dit je ne sais pas trop comment faire.

Apres quelques recherches, j’ai trouvé un article sur un module très similaire qui explique le branchement, le code ( avec une librairie à charger). La seule chose est qu’il est question d’utiliser une Mega dans l’article.

Je vous présente le code :

/**
 * This example shows how to do a simple measurement on the laser distance meter.
 */

#include <UT390B.h>

//Create a new laser distance meter object. Give him the serial to use as an argument.
//Here we use the Serial1 of e.g. an Arduino Mega because we still want to use the default
//serial to communicate with the computer.
UT390B<HardwareSerial> laser(Serial);

void setup() {
  Serial.begin(9600);
}

void loop() {
  //This call to measure() will block until the measurement is done.
  //Be careful, this can be quite long!
  int distance = laser.measure();
  
  //Report the distance back to the computer
  Serial.print("The distance is ");
  Serial.print(distance);
  Serial.println(" mm");
}

Je vous joins le branchement en image.

Le programme Compile bien mais il ne prend aucune mesure.
Je ne vois pas le laser s’allumait.
Le moniteur affiche la valeur -1 ( qui signifie une erreur) et la diode Rx s’allume sur la carte.

J’ai essayé de l’alimenter par l’arduino ( TX) ou par 2 pile, le résultat est le même.

Merci a vous de bien vouloir m’éclairer.

Ps: Je suis vraiment débutant

ps: le site oû j’ai trouvé toutes les infos pour mon projet

Pour info:
Carte Uno R3
IDE 1.8.3

bon la carte mega ou uno, en faite, peut importe si c'est une liaison serie...

Par contre on voit qu'il faut une adaptation avec 2 resistances de 10K.

Est ce que c'est fait?

tu as bien bien respecter le schéma de cablage?

Les 2 résistances c'est pour faire un pont diviseur de tension l'Arduino est en 5V et le Rx du module attend du 2.7V .

Ils disent R1 = R2, ce qui va transformer votre Tx à 5V de l'arduino en 2.5V de l'autre côté.

À noter qu'il risque d'y avoir un soucis sur le Tx du laser car pour envoyer un HIGH Il va se mettre à 2.7V et un arduino 5V lit un HIGH à si la tension est supérieure à 3.0V sur la pin...

mais bon comme ils disent aussi de l'alimenter en 3V sur la seconde image, il se peut que le HIGH émis par le laser soit à 3V auquel cas ça irait... cela dit si vous l'avez alimenté en 5V vous l'avez peut être grillé... :frowning:

À mon avis il fait connecter ça à un scope et regarder ce qu'il se passe - et éventuellement mettre un vrai composant d'adaptation de tension entre les 2

Bonjour Hazerty565,

Merci de m'avoir répondu.

En effet j'ai bien respecté le schéma de câblage avec les 2 résistances de 10K.

Au début , je ne réussissais pas à compiler car j'écrivait Serial1 alors que l'IDE était configurait en UNO, je me suis dit qu'il y avait peut être d'autres paramètres propre à la carte Mega dans le programme mais qui n’empêche ni la vérification, ni le téléversement dans une carte Uno mais qui ne fonctionne pas tout simplement.

Le capteur m'a été livré avec un afficheur et une platine de bouton pour l'allumer, changer de mode ect... cela fonctionne très bien , mais c'est la liaison à l'arduino que je n'arrive pas à faire...

bon j'ai regardé un peu sur internet, il y a un blog dédié
et il marque que la vitesse doit etre de 115200 et non pas 9600

http://blog.qartis.com/arduino-laser-distance-meter/

http://blog.qartis.com/parsing-laser-distance-meter-serial-output/

http://blog.qartis.com/laser-distance-meter-update-serial-commands-timing-measurements/

Si vous lisez les commentaires dans le tuto que vous pointez de nombreux participants n'ont pas réussi à faire fonctionner leur unité...ils avaient un UNI-T UT390B+ au lieu d'un UNI-T UT390B (sans le +)

Bonjour J-M-L,

merci pour ces explications,

n'ayant pas d'oscillo, pensez vous que si je change de résistances, il est possible d'avoir un meilleur résultat?

Concernant la fois ou j'ai alimenté le laser directement avec 2 piles AAA, jai debranché au préalable les résistances et le fil qui les relié au ground de la carte . J'ai réussi à utilisé le laser avec les composants fourni initialement après cela.

@Hazerty565

Merci pour les liens, j'ai changer dans le programme la vitesse, cela dit le résultat reste le même.
Mais j'ai l'impression que le laser n'est pas alimenté, peut etre que j'ai fait un mauvais branchement lorsque j'ai voulu utilisé les piles. J'ai fait : TX-> RX / RX->TX pour l'arduino seulement , et j'ai mis deux piles via un boitier fourni pour alimenter le composant.

@ JML, oui j'ai pu m'en apercevoir, le composant n'est pas exactement le même, cela dit, j'ai trouvé un vendeur qui expliquait ou se trouvait les bornes RX TX, et j'ai adapté le branchement. Le code ou la bibliothèque pourrai différer en fonction de cela?

Il faudrait éventuellement tester toutes les vitesses de communication sur le port série si vous ne savez pas comment il est configuré.

ATTENTION utilisez un software serial, pas le même que l’USB. Est sans doute en partie votre problème dans le code ci dessus

Faites juste un programme qui n’utilise pas la librairie et qui envoie des lettres selon votre doc

e2f74f4d5bfed6bc19f58506e1d604a74e4439dc.jpg

Ouvrez la liaison série en software serial avec les bonnes pin (sinon vous ne pouvez pas afficher sur votre par la liaison série USB)
Ouvrez Serial
Envoyez ‘O’ sur le Software Serial
Attendez un peu
Envoyez ‘D’ sur le Software Serial
Attendez un peu dans une boucle en lisant le port Software Serial et affichant ce qu’il répond sur le port Serial (hardware qui va vers votre USB)
Envoyez ‘C’ pour terminer la session sur le Software Serial

Je vais essayer ça,
merci

Voilà un bout de code pour tester - je n’ai pas votre équipement donc je ne sais pas si ça va fonctionner

  • Connectez votre Arduino à votre PC, console à 115200 bauds
  • Connectez Arduino Pin 2 = Rx, connectée au Tx de l’Uni-T UT390b
  • Connectez Arduino Pin 3 = Tx, connectée au Rx de l’Uni-T UT390b à travers le pont de résistances
  • Alimentez correctement votre laser avec les piles en 3V
  • Joignez les masses de votre arduino et du laser

Chargez le code suivant et essayez ensuite en faisant varier le 9600 de UT390bSerial.begin([color=blue]9600[/color]); en prenant différentes valeurs standard 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, et 115200.

le code demande une mesure de distance et attend/imprime pendant 10 secondes la réponse éventuelle du laser puis demande au module sa Temperature et son alimentation et attend/imprime pendant 10 secondes la réponse éventuelle.

#include <SoftwareSerial.h>

// Arduino Pin 2 = Rx, connectée au Tx de l'Uni-T UT390b
// Arduino Pin 3 = Tx, connectée au Rx de l'Uni-T UT390b à travers le pont de résistances
SoftwareSerial UT390bSerial(2, 3);

const unsigned long attente = 10000ul; // 10 secondes

void setup() {
  unsigned long chrono;

  Serial.begin(115200);

  UT390bSerial.begin(9600); // essayer différentes valeurs
  delay(1000); // petite attente

  Serial.println(F("Laser ON - ATTENTION AUX YEUX!!!!"));

  UT390bSerial.print("O"); // Ouvrir le laser
  delay(100);

  UT390bSerial.print("D"); // demande de mesure de distance

  Serial.println(F("Début de Demande de mesure laser"));
  // attente pour affichage de la réponse
  chrono = millis();
  while (millis() - chrono <= attente) { // on écoute le port série pendant 10 secondes
    if (UT390bSerial.available()) {
      Serial.print((char) UT390bSerial.read());
    }
  }
  Serial.println(F("Fin de Demande de mesure laser"));


  Serial.println(F("Début de Demande de params"));
  UT390bSerial.print("S"); // demande au module sa Temperature et son alimentation
  // attente pour affichage de la réponse

  chrono = millis();
  while (millis() - chrono <= attente) { // on écoute le port série pendant 10 secondes
    if (UT390bSerial.available()) {
      Serial.print((char) UT390bSerial.read());
    }
  }
  Serial.println(F("Fin de Demande de params"));
  
  UT390bSerial.print("C"); // on éteint le laser
  Serial.println(F("Laser OFF"));
}

void loop() {}

Bonjour,

J’ai essayé de faire ce que (j’ai compris de ce que) vous m’avez demandé mais je ne vois toujours pas le laser s’allumer.

voila le code:

#include <SoftwareSerial.h>

#define rxPin 4
#define txPin 8
SoftwareSerial laser =  SoftwareSerial(rxPin, txPin);

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println('O');
delay(1000);
Serial.println('D');
delay(5000);
Serial.println('C');
delay(10000);

j’ai utilisé 115200 , c’est pareil.

De plus, ces lettre sont utilisé dans un logiciel qui est inclus dans un adaptateur ttl->PC, certains vendeurs le fournisse mais ne fournisse pas d’écran ni de bouton, il utilise le pc pour afficher les valeurs mesurées.

:-\

Edit: je viens de voir votre message, merci, j’essaye de suite

J'ai fais varier la valeur de la console , mais aucune valeur n'est retournée, ni bip, ni laser.

Vu que mon laser et alimenté par les piles, je l'allumais en espérant qu'il prendra la mesure, toujours rien.

Dans le programme , je modifié systématiquement les deux valeurs contenues dans Serial.begin() et UT390serial.begin() afin qu'elle soit identique. Je sais pas si cela peut avoir une conséquence...

Quoiqu'il en soit, c'est très gentil d'avoir pris le temps de rédiger le code et et de s'impliquer autant, merci beaucoup.

Non il ne faut pas modifier le Serial.begin(115200); celui là définit comment votre Arduino parle à votre PC. donc vous ouvrez le moniteur Série de l'IDE à 115200 bauds et ne touchez rien sur cette partie, vous ne changez que le UT390serial.begin([color=blue]xxx[/color]) qui définit la vitesse de communication entre l'arduino et le laser. ils n'ont absolument pas besoin d'être identiques.

si ça ne fonctionne pas, faudra trouver de la doc plus précise sur votre module pour voir comment le mettre en mode port Série etc... comme vous l'avez vu dans le blog de nombreuses personnes n'ont pas réussi

Bonjour,

J'ai contacté le vendeur, il m'a dit que celui que j'avais acheté n'était pas adapté à l'Arduino, j'en ai donc commander un autre qui serai ,lui, compatible.

Quand je le recevrai, je ferai les test et reviendrai pour vous tenir au courant.

Merci de votre aide précieuse en tout cas.

Petite question, existe t'ils des capteurs de distance autre que laser pouvant aller jusqu'à 20m même en extérieur et plein soleil.
je n'en ai pas trouvé donc je voudrais être sur que je n'ai pas d'autre choix que le laser.

Merci encore.

Cordialement.

Le plus commun en effet ce sont les LIDAR

Un bon est assez cher, il y a les "light v3" dispo un peu partout

Cf un exemple (pas v3, le post date de 2015)

En quoi il n'était pas adapté à "l'arduino" ?
Manque-t-il d'interfaces de communication ou est-ce un problème de niveau ?
"Arduino" est-il à prendre dans le sens plus général des microcontroleurs ?

@68tjs

Sans doute c'était un UNI-T UT390B+ au lieu d'un UNI-T UT390B (sans le +)

Et c'est quoi la différence ?
Qu'est qui ferait qu'un convienne et pas l'autre ?
Cela me parait flou et quand c'est flou il y a un loup

le + n’a pas la partie port série activée (voire pas de hardware pour la partie série du tout - économie sur un nouveau composant mais conservé l’ancien design de la carte avec les pin séries visibles) donc rien sur les pins à ce que j’ai pu lire

Voilà qui est clair.
Parce que l'explication brute de hosein22 : "n'est pas adapté à l'arduino" ne me convient pas.

Merci.