Inhaltsverzeichnis:

Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos. - Gunook
Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos. - Gunook

Video: Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos. - Gunook

Video: Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos. - Gunook
Video: Sonoff Ihost - Центр управления умным домом без доступа к интернет с Zigbee и Matter 2024, Juli
Anonim
Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos
Kommunikation ESP-NOW. Steuern Sie Remoto De Vehículo, Joystick, Arduino Wemos

Todo parte de la idea de poder mover una silla de ruedas para personal discapacitado via remota y poder acompañarlos sin necesidad de empujar la misma. Como ejemplo de funcionamiento, he creado este proyecto. Posteriormente se pueden cambiar los Circuitos de Salida y los motores, por otros de mayor potencia y acoplar a las ruedas de la silla un sistema mecánico que la mueva.

Es ist eine Person, die eine Person ist, die eine Person ist, die für persönliches Personal gedacht ist, und eine Kombination aus Arduino-Skizzen und Solo- und evitar las comunicaciones Remotas. Einfache Bedienung für die Joystick- und Motorsteuerung.

Aunque no gane ningún concurso, si a alguien le gusta (o una parte del mismo) o puede realizar el proyecto y aliviar el estado de ánimo de una mejorando su movilidad, me sentiré contento.

Am Ende des Dokuments füge ich ein englischsprachiges PDF dieser Arbeit bei (Web-Übersetzer).

Al final del documento, adjunto a PDF con el trabajo completo en español.

Schritt 1: Einführung:

Resumen del trabajo:.- Varios entradas analógicas a traves de un solo puerto.

.- Wemos, especificaciones eléctricas.

.- Protocolo de comunicaciones ESP-NOW.

.- Circuito L298N. Especificaciones y pinout del mismo.

.- Montaje vehículo con dos motores DC

Este trabajo explico como tomar varios valores analógicos und introducirlos in einem único puerto A0 an einem Platz in Wemos. Lose valores Provenientes von einem Joystick, diese schnelle Übertragung, Segura und Fácil von Wifi-Medien und ESP-NOW-Protokollen. En el vehículo, otra Wemos recibe los datos y acciona dos motores DC para controlar la dirección del vehiculo.

Quizás alguien se pueda plantear que las cosas expuestas de estos trabajos, se puedan conseguir de forma fácil y barata en alguna web, pero el hecho de hacerlo tu mismo y con Componentes de bajo precio siempreón es una satisf. Aparte de eso, me conformo con que a una persona le guste o le aclare algún concepto o duda.

Intentaré explicar los conceptos usados para mejor comprensión del trabajo. Quizás a algunos le parezca interesante alguna parte del mismo.

Schritt 2: Placa De Desarrollo Arduino Wemos:

Placa De Desarrollo Arduino Wemos
Placa De Desarrollo Arduino Wemos
Placa De Desarrollo Arduino Wemos
Placa De Desarrollo Arduino Wemos
Placa De Desarrollo Arduino Wemos
Placa De Desarrollo Arduino Wemos

Estamos hablando de una pequeña placa de desarrollo con amplias posibilidades:

Con ella podemos realizar proyector IoT, Analyse von Daten und Umgebungen und Reisen von las redes und otras muchas cosas, aprovechando la capacidad Wifi de las mismas. En otro proyecto que he realizado, creo una red wifi propia y puedo abrir una cerradura remota, mediante una clave tecleada desde nuestro smartphone, que también he publicado. La diferencia respekto al anterior es que en vez de usar protocolo HTLM para la comunicación, uso la característica muy poco publicada de la comunicación WiFi del tipo ESP-NOW entre dos dispositivos, por ser fácil, rápida, segura yencriptadad Emparejamientos a la hora de actuar (solo al configurar el Sketch de Arduino). Mas adelante, a la hora de explicar el sketch, comentaré los detalles a tener en cuenta.

La Placa Dispone de una Entrada de Alimentación de 5v en el Pin-Korrespondente (oder USB) und de una Entrada de GND. Dicha alimentación no tiene porque ser 5v, ya que lleva un regulador de voltaje que lo convierte en 3.3v, que es realmente el voltaje de trabajo. En la datasheet de la Wemos podemos verlo y adjunto también una imagen de la datasheet del regulador.

Según el link de las especificaciones del ESP8266, podría trabajar incluso a 3v, pero conviene alimentarlo with a voltaje superior a 3.5v, para que a la salida del régulador and minimo de 3v. En dicho link se puede ver otros detalles técnicos que amplian esta información.

cdn-shop.adafruit.com/product-files/2471/0…

La Placa también dispone de 9 entradas/salidas digitales (D0-D8). Todas tienen la capacidad de poder trabajar con salidas del tipo PWM, Bus I2C usw.

Detalle a tener muy en cuenta a la hora de conectar Algo a la Salida de los pines digitals, para luminar leds, activar relés, etc. Die maximale Corriente que puede entregar un pin Digital es de 12mA. Si se necesita entregar mas corriente, debemos intercalar entre el pin und el dispositivo a Transistor oder un opto acoplador de mayor potencia. Ver figura de salidas.

Mit einem Widerstand in einer Serie mit 330 Ohm, mit einem Strom von 10 mA, por lo que si es möglich, aumentar el valor de las resistencias. Hay und vielas webs la recomendación de a resistencia de 330 Ohm und serie con los leds Yo recomiendo usar resistencias mas altas. Si ilumina el führte ein nuestro gusto, no necesitamos sumar mas al trabajo Cualquier ahoro de energía siempre es bueno.

HINWEIS: en los pines digitales, podemos dar valores PWM zwischen 0 und 1023. En Arduino Uno, zwischen 0 und 254.

La placa Wemos también dispone de a entrada digital A0, para análisis de datos analógicos. Hay que tener en cuenta dos cosas. La Primera es que NO se le puede aplicar un voltaje superior a 3.3v directamente, ya que se deterioraría. Si se quiere medir un voltaje superior, hay que intercalar un divisor de voltaje externo. Los valores de dicha entrada son de 0 a 1024.

Weitere Merkmale:

-Salida de 3.3v para alimentar Circuitos Exteriores. Max. korriente 12mA por Pin.

-Conector Micro-USB für die Ladung von Firmware und Nahrungsmitteln für 5V

-Pulsador de Reset.

Hay muchos Tutorials de como configurar el IDE de Arduino para trabajar con est tipo de place, así como las librerías necesarias. No voy a entrar en ello para no alargar demasiado este trabajo.

Schritt 3: Circuito Del Joystick (mando a Distancia):

Circuito Del Joystick (mando a Distancia)
Circuito Del Joystick (mando a Distancia)
Circuito Del Joystick (mando a Distancia)
Circuito Del Joystick (mando a Distancia)

Me gusta la placa de desarrollo Wemos, ya que tiene poco tamaño, es barata y tiene muchas posibilidades. Como solo dispone de una entrada analógica A0, Surge el problema de querer captar varios valores analógicos al mismo tiempo. Para mi caso en concreto, ein joysick está formado por dos potenciómetros con salidas individuales analógicas y un pulsador. Además, quiero analizar el valor tatsächliche de la batería que uso el mando a distancia, por lo que ya necesitamos tomar 3 valores analógicos distintos.

En el siguiente esquema, creado con Fritzing, tenemos a la izquierda un divisor de voltaje. Si la batería es de mas de 3.3v, la entrada analógica corre riesgo de averiarse, por ello conviene reducir el voltaje para su análisis. Voy a usar una batería de 3.7v, por lo que cuando está cargada completamente es de aproximadamente de 4v y debido al divisor de voltaje, en el pin 4 de H1 tenemos 2v (variable Dependiendo del estado de la batería). A la therecha tenemos un joystick basic, formado por dos potenciómetros and a pulsador (R3 ist ein externer Joystick). Se alimentan con los 3.3v que proporciona la Wemos. En este esquema general primero, tenemos 3 valores analógicos (Kiefern 2, 3 y 4 de H1) und un valor digital (pin 1 de H1).

Para poder analizars en la placa Wemoslos 3 valores analógicos, recurrimos a unos pequeños opto-accopladores, el chip SFH615A oder TLP621. Es muy básico su funcionamiento para este trabajo. En el pin 4 del chip pongo uno de los valores analógicos a analiza. Todos los Pin 2 ein GND. Todos los pin 3 unidos ya A0 y cada uno de los pin 1 a una salida digital a través de un resistance, las cuales voy activando sucesivamente y dependiendo cual active y leyendo el valor en A0, asigno a cada valor una variable (pot 1y pot 2 Joystick und Batterie).

Hay que tener encuenta que no podemos conectar la salida de la Wemos directamente a pin 1 del TLP621, ya que se deterioraría dicha salida digital. Cada pin digital und Wemos puede suministrar unos 12mA. Por ello, intercalamos una resistencia suficiente para activar el led interno. Con 470 Ω, ist ausreichend für die Aktivierung solo supone 7 mA.

Al querer introducir 3 valores analógicos mediante este sistema, usamos 3 salidas digitales para poder activarlas. Si queremos introducir mas valores analógicos of A0, podemos usar otras salidas más o podemos seguir usando solo 3 salidas digitales, añadiendo al Circuito un demultiplexor and Dando valores binarios a las entradas.

Añadimos al mando a distancia 2 leds, uno para reflejar „Power ON“und el otro para el estado de la batería y „Transmisión OK“.

Añado al Circuito un interruptor para la batería y un conector para poder recargar la misma sin tener que quitarla (aviso: APAGAR PARA RECARGAR para evitar dañar el regulador ME6211 de la placa Wemos). Con todo lo anteriormente explicado, el Circuito Completo del Mando eine Distanz mit Joystick es la siguiente figura.

Schritt 4: Joystick 2:

Joystick 2
Joystick 2

Erklärung für das Posterior-Desarrollo und die IDE von Arduino:

En A0 recojo los valores de los potenciómetros y del nivel de la batería.

En D0 pasa a HIGH cuando se pulsa el botón del joystick („parada de emergencia“)

Aktiviert D1, Leo el Potenciómetro vertikaler Joystick und A0.

Aktiviert D2, leo el estado of potenciómetro horizontal de Joystick und A0.

Aktiviere D5, leo el estado de la batería en A0. HINWEIS: en un principio lo puse en D4, pero me daba problemas al flashear el programa desde el IDE de Arduino, por lo que la pasé a D5

La Salida D3 se usará para el led de Actividad (Azul). Dicho führte zur neuen Steuerung von Joystick und Übertragung mit korrekter Steuerung. Cuando está en reposo nos indica el estado de la batería (1 Parpadeo entre 3.6 y 3.5v, 2 parpadeo entre 3.5 y 3.4v y 3 parpadeos por debajo de 3.4v).

El led rojo indica Encendido/Power ON.

S1 es el Unterbrecher de encendido. Bieten Sie einen schnellen Zugriff auf den Ladevorgang oder die Änderungen an der Software (5v und USB-Anschluss).

El esquema del Circuito montado en una protoboard es la figura siguiente:

La linea inferior positiva es el voltaje de la batería. La linea superior positiva es la salida de 3.3v de la Wemos

Schritt 5: Joystick Placa De Circuitos:

Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos

Er verfügt über einen wichtigen Platz mit Sprint-Layout 6.0 für die Joystick-Bedienung, opto acopladores, Wemos und otros. Indico las medidas por si alguien la quiere realizar (40x95mm). Hay que tener cuidado con el pin 1 de los TLP621. Van soldados al terminal cuadrado y en la posición indicada visto desde la cara de los components. La parte de la placa próxima a los conectores y Wemos, la recorto posteriormente, así queda de forma cómoda el agarre del mando, el encendido y las conexiones externas.

Las fotos del mando a distancia. An den Borden, USB-Verbindungen, Batterieladekabel und ON/OFF-Unterbrecher.

Fácil de sujetar, aunque sea un poco grande. Me falta realizar una caja a medida para el mismo con la impresora 3D:

Schritt 6: Circuito Del Rezeptor (Motoren):

Circuito Del Rezeptor (Motoren)
Circuito Del Rezeptor (Motoren)

