Un ROV de agua dulce, con mando de PS2

Si te gustan los modelos Radio Control RC este es tu foro.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Buenos días a todos.

Lo primero, comentaros que llevo bastante tiempo utilizando el foro como fuente de consulta, y daros la enhorabuena, por el foro y todas las publicaciones que hay en él.

En consecuencia, os debo una publicación con mis progresos, por eso me atrevo a abrir este tema.

Quiero dejar claro, que no soy ningún experto constructor de barcos, ni ningún experto ni en electrónica, ni en programación de Arduino, solo un aficionado con muchas ganas de hacer un proyecto, que llevo un montón de tiempo investigando y progresando muy despacio, con una relación inversa entre tiempo de investigación y el progreso, lo cual quiere decir que tengo que investigar y aprender mucho, para dar el más mínimo paso.

Bueno, pues no me lío más y vamos al grano.

Quiero presentaros un proyecto, en el que estoy liado desde el 2.016, y que aun no está acabado aun, porque tengo bastantes problemas con la programación de los Arduinos, que controlan el vehículo, pero sigo adelante con el proyecto.

En alguna ocasión me habéis leído comentar que estoy haciendo un ROV, Vehículo Sumergible Operado Remotamente, algo parecido a un submarino de investigaciones subacuáticas.

Al final debe quedar algo así.

Foto de mi compañero de otro foro, llamado JMEnriquez, del Club de RC Cordoba.

Pero ahora mismo lo que tengo es esto.

Fotos mías del ROV

Pero por desgracia, lo que no se ve es lo que más tiempo y trabajo me está llevando, que es la programación de los Arduinos de control, y de esta parte no puedo poner fotos, es un trabajo que tengo que hacer en el ordenador, investigando en Internet.

Os cuento lo que tengo hasta ahora:
La idea es que quiero construir un vehículo que se desplace por el agua tanto por la superficie como por dentro del agua, vamos que navegue y se sumerja, me muestre las imágenes de vídeo en tiempo real, y me muestre los datos de algunos sensores que me indiquen la temperatura interior de ROV, la temperatura exterior, la presión interna y externa, y con unas formulas matemáticas, calcular la profundidad a la que se encuentra el ROV, la inclinación por medio de un giroscopio, y por supuesto que me encienda unos focos, para poder ver bajo el agua.
Adjuntos
Foto de JMEnriquez, del RC Cordoba
Foto de JMEnriquez, del RC Cordoba
4k6trd.jpg (30.74 KiB) Visto 3833 veces
Foto de mi casco, en la actualidad
Foto de mi casco, en la actualidad
08.jpg (38.36 KiB) Visto 3833 veces
Avatar de Usuario
carlosys
Administrador Web
Administrador Web
Mensajes: 2017
Registrado: Dom Ago 29, 2010 7:37 am
Ubicación: Tarragona
Contactar:

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por carlosys »

Hola
Este proyecto tiene una pinta muy buena.
Respecto a Arduino, puedes poner los códigos de los programas o subir en formato comprimido lo que necesites si no pasa de 500Kb.
Así que, con total libertad puedes publicar la parte del código y si es necesario, recibir ayuda (si es que sabemos jaja)

Lo dicho. Proyecto interesante y diferente.

Saludos
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

El ROV, lo estoy manejando con un sistema distinto al que estamos acostumbrados en el RC, al ser un ROV preparado para sumergirse a 100 metros de profundidad, no lo puedo controlar por radiofrecuencia, puesto que las ondas de radiofrecuencia, experimentan una serie de problemas al cambiar de medio (aire/agua) que no se pueden solucionar fácilmente, reflexión, refracción, y perdidas. Por lo que yo estoy utilizando la transmisión por cable, entre el puesto de control, y el vehículo.

Foto del SEA PERCH

En el puesto de control, tengo un Arduino Mega 2560, al que tengo conectado un mando de PS2, (Play Station 2), y algunos LED, para que me indiquen que estoy pulsando los distintos botones del mando, de momento el Arduino, esta pinchado al ordenador, para poder controlarlo, pero la intención es ponerle una pantalla táctil Nextion de 5 pulgadas HMI, que me muestre todos los datos de los sensores del ROV.

Alguno se preguntara, ¿Por qué?, he elegido este sistema, por dos motivos.

El primero porque en el mando tengo 3 bloques de 4 botones cada uno, por lo tanto 12 botones, mas 2 joystick, con 2 ejes y un botón al presionarlos, lo que me hacen un total de 16 canales de una emisora normal de RC.

El segundo, y principal, es porque realmente no puedo utilizar una emisora de RC, por lo que ya os he comentado de los problemas de las ondas radioeléctricas, al cambiar de medio (aire/agua).

Un saludo a todos.
Foto del SeaPerch, o percha de mar
Foto del SeaPerch, o percha de mar
con cable.jpg (59.96 KiB) Visto 3824 veces
Última edición por asesorplaza1 el Dom Abr 26, 2020 2:06 pm, editado 1 vez en total.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Por desgracia el código es bastante mas grande de 500KB.
Ahora mismo, tengo 600 líneas en el código al que llamo "Maestro", y 700 líneas en el código al que llamo "Esclavo".
Voy a probar a ver si lo puedo adjuntar como código, pero creo que no, lo voy a tener que adjuntar como fichero comprimido.

Un saludo a todos.
Avatar de Usuario
JuanP
Colaborador
Colaborador
Mensajes: 73
Registrado: Jue May 26, 2016 9:10 pm
Ubicación: Sevilla

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por JuanP »

¿600 lineas de código en uno y 700 líneas en otro?
Impresionante.
Como te he dicho, le he estado echando un ojo a la programación con arduino y no es cosa facil.
Haber escrito todas esas lineas es una obra faraónica.
Avatar de Usuario
carlosys
Administrador Web
Administrador Web
Mensajes: 2017
Registrado: Dom Ago 29, 2010 7:37 am
Ubicación: Tarragona
Contactar:

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por carlosys »

asesorplaza1 escribió: Sab Abr 25, 2020 2:57 pm Por desgracia el código es bastante mas grande de 500KB.
Ahora mismo, tengo 600 líneas en el código al que llamo "Maestro", y 700 líneas en el código al que llamo "Esclavo".
Voy a probar a ver si lo puedo adjuntar como código, pero creo que no, lo voy a tener que adjuntar como fichero comprimido.

Un saludo a todos.
OK. Si tienes problemas de tamaño, pásamelo por mail y ya lo subo yo y lo enlazo con tu hilo.
600 líneas de código aunque puedan parecer muchas, no son muchas :? aunque tampoco son pocas.

No utilizas ninguna librería para gestionar determinados módulos?

Saludos
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Creo que antes de publicar el código, que todavía no funciona del todo correctamente, voy a seguir explicando el proyecto y poco a poco os iré mostrando mis progresos y atascos.

Sigo con la explicación

Aunque ya os he comentado la idea básica, hora voy a profundizar un poco más en todos las partes del ROV.

Puesto de Control

Os presento a los protagonistas de este proceso, un Arduino Mega 2560, un mando de PS2, una pantalla Nextion de 5”, y en su momento ya os explicare para que necesitaré un ordenador portátil.

Foto del Arduino Mega 2560
El Arduino Mega 2560, es el de en medio
El Arduino Mega 2560, es el de en medio
05.jpg (88.17 KiB) Visto 3814 veces
Foto del Mando PS2
Mando de PS2, con todas sus posibilidades
Mando de PS2, con todas sus posibilidades
ps2_controller_h6WUIp9OsW.jpg (74.11 KiB) Visto 3814 veces
Foto de la Nextion
Esta es la pantalla Nextion
Esta es la pantalla Nextion
Nextion-5-0-HMI-Intelligent.jpg (31.48 KiB) Visto 3814 veces
La idea es la siguiente, con el mando de la PS2, muevo el ROV, y controlo todas las funciones que quiero que haga, como si fuese una emisora de RC de 16 canales, (de momento me sobran botones, pero ya que están en su momento les iré encontrando su utilidad particular), con el joystick o palo derecho, controlo el avance o retroceso, y la dirección, como si fuese un coche de RC, hacia adelante, hacia a tras, hacia la derecha o hacia la izquierda.

Esto lo consigo con el empuje de los motores, con el mismo principio de movimiento de un tanque militar RC, hacia adelante y hacia atrás, los dos motores giran en la misma dirección, los dos motores giran en el sentido de las agujas del reloj, el ROV avanza, con los dos motores girando en sentido contrario a las agujas del reloj, el ROV retrocede, cuando quiero que gire hacia la derecha o hacia la izquierda, el motor derecho gira en un sentido y el motor izquierdo en el sentido contrario, provocando que las fuerzas ejercidas por los motores hagan girar el ROV sobre su eje central, esto creo que se entiende bien, es bastante fácil, e incluso se utiliza como sistema de dirección en algunos barcos.

Todavía tengo que estudiar, si este empuje es suficiente para maniobrar el ROV, hacia la derecha y hacia la izquierda, o voy a tener que implementar algún tipo de timón, que me ayude en la maniobra, hasta que no lo pruebe en el agua no lo sabré con certeza, por lo que he podido ver en otros proyectos, se considera suficiente, en mi proyecto ya os digo que no lo tengo claro todavía.

Con los botones R1 y R2, controlo que el ROV suba o baje en profundidad del agua, estos botones, controlan un servo y dos motores fijos de apoyo, que dependiendo de qué botón presione, hacen que el servo y los motores de apoyo, giren en un sentido, y si presiono el otro botón el servo y los motores de apoyo, giraran en sentido contrario, y mediante un eje de acero, al que le he acoplado un sistema de balanceo, el servo, me inclina los tubos de los motores, haciendo que estos se inclinen sobre su eje central, y así, empujen el agua según me convenga, cuando el servo está en posición neutral o cero, el agua es empujada por las hélices, en horizontal al eje del barco, y el ROV, navega por encima del agua, si modifico la orientación del tubo, y subo la parte de atrás, donde está la hélice, por el principio de acción/reacción, el agua es empujada hacia arriba, por lo que el ROV, tiende a ganar en profundidad y se sumerge, si modifico el ángulo de inclinación haciendo bajar la hélice, con las mismas, el agua es empujada hacia abajo, y el ROV sube a superficie.

Para este proceso, no he querido utilizar las cámaras inundables estilo submarino, por considerar este aspecto, excesivamente complicado, lo he simplificado bastante, utilizando la fuerza bruta de los motores, cuando se realiza el proceso de inmersión, para la emersión, o subida a superficie, entre la flotabilidad positiva del propio diseño del ROV, y un poco de fuerza de los motores, consigo que el ROV suba a superficie.
Esto lo podéis ver en cualquier vídeo del Youtube, donde haya cualquier ROV en acción.
Por ejemplo en este

Última edición por asesorplaza1 el Dom Abr 26, 2020 2:06 pm, editado 1 vez en total.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

El ordenador portátil lo quiero para ver las imágenes del ROV, en tiempo real, y os cuento como.

Después de mucho leer en internet y observar otros proyectos, y estudiar el Arduino Mega 2560 en profundidad, resulta que no se le pueden pedir peras al olmo, con esto me refiero que cada cosa esta diseñada para una función, y Arduino en definitiva, no sirve para procesamiento de imágenes, se queda corto de recursos, no puede gestionar una cámara de video, si puede hacer fotos, guardarlas en una tarjeta, y luego esas fotos las puedes ver en tu casa, pero no puedes ver las imágenes de video en tiempo real.

Arduino, sirve para gestionar sensores de todo tipo, directamente puede gestionar motores de baja potencia, 3 V, 5 V, y con ayuda mediante una shield o sombreo motores más grandes 12 V, 20 V, y también puede gestionar motores grandes, cuando digo grandes, me refiero a lo más grande que os podáis imaginar, pero mediante un relé, que encienda el motor, Arduino gestiona el relé a 5 V, y el relé enciende el motor de 220 V, o 380 V, dependiendo de las características del relé.

Y aun así cuando le pinchas varios sensores, no tiene voltaje ni amperaje, para moverlos, necesita el apoyo de la corriente externa, (una pila o batería), para alimentar los sensores.

Entonces es cuando entra en escena la competencia, la Raspberry Pi 3 +, un mini ordenador, al que pinchándole un teclado, un ratón y un monitor, tienes un montón de posibilidades. Pero ¿cuál es el problema?, que utilizan dos lenguajes de programación distintos y que no tienen nada que ver el uno con el otro, Arduino se programa en un derivado de C++, (del que estoy aprendiendo algo), y Raspberry, en un derivado de Python, que se llama Raspbian (del que no tengo ni idea).

https://www.raspberrypi.org/

Por lo tanto tienes que saber los dos lenguajes de programación para sacar algo en claro, o investigar cómo se controla Arduino con una Raspberry, o como se controla una Rasberry con un Arduino, y a eso se le llama, Ingeniería de Programación, carrera que no he estudiado

De todas formas no se puede utilizar una Raspberry solo para el proyecto, porque a la Raspberry, no es fácil de hacer que controle sensores, ni se le pueden pinchar tantos sensores como tú quieras, volvemos a lo mismo, cada uno de estos controladores está diseñado para una función distinta, solución, utilizar los dos controladores y que cada uno realice una función distinta.

Por lo tanto la Raspberry, la estoy utilizando para que me mande las imágenes de la cámara de video en tiempo real, directamente al ordenador, de una manera muy sencilla.

Siguiendo los pasos del inicio de Raspberry, se arranca la Raspberry, se configura una cámara USB, y se consigue la dirección IP de la Raspberry, con un programa de video que se llama VideoLand VLC.

https://www.videolan.org/

Que a lo mejor a alguno os suena, se le pone que reproduzca las imágenes de la dirección IP de la Raspberry, y ya estás viendo las imágenes de video en tiempo real en el ordenador.

Esto es un resumen rápido de como se hace, a mi me ha costado 6 meses de investigación conseguirlo.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Sobre las líneas del código

Si a vosotros os parece
“impresionante”, a uno
Y al otro, “No son muchas aunque tampoco son pocas”

Os garantizo que para mi esta siendo un trabajo tedioso donde los haya, no solo por escribir el número de líneas, si no porque hay que hacerlo en un lenguaje de programación, (al que no estoy acostumbrado), yo escribo en Español, y mal, y encima el programa tiene que compilar, (órdenes concretas y correctas que cuando se pasan a leguaje binario (maquina ordenador), ceros y unos, tengan sentido para el controlador), y no es fácil, de los 4 años que llevo con el proyecto, mas de 3, son con el dichoso programa.

Sigo explicando el funcionamiento del ROV

En el interior de ROV, hay otro Arduino Mega 2560, que es al que llamo “ Esclavo “, este es el que hace gran parte del trabajo, recibe las ordenes del mando de la PS2, que le manda el otro Arduino, (el que está en el puesto de control, al que llamo “ Maestro “), este Arduino, es el que hace trabajar a los sensores para que consigan los datos, y manda esos datos al Arduino “ Maestro “, también hace trabajar al servo, hace trabajar a los motores, controla el relé que enciende y apaga los focos externos de iluminación, etc.

NO COMPRÉIS NADA DE ESTO, PUESTO QUE TODAVÍA ESTOY EN PRUEBAS, Y NO SE SI SERÁN LOS SENSORES DEFINITIVOS.


Al final de la publicación, pondré la lista definitiva de componentes que he utilizado, y las paginas donde se pueden conseguir, ya os adelanto que la mayoría de las cosas las he comprado en Aliexpres

En este Arduino, tengo pinchados:

Un giroscopio GY MPU 6050, este es un giroscopio digital de 6 ejes, para saber en qué posición se encuentra el ROV, y a demás me indica la temperatura en el interior del casco del ROV.

Un sensor de temperatura DS18B20, para que me indique la temperatura del agua en el exterior.

Tres sensores de temperatura y humedad DHT22, para que me indiquen la temperatura y la humedad dentro del casco y de los tubos de los motores.

Dos sensores de presión HK3025 5MP, uno para que me indique la presión interior del ROV, y otro para que me indique la presión exterior del ROV, y así saber a qué profundidad se encuentra el ROV.

Un relé, para encender los dos focos de iluminación exterior a 12 V, como ya he comentado, el Arduino, no puede controlar estos focos solo, necesita un poco de ayuda.

De momento 2 motores sin escobillas con sus ESC, serán 4, (2 para el avance, y 2 de apoyo a la inmersión), pero para las pruebas en cima de la mesa con 2 me vale de momento.

Un servo, para como ya os he explicado, controlar el ascenso y descenso del ROV, dentro del agua.

Un sensor de infrarrojos E18D80NK, para detectar si hay algún objeto que interrumpa el paso del ROV, o que se pueda colisionar con el objeto en cuestión.

9 luces LED de colores, de momento para que me indiquen el correcto funcionamiento de la recepción de datos y el funcionamiento de los periféricos pinchados

Con el programa que tengo desarrollado ahora mismo, ya puedo ver el funcionamiento de los sensores, tanto en el Arduino “ Esclavo “, como en el Arduino “Maestro “, en el Monitor Serie de los dos Arduinos, puedo ver los datos de cada sensor, y como cambian los valores del giroscopio cuando lo muevo, como cambian los valores de temperatura y humedad, según las horas del día, o si cojo con la mano el DS18B20, como le afecta mi temperatura corporal, y como si interrumpo la luz del sensor de infrarrojos me marca el cambio de ese estado.

Un saludo.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Y ahora “viene cuando la matan”, o la pregunta del millón.

¿Cómo se produce la comunicación entre los Arduinos, si no puedo utilizar una emisora de RC?

Pues de la única manera que me queda, por un cable, mejor dicho, por una manguera de cables.

Para la comunicación estoy utilizando de momento encima de la mesa, 3 cables de puente del tipo dupont, que es el que se utiliza en las placas de prueba sin soldadura de Arduino.

Pero la conexión final será con un cable CAT6, que es el cable que se utiliza en las instalaciones de las comunicaciones de internet, para conectar por ejemplo el router con el ordenador, o para llevar las señales del router a otra habitación.

En este cable tengo que hacer un injerto, y dividir los pares de cables en 2 grupos, un grupo para la comunicación entre Arduinos, para la que solo me hacen falta 3 cables, uno para emitir, uno para recibir, y otro para conectar las masas, o negativos de los dos Arduinos, y el resto de cables los utilizare para que la Raspberry, me mande las imágenes al ordenador.

Foto de la división de los cables

A demás de esto, me he fabricado una manguera, en la que he unido, el cable CAT6, un par de cables, de los utilizados en electrónica, y un cable de acero.

Y os preguntareis, ¿para qué quiere ese invento con tanto cable?, pues muy sencillo, el cable CAT6, porque es imprescindible para la comunicación entre los dispositivos, el cable de corriente, en previsión de una posible ampliación y tener que conectar la alimentación a través de una fuente externa, y el cable de acero, porque en caso de emergencia, prefiero tirar del cable de acero, que de los otros cables, que en definitiva son de plástico y se pueden romper.

Y hasta aquí la explicación más o menos, de cómo quiero que funcione el proyecto, espero que me haya explicado lo suficiente y hayáis cogido la idea.

Seguro que se olvida algo, pero creo que esta todo.

Un saludo.
Adjuntos
Esto es algo parecido a lo que os decía, del cable de Internet
Esto es algo parecido a lo que os decía, del cable de Internet
division cable ethernet.gif (18.15 KiB) Visto 3802 veces
Este es el cable de apoyo a la alimentación
Este es el cable de apoyo a la alimentación
3.jpg (74.71 KiB) Visto 3799 veces
Este es el cable de Internet
Este es el cable de Internet
5.jpg (35.51 KiB) Visto 3799 veces
Características del cable de Internet
Características del cable de Internet
6 reducida.jpg (45.46 KiB) Visto 3799 veces
Cable de acero
Cable de acero
7.jpg (43.57 KiB) Visto 3799 veces
Todo junto
Todo junto
10.jpg (37.5 KiB) Visto 3799 veces
Liando así hasta completar los cien metros
Liando así hasta completar los cien metros
11.jpg (40 KiB) Visto 3799 veces
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Ahora voy a intentar explicaros el programa para que se entienda.



Si a alguien le interesa el tema, le aconsejo que se haga un curso gratis, por internet de Arduino, hay muchísimos, y muy variados, y a demás en distintos idiomas, tienes el curso en Alemán, Chino, Ruso, etc., y por supuesto en Español, así que, según el idioma que dominéis, podéis hacer el curso en un idioma u en otro.



Con cualquier curso de los que hay por la red, dedicándole solo unas horas durante los fines de semana, en alrededor de un mes, ya podéis ir haciendo cosas interesantes.



Como en todo se necesita una curva de aprendizaje, si empiezas de cero, te enseñan a instalar el programa de control o IDE de Arduino, como incluir librerías, las diversas órdenes y comandos de programación, etc., en definitiva, te enseñan que es y para qué sirve el entorno Arduino.



Más que nada por dos cosas, una, porque nos abre un montón inimaginable de posibilidades para implementar en nuestros modelos, y cada uno lo puede adaptar a sus necesidades, desde lo más sencillo, encender una luz fija, encender una luz intermitente a modo de señalización, o a lo mas complicado, controlar por completo el modelo, que navegue solo, y desde casa, ver la ruta que está siguiendo, y ver las imágenes como si fueses montado en el puesto de mando, o como me ha comentado un compañero del foro, manejar las distintas velas de un barco velero con varios palos, como dicen en la página de Arduino, “El límite lo pones tú, y tú imaginación”.



Y otra razón, es para que sepáis de qué estoy escribiendo, y así evitar que os perdáis a lo largo de mis explicaciones, que aunque voy a procurar que no sean excesivamente técnicas, siempre hay que utilizar un lenguaje específico.



Por ejemplo, mirar las publicaciones del compañero tsanshon aquí



https://www.foromodelismonaval.es/viewtopic.php?f=46&t=16047



y en esta otra publicación



https://www.foromodelismonaval.es/viewtopic.php?f=46&t=6366



Los pasos de construcción de los barcos, son una maravilla, pero los secretos de la programación de los mandos y de los barcos, también.



Así que ya tenéis deberes para esta semana, ver las publicaciones del compañero tsanshon, y aprender algo de Arduino.



Un saludo.
Última edición por asesorplaza1 el Dom Abr 26, 2020 2:13 pm, editado 1 vez en total.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Una vez que habéis empezado el curso de Arduino, os resumo bastante cómo funciona el IDE, y os explico un poco mi programa.

Como ya sabéis la ventana del IDE se puede dividir en 3 grandes bloques o partes

LA PRIMERA seria la parte de arriba donde está la barra de herramientas, con todas las opciones del programa, incluida la lupa del Monitor Serie, que está a la derecha de la ventana principal, y que se utiliza para “ver”, que está haciendo el Arduino, siempre y cuando en el programa hayamos puesto la orden

Código: Seleccionar todo

Serial.print()
Que le manda al Arduino, imprimir algo por el puerto de comunicaciones del ordenador, y así que el usuario, pueda controlar los distintos procesos que está haciendo el Arduino.

LA SEGUNDA seria la ventana grande con el fondo blanco, que es donde se escribe todo lo referente al programa en sí, que a su vez se puede dividir en 4 sub-partes

1 arriba del todo, seria la parte que va escrita y que siempre empezara comentada, donde le ponemos el nombre del programa, o alguna explicación corta, que siempre empezara con las dos barras de división

Código: Seleccionar todo

// Lo que haya escrito en esta línea no se ejecutara nunca
Que encontraremos en el teclado usando el botón de mayúsculas y el botón del numero 7, o bien en los teclados expandidos, en el bloque numérico es la barra de división, este signo se utiliza cuando quieres escribir pocas líneas y siempre las empiezas todas con //.
O bien con los signos de división y multiplicación seguidos

Código: Seleccionar todo

/* Todo lo que escribamos aquí en medio no se ejecutara nunca */
<br/>
Esto se usa para cuando quieres escribir un texto más largo, con más de 4 líneas, y así no tienes que estar poniendo las dos //, al principio de cada línea.

2 La parte siguiente es donde se ponen todas las órdenes de inclusión y definición que se van a utilizar en el programa, y esto si lo ejecutara el programa, es donde ponemos todas las librerías que vamos a utilizar en el programa, y todos los comandos para definir las variables que vamos a utilizar.

Es donde van las ordenes

Código: Seleccionar todo

#include &lt;libreria.h&gt;
Const Int
Int
Byte
También es donde se crean los sensores que vamos a utilizar

Servo Servodireccion

Y el pin donde está conectado ese sensor o servo

Código: Seleccionar todo

Const int RedLedpin = 13;
El LED rojo está conectado en el pin 13

3 El void setup, que es la parte del programa que solo se ejecuta una vez, cuando arranca el Arduino, y lee el programa entero, y es donde se le dice que hacer, o donde guardar momentáneamente los datos obtenidos.

4 El void loop, que es la parte del programa que se ejecuta continuamente, una y otra vez, sin descanso, mientras que este encendido el Arduino, y es donde, por ejemplo, va comunicándose con los distintos periféricos que tiene pinchados, y obteniendo los datos que va leyendo de los distintos sensores.

Y EL TERCER GRAN BLOQUE, que es el de abajo del todo con el fondo en negro, esta parte del IDE, normalmente no hace nada, hasta que el usuario no se lo dice, por ejemplo, cuando has escrito un programa, y quieres comprobar si es correcto, le das al botón de compilar, es donde te marca los errores, o si el programa es correcto y ha compilado y lo quieres subir al Arduino, te informa del tamaño del programa, del porcentaje de memoria que ocupa, y te informa de cuando ha terminado de pasar el programa al Arduino.

El que quiera saber más sobre el IDE de Arduino, que haga un curso gratuito por Internet, sintiéndolo mucho, yo no soy profesor de Informática.

Un saludo.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Todos tenéis mucha prisa por ver los códigos, pero tengo que haceros una advertencia

LOS CÓDIGOS NO FUNCIONAN CORRECTAMENTE TODAVÍA.

Van haciendo cosas, pero todavía no van todo lo finos que deberían, y dan muchos fallos, sobre todo el mando de la PS2, los códigos están en pleno proceso de depuración.

En mis dos programas, veréis que hay comentadas en el encabezamiento del programa “Maestro”, por ejemplo, desde la línea /* 1, hasta la línea 123 */, que es donde explico el funcionamiento del programa, las fechas de los cambios producidos hasta ahora, donde están conectados los distintos pines del mando, y de donde he sacado el programa original, que ya no se parece en nada al mío.

Después incluyo las librerías <PS2X_lib.h>, y la librería <Easytransfer.h>

Posteriormente genero todos los parámetros que se utilizan en el programa, y genero también la estructura de datos a enviar y a recibir de un Arduino al otro.

Comienza el void setup, iniciando y leyendo el mando de la PS2, establezco algunos pines de salida, y lo más importante

Genero e inicio 2 puertos serie

Uno para la comunicación con el ordenador

Serial.begin(9600);

Y otro puerto para que se comuniquen los dos Arduinos

Serial1.begin (9600);

Con dos órdenes muy parecidas pero no son iguales, tenéis que tener mucho cuidado con estos detalles, porque os va a pasar más de una vez, dos líneas que se parecen mucho, pero que significan cosas distintas.

Si se establece la comunicación con el mando, y es correcta, seguimos con el programa, si no me marca un mensaje de error

Vamos con el void loop()

Si se ha iniciado el mando correctamente y se han leído todas las funciones del mando, comprueba el estado de cada botón, que debe ser apagado o cero, y cuando esto cambie, guárdalo en una variable llamada

PSB_PAD_UPstate = (ps2x.ButtonPressed(PSB_PAD_UP));

Luego si el estado del botón cambia, guardalo en esa variable

PSB_PAD_UPstate

Enciéndeme un LED para que yo lo vea y mándame ese cambio de estado del botón al otro Arduino

Código: Seleccionar todo

if (ps2x.ButtonPressed(PSB_PAD_UP)) // Si presionamos el botón izquierda arriba
    {
      PSB_PAD_UPstate = (!PSB_PAD_UPstate); // guarda el cambio
      digitalWrite(yelLEDpin, HIGH); // Enciende el Led Amarillo
    }
    else
    {
      digitalWrite(yelLEDpin, LOW); // Apaga el Led Amarillo
    }
    txdata.PSB_PAD_UPstate = (PSB_PAD_UPstate); // manda el estado del boton al Esclavo

Y así con todos los botones del mando

Espérate 2 segundos antes de continuar con el programa, línea 476.

Y a partir de aquí, línea 478, ve haciendo cosas con los datos recibidos del Arduino “Esclavo”.

A partir de la línea 554, ve mandando al PC, y ordenaditos, todos los datos recibidos de los sensores del Arduino “Esclavo”, para que yo controle el funcionamiento del programa

Al final línea 619, espérate 10 segundos, y vuelve a empezar con el void loop.
Última edición por asesorplaza1 el Sab Abr 25, 2020 11:37 pm, editado 2 veces en total.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Todos tenéis mucha prisa por ver los códigos, pero tengo que haceros una advertencia

LOS CÓDIGOS NO FUNCIONAN CORRECTAMENTE TODAVÍA.

Van haciendo cosas, pero todavía no van todo lo finos que deberían, y dan muchos fallos, sobre todo el mando de la PS2, los códigos están en pleno proceso de depuración.

Vamos con el programa del “Esclavo”, por ejemplo, desde la línea /* 1, hasta la línea 119 */, que es donde explico el funcionamiento del programa, las fechas de los cambios producidos hasta ahora, donde están conectados los distintos pines del mando, y de donde he sacado el programa original, que ya no se parece en nada al mío.

Después incluyo un montón de librerías para que el Arduino pueda trabajar con los sensores

Posteriormente genero todos los parámetros que se utilizan en el programa, genero las variables de los sensores, genero la recepción de datos de los botones del mando, y genero también la estructura de datos a enviar y a recibir de un Arduino al otro, que es diferente a la del programa anterior.

Comienza el void setup, iniciando las comunicaciones que me hacen falta con los sensores, establezco algunos pines de salida, y lo más importante

Genero e inicio los 2 puertos serie que hice en el otro programa
Uno para la comunicación con el ordenador

Serial.begin(9600);

Y otro puerto para que se comuniquen los dos Arduinos

Serial1.begin (9600);

Con dos órdenes muy parecidas pero no son iguales, tenéis que tener mucho cuidado con estos detalles, porque os va a pasar más de una vez, dos líneas que se parecen mucho, pero que significan cosas distintas.

Vamos con el void loop()

Se generan todos los bloques de trabajo de los distintos sensores con la orden

Loop_ESC()

Y se reciben los estados de los botones del mando

PSB_PAD_UPstate = (rxdata.PSB_PAD_UPstate); // Recibe lectura del botón Izquierda arriba al Esclavo ***

Y se establece que hacer si se recibe el dato de cambio de estado del botón correspondiente con la orden para cada botón

if (rxdata.PSB_PAD_UPstate > 0)
// Si presionamos el botón izquierda arriba
{
digitalWrite(yelLEDpin, HIGH);
// Enciende el Led Amarillo
digitalWrite(HeadLts, rxdata.LEDHdlts);
// Enciende los focos
}

else if (rxdata.PSB_PAD_DOWNstate > 0)
// Si presionamos el botón izquierda abajo
{
digitalWrite(yelLEDpin, HIGH);
// Enciende el Led Amarillo
}

Y así con todos los botones del mando

Espérate 2 segundos antes de continuar con el programa, línea 460.

Y a partir de aquí, línea 468, ve haciendo cosas con los sensores y manda los datos de cada sensor al Arduino “Maestro”, y ve mandando los datos al PC, y ordenaditos, para que yo controle el funcionamiento del programa

Al final línea 711, manda todos los cambios de los datos de los sensores al Arduino “Maestro”, y vuelve a empezar con el void loop.
asesorplaza1
Colaborador
Colaborador
Mensajes: 209
Registrado: Jue Ene 24, 2019 6:51 am
Ubicación: Cuenca

Re: Un ROV de agua dulce, con mando de PS2

Mensaje por asesorplaza1 »

Bueno pues después de calentaros la cabeza intentando explicar las ordenes más importantes del código, viene lo que estabais esperando todos con ansia.
Los famosos códigos.

No me canso de repetirlo

LOS CÓDIGOS NO FUNCIONAN CORRECTAMENTE TODAVÍA.

Van haciendo cosas, pero todavía no van todo lo finos que deberían, y dan muchos fallos, sobre todo el mando de la PS2, los códigos están en pleno proceso de depuración.

Tanto la comunicación entre Arduinos, como el mando de la PS2, están basados en el trabajo de Bill Porter

Comunicación entre Arduinos

http://www.billporter.info/2011/05/30/e ... o-library/

Mando PS2

http://www.billporter.info/2010/06/05/p ... rary-v1-0/

http://www.billporter.info/2011/03/27/a ... ing-guide/

Pero de todas formas aquí están los códigos.

Un saludo a todos
Adjuntos
28_23_04_2020.rar
Estos son los dos códigos
(15.55 KiB) Descargado 92 veces
Adafruit_ADXL343.rar
Librería de sensores
(11.84 KiB) Descargado 84 veces
Adafruit_Circuit_Playground.rar
Librería de sensores
(448.5 KiB) Descargado 106 veces
Adafruit_Unified_Sensor.rar
Librería de sensores
(12.75 KiB) Descargado 80 veces
DHT.rar
Librería de sensores
(1.71 KiB) Descargado 80 veces
EasyTransfer.rar
Librería de comunicaciones entre Arduinos
(95.15 KiB) Descargado 91 veces
MPU6050.rar
Librería del giroscopio
(96.06 KiB) Descargado 74 veces
OneWire.rar
Librería de comunicación de sensores
(19.45 KiB) Descargado 74 veces
PS2X_lib.rar
Librería del mando PS2
(9.41 KiB) Descargado 84 veces
Servo.rar
Librería para el servo
(29.42 KiB) Descargado 81 veces
Responder