Taula de continguts:

Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 passos
Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 passos

Vídeo: Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 passos

Vídeo: Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 passos
Vídeo: 🚀 Unleashing ESP-NOW Magic! 🕹️ Joystick-Controlled Car for YouTube Shorts #esp32 2024, Juliol
Anonim
Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos
Comunicació ESP-NOW. Control Remoto De Vehicle, Joystick, Arduino Wemos

Tot part de la idea de poder moure una silla de rodes per a personal discapacitat per remota i poder acompanyar-los sense necessitat d’empujar la mateixa. Com a exemple de funcionament, va crear aquest projecte. Posteriorment es poden canviar els circuits de sortida i els motors, per altres de major potencia i acoplar a les ruedes de la silla un sistema mecànic que la mueva.

Si la persona que va en silla de ruedes està capacitada per manejar-la personalment, es poden fusionar tots dos sketchs d’Arduino en un sol i evitar les comunicacions remotes. Simplement una única placa per controlar els moviments del joystick i controlar els motors.

Aunque no gane ningún concurso, si a alguien le gusta (o una parte del mismo) o pot realitzar el projecte i aliviar l'estat d'ànim d'una persona millorant la seva mobilitat, em sento content.

Al final del document, adjunto un PDF en anglès d’aquest treball (traductor web).

Al final del document, adjunt un PDF amb el treball complet en espanyol.

Pas 1: Introducció:

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

.- Wemos, especificacions elèctriques.

.- Protocolo de comunicacions ESP-NOW.

.- Circuit L298N. Especificacions i pinout del mateix.

.- Muntatge de vehicle amb dos motors DC

En aquest treball explico com prendre diversos valors analògics i introduir-los en un únic port A0 d’una placa Wemos. Els valors provinents d’un joystick, es transmeten de forma ràpida, segura i fàcil per mitjà de Wifi utilitzant el protocol ESP-NOW. En el vehicle, altra Wemos rep els dades i acciona dos motors DC per controlar la direcció del vehicle.

Quizás alguien se pueda plantar 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 funcionar. Aparte de eso, me conformo con que a una persona le guste o le aclare algún concepto o duda.

Intentaré explicar els conceptes usats per a una millor comprensió del treball. Quizás a alguns le parezca interessante alguna part del mateix.

Pas 2: Placa de Desenvolupament Arduino Wemos:

Placa De Desenvolupament Arduino Wemos
Placa De Desenvolupament Arduino Wemos
Placa De Desenvolupament Arduino Wemos
Placa De Desenvolupament Arduino Wemos
Placa De Desenvolupament Arduino Wemos
Placa De Desenvolupament Arduino Wemos

Estem parlant d’una petita placa de desenvolupament amb amplies possibilitats:

Amb ella podem realitzar projector IoT, anàlisi de dades i enviament a través de les redissenyes i altres moltes coses, aprofitant la capacitat Wifi dels mismes. En un altre projecte que ell va realitzar, creo una red wifi propia y puedo obrir una cerradura remota, mitjançant una clau tecleada des del nostre smartphone, que també va publicar. La diferència respecte a l’anterior és que en ocasions d’utilitzar protocol HTLM per a la comunicació, l’ús de la característica molt poc publicada de la comunicació WiFi del tipus ESP-NOW entre dos dispositius, per ser fàcil, ràpida, segura (encriptada) i sense necessitat de emparejaments a l’hora d’actuar (solo al configurar el sketch de Arduino). Mas adelante, a la hora de explicar el sketch, comentaré els detalls a tenir en compte.

La placa disposa d’una entrada d’alimentació de 5v en el pin corresponent (o per USB) i d’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 és realment el voltatge de treball. En la fitxa tècnica de la Wemos podem veure-ho i adjuntar també una imatge de la fitxa tècnica del regulador.

Segon l’enllaç de les especificacions de l’ESP8266, podria treballar fins i tot a 3v, però convé alimentar-se amb un voltatge superior a 3.5v, per a la sortida del regulador intern tengem un mínim de 3v. En aquest enllaç es poden veure altres detalls tècnics que amplien aquesta informació.

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

La Placa també disposa de 9 entrades / salides digitals (D0-D8). Totes tenen la capacitat de poder treballar amb salides del tipus PWM, bus I2C, etc.

Detalle a tener muy en cuenta a la hora de conectar algo a la salida de los pinos digitales, para iluminar leds, activar relés, etc. La corriente màxima que pot entregar un pin Digital és de 12mA. Si es necessita entregar més corrent, hem de intercalar entre el pin i el dispositiu un transistor o un optoacoplador de major potencia. Ver figura de salidas.

Amb una resistència en sèrie amb la sortida de 330 ohms, es lliurarà un corrent de 10mA, per lo que si és possible, augmentar el valor de les resistències. Hi ha moltes webs la recomanació d’una resistència de 330 ohm en sèrie amb els leds Yo recomiendo usar resistencias mas altas. Si ilumina el led a nuestro gusto, no necessitamos sumar mAs al trabajo Cualquier ahoro de energía siempre es bueno.

NOTA: en els pins digitals, podem donar valors PWM entre 0 i 1023. En Arduino Uno, entre 0 i 254.

La placa Wemos també disposa d’una entrada digital A0, per a anàlisi de dades analògiques. Hay que tener en cuenta dos cosas. La primera és que NO es pot aplicar un voltatge superior a 3.3v directament, ja que es deterioraria. Si es vol medir un voltatge superior, hi ha que intercalar un divisor de voltatge extern. Los valores de dicha entrada son de 0 a 1024.

Característiques addicionals:

-Salida de 3.3v per alimentar circuits externs. Màxima corrent 12mA per pin.

-Conector micro USB per a la càrrega del firmware i alimentació de 5v

-Pulsador de Reset.

Hi ha molts tutorials de com configurar l’IDE d’Arduino per treballar amb aquest tipus de placa, així com les biblioteques necessàries. No voy a entrar en ello para no alargar demasiado este trabajo.

Pas 3: Circuit Del Joystick (comandament a Distància):

Circuit Del Joystick (comandament a Distància)
Circuit Del Joystick (comandament a Distància)
Circuit Del Joystick (mana a Distància)
Circuit Del Joystick (mana a Distància)

M’agrada la placa de desenvolupament Wemos, ja que té poca mida, és barata i té moltes possibilitats. Com només disposa d’una entrada analògica A0, surt el problema de voler captar diversos valors analògics al mateix temps. Per al meu cas en concret, un joysick està format per dos potenciómetres amb salides individuals analògiques i un polsador. A més, vol analitzar el valor actual de la bateria que utilitza en el manament a distància, per lo que ja necessitem prendre 3 valors analògics diferents.

En el següent esquema, creat amb Fritzing, tenim a l'esquerra un divisor de voltatge. Si la bateria és de mas de 3.3v, l’entrada analògica corre risc d’aviar-se, per ell convé reduir el voltatge per al seu anàlisi. Voy a usar una bateria de 3.7v, per lo que quan està cargada completament és d’aproximadament 4v i degut al divisor de voltatge, en el pin 4 de H1 tenim 2v (variable depenent de l’estat de la bateria). A la dreta tenim un joystick bàsic, format per dos potenciómetres i un polsador (R3 és extern al joystick). Se alimentan con los 3.3v que proporcionan la Wemos. En aquest esquema general primer, tenim 3 valors analògics (pins 2, 3 i 4 de H1) i un valor digital (pin 1 de H1).

Per poder analitzar en la placa Wemoslos 3 valores analógicos, recurrimos a unos pequeños opto-acopladores, el chip SFH615A o TLP621. És molt bàsic el seu funcionament per a aquest treball. En el pin 4 del chip pongo un dels valors analògics a analitzar. Tots els pins 2 a GND. Tots els pin 3 unidos ja A0 i cada un dels pin 1 a una sortida digital a través d'un resistor, els quals volen activar sucesivament i depenent de qualsevol actiu i llegint el valor en A0, assignant-los a cada valor una variable (pot 1y pot 2 del joystick i bateria).

Hi ha que tinguis en compte que no podem connectar la sortida digital de la Wemos directament al pin 1 del TLP621, ja que es deterioraria dicha sortida digital. Cada pin digital en Wemos pot suministrar uns 12mA. Per ell, intercalem una resistència suficient per activar el led intern. Amb 470 Ω, és suficient per activar-lo i sol suponer-lo a 7 mA.

Al querer introduir 3 valors analògics mitjançant aquest sistema, us farem servir 3 salades digitals per poder activar-les. Si volem introduir més valors analògics per A0, podem utilitzar altres salades digitals més o podem seguir utilitzant només 3 salades digitals, afegint al circuit un demultiplexor i donant valors binaris a les entrades, aconseguint fins a 8 valors possibles digitals.

Afegeix a la distància 2 leds, un per reflectir “Power ON” i l’altre per a l’estat de la bateria i “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). Amb tot el anteriorment explicat, el circuit complet del manament a distància amb joystick és la següent figura.

Pas 4: Joystick 2:

Joystick 2
Joystick 2

Explicació per al desenvolupament posterior a l'IDE d'Arduino:

En A0 recull els valors dels potenciómetres i del nivell de la bateria.

En D0 passa a HIGH quan es prem el botó del joystick ("parada d'emergència")

Si activo D1, leo el estado del potenciómetro vertical del joystick en A0.

Si activo D2, leo el estado del potenciómetro horizontal del joystick en A0.

Si activo D5, leo el estado de la batería en A0. NOTA: en un principi el que em poso en D4, però em vaig tenir problemes al flashear el programa des de l’IDE d’Arduino, per lo que la vaig passar a D5

La sortida D3 usarà per al led d’Activitat (blau). Dicho led se enciende cuando hay movimiento de joystick y la transmisión ha sido correcta. Quan està en repòs ens indica l’estat de la bateria (1 parpadeo entre 3.6 y 3.5v, 2 parpadeos entre 3.5 y 3.4v y 3 parpadeos por debajo de 3.4v).

El led rojo indica Encendido / Power ON.

S1 es el interruptor de encendido. Convé tenir-ho apagat quan es realitza la càrrega de la bateria o si ha tingut modificacions en el programari (5v a través del USB).

El esquema del circuit muntat en un protoboard és la figura següent:

La línia inferior positiva és el voltatge de la bateria. La línia superior positiva és la sortida de 3.3v de la Wemos

Pas 5: Joystick Plaça de circuits:

Joystick Placa de Circuits
Joystick Placa de Circuits
Joystick Placa de Circuits
Joystick Placa de Circuits
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos
Joystick Placa De Circuitos

Va dissenyar la següent placa de circuits amb Sprint-Layout 6.0 per a la connexió del joystick, optoacopladors, Wemos i altres. Indico les mesures per si algú la realitza (40x95mm). Hay que tener cuidado con el pin 1 de los TLP621. Van soldats al terminal quadrat i en la posició indicada vist des de la cara dels components. La part de la placa pròxima als connectors i Wemos, la recort posterior, així queda de forma còmoda l’agar del manament, l’encendit i les connexions externes.

Les fotos del manament a distància. Als límits, les connexions USB, el connector de càrrega de la bateria i l’interruptor d’ON / DESACTIVAT.

Fàcil de subjectar, encara que sea un poc gran. Em falta realitzar una caixa a mida per al mateix amb la impressora 3D:

Pas 6: Circuit del receptor (motors):

Circuit del receptor (motors)
Circuit del receptor (motors)

Està compost per una altra placa Wemos, on rebem les dades del joystick o control remot i actiu les senyals necessàries cap a un L298N (doble pont en H) i controlar dos motors, cap a adelant i cap enrere, amb control de direcció. Com a complement del circuit, 3 leds, un per a poder ON, un altre per a la transmissió de dades i un tercer com a indicatiu de “parada d’emergència”. Aprovecho estos dos últimos (parpadeando) per a la indicació de l’estat de la bateria del vehicle.

Control d’estat de la bateria: El primer a tenir en compte és que la bateria que s’utilitza és de 9v. Intentar medir la mateixa en A0 directament, suposar deteriorar el port, ja que el màxim valor que es pot aplicar és de 3.3v. Per evitar-ho, posem també un altre divisor de voltatge, aquesta vegada més descompensat que en el manament a distància i reduir el valor en A0. Per a aquest cas, s'utilitza una resistència de 47k en sèrie amb un altre de 4k7. En el punt central és on tomo la referència a medir. "Bateria baixa", entre 7v i 5.5v, 1 parpadeo del led de “Emergencia”. "Bateria MUY baja" (per debajo de 5, 5v, 3 parpadeos del led “Recepción ok”)

El circuit complet del vehicle és el següent:

Debido a que este circuito está montado sobre un vehículo, no he querido complicar mucho el sketch de Arduino. Simplemente rep les dades del joystick via wifi ESP-NOW i convierte en senyals de control per als motors. Eso facilita a que en futuros cambios de software o modificaciones de trayectoria, se realicen solo en el mandato a distancia (joystick) en vez de ambdós.

No he realitzat cap placa de circuits especials. Tan solo una provisional para los leds y sus resistencias.

Pas 7: L298N (doble pont en H)

L298N (doble pont en H)
L298N (doble pont en H)
L298N (doble pont en H)
L298N (doble pont en H)

Aquesta és una petita descripció del circuit que controla els motors DC que mueven el vehicle.

- Conectores A i B (azules de 2 pins). Son las salidas de corriente hacia los motores. Si es traslladen les proves, el motor gira al costat contrari del que desitgem, simplement inverteix els pins del mateix

Conector de Power (blau de 3 pins). Es la entrada de corriente al circuito. Com el mateix pot ser alimentat entre 6 i 36 volts, hi ha que tingui molt en compte el saltador o pont que hi hagi junt al conector. Si els aliments amb un voltatge entre 6 i 12v, el pont es deixa PUEST i en Vlogico tenim una sortida de 5v cap a la Wemos (com en aquest treball). Si el circuit es alimenta amb un voltatge superior a 12v, hi ha que quitar el pont per a que no es converteixi en el convertidor DC-DC que porti i si vulgui que funcioni la seva circuit lògica, haurem de dur a terme un cable de 5v extern cap al circuit (5v) d’entrada). En el meu cas, com utilitzar una bateria de 9v, el meu lloc i em sirve per alimentar la placa Wemos a través del pin 5v. GND viene del negatiu de la bateria i va també a G de la Wemos i als leds.

Conector de Control (6 pins). Tien dos parts. ENA, IN1, IN2 controlen el motor connectat en A i ENB, IN3, IN4 que controlen el motor connectat en B. En la taula de la figura anterior es indica els nivells de les senyals que ha de tenir per posar en moviment els motors, adelant, atrás o frenado. En ENA y en ENB hay unos puentes. Si els deixem puestos, el L298N pondrà els motors al voltatge d’entrada Vm en el sentit indicat, sense cap control de velocitat ni de regulació de voltatge. Si els volem, utilitzarem aquests pins per rebre una senyal PWM des de la placa Wemos i així controlar la velocitat de cada motor. En Arduino es continua mitjançant un comandament analogWrite (). En la placa Wemos, tots els port D tenen aquesta capacitat.

En la figura del L298N hi ha un recuadro amb un petit sketch per Arduino UNO, que harà girar el motor A cap a un voltatge cercano al 75% de Vm.

La gràfica anterior a aquest text, explica la relació de analogWrite () amb la forma de sortida en els pins per a Arduino UNO. A la memòria, el 100% es prendrà amb analogWrite (1023) i el 50% seria analogWrite (512).

A l’hora de realitzar aquest projecte, hi ha que tingui molt en compte els possibles valors PWM de ENA i ENB que es suministren mitjançant l’ordre analogWrite, ja que depèn del valor del voltatge de la bateria i del voltatge dels motors. En aquest cas s’utilitza una bateria de 9v (Vm) i motors de 6v. Al ir aumentando la señal PWM en ellos, el voltaje del motor asciende, pero no comienza a moure's fins que arribi a un valor determinat, per lo que en les proves, s'ha d'establir aquest mínim PWM que ho faci mover a baixa velocitat. Per una altra part, si posem la senyal PWM al màxim, li donem al motor el voltatge Vm de la bateria (9v) i es pot donar el mateix, per lo que en les proves, haurem de medir el voltatge i establir aquest màxim PWM per a què no es deteriore i com molta proporció als 6v màxim. Ambas cosas, como ya comentaba anteriormente, en el sketch de Arduino del manando a distancia.

Pas 8: Muntatge del vehicle:

Muntatge del Vehicle
Muntatge del Vehicle
Muntatge del Vehicle
Muntatge del Vehicle
Muntatge del Vehicle
Muntatge del Vehicle

Tinc que reconèixer que el muntatge és un poc casero, però efectiu. Quizás diseñe e imprima en 3D un model més bonic, però aquest model “casero” té la ventaja de ver millor el funcionament. Existeix una sèrie de motors, amb reductors inclosos i rodes per acoplar, a baix preu. Yo he usado lo que tengo a mano.

Per al muntatge, he impreso en 3D unas piezas, ruedas, soporte de rodamiento / motor y unos casquillos y uso tornillería de 3mm de diámetro para unir las piezas. Per a la unió del motor al tornillo eje, ha usat els contactes d’una regleta de connexió elèctrica cortant el plàstic extern. Al montar las ruedas, conviene pegar el tornillo a la rueda, para evitar que patine al girar.

La següent mostra el suport del rodament / motor i la peça 3D que la seva sujeta.

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

Una vegada realitzat el muntatge dels dos conjunts motriz, el sujeto a una plataforma de 10x13 cms (blanc). Les una altra plataforma (8x12cms) per a suport dels circuits i la roda trasera. La diferència d’alçada la marca el tipus de roda que pongem, per mantenir el vehicle horitzontal. La distància entre la roda trasera i la primera plataforma que hem d’assegurar el gir de la mateixa, per això tuveu que corregir el primer agujer, com veurem a les fotos.

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

Como veis, no és un gran disseny. La meva intenció és aplicar aquest sistema a una silla de rodes com es comentava al principi d’aquest treball. Pero ya que lo tengo desarrollado, posiblemente diseñe un tipo de vehículo mas elegante.

I ara passem a l’explicació del sketch d’Arduino que he realitzat.

Pas 9: Arduino:

Arduino
Arduino

Com va escriure al principi, no es pot estendre molt i prescriure de com configurar l’IDE d’Arduino, biblioteques i com s’ha de reconèixer la placa Wemos per poder treballar amb les. Solo unos datos:

.- En Preferències, Gestor d’URLs addicionals:

arduino.esp8266.com/stable/package_esp8266com_index.json

.- En Herramientas (Tools), Gestor de tarjetas, com a mostra de la imatge:

Pas 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 saber la AP MAC de las ESP8266 que llevaban integradas. En Herramientas, Monitor Serie podem veure el resultat del sketch i anotar sobre tot l’AP de cada placa Wemos.

Tinc el costum de rebre les que comprengui, marc les bosses i la placa amb aquestes dates:

Pas 11: ESP-ARA

Una vegada amb l'AP MAC de les plaques, comença a parlar del protocol ESP-NOW desenvolupat per Espressif:

“ESP-NOW permet un control directe i de baixa potencia de les luces intel·ligents, sense la necessitat d’un enrutador. Aquest mètode és energèticament eficaç i convenient.

ESP-Now és un altre protocol desenvolupat per Espressif, que permet que diversos dispositius es comuniquin entre sí sense utilitzar Wi-Fi. El protocol és similar a la connectivitat inalàmbrica de baixa potencia de 2.4GHz que a menudo es implementa en ratones inalámbricos. Per tant, l’emparament entre dispositius és necessari abans de la seva comunicació. Una vegada que es realitza l’emparament, la connexió és segura i d’igual a igual, sense que sigui necessari un apretó de mans."

Mas informació en l'enllaç:

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

ESP-NOW és un protocol ampli i amb moltes possibilitats, però voleu mostrar una forma fàcil de comunicar dos dispositius i transmetre dades entre ells, sense utilitzar formes complexes.

Pas 12: Llibreria ESP-NOW

Llibreria ESP-NOW
Llibreria ESP-NOW

El sketch que he preparat solo un dispositivo transmite (joystick) y otro recibe sus datos (vehículo). Però tots dos han de tenir coses comunament necessàries, les quals passen a descriure.

.- Inicio de la librería ESP-NOW

Pas 13: L'estructura de dades a transmetre / rebre:

La Estructura de Dades a Transmetre / rebre
La Estructura de Dades a Transmetre / rebre

.- L’estructura de dades a transmetre / rebre. No podem definir les variables amb longitud variable, sinó de longitud fija, degut a quan es transmeten tots els dades a la vegada, el que rep deu saber separar cada byte rebut i saber al valor de variable assignar aquests bytes rebuts. Es com quan es prepara un tren, amb diferents vagons i l'estació que els reps deu saber quants i per a la seva empresa han de ser. Vol transmetre 5 dades a la vegada, Si pols el joystick, i els voltatges (motor Esquerra i Dret) i sentit (adelant / enrere) de cada motor del vehicle, que extraig de la posició del mateix.

Pas 14: Definiu el tipus de funció ESP-NOW

Defineix El Tipus de Funció ESP-NOW
Defineix El Tipus de Funció ESP-NOW

.- Definir el tipus de funció que realitzarà cada Wemos. Quizás causa de la falta de experiencia en el protocolo ESP-NOW, he tenido ciertos problemas cuando a uno lo defino como mestre y a otro como esclavo. Siempre me ha funcionado bien poniendo los dos como bidireccionales (Role = 3)

Pas 15: Emparament dels Dispositius ESP-NOW:

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

.- Emparejamiento de los dispositivos. Important: En el sketch del joystck debo poner l'AP MAC de la Wemos del vehicle. En el sketch del vehicle, debo poner l'AP MAC del joystick.

.- Com a clau (clau), va posar igual en ambdós, la unió d’ambdues AP MAC, per exemple.

Pas 16: Enviament de dades al vehicle:

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 es vagones del tren que hay que enviar (data), con recuadro rojo. Després, hi ha que definir a qui ho envia (da), que és l'AP MAC de la Wemos del vehicle i la longitud total del TREN. Una vegada definits estos dades anteriors, s’enviaran el paquet de dades (quadre verd).

Recuerda: Quiero transmisir 5 datos a la vez, Si pulso el joystick, y los voltajes (motor Esquerrado y Derecho) y sentido (adelante / atrás) de cada motor del vehicle.

Trasllat l’enviament, verificat que el vehicle ha rebut les dades correctament (quadre blau).

Pas 17: Recepció de dades al vehicle:

Recepció de dades en el vehicle
Recepció de dades en el vehicle

.- Recepció de dades en el vehicle. Aquesta és la funció que ha utilitzat en els Wemos del vehicle. Com es pot veure el pongo en mode de recepció (amb resposta, call back) i les dades reben l'assignació a les variables (vagons del TREN) amb la mateixa estructura utilitzada en ambdós:

Simplement amb l’anterior, es pot transmetre / rebre dades per Wifi ESP-NOW de forma sencilla.

En els següents passos descriu el sketch de Arduino del manando a distancia (joystick).

Pas 18: Joystick: Definició de pins i variables

Joystick: Definició de pins i variables
Joystick: Definició de pins i variables
Joystick: Definició de pins i variables
Joystick: Definició de pins i variables

.-Tras definir la librería de ESP-NOW, defineix els pins que voy a utilitzar de la Wemos

.- Definiu les variables que utilitzaré posteriorment:

Pas 19: Configuració ()

Configuració ()
Configuració ()

.- Ya en setup (), en la primera part, defineix com van a treballar els pins de la Wemos i un valor inicial dels mètodes. També es pot verificar que el protocol ESP-NOW estigui inicialitzat bé. Y tras ello, defineix el mode de treball i emparaments anteriors comentats:

Pas 20: bucle ()

Bucle ()
Bucle ()
Bucle ()
Bucle ()

.- Inici el loop () amb un retard que ens marca el nombre de transmissions o lectures del joystick que es vol fer per segon (figura següent). He puesto 60 msg, amb lo que realitzo unes 15 lectures per segon mes o menys. Després de llegir l’estat del polsador d’emergència del joystick. Si es pulsa, pongo a zero els valors dels motors, transmet i estableix un retard on no respon a res fins que passi aquest temps (en el meu cas de 5 segons, delay (5000);).

.- El resto del loop (), son las llamadas a las funciones que utilizan, que posteriormente explican.

Pas 21: Funcion LeePots ()

Funcion LeePots ()
Funcion 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 precisos. 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. Es podria baixar aquest retard perfectament.

Pas 22: Funcion AjustePots ()

Funcion AjustePots ()
Funcion AjustePots ()

.- Una vegada llegits els potenciómetres i l’estat de laboratori, hi ha que transformi el moviment del joystick en sentit i corrent cap als motors. Si analitzem el potenciómetre vertical, per exemple, els passos estan mostrats en la figura següent.

1.- El valor total en el moviment (mínim, repòs, màxim) està entre 0 i 1024.

2.- Averiguar com és el punt mig del mateix (repòs de la palanca). Veure leePot ();

3.- Establir un marge per a que no es mogui el vehicle amb lligams moviments o que no afectin les fluctuacions elèctriques.

4.- Convertir els moviments cap a dalt o cap a baix en sentit i corrent dels motors.

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

Pas 23: Funció DirMot ()

Funció DirMot ()
Funció 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ó cap a l’adelant / enrere i cap a l’esquerra / dreta en sentit / voltatge el realitzo en dirMot (), tenint en compte les 3 direccions cap a l’adelant esquerre / frontal / dreta, el mateix cap enrere i incorpora el gir sobre sí mateix. Cuando va hacia adelante y giro, el que haig de reduir el voltatge de la rueda al que gira, proporcionalment al moviment del joystick i evitant els valors negatius (es descontrola el vehicle), per tant, el valor de reducció mai pot ser menor que el valor d'avanç (com molt, per al motor). De ahí l’ús de la variable de gir (VariableGiro). Esta variable convierte el giro en mas suave y el vehículo se controla mejor.

Com la funció és gran, es pot sacar del fitxer INO adjunt.

Té diversos casos, depenent de la posició del joystick:

.- Centrado y en reposo (vehicle parat).

.- Gir sobre si mateix (izquierda o derecha).

.- Avance (amb o sense gir)

.- Retrocés (amb o sense gir)

Pas 24: Control de la bateria al joystick:

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

.- Per últim, el control de l’estat de la bateria. Quan el joystick està en repòs, o no ha pogut transmetre, augmentant un contador. Si alcança un valor desitjat (50 vegades), s’analitza l’estat de la bateria i tinc parpadear el led (1 parpadeo = baixa, 2 parpadeos = molt baixa)

Pas 25: Arduino (Vehicle)

Arduino (Vehicle)
Arduino (Vehicle)
Arduino (Vehicle)
Arduino (Vehicle)

Sobre la part corresponent a les comunicacions (ESP-NOW) amb el joystick, ja es va comentar anteriorment, per lo que analitza 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. Prioritza la recepció del polsador d’emergència i en els temps sense moviment, analitzant l’estat de la bateria.

.- Pines d’entrada sortida de la placa Wemos y Variables usadas:

.- ya en el setup () inici els pins i el seu estat inicial. El resto de setup és sobre ESP-NOW:

Pas 26: Vehicle, Loop ():

Vehicle, Loop ()
Vehicle, Loop ()
Vehicle, Loop ()
Vehicle, Loop ()
Vehicle, Loop ()
Vehicle, Loop ()

.- En loop (), a part de mirar l’estat de la bateria, manant executar dues funcions, una comentada ja al parlar de l’ESP-NOW, recepció () i l’altra realitza el manejo del L298N amb els dades rebuts. Per suposat, el primer és analitzar una possible emergència i parar el vehicle.

Primer establezco un petit retard en les comunicacions, per sincronitzar el receptor més o menys amb el transmissor. Ejecuto la función de recepción () y analizo si ha pulsado “Emergencia” per procedir a la immobilització. Si no rebem dades o moviment de ningú dels motors, els altres també mitjançant l'enviament de dades a la funció writeL298N (). Si no hi ha dades, increment d’un contador per a la revisió de la bateria. Si hi ha dades rebuts, entenent el led de comunicacions i per suposat, manant a la funció writeL298N () per a que es mogui el motor segons aquests dades.

Pas 27: Vehicle: - Funció WriteL298N ()

Vehicle: - Funció WriteL298N ()
Vehicle: - Funció WriteL298N ()
Vehicle: - Funció WriteL298N ()
Vehicle: - Funció WriteL298N ()

.- Funció writeL298N () Si registra la taula del L298N, simplement s’escriu aquests valors amb els dades rebuts

Pas 28: final:

És tot. No es mi intención ganar concursos, sino aclarar conceptos. Si UNA persona agraeix aquest treball, el sirve per adquirir un coneixement i després desenvolupar alguna idea pròpia, em conformo. Si un s’implementa en una silla de rodes i fa més confortable la vida a una persona, em faré molta il·lusió.

Adjunto PDF en espanyol i PDF en anglès

Adjunto los ficheros de arduino de ambos dispositivos.

Un saludo:

Miguel A.

Recomanat: