Go Down

Topic: Un ROV con mando de PS2 (Read 2104 times) previous topic - next topic

asesorplaza1

#15
Mar 25, 2020, 10:14 pm Last Edit: Mar 26, 2020, 04:59 pm by asesorplaza1
Gracias por su tiempo.

Creo que no me he explicado bien, le comento.

El programa llamado 01_Maestro_22_03_2020_con_mando_Inalambrico, es el programa del Arduino que esta en la superficie, al lado del operador del vehículo, y ese programa solo tiene 2 librerías,

Code: [Select]


#include <PS2X_lib.h> // Libreia PS2 de Bill Porter
#include <EasyTransfer.h> // Libreria Easy Transfer de Bill Porter





La primera librería es la del mando de la PS2, y la segunda librería es la de la comunicación en serie, este programa controla el mando de la PS2, manda las ordenes del mando al otro Arduino, y recibe los datos de los sensores, no controla ningún sensor, ni tiene ningún sensor conectado, solo el mando de la PS2.

En el otro programa llamado 02_Esclavo_22_03_2020_con_mando_Inalambrico, que es el del Arduino llamado Esclavo, que es el que va dentro del vehículo, es donde están las librerías de los distintos sensores, porque en este Arduino, SI están conectados los sensores, y es el que los controla y manda los datos al otro Arduino llamado Maestro, y en este si que estan las librerias de los distintos sensores.


Code: [Select]


// se ponen todas las librerias juntas
#include <Wire.h>               // libreria i2c para el Giroscopio
#include <Servo.h>              // libreria para gestionar los servos y los ESC
#include <EasyTransfer.h>       // libreria Easy Transfer de Bill Porter
#include <Adafruit_Sensor.h>    // libreria para gestionar el sensor de temperatura DHT22
#include "DHT.h"                // libreria para el sensor DHT 22
#include <OneWire.h>            // libreria para el sensor de temperatura DS18B20
#include <DallasTemperature.h>  // Libreria para el sensor de temperatura DS18B20


Son dos Arduinos con dos programas distintos

Muchas gracias.



PeterKantTropus

Tal vez yo no fui claro, en el programa del esclavo utilizas las propiedades de la librería Wire, y utilizas esta librería para comunicarte con el MPU, pero es mas sencillo, y con menos posibilidades de error, utilizar una librería especializada para manejos de MPU Como
"Si no entra como tornillo, entra como clavo"

asesorplaza1

Gracias por su tiempo.

Tiene razón, si hay una librería especifica para un sensor, siempre es mejor usar esa librería que no usar una librería genérica.

Ese trozo del código lo vi en una pagina que utilizaban el giroscopio GY MPU6050, para usarlo en un dron, y como era la manera mas corta y sencilla de usar ese giroscopio, en su momento pensé que seria mejor usarla, pero ya veo que no.

Usare la librería que usted me indica, en vez de la que puse en el código.

Muchas gracias

PeterKantTropus

#18
Mar 26, 2020, 04:57 pm Last Edit: Mar 26, 2020, 06:43 pm by PeterKantTropus
Estuve analizando tus programas y creo que el problema es que colapsa las comunicaciones. En el esclavo estas enviando la información que te interesa  mediante los paquetes de "Easy Transfer", pero al mismo tiempo estas enviando un montón de serialprint que al maestro no le interesan y que supongo que están allí para depurar el programa cuando esta conectada al PC.
Como tienes dos megas la solución es fácil, conectalos entre si, con el segundo puerto serie que disponen los megas y saca los paquetes de "Easy Transfer" por el y conserva los serial print para depuración por USB. Ademas deberías temporizar los paquetes que salen del esclavo, el arduino tiene la capacidad de saturar el puerto serie.
"Si no entra como tornillo, entra como clavo"

asesorplaza1

#19
Mar 26, 2020, 05:49 pm Last Edit: Mar 26, 2020, 06:17 pm by asesorplaza1
Muchas gracias por su tiempo.

Si efectivamente hay dos tipos, o grupos de datos, en el programa del Arduino Esclavo, uno de ellos son los datos que quiero que se manden al otro Arduino, mediante el paquete de "Easy_Transfer", y el otro grupo, es el que quiero que se vean en el Monitor Serie del ordenador, para comprobar el funcionamiento y la lectura de los sensores y posteriormente esos datos, también se tienen que ver en una pantalla Nextion, conectada al Arduino Maestro.

Si he entendido a lo que se refiere, me esta indicando que tengo que separar los datos que quiero que se vean en el Monitor Serie del Arduino Esclavo, en el ordenador, de los datos que quiero que se envíen al Arduino Maestro.

Por lo que he podido leer en Internet, el Arduino mega tiene 5 pares de pines utilizados como puertos serie

El par 0, el que se utiliza para el puerto USB, y no esta a disposición del usuario como pines

El par 1, los pines 0, RX, y 1, TX

El par 2, los pines 18, TX1 y 19, RX1

el par 3, los pines 16, TX2 y 17 RX2

el par 4, los pines 14 ,TX3 y 15 RX3


Entonces seria dejar los SerialPrint, sin tocar como están, para que salgan por el puerto USB, y de alguna manera asignar los pines, por ejemplo 14 y 15, para la transmisión de Easy_Transfer, mas o menos modificando el código así

Code: [Select]

EasyTransfer ETin=14, ETout=15;



O de esta otra manera seria mejor?

Code: [Select]

EasyTransfer ETin, ETout;
const int ETin = 14;
const int ETout = 15;


Donde ETin = 14, seria el pin de entrada de datos, y ETout = 15, seria el pin de salida de datos

Y así de esta manera conseguiré separar los datos que se deben ver en el ordenador, de los datos que se deben mandar al otro Arduino, para no colapsar la Comunicación Serie.

O directamente pinchar los dos Arduinos a los puertos 14 y 15.

Le ruego que me confirme cual de las tres seria la opción mejor, o si no vale ninguna, me indicase como se debe hacer.

Lo que no se a que se refiere es a

Ademas deberías temporizar los paquetes que salen del esclavo, el arduino tiene la capacidad de saturar el puerto serie.
Puede ser algo parecido a lo que hago con la lectura de los sensores DHT22

Code: [Select]

  int intervaloMedidas = 1000;        // hace que solo se lean los valores 1 vez por segundo
  int auxMillis = 0;                  // Indica el valor del intervalo de tiempo



Para que no este continuamente mandando paquetes de datos, si no cada cierto tiempo.

Pero no tengo ni idea de como hacerlo, o de que tipo de ordenes se debe utilizar.

Muchas Gracias.

PeterKantTropus

#20
Mar 26, 2020, 06:33 pm Last Edit: Mar 26, 2020, 06:34 pm by PeterKantTropus
En realidad es mas fácil

la única modificación por software es  (en ambos arduinos)


Code: [Select]
Serial.begin(57600);                     // Comienza Serial para hablar con el Arduino Maestro a 9600 baudios ***
Serial1.begin(57600)
  ETin.begin(details(rxdata), & Serial1);
ETout.begin(details(txdata), & Serial1);

 e interconectar los pines 18 y 19 de manera cruzada, pero le recomiendo que lea algunos de los muchos tutoriales que sobre el tema.


Y si, con millis hay que implementar una rutina para espaciar los paquetes.
"Si no entra como tornillo, entra como clavo"

asesorplaza1

Muchas gracias por su tiempo.

Voy a probar a ver que pasa, espero que mejore mucho la comunicación.


Muchas gracias

asesorplaza1

#22
Mar 26, 2020, 10:14 pm Last Edit: Mar 26, 2020, 10:18 pm by asesorplaza1
He incluido la librería de MPU6050, y he modificado las lineas que me ha dicho PeterKantTropus, y así de primeras lo que he notado es que el programa compila mucho mas rápido, algo es algo.

asesorplaza1

El sensor que sigue cambiando aleatoriamente, es el de infrarrojos E18D80NK, cambia de estado sin que nada corte la luz.

asesorplaza1

El Giroscopio no marca bien se queda fijo en el dato pitch -35, roll -35, independientemente de hacia donde lo mueva.

asesorplaza1

Los ESC, no reaccionan al mando, hacen el pitido de inicio, y la luz del testigo se queda intermitente, como si estuvieran esperando la orden de control.
Sin embargo si desconecto el Arduino, y los enciendo, hacen el pitido del ciclo de inicio, y se apaga la luz del testigo, que es lo que tiene que hacer.

asesorplaza1

Vuelvo a adjuntar los códigos modificados, he marcado las lineas que he cambiado al final de la línea con ***, para saber que se ha cambiado.

Muchas gracias

asesorplaza1

El Monitor Serie del Maestro va como una moto, no me da tiempo a leer lo que pone, tengo que desmarcar la casilla del autoscroll, para poder leer lo que pone, y están todos los datos a cero.

asesorplaza1

Estoy poniendo toda esta serie de comentarios para que sepáis que es lo que esta haciendo, por supuesto que no le echo la culpa a las 4 lineas que he cambiado, todo esto ya me lo hacia antes de los cambios, pero intento transmitiros de la mejor manera posible los síntomas, para que me podáis ayudar mejor.

Muchas gracias, un saludo.

asesorplaza1

El relé que enciende el foco de iluminación exterior, no se dispara cuando aprieto el botón del mando, sino al buen rato, cuando le parece.

Go Up