Índice:

Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos: 28 etapas
Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos: 28 etapas

Vídeo: Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos: 28 etapas

Vídeo: Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos: 28 etapas
Vídeo: 🖥️ Servidor Web en Arduino ESP32 y ESP8266 (🤩 Guiá Completa) 2024, Julho
Anonim
Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos
Comunicación ESP-NOW. Controle Remoto De Vehículo, Joystick, Arduino Wemos

Todo parte da ideia de poder mover uma silla de ruedas para pessoal discapacitado vía remota e poder acompañarlos sem necessidade de empujar la misma. Como ejemplo de funcionamiento, ele 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 system mecánico que la mueva.

Si la persona que va en silla de ruedas está capacitada para manejarla personalmente, se pueden fusionar ambos os sketchs de Arduino en uno solo y evitar las comunicaciones remotas. Simplesmente uma placa única para controlar os movimentos do joystick e controlar os motores.

Aunque no gane ningún concurso, si a alguien le gusta (ou una parte del mismo) ou pode realizar o projeto e aliviar o estado de ánimo de uma pessoa mejorando sua movilidad, me sentiré contento.

No final do documento, anexei um PDF em inglês deste trabalho (tradutor da web).

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

Etapa 1: Introdução:

Resumen del trabajo:.- Varios entradas analógicas a través de um solo puerto.

.- Wemos, especificaciones eléctricas.

.- Protocolo de comunicaciones ESP-NOW.

.- Circuito L298N. Especificaciones y pinout del mismo.

.- Montaje veículo com dos motores DC

Este trabalho explico como tomar vários valores analógicos e introducirlos em um único ponto A0 de uma placa Wemos. Os valores provenientes de um joystick, se transmitem de forma rápida, segura e fácil por meio de Wifi usando o protocolo ESP-NOW. No veículo, outro Wemos recibe os dados e aciona os motores DC para controlar a direção do veículo.

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 es una satisfacción cuando lo ves crash. Aparte de eso, me conforma con que a una persona le guste o le aclare algún concepto or duda.

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

Etapa 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:

Com ele podemos realizar o projeto IoT, análise de dados e envio a través de las redes y otras muchas cosas, aprovando a capacidade Wifi de las mismas. En otro proyecto que ele realizou, creo una red wifi propia y puedo abrir una cerradura remota, mediante una clave tecleada from nuestro smartphone, that también he publicado. A diferença respecto ao anterior que em vez de usar o protocolo HTLM para a comunicação, uso da característica muy poco publicada de la comunicación WiFi do tipo ESP-NOW entre dos dispositivos, por ser fácil, rápida, segura (encriptada) e sem necessidade de emparejamientos a la hora de actuar (só al configurar el sketch de Arduino). Mas adelante, a la hora de explicar el sketch, comentaré los detalles a tener en cuenta.

A placa exibe uma entrada de alimentação de 5v no pino correspondente (ou por USB) e uma entrada de GND. Dicha alimentación no tiene porque é 5v, ya que lleva um regulador de voltaje que lo convierte en 3.3v, que é realmente el voltaje de trabajo. Na folha de dados da Wemos podemos ver o conjunto e também uma imagem da folha de dados do regulador.

Segue o link das especificações do ESP8266, podría trabajar incluso a 3v, pero conviene alimentarlo con un voltaje superior a 3.5v, para que a salida del regulador interno tengamos un minimo de 3v. En dicho link se pode ver outros detalhes técnicos que amplian esta información.

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

A Placa também possui 9 entradas / salidas digitales (D0-D8). Todas têm a capacidade de poder trabalhar com salidas do tipo PWM, ônibus I2C, etc.

Detalle a tener muy en cuenta la hora de conectar algo a la salida de los pines digitales, para iluminar leds, activar relés, etc. Se for necessário entregar o mais correto, debemos intercalar entre o pino e o dispositivo um transistor ou um opto acoplador de maior potência. Ver figura de salidas.

Con una resistencia en serie con la salida de 330 ohms, se entrega una corriente de 10mA, por lo que si es posible, aumentar el valor de las resistencias. Hay en muchas webs la recomendação de una resistencia de 330 ohm en serie con los leds Yo recomiendo use resistencias mas altas. Si ilumina el liderou um nuestro gusto, no necesitamos sumar mAs al trabajo Cualquier ahoro de energía siempre es bueno.

NOTA: nos pinheiros digitais, podemos dar os valores PWM entre 0 e 1023. Em Arduino Uno, entre 0 e 254.

A placa Wemos também está disponível em uma entrada digital A0, para análise de dados analógicos. Hay que tener en cuenta dos cosas. La primera é 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 filho de 0 a 1024.

Otras características:

-Salida de 3.3v para alimentar circuitos exteriores. Máxima corriente 12mA por pino.

- Conector micro USB para carga do firmware e alimentação de 5v

-Pulsador de Reset.

Muitos tutoriais de como configurar o IDE de Arduino para trabalhar com este tipo de placa, assim como as bibliotecas necessárias. No voy a entrar en ello para no alargar demasiado este trabajo.

Etapa 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 uma entrada analógica A0, surge el problema de querer captar vários valores analógicos al mismo tiempo. Para mi caso em concreto, um joysick está formado por dos potenciómetros com salidas individuais analógicas e um pulsador. Además, quiero analizar el valor actual de la batería that use en 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 sua análise. Viaje para usar uma bateria de 3.7v, para que ele esteja cargada completamente es de aproximadamente 4v e debido ao divisor de voltaje, no pino 4 de H1 tenemos 2v (variável dependente do estado da bateria). A la derecha tenemos un joystick básico, formado por dos potenciómetros e um pulsador (R3 es externa al joystick). Se alimentar com os 3.3v que oferece o Wemos. En este esquema geral primero, tenemos 3 valores analógicos (pinheiros 2, 3 e 4 de H1) e un valor digital (pino 1 de H1).

Para poder analizar na placa Wemoslos 3 valores analógicos, recorrendo a um único dispositivo opto-acoplador, o chip SFH615A ou TLP621. Es muy básico su funcionamiento para este trabalho. No pino 4 do chip pode ser usado um dos valores analógicos e analizar. Todos los pino 2 a GND. Todos los pin 3 unidos ya A0 y cada uno de los pin 1 a una salida digital a través de um resistor, las cuales voy ativando sucesivamente y dependente cual ativo y leyendo el valor en A0, asigno a cada valor una variavel (pot 1y pot 2 do joystick e bateria).

Hay que tener en cuenta que no podemos conectar a salida digital de la Wemos diretamente al pin 1 del TLP621, ya que se deterioraría dicha salida digital. Cada pino digital em Wemos pode administrar unos 12mA. Por ello, intercalamos una resistencia suficiente para ativar o led interno. Com 470 Ω, é necessário para ativar o supone solo de 7 mA.

Al querer introduzir 3 valores analógicos mediante este sistema, desviado 3 salidas digitales para poder ativar. Se quisermos introduzir mais valores analógicos por A0, podemos usar outros valores digitais mais ou seguir usando apenas 3 salidas digitales, añadiendo al circuito un demultiplexor e dando valores binários a essas entradas, conseguimos ter 8 valores digitais possíveis.

Añadimos al mando a distancia 2 leds, um para reflejar “Power ON” e o outro para o estado da bateria e “Transmisión OK”.

Conectar ao circuito um interruptor para a bateria e um conector para poder recarregar a misma sem ter que quitarla (aviso: APAGAR PARA RECARGAR para evitar dañar o regulador ME6211 da placa Wemos). Con todo lo anteriormente explicado, el circuito completo del mando a distancia con joystick es la siguiente figura.

Etapa 4: Joystick 2:

Joystick 2
Joystick 2

Explicação para o desarrollo posterior no IDE de Arduino:

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

En D0 pasa a HIGH cuando se pulsa el botón del joystick (“parada de emergência”)

Si activo D1, leitor do estado do potenciómetro vertical do joystick em A0.

Si activo D2, leo no estado do potenciómetro horizontal do joystick em A0.

Si activo D5, leo o estado da bateria em A0. NOTA: em um principio lo puse en D4, pero me daba problemas al flashear el programa from el IDE de Arduino, por lo que la pasé a D5

La salida D3 se usará para el led de Actividad (azul). Dicho led se enciende quando faz o movimento do joystick e a transmissão foi correta. Cuando está em reposo nos indica o estado da bateria (1 parpadeo entre 3,6 e 3,5v, 2 parpadeos entre 3,5 e 3,4v e 3 parpadeos por debajo de 3.4v).

El led rojo indica Encendido / Power ON.

S1 é o interruptor de encendido. Convém que o apagamento seja apagado quando se realiza o carregamento da bateria ou se há modificações no software (5v a través do USB).

El esquema del circuito montado en um protoboard es la figura siguiente:

A linha inferior positiva é o retorno da bateria. La linea superior positiva es la salida de 3.3v de la Wemos

Etapa 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

Ele desenhou a placa de circuitos com Sprint-Layout 6.0 para a conexão do joystick, opto acopladores, Wemos e outros. Indico las medidas por si alguien la quiere realizar (40x95mm). Tenha cuidado com o pino 1 do TLP621. Van soldados ao terminal cuadrado e na posição vistos desde la cara de los componentes. La parte da placa próxima a los conectores y Wemos, la recorto posteriormente, como queda de forma cómoda el agarre del mando, el encendido y las conexiones externas.

Las fotos del mando a distancia. Nas bordas, as conexões USB, o conector de carga da bateria e o interruptor de ON / OFF.

Fácil de sujetar, aunque sea un poco grande. Me falta realizar uma medida para o mismo com a impressão 3D:

Etapa 6: Circuito Del Receptor (Motores):

Circuito Del Receptor (Motores)
Circuito Del Receptor (Motores)

Este é compatível com a placa Wemos, receba dados do joystick ou controle remoto e ativa as señales necesarias hacia un L298N (doble puente en H) e controlar dos motores, hacia adelante e hacia atrás, com controle de direção. Como complemento del circuito, 3 leds, uno para power ON, otro para a transmissão de dados e um terceiro como indicador de “parada de emergência”. Aprovecho estos dos últimos (parpadeando) para a indicação do estado da bateria do veículo.

Controlar o estado da bateria: Lo primeiro a tener en cuenta es que la batería that estoy usando es de 9v. Intentar medir la misma en A0 diretamente, supone deteriorar o puerto, ya que o valor máximo 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, utilize um resistor de 47k em série com outro de 4k7. En el ponto central es donde tomo la referencia a medir. "Bateria baja", entre 7v e 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 veículo es el siguiente:

Debido a que este circuito está montado sobre um veículo, não ele querido complicar mucho el sketch de Arduino. Simplesmente recibe os dados do joystick via wi-fi ESP-NOW e os convierte en señales de control for los motores. Eso facilita as mudanças futuras de software ou modificações de trayectoria, se realicen solo no mando a distancia (joystick) em uma vez de ambos.

Não, ele realizou ninguna placa de circuitos especial. Tan solo una provisional para los leds y sus resistencias.

Etapa 7: L298N (duplo Puente En H)

L298N (duplo Puente En H)
L298N (duplo Puente En H)
L298N (duplo Puente En H)
L298N (duplo Puente En H)

Esta é uma descrição do circuito que controla os motores DC que mueven el veículo.

- Conectores A e B (azuis de 2 pinheiros). 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 pinheiros). Es la entrada de corriente al circuito. Como o mismo pode ser alimentado entre 6 e 36 voltios, hay que tener muy en cuenta el jumper ou puente que hay junto ao conector. Si lo alimentamos con un voltaje between 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 não se dañe el convertidor DC-DC que lleva y si queremos que funcione su circuitería lógica, deberemos llevar un cabo de 5v hacia el circuito (5v entrada). En mi caso, como utilizar uma bateria de 9v, lo dejo puesto y me sirve para alimentar la placa Wemos a través del pin 5v. GND viu o negativo da bateria e va también no G de la Wemos e nos leds.

Conector de Control (6 pinheiros). Tiene dos partes. ENA, IN1, IN2 controla o motor conectado em A e ENB, IN3, IN4 que controla o motor conectado em B., atrás o frenado. En ENA y en ENB hay unos puentes. Si los dejamos puestos, el L298N pondrá los motores al voltaje de entrada Vm no indicado indicado, senão ningun control de velocidad ni de regulación de voltaje. Si los quitamos, useemos dichos pinheiros para receber um señal PWM desde a placa Wemos e assim como controlar a velocidade de cada motor. En Arduino pode ser usado mediante um comando analogWrite (). Na placa Wemos, all los puerto D tienen esa capacidad.

Na figura do feno L298N um recuadro com um esboço de desenho para Arduino UNO, que girar o motor A hacia adelante a um voltaje cercano al 75% de Vm.

A gráfica anterior a este texto, explica a relação de analogWrite () com a forma de exibição nos pinheiros para Arduino UNO. En la Wemos, el 100% se consigue com analogWrite (1023) y al 50% sería analogWrite (512).

A hora de realizar este projeto, feno que tener muy en cuenta os valores possíveis PWM de ENA e ENB que é administrado mediante o comando analogWrite, ya que depende do valor do voltaje da bateria e do voltaje dos motores. Neste caso, utilize uma bateria de 9v (Vm) e motores de 6v. Al ir aumenta la señal PWM em 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 estabelecer ese mínimo PWM que lo haga mover a baja velocidad. Por otra parte, si ponemos la señal PWM al máximo, le damos al motor el voltaje Vm de la batería (9v) y se puede dañar el mismo, por lo que en las pruebas, debemos avaliar el voltaje e estabelecer ese máximo PWM para que não se deteriore y como mucho proporcione los 6v máximo. Ambas cosas, como ya comentaba anteriormente, no esboço de Arduino del mando a distancia.

Etapa 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 and Imprima en 3D um modelo mas bonito, pero este modelo “casero” tiene la ventaja de ver mejor el funcionamiento. Existe uma série de motores, con reductora incluida y ruedas para acoplar, a bajo precio. Você é usado para lo que tengo a mano.

Para a montagem, ele imprime em 3D unas piezas, ruedas, soporte de rodamiento / motor y unos casquillos y uso tornillería de 3mm de diámetro para unir las piezas. Para a união do motor ao tornillo eje, ele usou os contatos de uma regra de conexão elétrica cortando o 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 realizada el montaje de los conjuntos motriz, los sujeto a una plataforma de 10x13 cms (blanco). Les uno otra plataforma (8x12cms) para 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. La distancia between la rueda trasera y la primera plataforma nos debe assegurar el giro de la misma, por eso tuve que corregir el primer agujero, como veis en las fotos.

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

Como veis, no es un gran diseño. Minha intenção é aplicar este sistema a uma silla de ruedas como comentaba al principio de this 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 ele realizou.

Etapa 9: Arduino:

Arduino
Arduino

Como escrever o principio, não pode extenderme mucho y prescindo de como configurar el IDE de Arduino, librerías y como debe reconocer la placa Wemos para poder trabalhar com ellas. Solo unos datos:

.- En Preferências, Gestor de URLs adicionais:

arduino.esp8266.com/stable/package_esp8266com_index.json

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

Etapa 10: ¿Qué MacAddress Tiene Nuestra Placa?

¿Qué MacAddress Tiene Nuestra Placa?
¿Qué MacAddress Tiene Nuestra Placa?

Como paso anterior e imprescindível antes de trabalhar com o protocolo ESP-NOW, debemos cargar este pequeño sketch en las Wemos con las que vamos a trabajar, para saber la AP MAC de las ESP8266 que llevan integradas. Em Herramientas, Monitor Serie podemos ver o resultado do sketch e anotar sobre todo o AP de cada placa Wemos.

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

Etapa 11: ESP-AGORA

Uma vez com o AP MAC de las placas, comienzo a hablar del protocolo ESP-NOW desenhado por Espressif:

“ESP-NOW permite um controle direto de baja potencia de las luces inteligentes, sin la necesidad de un enrutador. Este método é energeticamente eficiente e conveniente.

ESP-Agora é otro protocolo desarrollado por Espressif, que permite que vários dispositivos se comuniquen entre sí sin usar wi-fi. O protocolo é semelhante a la conectividad inalámbrica de baja potencia de 2.4GHz que um menudo se implementa em ratones inalámbricos. Por lo tanto, el emparejamiento entre dispositivos es necesario antes de su comunicación. Uma vez que se realiza o emparejamiento, a conexão é segura e igual a igual, sem que o mar necesario um 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 é um protocolo amplio y con muchas posibilidades, pero quiero mostrar una forma fácil de comunicar dos dispositivos y transmitir dados entre ellos, sin utilizar formas complejas.

Etapa 12: Librería ESP-NOW

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

El sketch que ele preparou solo un dispositivo transmite (joystick) y otro recibe sus datos (vehículo). Pero ambos deben tener cosas comunes necesariamente, las cuales paso a describeir.

.- Inicio de la librería ESP-NOW

Etapa 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 transmitir / recibir. Não podemos definir as variáveis com longitude variável, sino de longitudinal fija, debido e cuando se transmiten todos os dados à la vez, el que recibe debe sabre separar cada byte recibido y sabre a que valor de variável 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 transmitir 5 datos à vez, Si pulso el joystick, y los voltajes (motor Izquierdo y Derecho) y sentido (adelante / atrás) de cada motor del veículo, que extraigo de la posição del mismo.

Etapa 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

.- Definir o tipo de função que realizará cada Wemos. Quizás debido a la falta de experiencia en el protocolo ESP-NOW, he 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 (Role = 3)

Etapa 15: Emparejamiento De Los Dispositivos ESP-NOW:

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

.- Emparejamiento de los dispositivos. Importante: En el sketch del joystck debo poner la AP MAC de la Wemos del vehículo. No esboço do veículo, abra o AP MAC do joystick.

.- Como clave (chave), ele puesto igual em ambos, la unión de ambas AP MAC, por ejemplo.

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

Envío De Datos Al Vehículo
Envío De Datos Al Vehículo

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

Recuerda: Quiero transmitir 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).

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

Recepción De Datos En El Vehículo
Recepción De Datos En El Vehículo

.- Recepción de datos en el vehículo. Esta é a função que ele usou em Wemos del veículo. Como se pode ver o pongo no modo de recepção (com resposta, chamada de volta) e os dados recibidos o asigno a essas variáveis (vagones del TREN) com a misma estructura usada em ambos:

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

En los siguientes pasos descrevendo o esboço de Arduino del mando a distancia (joystick).

Etapa 18: Joystick: Variáveis Definicion De Pines Y

Joystick: Variáveis Y do Definicion De Pines
Joystick: Variáveis Y do Definicion De Pines
Joystick: Variáveis Y do Definicion De Pines
Joystick: Variáveis Y do Definicion De Pines

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

.- Defino las variables que usaré posteriormente:

Etapa 19: configuração ()

Configurar()
Configurar()

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

Etapa 20: Loop ()

Ciclo()
Ciclo()
Ciclo()
Ciclo()

.- Inicio o loop () com um retardo que nos marca o número de transmisiones as lecturas del joystick que quiero hacer por segundo (figura siguiente). Ele puesto 60 msg, con lo que realizo unas 15 lecturas por segundo mas o menos. Despeça o estado do pulsador de emergência do joystick. Si se pulsa, pongo a cero los valores de los motores, transmito y establezco un retardo donde não responde 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é.

Etapa 21: Funcion LeePots ()

Funcion LeePots ()
Funcion LeePots ()

.- Leo o estado de los potenciómetros y de la batería. Los retardos (delay) that pongo de 5msg son for that las lecturas en los optoacopladores sean precisas. Haja que tener en cuenta que desde que se ativa el led, tarda unos microsegundos (unos 10) en estabilizar la salida, assim que le pongo 5 msg para que las lecturas sean mas correctas. Se podría bajar este retardo perfectamente.

Passo 22: Funcion AjustePots ()

Funcion AjustePots ()
Funcion AjustePots ()

.- Una vez leídos los potenciómetros e o estado de labatería, feno que transforma o movimento do joystick em sentido e corriente hacia los motores. Si analizamos el potenciómetro vertical, por ejemplo, los pasos están result en la figura siguiente.

1.- O valor total no movimento (mínimo, reposo, máximo) está entre 0 e 1024.

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

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

4.- Converter los movimientos hacia arriba o hacia abajo en sentido y corriente de los motores.

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

Etapa 23: Função DirMot ()

Función DirMot ()
Función DirMot ()

.- Partimos del hecho de que um dispositivo de motores, sen eje de direção, 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 hacia atrás e incorporo el giro sobre sí mismo. 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 lo tanto, el valor de reducción nunca puede ser menor que el valor de avance (como mucho, para el motor). De ahí el uso da variável de giro (VariableGiro). Esta variável convierte el giro en mas suave y el vehículo se control mejor.

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

Tiene vários casos, dependendo da posição do joystick:

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

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

.- Avance (con o sin giro)

.- Retroceso (con o sin giro)

Etapa 24: Control De Batería En El Joystick:

Control De Batería En El Joystick
Control De Batería En El Joystick

.- Por último, o controle do estado da bateria. Cuando el joystick está en reposo, o no ha podido transmitir, incremento 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)

Etapa 25: Arduino (Vehículo)

Arduino (Vehículo)
Arduino (Vehículo)
Arduino (Vehículo)
Arduino (Vehículo)

Sobre la parte correspondiente a las comunicaciones (ESP-NOW) com joystick, ya se comentaron anteriormente, por lo que analizo el resto. Hay que tener en cuenta de que lo ele 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. Priorizar a recepção do pulsador de emergência e nos tempos de movimento, analisar o estado da bateria.

.- Pines de entrada salida da placa Wemos y Variables used:

.- ya en el setup () inicio los pines y su estado inicial. O resto da configuração é sobre ESP-NOW:

Etapa 26: Vehículo, Loop ():

Vehículo, Loop ()
Vehículo, Loop ()
Vehículo, Loop ()
Vehículo, Loop ()
Vehículo, Loop ()
Vehículo, Loop ()

.- Em loop (), aparte de mirar o estado da bateria, mando ejecutar das funções, una comentada ya al hablar del ESP-NOW, recepción () y la otra realiza el manejo del L298N con los datos recibidos. Por supuesto, lo primero es analizar una possível emergência y parar el veículo.

Primero establezco un pequeño retardo en las comunicaciones, para sincronizar el receptor 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. Se não houver dados recibo ou movimento de ninguno de motores, los paro también mediante el envio de dados a la função writeL298N (). Se no hay datos, incremento un contador para revisión de la batería. Si hay datos recibidos, enciendo el led de comunicaciones y por supuesto, los mando a la función writeL298N () para que se mueva el motor según dichos datos.

Etapa 27: Vehículo: - Função WriteL298N ()

Vehículo: - Função WriteL298N ()
Vehículo: - Função WriteL298N ()
Vehículo: - Função WriteL298N ()
Vehículo: - Função WriteL298N ()

.- Função writeL298N () Si recordais la tabla del L298N, simplemente es escribir dichos valores con los datos recibidos

Etapa 28: Final:

Ésto es todo. No es mi intención ganar concursos, sino aclarar conceptos. Si UNA persona agradece este trabalho, le sirve para adquirir un conocimiento y después desarrollar alguna idea propia, me conformo. Si uno lo implementa en una silla de ruedas y hace mas confortável la vida a una persona, me haría mucha ilusión.

Adjunto PDF em español e PDF em Inglês

Adjunto los ficheros de arduino de ambos os dispositivos.

Un saludo:

Miguel A.

Recomendado: