Taula de continguts:

UCL incrustat: B0B the Linefollower: 9 passos
UCL incrustat: B0B the Linefollower: 9 passos

Vídeo: UCL incrustat: B0B the Linefollower: 9 passos

Vídeo: UCL incrustat: B0B the Linefollower: 9 passos
Vídeo: Automationsteknologstuderende fortæller om linjefølgerrobot 2024, Desembre
Anonim
UCL incrustat: B0B, el seguidor de línia
UCL incrustat: B0B, el seguidor de línia

Es tracta de B0B. *

El B0B és un cotxe genèric controlat per ràdio que serveix temporalment a la base d’un robot que segueix la línia.

Com tants robots de seguiment de línies abans que ell, farà tot el possible per mantenir-se en una línia provocada per una transició entre el terra i un material contrastat, en el nostre cas, la cinta adhesiva.

A diferència de tants altres robots de seguiment de línia, B0B també recopila dades i les envia mitjançant WiFi.

Completament excessiu per a un projecte d’afició, implica una sèrie de temes que podríeu trobar interessants. Aquesta guia descriu el seu naixement, les seves funcions i com es pot fer un com ell.

També implica estar enfadat amb diversos aparells electrònics perquè no funcionin com volíem i els passos que vam fer per superar aquestes dificultats (us estic mirant ESP 8266-01).

Hi ha 2 codis per fer funcionar el projecte. El primer codi és per al mòdul ESP8266 que fem servir Arduino com a programador, i el segon codi s’executarà a l’Arduino.

Pas 1: components

Per a aquest projecte necessitareu:

Maquinari:

• 1x cotxe controlador de ràdio, (ha de tenir ESC i servo de direcció).

Vam utilitzar un Traxxas 1/16 E-Revo VXL majoritàriament en stock, sobretot perquè això és el que teníem i confiavem que el podríem controlar amb un Arduino. A més, perquè acabarà carregant una quantitat gens menyspreable de maquinari addicional, confiem que això no seria un problema per al 1/16 E-Revo.

Tanmateix, la majoria dels cotxes controlats per ràdio (que es poden desmuntar fàcilment) probablement es podrien utilitzar i el procés serà molt similar.

• Una tona de cinta adhesiva.

El color ha de contrastar el terra el màxim possible. Al nostre entorn de proves hem utilitzat cinta blanca sobre un terra fosc.

• 1 Arduino Mega 2560.

Els Arduino més petits probablement també estiguin bé, però se us premrà per obtenir pins.

• 1 taula de pa gran.

N’hi ha prou, però també en teníem una de més petita per separar les altres línies elèctriques de tensió per reduir el risc d’error de l’usuari.

• 1 sensor analògic IR TCRT5000 (utilitzat per evitar col·lisions).

La marca / model exacta no importa si és compatible amb Arduino i mesura la distància. Cerqueu paraules clau com ara "Distància", sensor "d'obstacles". Tècnicament, un sensor digital funcionaria també amb canvis de codi menors, però en fem un de analògic.

• Gravetat 1x o 2x: sensor analògic en escala de grisos v2

Una és una necessitat per al seguidor de línia. El model exacte no importa, sempre que estigui mirant la intensitat de la llum reflectida i emeti un senyal analògic. El segon per a la detecció de "sala" no funcionava tan bé com s'esperava i es pot ometre, o bé es pot trobar una alternativa, com ara un sensor de color RGB, presumiblement per obtenir un millor efecte. Encara hem de provar-ho.

• 1 x ESP 8266-01.

Hi ha moltes versions de l’ESP 8266 disponibles. Només tenim experiència amb el 8266-01 i no podem garantir que el codi ESP funcioni amb una versió diferent.

• 1 escut Wi-Fi ESP8266-01.

Tècnicament opcional, però si no l’utilitzeu, tot el que impliqui el mòdul Wi-Fi serà molt més complicat. La guia, però, assumirà que teniu això (si no, trobeu les guies en línia per connectar correctament l’ESP-01 a l’Arduino), ja que fer-ho incorrectament pot danyar el mòdul.

• Bateries per al propi vehicle i bateries per alimentar l'electrònica addicional.

Hem utilitzat un parell de bateries Lipo de 7,4 V de capacitat de 2,2 AH en paral·lel per alimentar-ho tot. Haureu de ser capaç d’utilitzar les bateries que normalment feu servir amb el vehicle que trieu. Si esteu per sobre de 5 V però per sota de 20 V, la capacitat és més important que el voltatge nominal.

• Molts cables de pont.

He deixat de comptar el nombre exacte d’aquestes. Si creieu que en teniu prou, probablement no en tingueu.

• Finalment, per connectar-ho tot, haureu de muntar l'Arduino, els sensors, les taules de configuració i el mòdul Wi-Fi al vehicle que trieu. El resultat variarà en funció del que utilitzeu com a base i dels materials disponibles.

Hem utilitzat:

• Corbates amb cremallera.

• Una mica de super cola.

• Petits trossos de paper de ferralla / tub de resina que teníem amb un diàmetre adequat.

• Una antiga placa posterior de maçonita d’un marc d’imatges, tallada a mida.

• Una mica més de cinta adhesiva.

• Qualsevol eina necessària per treballar al cotxe radiocontrol que trieu.

Vam utilitzar principalment un petit tornavís amb diversos bits, però de tant en tant havíem de treure el conjunt d’eines que venia amb el cotxe.

Programari:

• Node-vermell

Una part important de la recopilació de dades.

• Un servidor MQTT.

L'home mitjà entre el nostre vehicle i Node-red. Inicialment, per fer proves, vam utilitzar test.mosquitto.org

Més tard hem utilitzat:

• CloudMQTT.com

Això era molt més fiable, cosa que compensava la seva configuració una mica més complicada.

• WampServer.

La darrera part de la recopilació de dades. En concret, utilitzarem la seva base de dades SQL per emmagatzemar les dades recollides.

Pas 2: Esquema elèctric

Esquema elèctric
Esquema elèctric

Pas 3: Construcció física

Construcció física
Construcció física
Construcció física
Construcció física
Construcció física
Construcció física

La nostra solució té un enfocament directe al muntatge físic.

El receptor original i el seu recinte impermeable es van treure del cotxe RC, ja que no és necessari.

Vam trobar que hi havia un lloc adequat entre les rodes davanteres per al nostre sensor de seguiment de línia, de manera que el vam mantenir al seu lloc fent un bucle amb una cremallera per sobre de la placa antilliscant frontal.

El sensor que fem servir per a la lluita contra col·lisions és una mena d’encastat darrere del para-xocs davanter. Encara es protegeix dels impactes i s’adapta a la fricció. Acaba mirant cap endavant amb un angle ascendent tan lleu. Això és perfecte.

La placa de masonita, (placa posterior del marc antic), a la part superior té petites seccions de tub de paper / resina tallades a mida i enganxades a la part inferior. Aquests s'alineen amb els muntatges dels pals del cos i simplement s'assenten a la part superior, tot subjectant-ho de forma segura. Suposant que la cola que fixa la canonada a la placa s’aguanta i que no s’inclina excessivament, es mantindrà al seu lloc. També cal destacar que la placa es troba dins de l’esfera protectora de les rodes i els para-xocs. L’Arduino Mega i les dues taules de suport s’han fixat a la placa amb cinta lateral doble o bé amb un bucle de cinta adhesiva al voltant, encolat.

No s'han pres mesures especials per protegir el mòdul WiFi. No és nostre, de manera que enganxar-lo o gravar-lo es considerava innecessari, ja que és tan lleuger que no es mourà gaire, i els cables són suficients per mantenir-lo al seu lloc.

Finalment, disposem d’un sensor per detectar “habitacions” que una de les rodes posteriors fixava als components de la suspensió. Durant el funcionament, s’ha d’allunyar de la línia que marca el vehicle per navegar.

Pas 4: mòdul ESP8266

Mòdul ESP8266
Mòdul ESP8266
Mòdul ESP8266
Mòdul ESP8266

El mòdul WiFi, ESP8266, requereix una configuració de dos pins diferents. S’ha d’utilitzar una configuració quan es fa servir el mòdul amb un programa nou i s’utilitza l’Arduino Mega 2560 com a programador. L’altra configuració és per al mòdul quan s’utilitza i envia informació al corredor MQTT.

Si utilitzeu Arduino IDE per penjar codi al mòdul ESP8266, haureu d’instal·lar un gestor de taules i un gestor de taules addicionals.

Sota el gestor de la placa, instal·leu el gestor de la placa esp8266. Es pot trobar fàcilment cercant "esp". És crucial que instal·leu la versió 2.5.0, no més antiga, ni més recent.

A la configuració dels URL del gestor de taulers addicionals, copieu en aquesta línia:

arduino.esp8266.com/stable/package_esp8266c…

Per poder carregar qualsevol cosa al mòdul ESP8266, haureu d'utilitzar una configuració de pins específica per poder fer flaixar el mòdul. Cal fer-ho cada vegada que vulgueu canviar el codi actual que s’executa al mòdul. No us oblideu de seleccionar el mòdul ESP8266 correcte del gestor de la placa abans de parpellejar el mòdul. En aquest projecte vam escollir el tauler ESP8266 genèric. La configuració dels pins per fer parpellejar el mòdul es troba a la primera imatge d’aquest segment.

Després d'haver intermitent el mòdul ESP8266, heu de canviar la configuració del pin. També podeu optar per utilitzar un adaptador per facilitar-vos la configuració. En aquest projecte vam optar per tenir un adaptador sempre que teníem el mòdul en execució. La configuració del pin amb l'adaptador es troba a la segona imatge d'aquest segment.

El codi que es mostrarà al mòdul ESP8266 configura la connexió a una xarxa WiFi i un corredor MQTT, en aquest cas amb un nom d’usuari i una contrasenya, però es pot fer sense fer els canvis necessaris descrits als comentaris del codi. Per a aquest projecte, el nostre agent ha requerit un nom d'usuari i una contrasenya per funcionar. El mòdul llegeix els missatges entrants des del port sèrie al qual està connectat. Llegirà totes les línies noves creades pel codi Arduino, desxifrarà el missatge i recrearà el missatge. Després, envia el missatge al corredor MQTT que s’ha especificat al codi. El codi del mòdul ESP8266:

Pas 5: Arduino

Després d’haver configurat el mòdul WiFi, observem el programa que s’utilitzarà per controlar el motor i el servo del cotxe RC. El cotxe reaccionarà segons una informació d’escala de grisos del sensor central, també conegut com a “detector de línia” en aquest projecte. És clar que té com a objectiu mantenir la informació del detector de línia a prop d'un valor predefinit que és igual a la informació registrada en el canvi entre clar i fosc o en aquest projecte, blanc i negre. Per tant, si el valor difereix massa, la sortida corresponent al servo conduirà el cotxe a prop del valor predeterminat de la línia.

El programa té dos botons que funcionen com a botó d’inici i aturada del cotxe RC. Tècnicament el botó "aturar" és un botó "armar" que en termes equival a un valor PWM enviat al motor que fa que el cotxe RC s'aturi. El botó d'inici envia un valor PWM que és igual al cotxe RC amb prou feines avançant, ja que conduirà massa ràpid si guanya massa impuls.

S'afegeix un detector d'evitació de col·lisions a la part frontal del cotxe RC per detectar si el camí a seguir està clar o bloquejat. Si està bloquejat, el cotxe RC s’aturarà fins que l’obstacle desaparegui / es retiri. El senyal analògic del detector s’utilitza per determinar si alguna cosa està bloquejant o no el camí i es fa un criteri per poder avançar i aturar-se.

Un sensor secundari d'escala de grisos, "Detector d'habitacions", s'utilitza per detectar a quina habitació ha entrat el cotxe RC. Funciona amb un principi similar al del detector de línia, però no busca el canvi entre la llum i la foscor, sinó més aviat els valors dins d’un interval específic que correspon a diferents habitacions en funció del valor que es veu des del detector d’habitacions.

Finalment, el programa crea una línia d'informació a partir dels sensors perquè el mòdul WiFi pugui llegir-la i enviar-la posteriorment al corredor MQTT. La línia d'informació es crea com una cadena i s'escriu a la sèrie corresponent a la qual està connectat el mòdul WiFi. És important que l’escriptura al serial només passi tan sovint com el mòdul WiFi pugui llegir el missatge entrant, però recordeu que no utilitzeu cap retard en aquest codi, ja que interferirà amb la capacitat del cotxe RC de seguir la línia. En lloc d’això, utilitzeu “millis”, ja que permetrà que el programa s’executi sense demora, però després de passar una quantitat definida de mil·lis des que s’ha activat l’Arduino, escriurà un missatge al serial sense bloquejar el codi de la mateixa manera que fa el retard.

El codi de l'Arduino Mega 2560:

Pas 6: base de dades MySQL

WampServer és un entorn de desenvolupament web per a Windows que ens permet crear aplicacions amb PHP i una base de dades MySQL. PhpMyAdmin ens permet gestionar les nostres bases de dades d’una manera senzilla.

Per començar, aneu a:

En aquest projecte utilitzem la versió 3.17 x64 bits per a Windows. Després de la instal·lació, assegureu-vos que tots els serveis s’executin, cosa que significa que la icona petita es torna verda en lloc de vermella o taronja. Si la icona és verda, podeu accedir a PhpMyAdmin per gestionar la vostra base de dades MySQL.

Accediu a MySQL mitjançant PhpMyAdmin i creeu una nova base de dades. Poseu-li un nom adequat que recordeu, en aquest projecte s’anomenava “line_follow_log”. Després de crear la base de dades, heu de crear una taula a la base de dades. Assegureu-vos que s’adapti el nombre de columnes. Al projecte fem servir 4 columnes. Una columna és per a una marca de temps i les tres últimes s’utilitzen per emmagatzemar dades del vehicle. Utilitzeu un tipus de dades adequat per a cada columna. Hem utilitzat "text llarg" per a la columna de marca de temps i "text mitjà" per a la resta.

Això hauria de ser tot el que heu de fer a PhpMyAdmin i MySQL. Recordeu la vostra base de dades i la taula de la secció sobre Node-Red.

Pas 7: node vermell

Per gestionar la recopilació de dades, utilitzarem un flux bastant simple en vermell de node. Es connecta al nostre servidor MQTT i escriu a la nostra base de dades MYSQL.

Per fer-ho, necessitem algunes paletes perquè funcionin diverses funcions i necessitem un codi real perquè s’executi.

El primer és el primer. Necessitarem els següents palets.

Node-red-contrib-mqtt-broker: Aquesta és la connexió amb el nostre broker MQTT.

Node-red-dashboard: el nostre Dashboard, necessari per representar visualment les dades recopilades.

Node-red-node-mysql: la nostra connexió a la base de dades SQL.

No es pretén que sigui una guia completa de Node-red, però explicaré què fa el flux Node-red.

Al principi, vam tenir problemes amb el nostre servidor MQTT de morir / desconnectar, aparentment a l’atzar, cosa que va fer que qualsevol canvi fos un esforç frustrant, ja que no estava clar si els canvis havien estat beneficiosos o no quan no vam poder veure el resultat. Per tant, el botó "Ha mort el servidor?" injecta "No" el següent bloc l'injecta al nostre servidor MQTT. Si no està mort, apareixerà "No" a la finestra de depuració. Això no només es fa per provar, sinó per forçar Node-red a intentar tornar a connectar-se al servidor MQTT.

La "cadena de prova" envia una cadena de costums al corredor MQTT. Hem formatat aquesta cadena perquè sigui similar al que obtindríem de l’Arduino. Es tractava de tenir més fàcil configurar la xarxa que descodifica els missatges, sense necessitat que el projecte s’executi, recopilant dades.

L'últim flux de l'espai de treball es pot dividir en dos segments. La branca inferior simplement llegeix els missatges entrants, els publica a la finestra de depuració i els desa al servidor SQL.

La gran xarxa de commutadors connectats que segueixen un node de funció si succeeix la "màgia" real.

La funció de procediment llegeix la cadena entrant, la divideix amb cada punt i coma i passa les seccions a cadascuna de les sortides. Els següents commutadors cerquen una de les dues informacions entrants diferents. Una informació específica sempre es transmet per una sortida, l’altra opció surt per la segona sortida. A continuació, hi ha un segon grup de blocs de commutació. Només s’activaran amb una entrada específica i sortiran una altra cosa.

Un exemple, "obstacle", com tots els altres són una opció binària, és clar conduir o no ho és. Per tant, rebrà un 0 o un 1. Un 0 s'enviarà a la branca "buida", un 1 s'enviarà a la branca "Obstruït". Els commutadors "Esborra", "Obstruït", si estan activats, generaran alguna cosa específica, Esborra o obstruïda, respectivament. Els blocs de procés verds es publicaran a la finestra de depuració, el blau escriurà al nostre tauler.

Les branques "estat" i "ubicació" funcionen exactament igual.

Pas 8: corredor MQTT

Un corredor és un servidor que encamina els missatges dels clients als clients de destinació adequats. Un corredor MQTT és aquell en què els clients utilitzen una biblioteca MQTT per connectar-se al corredor a través d’una xarxa.

Per a aquest projecte vam crear un broker MQTT mitjançant el servei CloudMQTT amb la subscripció gratuïta per a la versió "Cute Cat". Té la seva limitació, però no superem les d'aquest projecte. El mòdul WiFi es pot connectar al corredor i, després, encamina els missatges a un client de destinació adequat. En aquest cas, el client és el nostre Node-Red. El servei CloudMQTT configura un nom d’usuari i una contrasenya per al seu servidor, de manera que se’ns garanteix una major seguretat. Bàsicament vol dir que només aquells que tenen el nom d’usuari i la contrasenya poden accedir a aquest servei específic de CloudMQTT. El nom d’usuari i la contrasenya són crucials a l’hora d’establir la connexió al codi ESP8266, així com Node-Red.

Les estadístiques en curs dels missatges que rep el broker és una característica agradable, que es pot utilitzar per veure fins a quin punt el vostre pla de subscripció gestiona la informació que envia.

Una característica interessant és la possibilitat d’enviar missatges des del corredor al mòdul WiFi, però no hem utilitzat els d’aquest projecte.

Pas 9: Electrònica Hobby

Abans de començar, sabíem per un projecte passat que el servo de direcció de la màquina es podia controlar des d’un Arduino amb un senyal PWM, amb un cablejat similar i connectant-se a diferents canals del mateix receptor de ràdio, hem assumit el control de velocitat electrònic (ESC de ara activat), que controla el motor, es podria controlar de manera similar mitjançant PWM des de l’Arduino.

Per provar aquesta teoria, disposem d’un petit esbós d’Arduino. L’esbós llegeix una entrada analògica des d’un potenciòmetre, torna a assignar el valor de 0, 1024 a 0, 255 i emet el valor resultant a un pin PWM, mitjançant analogWrite () mentre tenia el cotxe R / C en una caixa petita i tenia es van treure les rodes.

Després d’escombrar el rang del mesurador de pot, l’ESC semblava “despertar-se” i podríem accelerar-lo cap amunt i cap avall, també teníem l’Arduino per imprimir els valors a la connexió sèrie per poder-los supervisar.

A l’ESC semblava que no li agradaven els valors inferiors a un llindar determinat, en aquest cas 128. Veia el senyal 191 com a accelerador neutre i el 255 era l’accelerador màxim.

No calia variar la velocitat del vehicle i el teníem perfectament a la velocitat més lenta que el faria moure. 192 era el valor més baix que giraria el motor, tot i que encara hem de muntar-ho tot i no estem segurs de si aquesta sortida seria suficient per moure el vehicle després del muntatge final, tot i que introduir un valor una mica més gran hauria de ser trivial.

Eludir el potenciòmetre i introduir un valor fix al codi, però, no va funcionar. L'escot ESC simplement parpellejava i no feia girar el motor, "ajustava l'ajust de l'accelerador" segons el manual.

La furiosa resolució de problemes, el llançament de diversos valors, l’ús de diferents cables i fins i tot l’experimentació amb el canvi de la freqüència PWM que fa servir Arduino van donar lloc a més estranyesa.

Semblava un tema intermitent, de vegades funcionaria, altres es negava a fer res. Simplement va continuar parpellejant. Una prova amb el controlador i el receptor originals va confirmar que l'ESC seguia funcionant exactament com es volia, cosa que va fer que els problemes siguin encara més estranys. Valors més alts, ignorava i continuava parpellejant; valors més baixos, l’ESC tornava a fer un verd feliç, però encara no girava.

Què hi havia de diferent de la configuració amb el potenciòmetre, o del transmissor i receptor de valors, i de la versió que proporcionava valors fixos?

De vegades, treballar de la manera prevista i treballar com s’esperava no se solapen gaire en el diagrama de Venn. En aquest cas, en ser una joguina, no hauria d’haver cap possibilitat que el model simplement s’enlairi o es trenqui els dits o s’atrapi el cabell a les rodes o tren de tracció quan el model s’encén, fins i tot si alguna cosa com agafar el transmissor estranyament té l’accelerador qualsevol altra posició que no sigui neutral.

"Ajusteu la guarnició de l'accelerador", això és exactament el que això significa. L’ESC espera un senyal neutre quan s’encén abans d’aconseguir que no farà res. Normalment, el transmissor sempre estaria en punt mort quan l’ESC estigui engegat i des d’allà conduirà feliçment. En cas que no ho sigui, probablement torni a estar neutre almenys una vegada quan el model estigui fermament a terra i l’operador se senti a punt per competir.

Mentre utilitzàvem el potenciòmetre, estàvem “escombrant” els rangs i llavors començava a funcionar. Simplement es va armar mentre el potenciòmetre passava de la posició neutra i després funcionava.

Els rangs més baixos, però, semblaven desagradar a l’ESC. Això resulta que és un producte dels cicles de treball PWM.

Ja sigui per disseny o per motius tècnics, tant el servo de direcció com l’ESC ignoren els senyals inferiors al 50% de cicles de treball. Això podria ser en cas que el receptor / transmissor deixi de funcionar o es quedi sense alimentació, el model tornaria al punt neutre i no s’enlairaria a distància amb l’accelerador invers complet. Igualment, el servo només gira 180 graus i no necessita el rang complet.

Amb aquest nou coneixement a la mà, es va crear un nou esbós Arduino. La versió inicial accepta cadenes introduïdes al monitor sèrie, la converteix en un enter i la mou al pin PWM, mitjançant la servoteca i write () *. Si s'introdueix un valor nou al monitor sèrie, el valor write () s'actualitza.

Durant les proves, el stock Traxxas ESC es va substituir per un Mtroniks G2 Micro, però haurien de funcionar igual, tot i que els valors exactes poden ser lleugerament diferents.

Aquesta biblioteca tracta l’ESC com un servo, aparentment està bé. La funció write () de la biblioteca Servo.h va de 0 a 180, s'espera que el senyal d'armament esperat sigui al voltant del centre.

Els braços micro G2 en una escriptura () en un rang de valors propers als 90, no obstant això, va ser difícil de precisar, ja que sembla recordar haver estat armats.

S'espera que el Traxxas VXL-s3 s'armi amb un valor write () de 91.

Després del senyal d’armament, qualsevol dels dos ESC va acceptar els senyals PWM, independentment de les funcions Arduino cridades per generar-les, i controla el motor en conseqüència.

Parlant de funcions; l'analògic estàndard analogWrite (), així com write () i writeMicroseconds () de la biblioteca Servo.h es poden utilitzar indistintament, només cal tenir en compte què fa què i, en definitiva, res més que el cicle de treball. WriteMicroseconds () es podria utilitzar si es requereix una granularitat més gran, només cal tenir en compte que l'interval aquí és de 1000 a 2000, amb l'armament o 'neutre' que s'espera que sigui 1500. Amb l'estàndard analogWrite () s'espera que l'interval útil ser de 128 a 255 i aproximadament 191 ser neutres.

Recomanat: