Sommario:

Comunicazione ESP-NOW. Controllo Remoto De Vehículo, Joystick, Arduino Wemos.: 28 passaggi
Comunicazione ESP-NOW. Controllo Remoto De Vehículo, Joystick, Arduino Wemos.: 28 passaggi

Video: Comunicazione ESP-NOW. Controllo Remoto De Vehículo, Joystick, Arduino Wemos.: 28 passaggi

Video: Comunicazione ESP-NOW. Controllo Remoto De Vehículo, Joystick, Arduino Wemos.: 28 passaggi
Video: Учебное пособие по CAN-шине Arduino | Взаимодействие CAN-модуля MCP2515 с Arduino 2024, Luglio
Anonim
Comunicazione ESP-NOW. Controlla Remoto De Vehículo, Joystick, Arduino Wemos
Comunicazione ESP-NOW. Controlla Remoto De Vehículo, Joystick, Arduino Wemos

Todo parte de la idea de poder mover una silla de ruedas para personal discapacitado vía remota y poder acompañarlos sin necesidad de empujar la misma. Como ejemplo de funcionamiento, ha creato 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.

Si la persona que va en silla de ruedas está capacitada para manejarla personalmente, se pueden fusionar ambos sketchs de Arduino en uno solo y evitar las comunicaciones remotas. Semplicemente una sola tastiera per controllare i movimenti del joystick e controllare i motori.

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 persona mejorando su movilidad, me sentiré contento.

Alla fine del documento, allego un PDF in inglese di questo lavoro (traduttore web).

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

Fase 1: Introduzione:

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

.- Wemos, specifiche elettriche.

.- Protocollo di comunicazione ESP-NOW.

.- Circuito L298N. Specifiche e pinout del mismo.

.- Montaggio del veicolo con i motori DC

En este trabajo explico como tomar varis values analógicos e introducirlos en un único puerto A0 de una placa Wemos. I valori provenienti da un joystick, se trasmessi in forma rapida, segura y fácil por medio de Wifi usando il protocollo ESP-NOW. En el vehículo, otra Wemos ricevere i dati e l'acceso dei motori DC per controllare la direzione 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 e con componentis de bajo precio siempre es una satisfacción cuarando lo ves. 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.

Passaggio 2: Placa Desarrollo Arduino Wemos:

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

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

Con ella podemos realizar proyector IoT, análisis de datas y envío a través de las redes y 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 differenza rispetto al precedente es que en vez de usar protocolo HTLM para la comunicación, use la característica muy poco publicada de la comunicación WiFi del tipo ESP-NOW entre dos dispositivis, por ser fácil, rápida, segura (encriptada) y sin necesidad de 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 di un ingresso di alimentazione di 5v nel pin corrispondente (o per USB) e di un ingresso di 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 con un voltaje superior a 3.5v, para que a la salida del regulador interno tengamos un mínimo 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 di 9 entrate/salidas digitali (D0-D8). Todas tienen la capacidad de poder trabajar con salidas del tipo PWM, bus I2C, etc.

Detalle a tener muy en cuenta a la hora de conectar anche a la salida de los pines digitalis, para iluminar leds, activar relés, etc. Si se necesita entregar mas corriente, debemos intercalar entre el pin y el device un transistor o un opto acoplador de mayor potencia. Ver figura de salidas.

Con una resistenza in serie con la salita di 330 ohm, se entra una corrente di 10mA, per questo è possibile, aumenta il valore delle resistenze. Hay en muchas webs la raccomandazione di una resistenza di 330 ohm in serie con i leds Yo recomiendo usar resistencias mas altas. Si ilumina el led a nuestro gusto, no necesitamos sumar mAs al trabajo Cualquier ahoro de energía siempre es bueno.

NOTA: en los pines digitales, podemos dar valores PWM tra 0 e 1023. En Arduino Uno, tra 0 e 254.

La piazza Wemos dispone di un ingresso digitale A0, per l'analisi dei dati analitici. Hay que tener en cuenta dos cosas. La primera es que NO se le puede aplicar un voltage superior a 3.3v directamente, ya que se deterioraría. Si se quiere medir un voltaje superior, hay que intercalar un divisore de voltaje externo. Los valores de dicha entrada son de 0 a 1024.

Altre caratteristiche:

-Salida de 3.3v para alimentare circuiti esterni. Massima corrente 12mA per pin.

-Connettore micro USB per la ricarica del firmware e alimentazione 5v

-Pulsatore di reset.

Hay molti tutorial di come configurare l'IDE di Arduino per trabajar con questo tipo di placa, così come le librerie necessarie. No voy a entrar en ello para no alargar demasiado este trabajo.

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

Circuito Del Joystick (mando a distanza)
Circuito Del Joystick (mando a distanza)
Circuito Del Joystick (mando a distanza)
Circuito Del Joystick (mando a distanza)

Me gusta la placa de desarrollo Wemos, ya que tiene poco tamaño, es barata y tiene muchas posibilidades. Como solo dispone di un ingresso analogico A0, surge el problema de querer captar vari valori analógicos al mismo tiempo. Per me è un caso concreto, un joysick è formato per i potenti con salidas individuali analitici e un pulsatore. Además, quiero analizar el valor effettivo de la batería que uso 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 divisore de voltaje. Si la batería es de mas de 3.3v, l'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 4v y debido al divisore de voltaje, en el pin 4 de H1 tenemos 2v (variable dependiendo del stado de la batería). A la tenere a mente un joystick di base, formato per dos potenziómetros e un pulsador (R3 è un joystick esterno). Se alimentare con los 3.3v que proporciona la Wemos. En este esquema general primero, tenemos 3 valores analógicos (pines 2, 3 e 4 de H1) e un valore digitale (pin 1 de H1).

Per analizzare la placa Wemoslos 3 valori analógicos, recurrimos e unos pequeños opto-acpladores, il chip SFH615A o TLP621. Es muy básico su funcionamiento para este trabajo. En el pin 4 del chip pongo uno de los valores analógicos a analizar. Tutto il pin 2 a GND. Todos los pin 3 unidos ya A0 e cada uno de los pin 1 a una salida digital a través de un resistor, las cuales voy activando sucesivamente y dependiendo cual active e leyendo el valor en A0, asigno a cada valor una variabile (pot 1y pot 2 del joystick e batteria).

Hay que tener en cuenta que no podemos conectar la salida digital de la Wemos direttamente al pin 1 del TLP621, ya que se si deteriora dicha salida digital. Cada pin digital en Wemos può essere somministrato unos 12mA. Por ello, intercalamos una resistencia suficiente para activar el led interno. Con 470, es suficiente para activarlo y 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 por A0, podemos usar otras salidas digitales más o podemos seguir usando solo 3 salidas digitalis, añadiendo al circuito un demultiplexor e dando valores binarios a las entradas, conseguimos hasta 8 posibles valores digitales.

Añadimos al mando a distanza 2 led, uno per il riflesso "Power ON" e l'altro per lo stato della batteria e "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 (avviso: APAGAR PARA RECARGAR para evitar dañar el regulador ME6211 de la placa Wemos). Con todo lo anteriormente explicado, el circuito completo del mando a distancia con joystick es la siguiente figura.

Passaggio 4: Joystick 2:

Joystick 2
Joystick 2

Spiegazione per il desarrollo posteriore nell'IDE di 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")

Si attiva D1, leo lo stato del potenciómetro verticale del joystick in A0.

Si attiva D2, leo lo stato del potenciómetro orizzontale del joystick in A0.

Si attivo D5, leo el estado de la batería en A0. NOTA: 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 salita D3 è usata per il led di Actividad (azul). Dicho led se enciende cuando hay movimiento de joystick y la transmisión ha sido Correcta. Cuando está en reposo nos indica el stado de la batería (1 parpadeo tra 3.6 e 3.5v, 2 parpadeos tra 3.5 e 3.4v e 3 parpadeos per debajo de 3.4v).

El led rojo indica Encendido/Power ON.

S1 es el interruptor de encendido. Conviene tenerlo apagado cuando se realiza la carica della batteria o se hai modifiche nel software (5v a través del USB).

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

La linea inferiore positiva es el voltaje de la batería. La linea superiore positiva è la salita di 3.3v de la Wemos

Passaggio 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

Ha disegnato la siguiente placa de circuitos con Sprint-Layout 6.0 per la connessione del joystick, opto acopladores, Wemos y altri. Indica las medidas por si alguien la quiere realizar (40x95mm). Hay que tener cuidado con il pin 1 de los TLP621. Van soldados al terminal cuadrado e en la posición indicada visto desde la cara de los componenti. 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.

Le foto del mando a distanza. In questo modo, le connessioni USB, il connettore di ricarica della batteria e l'interruttore di accensione/spegnimento.

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

Passaggio 6: Circuito Del Receptor (Motori):

Circuito Del Receptor (Motori)
Circuito Del Receptor (Motori)

Está compuesto por otra placa Wemos, donde recibo la data del joystick o control remoto y activa las señales necesarias hacia un L298N (doble puente en H) e 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) per l'indicazione dello stato della batteria del veicolo.

Control de stado de la batería: Lo primero 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. Per questo caso, utilizza un resistore da 47k in serie con altri 4k7. En el punto central es donde tomo la referencia a medir. "Bateria baja", tra 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 vehículo es el siguiente:

Debido a que este circuito está montado sobre un vehículo, no he querido complicar mucho el sketch de Arduino. Semplicemente ricevi i dati del joystick tramite wifi ESP-NOW e i comandi di controllo per i motori. Eso facilita a que en futuros cambios de software o modificaciones de trayectoria, se realicen solo en el mando a distancia (joystick) en vez de en ambos.

No, ha realizzato ninguna placa de circuitos especial. Tan solo una provvisoria para los leds y sus resistencias.

Passaggio 7: L298N (doppio Puente En H)

L298N (doppio ponte in H)
L298N (doppio ponte in H)
L298N (doppio ponte in H)
L298N (doppio ponte in H)

Esta es una pequeña descripción del circuito que controla los motoris DC que mueven el vehículo.

- Conectores A e B (azules de 2 pines). 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 pini). 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 alimenta con un voltaje tra 6 e 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 externo hacia el circuito (5v ingresso). 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.

Connettore di controllo (6 pini). Tiene dos partes. ENA, IN1, IN2 controlan el motor conectado en A y ENB, IN3, IN4 que controlan el motor conectado en B. En la tabla de la figura anterior se indica los niveles de las señales que debe tener para poner en movimiento los motores, adelante, atrás o frenado. En ENA y en ENB hay unos puentes. Si los dejamos puestos, el L298N pondrá los motoris al voltaje de entrada Vm en el sentido indicado, sin ningún control de velocidad ni de regulación de voltaje. Si los quitamos, usaremos dichos pines para recibir una señal PWM desde la placa Wemos y así controlar la velocidad de cada motor. En Arduino se consigue mediante un comando analogWrite(). En la placa Wemos, todas los puerto D tienen esa capacidad.

En la figura del L298N ha un recuadro con un pequeño sketch para Arduino UNO, que hará girar el motor A hacia adelante a una tensione che cercano al 75% de Vm.

La grafica anterior a este texto, explica la relación de analogWrite() con la forma de salida en los pines para Arduino UNO. In Wemos, il 100% segue con analogWrite(1023) e il 50% seria analogWrite(512).

A la hora de realizar este proyecto, hay que tener muy en cuenta los posibles valores PWM de ENA y ENB que se suministran mediante il comando analogWrite, ya que dependen del valor del voltaje de la batería y del voltaje de los motores. In questo caso si utilizza una batteria di 9v (Vm) e motori di 6v. Al ir aumentare la señal PWM en ellos, el voltaje del motor asciende, pero no comienza a mover 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 velocidad. Per 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 medir el voltaje y establecer ese máximo PWM para que no se deteriore y como mucho proporcione los 6v máximo. Ambas cosas, como ya comentaba anteriormente, en el sketch de Arduino del mando a distancia.

Passaggio 8: montaggio del veicolo:

Montaggio del veicolo
Montaggio del veicolo
Montaggio del veicolo
Montaggio del veicolo
Montaggio del veicolo
Montaggio del veicolo

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 ver mejor el funcionamiento. Existen una serie de motores, con reductora incluida y ruedas para acoplar, a bajo precio. Yo ha usato lo que tengo a mano.

Para el montaje, he impreso en 3D unas piezas, ruedas, soporte de rodamiento/motor y unos casquillos y use tornillería de 3mm de diámetro para unir 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) 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 entre la rueda trasera y la primera plataforma nos debe asegurar 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 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.

Passaggio 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 dati:

.- En Preferencias, Gestor de URLs adicionales:

arduino.esp8266.com/stable/package_esp8266com_index.json

.- En Herramientas (Strumenti), Gestor de tarjetas, come muestra la imagen:

Passaggio 10: ¿Qué MacAddress Tiene Nuestra Placa?

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

Como paso previo e imprescindible antes de trabajar con el protocolo ESP-NOW, debemos cargar este 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 dello sketch y anotar sobre todo the AP de cada placa Wemos.

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

Passaggio 11: ESP-ORA

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

“ESP-NOW permite un control directo y de baja potencia de las luces inteligentes, sin la necesidad de un enrutador. Questo metodo è energeticamente efficiente e conveniente.

ESP-Now è un altro protocollo disattivato per Espressif, che consente a più dispositivi di comunicare tra loro se si utilizza Wi-Fi. Il protocollo è simile alla connettività inalámbrica della bassa potenza di 2.4GHz che un menu se implementa e ratones inalámbricos. Per tanto, l'emparejamiento entre dispositivi è necessario prima della comunicazione. 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 information en el link:

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

ESP-NOW è un protocollo ampio e con molte possibilità, pero' quiero mostra una forma fácil de comunicar dos dispositivi e trasmetti i dati tra ellos, sin utilizar forms complejas.

Fase 12: Librería ESP-NOW

Libreria ESP-NOW
Libreria ESP-NOW

El sketch que he preparado solo un dispositivo trasmettitore (joystick) y otro recibe sus datos (vehículo). Pero ambos deben tener cosas comunes necesariamente, las cuales paso a describir.

.- Inizio della libreria ESP-NOW

Fase 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 sendir/recibir. No podemos definir las variable con longitud variable, sino de longitud fija, debido a cuando se translateen todos los datos a la vez, el que recibe debe saber separar cada byte recibido y saber a que valor de variable assignar dichos bytes recibidos. Es como cuando se prepara un tren, con distintos vagones y la estación que los recibe debe saber cuantos y para que empresa deben ir. Quiero trasmettitore 5 dati a la vez, Si pulso el joystick, y los voltajes (motor Izquierdo y Derecho) e sentido (adelante/atrás) de cada motor del vehículo, que extraigo de la posición del mismo.

Fase 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

.- Definisci il tipo di funzione che realizzerà 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 (Ruolo=3)

Fase 15: Emparejamiento De Los Dispositivos ESP-NOW:

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

.- Emparejamiento de los dispositivi. Importante: En el sketch del joystck debo poner la AP MAC de la Wemos del vehículo. En lo sketch del veicolo, debo poner l'AP MAC del joystick.

.- Como clave (key), he puesto igual en ambos, la unión de ambas AP MAC, por ejemplo.

Fase 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 que preparar 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 vehículo y la longitud total del TREN. Una vez definidos estos datas anteriori, se envía el paquete de datas (cuadro verde).

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

Fase 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 dati en 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 variable (vagones del TREN) con la misma estructura utilizada en ambos:

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

En los siguientes pasos describiré el sketch de Arduino del mando a distancia (joystick).

Passaggio 18: Joystick: Definicion De Pines Y Variables

Joystick: Definicion De Pines Y Variabili
Joystick: Definicion De Pines Y Variabili
Joystick: Definicion De Pines Y Variabili
Joystick: Definicion De Pines Y Variabili

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

.- Definisci le variabili che usiamo posteriormente:

Passaggio 19: configurazione()

Impostare()
Impostare()

.- Ya en setup(), en la primera 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 è inicializado bien. Y tras ello, defino el modo de trabajo y emparejamientos anteriormente comentados:

Passaggio 20: ciclo()

Ciclo continuo()
Ciclo continuo()
Ciclo continuo()
Ciclo continuo()

.- Inicio el loop() con un ritardo que nos marca el número de transmisiones o lecturas del joystick que quiero hacer por segundo (figura siguiente). Egli puesto 60 msg, con lo que realizo unas 15 lecturas por segundo mas o menos. Después leo el stato del pulsador de emergencia del joystick. Si se pulsa, pongo a cero los valores de los motores, transfero 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é.

Passaggio 21: funzione LeePots()

Funzione LeePots()
Funzione LeePots()

.- Leo el estado de los potenciómetros y de la batería. Los retardos (delay) que pongo de 5msg son para que las lecturas en los optoacopladores sean precisas. Hay que tener en cuenta que desde que se activa el led, tarda unos microsegundos (unos 10) en estabilizar la salida, así que le pongo 5 msg para que las lecturas sean mas Correctas. Se podría bajar este ritardato perfectamente.

Passaggio 22: Funzione AjustePots()

Funzione AjustePots()
Funzione AjustePots()

.- Una vez leídos los potenciómetros y el stado de labatería, hay que transformar el movimiento del joystick en sentido y corriente hacia los motores. Si analizamos el potenciómetro vertical, 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.- Convertire los movimientos hacia arriba o hacia abajo en sentido y corriente de los motores.

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

Passaggio 23: Funzione DirMot()

Funzione DirMot()
Funzione DirMot()

.- Partimos del hecho de que un dispositivo de dos motors, sin eje de rección, necesita unos valores de sentido e 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 elsmo giro sobre sí 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 e senza los valores negativos (se descontrola el vehículos 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 de la variabile de giro (VariableGiro). Esta variabile 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 vari casi, dipendendo dalla posizione del 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)

Passaggio 24: controllo De Batería En El Joystick:

Controllo della batteria nel joystick
Controllo della batteria nel joystick

.- Per ultimo, el control del estado de la batería. Cuando el joystick está en reposo, o no ha podido trasmettitore, 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)

Passaggio 25: Arduino (veicolo)

Arduino (Veicolo)
Arduino (Veicolo)
Arduino (Veicolo)
Arduino (Veicolo)

Sobre la parte corrispondente 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. Per 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 y en los tiempos sin movimiento, analizo el estado de la batería.

.- Pines de entrada salida de la placa Wemos y Variables usate:

.- ya en el setup() inicio los pines y su estado inicial. Il resto della configurazione è semplice ESP-NOW:

Passaggio 26: Veicolo, Loop():

Veicolo, Loop()
Veicolo, Loop()
Veicolo, Loop()
Veicolo, Loop()
Veicolo, Loop()
Veicolo, Loop()

.- En loop(), aparte de mirar el stado de la batería, mando ejecutar dos funciones, una comentada ya al hablar del ESP-NOW, recepción() e l'altra realza el manejo del L298N con los datos recibidos. Por supuesto, lo primero es analizar una posible emergencia y parar el vehículo.

Primero establezco un pequeño ritardato en las comunicaciones, para sincronizar el recettore 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. Si no recibo datos o movimiento de ninguno de los motores, los paro también through el envío de datos a la función writeL298N(). Si no hay datos, increment 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.

Passaggio 27: Veicolo: - Funzione WriteL298N()

Veicolo: - Funzione WriteL298N()
Veicolo: - Funzione WriteL298N()
Veicolo: - Funzione WriteL298N()
Veicolo: - Funzione WriteL298N()

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

Passo 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 conformo. 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 dispositivis.

Un saluto:

Miguel A.

Consigliato: