Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Proyecto] Control RC usando wifi mediante ESP8266 y/o ESP32
#1
Bombilla 
Una vez mas, de cara al verano, a ver si logramos entre la comunidad poder hacer algún proyectillo entre varios. Dado que esta tan de moda los módulos wifi ESP8266 o ESP32, propongo que hagamos tanto a nivel software como hardware, la pasarela de comunicación. Es decir, tendríamos un nodo receptor y un nodo emisor. Seria algo parecido a esto, dentro video:



En el video hacen esta misma idea pero usando un micro de Arduino y un módulo nrf24L01, tanto en emisor como receptor. Entonces el tema seria eso mismo pero basado en ESP8266 y posiblemente ESP32 para el emisor, dado que necesitamos 4 ADCs para los 2 joystick que tiene un mando.

Mando

Tengo en mente usar este tipo: https://es.aliexpress.com/item/2-4G-1-7M...63c0Zhw8P8
Es mas, ya compre uno hace tiempo y lo tengo por casa cogiendo polvo. Lo suyo sera sacar la electrónica de control, dejar la que va con los joystick y botoneras. Hacer el diseño de una pcb que lleve lo necesario para conectar todos al ESP32. Quitar el cable y en el agujero que deja, poner un pigtail para una antena pequeña de 2,4Ghz.

Receptor

Para el caso del receptor, en un principio con un ESP8266 nos basta. Solo necesitamos señales digitales. Tendríamos que hacer en el menor espacio, lo necesario para sustituir la electrónica que lleva un cocheRC. Habría que ver si es necesario meter una etapa de control de motor. Muchos cochesRC llevan ya el driver aparte, pero podría ser necesario. Pololu tiene algún diseño, y se podría mirar de integrar.


Con esto se podría incluso recuperar viejos juguetes RC, ya que seria muy fácil de integrar la electrónica. O simplemente cambiar la forma de controlar nuestros RC. También tendríamos la facilidad de conectar el RC al PC vía wifi y ya hacer desde un ordenador lo que sea, se abriría un buen abanico de posibilidades. Como lo veis?

GitHub: https://github.com/grafisoft/GamePad_Wifi
---------------------------------------------------------------------------------------------------------------------------------------------------------

Usare el post principal para recopilar toda la info:

Haciendo alguna ñapa, se le podría añadir una lcd pequeñita al mando, las de tipo oled 0,96"

https://www.aliexpress.com/item/1pcs-0-9...50109.html

Medidas:

resim

Desaparecerían los 3 botones centrales del mando.

Pinout del ESP32 WROVER que intentare integrar:

resim


Enlaces de interés:

https://www.roboremo.com/esp8266-wifi-rc-car.html

Creo que me voy a basar en el código de este proyecto, que es el primero que veo con emisor-receptor basados ambos en los ESP: https://makingrobotsblog.wordpress.com/2...8266-pair/

PFM vs PWM en control de motores DC: http://www.didel.com/PFMversusPWMforRobots.pdf

Ideas al vuelo:

- Meter módulo nrf24L01 si cabe en la pcb. Así como idea loca, lo mismo que la oled :p
Citar
#2
Ahora que lo dices y relacionado con esto, conoces la web ésta que vende planos para imprimir aviones RC? He visto unos vídeos de los resultados y la verdad es que vuelan muy bien!
Ahí va un ejemplo: https://www.youtube.com/watch?v=tvs3yvEcARA
Citar
#3
La leche! En kickstarter sacaron un proyecto que era motorizar aviones de papel.

Voy a intentar aplicarlo a unn cocheRC, a ver que sale.
Citar
#4
Uff, me parece muy muy interesante, aunque ya tengo demasiadas cosas en danza.

Antes que un mando de la "play", miraría algo similar a los de drones, animatrónica,... algo como esto : http://ae01.alicdn.com/kf/HTB1W3T8cH1YBu...UsFXam.jpg con pantalla para elegir "modos", configuraciones,... Impreso en 3D y "modulable".

Pero lo dicho, me faltan horas en el día para cacharrear todo lo que quiero!
Citar
#5
Eso ya seria un mando muy pro Sonrisa
Citar
#6
Haciendo alguna ñapa, se le podria añadir una lcd pequeñita al mando, las de tipo oled 0,96"

https://www.aliexpress.com/item/1pcs-0-9...50109.html

Medidas:

resim

Desaparecerían los 3 botones centrales del mando.
Citar
#7
Añadido pinout del esp32 wrover que llevo en mente.

Recopilare en el primer post toda la info.
Citar
#8
Me interesa bastante este tema, la verdad... desde hace tiempo tengo la idea de hacer una especie de tanque con torreta para utilizar jugando al airsoft... mi idea era utilizar un maletin con controles como los que mostrais, es decir, unos cuantos joysticks analogicos y otros botones digitales. El caso es que aunque se me da bastante bien programar cacharros en arduino, aun no he conseguido hacer funcionar bien comunicaciones por RF....

Por ultimo, a mi me interesaba incluir en el proyecto mio una pequeña cámara con pantalla receptora de esas que van por RF/Wifi tambien... ¿Alguno tiene experiencia en ese tema? Me interesa por el hecho de poder alejarme y ver desde una pantalla la perspectiva del carromato  Icon_roto2
Citar
#9
(02-06-2018, 02:56 PM)Shellmer escribió: Me interesa bastante este tema, la verdad... desde hace tiempo tengo la idea de hacer una especie de tanque con torreta para utilizar jugando al airsoft... mi idea era utilizar un maletin con controles como los que mostrais, es decir, unos cuantos joysticks analogicos y otros botones digitales. El caso es que aunque se me da bastante bien programar cacharros en arduino, aun no he conseguido hacer funcionar bien comunicaciones por RF....

Por ultimo, a mi me interesaba incluir en el proyecto mio una pequeña cámara con pantalla receptora de esas que van por RF/Wifi tambien... ¿Alguno tiene experiencia en ese tema? Me interesa por el hecho de poder alejarme y ver desde una pantalla la perspectiva del carromato  Icon_roto2

Lo mas facil de integrar es FPV, puedes mirar las camaras, monitores, y retransmisores (creo que suelen abundar mas en la banda de 5ghz).
Citar
#10
He creado un repositorio en Github para ir subiendo ahí todo. El proyecto es OpenSource.

Vamos a cerrar un poco las características del proyecto, para ir empezando a diseñar algo.

Emisor: Mando consola PlayStation (ya sea reciclado o de los que venden por Aliexpress, Ebay, etc)

- Basado en ESP32 WROVER.
- TFT Oled 0,96" Opcional.
- Modulo nrf24L01 Opcional.
- Etapa para carga de batería.
- Batería lipo de unos 400mA (o la que quepa).

Receptor: A instalar en el elemento a controlar. Pinceladas. (aquí realmente cada uno podría diseñarse el suyo propio).

- Dos modelos: Basado en ESP8266 o basado en nrf24L01+microcontrolador(atmega328). El combo seria ESP8266 simplemente haciendo de microcontrolador) + nrf24L01 (opcional).
- Driver para el motor y/o conexión a driver externo. (Pololu tiene algún driver para motores DC de hasta 1A y algo).
- Salida para conectar 1 servo.
- Quizás algunas salidas para activar/desactivar luces o funciones extra.

Ideas, sugerencias, etc... Animaros, el proyectillo puede estar chulo para desarrollarlo en verano.

Empiezo un poco con el esquemático. Ya he ido tomando medidas de la PCB que lleva original el mando para reemplazarla. Esta semana dejare esbozado mas o menos como quedaría.
Citar
#11
Yo, si no os importa, empezaré con sugerencias del apartado de programación, ya que actualmente es en lo que mas destaco... por parte de electrónica me llevo bastante bien con todo, pero soy mucho de realizar los circuitos improvisando sobre una placa perforada, así que eso mejor os lo dejo a otros. No se si teneis intención de realizar la programación desde 0, si no es asi, pues no pasa nada, pero si se va a hacer desde 0 os dejo mis sugerencias:

Lo primero que yo haría es establecer el protocolo de comunicación, lo ideal para que sea algo "plug and play" seria realizar un protocolo en el que por ejemplo, se pueda declarar un array de enteros o un array de floats en ambos dispositivos y que estos se transmitan automaticamente de forma asíncrona de uno a otro (De emisor a receptor, evidentemente)

Me explico... podríamos tener en el emisor unos cuantos datos a trasmitir, por ejemplo, 4 (o mas) flotantes que representen la tensión analógica recibida en los pines conectados a los joystick (o bien 4 enteros y pasar el valor numérico), si editamos estos valores en la memoria del microcontrolador emisor, un timer los enviará al receptor a intervalos regulares (Por ejemplo, podría hacerse que salte una interrupción cada 100ms en la cual se envíen estos datos). De esta forma mantenemos el 'loop' limpito y podemos programarle mas funciones dentro sin tener que tocar las comunicaciones directamente.

Haciendo esto, podríamos incluso utilizar un byte por ejemplo para transmitir el valor de 8 botones, con una sencilla mascara se pueden extraer estos bit y además de ocupar poco espacio en la memoria, la transmisión debería ser bastante rápida. La ventaja de hacer algo asi es que es totalmente amigable a la persona que quiera transmitor los datos, ya que solo tendría que editar el valor de la variable y automaticamente el receptor lo recibiria.
Citar
#12
Medidas y forma de la PCB que va en el interior:

resim
Citar
#13
(04-06-2018, 09:16 PM)Shellmer escribió: Yo, si no os importa, empezaré con sugerencias del apartado de programación, ya que actualmente es en lo que mas destaco... por parte de electrónica me llevo bastante bien con todo, pero soy mucho de realizar los circuitos improvisando sobre una placa perforada, así que eso mejor os lo dejo a otros. No se si teneis intención de realizar la programación desde 0, si no es asi, pues no pasa nada, pero si se va a hacer desde 0 os dejo mis sugerencias:

Lo primero que yo haría es establecer el protocolo de comunicación, lo ideal para que sea algo "plug and play" seria realizar un protocolo en el que por ejemplo, se pueda declarar un array de enteros o un array de floats en ambos dispositivos y que estos se transmitan automaticamente de forma asíncrona de uno a otro (De emisor a receptor, evidentemente)

Me explico... podríamos tener en el emisor unos cuantos datos a trasmitir, por ejemplo, 4 (o mas) flotantes que representen la tensión analógica recibida en los pines conectados a los joystick (o bien 4 enteros y pasar el valor numérico), si editamos estos valores en la memoria del microcontrolador emisor, un timer los enviará al receptor a intervalos regulares (Por ejemplo, podría hacerse que salte una interrupción cada 100ms en la cual se envíen  estos datos). De esta forma mantenemos el 'loop' limpito y podemos programarle mas funciones dentro sin tener que tocar las comunicaciones directamente.

Haciendo esto, podríamos incluso utilizar un byte por ejemplo para transmitir el valor de 8 botones, con una sencilla mascara se pueden extraer estos bit y además de ocupar poco espacio en la memoria, la transmisión debería ser bastante rápida. La ventaja de hacer algo asi es que es totalmente amigable a la persona que quiera transmitor los datos, ya que solo tendría que editar el valor de la variable y automaticamente el receptor lo recibiria.

En programación vienes genial, ahí voy justo justo, lo suficiente como para buscar algún ejemplo y adaptarlo un poco. Tenia visto algún enlace que he puesto por arriba para echar a andar el prototipo. Gracias por tus recomendaciones.
Citar
#14
Me faltan 2 pines en el ESP32 para poder meter todos los switches que tiene el mando. Valoramos dejar fuera el efecto pulsador de los joysticks?

O quizas los meta en el puerto de I2C, que sera el que controle la OLED, así que no estaría siempre en uso.
Citar
#15
Umm, ¿Por que dices que no llegan los pines?
Según yo cuento, ese mando debería tener 6 canales analógicos (2 por cada joystick (4) + L2 y R2) y 15 digitales equivalentes a todos sus botones contando con el central de los joystick que mencionas.
Por lo que veo, en el ESP32 existen 16 pines analógicos y 14 pines digitales, los pines analógicos se deberían de poder utilizar como digitales perfectamente, al menos en los microcontroladores "normales" se puede perfectamente.

Dicho esto, no se si algunos de esos pines estarán reservados para que trabaje el transmisor con ellos o si esta directamente integrado contra el microcontrolador... si están compartidos, puede que efectivamente no lleguen y habría que ver cuales están siendo utilizados. Conforme a los pines que están multiplexados, es decir, que tienen mas de una función, si no son cosas necesarias generalmente se puede deshabilitar su función especial y utilizarlos como pines digitales normales.

Tengo que ponerme a ver con mas detalle el datasheet de este micro... no he tenido mucho tiempo esta semana la verdad.
Citar
#16
(05-06-2018, 08:21 PM)Shellmer escribió: Umm, ¿Por que dices que no llegan los pines?
Según yo cuento, ese mando debería tener 6 canales analógicos (2 por cada joystick (4) + L2 y R2) y 15 digitales equivalentes a todos sus botones contando con el central de los joystick que mencionas.
Por lo que veo, en el ESP32 existen 16 pines analógicos y 14 pines digitales, los pines analógicos se deberían de poder utilizar como digitales perfectamente, al menos en los microcontroladores "normales" se puede perfectamente.

Dicho esto, no se si algunos de esos pines estarán reservados para que trabaje el transmisor con ellos o si esta directamente integrado contra el microcontrolador... si están compartidos, puede que efectivamente no lleguen y habría que ver cuales están siendo utilizados. Conforme a los pines que están multiplexados, es decir, que tienen mas de una función, si no son cosas necesarias generalmente se puede deshabilitar su función especial y utilizarlos como pines digitales normales.

Tengo que ponerme a ver con mas detalle el datasheet de este micro... no he tenido mucho tiempo esta semana la verdad.

Los 3 botones centrales, los descarto directamente. Si meto una OLED, habría que hacer un poco de bricomania en esa zona, pero no habría opción para esos 3 pulsadores.

Tendríamos 4 canales analógicos (el mando que yo tengo, no tiene los gatillos L2-R2, son pulsadores).
14 pulsadores: 4 de la cruceta, 4 de los botones, L1.L2-R1-R2, y cada joystick tiene también la función pulsador.

Si meto la OLED, iría por I2C, que son 2 pines.
Si metemos un nrf24L01, serían 4 pines del SPI (y no cuento con la opción de usar el pin IRQ del módulo. No se como de critico resultaría no tener en cuenta este pin).

Ademas, me gustaría medir el nivel de batería, y aquí se va otro pin mas.

El ESP32 tiene 6 pines que no recomiendan usar, que son los que corresponden al uso de la flash.

Y aquí se va todo el pinout del modulo. Los pines de UART ya los uso para los pulsadores, ya que el UART como tal, solo sería para programar y/o debugear, así que sería un uso muy puntual.
Citar
#17
Los pines del UART si se le pueden habilitar los pullup internos (que no estoy seguro si los tiene) es mejor que que le pongamos una resistencia de pullup o pulldown por fuera... asi pueden ir directos contra gnd que cortaria el pulsador. Es mas, para simplificar el circuito yo los evitaria totalmente y utilizaria los internos... asi metemos todos los botones digitales conectados por uno de sus contactos a gnd y el otro directamente al ESP.


Lo del pullup al Tx y Rx del usart lo digo basicamente porque a mi al menos me interesa usar el puerto usart para debug, y si se conecta el conversor mientras no se pulsen los botones no deberian haber interferencias.


Por cierto... te parecerá descabellado pero hay formas de detectar hasta 16 botones con 8 pines montandose un teclado matricial a mano, tambien es facil hacerlo a traves de divisores resistivos utilizando una analogica (boton 1, 1v, boton2, 2v, boton3, 3v... y asi (mas lento que leer una señal digital... pero lo he usado en alguna ocasion)
Y como solución drastica si no, es tan sencillo como concatenar tantos desplazamientos de registro como entradas queramos... una vez tuve que realizar un aparato para una empresa en el cual necesitaba 28 pines de entrada y otros 28 de salida, el micro era de 40 pines y lo hice con desplazamientos de registro y iba perfecto.
Citar
#18
Lo de usar e adc para leer pulsadorew lodescarto porque no podria usar interrupciones. Y lo del teclado matricial, podria valer si se pueden usar interrupciones.

Como es lo del registro de desplazaiento? Lo puedes comentar un poco mmas?

Ahora mismo tengo cuadrado todo, metiendo los 14 botones, pero 2 van a los pines de uart. Como dices, si no se pulsan esos botones, no deberia haber problema.

Saludos
Citar
#19
Estoy ya haciendo ell contorno de la pcb y colocando lo mas volumioso, a ver si cabe todo.
Citar
#20
Si quieres monitorizar todos los pulsadores por interrupcion no te vale el teclado matricial. Este se basa en escanear 8 pines (que forman un puerto a ser posible) y requiere de instrucciones en el loop con un bucle.

El registro de desplazamiento tampoco va por interrupciones, pero basicamente en el de salidas tu le pasarias como quieres dejar los puertos en binario y cuando cambias el modo de operacion estas se actualizan.
Seria algo como enviar un 0b00110000 y se pondrian 2 pines a uno y los demas a 0.
Para esto se necesitan 3 cables, el de datos de entrada, el del clock y el del modo de funcionamiento, los modulos son concatenables ya que tienen una salida de datos en otro pin, y si conectas la salida de uno a la entrada de otro y interconectas los pines de clock y modo de operacion puedes montarte un modulo de IO gigantesco.
Para entradas es la operacion inversa, haces que pille los valores de las entradas, metes 8 pulsos de reloj y en su salida por cada pulso que envies tienes el valor de una entrada diferente.

Es basicamente un conversor paralelo-serie o serie-paralelo. Muy utiles para expandir pines de manera sencilla pero evidentemente los pines son bastante mas lentos que los del micro al llevar una capa de software por detras para sacar sus datos. Busca por "shift registers"
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Mission Planner sin emplear control remoto arriazu 13 2,976 10-09-2015, 03:50 PM
Último mensaje: Lonmania
  Impulso a la sección de Radio Control en la Wiki AntonioNav 1 418 18-03-2015, 02:02 PM
Último mensaje: cansi22
  Control de drone desde un portatil El3ndil 6 923 18-08-2014, 03:47 PM
Último mensaje: eslanek
  Quadcoptero con tablet como control remoto. ¿Viable? federico 4 728 27-04-2014, 09:39 PM
Último mensaje: OverCraft