Obtener registros sensor distancia.

Buenas tardes a todos, estoy creando mi primer post solicitando ayuda en esto e intentaré mantenerme al márgen de las normas del FORO.


COMPONENTES UTILIZADOS:

MEGA 2560.
Sensor Distancia JRT.


Problema:

Antes de comenzar a explicar el problema que tengo, quiero aclarar que soy primerizo en el tema de Arduino y estoy muy entusiasmado al tema, además de tener ya un proyecto el cuál me gustaría terminar a cualquier coste.

El propósito de utilizar este sensor es que obtendré un gran rango de lectura (100mts); antes de comenzar con estos sensores, realicé pruebas de lectura (Pensando que podría empezar por lo conocido y yá utilizado por otros desarrolladores) con los VL53L0X y logré mi cometido: PODER OBTENER DATOS DE PROXIMIDAD A TODO LO QUE SE LE PONGA ENFRENTE.
Una vez obtenidos esos datos y poder visualizarlos en MONITOR SERIE, logré hacer que, el sistema, basado en los datos obtenidos, pudiera encender tanto un LED, como también active una alerta sonora.

Una vez logrado todo esto, ahora intento realizar la misma acción con este sensor pero no logro obtener datos ni ningún tipo, y sin esos datos, no puedo seguir jaja.

Busqué en GOOGLE y demás, encontré HILOS en el foro como por ejemplo :Arduino TTL Oxygen Sensor Help - Programming Questions - Arduino Forum
que al parecer dan solución a este problema pero a mí no me funcionó.
Me gustaría saber que es lo que estoy haciendo mal.


Adjunto pines que tengo en el sensor.
Adjunto Características.
Adjunto Registros posibles del sensor.
Adjunto Parámetros posibles.


ADJUNTO CÓDIGO:

#include <SoftwareSerial.h>


SoftwareSerial mySerial(10,11); //RX/TX


void setup() 
{
  Serial.begin(19200);
  mySerial.begin(19200);
  
}


void loop() 
{
 
  if (mySerial.available())
 {
    Serial.write(mySerial.read());
  }
}

ACLARO: ES TODO EL CÓDIGO QUE TENGO, POR AHORA YA QUE, HASTA QUE NO LOGRE OBTENER LOS DATOS DEL SENSOR, NO PODRÉ AVANZAR.


Este código prácticamente lo tomé de la respuesta NO.2 del Link que posteé en el problema.

Agradeceré muchísimo su apoyo muchach@s.

SI NECESITAN ALGÚN DATO EXTRA, SE LOS DOY AL TOQUE...

Si hay alguna opinión o algún error en base a mi post, por favor háganmelo saber, espero que me apoyen, así como también espero poder apoyarlos y eso conlleva a escribir más hilos en un futuro y me gustaría mejorar en mis redacciones.

Amigo estuve intentando buscar un poco de informacion acerca del modulo que mencionas y parece ser que hay varios modelos distintos, no encontre una hoja de datos si tu la encuentras sería de mucha utilidad ahora en las imagenes que subiste veo la siguiente:


ese pin 10 parece ser que debe de ir a un voltaje alto, si lo estas llevando a alto? es que en el codigo que muestras no se ve como si tuvieses algun pin de control ni tampoco subes una imagen de como tienes conectado el sistemas.

Como recomendacion general, para futuros posts, te recomiendo que si mencionas componentes que puede que no sean comunes para todos (ejemplo el modulo de distancia que manejas) subas el datasheet de este componente, veo que lo intentaste hacer con las imagenes sin embargo tal vez un link a donde las sacaste puede ser de mas utilidad por ejemplo revisando en internet me di cuenta de que vienen configurados solo a esa velocidad 19200 baudios, lo de los registros que subes la verdad no lo vi en otro lado asi que me queda la duda de si toca hacer alguna configuracion para poderlos manejar.

Firius:

Muchas gracias por tu respuesta:

Conforme a tu respuesta, para ser honestos, el pin 10, no lo he utilizado, por qué? no me preguntes pero justo antes de ver tu respuesta, me puse a analizar y al parecer es un pin GPIO, entonces justo ahora estoy por encender el cautín y darle estaño para probarlo, ahora, es correcto que vienen a 19200 pero pueden ser configurables a la velocidad que quieras tu COM.
Por otra parte, adjunto el manual del Laser con todo gusto.

Ahora, mi pregunta es:

¿Crees que deba usar el pin 10 para lectura? o que me recomiendas?

Yo se que quizá mis preguntas sean algo absurdas pero en realidad soy nuevo en esto y prefiero preguntar que quedarme con la duda jaja.

Muchas gracias por apoyarme en esto!!!

B87A_MANUAL_LASER.pdf (1.1 MB)

A ver, no entiendo nada a pesar de la bastante buena información que has dado.
Qué modulo, donde mencionas un módulo de comunicaicon RF o no hablan de eso?
Además no veo imagenes (te envié privado para que edites), asi que poco puedo aportar

Buenas! por lo que puedo entender... el pin 10 te habilita o no el sensor. Es como un ENABLE... deberias conectarlo a 3.3V sino no se activara.

Por lo otro el pin 5 es un reset que se activa en LOW... por lo tanto también creo que deberías conectarlo a 3.3V si no quieres que se resetee.

Hi,
Para contestar tu pregunta de que pin puedes usar para el input. Los pines que tienes que usar para la comunicacionson los pines de TX y Rx.

surbyte:
A ver, no entiendo nada a pesar de la bastante buena información que has dado.
Qué modulo, donde mencionas un módulo de comunicaicon RF o no hablan de eso?
Además no veo imagenes (te envié privado para que edites), asi que poco puedo aportar

Que tal, ya respondí a tu privado e intentaré explicar mejor:

La intención es utilizar un módulo LIDAR, el cuál es el que presento a continuación:

Este laser es un sensor que mide la distancia, muy similar a la función que realiza el VL53L0X, que adjunto a continuación:

Con la gran diferencia de que el JRT, me puede dar un alcance de medición de hasta 150 metros, y el VL53L0X me da solamente 2 metros (GRAN DIFERENCIA).

Que quiero lograr? Simplemente quiero realizar detección de proximidad a largo alcance, en realidad, con lograr ver los datos que entrega este SENSOR en el Monitor, para mí es más que suficiente.

Te adjunto los pinout del JRT y demás adjuntos:

REGISTROS:

CARACTERISTICAS:

KEY PARAMETERS:

PINOUT DEL JRT:

Todo lo que se adjuntó en img, está sacado del manual que adjunté en el POST NO.2 por si a alguien le interesa.


Hublersin:
Buenas! por lo que puedo entender... el pin 10 te habilita o no el sensor. Es como un ENABLE... deberias conectarlo a 3.3V sino no se activara.

Por lo otro el pin 5 es un reset que se activa en LOW... por lo tanto también creo que deberías conectarlo a 3.3V si no quieres que se resetee.

HUBLERSIN:

Gracias por apoyarme en esto, así como también agradezco a los demás; claro, al parecer es lo que el PIN 10 puede realizar, estoy en ello, la cuestión es que no me gustaría quemar el sensor si cualquier error, es por eso que antes de conectar de la manera que creo que se pudiera, pregunto estas cosas jaja.

Un ejemplo:

Estoy confundido en esta parte porque el VL53L0X Tiene los siguientes pines:

vcc
gnd
scl (CLOCK)
sda (data)
gpio
xshut

De estos mencionados, los que utilicé para que me funcionara fueron los VCC, GND, SCL, SDA Y EL XHUT.

Los VCC Y GND para alimentación.

SCL para sincronizar el sensor con arduino.

SDA, como la recepción de datos.

XSHUT fue el que conecté en el pin 12 (PWM), que fue el que enviaba el pulso.

Ahora, una vez aclarado esta parte, los pines de JRT no son tan iguales al del VL53L0X, es por eso mi confusión, no se que pin usar como pulsador, ni tampoco se con cuál sincronizar y recibir datos del JRT.

Ahora, adjunto pines del sensor JRT:

Si no me explico, por favor diganmelo, hasta que me logre entender insistiré en mejorar mi explicación.

Saludos

Que tal Tauro:

Gracias por tu respuesta.

Si, he intentado conectar el sensor como me conectas y lo que obtengo, son datos erróneos, que haciendo pruebas de distancia, en el monitor, los datos se muestran estatico, oscilando entre los 290 y 300, pero esos datos, ni idea de que reflejen.

Por otra parte, es muy gracioso porque aún si desconecto el pin tx//rx mientras está tirando esos datos, sigue tirando los mismos números, entonces, deduje que no son datos obtenidos del sensor.

ADJUNTO MONITOR.

CapturaMONITOR.png

CapturaMONITOR.png

Buenas!!! Estuve leyendo... te paso a comentar:

Deberías fijarte en el cuadro 6.2 del manual. En el código que publicaste al menos no entablas comunicación con el láser.

La placa maestra debería ser el arruino y el eslavo tu láser.

Primero tenes que poner en HIGH los pines de reset y enable. Los 5 y 10 de tu láser. OOOJO!!! que soporta como máximo 4v, lo ideal es que trabajes con 3v o 3.3v.

Luego de esto el láser toma como 100ms en bootear.

Una vez transcurrido el tiempo debes enviar un "0x55" por el puerto serie para que el láser calibre automáticamente los baraudios. Luego de esto la arduino recibirá 1 byte de datos que es la dirección del láser.

De ahora en mas podes enviar y recibir datos al y desde el laser.

Puedes comprender?

Hublersin:

Muchas gracias por tu pronta respuesta.

Empezaré por soldar cable a reset justo ahora.

Ahora, me gustaría saber que pines utilizar, mi propuesta sería:

VCC
GND
RESET
GPIO

De aquí, utilizaría en el 10 el gpio, en high y el reset en el a1 en LOW?

Para llamar el ID que se usará, sería con la libreria Wire, cierto?

Estas trabajando con el JRT no?

Este no dispone de un pin GPIO...

Debes conectar el nRST a HIGH (3.3v) para inhabilitarlo... osea no reiniciar el laser.
Al momento de poner en marcha el sensor debes poner en HIGH (3.3v) el pin PWREN. La arduino trabaja con 5v creo... por lo que recomiendo que lo pongas en directo a 3.3v.

Los pines TX y RX van conectados a los TX y RX de la arduino respectivamente.

Y VCC y GND conectados a VCC y GND xD!!!!!

Ahora... la mega tiene 4 puertos serie... puedes utilizar el Serial común para comunicarte con el monitor y el Serial1 para comunicarte con el láser.

Abres el puerto serie y envías un "0x55"

void setup() {

  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.write(0x55); // Le indico al laser que comience configure automaticamente la frecuencia de su puerto serie.
}

Dejo esto para que vayas viendo... mientras tanto prosigio y lo cuelgo con un EDIT!

Hublersin, no sabes lo mucho que me estás ayudando!

Agradeciendo nuevamente tu pronta respuesta.

El sensor lo estoy utilizando a 3.3 porque ese es su pico MAX, en eso tienes toda la razón, entonces, voy a setear tal cuál me estás comentando y en un momento más te voy diciendo que tal voy.

Nuevamente, MIL GRACIAS!

SE ME PASÓ UNA COSA, AL DECIR QUE CONECTE EL nRST a 3.3v, es conectarlo en cualquier puerto y setearlo a HIGH?

NONO! deja el nRST a 3.3 ... es un nivel logico alto para el laser, osea que esta en HIGH! eso esta perfecto.

Ahora lo que vamos a hacer es crear un Array con la cadena de bytes que hay que enviarle al laser para comunicarnos con el... por ejemplo para tomar la distancia con un solo disparo. Para esto lee la parte "6.4.10 Start 1-shot Auto Distance Measure" del manual.

Vas a ver que nos pone un array de byte para enviar... y el Array de byte que nos va a devolver el laser... en el cual algunos de estos son la distancia en milimetros medida.

byte oneShotAUTO[] = { 0xAA, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x21}; // Establecemos el array de bytes para pedir la medicion automatica de 1 disparo.
byte lectura[13];
int largo;
     
void setup() {

  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.write(0x55); // Le indico al laser que comience configure automaticamente la frecuencia de su puerto serie.
  
}

void loop() {

  Serial.print("Envio de datos para medicion automatica de un disparo");
  Serial1.write(oneShotAUTO, 9); // Fijate en el manual en el punto 6.
  do{
    largo = Serial1.available();
  }while (largo < 12); // Esperamos a que la cantidad de bytes disponibles en el buffer sean de 12
  Serial1.readBytes(lectura,largo); //leemos los bytes del bufer y los almacenamos en el array "lectura"
  Serial.print("La distancia medida fue");
  for(int i = 6; i<=9; i++){
    Serial.print(lectura[i]);
  }                               //imprimimos en el monitor serie los bytes 6 7 8 y 9 que son los milimetros medidos
  Serial.print("milimetros");
  delay(1000);  //esperamos 1 segundo hasta la proxima medicion
}

Estoy trabajando medio a ciegas! jejejeje
Asi que puede haber muchos errores.. pero si vas publicando como fluye el proyecto te puedo ir ayudando con lo que pueda :)!

Arbazo! y espero las buenas nuevas :D!

No sabes lo agradecido que estoy por tu apoyo.

Disculpa mi ignorancia, ya estoy probando el código pero aún no termino de captar de que manera conecto el cableado del sensor jaja, es decir, que pin va en cuál.. u.u
Disculpa nuevamente, en verdad soy nuevo en esto y quizá se escucha muy tontas mis dudas pero prefiero mil veces preguntar a quedarme con la duda...

Yo estoy muy oxidado jaja! Hace años que no toco una arduino.. Pero vamos a ver que nos depara esto.

PIN 5: 3.3v
PIN 7: Pin 18 Arduino mega (TX del SERIAL1)
PIN 8: Pin 19 Arduino mega (RX del SERIAL1)
PIN 9: 3.3v
PIN 10: 3.3v
PIN 11: GND

Vamos bien? jaja

Gracias por tu respuesta Hublersin!

Ya acomodé el cableado tal cuál me comentas, pruebo y en minutos te digo.

Gracias nuevamente

FrancoARB:
No sabes lo agradecido que estoy por tu apoyo.

Disculpa mi ignorancia, ya estoy probando el código pero aún no termino de captar de que manera conecto el cableado del sensor jaja, es decir, que pin va en cuál.. u.u
Disculpa nuevamente, en verdad soy nuevo en esto y quizá se escucha muy tontas mis dudas pero prefiero mil veces preguntar a quedarme con la duda...

Hublersin:
Yo estoy muy oxidado jaja! Hace años que no toco una arduino.. Pero vamos a ver que nos depara esto.

PIN 5: 3.3v
PIN 7: Pin 18 Arduino mega (TX del SERIAL1)
PIN 8: Pin 19 Arduino mega (RX del SERIAL1)
PIN 9: 3.3v
PIN 10: 3.3v
PIN 11: GND

Vamos bien? jaja

Hublersin:

Esto fue lo que obtuve:

Ahora, el arduino quedó pasmado pero parece ser que por lo que el código dicta, ha terminado su ciclo.

Al parecer tenemos un problema con los bytes que estamos leyendo.

Vamos a probar con otra cosa

byte oneShotAUTO[] = { 0xAA, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x21}; // Establecemos el array de bytes para pedir la medicion automatica de 1 disparo.
int largo;
     
void setup() {

  Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.write(0x55); // Le indico al laser que comience configure automaticamente la frecuencia de su puerto serie.
  
}

void loop() {
  Serial.print("Envio de datos para medicion automatica de un disparo");
  Serial1.write(oneShotAUTO, 9); // Fijate en el manual en el punto 6.
  delay(1000); //Esperamos 1 segundo para dar tiempo a procesar los datos
  largo = Serial1.available(); //Verificamos la cantidad de bytes disponibles para lectura
  for (int i; i<largo+1;i++){
    Serial.print(Serial1.read(),HEX);;
  }                                 //Representamos 1 a 1 el valor de los bytes
  Serial.print("............................");
  delay(1000);
}

Si podes.. para hacer mas rápido. Copia y pega los primeros ciclos que te mande el monitor aqui.. va a ser mas fácil leerlo :slight_smile:

EDIT: ATENTO! cambie el formato en que va a representar los bytes... "Serial.print(Serial1.read(),HEX);"

Hublersin:
Al parecer tenemos un problema con los bytes que estamos leyendo.

Vamos a probar con otra cosa

byte oneShotAUTO[] = { 0xAA, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x21}; // Establecemos el array de bytes para pedir la medicion automatica de 1 disparo.

int largo;
   
void setup() {

Serial.begin(9600);
  Serial1.begin(9600);
  Serial1.write(0x55); // Le indico al laser que comience configure automaticamente la frecuencia de su puerto serie.
 
}

void loop() {
  Serial.print("Envio de datos para medicion automatica de un disparo");
  Serial1.write(oneShotAUTO, 9); // Fijate en el manual en el punto 6.
  delay(1000); //Esperamos 1 segundo para dar tiempo a procesar los datos
  largo = Serial1.available(); //Verificamos la cantidad de bytes disponibles para lectura
  for (int i; i<largo+1;i++){
    Serial.print(Serial1.read(),HEX);;
  }                                //Representamos 1 a 1 el valor de los bytes
  Serial.print("............................");
  delay(1000);
}




Si podes.. para hacer mas rápido. Copia y pega los primeros ciclos que te mande el monitor aqui.. va a ser mas fácil leerlo :)

EDIT: ATENTO! cambie el formato en que va a representar los bytes... "Serial.print(Serial1.read(),HEX);"

Gracias nuevamente por tu respuesta Hublersin!

Te comento, los datos obtenidos son los siguientes:

15:06:21.192 -> Envio de datos para medicion automatica de un disparo
15:06:21.693 -> 28
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.693 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> 0
15:06:21.740 -> FFFFFFFF
15:06:21.740 -> ............................
15:06:22.241 -> Envio de datos para medicion automatica de un disparo
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.743 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> 0
15:06:22.796 -> ............................
15:06:23.296 -> Envio de datos para medicion automatica de un disparo
15:06:23.797 -> ............................
15:06:24.298 -> Envio de datos para medicion automatica de un disparo
15:06:24.765 -> ............................
15:06:25.304 -> Envio de datos para medicion automatica de un disparo
15:06:25.805 -> ............................
15:06:26.307 -> Envio de datos para medicion automatica de un disparo
15:06:26.808 -> ............................
15:06:27.310 -> Envio de datos para medicion automatica de un disparo
15:06:27.811 -> ............................
15:06:28.312 -> Envio de datos para medicion automatica de un disparo
15:06:28.812 -> ............................
15:06:29.314 -> Envio de datos para medicion automatica de un disparo
15:06:29.819 -> ............................
15:06:30.313 -> Envio de datos para medicion automatica de un disparo
15:06:30.815 -> ............................
15:06:31.369 -> Envio de datos para medicion automatica de un disparo
15:06:31.870 -> ............................
15:06:32.372 -> Envio de datos para medicion automatica de un disparo
15:06:32.872 -> ............................
15:06:33.374 -> Envio de datos para medicion automatica de un disparo
15:06:33.875 -> ............................
15:06:34.371 -> Envio de datos para medicion automatica de un disparo
15:06:34.889 -> ............................
15:06:35.390 -> Envio de datos para medicion automatica de un disparo
15:06:35.891 -> ............................
15:06:36.392 -> Envio de datos para medicion automatica de un disparo
15:06:36.893 -> ............................
15:06:37.394 -> Envio de datos para medicion automatica de un disparo
15:06:37.896 -> ............................
15:06:38.398 -> Envio de datos para medicion automatica de un disparo
15:06:38.900 -> ............................
15:06:39.401 -> Envio de datos para medicion automatica de un disparo
15:06:39.928 -> ............................
15:06:40.429 -> Envio de datos para medicion automatica de un disparo
15:06:40.930 -> ............................
15:06:41.445 -> Envio de datos para medicion automatica de un disparo
15:06:41.946 -> ............................
15:06:42.447 -> Envio de datos para medicion automatica de un disparo
15:06:42.948 -> ............................
15:06:43.450 -> Envio de datos para medicion automatica de un disparo
15:06:43.951 -> ............................
15:06:44.447 -> Envio de datos para medicion automatica de un disparo
15:06:44.958 -> ............................
15:06:45.444 -> Envio de datos para medicion automatica de un disparo
15:06:45.990 -> ............................
15:06:46.473 -> Envio de datos para medicion automatica de un disparo
15:06:46.990 -> ............................
15:06:47.491 -> Envio de datos para medicion automatica de un disparo
15:06:47.997 -> ............................
15:06:48.518 -> Envio de datos para medicion automatica de un disparo
15:06:48.980 -> ............................
15:06:49.481 -> Envio de datos para medicion automatica de un disparo
15:06:49.980 -> ............................
15:06:50.517 -> Envio de datos para medicion automatica de un disparo
15:06:51.031 -> ............................
15:06:51.502 -> Envio de datos para medicion automatica de un disparo
15:06:52.021 -> ............................
15:06:52.532 -> Envio de datos para medicion automatica de un disparo
15:06:53.038 -> ............................
15:06:53.553 -> Envio de datos para medicion automatica de un disparo
15:06:54.022 -> ............................
15:06:54.540 -> Envio de datos para medicion automatica de un disparo
15:06:55.044 -> ............................
15:06:55.573 -> Envio de datos para medicion automatica de un disparo
15:06:56.047 -> ............................
15:06:56.564 -> Envio de datos para medicion automatica de un disparo
15:06:57.050 -> ............................
15:06:57.571 -> Envio de datos para medicion automatica de un disparo
15:06:58.061 -> ............................
15:06:58.583 -> Envio de datos para medicion automatica de un disparo
15:06:59.090 -> ............................
15:06:59.594 -> Envio de datos para medicion automatica de un disparo
15:07:00.078 -> ............................
15:07:00.573 -> Envio de datos para medicion automatica de un disparo

Modifiqué la Parte de conversión a HEX, esa fue su resultante.

ADJUNTO IMAGEN DE CABLEADO, QUIZÁ ESTÉ HACIENDO ALGO MAL...

Okey!!! En este momento estoy saliendo del trabajo... ni bien llego a casa sigo revisando donde puede estar el problema!