Está compuesto por otra place Wemos, donde recibo the data del joystick or control remoto and activa las señales necesarias hacia un L298N (double puente en H) und controlar dos motores, hacia adelante y hacia atrás, con control de dirección. Como Complemento del Circuito, 3 LEDs, uno para power ON, otro para la transmisión de datos y un tercero como indicativo de “parada de emergencia”. Aprovecho estos dos últimos (parpadeando) para la indicación del estado de la batería del vehículo.

Control de la batería: Lo primeo a tener en cuenta es que la batería que estoy usando es de 9v. Intentar medir la misma en A0 directamente, supone deteriorar el puerto, ya que el máximo valor que se le puede aplicar es de 3.3v. Para evitarlo, ponemos también otro divisor de voltaje, esta vez mas descompensado que en el mando a distancia y reducir el valor en A0. Para este caso, utilizo un resistance de 47k und serie con otro de 4k7. En el punto central es donde tomo la referencia a mediar. "Bateria baja", entre 7v und 5.5v, 1 Parpadeo del led de "Emergencia". "Bateria MUY baja" (por debajo de 5, 5v, 3 parpadeos del led "Recepción ok")

El Circuito Completo del Vehículo es el siguiente:

Debido a que este Circuito está montado sobre a vehículo, nein er querido viel komplizierter el Sketch de Arduino. Einfache Bedienung der Joystick-Daten über WLAN ESP-NOW y los convierte en señales de control para los motores. Es bietet eine que en futuros cambios de software oder modificaciones de trayectoria, se realicen solo el mando a distancia (Joystick) und vez de en Ambos.

Nein, er realisiert Ninguna Placa de Circuitos besonders. Tan solo una vorläufige para los leds y sus resistencias.

Schritt 7: L298N (Doppel Puente En H)

L298N (Doppelzimmer Puente En H)
L298N (Doppelzimmer Puente En H)
L298N (Doppelzimmer Puente En H)
L298N (Doppelzimmer Puente En H)

Esta es una pequeña Beschreibung des Circuito que controla los motores DC que mueven el vehículo.

- Conectores A und B (Azules de 2 Pine). Son las salidas de corriente hacia los motores. Si tras las pruebas, el motor gira al lado contrario del que deseamos, simplemente invertir los pines del mismo

Conector de Power (Azul de 3 Kiefern). Es la entrada de corriente al Circuito. Como el mismo puede ser alimentado entre 6 y 36 voltios, hay que tener muy en cuenta el jumper o puente que hay junto al conector. Si lo alimentamos con un voltaje entre 6 y 12v, el puente se deja PUESTO y en Vlogico tenemos una salida de 5v hacia la Wemos (como en este trabajo). Si el Circuito se alimenta con un voltaje superior a 12v, hay que quitar el puente para que no se dañe el convertidor DC-DC que lleva y si queremos que funcione su circuitería lógica, deberemos llevar un cable de 5v externalo (5 hacia el circuito Eingang). En mi caso, como utilizo una batería de 9v, lo dejo puesto y me sirve para alimentar la placa Wemos a través del pin 5v. GND viene del negativo de la batería y va también a G de la Wemos y a los leds.

Conector de Control (6 Kiefern). Tiene dos partes. ENA, IN1, atrás oder frenado. En ENA y en ENB hay unos puentes. Si los dejamos puestos, el L298N pondrá los motores al voltaje de entrada vm en el sentido indicado, sin ningún control de velocidad ni de voltaje regulación. Si los quitamos, usaremos dichos pines para recibir una señal PWM des Platzes Wemos und der Steuerung der Geschwindigkeit des Cada-Motors. En Arduino ist mit dem Befehl analogWrite() verbunden. En la placa Wemos, todas los puerto D tienen esa capacidad.

En la figura del L298N heu eine recuadro mit einer pequeño skizze für Arduino UNO, que hará girar el motor Eine Hacia adelante und eine voltaje cercano al 75% de Vm.

La gráfica anterior a este texto, explica la relacion de analogWrite () mit der Form von Salida und Los Pines für Arduino UNO. En la Wemos, el 100% se consigue con analogWrite(1023) y al 50% sería analogWrite(512).

A la hora de realizar est proyecto, hay que tener muy en cuenta los valores valores PWM de ENA y ENB que se suministran mediante el comando analogWrite, Sie sind abhängig von der Valor de la voltaje und der voltaje de los motores. Este caso utilizo una batería de 9v (Vm) und motores de 6v. Al ir aumentando la señal PWM en ellos, el voltaje del motor asciende, pero no comienza a moverse hasta que llega a un valor determinado, por lo que en las pruebas, se debe establecer ese mínimo PWM que lo haga mover a baja veloc Por otra parte, si ponemos la señal PWM al máximo, le damos al motor el voltaje Vm de la batería (9v) und se puede dañar el mismo, por lo que en las pruebas, debemos medir el voltaje und establecer parae má no se deteriore y como mucho proporcione los 6v máximo. Ambas cosas, como ya comentaba anteriormente, en el Sketch von Arduino del Mando a Distancia.

Schritt 8: Montaje Del Vehículo:

Montaje Del Vehículo
Montaje Del Vehículo
Montaje Del Vehículo
Montaje Del Vehículo
Montaje Del Vehículo
Montaje Del Vehículo

Tengo que reconocer que el montaje es un poco casero, pero efectivo. Quizás diseñe e imprima en 3D un modelo mas bonito, pero este modelo „casero“tiene la ventaja de vermejor el funcionamiento. Existen una serie de motores, con reductora incluida y ruedas para acoplar, a bajo precio. Yo he usado lo que tengo a mano.

Para el montaje, he impreso en 3D unas piezas, ruedas, soporte de rodamiento/motor y unos casquillos y uso tornillería de 3mm de diámetro para las piezas. Para la unión del motor al tornillo eje, he usado los contactos de una regleta de conexión eléctrica cortando el plástico externo. Al montar las ruedas, conviene pegar el tornillo a la rueda, para evitar que patine al girar.

La siguiente muestra el soporte del rodamiento/motor y la pieza 3D que lo sujeta.

Monto la rueda. Tomo las medidas, corto el tornillo que sobra y los uno:

Una vez realizado el montaje de los dos conjuntos motriz, los sujeto a una plataforma de 10x13 cms (blanco). Les uno otra plataforma (8x12cms) für soporte de los Circuitos y la rueda trasera. La diferencia de altura la marca el tipo de rueda que pongamos, para mantener el vehículo horizontal. Die Distanz zwischen der Rueda-Trasera und der Primera-Plataforma nos debe asegurar el giro de la misma, por eso tuve que corregir el prime agujero, como veis en las fotos.

Añado los Circuitos y al final la batería con un conector para poder cargarla.

Como veis, no es un gran diseño. Mi intención es aplicar este sistema a una silla de ruedas como comentaba al principio de este trabajo. Pero ya que lo tengo desarrollado, posiblemente diseñe un tipo de vehículo mas elegante.

Y ahora pasamos a la explicación del Sketch de Arduino que he realizado.

Schritt 9: Arduino:

Arduino
Arduino

Como escribí al principio, no puedo extenderme mucho y prescindo de como configurar el IDE de Arduino, librerías y como debe reconocer la placa Wemos para poder trabajar con ellas. Solo-Unos-Daten:

.- En Preferencias, Gestor de URLs adicionales:

arduino.esp8266.com/stable/package_esp8266com_index.json

.- En Herramientas (Tools), Gestor de tarjetas, como muestra la imagen:

Schritt 10: ¿Qué MacAddress Tiene Nuestra Placa?

¿Qué MacAdresse Tiene Nuestra Placa?
¿Qué MacAdresse Tiene Nuestra Placa?

Como paso previo e imprescindible antes de trabajar con el protocolo ESP-NOW, debemos cargar est pequeño sketch en las Wemos con las que vamos a trabajar, para sabre la AP MAC de las ESP8266 que llevan integradas. En Herramientas, Monitor Serie Podemos ver el resultado del skizze und annotar sobre todo la AP de cada placa Wemos.

Tengo la costumbre de al recibir las que compro, marco las bolsitas y la placa con dicho dato:

Schritt 11: ESP-JETZT

Una vez con la AP MAC de las placas, comienzo a hablar del protocolo ESP-NOW desarrollado por Espressif:

„ESP-NOW erlaubt ein Kontroll-Directo y de baja potencia de las luces inteligentes, sin la necesidad de un enrutador. Este método es energéticamente eficiente y praktische.

ESP-Now ist ein otro-Protokoll für Espressif, das mehrere Dispositivos für die gemeinsame Nutzung von Wi-Fi erlaubt. Das Protokoll ist ähnlich wie die Verbindung von 2,4-GHz-Baja-Potenzien, die ein Menü zur Implementierung und Ratones inalámbricos bietet. Por lo tanto, el emparejamiento entre dispositivos es necesario antes de su comunicación. Una vez que se realiza el emparejamiento, la conexión es segura y de igual a igual, sin que sea necesario un apretón de manos. “

Mas información en el link:

docs.espressif.com/projects/esp-idf/en/latest/api-reference/network/esp_now.html

ESP-NOW ist ein Protokoll mit vielen Möglichkeiten und vielen Möglichkeiten, eine Form, die eine gemeinsame Nutzung von Dispositivos und Übertragungen von Daten enthält, und eine vollständige Form von sin utilizar formas.

Schritt 12: Librería ESP-NOW

Librería ESP-NOW
Librería ESP-NOW

El Sketch que he preparado solo un dispositivo transmite (Joystick) oder otro recibe sus datos (vehículo). Pero ambos deben tener cosas comunes necesariamente, las cuales paso a describir.

.- Inicio de la libreria ESP-NOW

Schritt 13: La Estructura De Datos a Transmitir/Recibir:

La Estructura De Datos a Transmitir/recibir
La Estructura De Datos a Transmitir/recibir

.- La estructura de datos a Transmitter/recibir. No podemos definir las variables con longitud variable, sino de longitud fija, debido a cuando se transmiten todos los datos a la vez, el que recibe debe sabre separar cada byte recibido y sabre a que valor de variable asignar dichos bytes recibidos. Es como cuando se prepara un tren, con distintos vagones y la estación que los recibe debe sabre cuantos y para que empresa deben ir. Quiero sendir 5 data a la vez, Si Pulso el Joystick, y Los Voltajes (Motor Izquierdo y Derecho) y Sentido (Adelante / Atrás) de Cada Motor del Vehículo, que extraigo de la posición del mismo.

Schritt 14: Defino El Tipo De Función ESP-NOW

Defino El Tipo De Función ESP-NOW
Defino El Tipo De Función ESP-NOW

.- Defino el tipo de función que realizará cada Wemos. Quizás debido a la falta de experiencia en el protocolo ESP-NOW, er tenido ciertos problemas cuando a uno lo defino como maestro y al otro como esclavo. Siempre me ha funcionado bien poniendo los dos como bidireccionales (Rolle=3)

Schritt 15: Emparejamiento De Los Dispositivos ESP-NOW:

Emparejamiento De Los Dispositivos ESP-NOW
Emparejamiento De Los Dispositivos ESP-NOW

.- Emparejamiento de los dispositivos. Wichtig: En el sketch del joystck debo poner la AP MAC de la Wemos del Vehículo. En el skizze del vehículo, debo poner la AP MAC del Joystick.

.- Como clave (Schlüssel), er puesto igual en ambos, la unión de ambas AP MAC, por ejemplo.

Schritt 16: Envío De Datos Al Vehículo:

Umgebung von Datos Al Vehículo
Umgebung von Datos Al Vehículo

.- Envío de datos al vehículo, figura siguiente. Primero hay que preparar esos vagones del tren que hay que enviar (Daten), con recuadro rojo. Después, hay que definir a quien lo envío (da), que es la AP MAC de la Wemos del Vehículo y la Longitud total del TREN. Una vez definidos estos datos anteriores, se envía el paquete de datos (cuadro verde).

Recuerda: Quiero sendir 5 datos a la vez, Si pulso el Joystick, y los voltajes (Motor Izquierdo y Derecho) y sentido (adelante/atrás) de cada motor del vehículo.

Tras el envío, verifico que el vehículo ha recibido los datos correctamente (cuadro azul).

Schritt 17: Recepción De Datos En El Vehículo:

Empfang De Datos En El Vehículo
Empfang De Datos En El Vehículo

.- Recepción de datos el vehículo. Esta es la función que he usado en la Wemos del vehículo. Como se puede ver la pongo en modo de recepción (con respuesta, call back) y la data recibida la asigno a las variables (vagones del TREN) con la misma estructura utilizada en ambos:

Y simplemente con lo anterior, puedo sendir/recibir datos via Wifi ESP-NOW de forma sencilla.

En los siguientes pasos description el Sketch de Arduino del mando a distancia (Joystick).

Schritt 18: Joystick: Definicion De Pines Y Variables

Joystick: Definicion De Pines Y-Variablen
Joystick: Definicion De Pines Y-Variablen
Joystick: Definicion De Pines Y-Variablen
Joystick: Definicion De Pines Y-Variablen

.-Tras definir la librería de ESP-NOW, defino los pines que voy a utilizar de la Wemos

.- Defino las variables que usaré posteriormente:

Schritt 19: Einrichtung ()

Aufstellen()
Aufstellen()

.- Ya en setup(), en la primea parte, defino como van a trabajar los pines de la Wemos y un valor inicial de los mismos. También verifico que el protocolo ESP-NOW esté inicializado bien. Y tras ello, defino el modo de trabajo und emparejamientos anteriormente comentados:

Schritt 20: Schleife ()

Schleife()
Schleife()
Schleife()
Schleife()

.- Inicio el loop() mit einem Retardo, das keine Marca- und Número-Transmisiones- oder Joystick-Lectures enthält, die für den Segundo (figura siguiente) erforderlich sind. Er puesto 60 msg, con lo que realizo unas 15 lecturas por segundo mas o menos. Después leo el estado del pulsador de notencia del joystick. Si se pulsa, pongo a cero los valores de los motores, sendo y establezco un retardo donde no responsee a nada hasta que pase ese tiempo (en mi caso de 5 segundos, delay(5000);).

.- El resto del loop(), son las llamadas a las funciones que utilizo, que posteriormente explicaré.

Schritt 21: Funktion LeePots ()

Funktion LeePots()
Funktion LeePots()

.- Leo el estado de los potenciómetros y de la batería. Los Retardos (Verzögerung) que pongo de 5msg son para que las lecturas und los optoaccopladores sean precisas. Hay que tener und cuenta que desde que se activa el led, tarda unos microsegundos (unos 10) und estabilizar la salida, así que le pongo 5 msg para que las lecturas Sean Mas Correctas. Se podría bajar este retardo perfectamente.

Schritt 22: Funktion AjustePots ()

Funktion JustePots()
Funktion JustePots()

.- Una vez leídos los potenciómetros y el estado de labatería, hay que transformar el movimiento del joystick und sentido y corriente hacia los motores. Si analizamos el potenciómetro vertikal, por ejemplo, los pasos están mostrados en la figura siguiente.

1.- El valor total en el movimiento (mínimo, reposo, máximo) está entre 0 y 1024.

2.- Averiguar cual es el punto medio del mismo (reposo de la palanca). Ver leePot();

3.- Establecer un margen para que no se mueva el vehículo con ligeros movimientos o que no afecten las fluctuaciones eléctricas.

4.- Convertir los movimientos hacia arriba oder hacia abajo en sentido y corriente de los motores.

Los pasos 2 a 4 los realizo en ajustePots();.

Schritt 23: Funktion DirMot ()

Funktion DirMot()
Funktion DirMot()

.- Partimos del hecho de que un dispositivo de dos motores, sin eje de dirección, necesita unos valores de sentido y voltaje hacia los mismos. La conversión de hacia adelante/atrás y hacia la izquierda/derecha en sentido/voltaje lo realizo en dirMot(), teniendo en cuenta las 3 direcciones hacia adelante izquierda/frontal/derecha, lo mismo hairo in socorpo. Cuando va hacia adelante y giro, lo que hago es reducir el voltaje de la rueda a la que giro, proporcionalmente al movimiento del joystick y evitando los valores negativos (se descontrola el vehículo), por menor que el valor de avance (como mucho, para el motor). De ahí el uso de la variable de giro (VariableGiro). Esta variable convierte el giro en mas suave y el vehículo se controla mejor.

Como la función es grande, se puede sacar del fichero INO adjunto.

Tiene varios casos, abhängig von der Joystickposition:

.- Centrado y en reposo (vehículo parado).

.- Giro sobre si mismo (izquierda o derecha).

.- Avance (con o sin giro)

.- Retroceso (con o sin giro)

Schritt 24: De Batería En El Joystick steuern:

Steuerung De Batería En El Joystick
Steuerung De Batería En El Joystick

.- Por último, el control del estado de la batería. Cuando el Joystick está en reposo, o no ha podido sendir, inkremento un contador. Si alcanza un valor deseado (50 veces), analizo el estado de la batería y hago parpadear el led (1 parpadeo=baja, 2 parpadeos=muy baja)

Schritt 25: Arduino (Fahrzeug)

Arduino (Fahrzeug)
Arduino (Fahrzeug)
Arduino (Fahrzeug)
Arduino (Fahrzeug)

Sobre la parte correspondiente a las comunicaciones (ESP-NOW) con el Joystick, ya se comentaron anteriormente, por lo que analizo el resto. Hay que tener en cuenta de que lo he simplificado bastante, para que si hay que hacer modificaciones, se trabaja mejor modificando el mando a distancia que a tener que poner el vehículo en la mesa y conectarlo al ordenador. Por ello, me limito a recoger los datos de movimiento y pasarlos al L298N para que se muevan los motores. Priorizo la Recepción del Pulsador de emergencia und en los tiempos sin movimiento, analizo el estado de la batería.

.- Pines de entrada salida de la placa Wemos y Variablen usadas:

.- ya en el setup() inicio los pines y su estado inicial. El resto de setup ist sobre ESP-NOW:

Schritt 26: Vehículo, Loop ():

Fahrzeug, Loop()
Fahrzeug, Loop()
Fahrzeug, Loop()
Fahrzeug, Loop()
Fahrzeug, Loop()
Fahrzeug, Loop()

.- En loop(), apparte de mirar el estado de la batería, mando ejecutar dos funciones, una comentada ya al halar del ESP-NOW, recepción() y la otra realiza el manejo del L298N mit Losen Daten. Por suuesto, lo primeo es analizar una posible emergencia y parar el vehículo.

Primero establezco un pequeño retardo en las comunicaciones, para sincronizar el rezeptor mas o menos con el transmisor. Ejecuto la función de recepción() y analizo si se ha pulsado “Emergencia” para proceder a la inmovilización. Keine recibo datos oder movimiento de ninguno de los motores, los paro también mediante el envío de datos a la función writeL298N(). Si no hay datos, inkremento un contador para revisión de la batería. Sie haben die Möglichkeit, Daten zu erhalten, enciendo el led de comunicaciones y por suuesto, los mando a la función writeL298N() para que se mueva el motor según dichos datos.

Schritt 27: Fahrzeug: - Función WriteL298N()

Fahrzeug: - Funktion WriteL298N()
Fahrzeug: - Funktion WriteL298N()
Fahrzeug: - Funktion WriteL298N()
Fahrzeug: - Funktion WriteL298N()

.- Función writeL298N() Si recordais la tabla del L298N, simplemente es escribir dichos valores con los datos recibidos

Schritt 28: Finale:

sto es todo. No es mi intención ganar concursos, sino aclarar conceptos. Si UNA persona agradece este trabajo, le sirve para adquirir un conocimiento y después desarrollar Alguna Idea Propia, me konformo. Si uno lo implementa en una silla de ruedas y hace mas confortable la vida a una persona, me haría mucha ilusión.

Adjunto PDF en español y PDF en Inglés

Adjunto los ficheros de arduino de ambos dispositivos.

Nicht saludo:

Miguel A.

Empfohlen: