Cuprins:

Comunicare ESP-ACUM. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 de pași
Comunicare ESP-ACUM. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 de pași

Video: Comunicare ESP-ACUM. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 de pași

Video: Comunicare ESP-ACUM. Control Remoto De Vehicle, Joystick, Arduino Wemos .: 28 de pași
Video: Full Control of DC Motor with ESP8266 NodeMCU D1 Mini over WiFi 2024, Iulie
Anonim
Comunicare ESP-ACUM. Control Remoto De Vehicle, Joystick, Arduino Wemos
Comunicare ESP-ACUM. Control Remoto De Vehicle, 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 need de empujar la misma. Ca exemplu de funcționare, a creat acest proiect. 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.

Dacă persoana care va în silla de ruede este capacitată pentru manevrarea personală, se pot fuziona ambele schițe de Arduino într-un singur și evita comunicările remote. Simplemente o singură placă pentru a controla mișcările joystick-ului și a controla motoarele.

Aunque no gane ningún concurso, si a alguien le gusta (o una parte del mismo) o poate realiza proiectul și aliviar statul de animo de o persoană îmbunătățind su movilitatea, mă simt contento.

La sfârșitul documentului, atașez un PDF în limba engleză a acestei lucrări (traducător web).

La finalul documentului, adjunt un PDF cu lucrarea completă în limba spaniolă.

Pasul 1: Introducere:

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

.- Wemos, specificații electrice.

.- Protocolo de comunicări ESP-ACUM.

.- Circuit L298N. Specificații și pinout del mismo.

.- Montaj vehicul cu două motoare DC

În acest lucru se explică ca să ia mai multe valori analoage și introducere într-un singur port A0 de o placă Wemos. Los valores provenientes de un joystick, se transmit de forma rapidă, sigură și ușoară prin mediu de Wifi folosind protocolul ESP-NOW. În vehiculul, alta Wemos primește datele și acționează două motoare DC pentru controlul direcției vehiculului.

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 concept o duda.

Intentaré explica conceptele utilizate pentru o mai bună înțelegere a muncii. Quizás a algunos le parezca interesante alguna parte del mismo.

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

Cu ea putem realiza proiector IoT, analiză de date și trimitere prin intermediul redesignului și alte multe lucruri, folosind capacitatea Wifi a mismelor. Într-un alt proiect pe care l-a realizat, creo o red wifi propriu și puedo deschide o închidere remota, printr-o tastă tastată de la smartphone-ul nostru, care și el a publicat. La diferență în ceea ce privește anterior este că în vreme de utilizare a protocolului HTLM pentru comunicare, utilizare caracteristică foarte puțin publicată a comunicării WiFi a tipului ESP-NOW între două dispozitive, pentru a fi ușor, rapid, sigur (encriptat) și fără necesitate de emparejamientos a la hora de actuar (solo al configurar el sketch de Arduino). Mas adelante, a ora de explicare a schiței, a comentat detaliile a avea în cont.

La placa dispune de o intrare de alimentare de 5v în pinul corespunzător (o por USB) și de o intrare de GND. Dicha alimentación no tiene porque ser 5v, ya que lleva un regulador de voltaje que lo convierte en 3.3v, care este cu adevărat el voltaj de muncă. În 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, ar putea lucra chiar și la 3v, dar se convine alimentar cu un voltaj superior la 3.5v, pentru că la ieșirea regulatorului intern să avem un minim de 3v. În acest link se pot vedea alte detalii tehnice care amplifică această informație.

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

La Placa de asemenea dispune de 9 intrări / salide digitale (D0-D8). Toate au capacitatea de putere de lucru cu salide de tip PWM, bus I2C, etc.

Detalii a avea foarte mult în cont la ora de conectare a ceva la ieșirea pinilor digitali, pentru iluminarea led-urilor, activarea relelor, etc. Dacă se necesită a mări curent, dezbateri intercalare între pin și dispozitivul un tranzistor sau un optoacoplator de major potențial. Ver figura de salidas.

Cu o rezistență în serie cu ieșirea de 330 ohmi, se dă o curent de 10mA, pentru ceea ce se poate, crește valoarea valorilor. Hay en muchas webs la recomendación de una resistencia de 330 ohm în serie cu 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: în los pines digitales, putem dar valori PWM între 0 și 1023. În Arduino Uno, între 0 și 254.

La placa Wemos also dispone de una entrada digital A0, pentru analiză de date analoagice. Hay que tener en cuenta dos cosas. La prima este că NO se poate aplica un voltaj superior la 3.3v direct, deja că se deteriorează. Dacă se vrea medir un voltaj superior, hay care intercalează un divizor de tensiune extern. Los valores de dicha entrada son de 0 a 1024.

Caracteristici suplimentare:

-Salida de 3.3v pentru alimentarea circuitelor exterioare. Máxima corriente 12mA por pin.

-Conector micro USB pentru încărcarea firmware-ului și alimentarea de 5v

-Pulsador de Resetare.

Hay many tutoriales de como configurar el IDE de Arduino para trabajar con este tipo de placa, así como las biblierías necesarias. No voy a entrar en ello para no alargar too this work.

Pasul 3: Circuito Del Joystick (comandând Distanță):

Circuitul Del Joystick (comandă la distanță)
Circuitul Del Joystick (comandă la distanță)
Circuitul Del Joystick (comandă la distanță)
Circuitul Del Joystick (comandă la distanță)

Îmi place placa de dezvoltare Wemos, tu care are puțin dimensiune, este barată și are multe posibilități. Como solo dispone de una entrada analógica A0, surge el problema de querer captar varios valores analógicos al mismo tiempo. Pentru cazul meu în concret, un joysick este format pentru doi potențiatori cu salide individuale analoagice și un pulsator. Además, quiero analizar el valor actual de la batería que uso en el mando a distancia, por lo que ya necesitamos tomar 3 valores analógicos distinct.

În următoarea schemă, creată cu Fritzing, avem la stânga un divizor de tensiune. Dacă bateria este de masă de 3.3v, la intrarea analogică a riscului mediu, prin ello se reduce volumul pentru analiza sa. Voy a use una batería de 3.7v, pentru ceea ce când este încărcat complet este de aproximativ 4v și datorită divizorului de tensiune, în pinul 4 de H1 tenemos 2v (variable dependiendo del estado de la batería). A derecha tenemos un joystick basic, format by dos potenciómetros and un pulsador (R3 es externa al joystick). Se alimentează cu 3.3v care oferă Wemos. În această schemă generală întâi, avem 3 valori analogice (pinii 2, 3 și 4 de H1) și un valor digital (pin 1 de H1).

Pentru a putea analiza pe placa Wemoslos 3 valori analogice, recurge la unii mici opto-acoplatori, chip SFH615A sau TLP621. Este foarte simplu pentru funcționarea acestui lucru. En el pin 4 del chip pongo uno de los valores analógicos a analizar. Todos los pin 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 un resistor, las cu care vrei activând sucesiv și depinzând de ce activ și citind valoarea în A0, atribuind o valoare una variabilă (pot 1y pot 2 del joystick y batería).

Hay que tener en cuenta que no podemos conectar la salida digital de la Wemos direct la pin 1 din TLP621, ya que se deterioraría dicha salida digital. Fiecare pin digital în Wemos poate furniza aproximativ 12mA. Pentru ello, intercalamos o rezistență suficientă pentru activarea ledului intern. Con 470 Ω, es suficiente para activarlo y solo supone 7 mA.

În ceea ce privește introducerea a 3 valori analogice prin acest sistem, utilizăm 3 soluții digitale pentru puterea activă. Dacă dorim să introducem valori analogice pentru A0, putem folosi alte salide digitale mai multe sau putem să folosim doar 3 salide digitale, adăugând în circuit un demultiplexor și dând valori binare la intrări, obținându-se până la 8 posibile valori digitale.

Se adaugă la distanță 2 leduri, unul pentru a reflecta „Power ON” și altul pentru starea bateriei ș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). Cu tot lo anterior explicat, circuitul complet al mando-ului la distanță cu joystick-ul este următoarea figură.

Pasul 4: Joystick 2:

Joystick 2
Joystick 2

Explicație pentru dezvoltarea posterioară în IDE de Arduino:

En A0 recuperează valorile potențioarelor și nivelului bateriei.

En D0 pasa a HIGH când se apasă butonul joystick-ului („parada de emergencia”)

Dacă activ D1, leo el estado del potenciómetro vertical del joystick en A0.

Dacă activ D2, leo el estado del potenciómetro horizontal del joystick en A0.

Dacă activ D5, leo el estado de la batería en A0. NOTA: într-un principiu lo puse en D4, dar me daba probleme la flashear el program de la IDE de Arduino, por lo que la pasé a D5

La ieșirea D3 se va folosi pentru ledul de Activitate (azul). Dicho led se enciende cuando hay movimiento de joystick y la transmisión ha sido correcta. Cuando está en reposo nos indica el estado de la batería (1 parpadeo între 3.6 y 3.5v, 2 parpadeos între 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. Convine tenerlo apagado când se realizează încărcătura bateriei sau dacă au modificări în software (5v a través del USB).

El esquema del circuito montado într-un protoboard este figura următoare:

Linia inferioară pozitivă este voltajul bateriei. Linia superioară pozitivă este ieșirea de 3.3v de la Wemos

Pasul 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

El a proiectat următoarea placă de circuite cu Sprint-Layout 6.0 pentru conexiunea joystick-ului, optoacoplatoare, Wemos și alții. Indică măsurile pentru cineva care vrea să realizeze (40x95mm). Hay que tener cuidado cu el pin 1 de los TLP621. Van soldados al terminal cuadrado și în poziția indicată văzut de la cara de la componentele. La parte a plăcii următoare la conectorii și Wemos, la recortul posterior, așa rămâne de forma comodă el agărea de la comandă, el încendiu și conexiunile externe.

Las fotos del mando a distancia. În borduri, conexiunile USB, conectorul de încărcare a bateriei și întrerupătorul de ON / OFF.

Fácil de sujetar, aunque sea un poco grande. Mi-a lipsit o cutie de măsură pentru același lucru cu impresora 3D:

Pasul 6: Circuito Del Receptor (Motoare):

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

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) y control dos motores, hacia adelante y hacia atrás, cu control de direcție. Como complemento del circuito, 3 leds, uno para power ON, altul pentru transmisia de date și un terț ca indicativ de „oprire de urgență”. Aprovecho estos dos últimos (parpadeando) pentru indicația stării bateriei vehiculului.

Control de stare de la bateria: Lo primero a tener en cuenta es que la batería que estoy usando es de 9v. Intentar medir la misma en A0 direct, supune deteriorarea puerto, ya that the maximum valor care se poate aplica es de 3.3v. Pentru evitarea, punem și altul divizor de voltaj, această dată mai descompensat că în el comandând distanță și reducând valoarea în A0. Pentru acest caz, utilizează un rezistor de 47k în serie cu altul de 4k7. En el punto central es donde tomo la referencia a medir. "Bateria baja", între 7v și 5.5v, 1 parpadeo del led de “Emergencia”. "Bateria MUY baja" (por debajo de 5, 5v, 3 parpadeos del led “Recepción ok”)

Circuitul complet al vehiculului este următorul:

Debido a que este circuito está montado sobre un vehículo, no he querido complicar much el sketch de Arduino. Simplemente primește datele joystick-ului prin wifi ESP-NOW și convinge în semnale de control pentru motoare. Eso facilita a that en futuros changes de software o modifications de trayectoria, se realicen solo en el mando a distancia (joystick) en vez de en ambos.

No he realizado ninguna placa de circuitos special. Tan solo una provizorie pentru leduri și rezistențe.

Pasul 7: L298N (dublu Puente En H)

L298N (doble Puente En H)
L298N (doble Puente En H)
L298N (doble Puente En H)
L298N (doble Puente En H)

Aceasta este o mică descriere a circuitului care controlează motoarele DC care mueven el vehicle.

- Conectores A y B (azules de 2 pines). Son las salidas de corriente hacia los motores. Dacă se lasă probele, motorul gira în partea contrară a celor care dezamăgesc, pur și simplu inversează pinii din același

Conector de Putere (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 alimentamos cu un voltaje între 6 y 12v, el puente se deja PUESTO y en Vlogico tenemos una salida de 5v hacia la Wemos (ca în acest lucru). Dacă circuitul se alimentează cu un voltaj superior a 12v, hay que quitar el puente para que no se dañe el convertidor DC-DC que lleva y si queremos que funcționează su circuitería lógica, deberemos lle un cable de 5v externo hacia el circuito (5v intrare). În cazul meu, cum se utilizează o baterie 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 de asemenea a G de la Wemos y a los leds.

Conector de Control (6 pini). Tiene dos partes. ENA, IN1, IN2 controlează motorul conectat în A y ENB, IN3, IN4 care controlează motorul conectat în B. În tabla de la figura anterioară se indică nivelurile de domnii care trebuie să aibă pentru a pune în mișcare motorii, adelante, atrás o frenado. En ENA y en ENB hay unos puentes. Dacă los dejamos puestos, el L298N pondrá motores al voltaje de entrada Vm în sensul indicat, fără nici un control de viteză nici de reglare a voltajului. Dacă vrem, folosim niște pini pentru a primi un semnal PWM de pe placa Wemos și astfel controlăm viteza de fiecare motor. În Arduino se urmează printr-o comandă analogWrite (). În placa Wemos, toate puerto D au esa capacitate.

En la figura del L298N hay un recuadro with a small sketch for Arduino UNO, care hará girar el motor A hacia adelante a un voltaje cercano al 75% de Vm.

La gráfica anterior a acestui text, explică relația de analogWrite () cu forma de ieșire în pinii pentru Arduino UNO. În Wemos, 100% este consecutiv cu analogWrite (1023) și 50% ar fi analogWrite (512).

A la ora de realizare a acestui proiect, hay que tener muy en cuenta los posibles valores PWM de ENA y ENB pe care îl furnizează prin intermediul comenzii analogWrite, ya that dependen del valor del voltaje de la batería y del voltaje de los motores. În acest caz utilizează o baterie de 9v (Vm) și motoare de 6v. Al ir crescând semnalul PWM în ei, el voltaje del motor asciende, dar nu începe să se deplaseze până când ajunge la un valor determinat, pentru ceea ce în probele, se va stabili acest minim PWM care lo haga mover a baja velocidad. Por altă parte, dacă punem semnalul PWM la maxim, le dăm al motorului voltajului Vm de la baterie (9v) și se poate da chiar el, pentru ceea ce în testele, dezvăluim voltajul și stabilim acest maxim PWM pentru care nu se deteriore și ca mult proporție la 6v maxim. Ambas cosas, como ya comentaba anterior, en el sketch de Arduino del mando a distancia.

Pasul 8: Montaj Del Vehículo:

Montaj Del Vehículo
Montaj Del Vehículo
Montaj Del Vehículo
Montaj Del Vehículo
Montaj Del Vehículo
Montaj Del Vehículo

Trebuie să recunosc că muntele este puțin casero, dar efectiv. Quizás diseñe e imprima en 3D un model mas bun, dar acest model „casero” are ventaja de ver mai bun funcționare. Existen una serie de motoare, cu reducere inclusă și ruede pentru acoplar, la un preț scăzut. Yo he usado lo que tengo a mano.

Pentru montaj, el impreso en 3D unas piezas, ruedas, soporte de rodamiento / motor y unos casquillos y uso tornillería de 3mm de diámetro pentru unir las piezas. Pentru uniunea motorului la tornillo eje, he used the contactos de una regleta de conexiune electrică cortând el plastic extern. Al montar las ruedas, conviene pegar el tornillo a la rueda, pentru a evita că patine la girar.

Următorul eșantion este suportul de rodare / motor și la pieza 3D care lo sujeta.

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

O dată realizat montajul celor doi conjuntos motriz, sujeto a o platformă de 10x13 cms (blanco). Les uno otra platforma (8x12cms) pentru suportul circuitelor și a rutei de trasă. La diferența de înălțime a mărcii tipul de rueda pe care îl punem, pentru a menține vehiculul orizontal. La distanță între rueda trasă și prima platformă trebuie să ne asigurăm giro de la aceeași, prin asta tuve că se înregistrează primul agujero, cum se vede în fotografiile.

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-am intenționat să aplic acest sistem la o sila de ruede ca și cum am spus la principiul acestui lucru. Pero ya que lo tengo desarrollado, posiblemente proiectat un tip de vehicul mas elegant.

Y ahora pasamos a the explication del sketch de Arduino that he realizado.

Pasul 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 datos:

.- În Preferințe, Gestor de URL-uri suplimentare:

arduino.esp8266.com/stable/package_esp8266com_index.json

.- În Herramientas (Tools), Gestor de tarjetas, as sample the image:

Pasul 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 small sketch en las Wemos con las que vamos a trabajar, para saber la AP MAC de las ESP8266 pe care le-am integrat. În Herramientas, Monitor Serie podemos ver el result del sketch y anotar sobre tot la AP de fiecare placă Wemos.

Tengo the costumbre de al primi las that compro, marco las bolsitas y la placa con dicho dato:

Pasul 11: ESP-ACUM

O dată cu AP MAC de la plasele, începând cu vorbirea protocolului ESP-NOW dezvoltat de Espressif:

„ESP-NOW permite un control direct și de joasă putere a lucrurilor inteligente, fără a fi nevoie de un enrutator. Această metodă este energetic eficientă și convenabilă.

ESP-Now este un alt protocol dezvoltat de Espressif, care permite ca mai multe dispozitive să se comunice între ele fără a utiliza Wi-Fi. El protocolo es similar a la conectividad inalámbrica de baja potencia de 2.4GHz care a menudo se implementează în ratoni inalámbricos. Por lo tanto, el emparejamiento între dispozitive este necesar înainte de su comunicare. O dată când se realizează elparțirea, conexiunea este sigură și de la egal la egal, fără că sea necesară un apreton de mâini. „

Informații suplimentare în link:

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

ESP-NOW este un protocol de amplificare și cu multe posibilități, dar vreau să afișez o formă ușoară de comunicare a dispozitivelor și să transmită date între ele, fără a utiliza forme complete.

Pasul 12: Librería ESP-ACUM

Librería ESP-ACUM
Librería ESP-ACUM

El sketch que he preparado solo un dispositivo transmite (joystick) și altul primește date (vehicul). Pero ambos trebuie să aibă lucruri comun necesare, care trebuie să fie descrise.

.- Inicio de la librería ESP-ACUM

Step 13: La Estructura De Data a Transmitir / primi:

La Estructura De Date a Transmitir / primi
La Estructura De Date a Transmitir / primi

.- Structura de date a transmite / primi. No we can define the variables with longitud variable, sino de longitudine fija, due to when you transmiten all the data to the vez, the that should must separate separate byte recibido y saber a that valor de variable assignar dichos bytes recibidos. Este ca atunci când se pregătește un tren, cu diferite vagoni și stația pe care o primesc trebuie să știm cuantos și pentru că întreprinderea trebuie să fie. Quiero transmite 5 date a la vez, Si pulso el joystick, y los voltajes (motor Izquierdo y Derecho) y sentido (adelante / atrás) de fiecare motor al vehiculului, care se extrage de la poziția același.

Pasul 14: Defino El Tipo De Función ESP-ACUM

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

.- Definirea tipului de funcție care va realiza fiecare Wemos. Quizás due to the lipsa de experiență în protocolul ESP-NOW, he tenido ciertos problems when a one lo defino as maestro y al otro as esclavo. Siempre me ha funcionado bien poniendo los dos como bidireccionales (Role = 3)

Pasul 15: Împărțirea deșeurilor ESP-ACUM:

Emparejamiento De Los Dispositivos ESP-ACUM
Emparejamiento De Los Dispositivos ESP-ACUM

.- Emparejamiento de los dispozitive. Important: În el sketch del joystck debo poner AP MAC de la Wemos del vehículo. În schița vehiculului, debo poner AP MAC del joystick.

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

Pasul 16: Trimiterea datelor la vehicul:

Trimitere date la vehicul
Trimitere date la vehicul

… Después, hay que definir a quien lo envío (da), care este AP MAC de la Wemos del vehículo y la longitudinal total del TREN. O dată definite vor fi date anterioare, se vor trimite pachetul de date (cadru verde).

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

Transmiterea, verificarea că vehiculul a primit datele corect (cadru albastru).

Pasul 17: Recepția datelor în vehicul:

Recepție de date în vehicul
Recepție de date în vehicul

.- Recepția datelor în vehicul. Aceasta este funcția pe care a folosit-o în Wemos del vehículo. Cum se poate vedea pongo în mod de recepție (cu răspuns, apel înapoi) și datele primite atribuirea variabilelor (vagone del TREN) cu aceeași structură utilizată în ambele:

Și pur și simplu cu lo anterior, puteți transmite / primi date prin Wifi ESP-NOW de formă simplă.

În următorii pași descriu schița de Arduino del mando a distancia (joystick).

Pasul 18: Joystick: Definition De Pines Y Variables

Joystick: Definition De Pines Y Variables
Joystick: Definition De Pines Y Variables
Joystick: Definition De Pines Y Variables
Joystick: Definition De Pines Y Variables

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

.- Definiți variabilele pe care le folosiți posterior:

Pasul 19: Configurare ()

Înființat()
Înființat()

.- Ya en setup (), în prima parte, definind cum se va lucra pinii de la Wemos și o valoare inițială a mismelor. De asemenea, verificarea că protocolul ESP-NOW este inițializat bine. Y tras ello, definesc modul de lucru și emparejamente anterior comentate:

Pasul 20: Buclă ()

Buclă()
Buclă()
Buclă()
Buclă()

.- Inicio el loop () cu un retard care ne marchează numărul de transmisii sau lecturi ale joystick-ului care vrea să facă după al doilea (figura următoare). He puesto 60 msg, con lo que realizo unas 15 lecturas por second mas o less. După ce le-am dat starea pulsatorului de urgență al joystick-ului. Si se pulsa, pongo a cero los valores de los motores, transmite y establezco un retardo donde no 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 funcciones que utilizo, que posteriormente explicé.

Pasul 21: Funcion LeePots ()

Funcion LeePots ()
Funcion LeePots ()

.- Leo el estado de los potenciómetros y de la batería. Los retardos (delay) care pongo de 5msg son para que las lecturas en los optoacopladores sean precisas. Hay que tener en cuenta que desde que se activează 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 poate coborî acest retard perfect.

Pasul 22: Funcion AjustePots ()

Funcion AjustePots ()
Funcion AjustePots ()

.- Una vez leídos los potenciómetros y el estado de labatería, hay que transforma el movimiento del joystick en sentido y corriente hacia los motores. Dacă analizăm potențialul vertical, de exemplu, pașii sunt prezentați în figura următoare.

1.- El valor total en el movimiento (minim, reposo, maxim) este între 0 și 1024.

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

3.

4.- Convertiți mișcările către sus sau spre abajo în sens și curent de motori.

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

Pasul 23: Función DirMot ()

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

.- Partimos del hecho de que un dispositivo de dos motores, sin eje de direcție, are nevoie de valori de sens și voltaj către 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 se reduce el voltaje de la rueda a la que giro, proporțional al mișcării joystick-ului și evitând valorile negative (se descontrolează vehiculul), 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 variable de giro (VariableGiro). Esta variable convierte el giro en mas suave și el vehicle se controla better.

Como the function es grande, se poate sacar del fichero INO adjunto.

Aveți mai multe cazuri, depinzând de poziția joystick-ului:

.- Centrado y en reposo (vehicul parado).

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

.- Avance (con o sin giro)

.- Retroceso (con o sin giro)

Pasul 24: Controlul bateriei în joystick:

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

.- Por último, el control del estado de la batería. Când el joystick-ul este în reposo, o nu-i poate transmite, creșterea unui contator. Si alcanza un valor deseado (50 de ori), analiza starea bateriei si a parpadarii el led (1 parpadeo = baja, 2 parpadeos = muy baja)

Pasul 25: Arduino (Vehículo)

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

Despre partea corespondentă la comunicații (ESP-NOW) cu joystick-ul, ați comentat anterior, pentru ceea ce analiza restul. Hay que tener en cuenta de que lo he simplificado bastante, para que si hay que hacer modificaciones, se trabaja mai bine modificând mando-ul la distanță care a avea că-l pune pe vehicul pe masa și conectează-l la computer. Por ello, me limito a recoger the data de movimiento y pasarlos al L298N para que se muevan los motores. Prioriza recepția pulsatorului de urgență și în timpurile fără mișcare, analiza statului bateriei.

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

.- ya en el setup () începe pinii și starea inițială. El resto de setup este despre ESP-ACUM:

Pasul 26: Vehículo, Loop ():

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

.- En loop (), aparte de a vizualiza starea bateriei, comandând executarea a două funcții, o comentată deja la vorbirea ESP-NOW, recepție () și o altă realizare a manejului L298N cu datele primite. Prin presupus, primul este analiza unei urgențe posibile și pararea vehiculului.

Primer stabilzco un mic retard în comunicații, pentru sincronizarea receptorului mai puțin cu transmisorul. Executați funcția de recepție () și analiza și dacă a pulsat „Urgența” pentru a proceda la imobilizare. Dacă nu primesc date sau mișcare de la niciunul dintre motoare, parohiale de asemenea prin trimiterea de date la funcția writeL298N (). Dacă nu sunt date, creșterea unui contator pentru revizuirea bateriei. Dacă sunt date primite, conștientizând ledul de comunicații și prin presupus, comandând funcția writeL298N () pentru că se mueva motorul după aceste date.

Pasul 27: Vehicul: - Función WriteL298N ()

Vehicul: - Función WriteL298N ()
Vehicul: - Función WriteL298N ()
Vehicul: - Función WriteL298N ()
Vehicul: - Función WriteL298N ()

.- Funcția writeL298N () Dacă înregistrează tabela L298N, pur și simplu scrie valori negative cu datele primite

Pasul 28: Final:

Este totul. No es mi intención ganar concursos, sino aclarar conceptos. Dacă UNA persoană îmi place acest lucru, sirve pentru a dobândi o cunoaștere și după ce a dezvoltat o idee proprie, mă conform. Dacă unul se implementează într-o sila de ruede și face mai confortabil la viața unei persoane, mă harie multă iluzie.

Adjunto PDF în español și PDF în engleză

Adjunto los ficheros de arduino de ambele dispozitive.

Un saludo:

Miguel A.

Recomandat: