Taula de continguts:

Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissor-receptor de RF: 4 passos
Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissor-receptor de RF: 4 passos

Vídeo: Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissor-receptor de RF: 4 passos

Vídeo: Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissor-receptor de RF: 4 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Desembre
Anonim
Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissors-receptors de RF
Rover controlat per gestos mitjançant un acceleròmetre i un parell de transmissors-receptors de RF

Hola, Alguna vegada has desitjat construir un rover que poguessis dirigir amb simples gestos amb les mans, però que mai no poguessis agafar el coratge d’aventurar-te en les complexitats del processament d’imatges i la interfície d’una càmera web amb el teu microcontrolador, per no parlar de la batalla ascendent per superar el mal rang i la línia de problemes de vista? Bé, no tingueu por … perquè hi ha una sortida fàcil! Heus aquí, mentre us presento el poderós ACCELEROMMETRE! * ba dum tsss *

Un acceleròmetre és un dispositiu molt fresc que mesura l’acceleració gravitatòria al llarg d’un eix lineal. Representa això com un nivell de voltatge que fluctua entre la terra i la tensió d’alimentació, que el nostre microcontrolador llegeix com a valor analògic. Si apliquem una mica el cervell (només una mica de matemàtiques i una mica de física newtoniana), no només el podem utilitzar per mesurar el moviment lineal al llarg d’un eix, sinó que també el podem utilitzar per determinar l’angle d’inclinació i les vibracions de sentit. No us preocupeu! No necessitarem les matemàtiques ni la física; només tractarem de valors bruts que l’acceleròmetre escup. De fet, no cal que us preocupeu molt pel que fa als aspectes tècnics d’un acceleròmetre d’aquest projecte. Simplement tocaré alguns detalls i elaboraré tot el que necessiteu per entendre el panorama general. Tot i que, si esteu interessats en estudiar la seva mecànica interior, mireu aquí.

Només cal tenir-ho en compte per ara: un acceleròmetre és l’aparell (sovint unit a un giroscopi) que obre les portes a tots aquells jocs de sensor de moviment que jugem als nostres telèfons intel·ligents; un joc de carreres de cotxes, per exemple, on dirigim el vehicle simplement inclinant els nostres dispositius en qualsevol direcció. I podem imitar aquest efecte enganxant un acceleròmetre (amb alguns auxiliars, és clar) a un guant. Simplement ens posem els guants màgics i inclinem les mans cap a l’esquerra o la dreta, cap endavant o cap enrere i veiem els nostres rovers ballar al nostre ritme. Tot el que hem de fer aquí és traduir les lectures de l’acceleròmetre a senyals digitals que els motors del rover puguin interpretar i idear un mecanisme per transmetre aquests senyals al rover. Per aconseguir-ho, fem una crida al bon Arduino i als seus ajudants per a l’experiment d’avui, un parell transmissor-receptor de RF que funciona a 434 MHz donant així un rang d’uns 100-150 m en espai obert, que també ens estalvia de la línia de problemes de vista.

Tot un truc astut, eh? Anem a bussejar …

Pas 1: reuniu els vostres subministraments

Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
Reuneix els teus subministraments
• Arduino Nano x1
• Acceleròmetre (ADXL335) x1
• Motor de 5V CC + rodes x2 cadascun
• Roda bovina * x1
• Controlador de motor L293D + endoll IC de 16 pins x1 cadascun
• Transmissor de RF de 434 MHz x1
• Receptor RF de 434 MHz x1
• Codificador HT-12E IC + endoll IC de 18 pins x1 cadascun
• Decodificador IC HT-12D + endoll IC de 18 pins x1 cadascun
• Regulador de tensió LM7805 x1
• Interruptor de polsador x2
• LED vermell + resistència 330O x2 cadascun
• Resistència LED groga + 330O x1 cadascun
• Resistència LED verda + 330O (opcional) x4 cadascun
• Resistències de 51kO i 1MO x1 cadascun
• Condensadors radials de 10µF x2
Bateries, connectors de bateries, cable USB, cables de pont, capçals femella, terminals de cargol de 2 pins, PCB, Chasis i els vostres accessoris de soldadura habituals

Si us pregunteu per què fem servir una roda bovina, el cas és que els mòduls transmissors i receptors de RF només tenen 4 pins de dades, cosa que significa que només podem accionar 2 motors i, per tant, l’ús d’una roda bovina per donar suport a l’estructura. Tanmateix, si creieu que el vostre rover tindria un aspecte més fresc amb quatre rodes, no us preocupeu, hi ha una mica de feina. En aquest cas, només heu de ratllar la roda bovina de la llista i afegir-hi un altre parell de motors de 5 V CC, acompanyats d’una roda cadascun, i busqueu el simple hack comentat al final del pas 3.

Finalment, per als més valents, hi ha marge d’una altra lleugera modificació en el disseny, que consisteix en una mica a dissenyar el vostre propi Arduino. Aneu a la secció de bons del següent pas i comproveu-ho vosaltres mateixos. També necessiteu alguns subministraments addicionals: un ATmega328P, un endoll IC de 28 pines, un oscil·lador de cristall de 16 MHz, dos taps de ceràmica de 22 pF, un altre regulador de voltatge de 7805, dos taps radials de 10 μF més i resistències de 10 kΩ, 680 Ω, 330 Ω, i sí, menys l'Arduino!

Pas 2: Connecteu el transmissor

Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor
Connecteu el transmissor

El projecte el dividirem en dos components: el transmissor i el receptor. El transmissor està format per un acceleròmetre, un Arduino i un mòdul transmissor de RF juntament amb un codificador HT-12E IC, tot connectat segons l’esquema adjunt.

L’acceleròmetre, tal com es va introduir anteriorment, serveix per reconèixer els nostres gestos amb les mans. Utilitzarem un acceleròmetre de tres eixos (bàsicament tres acceleròmetres d’un eix en un) per satisfer les nostres necessitats. Es pot utilitzar per mesurar l’acceleració en les tres dimensions i, com podríeu haver endevinat, produeix no una, sinó un conjunt de tres valors analògics en relació amb els seus tres eixos (x, y i z). De fet, només necessitem l’acceleració al llarg dels eixos x i, ja que només podem conduir el rover en quatre direccions: cap a enrere o cap enrere (és a dir, al llarg de l’eix y) i cap a l’esquerra o cap a la dreta (és a dir, al llarg de l’eix x). Hauríem necessitat l’eix z si construíssim un dron, de manera que també poguéssim controlar-ne l’ascens o el descens mitjançant gestos. En qualsevol cas, aquests valors analògics que produeix l’acceleròmetre s’han de convertir en senyals digitals per poder accionar els motors. Això es fa càrrec de l'Arduino, que també transmet aquests senyals, després de la conversió, al rover mitjançant el mòdul transmissor de RF.

El transmissor de RF només té un treball: transmetre les dades “serials” disponibles al pin 3 per l’antena del pin 1. Això propugna l’ús de l’HT-12E, un codificador de dades paral·lel a sèrie de 12 bits, que recopila fins a 4 bits de dades paral·leles de l'Arduino a les línies AD8 a AD11, cosa que ens permet fer espai per a fins a 24 = 16 combinacions d'E / S diferents en lloc del pin de dades únic del transmissor de RF. Els 8 bits restants, extrets de les línies A0 a A7 del codificador, constitueixen el byte d’adreça, que facilita l’aparellament del transmissor de RF amb un receptor de RF corresponent. A continuació, els 12 bits s’ajunten i es serialitzen i es passen al pin de dades del transmissor de RF, que al seu torn modula ASK les dades en una ona portadora de 434 MHz i les dispara a través de l’antena al pin 1.

Conceptualment, qualsevol receptor de RF que escolti a 434 MHz hauria de poder interceptar, demodular i descodificar aquestes dades. Tot i això, les línies d’adreces de l’HT-12E i les de l’equivalent HT-12D (un descodificador de dades de 12 bits de sèrie a paral·lel) ens permeten fer un parell de transmissor-receptor de RF únic encaminant les dades només al receptor previst limitant així la comunicació amb tots els altres. Tot el que ens cal és configurar les línies d’adreça de manera idèntica a les dues façanes. Per exemple, com que hem connectat a terra totes les línies d’adreça del nostre HT-12E, hem de fer el mateix per a l’HT-12D a l’extrem receptor o bé el rover no podrà rebre els senyals. D’aquesta manera, també podem controlar diversos rovers amb un únic circuit transmissor configurant idènticament les línies d’adreça dels HT-12D a cadascun dels receptors. O bé, podríem posar-nos dos guants, cadascun d’ells fixat amb un circuit transmissor que conté una configuració de línia d’adreça diferent (per exemple, una amb totes les línies d’adreça connectades a terra i l’altra amb totes altes o una amb una línia a terra mentre es mantenen les set restants alt i l’altre amb dues línies connectades a terra, mentre que les sis restants es mantenen altes, o qualsevol altra combinació de les mateixes) i cada un dirigeix múltiples rovers de configuració idèntica. Juga al mestre en una simfonia d'Android.

Una cosa important a tenir en compte durant el muntatge del circuit és el valor de Rosc. El HT-12E té un circuit oscil·lador intern entre els pins 15 i 16, que s’activa mitjançant la connexió d’una resistència, anomenada Rosc, entre aquests pins. El valor seleccionat per Rosc determina la freqüència de l’oscil·lador, que pot variar en funció de la tensió d’alimentació. La selecció d’un valor adequat per a Rosc és crucial per al funcionament de l’HT-12E. Idealment, la freqüència de l’oscil·lador de l’HT-12E hauria de ser 1/50 vegades la de l’equivalent HT-12D. Per tant, com que funcionem amb 5V, vam triar resistències 1MΩ i 51kΩ com a Rosc per als circuits HT-12E i HT-12D respectivament. Si teniu previst fer funcionar els circuits amb una tensió d'alimentació diferent, consulteu el gràfic "Freqüència de l'oscil·lador contra tensió de subministrament" a la pàgina 11 del full de dades adjunt HT-12E per determinar la freqüència i la resistència exactes de l'oscil·lador que s'utilitzarà.

A més, com a nota lateral, farem servir capçaleres femenines aquí (amb un propòsit similar a les preses IC) per connectar l’acceleròmetre, el transmissor de RF i l’Arduino al circuit en lloc de soldar-les directament al PCB. La intenció és l'allotjament d'una petita reutilització de components. Diguem que ha passat un temps des que vau dissenyar el vostre rover controlat per gestos i que només estava assegut allà, mig cobert de pols, damunt del prestatge del trofeu i us topeu amb un altre instructiu fantàstic que aprofita l’eficàcia d’un acceleròmetre. Així, què faries tu? Simplement, treieu-lo del vostre rover i el passeu al vostre nou circuit. No cal convocar les "amazones" per obtenir-ne una de nova:-p

Bonificació: elimineu l'Arduino i, no obstant això, no

Per si de cas us sentiu una mica més aventurer i, sobretot, si creieu que gastar aquesta meravellosa bellesa (l’Arduino, per descomptat) per a una tasca tan trivial com la nostra és una mica excessiu, aguanteu una mica més; i si no, no dubteu a passar al següent pas.

El nostre objectiu aquí és convertir l’Arduino (el cervell de l’Arduino, de fet; sí, estic parlant de l’ATmega IC!) Com a membre permanent de l’equip. L'ATmega es programaria per executar un sol esbós una i altra vegada de manera que pogués servir com a part perpètua del circuit, igual que l'HT-12E, un simple IC, només assegut allà, fent el que se suposa. No és així com se suposa que ha de ser un sistema incrustat real?

De tota manera, per continuar amb aquesta actualització, només cal modificar el circuit segons el segon esquema adjunt. Aquí, simplement substituïm les capçaleres femenines de l’Arduino per un sòcol IC per a l’ATmega, afegim una resistència de tracció de 10K al pin de reinici (pin 1) de l’IC i el bombem amb un rellotge extern entre els pins 9 i 10 Malauradament, si eliminem l'Arduino, també deixem anar els reguladors de tensió incorporats; ergo, també hem de reproduir el circuit LM7805 que havíem emprat per al receptor. A més, també fem ús d’un divisor de tensió per dibuixar els 3,3V necessaris per alimentar l’acceleròmetre.

Ara, l’única altra captura aquí és programar l’ATmega per fer la seva feina. Tot i així, l’haureu d’esperar fins al pas 4. Per tant, estigueu atents …

Pas 3: I, el receptor

I, el receptor
I, el receptor
I, el receptor
I, el receptor
I, el receptor
I, el receptor
I, el receptor
I, el receptor

El receptor està format per un mòdul de receptor de RF juntament amb un IC de descodificació HT-12D i un parell de motors de corrent continu que funcionen amb l'ajuda d'un controlador de motor L293D, tots connectats segons l'esquema adjunt.

L’únic treball del receptor de RF és demodular l’ona portadora (rebuda a través de la seva antena al pin 1) i renderitzar les dades “serials” recuperades al pin 7 des d’on és recollit per l’HT-12D per a la seva deserialització. Ara, suposant que les línies d’adreça (A0 a A7) de l’HT-12D estan configurades idènticament a la seva contrapart HT-12E, s’extreuen i transmeten els 4 bits paral·lels de dades mitjançant les línies de dades (D8 a D11) a la HT-12D, al conductor del motor, que al seu torn interpreta aquests senyals per accionar els motors.

Una vegada més, parar atenció al valor de Rosc. El HT-12D també té un circuit oscil·lador intern entre els pins 15 i 16, que s’activa connectant una resistència, anomenada Rosc, entre aquests pins. El valor seleccionat per a Rosc determina la freqüència de l’oscil·lador, que pot variar en funció de la tensió d’alimentació. La selecció d’un valor adequat per a Rosc és crucial per al funcionament de l’HT-12D. Idealment, la freqüència de l’oscil·lador de l’HT-12D hauria de ser 50 vegades superior a la de l’equivalent HT-12E. Per tant, com que funcionem amb 5V, vam triar resistències 1MΩ i 51kΩ com a Rosc per als circuits HT-12E i HT-12D respectivament. Si teniu previst fer funcionar els circuits amb una tensió d’alimentació diferent, consulteu el gràfic “Freqüència de l’oscil·lador vs voltatge de subministrament” a la pàgina 5 del full de dades adjunt HT-12D per determinar la freqüència i la resistència exactes de l’oscil·lador que s’utilitzarà.

A més, no oblideu les capçaleres femenines del receptor de RF.

Opcionalment, es pot connectar un LED mitjançant una resistència limitadora de corrent de 330Ω a cadascun dels 4 pins de dades de l'HT-12D per ajudar a determinar el bit rebut en aquest pin. El LED s’encendria si el bit rebut és ALT (1) i s’apagaria si el bit rebut és BAIX (0). Alternativament, es podria lligar un sol LED al pin VT de l'HT-12D (de nou, mitjançant una resistència limitadora de corrent de 330Ω), que s'encendria en cas de transmissió vàlida.

Ara bé, si esteu buscant el hack amb els motors dels que parlava al primer pas, és molt fàcil! Simplement connecteu els dos motors de cada conjunt en paral·lel, tal com es mostra al segon esquema. Això funciona de la manera que se suposa perquè els motors de cada conjunt (els motors davanter i posterior a l’esquerra i els motors davanter i posterior a la dreta) mai no es mouen en direccions oposades. És a dir, per girar el rover cap a la dreta, els motors davanters i posteriors de l’esquerra han de ser conduïts cap endavant i els motors davanters i posteriors de la dreta han de conduir-se cap enrere. De la mateixa manera, perquè el rover giri a l'esquerra, els motors davanter i posterior a l'esquerra han de ser conduïts cap enrere i els motors davanter i posterior a la dreta s'han de conduir cap endavant. Per tant, és segur alimentar el mateix parell de tensions als dos motors d’un conjunt. I, el camí a seguir és simplement enganxant els motors en paral·lel.

Pas 4: accediu al codi

Al codi
Al codi

Només queda una cosa per fer funcionar el rover. Sí, ho has endevinat bé! (Espero que ho hagueu fet) Encara hem de traduir les lectures de l’acceleròmetre en una forma que el conductor del motor pugui interpretar per poder conduir els motors. Si esteu pensant que, atès que les lectures de l’acceleròmetre són analògiques i el conductor del motor espera senyals digitals, haurem d’implementar algun tipus d’ADC, bé, no tècnicament, però això és el que hem de fer. I és bastant senzill.

Sabem que un acceleròmetre mesura l’acceleració gravitatòria al llarg d’un eix lineal i que aquesta acceleració es representa com un nivell de voltatge fluctuant entre el sòl i la tensió d’alimentació, que el nostre microcontrolador llegeix com un valor analògic que varia entre 0 i 1023. Però, ja que Estem fent funcionar l’acceleròmetre a 3,3 V, és recomanable establir la referència analògica per a l’ADC de 10 bits (que ve integrat a l’ATmeaga a bord d’un Arduino) a 3,3 V. Simplement farà que les coses siguin més fàcils d’entendre; tot i que no importarà molt per al nostre petit experiment encara que no ho féssim (només haurem de modificar una mica el codi). Per fer-ho, però, simplement connectem el pin AREF a l’Arduino (pin 21 de l’ATmega) a 3,3 V i denotem aquest canvi de codi trucant a analogReference (EXTERNAL).

Ara, quan posem l’acceleròmetre pla i analògic Llegim l’acceleració al llarg dels eixos x i (recordeu? Només necessitem aquests dos eixos), obtenim un valor d’aproximadament 511 (és a dir, a mig camí entre 0 i 1023), que és només un manera de dir que hi ha 0 acceleració al llarg d’aquests eixos. En lloc d’excavar els detalls del fet, imagineu-ho com a eixos x i en un gràfic, amb el valor 511 que indica l’origen i 0 i 1023 els extrems tal com es representa a la figura; Orienteu l’acceleròmetre de manera que els passadors apuntin cap avall i es mantinguin més a prop vostre o bé podeu invertir / intercanviar els eixos. Això vol dir que, si inclinem l’acceleròmetre cap a la dreta, hauríem de llegir un valor superior a 511 al llarg de l’eix x i, si inclinem l’acceleròmetre cap a l’esquerra, hauríem d’obtenir un valor inferior a 511 al llarg de l’eix x. De la mateixa manera, si inclinem l’acceleròmetre cap endavant, hauríem de llegir un valor superior a 511 al llarg de l’eix y i, si inclinem l’acceleròmetre cap enrere, hauríem de llegir un valor inferior a 511 al llarg de l’eix y. I així és com deduïm, en codi, la direcció que hauria de conduir el rover. Però això també significa que hem de mantenir l’acceleròmetre realment constant i alineat paral·lel a una superfície plana per poder llegir un 511 al llarg dels dos eixos. per tal que el rover estacionés encara. Per facilitar una mica aquesta tasca, definim certs llindars que formen un límit, tal com es mostra a la figura, de manera que el rover romangui estacionari sempre que les lectures x i y estiguin dins dels límits i sabem amb seguretat que el rover s’ha d’establir a moviment un cop superat el llindar.

Per exemple, si l'eix y diu 543, sabem que l'acceleròmetre està inclinat cap endavant, hem de dirigir el rover cap endavant. Ho fem configurant els pins D2 i D4 HIGH i els pins D3 i D5 LOW. Ara, atès que aquests pins estan connectats directament a l'HT-12E, els senyals es serialitzen i s'activen al transmissor de RF només per ser capturats pel receptor de RF assegut al rover, que amb l'ajut de l'HT-12D deserialitza els senyals i els transmet al L293D, que al seu torn interpreta aquests senyals i condueix els motors cap endavant

Tanmateix, és possible que vulgueu canviar aquests llindars per calibrar la sensibilitat. Una manera senzilla de fer-ho és connectar simplement l’acceleròmetre al vostre Arduino i executar un esbós que escup les lectures xy al monitor sèrie. Ara només cal moure l’acceleròmetre una mica, fer un cop d’ull a les lectures i decidir els llindars.

I ja està! Pengeu el codi al vostre Arduino i gaudiu-ne !! O potser no tan aviat:-(Si no ometeu la secció de bonificació, carregar el codi al vostre ATmega significaria una mica més de treball. Teniu dues opcions:

Opció A: utilitzeu un dispositiu USB a sèrie, com ara la placa bàsica FTDI FT232. Simplement executeu els cables des de la capçalera TTL fins als pins corresponents de l'ATmega segons el mapatge següent:

Pins al tauler de ruptura Pins al microcontrolador
DTR / GRN RST / Restabliment (pin 1) mitjançant tap de 0,1 µF
Rx Tx (Pin 3)
Tx Rx (pin 2)
Vcc + 5v de sortida
CTS (no utilitzat)
Gnd Terra

Ara, connecteu un extrem d’un cable USB a la placa de sortida i l’altre al vostre ordinador i pengeu el codi tal com ho faríeu normalment: llanceu l’Arduino IDE, seleccioneu un port sèrie adequat, configureu el tipus de placa, compileu l’esbós i premeu la càrrega..

Opció B: utilitzeu una UNO si en teniu una en algun lloc. Només cal que connecteu el vostre ATmega a l’UNO, carregueu el codi com ho faríeu normalment, traieu l’IC i torneu-lo a introduir al circuit del transmissor. Tan fàcil com el pastís!

Qualsevol d’aquestes opcions hauria de funcionar, suposant que era prou intel·ligent per gravar el carregador d’arrencada abans de fer-lo servir al vostre ATmega o, si fins i tot era més intel·ligent per comprar un ATmega amb el carregador d’arrencada ja instal·lat. Si no, seguiu els passos que es descriuen aquí i feu-ho.

Andddd, ja hem acabat oficialment! Espero que us hagi agradat aquesta instrucció estranyament llarga. Ara, continueu, acabeu de construir el vostre rover si encara no heu acabat, jugueu-hi una estona i torneu a inundar la secció de comentaris de sota amb consultes i / o crítiques constructives.

Gràcies

P. S. El motiu pel qual no he penjat cap foto del projecte acabat és, doncs, perquè no l’he completat jo. A mig construir-lo, vaig pensar en alguns augments, com ara el control de velocitat, l’evitació d’obstacles i potser un LCD al rover, cosa que en realitat no és tan difícil si fem servir un microcontrolador tant en els extrems transmissors com en els extrems receptors. Però, per què no fer-ho de la manera més difícil ?! Per tant, actualment estic treballant en aquesta direcció i publicaré una actualització tan aviat com doni fruits. Tot i això, vaig provar el codi i el disseny amb l'ajut d'un prototip ràpid que vaig construir utilitzant mòduls d'un dels meus projectes anteriors; podeu fer una ullada al vídeo aquí.

Recomanat: